diff --git a/doc/404.html b/doc/404.html index aa78f592ea..64fcf7862d 100644 --- a/doc/404.html +++ b/doc/404.html @@ -18,13 +18,13 @@ - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/doc/adr/1/index.html b/doc/adr/1/index.html index 8c5a8c7523..543a047667 100644 --- a/doc/adr/1/index.html +++ b/doc/adr/1/index.html @@ -18,7 +18,7 @@ - + @@ -37,7 +37,7 @@ adr-tools. This does not imply we will be using adr-tools itself.

Consequences​

See Michael Nygard's article, linked above.

- + \ No newline at end of file diff --git a/doc/adr/2/index.html b/doc/adr/2/index.html index aa43a1c9fe..f4d0e4df0e 100644 --- a/doc/adr/2/index.html +++ b/doc/adr/2/index.html @@ -18,7 +18,7 @@ - + @@ -31,7 +31,7 @@
Β· One min read

Status​

Draft

Context​

Decision​

Therefore

Consequences​

- + \ No newline at end of file diff --git a/doc/adr/3/index.html b/doc/adr/3/index.html index 41b92a41ba..a007661ac3 100644 --- a/doc/adr/3/index.html +++ b/doc/adr/3/index.html @@ -18,7 +18,7 @@ - + @@ -33,7 +33,7 @@ ​

  1. Create a branch on the last release tag with the following scheme: hotfix/{last_distribution-version}.{last_patch_number + 1}.
  2. Development of the fix is done on this branch.
  3. After each commit on this branch, the CI creates an unstable tag & release which is not deployed on testing environment (testing must be done on an ad hoc environment manually created).
  4. Push a tag on the branch last commit using the branch distribution version with a -hotfix suffix.
  5. The CI gets the built artifacts associated with this commit and generates a named pre-release which is deployed on pre-release for testing.
  6. In the release GitHub interface, edit the newly generated release, uncheck the This is a pre-release checkbox.
  7. The CI gets the built artifacts associated with this commit and generates a named release which is deployed on release.
  8. Merge the hotfix branch on main branch (and adapt the changes if they are not compatible with the current main branch).
- + \ No newline at end of file diff --git a/doc/adr/4/index.html b/doc/adr/4/index.html index 76aa4df387..8ceb9d39bc 100644 --- a/doc/adr/4/index.html +++ b/doc/adr/4/index.html @@ -18,7 +18,7 @@ - + @@ -30,7 +30,7 @@

4. Mithril Network Upgrade Strategy

Β· 4 min read

Status​

Draft

Context​

When we will run Mithril on mainnet there will be thousands of signers running. Upgrading the version of the nodes has an impact as different versions of API, messages, signature may lead to loss of a significant part of the signers population over one epoch or more. In any case we must prevent a gap in the certificate chain while upgrading critical parts.

We need to be able to keep enough of signer nodes and the aggregator able to work together in order to produce at least one certificate per epoch.

Examples of such changes:

  • change in the message structure
  • change in the cryptographic algorithm
  • change in communication channels

Decision​

In order to synchronize all nodes behavior transition, the Release Team will define Eras that start at a given Cardano Epoch and lasts until the next Era begins. When nodes detect an Era change, they switch from old to new behavior hence all transitioning at almost the same time.

Consequences​

Release Team​

The release team is the team responsible of releasing new versions of Mithril software. The Release Team will be responsible to set the Epoch at which Eras change using an Era Activation Marker. In order to be able to determine when the new Era will begin, the Release Team has to know what is the share of the total Mithril stake that can run the new behavior. Signer node software versions has to be monitored.

Version monitoring​

The Release Team must be aware of the software version run by the Signer nodes and their associated stake. The version is going to be added to all HTTP headers in inter-node communication. In a first step, the Aggregator nodes will record this information, and provide the mapping of stakes to Signer nodes.

This configuration works in the case where there is a centralized Aggregator Node (as it is today). In the future, there may be several Aggregator nodes working in a decentralized manner. This would mean having a separate monitoring service, and also monitor the aggregators node versions.

Era Activation Marker​

An Era Activation Marker is an information shared among all the nodes. For every upgrade, there are two phases:

  • a first marker is set on the blockchain that just indicates a new Era will start soon and softwares shall be updated.
  • a second marker is set that specifies the Epoch when they must switch from old to new behavior.

Every Era Activation Marker will be a transaction in the Cardano blockchain. This implies the nodes must be able to read transactions of the blockchain. Era Activation Markers can be of the same type, the first maker does not hold any Epoch information whereas the second does.

Node will check the blockchain for Markers at startup and for every new Epoch. When a node detects a Marker, it will warn the user if it does not support the incoming Era that he must upgrade his node. If the node detects it does not support the current Era, it will stop working with an explicit error message. To ease that operation, Era Activation Marker will be made sortable.

Behavior Switch​

The nodes must be able to switch from one behavior to another when the Era Epoch is reached. This means the software must embed both behaviors. The switch is developed as a one time operation, there is no rollback mechanism available. Once the Epoch is transitioned and the switch has occurred, a new software release can remove the old behavior from the codebase.

- + \ No newline at end of file diff --git a/doc/adr/archive/index.html b/doc/adr/archive/index.html index 79147cee59..0a54331522 100644 --- a/doc/adr/archive/index.html +++ b/doc/adr/archive/index.html @@ -18,7 +18,7 @@ - + @@ -28,7 +28,7 @@
  • April 21, 2022 - 1. Record Architecture Decisions
  • 2023

    - + \ No newline at end of file diff --git a/doc/adr/index.html b/doc/adr/index.html index b89cfed49b..372e116365 100644 --- a/doc/adr/index.html +++ b/doc/adr/index.html @@ -18,7 +18,7 @@ - + @@ -41,7 +41,7 @@ documents stored under docs/adr directory, as exemplified in Nat Pryce's adr-tools. This does not imply we will be using adr-tools itself.

    Consequences​

    See Michael Nygard's article, linked above.

    - + \ No newline at end of file diff --git a/doc/adr/tags/accepted/index.html b/doc/adr/tags/accepted/index.html index 98b17b21eb..f859223095 100644 --- a/doc/adr/tags/accepted/index.html +++ b/doc/adr/tags/accepted/index.html @@ -18,7 +18,7 @@ - + @@ -36,7 +36,7 @@ documents stored under docs/adr directory, as exemplified in Nat Pryce's adr-tools. This does not imply we will be using adr-tools itself.

    Consequences​

    See Michael Nygard's article, linked above.

    - + \ No newline at end of file diff --git a/doc/adr/tags/draft/index.html b/doc/adr/tags/draft/index.html index 16f40e05ce..2c4049bc5d 100644 --- a/doc/adr/tags/draft/index.html +++ b/doc/adr/tags/draft/index.html @@ -18,7 +18,7 @@ - + @@ -33,7 +33,7 @@ In case of a blocking issue (following a distribution release) on the release environment that requires an immediate fix: ​

    1. Create a branch on the last release tag with the following scheme: hotfix/{last_distribution-version}.{last_patch_number + 1}.
    2. Development of the fix is done on this branch.
    3. After each commit on this branch, the CI creates an unstable tag & release which is not deployed on testing environment (testing must be done on an ad hoc environment manually created).
    4. Push a tag on the branch last commit using the branch distribution version with a -hotfix suffix.
    5. The CI gets the built artifacts associated with this commit and generates a named pre-release which is deployed on pre-release for testing.
    6. In the release GitHub interface, edit the newly generated release, uncheck the This is a pre-release checkbox.
    7. The CI gets the built artifacts associated with this commit and generates a named release which is deployed on release.
    8. Merge the hotfix branch on main branch (and adapt the changes if they are not compatible with the current main branch).

    Β· One min read

    Status​

    Draft

    Context​

    Decision​

    Therefore

    Consequences​

    - + \ No newline at end of file diff --git a/doc/adr/tags/index.html b/doc/adr/tags/index.html index 7b221e11fa..afb2fbe10d 100644 --- a/doc/adr/tags/index.html +++ b/doc/adr/tags/index.html @@ -18,7 +18,7 @@ - + @@ -28,7 +28,7 @@
  • 2. Use simple structured logging
  • 1. Record Architecture Decisions
  • Tags

    - + \ No newline at end of file diff --git a/doc/aggregator-api/index.html b/doc/aggregator-api/index.html index 3744b04fbc..e16bb014d7 100644 --- a/doc/aggregator-api/index.html +++ b/doc/aggregator-api/index.html @@ -24,7 +24,7 @@ - + @@ -125,7 +125,7 @@

    Request samples

    Content type
    application/json
    {
    • "party_id": "1234567890",
    • "index": 25,
    • "signature": "VhBc9P24qQwKgWw4mr5kRAsB0vSvijo8FIfrG/FwBtdCNQZL+IUA9XXuAsB0vSvijo8FIfrG/FwBtdCNQ7RiCHSRem3MmHoKbo"
    }

    Response samples

    Content type
    application/json
    {
    • "label": "string",
    • "message": "An error occurred, the operation could not be completed"
    }
    - + \ No newline at end of file diff --git a/doc/assets/js/146c26a3.4932bdb5.js b/doc/assets/js/146c26a3.d97c181b.js similarity index 86% rename from doc/assets/js/146c26a3.4932bdb5.js rename to doc/assets/js/146c26a3.d97c181b.js index f3257e4591..ebc1010dfb 100644 --- a/doc/assets/js/146c26a3.4932bdb5.js +++ b/doc/assets/js/146c26a3.d97c181b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[2414],{3905:(e,a,t)=>{t.d(a,{Zo:()=>l,kt:()=>h});var n=t(67294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function d(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=n.createContext({}),c=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},l=function(e){var a=c(e.components);return n.createElement(s.Provider,{value:a},e.children)},f="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},b=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,d=e.originalType,s=e.parentName,l=r(e,["components","mdxType","originalType","parentName"]),f=c(t),b=o,h=f["".concat(s,".").concat(b)]||f[b]||p[b]||d;return t?n.createElement(h,i(i({ref:a},l),{},{components:t})):n.createElement(h,i({ref:a},l))}));function h(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var d=t.length,i=new Array(d);i[0]=b;var r={};for(var s in a)hasOwnProperty.call(a,s)&&(r[s]=a[s]);r.originalType=e,r[f]="string"==typeof e?e:o,i[1]=r;for(var c=2;c{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>d,metadata:()=>r,toc:()=>c});var n=t(87462),o=(t(67294),t(3905));const d={sidebar_position:3},i="Run a Private Mithril network",r={unversionedId:"manual/getting-started/run-mithril-devnet",id:"version-maintained/manual/getting-started/run-mithril-devnet",title:"Run a Private Mithril network",description:"In this guide, you will learn how to run a demonstration of a Mithril Network working on top of a private devnet Cardano Network. This network is completely autonomous and setup to produce Mithril snapshots every 1 minute.",source:"@site/versioned_docs/version-maintained/manual/getting-started/run-mithril-devnet.md",sourceDirName:"manual/getting-started",slug:"/manual/getting-started/run-mithril-devnet",permalink:"/doc/manual/getting-started/run-mithril-devnet",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/getting-started/run-mithril-devnet.md",tags:[],version:"maintained",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docSideBar",previous:{title:"Run a Mithril Signer node (SPO)",permalink:"/doc/manual/getting-started/run-signer-node"},next:{title:"Developer Docs",permalink:"/doc/category/developer-docs"}},s={},c=[{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Download source",id:"download-source",level:2},{value:"Change directory",id:"change-directory",level:2},{value:"Run a Private Mithril/Cardano network locally (devnet)",id:"run-a-private-mithrilcardano-network-locally-devnet",level:2},{value:"Step 1: Launch the devnet",id:"step-1-launch-the-devnet",level:3},{value:"Step 2: Query the devnet",id:"step-2-query-the-devnet",level:3},{value:"Step 3: Observe the devnet",id:"step-3-observe-the-devnet",level:3},{value:"Interact with the Mithril Aggregator by using the Mithril Client",id:"interact-with-the-mithril-aggregator-by-using-the-mithril-client",level:2},{value:"Step 1: Prepare some useful variables",id:"step-1-prepare-some-useful-variables",level:3},{value:"Step 2: Select A Snapshot",id:"step-2-select-a-snapshot",level:3},{value:"Step 3: Show Snapshot Details",id:"step-3-show-snapshot-details",level:3},{value:"Step 4: Download Selected Snapshot",id:"step-4-download-selected-snapshot",level:3},{value:"Step 5: Restore Selected Snapshot",id:"step-5-restore-selected-snapshot",level:3}],l={toc:c},f="wrapper";function p(e){let{components:a,...d}=e;return(0,o.kt)(f,(0,n.Z)({},l,d,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"run-a-private-mithril-network"},"Run a Private Mithril network"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"In this guide, you will learn how to run a demonstration of a ",(0,o.kt)("strong",{parentName:"p"},"Mithril Network")," working on top of a private ",(0,o.kt)("inlineCode",{parentName:"p"},"devnet")," ",(0,o.kt)("strong",{parentName:"p"},"Cardano Network"),". This network is completely autonomous and setup to produce Mithril snapshots every 1 minute.")),(0,o.kt)("p",null,"The network will be launched with the following topology:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2")," ",(0,o.kt)("strong",{parentName:"li"},"Cardano Nodes")," configured as ",(0,o.kt)("strong",{parentName:"li"},"Stake Pool Operators (SPO)")," with a ",(0,o.kt)("strong",{parentName:"li"},"Mithril Signer")," on top"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"1")," ",(0,o.kt)("strong",{parentName:"li"},"Cardano Node")," configured as ",(0,o.kt)("strong",{parentName:"li"},"BFT node")," with a ",(0,o.kt)("strong",{parentName:"li"},"Mithril Aggregator")," on top")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Devnet Topology",src:t(51517).Z,width:"1010",height:"749"})),(0,o.kt)("admonition",{type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"This demonstration is working only on a Linux machine.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"More information about this private Cardano/Mithril ",(0,o.kt)("inlineCode",{parentName:"p"},"devnet")," is available ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/mithril/blob/main/mithril-test-lab/mithril-devnet/README.md"},"here"),".")),(0,o.kt)("h1",{id:"video-demonstration"},"Video demonstration"),(0,o.kt)("iframe",{style:{width:"100%",height:"480px"},src:"https://www.youtube.com/embed/qu3GoO1UwYI",title:"Run a Private Mithril network",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"true"}),(0,o.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install a ",(0,o.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"correctly configured")," Rust toolchain (latest stable version).")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run ",(0,o.kt)("inlineCode",{parentName:"p"},"apt install libssl-dev"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Ensure SQLite3 library is installed on your system and its version is at least ",(0,o.kt)("inlineCode",{parentName:"p"},"3.40"),". Run ",(0,o.kt)("inlineCode",{parentName:"p"},"sqlite3 --version")," to check your version."))),(0,o.kt)("h2",{id:"download-source"},"Download source"),(0,o.kt)("p",null,"Download from GitHub (HTTPS)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/input-output-hk/mithril.git\n")),(0,o.kt)("p",null,"Or (SSH)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:input-output-hk/mithril.git\n")),(0,o.kt)("h2",{id:"change-directory"},"Change directory"),(0,o.kt)("p",null,"Go to the devnet folder"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril-test-lab/mithril-devnet\n")),(0,o.kt)("h2",{id:"run-a-private-mithrilcardano-network-locally-devnet"},"Run a Private Mithril/Cardano network locally (",(0,o.kt)("inlineCode",{parentName:"h2"},"devnet"),")"),(0,o.kt)("h3",{id:"step-1-launch-the-devnet"},"Step 1: Launch the devnet"),(0,o.kt)("p",null,"Open a first terminal window."),(0,o.kt)("p",null,"Run a devnet with 1 BTF and 2 SPO Cardano nodes."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Option 1"),": Remote Docker images"),(0,o.kt)("p",null,"The network will be ready faster with remote Docker images."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"MITHRIL_IMAGE_ID=latest NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh\n")),(0,o.kt)("p",null,"Or"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Option 2"),": Local Docker images"),(0,o.kt)("p",null,"This takes more time to build local Docker images of the Mithril nodes"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You will see that the devnet is launched with the following steps:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Bootstraping the devnet"),": generates the artifacts of the devnet depending on the configuration parameters (cryptographic keys, network topology, transactions to setup pool nodes, ...)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Start Cardano Network"),": run the nodes of the ",(0,o.kt)("strong",{parentName:"li"},"Cardano Network"),", waits for it to be ready and activate the pool nodes"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Start Mithril Network"),": run the nodes of the ",(0,o.kt)("strong",{parentName:"li"},"Mithril Network")," that works on top of the ",(0,o.kt)("strong",{parentName:"li"},"Cardano Network")))),(0,o.kt)("p",null,"You should see the following information displayed"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'=====================================================================\n Bootstrap Mithril/Cardano devnet\n=====================================================================\n\n>> Directory: artifacts\n>> Cardano BFT nodes: 1\n>> Cardano SPO nodes: 2\n>> Info: Mithril Aggregator will be attached to the first Cardano BFT node\n>> Info: Mithril Signers will be attached to each Cardano SPO node\n\n=====================================================================\n Start Cardano nodes\n=====================================================================\n\n>> Start Cardano network\ncardano-node: no process found\n>> Starting Cardano node \'node-bft1\'\n>> Starting Cardano node \'node-pool1\'\n>> Starting Cardano node \'node-pool2\'\n>> Wait for Cardano network to be ready\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Ready!\n>> Activate Cardano pools\nEstimated transaction fee: Lovelace 843\nTransaction successfully submitted.\nEstimated transaction fee: Lovelace 843\nTransaction successfully submitted.\n>> Wait for Cardano pools to be activated\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Activated!\n>>>> Found PoolId: pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys\n>>>> Found PoolId: pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav\n\n=====================================================================\n Start Mithril nodes\n=====================================================================\n\n>> Start Mithril network\n>> Build Mithril node Docker images\n>>>> Building Mithril Aggregator node Docker image\n>>>> Building Mithril Client node Docker image\n>>>> Building Mithril Signer node Docker image\nNo stopped containers\nCreating network "artifacts_cardano_network" with driver "bridge"\nCreating network "artifacts_mithril_network" with driver "bridge"\nCreating artifacts_mithril-aggregator_1 ... done\nCreating artifacts_mithril-signer-node-pool1_1 ... done\nCreating artifacts_mithril-signer-node-pool2_1 ... done\nCreating artifacts_mithril-aggregator-genesis_run ... done\n{"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 }, url_snapshot_manifest: \\"\\", 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"}\n{"msg":"New LocalSnapshotUploader created","v":0,"name":"slog-rs","level":20Genesis bootstrap for test only\n,"time":"2022-09-06T09:24:31.925683285Z","hostname":"e932dff845aa","pid":1,"snapshot_server_url":"http://0.0.0.0:8080/"}\n{"msg":"New MultiSignerImpl created","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.925711468Z","hostname":"e932dff845aa","pid":1}\n{"msg":"New MithrilCertificateVerifier created","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.925736796Z","hostname":"e932dff845aa","pid":1}\n{"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}\n{"msg":"Get next signers with stake","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938384324Z","hostname":"e932dff845aa","pid":1}\n{"msg":"Get next stake distribution","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938422585Z","hostname":"e932dff845aa","pid":1}\n{"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}\n{"msg":"Get next protocol parameters","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938500461Z","hostname":"e932dff845aa","pid":1}\n{"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}\n{"msg":"Create clerk","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.93856896Z","hostname":"e932dff845aa","pid":1}\nVerify genesis certificate #86a4c56d957636740a75c250fdd9d3b9a9f1539dc93449b1f80fcab49e279d6d @ epoch #10\n\n=====================================================================\n Schedule Cardano Stake Delegation\n=====================================================================\n\n>> Begin scheduled delegation\n>> 11:24:32: Wait 180s until next delegation round...\n>> Run delegation round #1!\n>>>> Current Epoch: 12\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\n>> 11:27:32: Wait 180s until next delegation round...\n>> Run delegation round #2!\n>>>> Current Epoch: 14\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\n>> 11:30:32: Wait 180s until next delegation round...\n')),(0,o.kt)("h3",{id:"step-2-query-the-devnet"},"Step 2: Query the devnet"),(0,o.kt)("p",null,"Open a second terminal window."),(0,o.kt)("p",null,"Watch the state queried from the devnet"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"watch -n 1 ./devnet-query.sh\n")),(0,o.kt)("p",null,"The networks will be queried every ",(0,o.kt)("inlineCode",{parentName:"p"},"1s")," and will display:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Certificate production informations gathered from the ",(0,o.kt)("strong",{parentName:"li"},"Mithril Network")),(0,o.kt)("li",{parentName:"ul"},"Utxo, Stake Pools, Stake Distribution from the ",(0,o.kt)("strong",{parentName:"li"},"Cardano Network"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'=====================================================================\n Query Mithril/Cardano devnet\n=====================================================================\n\n=====================================================================\n=== Mithril Network\n=====================================================================\n\n>> Query pending certificate\n{\n "beacon": {\n "network": "devnet",\n "epoch": 2,\n "immutable_file_number": 6\n },\n "protocol": {\n "k": 5,\n "m": 100,\n "phi_f": 0.65\n },\n "signers": []\n}\n\n>> Query snapshots\n[\n {\n "digest": "224b77ad9cbe7fc81e6808940d391b299c27e77d9978641025f382e2e5ddd2ac",\n "certificate_hash": "5b29543c4af0f369d40e1da53451ebd8a39c4263df1585eb072f54511c1e3333",\n "size": 7986,\n "created_at": "2022-07-05T11:26:55.855498395Z",\n "locations": [\n "http://0.0.0.0:8080/aggregator/snapshot/224b77ad9cbe7fc81e6808940d391b299c27e77d9978641025f382e2e5ddd2ac/download"\n ]\n },\n {\n "digest": "1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0",\n "certificate_hash": "be758b84a4b495e82af48747356946efb509ccbc4b44a9c985e3cb3099e35c94",\n "size": 6743,\n "created_at": "2022-07-05T11:26:35.658661878Z",\n "locations": [\n "http://0.0.0.0:8080/aggregator/snapshot/1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0/download"\n ]\n },\n {\n "digest": "fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1",\n "certificate_hash": "4254a6176afbe17967ad1671e4619e9a3f3412115a63dd0eb0f5e8b64094128a",\n "size": 6199,\n "created_at": "2022-07-05T11:26:20.470029035Z",\n "locations": [\n "http://0.0.0.0:8080/aggregator/snapshot/fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1/download"\n ]\n }\n]\n\n=====================================================================\n=== Cardano Network\n=====================================================================\n\n>> Query chain tip\n{\n "era": "Alonzo",\n "syncProgress": "100.00",\n "hash": "075fc8366d353b45debedfc6faa92148c8fad584d81dbb4ea7b8b4d121489452",\n "epoch": 2,\n "slot": 219,\n "block": 9\n}\n\n>> Query whole utxo\n TxHash TxIx Amount\n--------------------------------------------------------------------------------------\n4980fb7c90bc003f6af65778008732cd1b1a8c0873b7d622bfb7442f1312c9b5 0 447999157 lovelace + TxOutDatumNone\n4980fb7c90bc003f6af65778008732cd1b1a8c0873b7d622bfb7442f1312c9b5 1 2000000 lovelace + TxOutDatumNone\nc31e535531c9eb32bdd8f05e25204186333262674d24c6a770b6b120f020d9a9 0 448999157 lovelace + TxOutDatumNone\nc31e535531c9eb32bdd8f05e25204186333262674d24c6a770b6b120f020d9a9 1 1000000 lovelace + TxOutDatumNone\ned265b672873192ea1e9c19092e8f41947c28977438bcff580312de37cfbd46c 0 1002000000 lovelace + TxOutDatumNone\n\n>> Query stake pools\npool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys\npool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav\n\n>> Query stake distribution\n PoolId Stake frac\n------------------------------------------------------------------------------\npool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys 1.052e-3\npool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav 5.258e-4\n')),(0,o.kt)("h3",{id:"step-3-observe-the-devnet"},"Step 3: Observe the devnet"),(0,o.kt)("p",null,"Open a third terminal window."),(0,o.kt)("p",null,"Watch the logs of each node of the devnet"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"watch -n 1 LINES=5 ./devnet-log.sh\n")),(0,o.kt)("p",null,"The nodes will be queried every ",(0,o.kt)("inlineCode",{parentName:"p"},"1s")," and will display as below"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'=====================================================================\n Logs Mithril/Cardano devnet\n=====================================================================\n\n=====================================================================\n-- docker-compose logs --tail=5\n=====================================================================\nAttaching to artifacts_mithril-signer-node-pool1_1, artifacts_mithril-signer-node-pool2_1, artifacts_mithril-aggregator_1\nmithril-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}\nmithril-aggregator_1 | {"msg":"Get signer pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav","v":0,"name":"slog-rs","level":20,"time":"2022-07-05T11:29:32.72678048Z","hostname":"ba17593540ac","pid":1}\nmithril-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}\nmithril-aggregator_1 | {"msg":"Get signer pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys","v":0,"name":"slog-rs","level":20,"time":"2022-07-05T11:29:32.734529107Z","hostname":"ba17593540ac","pid":1}\nmithril-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}\nmithril-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}"}\nmithril-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}\nmithril-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}\nmithril-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}\nmithril-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}\nmithril-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}"}\nmithril-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}\nmithril-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}\nmithril-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}\nmithril-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}\n\n=====================================================================\n=====================================================================\ntail -n 22 ./node-bft1/node.log\n=====================================================================\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.76 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.75 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.76 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.26 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.75 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400\n[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\n=====================================================================\n\n=====================================================================\ntail -n 22 ./node-pool1/node.log\n=====================================================================\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.76 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.76 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.75 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.26 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.76 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400\n[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\n=====================================================================\n\n=====================================================================\ntail -n 22 ./node-pool2/node.log\n=====================================================================\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.75 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.76 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.75 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.25 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.76 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400\n[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\n=====================================================================\n\n')),(0,o.kt)("h2",{id:"interact-with-the-mithril-aggregator-by-using-the-mithril-client"},"Interact with the Mithril Aggregator by using the Mithril Client"),(0,o.kt)("h3",{id:"step-1-prepare-some-useful-variables"},"Step 1: Prepare some useful variables"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# Cardano network\nNETWORK=devnet\n\n# Aggregator API endpoint URL\nAGGREGATOR_ENDPOINT=http://localhost:8080/aggregator\n\n# Digest of the latest produced snapshot for convenience of the demo\n# You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2\nSNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')\n")),(0,o.kt)("h3",{id:"step-2-select-a-snapshot"},"Step 2: Select A Snapshot"),(0,o.kt)("p",null,"List the available snapshots with which you can bootstrap a Cardano node"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client list\n")),(0,o.kt)("p",null,"You will see a list of snapshots"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| Network | Digest | Size | Locations | Created |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 | 11808 | 1 | 2022-07-04T16:47:00.258482685Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | 60d9c6e014d22335b34f55f83da728667f04fc1c63152ccff0bce7d217d08447 | 10793 | 1 | 2022-07-04T16:46:45.069646321Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | a3c4bb5f413f1b9648f0a086b3752d25ec62b540b8390917a5a7e78809896d92 | 7991 | 1 | 2022-07-04T16:46:09.817821220Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | b952adaa04dbb42206c69589b9951660f40c7262b088b13434b7a446ec90bc36 | 6746 | 1 | 2022-07-04T16:45:49.616260734Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | 46425fdcfe89ad5ba41a7822a4395e21b539e80c20e2b10546017b14cdcd4e4b | 6196 | 1 | 2022-07-04T16:45:29.425195132Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n")),(0,o.kt)("h3",{id:"step-3-show-snapshot-details"},"Step 3: Show Snapshot Details"),(0,o.kt)("p",null,"Get some more details from a specific snapshot (Optional)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client show $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see more information about a snapshot"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+------------+-------------------------------------------------------------------------------------------------------------------+\n| Info | Value |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Network | devnet |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Digest | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Size | 11808 |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Location 1 | http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Created | 2022-07-04T16:47:00.258482685Z |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n")),(0,o.kt)("h3",{id:"step-4-download-selected-snapshot"},"Step 4: Download Selected Snapshot"),(0,o.kt)("p",null,"Download the selected snapshot from the remote location to your remote location"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client download $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the selected snapshot archive has been downloaded locally"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"Download success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 #1\nfrom http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download\nto /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/snapshot.archive.tar.gz\n")),(0,o.kt)("h3",{id:"step-5-restore-selected-snapshot"},"Step 5: Restore Selected Snapshot"),(0,o.kt)("p",null,"Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client restore $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the snapshot archive is unpacked and that the associated certificate is valid"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Unpacking snapshot...\nUnpack success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917\nto /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db\n\nRestore a Cardano Node with:\n\ndocker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data \\\n --mount type=bind,source="./data/devnet/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db",target=/data/db/ \\\n -e NETWORK=devnet \\\n inputoutput/cardano-node\n')))}p.isMDXComponent=!0},51517:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/devnet-topology-ca1bd25169f32020115ed1c52a4d1d59.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[2414],{3905:(e,a,t)=>{t.d(a,{Zo:()=>l,kt:()=>h});var n=t(67294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function d(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=n.createContext({}),c=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},l=function(e){var a=c(e.components);return n.createElement(s.Provider,{value:a},e.children)},f="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},b=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,d=e.originalType,s=e.parentName,l=r(e,["components","mdxType","originalType","parentName"]),f=c(t),b=o,h=f["".concat(s,".").concat(b)]||f[b]||p[b]||d;return t?n.createElement(h,i(i({ref:a},l),{},{components:t})):n.createElement(h,i({ref:a},l))}));function h(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var d=t.length,i=new Array(d);i[0]=b;var r={};for(var s in a)hasOwnProperty.call(a,s)&&(r[s]=a[s]);r.originalType=e,r[f]="string"==typeof e?e:o,i[1]=r;for(var c=2;c{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>d,metadata:()=>r,toc:()=>c});var n=t(87462),o=(t(67294),t(3905));const d={sidebar_position:3},i="Run a Private Mithril network",r={unversionedId:"manual/getting-started/run-mithril-devnet",id:"version-maintained/manual/getting-started/run-mithril-devnet",title:"Run a Private Mithril network",description:"In this guide, you will learn how to run a demonstration of a Mithril Network working on top of a private devnet Cardano Network. This network is completely autonomous and setup to produce Mithril snapshots every 1 minute.",source:"@site/versioned_docs/version-maintained/manual/getting-started/run-mithril-devnet.md",sourceDirName:"manual/getting-started",slug:"/manual/getting-started/run-mithril-devnet",permalink:"/doc/manual/getting-started/run-mithril-devnet",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/getting-started/run-mithril-devnet.md",tags:[],version:"maintained",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docSideBar",previous:{title:"Run a Mithril Signer node (SPO)",permalink:"/doc/manual/getting-started/run-signer-node"},next:{title:"Developer Docs",permalink:"/doc/category/developer-docs"}},s={},c=[{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Download source",id:"download-source",level:2},{value:"Change directory",id:"change-directory",level:2},{value:"Run a Private Mithril/Cardano network locally (devnet)",id:"run-a-private-mithrilcardano-network-locally-devnet",level:2},{value:"Step 1: Launch the devnet",id:"step-1-launch-the-devnet",level:3},{value:"Step 2: Query the devnet",id:"step-2-query-the-devnet",level:3},{value:"Step 3: Observe the devnet",id:"step-3-observe-the-devnet",level:3},{value:"Interact with the Mithril Aggregator by using the Mithril Client",id:"interact-with-the-mithril-aggregator-by-using-the-mithril-client",level:2},{value:"Step 1: Prepare some useful variables",id:"step-1-prepare-some-useful-variables",level:3},{value:"Step 2: Select A Snapshot",id:"step-2-select-a-snapshot",level:3},{value:"Step 3: Show Snapshot Details",id:"step-3-show-snapshot-details",level:3},{value:"Step 4: Download Selected Snapshot",id:"step-4-download-selected-snapshot",level:3},{value:"Step 5: Restore Selected Snapshot",id:"step-5-restore-selected-snapshot",level:3}],l={toc:c},f="wrapper";function p(e){let{components:a,...d}=e;return(0,o.kt)(f,(0,n.Z)({},l,d,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"run-a-private-mithril-network"},"Run a Private Mithril network"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"In this guide, you will learn how to run a demonstration of a ",(0,o.kt)("strong",{parentName:"p"},"Mithril Network")," working on top of a private ",(0,o.kt)("inlineCode",{parentName:"p"},"devnet")," ",(0,o.kt)("strong",{parentName:"p"},"Cardano Network"),". This network is completely autonomous and setup to produce Mithril snapshots every 1 minute.")),(0,o.kt)("p",null,"The network will be launched with the following topology:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2")," ",(0,o.kt)("strong",{parentName:"li"},"Cardano Nodes")," configured as ",(0,o.kt)("strong",{parentName:"li"},"Stake Pool Operators (SPO)")," with a ",(0,o.kt)("strong",{parentName:"li"},"Mithril Signer")," on top"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"1")," ",(0,o.kt)("strong",{parentName:"li"},"Cardano Node")," configured as ",(0,o.kt)("strong",{parentName:"li"},"BFT node")," with a ",(0,o.kt)("strong",{parentName:"li"},"Mithril Aggregator")," on top")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Devnet Topology",src:t(51517).Z,width:"1010",height:"749"})),(0,o.kt)("admonition",{type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"This demonstration is working only on a Linux machine.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"More information about this private Cardano/Mithril ",(0,o.kt)("inlineCode",{parentName:"p"},"devnet")," is available ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/mithril/blob/main/mithril-test-lab/mithril-devnet/README.md"},"here"),".")),(0,o.kt)("h1",{id:"video-demonstration"},"Video demonstration"),(0,o.kt)("iframe",{style:{width:"100%",height:"480px"},src:"https://www.youtube.com/embed/qu3GoO1UwYI",title:"Run a Private Mithril network",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"true"}),(0,o.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install a ",(0,o.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"correctly configured")," Rust toolchain (latest stable version).")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run ",(0,o.kt)("inlineCode",{parentName:"p"},"apt install libssl-dev"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Ensure SQLite3 library is installed on your system and its version is at least ",(0,o.kt)("inlineCode",{parentName:"p"},"3.40"),". Run ",(0,o.kt)("inlineCode",{parentName:"p"},"sqlite3 --version")," to check your version."))),(0,o.kt)("h2",{id:"download-source"},"Download source"),(0,o.kt)("p",null,"Download from GitHub (HTTPS)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/input-output-hk/mithril.git\n")),(0,o.kt)("p",null,"Or (SSH)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:input-output-hk/mithril.git\n")),(0,o.kt)("h2",{id:"change-directory"},"Change directory"),(0,o.kt)("p",null,"Go to the devnet folder"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril-test-lab/mithril-devnet\n")),(0,o.kt)("h2",{id:"run-a-private-mithrilcardano-network-locally-devnet"},"Run a Private Mithril/Cardano network locally (",(0,o.kt)("inlineCode",{parentName:"h2"},"devnet"),")"),(0,o.kt)("h3",{id:"step-1-launch-the-devnet"},"Step 1: Launch the devnet"),(0,o.kt)("p",null,"Open a first terminal window."),(0,o.kt)("p",null,"Run a devnet with 1 BTF and 2 SPO Cardano nodes."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Option 1"),": Remote Docker images"),(0,o.kt)("p",null,"The network will be ready faster with remote Docker images."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"MITHRIL_IMAGE_ID=latest NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh\n")),(0,o.kt)("p",null,"Or"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Option 2"),": Local Docker images"),(0,o.kt)("p",null,"This takes more time to build local Docker images of the Mithril nodes"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You will see that the devnet is launched with the following steps:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Bootstraping the devnet"),": generates the artifacts of the devnet depending on the configuration parameters (cryptographic keys, network topology, transactions to setup pool nodes, ...)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Start Cardano Network"),": run the nodes of the ",(0,o.kt)("strong",{parentName:"li"},"Cardano Network"),", waits for it to be ready and activate the pool nodes"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Start Mithril Network"),": run the nodes of the ",(0,o.kt)("strong",{parentName:"li"},"Mithril Network")," that works on top of the ",(0,o.kt)("strong",{parentName:"li"},"Cardano Network")))),(0,o.kt)("p",null,"You should see the following information displayed"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'=====================================================================\n Bootstrap Mithril/Cardano devnet\n=====================================================================\n\n>> Directory: artifacts\n>> Cardano BFT nodes: 1\n>> Cardano SPO nodes: 2\n>> Info: Mithril Aggregator will be attached to the first Cardano BFT node\n>> Info: Mithril Signers will be attached to each Cardano SPO node\n\n=====================================================================\n Start Cardano nodes\n=====================================================================\n\n>> Start Cardano network\ncardano-node: no process found\n>> Starting Cardano node \'node-bft1\'\n>> Starting Cardano node \'node-pool1\'\n>> Starting Cardano node \'node-pool2\'\n>> Wait for Cardano network to be ready\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Ready!\n>> Activate Cardano pools\nEstimated transaction fee: Lovelace 843\nTransaction successfully submitted.\nEstimated transaction fee: Lovelace 843\nTransaction successfully submitted.\n>> Wait for Cardano pools to be activated\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Activated!\n>>>> Found PoolId: pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys\n>>>> Found PoolId: pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav\n\n=====================================================================\n Start Mithril nodes\n=====================================================================\n\n>> Start Mithril network\n>> Build Mithril node Docker images\n>>>> Building Mithril Aggregator node Docker image\n>>>> Building Mithril Client node Docker image\n>>>> Building Mithril Signer node Docker image\nNo stopped containers\nCreating network "artifacts_cardano_network" with driver "bridge"\nCreating network "artifacts_mithril_network" with driver "bridge"\nCreating artifacts_mithril-aggregator_1 ... done\nCreating artifacts_mithril-signer-node-pool1_1 ... done\nCreating artifacts_mithril-signer-node-pool2_1 ... done\nCreating artifacts_mithril-aggregator-genesis_run ... done\n{"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 }, url_snapshot_manifest: \\"\\", 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"}\n{"msg":"New LocalSnapshotUploader created","v":0,"name":"slog-rs","level":20Genesis bootstrap for test only\n,"time":"2022-09-06T09:24:31.925683285Z","hostname":"e932dff845aa","pid":1,"snapshot_server_url":"http://0.0.0.0:8080/"}\n{"msg":"New MultiSignerImpl created","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.925711468Z","hostname":"e932dff845aa","pid":1}\n{"msg":"New MithrilCertificateVerifier created","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.925736796Z","hostname":"e932dff845aa","pid":1}\n{"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}\n{"msg":"Get next signers with stake","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938384324Z","hostname":"e932dff845aa","pid":1}\n{"msg":"Get next stake distribution","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938422585Z","hostname":"e932dff845aa","pid":1}\n{"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}\n{"msg":"Get next protocol parameters","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938500461Z","hostname":"e932dff845aa","pid":1}\n{"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}\n{"msg":"Create clerk","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.93856896Z","hostname":"e932dff845aa","pid":1}\nVerify genesis certificate #86a4c56d957636740a75c250fdd9d3b9a9f1539dc93449b1f80fcab49e279d6d @ epoch #10\n\n=====================================================================\n Schedule Cardano Stake Delegation\n=====================================================================\n\n>> Begin scheduled delegation\n>> 11:24:32: Wait 180s until next delegation round...\n>> Run delegation round #1!\n>>>> Current Epoch: 12\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\n>> 11:27:32: Wait 180s until next delegation round...\n>> Run delegation round #2!\n>>>> Current Epoch: 14\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\n>> 11:30:32: Wait 180s until next delegation round...\n')),(0,o.kt)("h3",{id:"step-2-query-the-devnet"},"Step 2: Query the devnet"),(0,o.kt)("p",null,"Open a second terminal window."),(0,o.kt)("p",null,"Watch the state queried from the devnet"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"watch -n 1 ./devnet-query.sh\n")),(0,o.kt)("p",null,"The networks will be queried every ",(0,o.kt)("inlineCode",{parentName:"p"},"1s")," and will display:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Certificate production informations gathered from the ",(0,o.kt)("strong",{parentName:"li"},"Mithril Network")),(0,o.kt)("li",{parentName:"ul"},"Utxo, Stake Pools, Stake Distribution from the ",(0,o.kt)("strong",{parentName:"li"},"Cardano Network"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'=====================================================================\n Query Mithril/Cardano devnet\n=====================================================================\n\n=====================================================================\n=== Mithril Network\n=====================================================================\n\n>> Query pending certificate\n{\n "beacon": {\n "network": "devnet",\n "epoch": 2,\n "immutable_file_number": 6\n },\n "protocol": {\n "k": 5,\n "m": 100,\n "phi_f": 0.65\n },\n "signers": []\n}\n\n>> Query snapshots\n[\n {\n "digest": "224b77ad9cbe7fc81e6808940d391b299c27e77d9978641025f382e2e5ddd2ac",\n "certificate_hash": "5b29543c4af0f369d40e1da53451ebd8a39c4263df1585eb072f54511c1e3333",\n "size": 7986,\n "created_at": "2022-07-05T11:26:55.855498395Z",\n "locations": [\n "http://0.0.0.0:8080/aggregator/snapshot/224b77ad9cbe7fc81e6808940d391b299c27e77d9978641025f382e2e5ddd2ac/download"\n ]\n },\n {\n "digest": "1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0",\n "certificate_hash": "be758b84a4b495e82af48747356946efb509ccbc4b44a9c985e3cb3099e35c94",\n "size": 6743,\n "created_at": "2022-07-05T11:26:35.658661878Z",\n "locations": [\n "http://0.0.0.0:8080/aggregator/snapshot/1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0/download"\n ]\n },\n {\n "digest": "fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1",\n "certificate_hash": "4254a6176afbe17967ad1671e4619e9a3f3412115a63dd0eb0f5e8b64094128a",\n "size": 6199,\n "created_at": "2022-07-05T11:26:20.470029035Z",\n "locations": [\n "http://0.0.0.0:8080/aggregator/snapshot/fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1/download"\n ]\n }\n]\n\n=====================================================================\n=== Cardano Network\n=====================================================================\n\n>> Query chain tip\n{\n "era": "Alonzo",\n "syncProgress": "100.00",\n "hash": "075fc8366d353b45debedfc6faa92148c8fad584d81dbb4ea7b8b4d121489452",\n "epoch": 2,\n "slot": 219,\n "block": 9\n}\n\n>> Query whole utxo\n TxHash TxIx Amount\n--------------------------------------------------------------------------------------\n4980fb7c90bc003f6af65778008732cd1b1a8c0873b7d622bfb7442f1312c9b5 0 447999157 lovelace + TxOutDatumNone\n4980fb7c90bc003f6af65778008732cd1b1a8c0873b7d622bfb7442f1312c9b5 1 2000000 lovelace + TxOutDatumNone\nc31e535531c9eb32bdd8f05e25204186333262674d24c6a770b6b120f020d9a9 0 448999157 lovelace + TxOutDatumNone\nc31e535531c9eb32bdd8f05e25204186333262674d24c6a770b6b120f020d9a9 1 1000000 lovelace + TxOutDatumNone\ned265b672873192ea1e9c19092e8f41947c28977438bcff580312de37cfbd46c 0 1002000000 lovelace + TxOutDatumNone\n\n>> Query stake pools\npool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys\npool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav\n\n>> Query stake distribution\n PoolId Stake frac\n------------------------------------------------------------------------------\npool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys 1.052e-3\npool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav 5.258e-4\n')),(0,o.kt)("h3",{id:"step-3-observe-the-devnet"},"Step 3: Observe the devnet"),(0,o.kt)("p",null,"Open a third terminal window."),(0,o.kt)("p",null,"Watch the logs of each node of the devnet"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"watch -n 1 LINES=5 ./devnet-log.sh\n")),(0,o.kt)("p",null,"The nodes will be queried every ",(0,o.kt)("inlineCode",{parentName:"p"},"1s")," and will display as below"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'=====================================================================\n Logs Mithril/Cardano devnet\n=====================================================================\n\n=====================================================================\n-- docker-compose logs --tail=5\n=====================================================================\nAttaching to artifacts_mithril-signer-node-pool1_1, artifacts_mithril-signer-node-pool2_1, artifacts_mithril-aggregator_1\nmithril-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}\nmithril-aggregator_1 | {"msg":"Get signer pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav","v":0,"name":"slog-rs","level":20,"time":"2022-07-05T11:29:32.72678048Z","hostname":"ba17593540ac","pid":1}\nmithril-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}\nmithril-aggregator_1 | {"msg":"Get signer pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys","v":0,"name":"slog-rs","level":20,"time":"2022-07-05T11:29:32.734529107Z","hostname":"ba17593540ac","pid":1}\nmithril-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}\nmithril-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}"}\nmithril-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}\nmithril-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}\nmithril-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}\nmithril-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}\nmithril-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}"}\nmithril-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}\nmithril-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}\nmithril-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}\nmithril-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}\n\n=====================================================================\n=====================================================================\ntail -n 22 ./node-bft1/node.log\n=====================================================================\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.76 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.75 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.76 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.26 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.75 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400\n[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\n=====================================================================\n\n=====================================================================\ntail -n 22 ./node-pool1/node.log\n=====================================================================\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.76 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.76 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.75 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.26 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.76 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400\n[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\n=====================================================================\n\n=====================================================================\ntail -n 22 ./node-pool2/node.log\n=====================================================================\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.75 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.76 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.75 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.25 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.76 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400\n[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\n=====================================================================\n\n')),(0,o.kt)("h2",{id:"interact-with-the-mithril-aggregator-by-using-the-mithril-client"},"Interact with the Mithril Aggregator by using the Mithril Client"),(0,o.kt)("h3",{id:"step-1-prepare-some-useful-variables"},"Step 1: Prepare some useful variables"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# Cardano network\nNETWORK=devnet\n\n# Aggregator API endpoint URL\nAGGREGATOR_ENDPOINT=http://localhost:8080/aggregator\n\n# Digest of the latest produced snapshot for convenience of the demo\n# You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2\nSNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')\n")),(0,o.kt)("h3",{id:"step-2-select-a-snapshot"},"Step 2: Select A Snapshot"),(0,o.kt)("p",null,"List the available snapshots with which you can bootstrap a Cardano node"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client list\n")),(0,o.kt)("p",null,"You will see a list of snapshots"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| Network | Digest | Size | Locations | Created |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 | 11808 | 1 | 2022-07-04T16:47:00.258482685Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | 60d9c6e014d22335b34f55f83da728667f04fc1c63152ccff0bce7d217d08447 | 10793 | 1 | 2022-07-04T16:46:45.069646321Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | a3c4bb5f413f1b9648f0a086b3752d25ec62b540b8390917a5a7e78809896d92 | 7991 | 1 | 2022-07-04T16:46:09.817821220Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | b952adaa04dbb42206c69589b9951660f40c7262b088b13434b7a446ec90bc36 | 6746 | 1 | 2022-07-04T16:45:49.616260734Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | 46425fdcfe89ad5ba41a7822a4395e21b539e80c20e2b10546017b14cdcd4e4b | 6196 | 1 | 2022-07-04T16:45:29.425195132Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n")),(0,o.kt)("h3",{id:"step-3-show-snapshot-details"},"Step 3: Show Snapshot Details"),(0,o.kt)("p",null,"Get some more details from a specific snapshot (Optional)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client show $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see more information about a snapshot"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+------------+-------------------------------------------------------------------------------------------------------------------+\n| Info | Value |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Network | devnet |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Digest | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Size | 11808 |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Location 1 | http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Created | 2022-07-04T16:47:00.258482685Z |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n")),(0,o.kt)("h3",{id:"step-4-download-selected-snapshot"},"Step 4: Download Selected Snapshot"),(0,o.kt)("p",null,"Download the selected snapshot from the remote location to your remote location"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client download $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the selected snapshot archive has been downloaded locally"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"Download success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 #1\nfrom http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download\nto /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/snapshot.archive.tar.gz\n")),(0,o.kt)("h3",{id:"step-5-restore-selected-snapshot"},"Step 5: Restore Selected Snapshot"),(0,o.kt)("p",null,"Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client restore $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the snapshot archive is unpacked and that the associated certificate is valid"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Unpacking snapshot...\nUnpack success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917\nto /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db\n\nRestore a Cardano Node with:\n\ndocker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data \\\n --mount type=bind,source="./data/devnet/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db",target=/data/db/ \\\n -e NETWORK=devnet \\\n inputoutput/cardano-node\n')))}p.isMDXComponent=!0},51517:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/devnet-topology-ca1bd25169f32020115ed1c52a4d1d59.png"}}]); \ No newline at end of file diff --git a/doc/assets/js/183a8603.4cb9eecd.js b/doc/assets/js/183a8603.4cb9eecd.js deleted file mode 100644 index fc760a4347..0000000000 --- a/doc/assets/js/183a8603.4cb9eecd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[9937,5569,5458],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>g});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function l(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),d=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):l(l({},e),t)),a},m=function(t){var e=d(t.components);return n.createElement(p.Provider,{value:e},t.children)},u="mdxType",s={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,i=t.originalType,p=t.parentName,m=o(t,["components","mdxType","originalType","parentName"]),u=d(a),k=r,g=u["".concat(p,".").concat(k)]||u[k]||s[k]||i;return a?n.createElement(g,l(l({ref:e},m),{},{components:a})):n.createElement(g,l({ref:e},m))}));function g(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=a.length,l=new Array(i);l[0]=k;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[u]="string"==typeof t?t:r,l[1]=o;for(var d=2;d{a.d(e,{Z:()=>l});var n=a(67294),r=a(86010);const i={tabItem:"tabItem_Ymn6"};function l(t){let{children:e,hidden:a,className:l}=t;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,l),hidden:a},e)}},74866:(t,e,a)=>{a.d(e,{Z:()=>y});var n=a(87462),r=a(67294),i=a(86010),l=a(12466),o=a(16550),p=a(91980),d=a(67392),m=a(50012);function u(t){return function(t){return r.Children.map(t,(t=>{if(!t||(0,r.isValidElement)(t)&&function(t){const{props:e}=t;return!!e&&"object"==typeof e&&"value"in e}(t))return t;throw new Error(`Docusaurus error: Bad child <${"string"==typeof t.type?t.type:t.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(t).map((t=>{let{props:{value:e,label:a,attributes:n,default:r}}=t;return{value:e,label:a,attributes:n,default:r}}))}function s(t){const{values:e,children:a}=t;return(0,r.useMemo)((()=>{const t=e??u(a);return function(t){const e=(0,d.l)(t,((t,e)=>t.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((t=>t.value)).join(", ")}" found in . Every value needs to be unique.`)}(t),t}),[e,a])}function k(t){let{value:e,tabValues:a}=t;return a.some((t=>t.value===e))}function g(t){let{queryString:e=!1,groupId:a}=t;const n=(0,o.k6)(),i=function(t){let{queryString:e=!1,groupId:a}=t;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,p._X)(i),(0,r.useCallback)((t=>{if(!i)return;const e=new URLSearchParams(n.location.search);e.set(i,t),n.replace({...n.location,search:e.toString()})}),[i,n])]}function N(t){const{defaultValue:e,queryString:a=!1,groupId:n}=t,i=s(t),[l,o]=(0,r.useState)((()=>function(t){let{defaultValue:e,tabValues:a}=t;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!k({value:e,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((t=>t.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((t=>t.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:i}))),[p,d]=g({queryString:a,groupId:n}),[u,N]=function(t){let{groupId:e}=t;const a=function(t){return t?`docusaurus.tab.${t}`:null}(e),[n,i]=(0,m.Nk)(a);return[n,(0,r.useCallback)((t=>{a&&i.set(t)}),[a,i])]}({groupId:n}),c=(()=>{const t=p??u;return k({value:t,tabValues:i})?t:null})();(0,r.useLayoutEffect)((()=>{c&&o(c)}),[c]);return{selectedValue:l,selectValue:(0,r.useCallback)((t=>{if(!k({value:t,tabValues:i}))throw new Error(`Can't select invalid tab value=${t}`);o(t),d(t),N(t)}),[d,N,i]),tabValues:i}}var c=a(72389);const h={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(t){let{className:e,block:a,selectedValue:o,selectValue:p,tabValues:d}=t;const m=[],{blockElementScrollPositionUntilNextRender:u}=(0,l.o5)(),s=t=>{const e=t.currentTarget,a=m.indexOf(e),n=d[a].value;n!==o&&(u(e),p(n))},k=t=>{let e=null;switch(t.key){case"Enter":s(t);break;case"ArrowRight":{const a=m.indexOf(t.currentTarget)+1;e=m[a]??m[0];break}case"ArrowLeft":{const a=m.indexOf(t.currentTarget)-1;e=m[a]??m[m.length-1];break}}e?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},e)},d.map((t=>{let{value:e,label:a,attributes:l}=t;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:o===e?0:-1,"aria-selected":o===e,key:e,ref:t=>m.push(t),onKeyDown:k,onClick:s},l,{className:(0,i.Z)("tabs__item",h.tabItem,l?.className,{"tabs__item--active":o===e})}),a??e)})))}function f(t){let{lazy:e,children:a,selectedValue:n}=t;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const t=i.find((t=>t.props.value===n));return t?(0,r.cloneElement)(t,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},i.map(((t,e)=>(0,r.cloneElement)(t,{key:e,hidden:t.props.value!==n}))))}function v(t){const e=N(t);return r.createElement("div",{className:(0,i.Z)("tabs-container",h.tabList)},r.createElement(b,(0,n.Z)({},t,e)),r.createElement(f,(0,n.Z)({},t,e)))}function y(t){const e=(0,c.Z)();return r.createElement(v,(0,n.Z)({key:String(e)},t))}},57977:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>l,default:()=>s,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var n=a(87462),r=(a(67294),a(3905));const i={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},l=void 0,o={unversionedId:"compiled-binaries",id:"version-maintained/compiled-binaries",title:"compiled-binaries",description:"Download compiled binary",source:"@site/versioned_docs/version-maintained/compiled-binaries.md",sourceDirName:".",slug:"/compiled-binaries",permalink:"/doc/compiled-binaries",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/compiled-binaries.md",tags:[],version:"maintained",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},p={},d=[{value:"Download compiled binary",id:"download-compiled-binary",level:2}],m={toc:d},u="wrapper";function s(t){let{components:e,...a}=t;return(0,r.kt)(u,(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"download-compiled-binary"},"Download compiled binary"),(0,r.kt)("p",null,"Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package."),(0,r.kt)("p",null,"You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting."),(0,r.kt)("p",null,"These links are available in the ",(0,r.kt)("strong",{parentName:"p"},"Build From")," column of the above ",(0,r.kt)("strong",{parentName:"p"},"Mithril Networks")," table."))}s.isMDXComponent=!0},42408:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>p,default:()=>g,frontMatter:()=>o,metadata:()=>d,toc:()=>u});var n=a(87462),r=(a(67294),a(3905)),i=a(5892),l=a(57977);const o={sidebar_position:3},p="Mithril Client Node",d={unversionedId:"manual/developer-docs/nodes/mithril-client",id:"version-maintained/manual/developer-docs/nodes/mithril-client",title:"Mithril Client Node",description:"This is the node of the Mithril Network responsible for restoring the Cardano blockchain on an empty node from a certified snapshot.",source:"@site/versioned_docs/version-maintained/manual/developer-docs/nodes/mithril-client.md",sourceDirName:"manual/developer-docs/nodes",slug:"/manual/developer-docs/nodes/mithril-client",permalink:"/doc/manual/developer-docs/nodes/mithril-client",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/developer-docs/nodes/mithril-client.md",tags:[],version:"maintained",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docSideBar",previous:{title:"Mithril Signer Node",permalink:"/doc/manual/developer-docs/nodes/mithril-signer"},next:{title:"API Reference",permalink:"/doc/manual/developer-docs/references"}},m={},u=[{value:"Resources",id:"resources",level:2},{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Download source",id:"download-source",level:2},{value:"Development test and build",id:"development-test-and-build",level:2},{value:"Release build and run binary",id:"release-build-and-run-binary",level:2},{value:"Run Docker container",id:"run-docker-container",level:2},{value:"Registry Image",id:"registry-image",level:3},{value:"Local Image",id:"local-image",level:3},{value:"Subcommands",id:"subcommands",level:2},{value:"Configuration parameters",id:"configuration-parameters",level:2}],s={toc:u},k="wrapper";function g(t){let{components:e,...a}=t;return(0,r.kt)(k,(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"mithril-client-node"},"Mithril Client Node"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This is the node of the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Network")," responsible for restoring the ",(0,r.kt)("strong",{parentName:"p"},"Cardano")," blockchain on an empty node from a certified snapshot.")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For more information about the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Network"),", please refer to the ",(0,r.kt)("a",{parentName:"p",href:"/doc/mithril/mithril-network/architecture"},"Architecture")," page.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For more information about the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Client"),", please refer to the ",(0,r.kt)("a",{parentName:"p",href:"/doc/mithril/mithril-network/client"},"Client Node")," page.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Checkout the ",(0,r.kt)("a",{parentName:"p",href:"/doc/manual/getting-started/bootstrap-cardano-node"},(0,r.kt)("inlineCode",{parentName:"a"},"Bootstrap a Cardano Node"))," guide.")))),(0,r.kt)("admonition",{title:"Mithril Networks",type:"note"},(0,r.kt)(i.default,{mdxType:"NetworksMatrix"})),(0,r.kt)("h2",{id:"resources"},"Resources"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Node"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Source Repository"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Rust Documentation"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Docker Packages"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("strong",{parentName:"td"},"Mithril Client")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/tree/main/mithril-client"},"\u2197\ufe0f")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/mithril-client/doc/mithril_client/index.html"},"\u2197\ufe0f")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/pkgs/container/mithril-client"},"\u2197\ufe0f"))))),(0,r.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install a ",(0,r.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"correctly configured")," Rust toolchain (latest stable version)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run ",(0,r.kt)("inlineCode",{parentName:"p"},"apt install libssl-dev")))),(0,r.kt)("h2",{id:"download-source"},"Download source"),(0,r.kt)("p",null,"Download from GitHub (HTTPS)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/input-output-hk/mithril.git\n")),(0,r.kt)("p",null,"Or (SSH)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:input-output-hk/mithril.git\n")),(0,r.kt)("p",null,"Switch to build branch / tag"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, \n# please refer to the **Build From** column of the above **Mithril Networks** table\ngit switch **YOUR_BUILD_BRANCH_OR_TAG**\n")),(0,r.kt)("p",null,"Change directory"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril/mithril-client\n")),(0,r.kt)("h2",{id:"development-test-and-build"},"Development test and build"),(0,r.kt)("p",null,"Run tests"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make test\n")),(0,r.kt)("p",null,"Create the help menu"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make help\n")),(0,r.kt)("p",null,"Generate the Rust documentation"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make doc\n")),(0,r.kt)("p",null,"Run in debug mode with default configuration"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make debug\n")),(0,r.kt)("h2",{id:"release-build-and-run-binary"},"Release build and run binary"),(0,r.kt)("p",null,"Build and run in release with default configuration"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make run\n")),(0,r.kt)("p",null,"Or, build only in release"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make build\n")),(0,r.kt)("p",null,"Display the help menu"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client --help\n")),(0,r.kt)("p",null,"You should see"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"This program downloads, checks and restores certified blockchain snapshots.\n\nUsage: mithril-client [OPTIONS] \n\nCommands:\n list List available snapshots\n show Show detailed informations about a snapshot\n download Download a snapshot\n restore Restore a snapshot\n help Print this message or the help of the given subcommand(s)\n\nOptions:\n --run-mode \n Run Mode [env: RUN_MODE=] [default: dev]\n -v, --verbose...\n Verbosity level (-v=warning, -vv=info, -vvv=debug)\n --config-directory \n Directory where configuration file is located [default: ./config]\n --aggregator-endpoint \n Override configuration Aggregator endpoint URL\n -h, --help\n Print help information\n -V, --version\n Print version information\n\n")),(0,r.kt)("p",null,"Run in release with default configuration"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client\n")),(0,r.kt)("p",null,"Run in release with a specific mode"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client --run-mode preview\n")),(0,r.kt)("p",null,"Run in release with a custom configuration via env vars"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**) NETWORK=**YOUR_CARDANO_NETWORK** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./mithril-client\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"You can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"--json")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"-j"),") option in order to display results in ",(0,r.kt)("inlineCode",{parentName:"p"},"JSON")," format for the ",(0,r.kt)("inlineCode",{parentName:"p"},"list")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"show")," commands:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client list --json\n"))),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"If you want to dig deeper, you can get access to several level of logs from the Mithril Client:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-v")," for some logs (WARN)"),(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-vv")," for more logs (INFO)"),(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-vvv")," for even more logs (DEBUG)"),(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-vvvv")," for all logs (TRACE)"))),(0,r.kt)(l.default,{mdxType:"CompiledBinaries"}),(0,r.kt)("h2",{id:"run-docker-container"},"Run Docker container"),(0,r.kt)("h3",{id:"registry-image"},"Registry Image"),(0,r.kt)("p",null,"The list of available images on the registry is listed ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/mithril/pkgs/container/mithril-client"},"here")),(0,r.kt)("p",null,"Prepare environment variables (values can be retrieved on the above ",(0,r.kt)("strong",{parentName:"p"},"Mithril Networks")," table)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**\nexport NETWORK=**YOUR_CARDANO_NETWORK**\nexport AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**\nexport GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)\nexport SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')\n")),(0,r.kt)("p",null,"Here is an example configuration for the ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod")," network and the ",(0,r.kt)("inlineCode",{parentName:"p"},"latest")," stable Docker image"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=latest\nexport NETWORK=preprod\nexport AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator\nexport GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)\nexport SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')\n")),(0,r.kt)("p",null,"Then create a shell function for the Mithril Client"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mithril_client () {\n docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@\n}\n")),(0,r.kt)("p",null,"Now you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"mithril_client")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# 1- Help\nmithril_client help\n\n# 2- List snapshots\nmithril_client list\n\n# 3- Download latest snapshot\nmithril_client download $SNAPSHOT_DIGEST\n\n# 4- Restore latest snapshot\nmithril_client restore $SNAPSHOT_DIGEST\n")),(0,r.kt)("h3",{id:"local-image"},"Local Image"),(0,r.kt)("p",null,"Build a local Docker image"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make docker-build\n")),(0,r.kt)("p",null,"Run a local Docker container"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make docker-run\n")),(0,r.kt)("h2",{id:"subcommands"},"Subcommands"),(0,r.kt)("p",null,"Here are the subcommands available:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Subcommand"),(0,r.kt)("th",{parentName:"tr",align:null},"Performed action"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"download")),(0,r.kt)("td",{parentName:"tr",align:null},"Download a snapshot")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"help")),(0,r.kt)("td",{parentName:"tr",align:null},"Print this message or the help of the given subcommand(s)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"list")),(0,r.kt)("td",{parentName:"tr",align:null},"List available snapshots")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"restore")),(0,r.kt)("td",{parentName:"tr",align:null},"Restore a snapshot")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"show")),(0,r.kt)("td",{parentName:"tr",align:null},"Informations about a snapshot")))),(0,r.kt)("h2",{id:"configuration-parameters"},"Configuration parameters"),(0,r.kt)("p",null,"The configuration parameters are set either:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"In a configuration file (depending on the ",(0,r.kt)("inlineCode",{parentName:"li"},"--run-mode")," parameter). If runtime mode is ",(0,r.kt)("inlineCode",{parentName:"li"},"testnet")," the file is located in ",(0,r.kt)("inlineCode",{parentName:"li"},"./conf/testnet.json"),"."),(0,r.kt)("li",{parentName:"ul"},"The value can be overridden by an environment variable whose name is the parameter name uppercased.")),(0,r.kt)("p",null,"Here is a list of the available parameters:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Command Line (long)"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Command Line (short)"),(0,r.kt)("th",{parentName:"tr",align:null},"Environment Variable"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Default Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Mandatory"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"verbose")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--verbose")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"-v")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"VERBOSE")),(0,r.kt)("td",{parentName:"tr",align:null},"Verbosity level"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},"Parsed from number of occurrences: ",(0,r.kt)("inlineCode",{parentName:"td"},"-v")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Warning"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"-vv")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Info"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"-vvv")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Debug")," and ",(0,r.kt)("inlineCode",{parentName:"td"},"-vvvv")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Trace")),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"run_mode")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--run-mode")),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"RUN_MODE")),(0,r.kt)("td",{parentName:"tr",align:null},"Runtime mode"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dev")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"network")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"NETWORK")),(0,r.kt)("td",{parentName:"tr",align:null},"Cardano network"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"testnet")," or ",(0,r.kt)("inlineCode",{parentName:"td"},"mainnet")," or ",(0,r.kt)("inlineCode",{parentName:"td"},"devnet")),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"aggregator_endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--aggregator-endpoint")),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"AGGREGATOR_ENDPOINT")),(0,r.kt)("td",{parentName:"tr",align:null},"Aggregator node endpoint"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.pre-release-preview.api.mithril.network/aggregator")),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"genesis_verification_key")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"GENESIS_VERIFICATION_KEY")),(0,r.kt)("td",{parentName:"tr",align:null},"Genesis verification key"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"json_output")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--json")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"-j")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},"Enable JSON output"),(0,r.kt)("td",{parentName:"tr",align:null},"no"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"-")))))}g.isMDXComponent=!0},5892:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>p,default:()=>g,frontMatter:()=>o,metadata:()=>d,toc:()=>u});var n=a(87462),r=(a(67294),a(3905)),i=a(74866),l=a(85162);const o={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},p=void 0,d={unversionedId:"networks-matrix",id:"version-maintained/networks-matrix",title:"networks-matrix",description:"Here is an up to date list of all the Mithril Networks, their configurations and their status:",source:"@site/versioned_docs/version-maintained/networks-matrix.md",sourceDirName:".",slug:"/networks-matrix",permalink:"/doc/networks-matrix",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/networks-matrix.md",tags:[],version:"maintained",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},m={},u=[{value:"pre-release-preview",id:"pre-release-preview",level:2},{value:"testing-preview",id:"testing-preview",level:2},{value:"release-preprod",id:"release-preprod",level:2},{value:"release-mainnet",id:"release-mainnet",level:2}],s={toc:u},k="wrapper";function g(t){let{components:e,...a}=t;return(0,r.kt)(k,(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Here is an up to date list of all the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Networks"),", their configurations and their status:"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Last update: 02/28/2023")),(0,r.kt)(i.Z,{mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"preview",label:"Preview",default:!0,mdxType:"TabItem"},(0,r.kt)("h2",{id:"pre-release-preview"},(0,r.kt)("inlineCode",{parentName:"h2"},"pre-release-preview")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"pre-release-preview")," ",(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.pre-release-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"preview"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"2"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"Pre-Release \ud83d\udfe0")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.pre-release-preview.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.pre-release-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Latest Pre-Release")," ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases?q=pre-release"},"\u2197\ufe0f"))))),(0,r.kt)("br",null),(0,r.kt)("h2",{id:"testing-preview"},(0,r.kt)("inlineCode",{parentName:"h2"},"testing-preview")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f For devs only")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"testing-preview")," ",(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.testing-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"preview"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"2"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"Unstable \ud83d\udd34")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.testing-preview.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.testing-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Main Branch")," ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/tree/main"},"\u2197\ufe0f")))))),(0,r.kt)(l.Z,{value:"preprod",label:"Preprod",mdxType:"TabItem"},(0,r.kt)("h2",{id:"release-preprod"},(0,r.kt)("inlineCode",{parentName:"h2"},"release-preprod")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"release-preprod")," ",(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.release-preprod.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"preprod"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"1"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"Release \ud83d\udfe2")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.release-preprod.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.release-preprod.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Latest Release")," ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases/latest"},"\u2197\ufe0f")))))),(0,r.kt)(l.Z,{value:"mainnet",label:"Mainnet",mdxType:"TabItem"},(0,r.kt)("h2",{id:"release-mainnet"},(0,r.kt)("inlineCode",{parentName:"h2"},"release-mainnet")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"release-mainnet"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"mainnet"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"-"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"No \u274c")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},"-")))))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"In this documentation, we use the generic:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_CARDANO_NETWORK**")," identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"preprod"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_AGGREGATOR_ENDPOINT**")," identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://aggregator.release-preprod.api.mithril.network/aggregator"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_GENESIS_VERIFICATION_KEY**")," identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADAPTER_TYPE**")," identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"cardano-chain"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADDRESS**")," identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_VERIFICATION_KEY**")," identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey"),")"))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/doc/assets/js/183a8603.7825baa2.js b/doc/assets/js/183a8603.7825baa2.js new file mode 100644 index 0000000000..8f232ef470 --- /dev/null +++ b/doc/assets/js/183a8603.7825baa2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[9937,5569,5458],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>g});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function l(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),d=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):l(l({},e),t)),a},m=function(t){var e=d(t.components);return n.createElement(p.Provider,{value:e},t.children)},u="mdxType",s={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,i=t.originalType,p=t.parentName,m=o(t,["components","mdxType","originalType","parentName"]),u=d(a),k=r,g=u["".concat(p,".").concat(k)]||u[k]||s[k]||i;return a?n.createElement(g,l(l({ref:e},m),{},{components:a})):n.createElement(g,l({ref:e},m))}));function g(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=a.length,l=new Array(i);l[0]=k;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[u]="string"==typeof t?t:r,l[1]=o;for(var d=2;d{a.d(e,{Z:()=>l});var n=a(67294),r=a(86010);const i={tabItem:"tabItem_Ymn6"};function l(t){let{children:e,hidden:a,className:l}=t;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,l),hidden:a},e)}},74866:(t,e,a)=>{a.d(e,{Z:()=>y});var n=a(87462),r=a(67294),i=a(86010),l=a(12466),o=a(16550),p=a(91980),d=a(67392),m=a(50012);function u(t){return function(t){return r.Children.map(t,(t=>{if(!t||(0,r.isValidElement)(t)&&function(t){const{props:e}=t;return!!e&&"object"==typeof e&&"value"in e}(t))return t;throw new Error(`Docusaurus error: Bad child <${"string"==typeof t.type?t.type:t.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(t).map((t=>{let{props:{value:e,label:a,attributes:n,default:r}}=t;return{value:e,label:a,attributes:n,default:r}}))}function s(t){const{values:e,children:a}=t;return(0,r.useMemo)((()=>{const t=e??u(a);return function(t){const e=(0,d.l)(t,((t,e)=>t.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((t=>t.value)).join(", ")}" found in . Every value needs to be unique.`)}(t),t}),[e,a])}function k(t){let{value:e,tabValues:a}=t;return a.some((t=>t.value===e))}function g(t){let{queryString:e=!1,groupId:a}=t;const n=(0,o.k6)(),i=function(t){let{queryString:e=!1,groupId:a}=t;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,p._X)(i),(0,r.useCallback)((t=>{if(!i)return;const e=new URLSearchParams(n.location.search);e.set(i,t),n.replace({...n.location,search:e.toString()})}),[i,n])]}function N(t){const{defaultValue:e,queryString:a=!1,groupId:n}=t,i=s(t),[l,o]=(0,r.useState)((()=>function(t){let{defaultValue:e,tabValues:a}=t;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!k({value:e,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((t=>t.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((t=>t.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:i}))),[p,d]=g({queryString:a,groupId:n}),[u,N]=function(t){let{groupId:e}=t;const a=function(t){return t?`docusaurus.tab.${t}`:null}(e),[n,i]=(0,m.Nk)(a);return[n,(0,r.useCallback)((t=>{a&&i.set(t)}),[a,i])]}({groupId:n}),c=(()=>{const t=p??u;return k({value:t,tabValues:i})?t:null})();(0,r.useLayoutEffect)((()=>{c&&o(c)}),[c]);return{selectedValue:l,selectValue:(0,r.useCallback)((t=>{if(!k({value:t,tabValues:i}))throw new Error(`Can't select invalid tab value=${t}`);o(t),d(t),N(t)}),[d,N,i]),tabValues:i}}var c=a(72389);const h={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(t){let{className:e,block:a,selectedValue:o,selectValue:p,tabValues:d}=t;const m=[],{blockElementScrollPositionUntilNextRender:u}=(0,l.o5)(),s=t=>{const e=t.currentTarget,a=m.indexOf(e),n=d[a].value;n!==o&&(u(e),p(n))},k=t=>{let e=null;switch(t.key){case"Enter":s(t);break;case"ArrowRight":{const a=m.indexOf(t.currentTarget)+1;e=m[a]??m[0];break}case"ArrowLeft":{const a=m.indexOf(t.currentTarget)-1;e=m[a]??m[m.length-1];break}}e?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},e)},d.map((t=>{let{value:e,label:a,attributes:l}=t;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:o===e?0:-1,"aria-selected":o===e,key:e,ref:t=>m.push(t),onKeyDown:k,onClick:s},l,{className:(0,i.Z)("tabs__item",h.tabItem,l?.className,{"tabs__item--active":o===e})}),a??e)})))}function f(t){let{lazy:e,children:a,selectedValue:n}=t;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const t=i.find((t=>t.props.value===n));return t?(0,r.cloneElement)(t,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},i.map(((t,e)=>(0,r.cloneElement)(t,{key:e,hidden:t.props.value!==n}))))}function v(t){const e=N(t);return r.createElement("div",{className:(0,i.Z)("tabs-container",h.tabList)},r.createElement(b,(0,n.Z)({},t,e)),r.createElement(f,(0,n.Z)({},t,e)))}function y(t){const e=(0,c.Z)();return r.createElement(v,(0,n.Z)({key:String(e)},t))}},57977:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>l,default:()=>s,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var n=a(87462),r=(a(67294),a(3905));const i={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},l=void 0,o={unversionedId:"compiled-binaries",id:"version-maintained/compiled-binaries",title:"compiled-binaries",description:"Download compiled binary",source:"@site/versioned_docs/version-maintained/compiled-binaries.md",sourceDirName:".",slug:"/compiled-binaries",permalink:"/doc/compiled-binaries",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/compiled-binaries.md",tags:[],version:"maintained",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},p={},d=[{value:"Download compiled binary",id:"download-compiled-binary",level:2}],m={toc:d},u="wrapper";function s(t){let{components:e,...a}=t;return(0,r.kt)(u,(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"download-compiled-binary"},"Download compiled binary"),(0,r.kt)("p",null,"Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package."),(0,r.kt)("p",null,"You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting."),(0,r.kt)("p",null,"These links are available in the ",(0,r.kt)("strong",{parentName:"p"},"Build From")," column of the above ",(0,r.kt)("strong",{parentName:"p"},"Mithril Networks")," table."))}s.isMDXComponent=!0},42408:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>p,default:()=>g,frontMatter:()=>o,metadata:()=>d,toc:()=>u});var n=a(87462),r=(a(67294),a(3905)),i=a(5892),l=a(57977);const o={sidebar_position:3},p="Mithril Client Node",d={unversionedId:"manual/developer-docs/nodes/mithril-client",id:"version-maintained/manual/developer-docs/nodes/mithril-client",title:"Mithril Client Node",description:"This is the node of the Mithril Network responsible for restoring the Cardano blockchain on an empty node from a certified snapshot.",source:"@site/versioned_docs/version-maintained/manual/developer-docs/nodes/mithril-client.md",sourceDirName:"manual/developer-docs/nodes",slug:"/manual/developer-docs/nodes/mithril-client",permalink:"/doc/manual/developer-docs/nodes/mithril-client",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/developer-docs/nodes/mithril-client.md",tags:[],version:"maintained",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docSideBar",previous:{title:"Mithril Signer Node",permalink:"/doc/manual/developer-docs/nodes/mithril-signer"},next:{title:"API Reference",permalink:"/doc/manual/developer-docs/references"}},m={},u=[{value:"Resources",id:"resources",level:2},{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Download source",id:"download-source",level:2},{value:"Development test and build",id:"development-test-and-build",level:2},{value:"Release build and run binary",id:"release-build-and-run-binary",level:2},{value:"Run Docker container",id:"run-docker-container",level:2},{value:"Registry Image",id:"registry-image",level:3},{value:"Local Image",id:"local-image",level:3},{value:"Subcommands",id:"subcommands",level:2},{value:"Configuration parameters",id:"configuration-parameters",level:2}],s={toc:u},k="wrapper";function g(t){let{components:e,...a}=t;return(0,r.kt)(k,(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"mithril-client-node"},"Mithril Client Node"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This is the node of the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Network")," responsible for restoring the ",(0,r.kt)("strong",{parentName:"p"},"Cardano")," blockchain on an empty node from a certified snapshot.")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For more information about the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Network"),", please refer to the ",(0,r.kt)("a",{parentName:"p",href:"/doc/mithril/mithril-network/architecture"},"Architecture")," page.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For more information about the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Client"),", please refer to the ",(0,r.kt)("a",{parentName:"p",href:"/doc/mithril/mithril-network/client"},"Client Node")," page.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Checkout the ",(0,r.kt)("a",{parentName:"p",href:"/doc/manual/getting-started/bootstrap-cardano-node"},(0,r.kt)("inlineCode",{parentName:"a"},"Bootstrap a Cardano Node"))," guide.")))),(0,r.kt)("admonition",{title:"Mithril Networks",type:"note"},(0,r.kt)(i.default,{mdxType:"NetworksMatrix"})),(0,r.kt)("h2",{id:"resources"},"Resources"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Node"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Source Repository"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Rust Documentation"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Docker Packages"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("strong",{parentName:"td"},"Mithril Client")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/tree/main/mithril-client"},"\u2197\ufe0f")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/mithril-client/doc/mithril_client/index.html"},"\u2197\ufe0f")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/pkgs/container/mithril-client"},"\u2197\ufe0f"))))),(0,r.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install a ",(0,r.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"correctly configured")," Rust toolchain (latest stable version)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run ",(0,r.kt)("inlineCode",{parentName:"p"},"apt install libssl-dev")))),(0,r.kt)("h2",{id:"download-source"},"Download source"),(0,r.kt)("p",null,"Download from GitHub (HTTPS)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/input-output-hk/mithril.git\n")),(0,r.kt)("p",null,"Or (SSH)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:input-output-hk/mithril.git\n")),(0,r.kt)("p",null,"Switch to build branch / tag"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, \n# please refer to the **Build From** column of the above **Mithril Networks** table\ngit switch **YOUR_BUILD_BRANCH_OR_TAG**\n")),(0,r.kt)("p",null,"Change directory"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril/mithril-client\n")),(0,r.kt)("h2",{id:"development-test-and-build"},"Development test and build"),(0,r.kt)("p",null,"Run tests"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make test\n")),(0,r.kt)("p",null,"Create the help menu"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make help\n")),(0,r.kt)("p",null,"Generate the Rust documentation"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make doc\n")),(0,r.kt)("p",null,"Run in debug mode with default configuration"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make debug\n")),(0,r.kt)("h2",{id:"release-build-and-run-binary"},"Release build and run binary"),(0,r.kt)("p",null,"Build and run in release with default configuration"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make run\n")),(0,r.kt)("p",null,"Or, build only in release"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make build\n")),(0,r.kt)("p",null,"Display the help menu"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client --help\n")),(0,r.kt)("p",null,"You should see"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"This program downloads, checks and restores certified blockchain snapshots.\n\nUsage: mithril-client [OPTIONS] \n\nCommands:\n list List available snapshots\n show Show detailed informations about a snapshot\n download Download a snapshot\n restore Restore a snapshot\n help Print this message or the help of the given subcommand(s)\n\nOptions:\n --run-mode \n Run Mode [env: RUN_MODE=] [default: dev]\n -v, --verbose...\n Verbosity level (-v=warning, -vv=info, -vvv=debug)\n --config-directory \n Directory where configuration file is located [default: ./config]\n --aggregator-endpoint \n Override configuration Aggregator endpoint URL\n -h, --help\n Print help information\n -V, --version\n Print version information\n\n")),(0,r.kt)("p",null,"Run in release with default configuration"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client\n")),(0,r.kt)("p",null,"Run in release with a specific mode"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client --run-mode preview\n")),(0,r.kt)("p",null,"Run in release with a custom configuration via env vars"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**) NETWORK=**YOUR_CARDANO_NETWORK** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./mithril-client\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"You can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"--json")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"-j"),") option in order to display results in ",(0,r.kt)("inlineCode",{parentName:"p"},"JSON")," format for the ",(0,r.kt)("inlineCode",{parentName:"p"},"list")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"show")," commands:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client list --json\n"))),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"If you want to dig deeper, you can get access to several level of logs from the Mithril Client:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-v")," for some logs (WARN)"),(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-vv")," for more logs (INFO)"),(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-vvv")," for even more logs (DEBUG)"),(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-vvvv")," for all logs (TRACE)"))),(0,r.kt)(l.default,{mdxType:"CompiledBinaries"}),(0,r.kt)("h2",{id:"run-docker-container"},"Run Docker container"),(0,r.kt)("h3",{id:"registry-image"},"Registry Image"),(0,r.kt)("p",null,"The list of available images on the registry is listed ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/mithril/pkgs/container/mithril-client"},"here")),(0,r.kt)("p",null,"Prepare environment variables (values can be retrieved on the above ",(0,r.kt)("strong",{parentName:"p"},"Mithril Networks")," table)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**\nexport NETWORK=**YOUR_CARDANO_NETWORK**\nexport AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**\nexport GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)\nexport SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')\n")),(0,r.kt)("p",null,"Here is an example configuration for the ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod")," network and the ",(0,r.kt)("inlineCode",{parentName:"p"},"latest")," stable Docker image"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=latest\nexport NETWORK=preprod\nexport AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator\nexport GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)\nexport SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')\n")),(0,r.kt)("p",null,"Then create a shell function for the Mithril Client"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mithril_client () {\n docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@\n}\n")),(0,r.kt)("p",null,"Now you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"mithril_client")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# 1- Help\nmithril_client help\n\n# 2- List snapshots\nmithril_client list\n\n# 3- Download latest snapshot\nmithril_client download $SNAPSHOT_DIGEST\n\n# 4- Restore latest snapshot\nmithril_client restore $SNAPSHOT_DIGEST\n")),(0,r.kt)("h3",{id:"local-image"},"Local Image"),(0,r.kt)("p",null,"Build a local Docker image"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make docker-build\n")),(0,r.kt)("p",null,"Run a local Docker container"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make docker-run\n")),(0,r.kt)("h2",{id:"subcommands"},"Subcommands"),(0,r.kt)("p",null,"Here are the subcommands available:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Subcommand"),(0,r.kt)("th",{parentName:"tr",align:null},"Performed action"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"download")),(0,r.kt)("td",{parentName:"tr",align:null},"Download a snapshot")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"help")),(0,r.kt)("td",{parentName:"tr",align:null},"Print this message or the help of the given subcommand(s)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"list")),(0,r.kt)("td",{parentName:"tr",align:null},"List available snapshots")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"restore")),(0,r.kt)("td",{parentName:"tr",align:null},"Restore a snapshot")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"show")),(0,r.kt)("td",{parentName:"tr",align:null},"Informations about a snapshot")))),(0,r.kt)("h2",{id:"configuration-parameters"},"Configuration parameters"),(0,r.kt)("p",null,"The configuration parameters are set either:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"In a configuration file (depending on the ",(0,r.kt)("inlineCode",{parentName:"li"},"--run-mode")," parameter). If runtime mode is ",(0,r.kt)("inlineCode",{parentName:"li"},"testnet")," the file is located in ",(0,r.kt)("inlineCode",{parentName:"li"},"./conf/testnet.json"),"."),(0,r.kt)("li",{parentName:"ul"},"The value can be overridden by an environment variable whose name is the parameter name uppercased.")),(0,r.kt)("p",null,"Here is a list of the available parameters:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Command Line (long)"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Command Line (short)"),(0,r.kt)("th",{parentName:"tr",align:null},"Environment Variable"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Default Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Mandatory"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"verbose")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--verbose")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"-v")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"VERBOSE")),(0,r.kt)("td",{parentName:"tr",align:null},"Verbosity level"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},"Parsed from number of occurrences: ",(0,r.kt)("inlineCode",{parentName:"td"},"-v")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Warning"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"-vv")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Info"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"-vvv")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Debug")," and ",(0,r.kt)("inlineCode",{parentName:"td"},"-vvvv")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Trace")),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"run_mode")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--run-mode")),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"RUN_MODE")),(0,r.kt)("td",{parentName:"tr",align:null},"Runtime mode"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dev")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"network")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"NETWORK")),(0,r.kt)("td",{parentName:"tr",align:null},"Cardano network"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"testnet")," or ",(0,r.kt)("inlineCode",{parentName:"td"},"mainnet")," or ",(0,r.kt)("inlineCode",{parentName:"td"},"devnet")),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"aggregator_endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--aggregator-endpoint")),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"AGGREGATOR_ENDPOINT")),(0,r.kt)("td",{parentName:"tr",align:null},"Aggregator node endpoint"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.pre-release-preview.api.mithril.network/aggregator")),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"genesis_verification_key")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"GENESIS_VERIFICATION_KEY")),(0,r.kt)("td",{parentName:"tr",align:null},"Genesis verification key"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"json_output")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--json")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"-j")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},"Enable JSON output"),(0,r.kt)("td",{parentName:"tr",align:null},"no"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"-")))))}g.isMDXComponent=!0},5892:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>p,default:()=>g,frontMatter:()=>o,metadata:()=>d,toc:()=>u});var n=a(87462),r=(a(67294),a(3905)),i=a(74866),l=a(85162);const o={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},p=void 0,d={unversionedId:"networks-matrix",id:"version-maintained/networks-matrix",title:"networks-matrix",description:"Here is an up to date list of all the Mithril Networks, their configurations and their status:",source:"@site/versioned_docs/version-maintained/networks-matrix.md",sourceDirName:".",slug:"/networks-matrix",permalink:"/doc/networks-matrix",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/networks-matrix.md",tags:[],version:"maintained",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},m={},u=[{value:"pre-release-preview",id:"pre-release-preview",level:2},{value:"testing-preview",id:"testing-preview",level:2},{value:"release-preprod",id:"release-preprod",level:2},{value:"release-mainnet",id:"release-mainnet",level:2}],s={toc:u},k="wrapper";function g(t){let{components:e,...a}=t;return(0,r.kt)(k,(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Here is an up to date list of all the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Networks"),", their configurations and their status:"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Last update: 02/28/2023")),(0,r.kt)(i.Z,{mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"preview",label:"Preview",default:!0,mdxType:"TabItem"},(0,r.kt)("h2",{id:"pre-release-preview"},(0,r.kt)("inlineCode",{parentName:"h2"},"pre-release-preview")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"pre-release-preview")," ",(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.pre-release-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"preview"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"2"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"Pre-Release \ud83d\udfe0")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.pre-release-preview.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.pre-release-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Latest Pre-Release")," ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases?q=pre-release"},"\u2197\ufe0f"))))),(0,r.kt)("br",null),(0,r.kt)("h2",{id:"testing-preview"},(0,r.kt)("inlineCode",{parentName:"h2"},"testing-preview")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f For devs only")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"testing-preview")," ",(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.testing-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"preview"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"2"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"Unstable \ud83d\udd34")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.testing-preview.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.testing-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Main Branch")," ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/tree/main"},"\u2197\ufe0f")))))),(0,r.kt)(l.Z,{value:"preprod",label:"Preprod",mdxType:"TabItem"},(0,r.kt)("h2",{id:"release-preprod"},(0,r.kt)("inlineCode",{parentName:"h2"},"release-preprod")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"release-preprod")," ",(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.release-preprod.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"preprod"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"1"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"Release \ud83d\udfe2")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.release-preprod.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.release-preprod.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Latest Release")," ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases/latest"},"\u2197\ufe0f")))))),(0,r.kt)(l.Z,{value:"mainnet",label:"Mainnet",mdxType:"TabItem"},(0,r.kt)("h2",{id:"release-mainnet"},(0,r.kt)("inlineCode",{parentName:"h2"},"release-mainnet")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"release-mainnet"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"mainnet"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"-"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"No \u274c")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},"-")))))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"In this documentation, we use the generic:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_CARDANO_NETWORK**")," identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"preprod"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_AGGREGATOR_ENDPOINT**")," identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://aggregator.release-preprod.api.mithril.network/aggregator"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_GENESIS_VERIFICATION_KEY**")," identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADAPTER_TYPE**")," identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"cardano-chain"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADDRESS**")," identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_VERIFICATION_KEY**")," identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey"),")"))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/doc/assets/js/5efc9d3d.868703ef.js b/doc/assets/js/5efc9d3d.868703ef.js deleted file mode 100644 index 58e93b09fa..0000000000 --- a/doc/assets/js/5efc9d3d.868703ef.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[613,9531,2379],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),s=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(l.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,c=d(e,["components","mdxType","originalType","parentName"]),p=s(n),u=o,h=p["".concat(l,".").concat(u)]||p[u]||f[u]||r;return n?a.createElement(h,i(i({ref:t},c),{},{components:n})):a.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=u;var d={};for(var l in t)hasOwnProperty.call(t,l)&&(d[l]=t[l]);d.originalType=e,d[p]="string"==typeof e?e:o,i[1]=d;for(var s=2;s{n.d(t,{Z:()=>i});var a=n(67294),o=n(86010);const r={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,i),hidden:n},t)}},74866:(e,t,n)=>{n.d(t,{Z:()=>T});var a=n(87462),o=n(67294),r=n(86010),i=n(12466),d=n(16550),l=n(91980),s=n(67392),c=n(50012);function p(e){return function(e){return o.Children.map(e,(e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function f(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=t??p(n);return function(e){const t=(0,s.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,d.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,r=f(e),[i,d]=(0,o.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[l,s]=h({queryString:n,groupId:a}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,c.Nk)(n);return[a,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:a}),g=(()=>{const e=l??p;return u({value:e,tabValues:r})?e:null})();(0,o.useLayoutEffect)((()=>{g&&d(g)}),[g]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!u({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);d(e),s(e),m(e)}),[s,m,r]),tabValues:r}}var g=n(72389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function k(e){let{className:t,block:n,selectedValue:d,selectValue:l,tabValues:s}=e;const c=[],{blockElementScrollPositionUntilNextRender:p}=(0,i.o5)(),f=e=>{const t=e.currentTarget,n=c.indexOf(t),a=s[n].value;a!==d&&(p(t),l(a))},u=e=>{let t=null;switch(e.key){case"Enter":f(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},s.map((e=>{let{value:t,label:n,attributes:i}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:d===t?0:-1,"aria-selected":d===t,key:t,ref:e=>c.push(e),onKeyDown:u,onClick:f},i,{className:(0,r.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":d===t})}),n??t)})))}function N(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function C(e){const t=m(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",b.tabList)},o.createElement(k,(0,a.Z)({},e,t)),o.createElement(N,(0,a.Z)({},e,t)))}function T(e){const t=(0,g.Z)();return o.createElement(C,(0,a.Z)({key:String(t)},e))}},61494:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>f,frontMatter:()=>r,metadata:()=>d,toc:()=>s});var a=n(87462),o=(n(67294),n(3905));const r={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},i=void 0,d={unversionedId:"compiled-binaries",id:"compiled-binaries",title:"compiled-binaries",description:"Download compiled binary",source:"@site/root/compiled-binaries.md",sourceDirName:".",slug:"/compiled-binaries",permalink:"/doc/next/compiled-binaries",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/compiled-binaries.md",tags:[],version:"current",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},l={},s=[{value:"Download compiled binary",id:"download-compiled-binary",level:2}],c={toc:s},p="wrapper";function f(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"download-compiled-binary"},"Download compiled binary"),(0,o.kt)("p",null,"Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package."),(0,o.kt)("p",null,"You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting."),(0,o.kt)("p",null,"These links are available in the ",(0,o.kt)("strong",{parentName:"p"},"Build From")," column of the above ",(0,o.kt)("strong",{parentName:"p"},"Mithril Networks")," table."))}f.isMDXComponent=!0},69752:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>s,toc:()=>p});var a=n(87462),o=(n(67294),n(3905)),r=n(81900),i=n(61494);const d={sidebar_position:1},l="Bootstrap a Cardano Node",s={unversionedId:"manual/getting-started/bootstrap-cardano-node",id:"manual/getting-started/bootstrap-cardano-node",title:"Bootstrap a Cardano Node",description:"Thanks to a Mithril Client connected to a Mithril Aggregator, you will restore a full Cardano node in less than 2 hours!",source:"@site/root/manual/getting-started/bootstrap-cardano-node.md",sourceDirName:"manual/getting-started",slug:"/manual/getting-started/bootstrap-cardano-node",permalink:"/doc/next/manual/getting-started/bootstrap-cardano-node",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/getting-started/bootstrap-cardano-node.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docSideBar",previous:{title:"Getting Started",permalink:"/doc/next/category/getting-started"},next:{title:"Run a Mithril Signer node (SPO)",permalink:"/doc/next/manual/getting-started/run-signer-node"}},c={},p=[{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Download source",id:"download-source",level:2},{value:"Build Mithril Client binary",id:"build-mithril-client-binary",level:2},{value:"Verify binary",id:"verify-binary",level:2},{value:"Verify version",id:"verify-version",level:3},{value:"Verify build",id:"verify-build",level:3},{value:"Run Docker container",id:"run-docker-container",level:2},{value:"Bootstrap a Cardano node from a testnet Mithril snapshot",id:"bootstrap-a-cardano-node-from-a-testnet-mithril-snapshot",level:2},{value:"Step 1: Prepare some useful variables",id:"step-1-prepare-some-useful-variables",level:3},{value:"Step 2: Select A Snapshot",id:"step-2-select-a-snapshot",level:3},{value:"Step 3: Show Snapshot Details",id:"step-3-show-snapshot-details",level:3},{value:"Step 4: Download Selected Snapshot",id:"step-4-download-selected-snapshot",level:3},{value:"Step 5: Restore Selected Snapshot",id:"step-5-restore-selected-snapshot",level:3},{value:"Step 6: Launch a Cardano Node From Restored Snapshot",id:"step-6-launch-a-cardano-node-from-restored-snapshot",level:3}],f={toc:p},u="wrapper";function h(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"bootstrap-a-cardano-node"},"Bootstrap a Cardano Node"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Thanks to a ",(0,o.kt)("strong",{parentName:"p"},"Mithril Client")," connected to a ",(0,o.kt)("strong",{parentName:"p"},"Mithril Aggregator"),", you will restore a full Cardano node in less than 2 hours!")),(0,o.kt)("admonition",{title:"Mithril Networks",type:"note"},(0,o.kt)(r.default,{mdxType:"NetworksMatrix"})),(0,o.kt)("h1",{id:"video-demonstration"},"Video demonstration"),(0,o.kt)("p",null,"In this video you will see how fast the bootstrapping of a Cardano node with Mithril is compared to classical bootstrapping (benchmark done on mainnet with Daedalus wallet)."),(0,o.kt)("iframe",{style:{width:"100%",height:"480px"},src:"https://www.youtube.com/embed/5qjJNRgEzYo",title:"Daedalus Bootstrap Benchmark on mainnet with/without Mithril",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"true"}),(0,o.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install a ",(0,o.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"correctly configured")," Rust toolchain (latest stable version).")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run ",(0,o.kt)("inlineCode",{parentName:"p"},"sudo apt install libssl-dev"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install other requirements"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get install make build-essential m4 docker jq\n")),(0,o.kt)("h2",{id:"download-source"},"Download source"),(0,o.kt)("p",null,"Download from GitHub (HTTPS)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/input-output-hk/mithril.git\n")),(0,o.kt)("p",null,"Or (SSH)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:input-output-hk/mithril.git\n")),(0,o.kt)("h2",{id:"build-mithril-client-binary"},"Build Mithril Client binary"),(0,o.kt)("p",null,"Switch to build branch / tag"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, \n# please refer to the **Build From** column of the above **Mithril Networks** table\ngit switch **YOUR_BUILD_BRANCH_OR_TAG**\n")),(0,o.kt)("p",null,"Change directory"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril/mithril-client\n")),(0,o.kt)("p",null,"Run tests (Optional)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"make test\n")),(0,o.kt)("p",null,"Build executable"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"make build\n")),(0,o.kt)("h2",{id:"verify-binary"},"Verify binary"),(0,o.kt)("h3",{id:"verify-version"},"Verify version"),(0,o.kt)("p",null,"Check that the Mithril Signer binary is running the correct version by running"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client -V\n")),(0,o.kt)("p",null,"You should see something like"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mithril-client 0.2.0\n")),(0,o.kt)("p",null,"\u26a0\ufe0f Verify that the version displayed is the version described in the content of the Release / Pre-Release note (see the ",(0,o.kt)("strong",{parentName:"p"},"Build From")," column of the above ",(0,o.kt)("strong",{parentName:"p"},"Mithril Networks")," table)"),(0,o.kt)("h3",{id:"verify-build"},"Verify build"),(0,o.kt)("p",null,"Check that the Mithril Client binary is working fine by running its help"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client -h\n")),(0,o.kt)("p",null,"You should see"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"This program downloads, checks and restores certified blockchain snapshots.\n\nUsage: mithril-client [OPTIONS] \n\nCommands:\n list List available snapshots\n show Show detailed informations about a snapshot\n download Download a snapshot\n restore Restore a snapshot\n help Print this message or the help of the given subcommand(s)\n\nOptions:\n --run-mode \n Run Mode [env: RUN_MODE=] [default: dev]\n -v, --verbose...\n Verbosity level (-v=warning, -vv=info, -vvv=debug)\n --config-directory \n Directory where configuration file is located [default: ./config]\n --aggregator-endpoint \n Override configuration Aggregator endpoint URL\n -h, --help\n Print help information\n -V, --version\n Print version information\n")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"You can use the ",(0,o.kt)("inlineCode",{parentName:"p"},"--json")," option in order to display results in ",(0,o.kt)("inlineCode",{parentName:"p"},"JSON")," format for the ",(0,o.kt)("inlineCode",{parentName:"p"},"list")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"show")," commands:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client list --json\n"))),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you want to dig deeper, you can get access to several level of logs from the Mithril Client:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-v")," for some logs (WARN)"),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-vv")," for more logs (INFO)"),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-vvv")," for even more logs (DEBUG)"),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-vvvv")," for all logs (TRACE)"))),(0,o.kt)(i.default,{mdxType:"CompiledBinaries"}),(0,o.kt)("h2",{id:"run-docker-container"},"Run Docker container"),(0,o.kt)("p",null,"The list of available images on the registry is listed ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/mithril/pkgs/container/mithril-client"},"here")),(0,o.kt)("p",null,"Prepare an environment variable with the selected Docker image"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**\n")),(0,o.kt)("p",null,"Here is an example configuration for the ",(0,o.kt)("inlineCode",{parentName:"p"},"latest")," stable Docker image"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=latest\n")),(0,o.kt)("p",null,"Then create a shell function for the Mithril Client:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mithril_client () {\n docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@\n}\n")),(0,o.kt)("p",null,"Now you can use the ",(0,o.kt)("inlineCode",{parentName:"p"},"mithril_client")," function:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# 1- Help\nmithril_client help\n\n# 2- List snapshots\nmithril_client list\n")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"In the following part of the document, you will need to replace the ",(0,o.kt)("inlineCode",{parentName:"p"},"./mithril-client")," commands with ",(0,o.kt)("inlineCode",{parentName:"p"},"mithril_client")," in order to use the above shell function.")),(0,o.kt)("h2",{id:"bootstrap-a-cardano-node-from-a-testnet-mithril-snapshot"},"Bootstrap a Cardano node from a testnet Mithril snapshot"),(0,o.kt)("h3",{id:"step-1-prepare-some-useful-variables"},"Step 1: Prepare some useful variables"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# Cardano network\nexport NETWORK=**YOUR_CARDANO_NETWORK**\n\n# Aggregator API endpoint URL\nexport AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**\n\n# Genesis verification key\nexport GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)\n\n# Digest of the latest produced snapshot for convenience of the demo\n# You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2\nexport SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')\n")),(0,o.kt)("h3",{id:"step-2-select-a-snapshot"},"Step 2: Select A Snapshot"),(0,o.kt)("p",null,"List the available snapshots with which you can bootstrap a Cardano node"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client list\n")),(0,o.kt)("p",null,"You will see a list of snapshots"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| Network | Digest | Size | Locations | Created |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 | 5273560121 | 1 | 2022-07-10T11:19:18.042554390Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | 22267a8399cbd1731420f7241c91bec66b3126c971d53b1cdf4db0c016320df4 | 5267582819 | 1 | 2022-07-10T05:44:59.048360039Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | c14792945b3880fa9f8880348f885c707b8e4d13cdb035b9a735c15f88ea45db | 5265335799 | 1 | 2022-07-10T00:03:43.656860711Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | 0344faf7ebcd7cbf606288bfc8e7c11f992bd4f28f3ac159942b487a0217f485 | 5265577167 | 1 | 2022-07-09T18:31:16.604292173Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | fc42ef98e233717a7180502dc51aab1ca64d5bd6d6e9d72b4096ac1f7e45a129 | 5262797245 | 1 | 2022-07-09T12:45:20.306735843Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n")),(0,o.kt)("h3",{id:"step-3-show-snapshot-details"},"Step 3: Show Snapshot Details"),(0,o.kt)("p",null,"Get some more details from a specific snapshot (Optional)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client show $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see more information about a snapshot"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Info | Value |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Network | testnet |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Digest | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Size | 5273560121 |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Location 1 | https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Created | 2022-07-10T11:19:18.042554390Z |\n")),(0,o.kt)("h3",{id:"step-4-download-selected-snapshot"},"Step 4: Download Selected Snapshot"),(0,o.kt)("p",null,"Download the selected snapshot from the remote location to your remote location"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client download $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the selected snapshot archive has been downloaded locally"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"Download success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 #1\nfrom https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz\nto /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/snapshot.archive.tar.gz\n")),(0,o.kt)("h3",{id:"step-5-restore-selected-snapshot"},"Step 5: Restore Selected Snapshot"),(0,o.kt)("p",null,"Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client restore $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the snapshot archive is unpacked and that the associated certificate is valid"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Unpacking snapshot...\nUnpack success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068\nto /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db\n\nRestore a Cardano Node with:\n\ndocker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="/home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db",target=/data/db/ -e NETWORK=testnet inputoutput/cardano-node\n')),(0,o.kt)("h3",{id:"step-6-launch-a-cardano-node-from-restored-snapshot"},"Step 6: Launch a Cardano Node From Restored Snapshot"),(0,o.kt)("p",null,"Launch an empty Cardano node and make it live in minutes!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="$(pwd)/data/testnet/$SNAPSHOT_DIGEST/db",target=/data/db/ -e NETWORK=**YOUR_CARDANO_NETWORK** inputoutput/cardano-node\n')),(0,o.kt)("p",null,"You will see the node start by validating the files injested from the snapshot archive"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Starting: /nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run\n--config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json\n--database-path /data/db\n--topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml\n--host-addr 0.0.0.0\n--port 3001\n--socket-path /ipc/node.socket\n\n\n\n\n\n+RTS\n-N2\n-I0\n-A16m\n-qg\n-qb\n--disable-delayed-os-memory-return\n-RTS\n..or, once again, in a single line:\n/nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run --config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json --database-path /data/db --topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml --host-addr 0.0.0.0 --port 3001 --socket-path /ipc/node.socket +RTS -N2 -I0 -A16m -qg -qb --disable-delayed-os-memory-return -RTS\nNode configuration: NodeConfiguration {ncSocketConfig = SocketConfig {ncNodeIPv4Addr = Last {getLast = Just 0.0.0.0}, ncNodeIPv6Addr = Last {getLast = Nothing}, ncNodePortNumber = Last {getLast = Just 3001}, ncSocketPath = Last {getLast = Just "/ipc/node.socket"}}, ncConfigFile = "/nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json", ncTopologyFile = "/nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml", ncDatabaseFile = "/data/db", ncProtocolFiles = ProtocolFilepaths {byronCertFile = Nothing, byronKeyFile = Nothing, shelleyKESFile = Nothing, shelleyVRFFile = Nothing, shelleyCertFile = Nothing, shelleyBulkCredsFile = Nothing}, ncValidateDB = False, ncShutdownConfig = ShutdownConfig {scIPC = Nothing, scOnSyncLimit = Just NoShutdown}, ncProtocolConfig = NodeProtocolConfigurationCardano (NodeByronProtocolConfiguration {npcByronGenesisFile = "/nix/store/kax0css4lx3ywihvsgrqjym0jpi20f99-byron-genesis.json", npcByronGenesisFileHash = Just "96fceff972c2c06bd3bb5243c39215333be6d56aaf4823073dca31afe5038471", npcByronReqNetworkMagic = RequiresMagic, npcByronPbftSignatureThresh = Nothing, npcByronApplicationName = ApplicationName {unApplicationName = "cardano-sl"}, npcByronApplicationVersion = 0, npcByronSupportedProtocolVersionMajor = 3, npcByronSupportedProtocolVersionMinor = 0, npcByronSupportedProtocolVersionAlt = 0}) (NodeShelleyProtocolConfiguration {npcShelleyGenesisFile = "/nix/store/2xhy92909anynqsvx1b1x153cxwnfmzx-shelley-genesis.json", npcShelleyGenesisFileHash = Just "849a1764f152e1b09c89c0dfdbcbdd38d711d1fec2db5dfa0f87cf2737a0eaf4"}) (NodeAlonzoProtocolConfiguration {npcAlonzoGenesisFile = "/nix/store/8qnphq6yvcjspiy3z0aijfd6cv64l3hl-alonzo-genesis.json", npcAlonzoGenesisFileHash = Just "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874"}) (NodeHardForkProtocolConfiguration {npcTestEnableDevelopmentHardForkEras = False, npcTestShelleyHardForkAtEpoch = Nothing, npcTestShelleyHardForkAtVersion = Nothing, npcTestAllegraHardForkAtEpoch = Nothing, npcTestAllegraHardForkAtVersion = Nothing, npcTestMaryHardForkAtEpoch = Nothing, npcTestMaryHardForkAtVersion = Nothing, npcTestAlonzoHardForkAtEpoch = Nothing, npcTestAlonzoHardForkAtVersion = Nothing, npcTestBabbageHardForkAtEpoch = Nothing, npcTestBabbageHardForkAtVersion = Nothing}), ncDiffusionMode = InitiatorAndResponderDiffusionMode, ncSnapshotInterval = DefaultSnapshotInterval, ncTestEnableDevelopmentNetworkProtocols = False, ncMaxConcurrencyBulkSync = Nothing, ncMaxConcurrencyDeadline = Nothing, ncLoggingSwitch = True, ncLogMetrics = True, ncTraceConfig = TracingOnLegacy (TraceSelection {traceVerbosity = NormalVerbosity, traceAcceptPolicy = OnOff {isOn = True}, traceBlockFetchClient = OnOff {isOn = False}, traceBlockFetchDecisions = OnOff {isOn = False}, traceBlockFetchProtocol = OnOff {isOn = False}, traceBlockFetchProtocolSerialised = OnOff {isOn = False}, traceBlockFetchServer = OnOff {isOn = False}, traceBlockchainTime = OnOff {isOn = False}, traceChainDB = OnOff {isOn = True}, traceChainSyncBlockServer = OnOff {isOn = False}, traceChainSyncClient = OnOff {isOn = False}, traceChainSyncHeaderServer = OnOff {isOn = False}, traceChainSyncProtocol = OnOff {isOn = False}, traceConnectionManager = OnOff {isOn = True}, traceConnectionManagerCounters = OnOff {isOn = True}, traceConnectionManagerTransitions = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorTracer = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorResponderTracer = OnOff {isOn = False}, traceDiffusionInitialization = OnOff {isOn = True}, traceDnsResolver = OnOff {isOn = False}, traceDnsSubscription = OnOff {isOn = True}, traceErrorPolicy = OnOff {isOn = True}, traceForge = OnOff {isOn = True}, traceForgeStateInfo = OnOff {isOn = True}, traceHandshake = OnOff {isOn = False}, traceInboundGovernor = OnOff {isOn = True}, traceInboundGovernorCounters = OnOff {isOn = True}, traceInboundGovernorTransitions = OnOff {isOn = True}, traceIpSubscription = OnOff {isOn = True}, traceKeepAliveClient = OnOff {isOn = False}, traceLedgerPeers = OnOff {isOn = True}, traceLocalChainSyncProtocol = OnOff {isOn = False}, traceLocalConnectionManager = OnOff {isOn = False}, traceLocalErrorPolicy = OnOff {isOn = True}, traceLocalHandshake = OnOff {isOn = False}, traceLocalInboundGovernor = OnOff {isOn = False}, traceLocalMux = OnOff {isOn = False}, traceLocalRootPeers = OnOff {isOn = True}, traceLocalServer = OnOff {isOn = False}, traceLocalStateQueryProtocol = OnOff {isOn = False}, traceLocalTxMonitorProtocol = OnOff {isOn = False}, traceLocalTxSubmissionProtocol = OnOff {isOn = False}, traceLocalTxSubmissionServer = OnOff {isOn = False}, traceMempool = OnOff {isOn = True}, traceMux = OnOff {isOn = False}, tracePeerSelection = OnOff {isOn = True}, tracePeerSelectionCounters = OnOff {isOn = True}, tracePeerSelectionActions = OnOff {isOn = True}, tracePublicRootPeers = OnOff {isOn = True}, traceServer = OnOff {isOn = True}, traceTxInbound = OnOff {isOn = False}, traceTxOutbound = OnOff {isOn = False}, traceTxSubmissionProtocol = OnOff {isOn = False}, traceTxSubmission2Protocol = OnOff {isOn = False}}), ncTraceForwardSocket = Nothing, ncMaybeMempoolCapacityOverride = Nothing, ncProtocolIdleTimeout = 5s, ncTimeWaitTimeout = 60s, ncAcceptedConnectionsLimit = AcceptedConnectionsLimit {acceptedConnectionsHardLimit = 512, acceptedConnectionsSoftLimit = 384, acceptedConnectionsDelay = 5s}, ncTargetNumberOfRootPeers = 100, ncTargetNumberOfKnownPeers = 100, ncTargetNumberOfEstablishedPeers = 50, ncTargetNumberOfActivePeers = 20, ncEnableP2P = DisabledP2PMode}\nListening on http://127.0.0.1:12798\n[c995d1df:cardano.node.basicInfo.protocol:Notice:5] [2022-07-10 13:48:51.68 UTC] Byron; Shelley\n[c995d1df:cardano.node.basicInfo.version:Notice:5] [2022-07-10 13:48:51.68 UTC] 1.35.1\n[c995d1df:cardano.node.basicInfo.commit:Notice:5] [2022-07-10 13:48:51.68 UTC] 0000000000000000000000000000000000000000\n[c995d1df:cardano.node.basicInfo.nodeStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2022-07-10 13:48:51.685957811 UTC\n[c995d1df:cardano.node.basicInfo.systemStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2019-07-24 20:20:16 UTC\n[c995d1df:cardano.node.basicInfo.slotLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 20s\n[c995d1df:cardano.node.basicInfo.epochLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 21600\n[c995d1df:cardano.node.basicInfo.slotLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Config path /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json, Network magic NetworkMagic {unNetworkMagic = 1097911063}, Protocol "Byron; Shelley", Version "1.35.1", Commit "0000000000000000000000000000000000000000", Node start time 2022-07-10 13:48:51.694962147 UTC\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Byron, Slot length 20s, Epoch length 21600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Shelley, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Allegra, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Mary, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Alonzo, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Babbage, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] startup time: 1657460932\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.70 UTC] \nnode addresses: 0.0.0.0:3001\nlocal socket: /ipc/node.socket\nnode-to-node versions:\nNodeToNodeV_7 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)\nNodeToNodeV_8 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)\nNodeToNodeV_9 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* Nil)\nnode-to-client versions:\nNodeToClientV_9 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_10 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_11 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_12 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_13 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* Nil)\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Chain DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Immutable DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.79 UTC] Validating chunk no. 0 out of 2917. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validated chunk no. 0 out of 2917. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validating chunk no. 1 out of 2917. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validated chunk no. 1 out of 2917. Progress: 0.03%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validating chunk no. 2 out of 2917. Progress: 0.03%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validated chunk no. 2 out of 2917. Progress: 0.07%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validating chunk no. 3 out of 2917. Progress: 0.07%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validated chunk no. 3 out of 2917. Progress: 0.10%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validating chunk no. 4 out of 2917. Progress: 0.10%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validated chunk no. 4 out of 2917. Progress: 0.14%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validating chunk no. 5 out of 2917. Progress: 0.14%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:54.14 UTC] Validated chunk no. 5 out of 2917. \n\n... (Cut for readability)\n\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validated chunk no. 2911 out of 2917. Progress: 99.79%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validating chunk no. 2912 out of 2917. Progress: 99.79%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validated chunk no. 2912 out of 2917. Progress: 99.83%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validating chunk no. 2913 out of 2917. Progress: 99.83%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validated chunk no. 2913 out of 2917. Progress: 99.86%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validating chunk no. 2914 out of 2917. Progress: 99.86%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validated chunk no. 2914 out of 2917. Progress: 99.90%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validating chunk no. 2915 out of 2917. Progress: 99.90%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validated chunk no. 2915 out of 2917. Progress: 99.93%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validating chunk no. 2916 out of 2917. Progress: 99.93%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validated chunk no. 2916 out of 2917. Progress: 99.97%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validating chunk no. 2917 out of 2917. Progress: 99.97%\n[c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the secondary index for the chunk file with number 2917.\n[c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the primary index for the chunk file with number 2917.\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Found a valid last location at chunk 2917 with tip 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432@63009237.\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Opened imm db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and chunk 2917\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Started opening Volatile DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Opened vol db\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Started opening Ledger DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replaying ledger from snapshot at 16ce3e707388b8c033f87b440ac89095b2d2fc5fa2b42f768c38da286312a31a at slot 63005524\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replayed block: slot 63005533 out of 63009237. Progress: 0.24%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.20 UTC] Replayed block: slot 63007165 out of 63009237. Progress: 44.20%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Opened lgr db\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Started initial chain selection\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.45 UTC] Pushing ledger state for block 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] before next, messages elided = 63009476\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 5e59df354b64634bd27fc1b3ed08991c6de909ea085625da2ca78ec5a6a3e37c at slot 63019450. Progress: 13.85%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block e0610e4f03ef640ead31a729f6f18aa820f3906f6414b179d3c553f0011162ef at slot 63019479. Progress: 13.89%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 8edc84f1f289475ca5c2afd9cae3c704ed7bcdf3e489fd1842e3904bd2d6d8c5 at slot 63019510. Progress: 13.93%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] before next, messages elided = 63019575\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block fc426a1c3a8c5ae61100e5ccfcaa47ccfb6cc144ed17fcd47a2b55f48890790a at slot 63029515. Progress: 27.75%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 68059200505d3ec65d3ddce9441efb0607adab002066c00acc050f5bb0c53deb at slot 63029578. Progress: 27.84%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 25f5cc004ad90dc554e085699f1386dc8f69cec4012a7b35735b83da6fa68a0b at slot 63029602. Progress: 27.87%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] before next, messages elided = 63029636\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block cfb3dd669fd1a85aaf005ddd0e4a8b90cbb7b2c66dc8ff6f41e2e7aa2a0f0c57 at slot 63039634. Progress: 41.72%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block d7f057436e749e4468cfd8b17a04d447c4ce628b8dc33ea7ebdc4d3ad4659dec at slot 63039638. Progress: 41.73%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block 73fcb92346714585e1dbb484b1678bb15dab7304a8071cd95ec85195ca7a46be at slot 63039655. Progress: 41.75%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] before next, messages elided = 63039729\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block a7256fa99f7bf50d0e764cb80122222b1d2b80ffef4bee30e42c0bb80c5f1168 at slot 63049716. Progress: 55.64%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block 75e2064629d6a017bfe324a3d31723ed7bfa017eceda1549bd6c9f4d63653394 at slot 63049861. Progress: 55.84%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.94 UTC] Pushing ledger state for block 71aeaae8f83ee6b94a7feb521c16f0d889a9b95be6da85d540ac0435b412fb2c at slot 63049904. Progress: 55.90%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] before next, messages elided = 63049909\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block 15ad241c6908d0748cb80d17035d4001f7f86ee22fe71197cbe9bc7489d8e71b at slot 63059862. Progress: 69.65%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block a5e38b0875d44e10a3cba9c420ad4c9708e913e3458f1003a8236a831762069a at slot 63059915. Progress: 69.73%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block ca6dc89bd705476bcd056d6ffc3dd43499e51d0e5ecfe56a439fadacac50fc1b at slot 63059939. Progress: 69.76%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] before next, messages elided = 63059957\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 3c8593b6859b02abaa7f3b69d2114b1f402c65eef6904020e5ed37356aea4461 at slot 63069941. Progress: 83.57%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 50a06570febcf89ee00c386979d3a616561996b6c5cf6cbff44c20aa8454c375 at slot 63069971. Progress: 83.61%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 6265f3c30f149ba0a797a1d2c6998b918f089e7455ab665e3369456105901a5a at slot 63069972. Progress: 83.62%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] before next, messages elided = 63069985\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 0be786a1d9272083e9e184da3bc3bfcb71b82ad10fbf52f4959dc5dc6d1b7b3c at slot 63079898. Progress: 97.32%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 2862bd67a50bf9f6f31ab11d9153663d3e657f88c24ba8e71174f8f5216c2a99 at slot 63079992. Progress: 97.45%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block cc9036c6c4076ca28ac5d03522001c233a9202cb5b1d9484c3e406fbb3406fd5 at slot 63079994. Progress: 97.45%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] before next, messages elided = 63080024\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Pushing ledger state for block c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837. Progress: 100.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Valid candidate at tip 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Initial chain selected\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Opened db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and tip c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837\n[c995d1df:cardano.node.shutdown:Warning:5] [2022-07-10 13:53:39.87 UTC] Will terminate upon reaching NoShutdown\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] CreatingServerSocket 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ConfiguringServerSocket 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ListeningServerSocket 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ServerSocketUp 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] RunServer (0.0.0.0:3001 :| [])\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreateSystemdSocketForSnocketPath (LocalAddress "/ipc/node.socket")\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreatedLocalSocket (LocalAddress "/ipc/node.socket")\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ConfiguringLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ListeningLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] LocalSocketUp (LocalAddress "/ipc/node.socket") (FileDescriptor 26)\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] RunLocalServer (LocalAddress "/ipc/node.socket")\n[c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d014:e00:a200:0:1:0:1]:3001\n[c995d1df:cardano.node.DnsSubscription:Notice:358] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 3.131.32.242:3001\n[c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d01c:321:2101:0:1:0:2]:3001\n[c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 13.41.9.54:3001\n[c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.95 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt End, destination 13.41.9.54:3001 outcome: ConnectSuccessLast\n[c995d1df:cardano.node.ErrorPolicy:Notice:343] [2022-07-10 13:53:39.95 UTC] IP 3.131.32.242:3001 ErrorPolicySuspendConsumer (Just (ConnectionExceptionTrace (SubscriberError {seType = SubscriberParallelConnectionCancelled, seMessage = "Parallel connection cancelled", seStack = []}))) 1s\n')),(0,o.kt)("p",null,"Then the Cardano node will synchronize with the other nodes of the network and start adding blockss"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:53:40.06 UTC] Chain extended, new tip: 7ae33b2f4bc8b84e77dfd539f0f6e7f59b293e96f62fdcfdb17cbd7a006fe5c0 at slot 63081906\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:08.30 UTC] Chain extended, new tip: 6b4ccd2bec5e3862b23ea0f7c2f342a3659cecdcfdaf04551179df3839be6213 at slot 63092090\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:21.36 UTC] Chain extended, new tip: 6e95eb82da5a38544e6ef430a2733f6014c3c10527003b9d3bdc534f6a2ce81f at slot 63092103\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:39.04 UTC] Chain extended, new tip: a662672ec4b988022e135cb0b7e440f5fbffe8e205771d13a566a418f7021ba7 at slot 63092121\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:45.18 UTC] Chain extended, new tip: 2a0f2e6f218a08f4e0bc4668285d8e792fd7ec62f05880bd5b2d23d6bce20dfb at slot 63092127\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:18.05 UTC] Chain extended, new tip: ab9ef8af92ec062ec59a10da588e238ba8840705c095ebd5cd5da7ab9ea9c8e1 at slot 63092160\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:45.15 UTC] Chain extended, new tip: e59bcbf34172eb6a934e2580f6b20ebe1ea32fba7420feec096744fab8ffce76 at slot 63092189\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:57:59.06 UTC] Chain extended, new tip: ea0e76fe069a0bcb831cf6b342530adf2a28de4922a752cff734fe81a1842dff at slot 63092263\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:02.27 UTC] Chain extended, new tip: 1b68a85a10dd7bd840a69ece2807fbca61a1de07c30080bf94fbbfd1de8d1446 at slot 63092266\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:28.21 UTC] Chain extended, new tip: 07e1252c5614b9bb6e6cff95066c134eb251aea6bef33dc34c0dd064934f2cea at slot 63092292\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:33.17 UTC] Chain extended, new tip: 0d3712fd7852b0aff00d660f4e7dc609808018dc271fe460bb9ff8270dd50d8f at slot 63092297\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:48.53 UTC] Chain extended, new tip: c8bb96ea392e41dce6fc157e164dbe19ba894d268f69985e20a2d65daeb4488c at slot 63092312\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:58.08 UTC] Chain extended, new tip: 35ea30e175abaae7983db9f65e7a00ba45312ecb151e53a651b3a6058add4c4f at slot 63092322\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:02.13 UTC] Chain extended, new tip: 5320de43ea30e46515f48263211212833474ea87ff046f36f0d83059fad6e9ff at slot 63092326\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:06.29 UTC] Chain extended, new tip: 58e9cb29bd771e0625689a0d591a7a8309f9e859ce4a3b70a9ab2e28173ce78b at slot 63092330\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:36.31 UTC] Chain extended, new tip: 1af2411f492e1895231cc910bdb1a68a45596157bcbfae5bdfd5c5ed81b03054 at slot 63092360\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:04.51 UTC] Chain extended, new tip: 270d47c5a277ef7efe028b6eb4764ab328db8e509ad962370bb383b1832bb260 at slot 63092388\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:29.52 UTC] Chain extended, new tip: 6fbe009ac36363cbebc607c733964878dfce6054c8785d1294f202acb475c861 at slot 63092413\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:01:12.63 UTC] Chain extended, new tip: f764596ece0b75d5d0054f22f3f0a0846f1647ff980d053015065099ec279839 at slot 63092456\n")))}h.isMDXComponent=!0},81900:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>s,toc:()=>p});var a=n(87462),o=(n(67294),n(3905)),r=n(74866),i=n(85162);const d={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},l=void 0,s={unversionedId:"networks-matrix",id:"networks-matrix",title:"networks-matrix",description:"Here is an up to date list of all the Mithril Networks, their configurations and their status:",source:"@site/root/networks-matrix.md",sourceDirName:".",slug:"/networks-matrix",permalink:"/doc/next/networks-matrix",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/networks-matrix.md",tags:[],version:"current",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},c={},p=[{value:"pre-release-preview",id:"pre-release-preview",level:2},{value:"testing-preview",id:"testing-preview",level:2},{value:"release-preprod",id:"release-preprod",level:2},{value:"release-mainnet",id:"release-mainnet",level:2}],f={toc:p},u="wrapper";function h(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Here is an up to date list of all the ",(0,o.kt)("strong",{parentName:"p"},"Mithril Networks"),", their configurations and their status:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Last update: 02/28/2023")),(0,o.kt)(r.Z,{mdxType:"Tabs"},(0,o.kt)(i.Z,{value:"preview",label:"Preview",default:!0,mdxType:"TabItem"},(0,o.kt)("h2",{id:"pre-release-preview"},(0,o.kt)("inlineCode",{parentName:"h2"},"pre-release-preview")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"pre-release-preview")," ",(0,o.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.pre-release-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"preview"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"Pre-Release \ud83d\udfe0")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://aggregator.pre-release-preview.api.mithril.network/aggregator")," ",(0,o.kt)("a",{parentName:"td",href:"https://aggregator.pre-release-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Latest Pre-Release")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases?q=pre-release"},"\u2197\ufe0f"))))),(0,o.kt)("br",null),(0,o.kt)("h2",{id:"testing-preview"},(0,o.kt)("inlineCode",{parentName:"h2"},"testing-preview")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f For devs only")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"testing-preview")," ",(0,o.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.testing-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"preview"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"Unstable \ud83d\udd34")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://aggregator.testing-preview.api.mithril.network/aggregator")," ",(0,o.kt)("a",{parentName:"td",href:"https://aggregator.testing-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Main Branch")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/tree/main"},"\u2197\ufe0f")))))),(0,o.kt)(i.Z,{value:"preprod",label:"Preprod",mdxType:"TabItem"},(0,o.kt)("h2",{id:"release-preprod"},(0,o.kt)("inlineCode",{parentName:"h2"},"release-preprod")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"release-preprod")," ",(0,o.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.release-preprod.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"preprod"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"1"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"Release \ud83d\udfe2")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://aggregator.release-preprod.api.mithril.network/aggregator")," ",(0,o.kt)("a",{parentName:"td",href:"https://aggregator.release-preprod.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Latest Release")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases/latest"},"\u2197\ufe0f")))))),(0,o.kt)(i.Z,{value:"mainnet",label:"Mainnet",mdxType:"TabItem"},(0,o.kt)("h2",{id:"release-mainnet"},(0,o.kt)("inlineCode",{parentName:"h2"},"release-mainnet")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"release-mainnet"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"mainnet"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"-"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"No \u274c")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},"-")))))),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"In this documentation, we use the generic:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_CARDANO_NETWORK**")," identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"preprod"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_AGGREGATOR_ENDPOINT**")," identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://aggregator.release-preprod.api.mithril.network/aggregator"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_GENESIS_VERIFICATION_KEY**")," identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADAPTER_TYPE**")," identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"cardano-chain"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADDRESS**")," identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_VERIFICATION_KEY**")," identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey"),")"))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/doc/assets/js/5efc9d3d.8e3e22e5.js b/doc/assets/js/5efc9d3d.8e3e22e5.js new file mode 100644 index 0000000000..9b83545610 --- /dev/null +++ b/doc/assets/js/5efc9d3d.8e3e22e5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[613,9531,2379],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),s=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(l.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,c=d(e,["components","mdxType","originalType","parentName"]),p=s(n),u=o,h=p["".concat(l,".").concat(u)]||p[u]||f[u]||r;return n?a.createElement(h,i(i({ref:t},c),{},{components:n})):a.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=u;var d={};for(var l in t)hasOwnProperty.call(t,l)&&(d[l]=t[l]);d.originalType=e,d[p]="string"==typeof e?e:o,i[1]=d;for(var s=2;s{n.d(t,{Z:()=>i});var a=n(67294),o=n(86010);const r={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,i),hidden:n},t)}},74866:(e,t,n)=>{n.d(t,{Z:()=>T});var a=n(87462),o=n(67294),r=n(86010),i=n(12466),d=n(16550),l=n(91980),s=n(67392),c=n(50012);function p(e){return function(e){return o.Children.map(e,(e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function f(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=t??p(n);return function(e){const t=(0,s.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,d.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,r=f(e),[i,d]=(0,o.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[l,s]=h({queryString:n,groupId:a}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,c.Nk)(n);return[a,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:a}),g=(()=>{const e=l??p;return u({value:e,tabValues:r})?e:null})();(0,o.useLayoutEffect)((()=>{g&&d(g)}),[g]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!u({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);d(e),s(e),m(e)}),[s,m,r]),tabValues:r}}var g=n(72389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function k(e){let{className:t,block:n,selectedValue:d,selectValue:l,tabValues:s}=e;const c=[],{blockElementScrollPositionUntilNextRender:p}=(0,i.o5)(),f=e=>{const t=e.currentTarget,n=c.indexOf(t),a=s[n].value;a!==d&&(p(t),l(a))},u=e=>{let t=null;switch(e.key){case"Enter":f(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},s.map((e=>{let{value:t,label:n,attributes:i}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:d===t?0:-1,"aria-selected":d===t,key:t,ref:e=>c.push(e),onKeyDown:u,onClick:f},i,{className:(0,r.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":d===t})}),n??t)})))}function N(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function C(e){const t=m(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",b.tabList)},o.createElement(k,(0,a.Z)({},e,t)),o.createElement(N,(0,a.Z)({},e,t)))}function T(e){const t=(0,g.Z)();return o.createElement(C,(0,a.Z)({key:String(t)},e))}},61494:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>f,frontMatter:()=>r,metadata:()=>d,toc:()=>s});var a=n(87462),o=(n(67294),n(3905));const r={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},i=void 0,d={unversionedId:"compiled-binaries",id:"compiled-binaries",title:"compiled-binaries",description:"Download compiled binary",source:"@site/root/compiled-binaries.md",sourceDirName:".",slug:"/compiled-binaries",permalink:"/doc/next/compiled-binaries",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/compiled-binaries.md",tags:[],version:"current",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},l={},s=[{value:"Download compiled binary",id:"download-compiled-binary",level:2}],c={toc:s},p="wrapper";function f(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"download-compiled-binary"},"Download compiled binary"),(0,o.kt)("p",null,"Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package."),(0,o.kt)("p",null,"You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting."),(0,o.kt)("p",null,"These links are available in the ",(0,o.kt)("strong",{parentName:"p"},"Build From")," column of the above ",(0,o.kt)("strong",{parentName:"p"},"Mithril Networks")," table."))}f.isMDXComponent=!0},69752:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>s,toc:()=>p});var a=n(87462),o=(n(67294),n(3905)),r=n(81900),i=n(61494);const d={sidebar_position:1},l="Bootstrap a Cardano Node",s={unversionedId:"manual/getting-started/bootstrap-cardano-node",id:"manual/getting-started/bootstrap-cardano-node",title:"Bootstrap a Cardano Node",description:"Thanks to a Mithril Client connected to a Mithril Aggregator, you will restore a full Cardano node in less than 2 hours!",source:"@site/root/manual/getting-started/bootstrap-cardano-node.md",sourceDirName:"manual/getting-started",slug:"/manual/getting-started/bootstrap-cardano-node",permalink:"/doc/next/manual/getting-started/bootstrap-cardano-node",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/getting-started/bootstrap-cardano-node.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docSideBar",previous:{title:"Getting Started",permalink:"/doc/next/category/getting-started"},next:{title:"Run a Mithril Signer node (SPO)",permalink:"/doc/next/manual/getting-started/run-signer-node"}},c={},p=[{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Download source",id:"download-source",level:2},{value:"Build Mithril Client binary",id:"build-mithril-client-binary",level:2},{value:"Verify binary",id:"verify-binary",level:2},{value:"Verify version",id:"verify-version",level:3},{value:"Verify build",id:"verify-build",level:3},{value:"Run Docker container",id:"run-docker-container",level:2},{value:"Bootstrap a Cardano node from a testnet Mithril snapshot",id:"bootstrap-a-cardano-node-from-a-testnet-mithril-snapshot",level:2},{value:"Step 1: Prepare some useful variables",id:"step-1-prepare-some-useful-variables",level:3},{value:"Step 2: Select A Snapshot",id:"step-2-select-a-snapshot",level:3},{value:"Step 3: Show Snapshot Details",id:"step-3-show-snapshot-details",level:3},{value:"Step 4: Download Selected Snapshot",id:"step-4-download-selected-snapshot",level:3},{value:"Step 5: Restore Selected Snapshot",id:"step-5-restore-selected-snapshot",level:3},{value:"Step 6: Launch a Cardano Node From Restored Snapshot",id:"step-6-launch-a-cardano-node-from-restored-snapshot",level:3}],f={toc:p},u="wrapper";function h(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"bootstrap-a-cardano-node"},"Bootstrap a Cardano Node"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Thanks to a ",(0,o.kt)("strong",{parentName:"p"},"Mithril Client")," connected to a ",(0,o.kt)("strong",{parentName:"p"},"Mithril Aggregator"),", you will restore a full Cardano node in less than 2 hours!")),(0,o.kt)("admonition",{title:"Mithril Networks",type:"note"},(0,o.kt)(r.default,{mdxType:"NetworksMatrix"})),(0,o.kt)("h1",{id:"video-demonstration"},"Video demonstration"),(0,o.kt)("p",null,"In this video you will see how fast the bootstrapping of a Cardano node with Mithril is compared to classical bootstrapping (benchmark done on mainnet with Daedalus wallet)."),(0,o.kt)("iframe",{style:{width:"100%",height:"480px"},src:"https://www.youtube.com/embed/5qjJNRgEzYo",title:"Daedalus Bootstrap Benchmark on mainnet with/without Mithril",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"true"}),(0,o.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install a ",(0,o.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"correctly configured")," Rust toolchain (latest stable version).")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run ",(0,o.kt)("inlineCode",{parentName:"p"},"sudo apt install libssl-dev"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install other requirements"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get install make build-essential m4 docker jq\n")),(0,o.kt)("h2",{id:"download-source"},"Download source"),(0,o.kt)("p",null,"Download from GitHub (HTTPS)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/input-output-hk/mithril.git\n")),(0,o.kt)("p",null,"Or (SSH)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:input-output-hk/mithril.git\n")),(0,o.kt)("h2",{id:"build-mithril-client-binary"},"Build Mithril Client binary"),(0,o.kt)("p",null,"Switch to build branch / tag"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, \n# please refer to the **Build From** column of the above **Mithril Networks** table\ngit switch **YOUR_BUILD_BRANCH_OR_TAG**\n")),(0,o.kt)("p",null,"Change directory"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril/mithril-client\n")),(0,o.kt)("p",null,"Run tests (Optional)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"make test\n")),(0,o.kt)("p",null,"Build executable"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"make build\n")),(0,o.kt)("h2",{id:"verify-binary"},"Verify binary"),(0,o.kt)("h3",{id:"verify-version"},"Verify version"),(0,o.kt)("p",null,"Check that the Mithril Signer binary is running the correct version by running"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client -V\n")),(0,o.kt)("p",null,"You should see something like"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mithril-client 0.2.0\n")),(0,o.kt)("p",null,"\u26a0\ufe0f Verify that the version displayed is the version described in the content of the Release / Pre-Release note (see the ",(0,o.kt)("strong",{parentName:"p"},"Build From")," column of the above ",(0,o.kt)("strong",{parentName:"p"},"Mithril Networks")," table)"),(0,o.kt)("h3",{id:"verify-build"},"Verify build"),(0,o.kt)("p",null,"Check that the Mithril Client binary is working fine by running its help"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client -h\n")),(0,o.kt)("p",null,"You should see"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"This program downloads, checks and restores certified blockchain snapshots.\n\nUsage: mithril-client [OPTIONS] \n\nCommands:\n list List available snapshots\n show Show detailed informations about a snapshot\n download Download a snapshot\n restore Restore a snapshot\n help Print this message or the help of the given subcommand(s)\n\nOptions:\n --run-mode \n Run Mode [env: RUN_MODE=] [default: dev]\n -v, --verbose...\n Verbosity level (-v=warning, -vv=info, -vvv=debug)\n --config-directory \n Directory where configuration file is located [default: ./config]\n --aggregator-endpoint \n Override configuration Aggregator endpoint URL\n -h, --help\n Print help information\n -V, --version\n Print version information\n")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"You can use the ",(0,o.kt)("inlineCode",{parentName:"p"},"--json")," option in order to display results in ",(0,o.kt)("inlineCode",{parentName:"p"},"JSON")," format for the ",(0,o.kt)("inlineCode",{parentName:"p"},"list")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"show")," commands:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client list --json\n"))),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you want to dig deeper, you can get access to several level of logs from the Mithril Client:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-v")," for some logs (WARN)"),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-vv")," for more logs (INFO)"),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-vvv")," for even more logs (DEBUG)"),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-vvvv")," for all logs (TRACE)"))),(0,o.kt)(i.default,{mdxType:"CompiledBinaries"}),(0,o.kt)("h2",{id:"run-docker-container"},"Run Docker container"),(0,o.kt)("p",null,"The list of available images on the registry is listed ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/mithril/pkgs/container/mithril-client"},"here")),(0,o.kt)("p",null,"Prepare an environment variable with the selected Docker image"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**\n")),(0,o.kt)("p",null,"Here is an example configuration for the ",(0,o.kt)("inlineCode",{parentName:"p"},"latest")," stable Docker image"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=latest\n")),(0,o.kt)("p",null,"Then create a shell function for the Mithril Client:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mithril_client () {\n docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@\n}\n")),(0,o.kt)("p",null,"Now you can use the ",(0,o.kt)("inlineCode",{parentName:"p"},"mithril_client")," function:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# 1- Help\nmithril_client help\n\n# 2- List snapshots\nmithril_client list\n")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"In the following part of the document, you will need to replace the ",(0,o.kt)("inlineCode",{parentName:"p"},"./mithril-client")," commands with ",(0,o.kt)("inlineCode",{parentName:"p"},"mithril_client")," in order to use the above shell function.")),(0,o.kt)("h2",{id:"bootstrap-a-cardano-node-from-a-testnet-mithril-snapshot"},"Bootstrap a Cardano node from a testnet Mithril snapshot"),(0,o.kt)("h3",{id:"step-1-prepare-some-useful-variables"},"Step 1: Prepare some useful variables"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# Cardano network\nexport NETWORK=**YOUR_CARDANO_NETWORK**\n\n# Aggregator API endpoint URL\nexport AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**\n\n# Genesis verification key\nexport GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)\n\n# Digest of the latest produced snapshot for convenience of the demo\n# You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2\nexport SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/artifact/snapshots | jq -r '.[0].digest')\n")),(0,o.kt)("h3",{id:"step-2-select-a-snapshot"},"Step 2: Select A Snapshot"),(0,o.kt)("p",null,"List the available snapshots with which you can bootstrap a Cardano node"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client list\n")),(0,o.kt)("p",null,"You will see a list of snapshots"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| Network | Digest | Size | Locations | Created |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 | 5273560121 | 1 | 2022-07-10T11:19:18.042554390Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | 22267a8399cbd1731420f7241c91bec66b3126c971d53b1cdf4db0c016320df4 | 5267582819 | 1 | 2022-07-10T05:44:59.048360039Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | c14792945b3880fa9f8880348f885c707b8e4d13cdb035b9a735c15f88ea45db | 5265335799 | 1 | 2022-07-10T00:03:43.656860711Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | 0344faf7ebcd7cbf606288bfc8e7c11f992bd4f28f3ac159942b487a0217f485 | 5265577167 | 1 | 2022-07-09T18:31:16.604292173Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | fc42ef98e233717a7180502dc51aab1ca64d5bd6d6e9d72b4096ac1f7e45a129 | 5262797245 | 1 | 2022-07-09T12:45:20.306735843Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n")),(0,o.kt)("h3",{id:"step-3-show-snapshot-details"},"Step 3: Show Snapshot Details"),(0,o.kt)("p",null,"Get some more details from a specific snapshot (Optional)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client show $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see more information about a snapshot"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Info | Value |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Network | testnet |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Digest | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Size | 5273560121 |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Location 1 | https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Created | 2022-07-10T11:19:18.042554390Z |\n")),(0,o.kt)("h3",{id:"step-4-download-selected-snapshot"},"Step 4: Download Selected Snapshot"),(0,o.kt)("p",null,"Download the selected snapshot from the remote location to your remote location"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client download $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the selected snapshot archive has been downloaded locally"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"Download success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 #1\nfrom https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz\nto /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/snapshot.archive.tar.gz\n")),(0,o.kt)("h3",{id:"step-5-restore-selected-snapshot"},"Step 5: Restore Selected Snapshot"),(0,o.kt)("p",null,"Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client restore $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the snapshot archive is unpacked and that the associated certificate is valid"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Unpacking snapshot...\nUnpack success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068\nto /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db\n\nRestore a Cardano Node with:\n\ndocker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="/home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db",target=/data/db/ -e NETWORK=testnet inputoutput/cardano-node\n')),(0,o.kt)("h3",{id:"step-6-launch-a-cardano-node-from-restored-snapshot"},"Step 6: Launch a Cardano Node From Restored Snapshot"),(0,o.kt)("p",null,"Launch an empty Cardano node and make it live in minutes!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="$(pwd)/data/testnet/$SNAPSHOT_DIGEST/db",target=/data/db/ -e NETWORK=**YOUR_CARDANO_NETWORK** inputoutput/cardano-node\n')),(0,o.kt)("p",null,"You will see the node start by validating the files injested from the snapshot archive"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Starting: /nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run\n--config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json\n--database-path /data/db\n--topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml\n--host-addr 0.0.0.0\n--port 3001\n--socket-path /ipc/node.socket\n\n\n\n\n\n+RTS\n-N2\n-I0\n-A16m\n-qg\n-qb\n--disable-delayed-os-memory-return\n-RTS\n..or, once again, in a single line:\n/nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run --config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json --database-path /data/db --topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml --host-addr 0.0.0.0 --port 3001 --socket-path /ipc/node.socket +RTS -N2 -I0 -A16m -qg -qb --disable-delayed-os-memory-return -RTS\nNode configuration: NodeConfiguration {ncSocketConfig = SocketConfig {ncNodeIPv4Addr = Last {getLast = Just 0.0.0.0}, ncNodeIPv6Addr = Last {getLast = Nothing}, ncNodePortNumber = Last {getLast = Just 3001}, ncSocketPath = Last {getLast = Just "/ipc/node.socket"}}, ncConfigFile = "/nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json", ncTopologyFile = "/nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml", ncDatabaseFile = "/data/db", ncProtocolFiles = ProtocolFilepaths {byronCertFile = Nothing, byronKeyFile = Nothing, shelleyKESFile = Nothing, shelleyVRFFile = Nothing, shelleyCertFile = Nothing, shelleyBulkCredsFile = Nothing}, ncValidateDB = False, ncShutdownConfig = ShutdownConfig {scIPC = Nothing, scOnSyncLimit = Just NoShutdown}, ncProtocolConfig = NodeProtocolConfigurationCardano (NodeByronProtocolConfiguration {npcByronGenesisFile = "/nix/store/kax0css4lx3ywihvsgrqjym0jpi20f99-byron-genesis.json", npcByronGenesisFileHash = Just "96fceff972c2c06bd3bb5243c39215333be6d56aaf4823073dca31afe5038471", npcByronReqNetworkMagic = RequiresMagic, npcByronPbftSignatureThresh = Nothing, npcByronApplicationName = ApplicationName {unApplicationName = "cardano-sl"}, npcByronApplicationVersion = 0, npcByronSupportedProtocolVersionMajor = 3, npcByronSupportedProtocolVersionMinor = 0, npcByronSupportedProtocolVersionAlt = 0}) (NodeShelleyProtocolConfiguration {npcShelleyGenesisFile = "/nix/store/2xhy92909anynqsvx1b1x153cxwnfmzx-shelley-genesis.json", npcShelleyGenesisFileHash = Just "849a1764f152e1b09c89c0dfdbcbdd38d711d1fec2db5dfa0f87cf2737a0eaf4"}) (NodeAlonzoProtocolConfiguration {npcAlonzoGenesisFile = "/nix/store/8qnphq6yvcjspiy3z0aijfd6cv64l3hl-alonzo-genesis.json", npcAlonzoGenesisFileHash = Just "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874"}) (NodeHardForkProtocolConfiguration {npcTestEnableDevelopmentHardForkEras = False, npcTestShelleyHardForkAtEpoch = Nothing, npcTestShelleyHardForkAtVersion = Nothing, npcTestAllegraHardForkAtEpoch = Nothing, npcTestAllegraHardForkAtVersion = Nothing, npcTestMaryHardForkAtEpoch = Nothing, npcTestMaryHardForkAtVersion = Nothing, npcTestAlonzoHardForkAtEpoch = Nothing, npcTestAlonzoHardForkAtVersion = Nothing, npcTestBabbageHardForkAtEpoch = Nothing, npcTestBabbageHardForkAtVersion = Nothing}), ncDiffusionMode = InitiatorAndResponderDiffusionMode, ncSnapshotInterval = DefaultSnapshotInterval, ncTestEnableDevelopmentNetworkProtocols = False, ncMaxConcurrencyBulkSync = Nothing, ncMaxConcurrencyDeadline = Nothing, ncLoggingSwitch = True, ncLogMetrics = True, ncTraceConfig = TracingOnLegacy (TraceSelection {traceVerbosity = NormalVerbosity, traceAcceptPolicy = OnOff {isOn = True}, traceBlockFetchClient = OnOff {isOn = False}, traceBlockFetchDecisions = OnOff {isOn = False}, traceBlockFetchProtocol = OnOff {isOn = False}, traceBlockFetchProtocolSerialised = OnOff {isOn = False}, traceBlockFetchServer = OnOff {isOn = False}, traceBlockchainTime = OnOff {isOn = False}, traceChainDB = OnOff {isOn = True}, traceChainSyncBlockServer = OnOff {isOn = False}, traceChainSyncClient = OnOff {isOn = False}, traceChainSyncHeaderServer = OnOff {isOn = False}, traceChainSyncProtocol = OnOff {isOn = False}, traceConnectionManager = OnOff {isOn = True}, traceConnectionManagerCounters = OnOff {isOn = True}, traceConnectionManagerTransitions = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorTracer = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorResponderTracer = OnOff {isOn = False}, traceDiffusionInitialization = OnOff {isOn = True}, traceDnsResolver = OnOff {isOn = False}, traceDnsSubscription = OnOff {isOn = True}, traceErrorPolicy = OnOff {isOn = True}, traceForge = OnOff {isOn = True}, traceForgeStateInfo = OnOff {isOn = True}, traceHandshake = OnOff {isOn = False}, traceInboundGovernor = OnOff {isOn = True}, traceInboundGovernorCounters = OnOff {isOn = True}, traceInboundGovernorTransitions = OnOff {isOn = True}, traceIpSubscription = OnOff {isOn = True}, traceKeepAliveClient = OnOff {isOn = False}, traceLedgerPeers = OnOff {isOn = True}, traceLocalChainSyncProtocol = OnOff {isOn = False}, traceLocalConnectionManager = OnOff {isOn = False}, traceLocalErrorPolicy = OnOff {isOn = True}, traceLocalHandshake = OnOff {isOn = False}, traceLocalInboundGovernor = OnOff {isOn = False}, traceLocalMux = OnOff {isOn = False}, traceLocalRootPeers = OnOff {isOn = True}, traceLocalServer = OnOff {isOn = False}, traceLocalStateQueryProtocol = OnOff {isOn = False}, traceLocalTxMonitorProtocol = OnOff {isOn = False}, traceLocalTxSubmissionProtocol = OnOff {isOn = False}, traceLocalTxSubmissionServer = OnOff {isOn = False}, traceMempool = OnOff {isOn = True}, traceMux = OnOff {isOn = False}, tracePeerSelection = OnOff {isOn = True}, tracePeerSelectionCounters = OnOff {isOn = True}, tracePeerSelectionActions = OnOff {isOn = True}, tracePublicRootPeers = OnOff {isOn = True}, traceServer = OnOff {isOn = True}, traceTxInbound = OnOff {isOn = False}, traceTxOutbound = OnOff {isOn = False}, traceTxSubmissionProtocol = OnOff {isOn = False}, traceTxSubmission2Protocol = OnOff {isOn = False}}), ncTraceForwardSocket = Nothing, ncMaybeMempoolCapacityOverride = Nothing, ncProtocolIdleTimeout = 5s, ncTimeWaitTimeout = 60s, ncAcceptedConnectionsLimit = AcceptedConnectionsLimit {acceptedConnectionsHardLimit = 512, acceptedConnectionsSoftLimit = 384, acceptedConnectionsDelay = 5s}, ncTargetNumberOfRootPeers = 100, ncTargetNumberOfKnownPeers = 100, ncTargetNumberOfEstablishedPeers = 50, ncTargetNumberOfActivePeers = 20, ncEnableP2P = DisabledP2PMode}\nListening on http://127.0.0.1:12798\n[c995d1df:cardano.node.basicInfo.protocol:Notice:5] [2022-07-10 13:48:51.68 UTC] Byron; Shelley\n[c995d1df:cardano.node.basicInfo.version:Notice:5] [2022-07-10 13:48:51.68 UTC] 1.35.1\n[c995d1df:cardano.node.basicInfo.commit:Notice:5] [2022-07-10 13:48:51.68 UTC] 0000000000000000000000000000000000000000\n[c995d1df:cardano.node.basicInfo.nodeStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2022-07-10 13:48:51.685957811 UTC\n[c995d1df:cardano.node.basicInfo.systemStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2019-07-24 20:20:16 UTC\n[c995d1df:cardano.node.basicInfo.slotLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 20s\n[c995d1df:cardano.node.basicInfo.epochLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 21600\n[c995d1df:cardano.node.basicInfo.slotLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Config path /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json, Network magic NetworkMagic {unNetworkMagic = 1097911063}, Protocol "Byron; Shelley", Version "1.35.1", Commit "0000000000000000000000000000000000000000", Node start time 2022-07-10 13:48:51.694962147 UTC\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Byron, Slot length 20s, Epoch length 21600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Shelley, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Allegra, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Mary, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Alonzo, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Babbage, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] startup time: 1657460932\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.70 UTC] \nnode addresses: 0.0.0.0:3001\nlocal socket: /ipc/node.socket\nnode-to-node versions:\nNodeToNodeV_7 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)\nNodeToNodeV_8 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)\nNodeToNodeV_9 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* Nil)\nnode-to-client versions:\nNodeToClientV_9 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_10 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_11 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_12 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_13 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* Nil)\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Chain DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Immutable DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.79 UTC] Validating chunk no. 0 out of 2917. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validated chunk no. 0 out of 2917. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validating chunk no. 1 out of 2917. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validated chunk no. 1 out of 2917. Progress: 0.03%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validating chunk no. 2 out of 2917. Progress: 0.03%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validated chunk no. 2 out of 2917. Progress: 0.07%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validating chunk no. 3 out of 2917. Progress: 0.07%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validated chunk no. 3 out of 2917. Progress: 0.10%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validating chunk no. 4 out of 2917. Progress: 0.10%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validated chunk no. 4 out of 2917. Progress: 0.14%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validating chunk no. 5 out of 2917. Progress: 0.14%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:54.14 UTC] Validated chunk no. 5 out of 2917. \n\n... (Cut for readability)\n\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validated chunk no. 2911 out of 2917. Progress: 99.79%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validating chunk no. 2912 out of 2917. Progress: 99.79%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validated chunk no. 2912 out of 2917. Progress: 99.83%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validating chunk no. 2913 out of 2917. Progress: 99.83%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validated chunk no. 2913 out of 2917. Progress: 99.86%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validating chunk no. 2914 out of 2917. Progress: 99.86%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validated chunk no. 2914 out of 2917. Progress: 99.90%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validating chunk no. 2915 out of 2917. Progress: 99.90%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validated chunk no. 2915 out of 2917. Progress: 99.93%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validating chunk no. 2916 out of 2917. Progress: 99.93%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validated chunk no. 2916 out of 2917. Progress: 99.97%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validating chunk no. 2917 out of 2917. Progress: 99.97%\n[c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the secondary index for the chunk file with number 2917.\n[c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the primary index for the chunk file with number 2917.\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Found a valid last location at chunk 2917 with tip 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432@63009237.\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Opened imm db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and chunk 2917\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Started opening Volatile DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Opened vol db\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Started opening Ledger DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replaying ledger from snapshot at 16ce3e707388b8c033f87b440ac89095b2d2fc5fa2b42f768c38da286312a31a at slot 63005524\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replayed block: slot 63005533 out of 63009237. Progress: 0.24%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.20 UTC] Replayed block: slot 63007165 out of 63009237. Progress: 44.20%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Opened lgr db\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Started initial chain selection\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.45 UTC] Pushing ledger state for block 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] before next, messages elided = 63009476\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 5e59df354b64634bd27fc1b3ed08991c6de909ea085625da2ca78ec5a6a3e37c at slot 63019450. Progress: 13.85%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block e0610e4f03ef640ead31a729f6f18aa820f3906f6414b179d3c553f0011162ef at slot 63019479. Progress: 13.89%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 8edc84f1f289475ca5c2afd9cae3c704ed7bcdf3e489fd1842e3904bd2d6d8c5 at slot 63019510. Progress: 13.93%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] before next, messages elided = 63019575\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block fc426a1c3a8c5ae61100e5ccfcaa47ccfb6cc144ed17fcd47a2b55f48890790a at slot 63029515. Progress: 27.75%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 68059200505d3ec65d3ddce9441efb0607adab002066c00acc050f5bb0c53deb at slot 63029578. Progress: 27.84%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 25f5cc004ad90dc554e085699f1386dc8f69cec4012a7b35735b83da6fa68a0b at slot 63029602. Progress: 27.87%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] before next, messages elided = 63029636\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block cfb3dd669fd1a85aaf005ddd0e4a8b90cbb7b2c66dc8ff6f41e2e7aa2a0f0c57 at slot 63039634. Progress: 41.72%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block d7f057436e749e4468cfd8b17a04d447c4ce628b8dc33ea7ebdc4d3ad4659dec at slot 63039638. Progress: 41.73%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block 73fcb92346714585e1dbb484b1678bb15dab7304a8071cd95ec85195ca7a46be at slot 63039655. Progress: 41.75%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] before next, messages elided = 63039729\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block a7256fa99f7bf50d0e764cb80122222b1d2b80ffef4bee30e42c0bb80c5f1168 at slot 63049716. Progress: 55.64%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block 75e2064629d6a017bfe324a3d31723ed7bfa017eceda1549bd6c9f4d63653394 at slot 63049861. Progress: 55.84%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.94 UTC] Pushing ledger state for block 71aeaae8f83ee6b94a7feb521c16f0d889a9b95be6da85d540ac0435b412fb2c at slot 63049904. Progress: 55.90%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] before next, messages elided = 63049909\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block 15ad241c6908d0748cb80d17035d4001f7f86ee22fe71197cbe9bc7489d8e71b at slot 63059862. Progress: 69.65%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block a5e38b0875d44e10a3cba9c420ad4c9708e913e3458f1003a8236a831762069a at slot 63059915. Progress: 69.73%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block ca6dc89bd705476bcd056d6ffc3dd43499e51d0e5ecfe56a439fadacac50fc1b at slot 63059939. Progress: 69.76%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] before next, messages elided = 63059957\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 3c8593b6859b02abaa7f3b69d2114b1f402c65eef6904020e5ed37356aea4461 at slot 63069941. Progress: 83.57%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 50a06570febcf89ee00c386979d3a616561996b6c5cf6cbff44c20aa8454c375 at slot 63069971. Progress: 83.61%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 6265f3c30f149ba0a797a1d2c6998b918f089e7455ab665e3369456105901a5a at slot 63069972. Progress: 83.62%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] before next, messages elided = 63069985\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 0be786a1d9272083e9e184da3bc3bfcb71b82ad10fbf52f4959dc5dc6d1b7b3c at slot 63079898. Progress: 97.32%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 2862bd67a50bf9f6f31ab11d9153663d3e657f88c24ba8e71174f8f5216c2a99 at slot 63079992. Progress: 97.45%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block cc9036c6c4076ca28ac5d03522001c233a9202cb5b1d9484c3e406fbb3406fd5 at slot 63079994. Progress: 97.45%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] before next, messages elided = 63080024\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Pushing ledger state for block c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837. Progress: 100.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Valid candidate at tip 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Initial chain selected\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Opened db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and tip c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837\n[c995d1df:cardano.node.shutdown:Warning:5] [2022-07-10 13:53:39.87 UTC] Will terminate upon reaching NoShutdown\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] CreatingServerSocket 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ConfiguringServerSocket 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ListeningServerSocket 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ServerSocketUp 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] RunServer (0.0.0.0:3001 :| [])\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreateSystemdSocketForSnocketPath (LocalAddress "/ipc/node.socket")\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreatedLocalSocket (LocalAddress "/ipc/node.socket")\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ConfiguringLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ListeningLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] LocalSocketUp (LocalAddress "/ipc/node.socket") (FileDescriptor 26)\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] RunLocalServer (LocalAddress "/ipc/node.socket")\n[c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d014:e00:a200:0:1:0:1]:3001\n[c995d1df:cardano.node.DnsSubscription:Notice:358] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 3.131.32.242:3001\n[c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d01c:321:2101:0:1:0:2]:3001\n[c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 13.41.9.54:3001\n[c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.95 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt End, destination 13.41.9.54:3001 outcome: ConnectSuccessLast\n[c995d1df:cardano.node.ErrorPolicy:Notice:343] [2022-07-10 13:53:39.95 UTC] IP 3.131.32.242:3001 ErrorPolicySuspendConsumer (Just (ConnectionExceptionTrace (SubscriberError {seType = SubscriberParallelConnectionCancelled, seMessage = "Parallel connection cancelled", seStack = []}))) 1s\n')),(0,o.kt)("p",null,"Then the Cardano node will synchronize with the other nodes of the network and start adding blockss"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:53:40.06 UTC] Chain extended, new tip: 7ae33b2f4bc8b84e77dfd539f0f6e7f59b293e96f62fdcfdb17cbd7a006fe5c0 at slot 63081906\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:08.30 UTC] Chain extended, new tip: 6b4ccd2bec5e3862b23ea0f7c2f342a3659cecdcfdaf04551179df3839be6213 at slot 63092090\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:21.36 UTC] Chain extended, new tip: 6e95eb82da5a38544e6ef430a2733f6014c3c10527003b9d3bdc534f6a2ce81f at slot 63092103\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:39.04 UTC] Chain extended, new tip: a662672ec4b988022e135cb0b7e440f5fbffe8e205771d13a566a418f7021ba7 at slot 63092121\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:45.18 UTC] Chain extended, new tip: 2a0f2e6f218a08f4e0bc4668285d8e792fd7ec62f05880bd5b2d23d6bce20dfb at slot 63092127\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:18.05 UTC] Chain extended, new tip: ab9ef8af92ec062ec59a10da588e238ba8840705c095ebd5cd5da7ab9ea9c8e1 at slot 63092160\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:45.15 UTC] Chain extended, new tip: e59bcbf34172eb6a934e2580f6b20ebe1ea32fba7420feec096744fab8ffce76 at slot 63092189\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:57:59.06 UTC] Chain extended, new tip: ea0e76fe069a0bcb831cf6b342530adf2a28de4922a752cff734fe81a1842dff at slot 63092263\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:02.27 UTC] Chain extended, new tip: 1b68a85a10dd7bd840a69ece2807fbca61a1de07c30080bf94fbbfd1de8d1446 at slot 63092266\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:28.21 UTC] Chain extended, new tip: 07e1252c5614b9bb6e6cff95066c134eb251aea6bef33dc34c0dd064934f2cea at slot 63092292\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:33.17 UTC] Chain extended, new tip: 0d3712fd7852b0aff00d660f4e7dc609808018dc271fe460bb9ff8270dd50d8f at slot 63092297\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:48.53 UTC] Chain extended, new tip: c8bb96ea392e41dce6fc157e164dbe19ba894d268f69985e20a2d65daeb4488c at slot 63092312\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:58.08 UTC] Chain extended, new tip: 35ea30e175abaae7983db9f65e7a00ba45312ecb151e53a651b3a6058add4c4f at slot 63092322\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:02.13 UTC] Chain extended, new tip: 5320de43ea30e46515f48263211212833474ea87ff046f36f0d83059fad6e9ff at slot 63092326\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:06.29 UTC] Chain extended, new tip: 58e9cb29bd771e0625689a0d591a7a8309f9e859ce4a3b70a9ab2e28173ce78b at slot 63092330\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:36.31 UTC] Chain extended, new tip: 1af2411f492e1895231cc910bdb1a68a45596157bcbfae5bdfd5c5ed81b03054 at slot 63092360\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:04.51 UTC] Chain extended, new tip: 270d47c5a277ef7efe028b6eb4764ab328db8e509ad962370bb383b1832bb260 at slot 63092388\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:29.52 UTC] Chain extended, new tip: 6fbe009ac36363cbebc607c733964878dfce6054c8785d1294f202acb475c861 at slot 63092413\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:01:12.63 UTC] Chain extended, new tip: f764596ece0b75d5d0054f22f3f0a0846f1647ff980d053015065099ec279839 at slot 63092456\n")))}h.isMDXComponent=!0},81900:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>s,toc:()=>p});var a=n(87462),o=(n(67294),n(3905)),r=n(74866),i=n(85162);const d={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},l=void 0,s={unversionedId:"networks-matrix",id:"networks-matrix",title:"networks-matrix",description:"Here is an up to date list of all the Mithril Networks, their configurations and their status:",source:"@site/root/networks-matrix.md",sourceDirName:".",slug:"/networks-matrix",permalink:"/doc/next/networks-matrix",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/networks-matrix.md",tags:[],version:"current",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},c={},p=[{value:"pre-release-preview",id:"pre-release-preview",level:2},{value:"testing-preview",id:"testing-preview",level:2},{value:"release-preprod",id:"release-preprod",level:2},{value:"release-mainnet",id:"release-mainnet",level:2}],f={toc:p},u="wrapper";function h(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Here is an up to date list of all the ",(0,o.kt)("strong",{parentName:"p"},"Mithril Networks"),", their configurations and their status:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Last update: 02/28/2023")),(0,o.kt)(r.Z,{mdxType:"Tabs"},(0,o.kt)(i.Z,{value:"preview",label:"Preview",default:!0,mdxType:"TabItem"},(0,o.kt)("h2",{id:"pre-release-preview"},(0,o.kt)("inlineCode",{parentName:"h2"},"pre-release-preview")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"pre-release-preview")," ",(0,o.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.pre-release-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"preview"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"Pre-Release \ud83d\udfe0")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://aggregator.pre-release-preview.api.mithril.network/aggregator")," ",(0,o.kt)("a",{parentName:"td",href:"https://aggregator.pre-release-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Latest Pre-Release")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases?q=pre-release"},"\u2197\ufe0f"))))),(0,o.kt)("br",null),(0,o.kt)("h2",{id:"testing-preview"},(0,o.kt)("inlineCode",{parentName:"h2"},"testing-preview")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f For devs only")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"testing-preview")," ",(0,o.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.testing-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"preview"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"Unstable \ud83d\udd34")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://aggregator.testing-preview.api.mithril.network/aggregator")," ",(0,o.kt)("a",{parentName:"td",href:"https://aggregator.testing-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Main Branch")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/tree/main"},"\u2197\ufe0f")))))),(0,o.kt)(i.Z,{value:"preprod",label:"Preprod",mdxType:"TabItem"},(0,o.kt)("h2",{id:"release-preprod"},(0,o.kt)("inlineCode",{parentName:"h2"},"release-preprod")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"release-preprod")," ",(0,o.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.release-preprod.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"preprod"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"1"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"Release \ud83d\udfe2")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://aggregator.release-preprod.api.mithril.network/aggregator")," ",(0,o.kt)("a",{parentName:"td",href:"https://aggregator.release-preprod.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Latest Release")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases/latest"},"\u2197\ufe0f")))))),(0,o.kt)(i.Z,{value:"mainnet",label:"Mainnet",mdxType:"TabItem"},(0,o.kt)("h2",{id:"release-mainnet"},(0,o.kt)("inlineCode",{parentName:"h2"},"release-mainnet")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"release-mainnet"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"mainnet"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"-"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"No \u274c")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},"-")))))),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"In this documentation, we use the generic:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_CARDANO_NETWORK**")," identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"preprod"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_AGGREGATOR_ENDPOINT**")," identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://aggregator.release-preprod.api.mithril.network/aggregator"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_GENESIS_VERIFICATION_KEY**")," identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADAPTER_TYPE**")," identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"cardano-chain"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADDRESS**")," identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_VERIFICATION_KEY**")," identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey"),")"))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/doc/assets/js/653f7965.5bb2838f.js b/doc/assets/js/653f7965.5bb2838f.js new file mode 100644 index 0000000000..ef8d1835e2 --- /dev/null +++ b/doc/assets/js/653f7965.5bb2838f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[7695,9531,2379],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>g});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function l(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),d=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):l(l({},e),t)),a},m=function(t){var e=d(t.components);return n.createElement(p.Provider,{value:e},t.children)},u="mdxType",s={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,i=t.originalType,p=t.parentName,m=o(t,["components","mdxType","originalType","parentName"]),u=d(a),k=r,g=u["".concat(p,".").concat(k)]||u[k]||s[k]||i;return a?n.createElement(g,l(l({ref:e},m),{},{components:a})):n.createElement(g,l({ref:e},m))}));function g(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=a.length,l=new Array(i);l[0]=k;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[u]="string"==typeof t?t:r,l[1]=o;for(var d=2;d{a.d(e,{Z:()=>l});var n=a(67294),r=a(86010);const i={tabItem:"tabItem_Ymn6"};function l(t){let{children:e,hidden:a,className:l}=t;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,l),hidden:a},e)}},74866:(t,e,a)=>{a.d(e,{Z:()=>y});var n=a(87462),r=a(67294),i=a(86010),l=a(12466),o=a(16550),p=a(91980),d=a(67392),m=a(50012);function u(t){return function(t){return r.Children.map(t,(t=>{if(!t||(0,r.isValidElement)(t)&&function(t){const{props:e}=t;return!!e&&"object"==typeof e&&"value"in e}(t))return t;throw new Error(`Docusaurus error: Bad child <${"string"==typeof t.type?t.type:t.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(t).map((t=>{let{props:{value:e,label:a,attributes:n,default:r}}=t;return{value:e,label:a,attributes:n,default:r}}))}function s(t){const{values:e,children:a}=t;return(0,r.useMemo)((()=>{const t=e??u(a);return function(t){const e=(0,d.l)(t,((t,e)=>t.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((t=>t.value)).join(", ")}" found in . Every value needs to be unique.`)}(t),t}),[e,a])}function k(t){let{value:e,tabValues:a}=t;return a.some((t=>t.value===e))}function g(t){let{queryString:e=!1,groupId:a}=t;const n=(0,o.k6)(),i=function(t){let{queryString:e=!1,groupId:a}=t;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,p._X)(i),(0,r.useCallback)((t=>{if(!i)return;const e=new URLSearchParams(n.location.search);e.set(i,t),n.replace({...n.location,search:e.toString()})}),[i,n])]}function N(t){const{defaultValue:e,queryString:a=!1,groupId:n}=t,i=s(t),[l,o]=(0,r.useState)((()=>function(t){let{defaultValue:e,tabValues:a}=t;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!k({value:e,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((t=>t.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((t=>t.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:i}))),[p,d]=g({queryString:a,groupId:n}),[u,N]=function(t){let{groupId:e}=t;const a=function(t){return t?`docusaurus.tab.${t}`:null}(e),[n,i]=(0,m.Nk)(a);return[n,(0,r.useCallback)((t=>{a&&i.set(t)}),[a,i])]}({groupId:n}),c=(()=>{const t=p??u;return k({value:t,tabValues:i})?t:null})();(0,r.useLayoutEffect)((()=>{c&&o(c)}),[c]);return{selectedValue:l,selectValue:(0,r.useCallback)((t=>{if(!k({value:t,tabValues:i}))throw new Error(`Can't select invalid tab value=${t}`);o(t),d(t),N(t)}),[d,N,i]),tabValues:i}}var c=a(72389);const h={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(t){let{className:e,block:a,selectedValue:o,selectValue:p,tabValues:d}=t;const m=[],{blockElementScrollPositionUntilNextRender:u}=(0,l.o5)(),s=t=>{const e=t.currentTarget,a=m.indexOf(e),n=d[a].value;n!==o&&(u(e),p(n))},k=t=>{let e=null;switch(t.key){case"Enter":s(t);break;case"ArrowRight":{const a=m.indexOf(t.currentTarget)+1;e=m[a]??m[0];break}case"ArrowLeft":{const a=m.indexOf(t.currentTarget)-1;e=m[a]??m[m.length-1];break}}e?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},e)},d.map((t=>{let{value:e,label:a,attributes:l}=t;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:o===e?0:-1,"aria-selected":o===e,key:e,ref:t=>m.push(t),onKeyDown:k,onClick:s},l,{className:(0,i.Z)("tabs__item",h.tabItem,l?.className,{"tabs__item--active":o===e})}),a??e)})))}function f(t){let{lazy:e,children:a,selectedValue:n}=t;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const t=i.find((t=>t.props.value===n));return t?(0,r.cloneElement)(t,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},i.map(((t,e)=>(0,r.cloneElement)(t,{key:e,hidden:t.props.value!==n}))))}function v(t){const e=N(t);return r.createElement("div",{className:(0,i.Z)("tabs-container",h.tabList)},r.createElement(b,(0,n.Z)({},t,e)),r.createElement(f,(0,n.Z)({},t,e)))}function y(t){const e=(0,c.Z)();return r.createElement(v,(0,n.Z)({key:String(e)},t))}},61494:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>l,default:()=>s,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var n=a(87462),r=(a(67294),a(3905));const i={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},l=void 0,o={unversionedId:"compiled-binaries",id:"compiled-binaries",title:"compiled-binaries",description:"Download compiled binary",source:"@site/root/compiled-binaries.md",sourceDirName:".",slug:"/compiled-binaries",permalink:"/doc/next/compiled-binaries",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/compiled-binaries.md",tags:[],version:"current",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},p={},d=[{value:"Download compiled binary",id:"download-compiled-binary",level:2}],m={toc:d},u="wrapper";function s(t){let{components:e,...a}=t;return(0,r.kt)(u,(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"download-compiled-binary"},"Download compiled binary"),(0,r.kt)("p",null,"Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package."),(0,r.kt)("p",null,"You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting."),(0,r.kt)("p",null,"These links are available in the ",(0,r.kt)("strong",{parentName:"p"},"Build From")," column of the above ",(0,r.kt)("strong",{parentName:"p"},"Mithril Networks")," table."))}s.isMDXComponent=!0},80977:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>p,default:()=>g,frontMatter:()=>o,metadata:()=>d,toc:()=>u});var n=a(87462),r=(a(67294),a(3905)),i=a(81900),l=a(61494);const o={sidebar_position:3},p="Mithril Client Node",d={unversionedId:"manual/developer-docs/nodes/mithril-client",id:"manual/developer-docs/nodes/mithril-client",title:"Mithril Client Node",description:"This is the node of the Mithril Network responsible for restoring the Cardano blockchain on an empty node from a certified snapshot.",source:"@site/root/manual/developer-docs/nodes/mithril-client.md",sourceDirName:"manual/developer-docs/nodes",slug:"/manual/developer-docs/nodes/mithril-client",permalink:"/doc/next/manual/developer-docs/nodes/mithril-client",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/developer-docs/nodes/mithril-client.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docSideBar",previous:{title:"Mithril Signer Node",permalink:"/doc/next/manual/developer-docs/nodes/mithril-signer"},next:{title:"API Reference",permalink:"/doc/next/manual/developer-docs/references"}},m={},u=[{value:"Resources",id:"resources",level:2},{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Download source",id:"download-source",level:2},{value:"Development test and build",id:"development-test-and-build",level:2},{value:"Release build and run binary",id:"release-build-and-run-binary",level:2},{value:"Run Docker container",id:"run-docker-container",level:2},{value:"Registry Image",id:"registry-image",level:3},{value:"Local Image",id:"local-image",level:3},{value:"Subcommands",id:"subcommands",level:2},{value:"Configuration parameters",id:"configuration-parameters",level:2}],s={toc:u},k="wrapper";function g(t){let{components:e,...a}=t;return(0,r.kt)(k,(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"mithril-client-node"},"Mithril Client Node"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This is the node of the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Network")," responsible for restoring the ",(0,r.kt)("strong",{parentName:"p"},"Cardano")," blockchain on an empty node from a certified snapshot.")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For more information about the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Network"),", please refer to the ",(0,r.kt)("a",{parentName:"p",href:"/doc/next/mithril/mithril-network/architecture"},"Architecture")," page.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For more information about the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Client"),", please refer to the ",(0,r.kt)("a",{parentName:"p",href:"/doc/next/mithril/mithril-network/client"},"Client Node")," page.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Checkout the ",(0,r.kt)("a",{parentName:"p",href:"/doc/next/manual/getting-started/bootstrap-cardano-node"},(0,r.kt)("inlineCode",{parentName:"a"},"Bootstrap a Cardano Node"))," guide.")))),(0,r.kt)("admonition",{title:"Mithril Networks",type:"note"},(0,r.kt)(i.default,{mdxType:"NetworksMatrix"})),(0,r.kt)("h2",{id:"resources"},"Resources"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Node"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Source Repository"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Rust Documentation"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Docker Packages"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("strong",{parentName:"td"},"Mithril Client")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/tree/main/mithril-client"},"\u2197\ufe0f")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/mithril-client/doc/mithril_client/index.html"},"\u2197\ufe0f")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/pkgs/container/mithril-client"},"\u2197\ufe0f"))))),(0,r.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install a ",(0,r.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"correctly configured")," Rust toolchain (latest stable version)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run ",(0,r.kt)("inlineCode",{parentName:"p"},"apt install libssl-dev")))),(0,r.kt)("h2",{id:"download-source"},"Download source"),(0,r.kt)("p",null,"Download from GitHub (HTTPS)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/input-output-hk/mithril.git\n")),(0,r.kt)("p",null,"Or (SSH)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:input-output-hk/mithril.git\n")),(0,r.kt)("p",null,"Switch to build branch / tag"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, \n# please refer to the **Build From** column of the above **Mithril Networks** table\ngit switch **YOUR_BUILD_BRANCH_OR_TAG**\n")),(0,r.kt)("p",null,"Change directory"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril/mithril-client\n")),(0,r.kt)("h2",{id:"development-test-and-build"},"Development test and build"),(0,r.kt)("p",null,"Run tests"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make test\n")),(0,r.kt)("p",null,"Create the help menu"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make help\n")),(0,r.kt)("p",null,"Generate the Rust documentation"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make doc\n")),(0,r.kt)("p",null,"Run in debug mode with default configuration"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make debug\n")),(0,r.kt)("h2",{id:"release-build-and-run-binary"},"Release build and run binary"),(0,r.kt)("p",null,"Build and run in release with default configuration"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make run\n")),(0,r.kt)("p",null,"Or, build only in release"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make build\n")),(0,r.kt)("p",null,"Display the help menu"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client --help\n")),(0,r.kt)("p",null,"You should see"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"This program downloads, checks and restores certified blockchain snapshots.\n\nUsage: mithril-client [OPTIONS] \n\nCommands:\n list List available snapshots\n show Show detailed informations about a snapshot\n download Download a snapshot\n restore Restore a snapshot\n help Print this message or the help of the given subcommand(s)\n\nOptions:\n --run-mode \n Run Mode [env: RUN_MODE=] [default: dev]\n -v, --verbose...\n Verbosity level (-v=warning, -vv=info, -vvv=debug)\n --config-directory \n Directory where configuration file is located [default: ./config]\n --aggregator-endpoint \n Override configuration Aggregator endpoint URL\n -h, --help\n Print help information\n -V, --version\n Print version information\n\n")),(0,r.kt)("p",null,"Run in release with default configuration"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client\n")),(0,r.kt)("p",null,"Run in release with a specific mode"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client --run-mode preview\n")),(0,r.kt)("p",null,"Run in release with a custom configuration via env vars"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**) NETWORK=**YOUR_CARDANO_NETWORK** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./mithril-client\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"You can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"--json")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"-j"),") option in order to display results in ",(0,r.kt)("inlineCode",{parentName:"p"},"JSON")," format for the ",(0,r.kt)("inlineCode",{parentName:"p"},"list")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"show")," commands:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client list --json\n"))),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"If you want to dig deeper, you can get access to several level of logs from the Mithril Client:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-v")," for some logs (WARN)"),(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-vv")," for more logs (INFO)"),(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-vvv")," for even more logs (DEBUG)"),(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-vvvv")," for all logs (TRACE)"))),(0,r.kt)(l.default,{mdxType:"CompiledBinaries"}),(0,r.kt)("h2",{id:"run-docker-container"},"Run Docker container"),(0,r.kt)("h3",{id:"registry-image"},"Registry Image"),(0,r.kt)("p",null,"The list of available images on the registry is listed ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/mithril/pkgs/container/mithril-client"},"here")),(0,r.kt)("p",null,"Prepare environment variables (values can be retrieved on the above ",(0,r.kt)("strong",{parentName:"p"},"Mithril Networks")," table)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**\nexport NETWORK=**YOUR_CARDANO_NETWORK**\nexport AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**\nexport GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)\nexport SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/artifact/snapshots | jq -r '.[0].digest')\n")),(0,r.kt)("p",null,"Here is an example configuration for the ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod")," network and the ",(0,r.kt)("inlineCode",{parentName:"p"},"latest")," stable Docker image"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=latest\nexport NETWORK=preprod\nexport AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator\nexport GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)\nexport SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/artifact/snapshots | jq -r '.[0].digest')\n")),(0,r.kt)("p",null,"Then create a shell function for the Mithril Client"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mithril_client () {\n docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@\n}\n")),(0,r.kt)("p",null,"Now you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"mithril_client")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# 1- Help\nmithril_client help\n\n# 2- List snapshots\nmithril_client list\n\n# 3- Download latest snapshot\nmithril_client download $SNAPSHOT_DIGEST\n\n# 4- Restore latest snapshot\nmithril_client restore $SNAPSHOT_DIGEST\n")),(0,r.kt)("h3",{id:"local-image"},"Local Image"),(0,r.kt)("p",null,"Build a local Docker image"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make docker-build\n")),(0,r.kt)("p",null,"Run a local Docker container"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make docker-run\n")),(0,r.kt)("h2",{id:"subcommands"},"Subcommands"),(0,r.kt)("p",null,"Here are the subcommands available:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Subcommand"),(0,r.kt)("th",{parentName:"tr",align:null},"Performed action"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"download")),(0,r.kt)("td",{parentName:"tr",align:null},"Download a snapshot")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"help")),(0,r.kt)("td",{parentName:"tr",align:null},"Print this message or the help of the given subcommand(s)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"list")),(0,r.kt)("td",{parentName:"tr",align:null},"List available snapshots")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"restore")),(0,r.kt)("td",{parentName:"tr",align:null},"Restore a snapshot")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"show")),(0,r.kt)("td",{parentName:"tr",align:null},"Informations about a snapshot")))),(0,r.kt)("h2",{id:"configuration-parameters"},"Configuration parameters"),(0,r.kt)("p",null,"The configuration parameters are set either:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"In a configuration file (depending on the ",(0,r.kt)("inlineCode",{parentName:"li"},"--run-mode")," parameter). If runtime mode is ",(0,r.kt)("inlineCode",{parentName:"li"},"testnet")," the file is located in ",(0,r.kt)("inlineCode",{parentName:"li"},"./conf/testnet.json"),"."),(0,r.kt)("li",{parentName:"ul"},"The value can be overridden by an environment variable whose name is the parameter name uppercased.")),(0,r.kt)("p",null,"Here is a list of the available parameters:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Command Line (long)"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Command Line (short)"),(0,r.kt)("th",{parentName:"tr",align:null},"Environment Variable"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Default Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Mandatory"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"verbose")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--verbose")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"-v")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"VERBOSE")),(0,r.kt)("td",{parentName:"tr",align:null},"Verbosity level"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},"Parsed from number of occurrences: ",(0,r.kt)("inlineCode",{parentName:"td"},"-v")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Warning"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"-vv")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Info"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"-vvv")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Debug")," and ",(0,r.kt)("inlineCode",{parentName:"td"},"-vvvv")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Trace")),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"run_mode")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--run-mode")),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"RUN_MODE")),(0,r.kt)("td",{parentName:"tr",align:null},"Runtime mode"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dev")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"network")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"NETWORK")),(0,r.kt)("td",{parentName:"tr",align:null},"Cardano network"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"testnet")," or ",(0,r.kt)("inlineCode",{parentName:"td"},"mainnet")," or ",(0,r.kt)("inlineCode",{parentName:"td"},"devnet")),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"aggregator_endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--aggregator-endpoint")),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"AGGREGATOR_ENDPOINT")),(0,r.kt)("td",{parentName:"tr",align:null},"Aggregator node endpoint"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.pre-release-preview.api.mithril.network/aggregator")),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"genesis_verification_key")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"GENESIS_VERIFICATION_KEY")),(0,r.kt)("td",{parentName:"tr",align:null},"Genesis verification key"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"json_output")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--json")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"-j")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},"Enable JSON output"),(0,r.kt)("td",{parentName:"tr",align:null},"no"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"-")))))}g.isMDXComponent=!0},81900:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>p,default:()=>g,frontMatter:()=>o,metadata:()=>d,toc:()=>u});var n=a(87462),r=(a(67294),a(3905)),i=a(74866),l=a(85162);const o={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},p=void 0,d={unversionedId:"networks-matrix",id:"networks-matrix",title:"networks-matrix",description:"Here is an up to date list of all the Mithril Networks, their configurations and their status:",source:"@site/root/networks-matrix.md",sourceDirName:".",slug:"/networks-matrix",permalink:"/doc/next/networks-matrix",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/networks-matrix.md",tags:[],version:"current",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},m={},u=[{value:"pre-release-preview",id:"pre-release-preview",level:2},{value:"testing-preview",id:"testing-preview",level:2},{value:"release-preprod",id:"release-preprod",level:2},{value:"release-mainnet",id:"release-mainnet",level:2}],s={toc:u},k="wrapper";function g(t){let{components:e,...a}=t;return(0,r.kt)(k,(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Here is an up to date list of all the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Networks"),", their configurations and their status:"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Last update: 02/28/2023")),(0,r.kt)(i.Z,{mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"preview",label:"Preview",default:!0,mdxType:"TabItem"},(0,r.kt)("h2",{id:"pre-release-preview"},(0,r.kt)("inlineCode",{parentName:"h2"},"pre-release-preview")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"pre-release-preview")," ",(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.pre-release-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"preview"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"2"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"Pre-Release \ud83d\udfe0")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.pre-release-preview.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.pre-release-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Latest Pre-Release")," ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases?q=pre-release"},"\u2197\ufe0f"))))),(0,r.kt)("br",null),(0,r.kt)("h2",{id:"testing-preview"},(0,r.kt)("inlineCode",{parentName:"h2"},"testing-preview")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f For devs only")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"testing-preview")," ",(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.testing-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"preview"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"2"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"Unstable \ud83d\udd34")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.testing-preview.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.testing-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Main Branch")," ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/tree/main"},"\u2197\ufe0f")))))),(0,r.kt)(l.Z,{value:"preprod",label:"Preprod",mdxType:"TabItem"},(0,r.kt)("h2",{id:"release-preprod"},(0,r.kt)("inlineCode",{parentName:"h2"},"release-preprod")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"release-preprod")," ",(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.release-preprod.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"preprod"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"1"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"Release \ud83d\udfe2")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.release-preprod.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.release-preprod.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Latest Release")," ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases/latest"},"\u2197\ufe0f")))))),(0,r.kt)(l.Z,{value:"mainnet",label:"Mainnet",mdxType:"TabItem"},(0,r.kt)("h2",{id:"release-mainnet"},(0,r.kt)("inlineCode",{parentName:"h2"},"release-mainnet")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"release-mainnet"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"mainnet"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"-"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"No \u274c")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},"-")))))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"In this documentation, we use the generic:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_CARDANO_NETWORK**")," identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"preprod"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_AGGREGATOR_ENDPOINT**")," identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://aggregator.release-preprod.api.mithril.network/aggregator"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_GENESIS_VERIFICATION_KEY**")," identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADAPTER_TYPE**")," identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"cardano-chain"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADDRESS**")," identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_VERIFICATION_KEY**")," identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey"),")"))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/doc/assets/js/653f7965.f5d56540.js b/doc/assets/js/653f7965.f5d56540.js deleted file mode 100644 index fe5732a026..0000000000 --- a/doc/assets/js/653f7965.f5d56540.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[7695,9531,2379],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>g});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function l(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),d=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):l(l({},e),t)),a},m=function(t){var e=d(t.components);return n.createElement(p.Provider,{value:e},t.children)},u="mdxType",s={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,i=t.originalType,p=t.parentName,m=o(t,["components","mdxType","originalType","parentName"]),u=d(a),k=r,g=u["".concat(p,".").concat(k)]||u[k]||s[k]||i;return a?n.createElement(g,l(l({ref:e},m),{},{components:a})):n.createElement(g,l({ref:e},m))}));function g(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=a.length,l=new Array(i);l[0]=k;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[u]="string"==typeof t?t:r,l[1]=o;for(var d=2;d{a.d(e,{Z:()=>l});var n=a(67294),r=a(86010);const i={tabItem:"tabItem_Ymn6"};function l(t){let{children:e,hidden:a,className:l}=t;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,l),hidden:a},e)}},74866:(t,e,a)=>{a.d(e,{Z:()=>y});var n=a(87462),r=a(67294),i=a(86010),l=a(12466),o=a(16550),p=a(91980),d=a(67392),m=a(50012);function u(t){return function(t){return r.Children.map(t,(t=>{if(!t||(0,r.isValidElement)(t)&&function(t){const{props:e}=t;return!!e&&"object"==typeof e&&"value"in e}(t))return t;throw new Error(`Docusaurus error: Bad child <${"string"==typeof t.type?t.type:t.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(t).map((t=>{let{props:{value:e,label:a,attributes:n,default:r}}=t;return{value:e,label:a,attributes:n,default:r}}))}function s(t){const{values:e,children:a}=t;return(0,r.useMemo)((()=>{const t=e??u(a);return function(t){const e=(0,d.l)(t,((t,e)=>t.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((t=>t.value)).join(", ")}" found in . Every value needs to be unique.`)}(t),t}),[e,a])}function k(t){let{value:e,tabValues:a}=t;return a.some((t=>t.value===e))}function g(t){let{queryString:e=!1,groupId:a}=t;const n=(0,o.k6)(),i=function(t){let{queryString:e=!1,groupId:a}=t;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,p._X)(i),(0,r.useCallback)((t=>{if(!i)return;const e=new URLSearchParams(n.location.search);e.set(i,t),n.replace({...n.location,search:e.toString()})}),[i,n])]}function N(t){const{defaultValue:e,queryString:a=!1,groupId:n}=t,i=s(t),[l,o]=(0,r.useState)((()=>function(t){let{defaultValue:e,tabValues:a}=t;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!k({value:e,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((t=>t.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((t=>t.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:i}))),[p,d]=g({queryString:a,groupId:n}),[u,N]=function(t){let{groupId:e}=t;const a=function(t){return t?`docusaurus.tab.${t}`:null}(e),[n,i]=(0,m.Nk)(a);return[n,(0,r.useCallback)((t=>{a&&i.set(t)}),[a,i])]}({groupId:n}),c=(()=>{const t=p??u;return k({value:t,tabValues:i})?t:null})();(0,r.useLayoutEffect)((()=>{c&&o(c)}),[c]);return{selectedValue:l,selectValue:(0,r.useCallback)((t=>{if(!k({value:t,tabValues:i}))throw new Error(`Can't select invalid tab value=${t}`);o(t),d(t),N(t)}),[d,N,i]),tabValues:i}}var c=a(72389);const h={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(t){let{className:e,block:a,selectedValue:o,selectValue:p,tabValues:d}=t;const m=[],{blockElementScrollPositionUntilNextRender:u}=(0,l.o5)(),s=t=>{const e=t.currentTarget,a=m.indexOf(e),n=d[a].value;n!==o&&(u(e),p(n))},k=t=>{let e=null;switch(t.key){case"Enter":s(t);break;case"ArrowRight":{const a=m.indexOf(t.currentTarget)+1;e=m[a]??m[0];break}case"ArrowLeft":{const a=m.indexOf(t.currentTarget)-1;e=m[a]??m[m.length-1];break}}e?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},e)},d.map((t=>{let{value:e,label:a,attributes:l}=t;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:o===e?0:-1,"aria-selected":o===e,key:e,ref:t=>m.push(t),onKeyDown:k,onClick:s},l,{className:(0,i.Z)("tabs__item",h.tabItem,l?.className,{"tabs__item--active":o===e})}),a??e)})))}function f(t){let{lazy:e,children:a,selectedValue:n}=t;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const t=i.find((t=>t.props.value===n));return t?(0,r.cloneElement)(t,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},i.map(((t,e)=>(0,r.cloneElement)(t,{key:e,hidden:t.props.value!==n}))))}function v(t){const e=N(t);return r.createElement("div",{className:(0,i.Z)("tabs-container",h.tabList)},r.createElement(b,(0,n.Z)({},t,e)),r.createElement(f,(0,n.Z)({},t,e)))}function y(t){const e=(0,c.Z)();return r.createElement(v,(0,n.Z)({key:String(e)},t))}},61494:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>l,default:()=>s,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var n=a(87462),r=(a(67294),a(3905));const i={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},l=void 0,o={unversionedId:"compiled-binaries",id:"compiled-binaries",title:"compiled-binaries",description:"Download compiled binary",source:"@site/root/compiled-binaries.md",sourceDirName:".",slug:"/compiled-binaries",permalink:"/doc/next/compiled-binaries",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/compiled-binaries.md",tags:[],version:"current",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},p={},d=[{value:"Download compiled binary",id:"download-compiled-binary",level:2}],m={toc:d},u="wrapper";function s(t){let{components:e,...a}=t;return(0,r.kt)(u,(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"download-compiled-binary"},"Download compiled binary"),(0,r.kt)("p",null,"Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package."),(0,r.kt)("p",null,"You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting."),(0,r.kt)("p",null,"These links are available in the ",(0,r.kt)("strong",{parentName:"p"},"Build From")," column of the above ",(0,r.kt)("strong",{parentName:"p"},"Mithril Networks")," table."))}s.isMDXComponent=!0},80977:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>p,default:()=>g,frontMatter:()=>o,metadata:()=>d,toc:()=>u});var n=a(87462),r=(a(67294),a(3905)),i=a(81900),l=a(61494);const o={sidebar_position:3},p="Mithril Client Node",d={unversionedId:"manual/developer-docs/nodes/mithril-client",id:"manual/developer-docs/nodes/mithril-client",title:"Mithril Client Node",description:"This is the node of the Mithril Network responsible for restoring the Cardano blockchain on an empty node from a certified snapshot.",source:"@site/root/manual/developer-docs/nodes/mithril-client.md",sourceDirName:"manual/developer-docs/nodes",slug:"/manual/developer-docs/nodes/mithril-client",permalink:"/doc/next/manual/developer-docs/nodes/mithril-client",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/developer-docs/nodes/mithril-client.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docSideBar",previous:{title:"Mithril Signer Node",permalink:"/doc/next/manual/developer-docs/nodes/mithril-signer"},next:{title:"API Reference",permalink:"/doc/next/manual/developer-docs/references"}},m={},u=[{value:"Resources",id:"resources",level:2},{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Download source",id:"download-source",level:2},{value:"Development test and build",id:"development-test-and-build",level:2},{value:"Release build and run binary",id:"release-build-and-run-binary",level:2},{value:"Run Docker container",id:"run-docker-container",level:2},{value:"Registry Image",id:"registry-image",level:3},{value:"Local Image",id:"local-image",level:3},{value:"Subcommands",id:"subcommands",level:2},{value:"Configuration parameters",id:"configuration-parameters",level:2}],s={toc:u},k="wrapper";function g(t){let{components:e,...a}=t;return(0,r.kt)(k,(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"mithril-client-node"},"Mithril Client Node"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This is the node of the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Network")," responsible for restoring the ",(0,r.kt)("strong",{parentName:"p"},"Cardano")," blockchain on an empty node from a certified snapshot.")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For more information about the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Network"),", please refer to the ",(0,r.kt)("a",{parentName:"p",href:"/doc/next/mithril/mithril-network/architecture"},"Architecture")," page.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For more information about the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Client"),", please refer to the ",(0,r.kt)("a",{parentName:"p",href:"/doc/next/mithril/mithril-network/client"},"Client Node")," page.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Checkout the ",(0,r.kt)("a",{parentName:"p",href:"/doc/next/manual/getting-started/bootstrap-cardano-node"},(0,r.kt)("inlineCode",{parentName:"a"},"Bootstrap a Cardano Node"))," guide.")))),(0,r.kt)("admonition",{title:"Mithril Networks",type:"note"},(0,r.kt)(i.default,{mdxType:"NetworksMatrix"})),(0,r.kt)("h2",{id:"resources"},"Resources"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"Node"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Source Repository"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Rust Documentation"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Docker Packages"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("strong",{parentName:"td"},"Mithril Client")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/tree/main/mithril-client"},"\u2197\ufe0f")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/mithril-client/doc/mithril_client/index.html"},"\u2197\ufe0f")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/pkgs/container/mithril-client"},"\u2197\ufe0f"))))),(0,r.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install a ",(0,r.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"correctly configured")," Rust toolchain (latest stable version)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run ",(0,r.kt)("inlineCode",{parentName:"p"},"apt install libssl-dev")))),(0,r.kt)("h2",{id:"download-source"},"Download source"),(0,r.kt)("p",null,"Download from GitHub (HTTPS)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/input-output-hk/mithril.git\n")),(0,r.kt)("p",null,"Or (SSH)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:input-output-hk/mithril.git\n")),(0,r.kt)("p",null,"Switch to build branch / tag"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, \n# please refer to the **Build From** column of the above **Mithril Networks** table\ngit switch **YOUR_BUILD_BRANCH_OR_TAG**\n")),(0,r.kt)("p",null,"Change directory"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril/mithril-client\n")),(0,r.kt)("h2",{id:"development-test-and-build"},"Development test and build"),(0,r.kt)("p",null,"Run tests"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make test\n")),(0,r.kt)("p",null,"Create the help menu"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make help\n")),(0,r.kt)("p",null,"Generate the Rust documentation"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make doc\n")),(0,r.kt)("p",null,"Run in debug mode with default configuration"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make debug\n")),(0,r.kt)("h2",{id:"release-build-and-run-binary"},"Release build and run binary"),(0,r.kt)("p",null,"Build and run in release with default configuration"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make run\n")),(0,r.kt)("p",null,"Or, build only in release"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make build\n")),(0,r.kt)("p",null,"Display the help menu"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client --help\n")),(0,r.kt)("p",null,"You should see"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"This program downloads, checks and restores certified blockchain snapshots.\n\nUsage: mithril-client [OPTIONS] \n\nCommands:\n list List available snapshots\n show Show detailed informations about a snapshot\n download Download a snapshot\n restore Restore a snapshot\n help Print this message or the help of the given subcommand(s)\n\nOptions:\n --run-mode \n Run Mode [env: RUN_MODE=] [default: dev]\n -v, --verbose...\n Verbosity level (-v=warning, -vv=info, -vvv=debug)\n --config-directory \n Directory where configuration file is located [default: ./config]\n --aggregator-endpoint \n Override configuration Aggregator endpoint URL\n -h, --help\n Print help information\n -V, --version\n Print version information\n\n")),(0,r.kt)("p",null,"Run in release with default configuration"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client\n")),(0,r.kt)("p",null,"Run in release with a specific mode"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client --run-mode preview\n")),(0,r.kt)("p",null,"Run in release with a custom configuration via env vars"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**) NETWORK=**YOUR_CARDANO_NETWORK** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./mithril-client\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"You can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"--json")," (or ",(0,r.kt)("inlineCode",{parentName:"p"},"-j"),") option in order to display results in ",(0,r.kt)("inlineCode",{parentName:"p"},"JSON")," format for the ",(0,r.kt)("inlineCode",{parentName:"p"},"list")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"show")," commands:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client list --json\n"))),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"If you want to dig deeper, you can get access to several level of logs from the Mithril Client:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-v")," for some logs (WARN)"),(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-vv")," for more logs (INFO)"),(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-vvv")," for even more logs (DEBUG)"),(0,r.kt)("li",{parentName:"ul"},"Add ",(0,r.kt)("inlineCode",{parentName:"li"},"-vvvv")," for all logs (TRACE)"))),(0,r.kt)(l.default,{mdxType:"CompiledBinaries"}),(0,r.kt)("h2",{id:"run-docker-container"},"Run Docker container"),(0,r.kt)("h3",{id:"registry-image"},"Registry Image"),(0,r.kt)("p",null,"The list of available images on the registry is listed ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/mithril/pkgs/container/mithril-client"},"here")),(0,r.kt)("p",null,"Prepare environment variables (values can be retrieved on the above ",(0,r.kt)("strong",{parentName:"p"},"Mithril Networks")," table)"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**\nexport NETWORK=**YOUR_CARDANO_NETWORK**\nexport AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**\nexport GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)\nexport SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')\n")),(0,r.kt)("p",null,"Here is an example configuration for the ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod")," network and the ",(0,r.kt)("inlineCode",{parentName:"p"},"latest")," stable Docker image"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=latest\nexport NETWORK=preprod\nexport AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator\nexport GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)\nexport SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')\n")),(0,r.kt)("p",null,"Then create a shell function for the Mithril Client"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mithril_client () {\n docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@\n}\n")),(0,r.kt)("p",null,"Now you can use the ",(0,r.kt)("inlineCode",{parentName:"p"},"mithril_client")," function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# 1- Help\nmithril_client help\n\n# 2- List snapshots\nmithril_client list\n\n# 3- Download latest snapshot\nmithril_client download $SNAPSHOT_DIGEST\n\n# 4- Restore latest snapshot\nmithril_client restore $SNAPSHOT_DIGEST\n")),(0,r.kt)("h3",{id:"local-image"},"Local Image"),(0,r.kt)("p",null,"Build a local Docker image"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make docker-build\n")),(0,r.kt)("p",null,"Run a local Docker container"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make docker-run\n")),(0,r.kt)("h2",{id:"subcommands"},"Subcommands"),(0,r.kt)("p",null,"Here are the subcommands available:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Subcommand"),(0,r.kt)("th",{parentName:"tr",align:null},"Performed action"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"download")),(0,r.kt)("td",{parentName:"tr",align:null},"Download a snapshot")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"help")),(0,r.kt)("td",{parentName:"tr",align:null},"Print this message or the help of the given subcommand(s)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"list")),(0,r.kt)("td",{parentName:"tr",align:null},"List available snapshots")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"restore")),(0,r.kt)("td",{parentName:"tr",align:null},"Restore a snapshot")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"show")),(0,r.kt)("td",{parentName:"tr",align:null},"Informations about a snapshot")))),(0,r.kt)("h2",{id:"configuration-parameters"},"Configuration parameters"),(0,r.kt)("p",null,"The configuration parameters are set either:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"In a configuration file (depending on the ",(0,r.kt)("inlineCode",{parentName:"li"},"--run-mode")," parameter). If runtime mode is ",(0,r.kt)("inlineCode",{parentName:"li"},"testnet")," the file is located in ",(0,r.kt)("inlineCode",{parentName:"li"},"./conf/testnet.json"),"."),(0,r.kt)("li",{parentName:"ul"},"The value can be overridden by an environment variable whose name is the parameter name uppercased.")),(0,r.kt)("p",null,"Here is a list of the available parameters:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,r.kt)("th",{parentName:"tr",align:null},"Command Line (long)"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Command Line (short)"),(0,r.kt)("th",{parentName:"tr",align:null},"Environment Variable"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Default Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Example"),(0,r.kt)("th",{parentName:"tr",align:"center"},"Mandatory"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"verbose")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--verbose")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"-v")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"VERBOSE")),(0,r.kt)("td",{parentName:"tr",align:null},"Verbosity level"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},"Parsed from number of occurrences: ",(0,r.kt)("inlineCode",{parentName:"td"},"-v")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Warning"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"-vv")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Info"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"-vvv")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Debug")," and ",(0,r.kt)("inlineCode",{parentName:"td"},"-vvvv")," for ",(0,r.kt)("inlineCode",{parentName:"td"},"Trace")),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"run_mode")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--run-mode")),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"RUN_MODE")),(0,r.kt)("td",{parentName:"tr",align:null},"Runtime mode"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dev")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"network")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"NETWORK")),(0,r.kt)("td",{parentName:"tr",align:null},"Cardano network"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"testnet")," or ",(0,r.kt)("inlineCode",{parentName:"td"},"mainnet")," or ",(0,r.kt)("inlineCode",{parentName:"td"},"devnet")),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"aggregator_endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--aggregator-endpoint")),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"AGGREGATOR_ENDPOINT")),(0,r.kt)("td",{parentName:"tr",align:null},"Aggregator node endpoint"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.pre-release-preview.api.mithril.network/aggregator")),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"genesis_verification_key")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"-"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"GENESIS_VERIFICATION_KEY")),(0,r.kt)("td",{parentName:"tr",align:null},"Genesis verification key"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"json_output")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"--json")),(0,r.kt)("td",{parentName:"tr",align:"center"},(0,r.kt)("inlineCode",{parentName:"td"},"-j")),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:null},"Enable JSON output"),(0,r.kt)("td",{parentName:"tr",align:null},"no"),(0,r.kt)("td",{parentName:"tr",align:null},"-"),(0,r.kt)("td",{parentName:"tr",align:"center"},"-")))))}g.isMDXComponent=!0},81900:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>p,default:()=>g,frontMatter:()=>o,metadata:()=>d,toc:()=>u});var n=a(87462),r=(a(67294),a(3905)),i=a(74866),l=a(85162);const o={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},p=void 0,d={unversionedId:"networks-matrix",id:"networks-matrix",title:"networks-matrix",description:"Here is an up to date list of all the Mithril Networks, their configurations and their status:",source:"@site/root/networks-matrix.md",sourceDirName:".",slug:"/networks-matrix",permalink:"/doc/next/networks-matrix",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/networks-matrix.md",tags:[],version:"current",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},m={},u=[{value:"pre-release-preview",id:"pre-release-preview",level:2},{value:"testing-preview",id:"testing-preview",level:2},{value:"release-preprod",id:"release-preprod",level:2},{value:"release-mainnet",id:"release-mainnet",level:2}],s={toc:u},k="wrapper";function g(t){let{components:e,...a}=t;return(0,r.kt)(k,(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Here is an up to date list of all the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Networks"),", their configurations and their status:"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Last update: 02/28/2023")),(0,r.kt)(i.Z,{mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"preview",label:"Preview",default:!0,mdxType:"TabItem"},(0,r.kt)("h2",{id:"pre-release-preview"},(0,r.kt)("inlineCode",{parentName:"h2"},"pre-release-preview")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"pre-release-preview")," ",(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.pre-release-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"preview"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"2"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"Pre-Release \ud83d\udfe0")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.pre-release-preview.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.pre-release-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Latest Pre-Release")," ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases?q=pre-release"},"\u2197\ufe0f"))))),(0,r.kt)("br",null),(0,r.kt)("h2",{id:"testing-preview"},(0,r.kt)("inlineCode",{parentName:"h2"},"testing-preview")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f For devs only")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"testing-preview")," ",(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.testing-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"preview"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"2"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"Unstable \ud83d\udd34")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.testing-preview.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.testing-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Main Branch")," ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/tree/main"},"\u2197\ufe0f")))))),(0,r.kt)(l.Z,{value:"preprod",label:"Preprod",mdxType:"TabItem"},(0,r.kt)("h2",{id:"release-preprod"},(0,r.kt)("inlineCode",{parentName:"h2"},"release-preprod")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"release-preprod")," ",(0,r.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.release-preprod.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"preprod"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"1"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"Release \ud83d\udfe2")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://aggregator.release-preprod.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.release-preprod.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey"},"\u2197\ufe0f"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Latest Release")," ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases/latest"},"\u2197\ufe0f")))))),(0,r.kt)(l.Z,{value:"mainnet",label:"Mainnet",mdxType:"TabItem"},(0,r.kt)("h2",{id:"release-mainnet"},(0,r.kt)("inlineCode",{parentName:"h2"},"release-mainnet")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Information"),(0,r.kt)("th",{parentName:"tr",align:null},"-"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Mithril Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"release-mainnet"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Network")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"mainnet"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"-"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Supported")),(0,r.kt)("td",{parentName:"tr",align:null},"No \u274c")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Status")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,r.kt)("td",{parentName:"tr",align:null},"-")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"Build From")),(0,r.kt)("td",{parentName:"tr",align:null},"-")))))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"In this documentation, we use the generic:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_CARDANO_NETWORK**")," identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"preprod"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_AGGREGATOR_ENDPOINT**")," identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://aggregator.release-preprod.api.mithril.network/aggregator"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_GENESIS_VERIFICATION_KEY**")," identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADAPTER_TYPE**")," identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"cardano-chain"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADDRESS**")," identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr"),")"),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_VERIFICATION_KEY**")," identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey"),")"))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/doc/assets/js/e7e087cc.b5e317ff.js b/doc/assets/js/e7e087cc.870b2455.js similarity index 88% rename from doc/assets/js/e7e087cc.b5e317ff.js rename to doc/assets/js/e7e087cc.870b2455.js index 8efe1455bb..e4f5937cbf 100644 --- a/doc/assets/js/e7e087cc.b5e317ff.js +++ b/doc/assets/js/e7e087cc.870b2455.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[5038],{3905:(e,a,t)=>{t.d(a,{Zo:()=>l,kt:()=>h});var n=t(67294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function d(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=n.createContext({}),c=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},l=function(e){var a=c(e.components);return n.createElement(s.Provider,{value:a},e.children)},f="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},b=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,d=e.originalType,s=e.parentName,l=r(e,["components","mdxType","originalType","parentName"]),f=c(t),b=o,h=f["".concat(s,".").concat(b)]||f[b]||p[b]||d;return t?n.createElement(h,i(i({ref:a},l),{},{components:t})):n.createElement(h,i({ref:a},l))}));function h(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var d=t.length,i=new Array(d);i[0]=b;var r={};for(var s in a)hasOwnProperty.call(a,s)&&(r[s]=a[s]);r.originalType=e,r[f]="string"==typeof e?e:o,i[1]=r;for(var c=2;c{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>d,metadata:()=>r,toc:()=>c});var n=t(87462),o=(t(67294),t(3905));const d={sidebar_position:3},i="Run a Private Mithril network",r={unversionedId:"manual/getting-started/run-mithril-devnet",id:"manual/getting-started/run-mithril-devnet",title:"Run a Private Mithril network",description:"In this guide, you will learn how to run a demonstration of a Mithril Network working on top of a private devnet Cardano Network. This network is completely autonomous and setup to produce Mithril snapshots every 1 minute.",source:"@site/root/manual/getting-started/run-mithril-devnet.md",sourceDirName:"manual/getting-started",slug:"/manual/getting-started/run-mithril-devnet",permalink:"/doc/next/manual/getting-started/run-mithril-devnet",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/getting-started/run-mithril-devnet.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docSideBar",previous:{title:"Run a Mithril Signer node (SPO)",permalink:"/doc/next/manual/getting-started/run-signer-node"},next:{title:"Developer Docs",permalink:"/doc/next/category/developer-docs"}},s={},c=[{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Download source",id:"download-source",level:2},{value:"Change directory",id:"change-directory",level:2},{value:"Run a Private Mithril/Cardano network locally (devnet)",id:"run-a-private-mithrilcardano-network-locally-devnet",level:2},{value:"Step 1: Launch the devnet",id:"step-1-launch-the-devnet",level:3},{value:"Step 2: Query the devnet",id:"step-2-query-the-devnet",level:3},{value:"Step 3: Observe the devnet",id:"step-3-observe-the-devnet",level:3},{value:"Interact with the Mithril Aggregator by using the Mithril Client",id:"interact-with-the-mithril-aggregator-by-using-the-mithril-client",level:2},{value:"Step 1: Prepare some useful variables",id:"step-1-prepare-some-useful-variables",level:3},{value:"Step 2: Select A Snapshot",id:"step-2-select-a-snapshot",level:3},{value:"Step 3: Show Snapshot Details",id:"step-3-show-snapshot-details",level:3},{value:"Step 4: Download Selected Snapshot",id:"step-4-download-selected-snapshot",level:3},{value:"Step 5: Restore Selected Snapshot",id:"step-5-restore-selected-snapshot",level:3}],l={toc:c},f="wrapper";function p(e){let{components:a,...d}=e;return(0,o.kt)(f,(0,n.Z)({},l,d,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"run-a-private-mithril-network"},"Run a Private Mithril network"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"In this guide, you will learn how to run a demonstration of a ",(0,o.kt)("strong",{parentName:"p"},"Mithril Network")," working on top of a private ",(0,o.kt)("inlineCode",{parentName:"p"},"devnet")," ",(0,o.kt)("strong",{parentName:"p"},"Cardano Network"),". This network is completely autonomous and setup to produce Mithril snapshots every 1 minute.")),(0,o.kt)("p",null,"The network will be launched with the following topology:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2")," ",(0,o.kt)("strong",{parentName:"li"},"Cardano Nodes")," configured as ",(0,o.kt)("strong",{parentName:"li"},"Stake Pool Operators (SPO)")," with a ",(0,o.kt)("strong",{parentName:"li"},"Mithril Signer")," on top"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"1")," ",(0,o.kt)("strong",{parentName:"li"},"Cardano Node")," configured as ",(0,o.kt)("strong",{parentName:"li"},"BFT node")," with a ",(0,o.kt)("strong",{parentName:"li"},"Mithril Aggregator")," on top")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Devnet Topology",src:t(64861).Z,width:"1010",height:"749"})),(0,o.kt)("admonition",{type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"This demonstration is working only on a Linux machine.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"More information about this private Cardano/Mithril ",(0,o.kt)("inlineCode",{parentName:"p"},"devnet")," is available ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/mithril/blob/main/mithril-test-lab/mithril-devnet/README.md"},"here"),".")),(0,o.kt)("h1",{id:"video-demonstration"},"Video demonstration"),(0,o.kt)("iframe",{style:{width:"100%",height:"480px"},src:"https://www.youtube.com/embed/qu3GoO1UwYI",title:"Run a Private Mithril network",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"true"}),(0,o.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install a ",(0,o.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"correctly configured")," Rust toolchain (latest stable version).")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run ",(0,o.kt)("inlineCode",{parentName:"p"},"apt install libssl-dev"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Ensure SQLite3 library is installed on your system and its version is at least ",(0,o.kt)("inlineCode",{parentName:"p"},"3.40"),". Run ",(0,o.kt)("inlineCode",{parentName:"p"},"sqlite3 --version")," to check your version."))),(0,o.kt)("h2",{id:"download-source"},"Download source"),(0,o.kt)("p",null,"Download from GitHub (HTTPS)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/input-output-hk/mithril.git\n")),(0,o.kt)("p",null,"Or (SSH)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:input-output-hk/mithril.git\n")),(0,o.kt)("h2",{id:"change-directory"},"Change directory"),(0,o.kt)("p",null,"Go to the devnet folder"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril-test-lab/mithril-devnet\n")),(0,o.kt)("h2",{id:"run-a-private-mithrilcardano-network-locally-devnet"},"Run a Private Mithril/Cardano network locally (",(0,o.kt)("inlineCode",{parentName:"h2"},"devnet"),")"),(0,o.kt)("h3",{id:"step-1-launch-the-devnet"},"Step 1: Launch the devnet"),(0,o.kt)("p",null,"Open a first terminal window."),(0,o.kt)("p",null,"Run a devnet with 1 BTF and 2 SPO Cardano nodes."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Option 1"),": Remote Docker images"),(0,o.kt)("p",null,"The network will be ready faster with remote Docker images."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"MITHRIL_IMAGE_ID=latest NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh\n")),(0,o.kt)("p",null,"Or"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Option 2"),": Local Docker images"),(0,o.kt)("p",null,"This takes more time to build local Docker images of the Mithril nodes"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You will see that the devnet is launched with the following steps:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Bootstraping the devnet"),": generates the artifacts of the devnet depending on the configuration parameters (cryptographic keys, network topology, transactions to setup pool nodes, ...)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Start Cardano Network"),": run the nodes of the ",(0,o.kt)("strong",{parentName:"li"},"Cardano Network"),", waits for it to be ready and activate the pool nodes"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Start Mithril Network"),": run the nodes of the ",(0,o.kt)("strong",{parentName:"li"},"Mithril Network")," that works on top of the ",(0,o.kt)("strong",{parentName:"li"},"Cardano Network")))),(0,o.kt)("p",null,"You should see the following information displayed"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'=====================================================================\n Bootstrap Mithril/Cardano devnet\n=====================================================================\n\n>> Directory: artifacts\n>> Cardano BFT nodes: 1\n>> Cardano SPO nodes: 2\n>> Info: Mithril Aggregator will be attached to the first Cardano BFT node\n>> Info: Mithril Signers will be attached to each Cardano SPO node\n\n=====================================================================\n Start Cardano nodes\n=====================================================================\n\n>> Start Cardano network\ncardano-node: no process found\n>> Starting Cardano node \'node-bft1\'\n>> Starting Cardano node \'node-pool1\'\n>> Starting Cardano node \'node-pool2\'\n>> Wait for Cardano network to be ready\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Ready!\n>> Activate Cardano pools\nEstimated transaction fee: Lovelace 843\nTransaction successfully submitted.\nEstimated transaction fee: Lovelace 843\nTransaction successfully submitted.\n>> Wait for Cardano pools to be activated\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Activated!\n>>>> Found PoolId: pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys\n>>>> Found PoolId: pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav\n\n=====================================================================\n Start Mithril nodes\n=====================================================================\n\n>> Start Mithril network\n>> Build Mithril node Docker images\n>>>> Building Mithril Aggregator node Docker image\n>>>> Building Mithril Client node Docker image\n>>>> Building Mithril Signer node Docker image\nNo stopped containers\nCreating network "artifacts_cardano_network" with driver "bridge"\nCreating network "artifacts_mithril_network" with driver "bridge"\nCreating artifacts_mithril-aggregator_1 ... done\nCreating artifacts_mithril-signer-node-pool1_1 ... done\nCreating artifacts_mithril-signer-node-pool2_1 ... done\nCreating artifacts_mithril-aggregator-genesis_run ... done\n{"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 }, url_snapshot_manifest: \\"\\", 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"}\n{"msg":"New LocalSnapshotUploader created","v":0,"name":"slog-rs","level":20Genesis bootstrap for test only\n,"time":"2022-09-06T09:24:31.925683285Z","hostname":"e932dff845aa","pid":1,"snapshot_server_url":"http://0.0.0.0:8080/"}\n{"msg":"New MultiSignerImpl created","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.925711468Z","hostname":"e932dff845aa","pid":1}\n{"msg":"New MithrilCertificateVerifier created","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.925736796Z","hostname":"e932dff845aa","pid":1}\n{"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}\n{"msg":"Get next signers with stake","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938384324Z","hostname":"e932dff845aa","pid":1}\n{"msg":"Get next stake distribution","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938422585Z","hostname":"e932dff845aa","pid":1}\n{"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}\n{"msg":"Get next protocol parameters","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938500461Z","hostname":"e932dff845aa","pid":1}\n{"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}\n{"msg":"Create clerk","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.93856896Z","hostname":"e932dff845aa","pid":1}\nVerify genesis certificate #86a4c56d957636740a75c250fdd9d3b9a9f1539dc93449b1f80fcab49e279d6d @ epoch #10\n\n=====================================================================\n Schedule Cardano Stake Delegation\n=====================================================================\n\n>> Begin scheduled delegation\n>> 11:24:32: Wait 180s until next delegation round...\n>> Run delegation round #1!\n>>>> Current Epoch: 12\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\n>> 11:27:32: Wait 180s until next delegation round...\n>> Run delegation round #2!\n>>>> Current Epoch: 14\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\n>> 11:30:32: Wait 180s until next delegation round...\n')),(0,o.kt)("h3",{id:"step-2-query-the-devnet"},"Step 2: Query the devnet"),(0,o.kt)("p",null,"Open a second terminal window."),(0,o.kt)("p",null,"Watch the state queried from the devnet"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"watch -n 1 ./devnet-query.sh\n")),(0,o.kt)("p",null,"The networks will be queried every ",(0,o.kt)("inlineCode",{parentName:"p"},"1s")," and will display:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Certificate production informations gathered from the ",(0,o.kt)("strong",{parentName:"li"},"Mithril Network")),(0,o.kt)("li",{parentName:"ul"},"Utxo, Stake Pools, Stake Distribution from the ",(0,o.kt)("strong",{parentName:"li"},"Cardano Network"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'=====================================================================\n Query Mithril/Cardano devnet\n=====================================================================\n\n=====================================================================\n=== Mithril Network\n=====================================================================\n\n>> Query pending certificate\n{\n "beacon": {\n "network": "devnet",\n "epoch": 2,\n "immutable_file_number": 6\n },\n "protocol": {\n "k": 5,\n "m": 100,\n "phi_f": 0.65\n },\n "signers": []\n}\n\n>> Query snapshots\n[\n {\n "digest": "224b77ad9cbe7fc81e6808940d391b299c27e77d9978641025f382e2e5ddd2ac",\n "certificate_hash": "5b29543c4af0f369d40e1da53451ebd8a39c4263df1585eb072f54511c1e3333",\n "size": 7986,\n "created_at": "2022-07-05T11:26:55.855498395Z",\n "locations": [\n "http://0.0.0.0:8080/aggregator/snapshot/224b77ad9cbe7fc81e6808940d391b299c27e77d9978641025f382e2e5ddd2ac/download"\n ]\n },\n {\n "digest": "1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0",\n "certificate_hash": "be758b84a4b495e82af48747356946efb509ccbc4b44a9c985e3cb3099e35c94",\n "size": 6743,\n "created_at": "2022-07-05T11:26:35.658661878Z",\n "locations": [\n "http://0.0.0.0:8080/aggregator/snapshot/1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0/download"\n ]\n },\n {\n "digest": "fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1",\n "certificate_hash": "4254a6176afbe17967ad1671e4619e9a3f3412115a63dd0eb0f5e8b64094128a",\n "size": 6199,\n "created_at": "2022-07-05T11:26:20.470029035Z",\n "locations": [\n "http://0.0.0.0:8080/aggregator/snapshot/fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1/download"\n ]\n }\n]\n\n=====================================================================\n=== Cardano Network\n=====================================================================\n\n>> Query chain tip\n{\n "era": "Alonzo",\n "syncProgress": "100.00",\n "hash": "075fc8366d353b45debedfc6faa92148c8fad584d81dbb4ea7b8b4d121489452",\n "epoch": 2,\n "slot": 219,\n "block": 9\n}\n\n>> Query whole utxo\n TxHash TxIx Amount\n--------------------------------------------------------------------------------------\n4980fb7c90bc003f6af65778008732cd1b1a8c0873b7d622bfb7442f1312c9b5 0 447999157 lovelace + TxOutDatumNone\n4980fb7c90bc003f6af65778008732cd1b1a8c0873b7d622bfb7442f1312c9b5 1 2000000 lovelace + TxOutDatumNone\nc31e535531c9eb32bdd8f05e25204186333262674d24c6a770b6b120f020d9a9 0 448999157 lovelace + TxOutDatumNone\nc31e535531c9eb32bdd8f05e25204186333262674d24c6a770b6b120f020d9a9 1 1000000 lovelace + TxOutDatumNone\ned265b672873192ea1e9c19092e8f41947c28977438bcff580312de37cfbd46c 0 1002000000 lovelace + TxOutDatumNone\n\n>> Query stake pools\npool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys\npool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav\n\n>> Query stake distribution\n PoolId Stake frac\n------------------------------------------------------------------------------\npool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys 1.052e-3\npool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav 5.258e-4\n')),(0,o.kt)("h3",{id:"step-3-observe-the-devnet"},"Step 3: Observe the devnet"),(0,o.kt)("p",null,"Open a third terminal window."),(0,o.kt)("p",null,"Watch the logs of each node of the devnet"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"watch -n 1 LINES=5 ./devnet-log.sh\n")),(0,o.kt)("p",null,"The nodes will be queried every ",(0,o.kt)("inlineCode",{parentName:"p"},"1s")," and will display as below"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'=====================================================================\n Logs Mithril/Cardano devnet\n=====================================================================\n\n=====================================================================\n-- docker-compose logs --tail=5\n=====================================================================\nAttaching to artifacts_mithril-signer-node-pool1_1, artifacts_mithril-signer-node-pool2_1, artifacts_mithril-aggregator_1\nmithril-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}\nmithril-aggregator_1 | {"msg":"Get signer pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav","v":0,"name":"slog-rs","level":20,"time":"2022-07-05T11:29:32.72678048Z","hostname":"ba17593540ac","pid":1}\nmithril-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}\nmithril-aggregator_1 | {"msg":"Get signer pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys","v":0,"name":"slog-rs","level":20,"time":"2022-07-05T11:29:32.734529107Z","hostname":"ba17593540ac","pid":1}\nmithril-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}\nmithril-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}"}\nmithril-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}\nmithril-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}\nmithril-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}\nmithril-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}\nmithril-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}"}\nmithril-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}\nmithril-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}\nmithril-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}\nmithril-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}\n\n=====================================================================\n=====================================================================\ntail -n 22 ./node-bft1/node.log\n=====================================================================\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.76 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.75 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.76 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.26 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.75 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400\n[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\n=====================================================================\n\n=====================================================================\ntail -n 22 ./node-pool1/node.log\n=====================================================================\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.76 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.76 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.75 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.26 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.76 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400\n[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\n=====================================================================\n\n=====================================================================\ntail -n 22 ./node-pool2/node.log\n=====================================================================\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.75 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.76 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.75 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.25 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.76 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400\n[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\n=====================================================================\n\n')),(0,o.kt)("h2",{id:"interact-with-the-mithril-aggregator-by-using-the-mithril-client"},"Interact with the Mithril Aggregator by using the Mithril Client"),(0,o.kt)("h3",{id:"step-1-prepare-some-useful-variables"},"Step 1: Prepare some useful variables"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# Cardano network\nNETWORK=devnet\n\n# Aggregator API endpoint URL\nAGGREGATOR_ENDPOINT=http://localhost:8080/aggregator\n\n# Digest of the latest produced snapshot for convenience of the demo\n# You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2\nSNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')\n")),(0,o.kt)("h3",{id:"step-2-select-a-snapshot"},"Step 2: Select A Snapshot"),(0,o.kt)("p",null,"List the available snapshots with which you can bootstrap a Cardano node"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client list\n")),(0,o.kt)("p",null,"You will see a list of snapshots"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| Network | Digest | Size | Locations | Created |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 | 11808 | 1 | 2022-07-04T16:47:00.258482685Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | 60d9c6e014d22335b34f55f83da728667f04fc1c63152ccff0bce7d217d08447 | 10793 | 1 | 2022-07-04T16:46:45.069646321Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | a3c4bb5f413f1b9648f0a086b3752d25ec62b540b8390917a5a7e78809896d92 | 7991 | 1 | 2022-07-04T16:46:09.817821220Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | b952adaa04dbb42206c69589b9951660f40c7262b088b13434b7a446ec90bc36 | 6746 | 1 | 2022-07-04T16:45:49.616260734Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | 46425fdcfe89ad5ba41a7822a4395e21b539e80c20e2b10546017b14cdcd4e4b | 6196 | 1 | 2022-07-04T16:45:29.425195132Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n")),(0,o.kt)("h3",{id:"step-3-show-snapshot-details"},"Step 3: Show Snapshot Details"),(0,o.kt)("p",null,"Get some more details from a specific snapshot (Optional)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client show $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see more information about a snapshot"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+------------+-------------------------------------------------------------------------------------------------------------------+\n| Info | Value |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Network | devnet |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Digest | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Size | 11808 |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Location 1 | http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Created | 2022-07-04T16:47:00.258482685Z |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n")),(0,o.kt)("h3",{id:"step-4-download-selected-snapshot"},"Step 4: Download Selected Snapshot"),(0,o.kt)("p",null,"Download the selected snapshot from the remote location to your remote location"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client download $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the selected snapshot archive has been downloaded locally"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"Download success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 #1\nfrom http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download\nto /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/snapshot.archive.tar.gz\n")),(0,o.kt)("h3",{id:"step-5-restore-selected-snapshot"},"Step 5: Restore Selected Snapshot"),(0,o.kt)("p",null,"Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client restore $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the snapshot archive is unpacked and that the associated certificate is valid"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Unpacking snapshot...\nUnpack success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917\nto /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db\n\nRestore a Cardano Node with:\n\ndocker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data \\\n --mount type=bind,source="./data/devnet/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db",target=/data/db/ \\\n -e NETWORK=devnet \\\n inputoutput/cardano-node\n')))}p.isMDXComponent=!0},64861:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/devnet-topology-ca1bd25169f32020115ed1c52a4d1d59.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[5038],{3905:(e,a,t)=>{t.d(a,{Zo:()=>l,kt:()=>h});var n=t(67294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function d(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=n.createContext({}),c=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},l=function(e){var a=c(e.components);return n.createElement(s.Provider,{value:a},e.children)},f="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},b=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,d=e.originalType,s=e.parentName,l=r(e,["components","mdxType","originalType","parentName"]),f=c(t),b=o,h=f["".concat(s,".").concat(b)]||f[b]||p[b]||d;return t?n.createElement(h,i(i({ref:a},l),{},{components:t})):n.createElement(h,i({ref:a},l))}));function h(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var d=t.length,i=new Array(d);i[0]=b;var r={};for(var s in a)hasOwnProperty.call(a,s)&&(r[s]=a[s]);r.originalType=e,r[f]="string"==typeof e?e:o,i[1]=r;for(var c=2;c{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>d,metadata:()=>r,toc:()=>c});var n=t(87462),o=(t(67294),t(3905));const d={sidebar_position:3},i="Run a Private Mithril network",r={unversionedId:"manual/getting-started/run-mithril-devnet",id:"manual/getting-started/run-mithril-devnet",title:"Run a Private Mithril network",description:"In this guide, you will learn how to run a demonstration of a Mithril Network working on top of a private devnet Cardano Network. This network is completely autonomous and setup to produce Mithril snapshots every 1 minute.",source:"@site/root/manual/getting-started/run-mithril-devnet.md",sourceDirName:"manual/getting-started",slug:"/manual/getting-started/run-mithril-devnet",permalink:"/doc/next/manual/getting-started/run-mithril-devnet",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/getting-started/run-mithril-devnet.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docSideBar",previous:{title:"Run a Mithril Signer node (SPO)",permalink:"/doc/next/manual/getting-started/run-signer-node"},next:{title:"Developer Docs",permalink:"/doc/next/category/developer-docs"}},s={},c=[{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Download source",id:"download-source",level:2},{value:"Change directory",id:"change-directory",level:2},{value:"Run a Private Mithril/Cardano network locally (devnet)",id:"run-a-private-mithrilcardano-network-locally-devnet",level:2},{value:"Step 1: Launch the devnet",id:"step-1-launch-the-devnet",level:3},{value:"Step 2: Query the devnet",id:"step-2-query-the-devnet",level:3},{value:"Step 3: Observe the devnet",id:"step-3-observe-the-devnet",level:3},{value:"Interact with the Mithril Aggregator by using the Mithril Client",id:"interact-with-the-mithril-aggregator-by-using-the-mithril-client",level:2},{value:"Step 1: Prepare some useful variables",id:"step-1-prepare-some-useful-variables",level:3},{value:"Step 2: Select A Snapshot",id:"step-2-select-a-snapshot",level:3},{value:"Step 3: Show Snapshot Details",id:"step-3-show-snapshot-details",level:3},{value:"Step 4: Download Selected Snapshot",id:"step-4-download-selected-snapshot",level:3},{value:"Step 5: Restore Selected Snapshot",id:"step-5-restore-selected-snapshot",level:3}],l={toc:c},f="wrapper";function p(e){let{components:a,...d}=e;return(0,o.kt)(f,(0,n.Z)({},l,d,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"run-a-private-mithril-network"},"Run a Private Mithril network"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"In this guide, you will learn how to run a demonstration of a ",(0,o.kt)("strong",{parentName:"p"},"Mithril Network")," working on top of a private ",(0,o.kt)("inlineCode",{parentName:"p"},"devnet")," ",(0,o.kt)("strong",{parentName:"p"},"Cardano Network"),". This network is completely autonomous and setup to produce Mithril snapshots every 1 minute.")),(0,o.kt)("p",null,"The network will be launched with the following topology:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2")," ",(0,o.kt)("strong",{parentName:"li"},"Cardano Nodes")," configured as ",(0,o.kt)("strong",{parentName:"li"},"Stake Pool Operators (SPO)")," with a ",(0,o.kt)("strong",{parentName:"li"},"Mithril Signer")," on top"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"1")," ",(0,o.kt)("strong",{parentName:"li"},"Cardano Node")," configured as ",(0,o.kt)("strong",{parentName:"li"},"BFT node")," with a ",(0,o.kt)("strong",{parentName:"li"},"Mithril Aggregator")," on top")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Devnet Topology",src:t(64861).Z,width:"1010",height:"749"})),(0,o.kt)("admonition",{type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"This demonstration is working only on a Linux machine.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"More information about this private Cardano/Mithril ",(0,o.kt)("inlineCode",{parentName:"p"},"devnet")," is available ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/mithril/blob/main/mithril-test-lab/mithril-devnet/README.md"},"here"),".")),(0,o.kt)("h1",{id:"video-demonstration"},"Video demonstration"),(0,o.kt)("iframe",{style:{width:"100%",height:"480px"},src:"https://www.youtube.com/embed/qu3GoO1UwYI",title:"Run a Private Mithril network",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"true"}),(0,o.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install a ",(0,o.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"correctly configured")," Rust toolchain (latest stable version).")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run ",(0,o.kt)("inlineCode",{parentName:"p"},"apt install libssl-dev"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Ensure SQLite3 library is installed on your system and its version is at least ",(0,o.kt)("inlineCode",{parentName:"p"},"3.40"),". Run ",(0,o.kt)("inlineCode",{parentName:"p"},"sqlite3 --version")," to check your version."))),(0,o.kt)("h2",{id:"download-source"},"Download source"),(0,o.kt)("p",null,"Download from GitHub (HTTPS)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/input-output-hk/mithril.git\n")),(0,o.kt)("p",null,"Or (SSH)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:input-output-hk/mithril.git\n")),(0,o.kt)("h2",{id:"change-directory"},"Change directory"),(0,o.kt)("p",null,"Go to the devnet folder"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril-test-lab/mithril-devnet\n")),(0,o.kt)("h2",{id:"run-a-private-mithrilcardano-network-locally-devnet"},"Run a Private Mithril/Cardano network locally (",(0,o.kt)("inlineCode",{parentName:"h2"},"devnet"),")"),(0,o.kt)("h3",{id:"step-1-launch-the-devnet"},"Step 1: Launch the devnet"),(0,o.kt)("p",null,"Open a first terminal window."),(0,o.kt)("p",null,"Run a devnet with 1 BTF and 2 SPO Cardano nodes."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Option 1"),": Remote Docker images"),(0,o.kt)("p",null,"The network will be ready faster with remote Docker images."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"MITHRIL_IMAGE_ID=latest NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh\n")),(0,o.kt)("p",null,"Or"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Option 2"),": Local Docker images"),(0,o.kt)("p",null,"This takes more time to build local Docker images of the Mithril nodes"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"You will see that the devnet is launched with the following steps:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Bootstraping the devnet"),": generates the artifacts of the devnet depending on the configuration parameters (cryptographic keys, network topology, transactions to setup pool nodes, ...)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Start Cardano Network"),": run the nodes of the ",(0,o.kt)("strong",{parentName:"li"},"Cardano Network"),", waits for it to be ready and activate the pool nodes"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Start Mithril Network"),": run the nodes of the ",(0,o.kt)("strong",{parentName:"li"},"Mithril Network")," that works on top of the ",(0,o.kt)("strong",{parentName:"li"},"Cardano Network")))),(0,o.kt)("p",null,"You should see the following information displayed"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'=====================================================================\n Bootstrap Mithril/Cardano devnet\n=====================================================================\n\n>> Directory: artifacts\n>> Cardano BFT nodes: 1\n>> Cardano SPO nodes: 2\n>> Info: Mithril Aggregator will be attached to the first Cardano BFT node\n>> Info: Mithril Signers will be attached to each Cardano SPO node\n\n=====================================================================\n Start Cardano nodes\n=====================================================================\n\n>> Start Cardano network\ncardano-node: no process found\n>> Starting Cardano node \'node-bft1\'\n>> Starting Cardano node \'node-pool1\'\n>> Starting Cardano node \'node-pool2\'\n>> Wait for Cardano network to be ready\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Not ready yet\n>>>> Ready!\n>> Activate Cardano pools\nEstimated transaction fee: Lovelace 843\nTransaction successfully submitted.\nEstimated transaction fee: Lovelace 843\nTransaction successfully submitted.\n>> Wait for Cardano pools to be activated\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Not activated yet\n>>>> Activated!\n>>>> Found PoolId: pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys\n>>>> Found PoolId: pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav\n\n=====================================================================\n Start Mithril nodes\n=====================================================================\n\n>> Start Mithril network\n>> Build Mithril node Docker images\n>>>> Building Mithril Aggregator node Docker image\n>>>> Building Mithril Client node Docker image\n>>>> Building Mithril Signer node Docker image\nNo stopped containers\nCreating network "artifacts_cardano_network" with driver "bridge"\nCreating network "artifacts_mithril_network" with driver "bridge"\nCreating artifacts_mithril-aggregator_1 ... done\nCreating artifacts_mithril-signer-node-pool1_1 ... done\nCreating artifacts_mithril-signer-node-pool2_1 ... done\nCreating artifacts_mithril-aggregator-genesis_run ... done\n{"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 }, url_snapshot_manifest: \\"\\", 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"}\n{"msg":"New LocalSnapshotUploader created","v":0,"name":"slog-rs","level":20Genesis bootstrap for test only\n,"time":"2022-09-06T09:24:31.925683285Z","hostname":"e932dff845aa","pid":1,"snapshot_server_url":"http://0.0.0.0:8080/"}\n{"msg":"New MultiSignerImpl created","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.925711468Z","hostname":"e932dff845aa","pid":1}\n{"msg":"New MithrilCertificateVerifier created","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.925736796Z","hostname":"e932dff845aa","pid":1}\n{"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}\n{"msg":"Get next signers with stake","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938384324Z","hostname":"e932dff845aa","pid":1}\n{"msg":"Get next stake distribution","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938422585Z","hostname":"e932dff845aa","pid":1}\n{"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}\n{"msg":"Get next protocol parameters","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938500461Z","hostname":"e932dff845aa","pid":1}\n{"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}\n{"msg":"Create clerk","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.93856896Z","hostname":"e932dff845aa","pid":1}\nVerify genesis certificate #86a4c56d957636740a75c250fdd9d3b9a9f1539dc93449b1f80fcab49e279d6d @ epoch #10\n\n=====================================================================\n Schedule Cardano Stake Delegation\n=====================================================================\n\n>> Begin scheduled delegation\n>> 11:24:32: Wait 180s until next delegation round...\n>> Run delegation round #1!\n>>>> Current Epoch: 12\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\n>> 11:27:32: Wait 180s until next delegation round...\n>> Run delegation round #2!\n>>>> Current Epoch: 14\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\nEstimated transaction fee: Lovelace 436\nTransaction successfully submitted.\n>> 11:30:32: Wait 180s until next delegation round...\n')),(0,o.kt)("h3",{id:"step-2-query-the-devnet"},"Step 2: Query the devnet"),(0,o.kt)("p",null,"Open a second terminal window."),(0,o.kt)("p",null,"Watch the state queried from the devnet"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"watch -n 1 ./devnet-query.sh\n")),(0,o.kt)("p",null,"The networks will be queried every ",(0,o.kt)("inlineCode",{parentName:"p"},"1s")," and will display:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Certificate production informations gathered from the ",(0,o.kt)("strong",{parentName:"li"},"Mithril Network")),(0,o.kt)("li",{parentName:"ul"},"Utxo, Stake Pools, Stake Distribution from the ",(0,o.kt)("strong",{parentName:"li"},"Cardano Network"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'=====================================================================\n Query Mithril/Cardano devnet\n=====================================================================\n\n=====================================================================\n=== Mithril Network\n=====================================================================\n\n>> Query pending certificate\n{\n "beacon": {\n "network": "devnet",\n "epoch": 2,\n "immutable_file_number": 6\n },\n "protocol": {\n "k": 5,\n "m": 100,\n "phi_f": 0.65\n },\n "signers": []\n}\n\n>> Query snapshots\n[\n {\n "digest": "224b77ad9cbe7fc81e6808940d391b299c27e77d9978641025f382e2e5ddd2ac",\n "certificate_hash": "5b29543c4af0f369d40e1da53451ebd8a39c4263df1585eb072f54511c1e3333",\n "size": 7986,\n "created_at": "2022-07-05T11:26:55.855498395Z",\n "locations": [\n "http://0.0.0.0:8080/aggregator/snapshot/224b77ad9cbe7fc81e6808940d391b299c27e77d9978641025f382e2e5ddd2ac/download"\n ]\n },\n {\n "digest": "1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0",\n "certificate_hash": "be758b84a4b495e82af48747356946efb509ccbc4b44a9c985e3cb3099e35c94",\n "size": 6743,\n "created_at": "2022-07-05T11:26:35.658661878Z",\n "locations": [\n "http://0.0.0.0:8080/aggregator/snapshot/1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0/download"\n ]\n },\n {\n "digest": "fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1",\n "certificate_hash": "4254a6176afbe17967ad1671e4619e9a3f3412115a63dd0eb0f5e8b64094128a",\n "size": 6199,\n "created_at": "2022-07-05T11:26:20.470029035Z",\n "locations": [\n "http://0.0.0.0:8080/aggregator/snapshot/fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1/download"\n ]\n }\n]\n\n=====================================================================\n=== Cardano Network\n=====================================================================\n\n>> Query chain tip\n{\n "era": "Alonzo",\n "syncProgress": "100.00",\n "hash": "075fc8366d353b45debedfc6faa92148c8fad584d81dbb4ea7b8b4d121489452",\n "epoch": 2,\n "slot": 219,\n "block": 9\n}\n\n>> Query whole utxo\n TxHash TxIx Amount\n--------------------------------------------------------------------------------------\n4980fb7c90bc003f6af65778008732cd1b1a8c0873b7d622bfb7442f1312c9b5 0 447999157 lovelace + TxOutDatumNone\n4980fb7c90bc003f6af65778008732cd1b1a8c0873b7d622bfb7442f1312c9b5 1 2000000 lovelace + TxOutDatumNone\nc31e535531c9eb32bdd8f05e25204186333262674d24c6a770b6b120f020d9a9 0 448999157 lovelace + TxOutDatumNone\nc31e535531c9eb32bdd8f05e25204186333262674d24c6a770b6b120f020d9a9 1 1000000 lovelace + TxOutDatumNone\ned265b672873192ea1e9c19092e8f41947c28977438bcff580312de37cfbd46c 0 1002000000 lovelace + TxOutDatumNone\n\n>> Query stake pools\npool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys\npool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav\n\n>> Query stake distribution\n PoolId Stake frac\n------------------------------------------------------------------------------\npool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys 1.052e-3\npool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav 5.258e-4\n')),(0,o.kt)("h3",{id:"step-3-observe-the-devnet"},"Step 3: Observe the devnet"),(0,o.kt)("p",null,"Open a third terminal window."),(0,o.kt)("p",null,"Watch the logs of each node of the devnet"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"watch -n 1 LINES=5 ./devnet-log.sh\n")),(0,o.kt)("p",null,"The nodes will be queried every ",(0,o.kt)("inlineCode",{parentName:"p"},"1s")," and will display as below"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'=====================================================================\n Logs Mithril/Cardano devnet\n=====================================================================\n\n=====================================================================\n-- docker-compose logs --tail=5\n=====================================================================\nAttaching to artifacts_mithril-signer-node-pool1_1, artifacts_mithril-signer-node-pool2_1, artifacts_mithril-aggregator_1\nmithril-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}\nmithril-aggregator_1 | {"msg":"Get signer pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav","v":0,"name":"slog-rs","level":20,"time":"2022-07-05T11:29:32.72678048Z","hostname":"ba17593540ac","pid":1}\nmithril-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}\nmithril-aggregator_1 | {"msg":"Get signer pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys","v":0,"name":"slog-rs","level":20,"time":"2022-07-05T11:29:32.734529107Z","hostname":"ba17593540ac","pid":1}\nmithril-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}\nmithril-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}"}\nmithril-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}\nmithril-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}\nmithril-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}\nmithril-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}\nmithril-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}"}\nmithril-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}\nmithril-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}\nmithril-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}\nmithril-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}\n\n=====================================================================\n=====================================================================\ntail -n 22 ./node-bft1/node.log\n=====================================================================\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.76 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.75 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.76 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.26 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.75 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400\n[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\n=====================================================================\n\n=====================================================================\ntail -n 22 ./node-pool1/node.log\n=====================================================================\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.76 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.76 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.75 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.26 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.76 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400\n[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\n=====================================================================\n\n=====================================================================\ntail -n 22 ./node-pool2/node.log\n=====================================================================\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.75 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.76 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.75 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.25 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.76 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385\n[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\n[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400\n[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\n=====================================================================\n\n')),(0,o.kt)("h2",{id:"interact-with-the-mithril-aggregator-by-using-the-mithril-client"},"Interact with the Mithril Aggregator by using the Mithril Client"),(0,o.kt)("h3",{id:"step-1-prepare-some-useful-variables"},"Step 1: Prepare some useful variables"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# Cardano network\nNETWORK=devnet\n\n# Aggregator API endpoint URL\nAGGREGATOR_ENDPOINT=http://localhost:8080/aggregator\n\n# Digest of the latest produced snapshot for convenience of the demo\n# You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2\nSNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/artifact/snapshots | jq -r '.[0].digest')\n")),(0,o.kt)("h3",{id:"step-2-select-a-snapshot"},"Step 2: Select A Snapshot"),(0,o.kt)("p",null,"List the available snapshots with which you can bootstrap a Cardano node"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client list\n")),(0,o.kt)("p",null,"You will see a list of snapshots"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| Network | Digest | Size | Locations | Created |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 | 11808 | 1 | 2022-07-04T16:47:00.258482685Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | 60d9c6e014d22335b34f55f83da728667f04fc1c63152ccff0bce7d217d08447 | 10793 | 1 | 2022-07-04T16:46:45.069646321Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | a3c4bb5f413f1b9648f0a086b3752d25ec62b540b8390917a5a7e78809896d92 | 7991 | 1 | 2022-07-04T16:46:09.817821220Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | b952adaa04dbb42206c69589b9951660f40c7262b088b13434b7a446ec90bc36 | 6746 | 1 | 2022-07-04T16:45:49.616260734Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n| devnet | 46425fdcfe89ad5ba41a7822a4395e21b539e80c20e2b10546017b14cdcd4e4b | 6196 | 1 | 2022-07-04T16:45:29.425195132Z |\n+---------+------------------------------------------------------------------+-------+-----------+--------------------------------+\n")),(0,o.kt)("h3",{id:"step-3-show-snapshot-details"},"Step 3: Show Snapshot Details"),(0,o.kt)("p",null,"Get some more details from a specific snapshot (Optional)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client show $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see more information about a snapshot"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+------------+-------------------------------------------------------------------------------------------------------------------+\n| Info | Value |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Network | devnet |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Digest | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Size | 11808 |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Location 1 | http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n| Created | 2022-07-04T16:47:00.258482685Z |\n+------------+-------------------------------------------------------------------------------------------------------------------+\n")),(0,o.kt)("h3",{id:"step-4-download-selected-snapshot"},"Step 4: Download Selected Snapshot"),(0,o.kt)("p",null,"Download the selected snapshot from the remote location to your remote location"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client download $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the selected snapshot archive has been downloaded locally"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"Download success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 #1\nfrom http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download\nto /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/snapshot.archive.tar.gz\n")),(0,o.kt)("h3",{id:"step-5-restore-selected-snapshot"},"Step 5: Restore Selected Snapshot"),(0,o.kt)("p",null,"Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client restore $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the snapshot archive is unpacked and that the associated certificate is valid"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Unpacking snapshot...\nUnpack success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917\nto /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db\n\nRestore a Cardano Node with:\n\ndocker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data \\\n --mount type=bind,source="./data/devnet/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db",target=/data/db/ \\\n -e NETWORK=devnet \\\n inputoutput/cardano-node\n')))}p.isMDXComponent=!0},64861:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/devnet-topology-ca1bd25169f32020115ed1c52a4d1d59.png"}}]); \ No newline at end of file diff --git a/doc/assets/js/f893c5dd.266c37f9.js b/doc/assets/js/f893c5dd.266c37f9.js new file mode 100644 index 0000000000..fd5e889b91 --- /dev/null +++ b/doc/assets/js/f893c5dd.266c37f9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[1747,5569,5458],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),s=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(l.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,c=d(e,["components","mdxType","originalType","parentName"]),p=s(n),u=o,h=p["".concat(l,".").concat(u)]||p[u]||f[u]||r;return n?a.createElement(h,i(i({ref:t},c),{},{components:n})):a.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=u;var d={};for(var l in t)hasOwnProperty.call(t,l)&&(d[l]=t[l]);d.originalType=e,d[p]="string"==typeof e?e:o,i[1]=d;for(var s=2;s{n.d(t,{Z:()=>i});var a=n(67294),o=n(86010);const r={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,i),hidden:n},t)}},74866:(e,t,n)=>{n.d(t,{Z:()=>T});var a=n(87462),o=n(67294),r=n(86010),i=n(12466),d=n(16550),l=n(91980),s=n(67392),c=n(50012);function p(e){return function(e){return o.Children.map(e,(e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function f(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=t??p(n);return function(e){const t=(0,s.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,d.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,r=f(e),[i,d]=(0,o.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[l,s]=h({queryString:n,groupId:a}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,c.Nk)(n);return[a,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:a}),g=(()=>{const e=l??p;return u({value:e,tabValues:r})?e:null})();(0,o.useLayoutEffect)((()=>{g&&d(g)}),[g]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!u({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);d(e),s(e),m(e)}),[s,m,r]),tabValues:r}}var g=n(72389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function k(e){let{className:t,block:n,selectedValue:d,selectValue:l,tabValues:s}=e;const c=[],{blockElementScrollPositionUntilNextRender:p}=(0,i.o5)(),f=e=>{const t=e.currentTarget,n=c.indexOf(t),a=s[n].value;a!==d&&(p(t),l(a))},u=e=>{let t=null;switch(e.key){case"Enter":f(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},s.map((e=>{let{value:t,label:n,attributes:i}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:d===t?0:-1,"aria-selected":d===t,key:t,ref:e=>c.push(e),onKeyDown:u,onClick:f},i,{className:(0,r.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":d===t})}),n??t)})))}function N(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function C(e){const t=m(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",b.tabList)},o.createElement(k,(0,a.Z)({},e,t)),o.createElement(N,(0,a.Z)({},e,t)))}function T(e){const t=(0,g.Z)();return o.createElement(C,(0,a.Z)({key:String(t)},e))}},57977:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>f,frontMatter:()=>r,metadata:()=>d,toc:()=>s});var a=n(87462),o=(n(67294),n(3905));const r={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},i=void 0,d={unversionedId:"compiled-binaries",id:"version-maintained/compiled-binaries",title:"compiled-binaries",description:"Download compiled binary",source:"@site/versioned_docs/version-maintained/compiled-binaries.md",sourceDirName:".",slug:"/compiled-binaries",permalink:"/doc/compiled-binaries",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/compiled-binaries.md",tags:[],version:"maintained",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},l={},s=[{value:"Download compiled binary",id:"download-compiled-binary",level:2}],c={toc:s},p="wrapper";function f(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"download-compiled-binary"},"Download compiled binary"),(0,o.kt)("p",null,"Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package."),(0,o.kt)("p",null,"You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting."),(0,o.kt)("p",null,"These links are available in the ",(0,o.kt)("strong",{parentName:"p"},"Build From")," column of the above ",(0,o.kt)("strong",{parentName:"p"},"Mithril Networks")," table."))}f.isMDXComponent=!0},60287:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>s,toc:()=>p});var a=n(87462),o=(n(67294),n(3905)),r=n(5892),i=n(57977);const d={sidebar_position:1},l="Bootstrap a Cardano Node",s={unversionedId:"manual/getting-started/bootstrap-cardano-node",id:"version-maintained/manual/getting-started/bootstrap-cardano-node",title:"Bootstrap a Cardano Node",description:"Thanks to a Mithril Client connected to a Mithril Aggregator, you will restore a full Cardano node in less than 2 hours!",source:"@site/versioned_docs/version-maintained/manual/getting-started/bootstrap-cardano-node.md",sourceDirName:"manual/getting-started",slug:"/manual/getting-started/bootstrap-cardano-node",permalink:"/doc/manual/getting-started/bootstrap-cardano-node",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/getting-started/bootstrap-cardano-node.md",tags:[],version:"maintained",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docSideBar",previous:{title:"Getting Started",permalink:"/doc/category/getting-started"},next:{title:"Run a Mithril Signer node (SPO)",permalink:"/doc/manual/getting-started/run-signer-node"}},c={},p=[{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Download source",id:"download-source",level:2},{value:"Build Mithril Client binary",id:"build-mithril-client-binary",level:2},{value:"Verify binary",id:"verify-binary",level:2},{value:"Verify version",id:"verify-version",level:3},{value:"Verify build",id:"verify-build",level:3},{value:"Run Docker container",id:"run-docker-container",level:2},{value:"Bootstrap a Cardano node from a testnet Mithril snapshot",id:"bootstrap-a-cardano-node-from-a-testnet-mithril-snapshot",level:2},{value:"Step 1: Prepare some useful variables",id:"step-1-prepare-some-useful-variables",level:3},{value:"Step 2: Select A Snapshot",id:"step-2-select-a-snapshot",level:3},{value:"Step 3: Show Snapshot Details",id:"step-3-show-snapshot-details",level:3},{value:"Step 4: Download Selected Snapshot",id:"step-4-download-selected-snapshot",level:3},{value:"Step 5: Restore Selected Snapshot",id:"step-5-restore-selected-snapshot",level:3},{value:"Step 6: Launch a Cardano Node From Restored Snapshot",id:"step-6-launch-a-cardano-node-from-restored-snapshot",level:3}],f={toc:p},u="wrapper";function h(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"bootstrap-a-cardano-node"},"Bootstrap a Cardano Node"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Thanks to a ",(0,o.kt)("strong",{parentName:"p"},"Mithril Client")," connected to a ",(0,o.kt)("strong",{parentName:"p"},"Mithril Aggregator"),", you will restore a full Cardano node in less than 2 hours!")),(0,o.kt)("admonition",{title:"Mithril Networks",type:"note"},(0,o.kt)(r.default,{mdxType:"NetworksMatrix"})),(0,o.kt)("h1",{id:"video-demonstration"},"Video demonstration"),(0,o.kt)("p",null,"In this video you will see how fast the bootstrapping of a Cardano node with Mithril is compared to classical bootstrapping (benchmark done on mainnet with Daedalus wallet)."),(0,o.kt)("iframe",{style:{width:"100%",height:"480px"},src:"https://www.youtube.com/embed/5qjJNRgEzYo",title:"Daedalus Bootstrap Benchmark on mainnet with/without Mithril",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"true"}),(0,o.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install a ",(0,o.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"correctly configured")," Rust toolchain (latest stable version).")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run ",(0,o.kt)("inlineCode",{parentName:"p"},"sudo apt install libssl-dev"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install other requirements"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get install make build-essential m4 docker jq\n")),(0,o.kt)("h2",{id:"download-source"},"Download source"),(0,o.kt)("p",null,"Download from GitHub (HTTPS)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/input-output-hk/mithril.git\n")),(0,o.kt)("p",null,"Or (SSH)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:input-output-hk/mithril.git\n")),(0,o.kt)("h2",{id:"build-mithril-client-binary"},"Build Mithril Client binary"),(0,o.kt)("p",null,"Switch to build branch / tag"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, \n# please refer to the **Build From** column of the above **Mithril Networks** table\ngit switch **YOUR_BUILD_BRANCH_OR_TAG**\n")),(0,o.kt)("p",null,"Change directory"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril/mithril-client\n")),(0,o.kt)("p",null,"Run tests (Optional)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"make test\n")),(0,o.kt)("p",null,"Build executable"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"make build\n")),(0,o.kt)("h2",{id:"verify-binary"},"Verify binary"),(0,o.kt)("h3",{id:"verify-version"},"Verify version"),(0,o.kt)("p",null,"Check that the Mithril Signer binary is running the correct version by running"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client -V\n")),(0,o.kt)("p",null,"You should see something like"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mithril-client 0.2.0\n")),(0,o.kt)("p",null,"\u26a0\ufe0f Verify that the version displayed is the version described in the content of the Release / Pre-Release note (see the ",(0,o.kt)("strong",{parentName:"p"},"Build From")," column of the above ",(0,o.kt)("strong",{parentName:"p"},"Mithril Networks")," table)"),(0,o.kt)("h3",{id:"verify-build"},"Verify build"),(0,o.kt)("p",null,"Check that the Mithril Client binary is working fine by running its help"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client -h\n")),(0,o.kt)("p",null,"You should see"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"This program downloads, checks and restores certified blockchain snapshots.\n\nUsage: mithril-client [OPTIONS] \n\nCommands:\n list List available snapshots\n show Show detailed informations about a snapshot\n download Download a snapshot\n restore Restore a snapshot\n help Print this message or the help of the given subcommand(s)\n\nOptions:\n --run-mode \n Run Mode [env: RUN_MODE=] [default: dev]\n -v, --verbose...\n Verbosity level (-v=warning, -vv=info, -vvv=debug)\n --config-directory \n Directory where configuration file is located [default: ./config]\n --aggregator-endpoint \n Override configuration Aggregator endpoint URL\n -h, --help\n Print help information\n -V, --version\n Print version information\n")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"You can use the ",(0,o.kt)("inlineCode",{parentName:"p"},"--json")," option in order to display results in ",(0,o.kt)("inlineCode",{parentName:"p"},"JSON")," format for the ",(0,o.kt)("inlineCode",{parentName:"p"},"list")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"show")," commands:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client list --json\n"))),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you want to dig deeper, you can get access to several level of logs from the Mithril Client:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-v")," for some logs (WARN)"),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-vv")," for more logs (INFO)"),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-vvv")," for even more logs (DEBUG)"),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-vvvv")," for all logs (TRACE)"))),(0,o.kt)(i.default,{mdxType:"CompiledBinaries"}),(0,o.kt)("h2",{id:"run-docker-container"},"Run Docker container"),(0,o.kt)("p",null,"The list of available images on the registry is listed ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/mithril/pkgs/container/mithril-client"},"here")),(0,o.kt)("p",null,"Prepare an environment variable with the selected Docker image"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**\n")),(0,o.kt)("p",null,"Here is an example configuration for the ",(0,o.kt)("inlineCode",{parentName:"p"},"latest")," stable Docker image"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=latest\n")),(0,o.kt)("p",null,"Then create a shell function for the Mithril Client:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mithril_client () {\n docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@\n}\n")),(0,o.kt)("p",null,"Now you can use the ",(0,o.kt)("inlineCode",{parentName:"p"},"mithril_client")," function:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# 1- Help\nmithril_client help\n\n# 2- List snapshots\nmithril_client list\n")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"In the following part of the document, you will need to replace the ",(0,o.kt)("inlineCode",{parentName:"p"},"./mithril-client")," commands with ",(0,o.kt)("inlineCode",{parentName:"p"},"mithril_client")," in order to use the above shell function.")),(0,o.kt)("h2",{id:"bootstrap-a-cardano-node-from-a-testnet-mithril-snapshot"},"Bootstrap a Cardano node from a testnet Mithril snapshot"),(0,o.kt)("h3",{id:"step-1-prepare-some-useful-variables"},"Step 1: Prepare some useful variables"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# Cardano network\nexport NETWORK=**YOUR_CARDANO_NETWORK**\n\n# Aggregator API endpoint URL\nexport AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**\n\n# Genesis verification key\nexport GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)\n\n# Digest of the latest produced snapshot for convenience of the demo\n# You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2\nexport SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')\n")),(0,o.kt)("h3",{id:"step-2-select-a-snapshot"},"Step 2: Select A Snapshot"),(0,o.kt)("p",null,"List the available snapshots with which you can bootstrap a Cardano node"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client list\n")),(0,o.kt)("p",null,"You will see a list of snapshots"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| Network | Digest | Size | Locations | Created |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 | 5273560121 | 1 | 2022-07-10T11:19:18.042554390Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | 22267a8399cbd1731420f7241c91bec66b3126c971d53b1cdf4db0c016320df4 | 5267582819 | 1 | 2022-07-10T05:44:59.048360039Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | c14792945b3880fa9f8880348f885c707b8e4d13cdb035b9a735c15f88ea45db | 5265335799 | 1 | 2022-07-10T00:03:43.656860711Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | 0344faf7ebcd7cbf606288bfc8e7c11f992bd4f28f3ac159942b487a0217f485 | 5265577167 | 1 | 2022-07-09T18:31:16.604292173Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | fc42ef98e233717a7180502dc51aab1ca64d5bd6d6e9d72b4096ac1f7e45a129 | 5262797245 | 1 | 2022-07-09T12:45:20.306735843Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n")),(0,o.kt)("h3",{id:"step-3-show-snapshot-details"},"Step 3: Show Snapshot Details"),(0,o.kt)("p",null,"Get some more details from a specific snapshot (Optional)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client show $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see more information about a snapshot"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Info | Value |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Network | testnet |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Digest | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Size | 5273560121 |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Location 1 | https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Created | 2022-07-10T11:19:18.042554390Z |\n")),(0,o.kt)("h3",{id:"step-4-download-selected-snapshot"},"Step 4: Download Selected Snapshot"),(0,o.kt)("p",null,"Download the selected snapshot from the remote location to your remote location"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client download $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the selected snapshot archive has been downloaded locally"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"Download success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 #1\nfrom https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz\nto /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/snapshot.archive.tar.gz\n")),(0,o.kt)("h3",{id:"step-5-restore-selected-snapshot"},"Step 5: Restore Selected Snapshot"),(0,o.kt)("p",null,"Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client restore $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the snapshot archive is unpacked and that the associated certificate is valid"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Unpacking snapshot...\nUnpack success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068\nto /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db\n\nRestore a Cardano Node with:\n\ndocker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="/home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db",target=/data/db/ -e NETWORK=testnet inputoutput/cardano-node\n')),(0,o.kt)("h3",{id:"step-6-launch-a-cardano-node-from-restored-snapshot"},"Step 6: Launch a Cardano Node From Restored Snapshot"),(0,o.kt)("p",null,"Launch an empty Cardano node and make it live in minutes!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="$(pwd)/data/testnet/$SNAPSHOT_DIGEST/db",target=/data/db/ -e NETWORK=**YOUR_CARDANO_NETWORK** inputoutput/cardano-node\n')),(0,o.kt)("p",null,"You will see the node start by validating the files injested from the snapshot archive"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Starting: /nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run\n--config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json\n--database-path /data/db\n--topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml\n--host-addr 0.0.0.0\n--port 3001\n--socket-path /ipc/node.socket\n\n\n\n\n\n+RTS\n-N2\n-I0\n-A16m\n-qg\n-qb\n--disable-delayed-os-memory-return\n-RTS\n..or, once again, in a single line:\n/nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run --config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json --database-path /data/db --topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml --host-addr 0.0.0.0 --port 3001 --socket-path /ipc/node.socket +RTS -N2 -I0 -A16m -qg -qb --disable-delayed-os-memory-return -RTS\nNode configuration: NodeConfiguration {ncSocketConfig = SocketConfig {ncNodeIPv4Addr = Last {getLast = Just 0.0.0.0}, ncNodeIPv6Addr = Last {getLast = Nothing}, ncNodePortNumber = Last {getLast = Just 3001}, ncSocketPath = Last {getLast = Just "/ipc/node.socket"}}, ncConfigFile = "/nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json", ncTopologyFile = "/nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml", ncDatabaseFile = "/data/db", ncProtocolFiles = ProtocolFilepaths {byronCertFile = Nothing, byronKeyFile = Nothing, shelleyKESFile = Nothing, shelleyVRFFile = Nothing, shelleyCertFile = Nothing, shelleyBulkCredsFile = Nothing}, ncValidateDB = False, ncShutdownConfig = ShutdownConfig {scIPC = Nothing, scOnSyncLimit = Just NoShutdown}, ncProtocolConfig = NodeProtocolConfigurationCardano (NodeByronProtocolConfiguration {npcByronGenesisFile = "/nix/store/kax0css4lx3ywihvsgrqjym0jpi20f99-byron-genesis.json", npcByronGenesisFileHash = Just "96fceff972c2c06bd3bb5243c39215333be6d56aaf4823073dca31afe5038471", npcByronReqNetworkMagic = RequiresMagic, npcByronPbftSignatureThresh = Nothing, npcByronApplicationName = ApplicationName {unApplicationName = "cardano-sl"}, npcByronApplicationVersion = 0, npcByronSupportedProtocolVersionMajor = 3, npcByronSupportedProtocolVersionMinor = 0, npcByronSupportedProtocolVersionAlt = 0}) (NodeShelleyProtocolConfiguration {npcShelleyGenesisFile = "/nix/store/2xhy92909anynqsvx1b1x153cxwnfmzx-shelley-genesis.json", npcShelleyGenesisFileHash = Just "849a1764f152e1b09c89c0dfdbcbdd38d711d1fec2db5dfa0f87cf2737a0eaf4"}) (NodeAlonzoProtocolConfiguration {npcAlonzoGenesisFile = "/nix/store/8qnphq6yvcjspiy3z0aijfd6cv64l3hl-alonzo-genesis.json", npcAlonzoGenesisFileHash = Just "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874"}) (NodeHardForkProtocolConfiguration {npcTestEnableDevelopmentHardForkEras = False, npcTestShelleyHardForkAtEpoch = Nothing, npcTestShelleyHardForkAtVersion = Nothing, npcTestAllegraHardForkAtEpoch = Nothing, npcTestAllegraHardForkAtVersion = Nothing, npcTestMaryHardForkAtEpoch = Nothing, npcTestMaryHardForkAtVersion = Nothing, npcTestAlonzoHardForkAtEpoch = Nothing, npcTestAlonzoHardForkAtVersion = Nothing, npcTestBabbageHardForkAtEpoch = Nothing, npcTestBabbageHardForkAtVersion = Nothing}), ncDiffusionMode = InitiatorAndResponderDiffusionMode, ncSnapshotInterval = DefaultSnapshotInterval, ncTestEnableDevelopmentNetworkProtocols = False, ncMaxConcurrencyBulkSync = Nothing, ncMaxConcurrencyDeadline = Nothing, ncLoggingSwitch = True, ncLogMetrics = True, ncTraceConfig = TracingOnLegacy (TraceSelection {traceVerbosity = NormalVerbosity, traceAcceptPolicy = OnOff {isOn = True}, traceBlockFetchClient = OnOff {isOn = False}, traceBlockFetchDecisions = OnOff {isOn = False}, traceBlockFetchProtocol = OnOff {isOn = False}, traceBlockFetchProtocolSerialised = OnOff {isOn = False}, traceBlockFetchServer = OnOff {isOn = False}, traceBlockchainTime = OnOff {isOn = False}, traceChainDB = OnOff {isOn = True}, traceChainSyncBlockServer = OnOff {isOn = False}, traceChainSyncClient = OnOff {isOn = False}, traceChainSyncHeaderServer = OnOff {isOn = False}, traceChainSyncProtocol = OnOff {isOn = False}, traceConnectionManager = OnOff {isOn = True}, traceConnectionManagerCounters = OnOff {isOn = True}, traceConnectionManagerTransitions = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorTracer = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorResponderTracer = OnOff {isOn = False}, traceDiffusionInitialization = OnOff {isOn = True}, traceDnsResolver = OnOff {isOn = False}, traceDnsSubscription = OnOff {isOn = True}, traceErrorPolicy = OnOff {isOn = True}, traceForge = OnOff {isOn = True}, traceForgeStateInfo = OnOff {isOn = True}, traceHandshake = OnOff {isOn = False}, traceInboundGovernor = OnOff {isOn = True}, traceInboundGovernorCounters = OnOff {isOn = True}, traceInboundGovernorTransitions = OnOff {isOn = True}, traceIpSubscription = OnOff {isOn = True}, traceKeepAliveClient = OnOff {isOn = False}, traceLedgerPeers = OnOff {isOn = True}, traceLocalChainSyncProtocol = OnOff {isOn = False}, traceLocalConnectionManager = OnOff {isOn = False}, traceLocalErrorPolicy = OnOff {isOn = True}, traceLocalHandshake = OnOff {isOn = False}, traceLocalInboundGovernor = OnOff {isOn = False}, traceLocalMux = OnOff {isOn = False}, traceLocalRootPeers = OnOff {isOn = True}, traceLocalServer = OnOff {isOn = False}, traceLocalStateQueryProtocol = OnOff {isOn = False}, traceLocalTxMonitorProtocol = OnOff {isOn = False}, traceLocalTxSubmissionProtocol = OnOff {isOn = False}, traceLocalTxSubmissionServer = OnOff {isOn = False}, traceMempool = OnOff {isOn = True}, traceMux = OnOff {isOn = False}, tracePeerSelection = OnOff {isOn = True}, tracePeerSelectionCounters = OnOff {isOn = True}, tracePeerSelectionActions = OnOff {isOn = True}, tracePublicRootPeers = OnOff {isOn = True}, traceServer = OnOff {isOn = True}, traceTxInbound = OnOff {isOn = False}, traceTxOutbound = OnOff {isOn = False}, traceTxSubmissionProtocol = OnOff {isOn = False}, traceTxSubmission2Protocol = OnOff {isOn = False}}), ncTraceForwardSocket = Nothing, ncMaybeMempoolCapacityOverride = Nothing, ncProtocolIdleTimeout = 5s, ncTimeWaitTimeout = 60s, ncAcceptedConnectionsLimit = AcceptedConnectionsLimit {acceptedConnectionsHardLimit = 512, acceptedConnectionsSoftLimit = 384, acceptedConnectionsDelay = 5s}, ncTargetNumberOfRootPeers = 100, ncTargetNumberOfKnownPeers = 100, ncTargetNumberOfEstablishedPeers = 50, ncTargetNumberOfActivePeers = 20, ncEnableP2P = DisabledP2PMode}\nListening on http://127.0.0.1:12798\n[c995d1df:cardano.node.basicInfo.protocol:Notice:5] [2022-07-10 13:48:51.68 UTC] Byron; Shelley\n[c995d1df:cardano.node.basicInfo.version:Notice:5] [2022-07-10 13:48:51.68 UTC] 1.35.1\n[c995d1df:cardano.node.basicInfo.commit:Notice:5] [2022-07-10 13:48:51.68 UTC] 0000000000000000000000000000000000000000\n[c995d1df:cardano.node.basicInfo.nodeStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2022-07-10 13:48:51.685957811 UTC\n[c995d1df:cardano.node.basicInfo.systemStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2019-07-24 20:20:16 UTC\n[c995d1df:cardano.node.basicInfo.slotLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 20s\n[c995d1df:cardano.node.basicInfo.epochLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 21600\n[c995d1df:cardano.node.basicInfo.slotLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Config path /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json, Network magic NetworkMagic {unNetworkMagic = 1097911063}, Protocol "Byron; Shelley", Version "1.35.1", Commit "0000000000000000000000000000000000000000", Node start time 2022-07-10 13:48:51.694962147 UTC\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Byron, Slot length 20s, Epoch length 21600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Shelley, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Allegra, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Mary, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Alonzo, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Babbage, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] startup time: 1657460932\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.70 UTC] \nnode addresses: 0.0.0.0:3001\nlocal socket: /ipc/node.socket\nnode-to-node versions:\nNodeToNodeV_7 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)\nNodeToNodeV_8 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)\nNodeToNodeV_9 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* Nil)\nnode-to-client versions:\nNodeToClientV_9 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_10 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_11 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_12 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_13 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* Nil)\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Chain DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Immutable DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.79 UTC] Validating chunk no. 0 out of 2917. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validated chunk no. 0 out of 2917. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validating chunk no. 1 out of 2917. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validated chunk no. 1 out of 2917. Progress: 0.03%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validating chunk no. 2 out of 2917. Progress: 0.03%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validated chunk no. 2 out of 2917. Progress: 0.07%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validating chunk no. 3 out of 2917. Progress: 0.07%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validated chunk no. 3 out of 2917. Progress: 0.10%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validating chunk no. 4 out of 2917. Progress: 0.10%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validated chunk no. 4 out of 2917. Progress: 0.14%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validating chunk no. 5 out of 2917. Progress: 0.14%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:54.14 UTC] Validated chunk no. 5 out of 2917. \n\n... (Cut for readability)\n\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validated chunk no. 2911 out of 2917. Progress: 99.79%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validating chunk no. 2912 out of 2917. Progress: 99.79%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validated chunk no. 2912 out of 2917. Progress: 99.83%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validating chunk no. 2913 out of 2917. Progress: 99.83%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validated chunk no. 2913 out of 2917. Progress: 99.86%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validating chunk no. 2914 out of 2917. Progress: 99.86%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validated chunk no. 2914 out of 2917. Progress: 99.90%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validating chunk no. 2915 out of 2917. Progress: 99.90%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validated chunk no. 2915 out of 2917. Progress: 99.93%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validating chunk no. 2916 out of 2917. Progress: 99.93%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validated chunk no. 2916 out of 2917. Progress: 99.97%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validating chunk no. 2917 out of 2917. Progress: 99.97%\n[c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the secondary index for the chunk file with number 2917.\n[c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the primary index for the chunk file with number 2917.\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Found a valid last location at chunk 2917 with tip 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432@63009237.\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Opened imm db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and chunk 2917\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Started opening Volatile DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Opened vol db\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Started opening Ledger DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replaying ledger from snapshot at 16ce3e707388b8c033f87b440ac89095b2d2fc5fa2b42f768c38da286312a31a at slot 63005524\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replayed block: slot 63005533 out of 63009237. Progress: 0.24%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.20 UTC] Replayed block: slot 63007165 out of 63009237. Progress: 44.20%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Opened lgr db\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Started initial chain selection\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.45 UTC] Pushing ledger state for block 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] before next, messages elided = 63009476\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 5e59df354b64634bd27fc1b3ed08991c6de909ea085625da2ca78ec5a6a3e37c at slot 63019450. Progress: 13.85%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block e0610e4f03ef640ead31a729f6f18aa820f3906f6414b179d3c553f0011162ef at slot 63019479. Progress: 13.89%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 8edc84f1f289475ca5c2afd9cae3c704ed7bcdf3e489fd1842e3904bd2d6d8c5 at slot 63019510. Progress: 13.93%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] before next, messages elided = 63019575\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block fc426a1c3a8c5ae61100e5ccfcaa47ccfb6cc144ed17fcd47a2b55f48890790a at slot 63029515. Progress: 27.75%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 68059200505d3ec65d3ddce9441efb0607adab002066c00acc050f5bb0c53deb at slot 63029578. Progress: 27.84%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 25f5cc004ad90dc554e085699f1386dc8f69cec4012a7b35735b83da6fa68a0b at slot 63029602. Progress: 27.87%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] before next, messages elided = 63029636\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block cfb3dd669fd1a85aaf005ddd0e4a8b90cbb7b2c66dc8ff6f41e2e7aa2a0f0c57 at slot 63039634. Progress: 41.72%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block d7f057436e749e4468cfd8b17a04d447c4ce628b8dc33ea7ebdc4d3ad4659dec at slot 63039638. Progress: 41.73%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block 73fcb92346714585e1dbb484b1678bb15dab7304a8071cd95ec85195ca7a46be at slot 63039655. Progress: 41.75%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] before next, messages elided = 63039729\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block a7256fa99f7bf50d0e764cb80122222b1d2b80ffef4bee30e42c0bb80c5f1168 at slot 63049716. Progress: 55.64%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block 75e2064629d6a017bfe324a3d31723ed7bfa017eceda1549bd6c9f4d63653394 at slot 63049861. Progress: 55.84%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.94 UTC] Pushing ledger state for block 71aeaae8f83ee6b94a7feb521c16f0d889a9b95be6da85d540ac0435b412fb2c at slot 63049904. Progress: 55.90%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] before next, messages elided = 63049909\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block 15ad241c6908d0748cb80d17035d4001f7f86ee22fe71197cbe9bc7489d8e71b at slot 63059862. Progress: 69.65%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block a5e38b0875d44e10a3cba9c420ad4c9708e913e3458f1003a8236a831762069a at slot 63059915. Progress: 69.73%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block ca6dc89bd705476bcd056d6ffc3dd43499e51d0e5ecfe56a439fadacac50fc1b at slot 63059939. Progress: 69.76%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] before next, messages elided = 63059957\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 3c8593b6859b02abaa7f3b69d2114b1f402c65eef6904020e5ed37356aea4461 at slot 63069941. Progress: 83.57%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 50a06570febcf89ee00c386979d3a616561996b6c5cf6cbff44c20aa8454c375 at slot 63069971. Progress: 83.61%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 6265f3c30f149ba0a797a1d2c6998b918f089e7455ab665e3369456105901a5a at slot 63069972. Progress: 83.62%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] before next, messages elided = 63069985\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 0be786a1d9272083e9e184da3bc3bfcb71b82ad10fbf52f4959dc5dc6d1b7b3c at slot 63079898. Progress: 97.32%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 2862bd67a50bf9f6f31ab11d9153663d3e657f88c24ba8e71174f8f5216c2a99 at slot 63079992. Progress: 97.45%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block cc9036c6c4076ca28ac5d03522001c233a9202cb5b1d9484c3e406fbb3406fd5 at slot 63079994. Progress: 97.45%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] before next, messages elided = 63080024\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Pushing ledger state for block c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837. Progress: 100.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Valid candidate at tip 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Initial chain selected\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Opened db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and tip c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837\n[c995d1df:cardano.node.shutdown:Warning:5] [2022-07-10 13:53:39.87 UTC] Will terminate upon reaching NoShutdown\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] CreatingServerSocket 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ConfiguringServerSocket 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ListeningServerSocket 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ServerSocketUp 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] RunServer (0.0.0.0:3001 :| [])\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreateSystemdSocketForSnocketPath (LocalAddress "/ipc/node.socket")\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreatedLocalSocket (LocalAddress "/ipc/node.socket")\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ConfiguringLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ListeningLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] LocalSocketUp (LocalAddress "/ipc/node.socket") (FileDescriptor 26)\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] RunLocalServer (LocalAddress "/ipc/node.socket")\n[c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d014:e00:a200:0:1:0:1]:3001\n[c995d1df:cardano.node.DnsSubscription:Notice:358] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 3.131.32.242:3001\n[c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d01c:321:2101:0:1:0:2]:3001\n[c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 13.41.9.54:3001\n[c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.95 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt End, destination 13.41.9.54:3001 outcome: ConnectSuccessLast\n[c995d1df:cardano.node.ErrorPolicy:Notice:343] [2022-07-10 13:53:39.95 UTC] IP 3.131.32.242:3001 ErrorPolicySuspendConsumer (Just (ConnectionExceptionTrace (SubscriberError {seType = SubscriberParallelConnectionCancelled, seMessage = "Parallel connection cancelled", seStack = []}))) 1s\n')),(0,o.kt)("p",null,"Then the Cardano node will synchronize with the other nodes of the network and start adding blockss"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:53:40.06 UTC] Chain extended, new tip: 7ae33b2f4bc8b84e77dfd539f0f6e7f59b293e96f62fdcfdb17cbd7a006fe5c0 at slot 63081906\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:08.30 UTC] Chain extended, new tip: 6b4ccd2bec5e3862b23ea0f7c2f342a3659cecdcfdaf04551179df3839be6213 at slot 63092090\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:21.36 UTC] Chain extended, new tip: 6e95eb82da5a38544e6ef430a2733f6014c3c10527003b9d3bdc534f6a2ce81f at slot 63092103\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:39.04 UTC] Chain extended, new tip: a662672ec4b988022e135cb0b7e440f5fbffe8e205771d13a566a418f7021ba7 at slot 63092121\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:45.18 UTC] Chain extended, new tip: 2a0f2e6f218a08f4e0bc4668285d8e792fd7ec62f05880bd5b2d23d6bce20dfb at slot 63092127\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:18.05 UTC] Chain extended, new tip: ab9ef8af92ec062ec59a10da588e238ba8840705c095ebd5cd5da7ab9ea9c8e1 at slot 63092160\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:45.15 UTC] Chain extended, new tip: e59bcbf34172eb6a934e2580f6b20ebe1ea32fba7420feec096744fab8ffce76 at slot 63092189\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:57:59.06 UTC] Chain extended, new tip: ea0e76fe069a0bcb831cf6b342530adf2a28de4922a752cff734fe81a1842dff at slot 63092263\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:02.27 UTC] Chain extended, new tip: 1b68a85a10dd7bd840a69ece2807fbca61a1de07c30080bf94fbbfd1de8d1446 at slot 63092266\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:28.21 UTC] Chain extended, new tip: 07e1252c5614b9bb6e6cff95066c134eb251aea6bef33dc34c0dd064934f2cea at slot 63092292\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:33.17 UTC] Chain extended, new tip: 0d3712fd7852b0aff00d660f4e7dc609808018dc271fe460bb9ff8270dd50d8f at slot 63092297\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:48.53 UTC] Chain extended, new tip: c8bb96ea392e41dce6fc157e164dbe19ba894d268f69985e20a2d65daeb4488c at slot 63092312\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:58.08 UTC] Chain extended, new tip: 35ea30e175abaae7983db9f65e7a00ba45312ecb151e53a651b3a6058add4c4f at slot 63092322\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:02.13 UTC] Chain extended, new tip: 5320de43ea30e46515f48263211212833474ea87ff046f36f0d83059fad6e9ff at slot 63092326\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:06.29 UTC] Chain extended, new tip: 58e9cb29bd771e0625689a0d591a7a8309f9e859ce4a3b70a9ab2e28173ce78b at slot 63092330\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:36.31 UTC] Chain extended, new tip: 1af2411f492e1895231cc910bdb1a68a45596157bcbfae5bdfd5c5ed81b03054 at slot 63092360\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:04.51 UTC] Chain extended, new tip: 270d47c5a277ef7efe028b6eb4764ab328db8e509ad962370bb383b1832bb260 at slot 63092388\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:29.52 UTC] Chain extended, new tip: 6fbe009ac36363cbebc607c733964878dfce6054c8785d1294f202acb475c861 at slot 63092413\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:01:12.63 UTC] Chain extended, new tip: f764596ece0b75d5d0054f22f3f0a0846f1647ff980d053015065099ec279839 at slot 63092456\n")))}h.isMDXComponent=!0},5892:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>s,toc:()=>p});var a=n(87462),o=(n(67294),n(3905)),r=n(74866),i=n(85162);const d={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},l=void 0,s={unversionedId:"networks-matrix",id:"version-maintained/networks-matrix",title:"networks-matrix",description:"Here is an up to date list of all the Mithril Networks, their configurations and their status:",source:"@site/versioned_docs/version-maintained/networks-matrix.md",sourceDirName:".",slug:"/networks-matrix",permalink:"/doc/networks-matrix",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/networks-matrix.md",tags:[],version:"maintained",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},c={},p=[{value:"pre-release-preview",id:"pre-release-preview",level:2},{value:"testing-preview",id:"testing-preview",level:2},{value:"release-preprod",id:"release-preprod",level:2},{value:"release-mainnet",id:"release-mainnet",level:2}],f={toc:p},u="wrapper";function h(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Here is an up to date list of all the ",(0,o.kt)("strong",{parentName:"p"},"Mithril Networks"),", their configurations and their status:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Last update: 02/28/2023")),(0,o.kt)(r.Z,{mdxType:"Tabs"},(0,o.kt)(i.Z,{value:"preview",label:"Preview",default:!0,mdxType:"TabItem"},(0,o.kt)("h2",{id:"pre-release-preview"},(0,o.kt)("inlineCode",{parentName:"h2"},"pre-release-preview")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"pre-release-preview")," ",(0,o.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.pre-release-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"preview"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"Pre-Release \ud83d\udfe0")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://aggregator.pre-release-preview.api.mithril.network/aggregator")," ",(0,o.kt)("a",{parentName:"td",href:"https://aggregator.pre-release-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Latest Pre-Release")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases?q=pre-release"},"\u2197\ufe0f"))))),(0,o.kt)("br",null),(0,o.kt)("h2",{id:"testing-preview"},(0,o.kt)("inlineCode",{parentName:"h2"},"testing-preview")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f For devs only")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"testing-preview")," ",(0,o.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.testing-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"preview"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"Unstable \ud83d\udd34")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://aggregator.testing-preview.api.mithril.network/aggregator")," ",(0,o.kt)("a",{parentName:"td",href:"https://aggregator.testing-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Main Branch")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/tree/main"},"\u2197\ufe0f")))))),(0,o.kt)(i.Z,{value:"preprod",label:"Preprod",mdxType:"TabItem"},(0,o.kt)("h2",{id:"release-preprod"},(0,o.kt)("inlineCode",{parentName:"h2"},"release-preprod")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"release-preprod")," ",(0,o.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.release-preprod.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"preprod"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"1"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"Release \ud83d\udfe2")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://aggregator.release-preprod.api.mithril.network/aggregator")," ",(0,o.kt)("a",{parentName:"td",href:"https://aggregator.release-preprod.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Latest Release")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases/latest"},"\u2197\ufe0f")))))),(0,o.kt)(i.Z,{value:"mainnet",label:"Mainnet",mdxType:"TabItem"},(0,o.kt)("h2",{id:"release-mainnet"},(0,o.kt)("inlineCode",{parentName:"h2"},"release-mainnet")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"release-mainnet"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"mainnet"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"-"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"No \u274c")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},"-")))))),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"In this documentation, we use the generic:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_CARDANO_NETWORK**")," identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"preprod"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_AGGREGATOR_ENDPOINT**")," identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://aggregator.release-preprod.api.mithril.network/aggregator"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_GENESIS_VERIFICATION_KEY**")," identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADAPTER_TYPE**")," identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"cardano-chain"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADDRESS**")," identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_VERIFICATION_KEY**")," identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey"),")"))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/doc/assets/js/f893c5dd.c4be936b.js b/doc/assets/js/f893c5dd.c4be936b.js deleted file mode 100644 index de20f0381d..0000000000 --- a/doc/assets/js/f893c5dd.c4be936b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[1747,5569,5458],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),s=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(l.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,c=d(e,["components","mdxType","originalType","parentName"]),p=s(n),u=o,h=p["".concat(l,".").concat(u)]||p[u]||f[u]||r;return n?a.createElement(h,i(i({ref:t},c),{},{components:n})):a.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=u;var d={};for(var l in t)hasOwnProperty.call(t,l)&&(d[l]=t[l]);d.originalType=e,d[p]="string"==typeof e?e:o,i[1]=d;for(var s=2;s{n.d(t,{Z:()=>i});var a=n(67294),o=n(86010);const r={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,o.Z)(r.tabItem,i),hidden:n},t)}},74866:(e,t,n)=>{n.d(t,{Z:()=>T});var a=n(87462),o=n(67294),r=n(86010),i=n(12466),d=n(16550),l=n(91980),s=n(67392),c=n(50012);function p(e){return function(e){return o.Children.map(e,(e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:o}}=e;return{value:t,label:n,attributes:a,default:o}}))}function f(e){const{values:t,children:n}=e;return(0,o.useMemo)((()=>{const e=t??p(n);return function(e){const t=(0,s.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,d.k6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(r),(0,o.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,r=f(e),[i,d]=(0,o.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:r}))),[l,s]=h({queryString:n,groupId:a}),[p,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,c.Nk)(n);return[a,(0,o.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:a}),g=(()=>{const e=l??p;return u({value:e,tabValues:r})?e:null})();(0,o.useLayoutEffect)((()=>{g&&d(g)}),[g]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!u({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);d(e),s(e),m(e)}),[s,m,r]),tabValues:r}}var g=n(72389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function k(e){let{className:t,block:n,selectedValue:d,selectValue:l,tabValues:s}=e;const c=[],{blockElementScrollPositionUntilNextRender:p}=(0,i.o5)(),f=e=>{const t=e.currentTarget,n=c.indexOf(t),a=s[n].value;a!==d&&(p(t),l(a))},u=e=>{let t=null;switch(e.key){case"Enter":f(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;t=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;t=c[n]??c[c.length-1];break}}t?.focus()};return o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":n},t)},s.map((e=>{let{value:t,label:n,attributes:i}=e;return o.createElement("li",(0,a.Z)({role:"tab",tabIndex:d===t?0:-1,"aria-selected":d===t,key:t,ref:e=>c.push(e),onKeyDown:u,onClick:f},i,{className:(0,r.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":d===t})}),n??t)})))}function N(e){let{lazy:t,children:n,selectedValue:a}=e;const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=r.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return o.createElement("div",{className:"margin-top--md"},r.map(((e,t)=>(0,o.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function C(e){const t=m(e);return o.createElement("div",{className:(0,r.Z)("tabs-container",b.tabList)},o.createElement(k,(0,a.Z)({},e,t)),o.createElement(N,(0,a.Z)({},e,t)))}function T(e){const t=(0,g.Z)();return o.createElement(C,(0,a.Z)({key:String(t)},e))}},57977:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>f,frontMatter:()=>r,metadata:()=>d,toc:()=>s});var a=n(87462),o=(n(67294),n(3905));const r={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},i=void 0,d={unversionedId:"compiled-binaries",id:"version-maintained/compiled-binaries",title:"compiled-binaries",description:"Download compiled binary",source:"@site/versioned_docs/version-maintained/compiled-binaries.md",sourceDirName:".",slug:"/compiled-binaries",permalink:"/doc/compiled-binaries",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/compiled-binaries.md",tags:[],version:"maintained",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},l={},s=[{value:"Download compiled binary",id:"download-compiled-binary",level:2}],c={toc:s},p="wrapper";function f(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"download-compiled-binary"},"Download compiled binary"),(0,o.kt)("p",null,"Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package."),(0,o.kt)("p",null,"You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting."),(0,o.kt)("p",null,"These links are available in the ",(0,o.kt)("strong",{parentName:"p"},"Build From")," column of the above ",(0,o.kt)("strong",{parentName:"p"},"Mithril Networks")," table."))}f.isMDXComponent=!0},60287:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>s,toc:()=>p});var a=n(87462),o=(n(67294),n(3905)),r=n(5892),i=n(57977);const d={sidebar_position:1},l="Bootstrap a Cardano Node",s={unversionedId:"manual/getting-started/bootstrap-cardano-node",id:"version-maintained/manual/getting-started/bootstrap-cardano-node",title:"Bootstrap a Cardano Node",description:"Thanks to a Mithril Client connected to a Mithril Aggregator, you will restore a full Cardano node in less than 2 hours!",source:"@site/versioned_docs/version-maintained/manual/getting-started/bootstrap-cardano-node.md",sourceDirName:"manual/getting-started",slug:"/manual/getting-started/bootstrap-cardano-node",permalink:"/doc/manual/getting-started/bootstrap-cardano-node",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/getting-started/bootstrap-cardano-node.md",tags:[],version:"maintained",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docSideBar",previous:{title:"Getting Started",permalink:"/doc/category/getting-started"},next:{title:"Run a Mithril Signer node (SPO)",permalink:"/doc/manual/getting-started/run-signer-node"}},c={},p=[{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Download source",id:"download-source",level:2},{value:"Build Mithril Client binary",id:"build-mithril-client-binary",level:2},{value:"Verify binary",id:"verify-binary",level:2},{value:"Verify version",id:"verify-version",level:3},{value:"Verify build",id:"verify-build",level:3},{value:"Run Docker container",id:"run-docker-container",level:2},{value:"Bootstrap a Cardano node from a testnet Mithril snapshot",id:"bootstrap-a-cardano-node-from-a-testnet-mithril-snapshot",level:2},{value:"Step 1: Prepare some useful variables",id:"step-1-prepare-some-useful-variables",level:3},{value:"Step 2: Select A Snapshot",id:"step-2-select-a-snapshot",level:3},{value:"Step 3: Show Snapshot Details",id:"step-3-show-snapshot-details",level:3},{value:"Step 4: Download Selected Snapshot",id:"step-4-download-selected-snapshot",level:3},{value:"Step 5: Restore Selected Snapshot",id:"step-5-restore-selected-snapshot",level:3},{value:"Step 6: Launch a Cardano Node From Restored Snapshot",id:"step-6-launch-a-cardano-node-from-restored-snapshot",level:3}],f={toc:p},u="wrapper";function h(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"bootstrap-a-cardano-node"},"Bootstrap a Cardano Node"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Thanks to a ",(0,o.kt)("strong",{parentName:"p"},"Mithril Client")," connected to a ",(0,o.kt)("strong",{parentName:"p"},"Mithril Aggregator"),", you will restore a full Cardano node in less than 2 hours!")),(0,o.kt)("admonition",{title:"Mithril Networks",type:"note"},(0,o.kt)(r.default,{mdxType:"NetworksMatrix"})),(0,o.kt)("h1",{id:"video-demonstration"},"Video demonstration"),(0,o.kt)("p",null,"In this video you will see how fast the bootstrapping of a Cardano node with Mithril is compared to classical bootstrapping (benchmark done on mainnet with Daedalus wallet)."),(0,o.kt)("iframe",{style:{width:"100%",height:"480px"},src:"https://www.youtube.com/embed/5qjJNRgEzYo",title:"Daedalus Bootstrap Benchmark on mainnet with/without Mithril",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"true"}),(0,o.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install a ",(0,o.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"correctly configured")," Rust toolchain (latest stable version).")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run ",(0,o.kt)("inlineCode",{parentName:"p"},"sudo apt install libssl-dev"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Install other requirements"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get install make build-essential m4 docker jq\n")),(0,o.kt)("h2",{id:"download-source"},"Download source"),(0,o.kt)("p",null,"Download from GitHub (HTTPS)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/input-output-hk/mithril.git\n")),(0,o.kt)("p",null,"Or (SSH)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:input-output-hk/mithril.git\n")),(0,o.kt)("h2",{id:"build-mithril-client-binary"},"Build Mithril Client binary"),(0,o.kt)("p",null,"Switch to build branch / tag"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, \n# please refer to the **Build From** column of the above **Mithril Networks** table\ngit switch **YOUR_BUILD_BRANCH_OR_TAG**\n")),(0,o.kt)("p",null,"Change directory"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril/mithril-client\n")),(0,o.kt)("p",null,"Run tests (Optional)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"make test\n")),(0,o.kt)("p",null,"Build executable"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"make build\n")),(0,o.kt)("h2",{id:"verify-binary"},"Verify binary"),(0,o.kt)("h3",{id:"verify-version"},"Verify version"),(0,o.kt)("p",null,"Check that the Mithril Signer binary is running the correct version by running"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client -V\n")),(0,o.kt)("p",null,"You should see something like"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mithril-client 0.2.0\n")),(0,o.kt)("p",null,"\u26a0\ufe0f Verify that the version displayed is the version described in the content of the Release / Pre-Release note (see the ",(0,o.kt)("strong",{parentName:"p"},"Build From")," column of the above ",(0,o.kt)("strong",{parentName:"p"},"Mithril Networks")," table)"),(0,o.kt)("h3",{id:"verify-build"},"Verify build"),(0,o.kt)("p",null,"Check that the Mithril Client binary is working fine by running its help"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client -h\n")),(0,o.kt)("p",null,"You should see"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"This program downloads, checks and restores certified blockchain snapshots.\n\nUsage: mithril-client [OPTIONS] \n\nCommands:\n list List available snapshots\n show Show detailed informations about a snapshot\n download Download a snapshot\n restore Restore a snapshot\n help Print this message or the help of the given subcommand(s)\n\nOptions:\n --run-mode \n Run Mode [env: RUN_MODE=] [default: dev]\n -v, --verbose...\n Verbosity level (-v=warning, -vv=info, -vvv=debug)\n --config-directory \n Directory where configuration file is located [default: ./config]\n --aggregator-endpoint \n Override configuration Aggregator endpoint URL\n -h, --help\n Print help information\n -V, --version\n Print version information\n")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"You can use the ",(0,o.kt)("inlineCode",{parentName:"p"},"--json")," option in order to display results in ",(0,o.kt)("inlineCode",{parentName:"p"},"JSON")," format for the ",(0,o.kt)("inlineCode",{parentName:"p"},"list")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"show")," commands:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client list --json\n"))),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you want to dig deeper, you can get access to several level of logs from the Mithril Client:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-v")," for some logs (WARN)"),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-vv")," for more logs (INFO)"),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-vvv")," for even more logs (DEBUG)"),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"-vvvv")," for all logs (TRACE)"))),(0,o.kt)(i.default,{mdxType:"CompiledBinaries"}),(0,o.kt)("h2",{id:"run-docker-container"},"Run Docker container"),(0,o.kt)("p",null,"The list of available images on the registry is listed ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/mithril/pkgs/container/mithril-client"},"here")),(0,o.kt)("p",null,"Prepare an environment variable with the selected Docker image"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**\n")),(0,o.kt)("p",null,"Here is an example configuration for the ",(0,o.kt)("inlineCode",{parentName:"p"},"latest")," stable Docker image"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"export MITHRIL_IMAGE_ID=latest\n")),(0,o.kt)("p",null,"Then create a shell function for the Mithril Client:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"mithril_client () {\n docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@\n}\n")),(0,o.kt)("p",null,"Now you can use the ",(0,o.kt)("inlineCode",{parentName:"p"},"mithril_client")," function:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# 1- Help\nmithril_client help\n\n# 2- List snapshots\nmithril_client list\n")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"In the following part of the document, you will need to replace the ",(0,o.kt)("inlineCode",{parentName:"p"},"./mithril-client")," commands with ",(0,o.kt)("inlineCode",{parentName:"p"},"mithril_client")," in order to use the above shell function.")),(0,o.kt)("h2",{id:"bootstrap-a-cardano-node-from-a-testnet-mithril-snapshot"},"Bootstrap a Cardano node from a testnet Mithril snapshot"),(0,o.kt)("h3",{id:"step-1-prepare-some-useful-variables"},"Step 1: Prepare some useful variables"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# Cardano network\nexport NETWORK=**YOUR_CARDANO_NETWORK**\n\n# Aggregator API endpoint URL\nexport AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**\n\n# Genesis verification key\nexport GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)\n\n# Digest of the latest produced snapshot for convenience of the demo\n# You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2\nexport SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')\n")),(0,o.kt)("h3",{id:"step-2-select-a-snapshot"},"Step 2: Select A Snapshot"),(0,o.kt)("p",null,"List the available snapshots with which you can bootstrap a Cardano node"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client list\n")),(0,o.kt)("p",null,"You will see a list of snapshots"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| Network | Digest | Size | Locations | Created |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 | 5273560121 | 1 | 2022-07-10T11:19:18.042554390Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | 22267a8399cbd1731420f7241c91bec66b3126c971d53b1cdf4db0c016320df4 | 5267582819 | 1 | 2022-07-10T05:44:59.048360039Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | c14792945b3880fa9f8880348f885c707b8e4d13cdb035b9a735c15f88ea45db | 5265335799 | 1 | 2022-07-10T00:03:43.656860711Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | 0344faf7ebcd7cbf606288bfc8e7c11f992bd4f28f3ac159942b487a0217f485 | 5265577167 | 1 | 2022-07-09T18:31:16.604292173Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n| testnet | fc42ef98e233717a7180502dc51aab1ca64d5bd6d6e9d72b4096ac1f7e45a129 | 5262797245 | 1 | 2022-07-09T12:45:20.306735843Z |\n+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+\n")),(0,o.kt)("h3",{id:"step-3-show-snapshot-details"},"Step 3: Show Snapshot Details"),(0,o.kt)("p",null,"Get some more details from a specific snapshot (Optional)"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client show $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see more information about a snapshot"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Info | Value |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Network | testnet |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Digest | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Size | 5273560121 |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Location 1 | https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz |\n+------------+--------------------------------------------------------------------------------------------------------------------------------+\n| Created | 2022-07-10T11:19:18.042554390Z |\n")),(0,o.kt)("h3",{id:"step-4-download-selected-snapshot"},"Step 4: Download Selected Snapshot"),(0,o.kt)("p",null,"Download the selected snapshot from the remote location to your remote location"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client download $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the selected snapshot archive has been downloaded locally"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"Download success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 #1\nfrom https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz\nto /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/snapshot.archive.tar.gz\n")),(0,o.kt)("h3",{id:"step-5-restore-selected-snapshot"},"Step 5: Restore Selected Snapshot"),(0,o.kt)("p",null,"Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-client restore $SNAPSHOT_DIGEST\n")),(0,o.kt)("p",null,"You will see that the snapshot archive is unpacked and that the associated certificate is valid"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Unpacking snapshot...\nUnpack success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068\nto /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db\n\nRestore a Cardano Node with:\n\ndocker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="/home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db",target=/data/db/ -e NETWORK=testnet inputoutput/cardano-node\n')),(0,o.kt)("h3",{id:"step-6-launch-a-cardano-node-from-restored-snapshot"},"Step 6: Launch a Cardano Node From Restored Snapshot"),(0,o.kt)("p",null,"Launch an empty Cardano node and make it live in minutes!"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="$(pwd)/data/testnet/$SNAPSHOT_DIGEST/db",target=/data/db/ -e NETWORK=**YOUR_CARDANO_NETWORK** inputoutput/cardano-node\n')),(0,o.kt)("p",null,"You will see the node start by validating the files injested from the snapshot archive"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Starting: /nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run\n--config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json\n--database-path /data/db\n--topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml\n--host-addr 0.0.0.0\n--port 3001\n--socket-path /ipc/node.socket\n\n\n\n\n\n+RTS\n-N2\n-I0\n-A16m\n-qg\n-qb\n--disable-delayed-os-memory-return\n-RTS\n..or, once again, in a single line:\n/nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run --config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json --database-path /data/db --topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml --host-addr 0.0.0.0 --port 3001 --socket-path /ipc/node.socket +RTS -N2 -I0 -A16m -qg -qb --disable-delayed-os-memory-return -RTS\nNode configuration: NodeConfiguration {ncSocketConfig = SocketConfig {ncNodeIPv4Addr = Last {getLast = Just 0.0.0.0}, ncNodeIPv6Addr = Last {getLast = Nothing}, ncNodePortNumber = Last {getLast = Just 3001}, ncSocketPath = Last {getLast = Just "/ipc/node.socket"}}, ncConfigFile = "/nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json", ncTopologyFile = "/nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml", ncDatabaseFile = "/data/db", ncProtocolFiles = ProtocolFilepaths {byronCertFile = Nothing, byronKeyFile = Nothing, shelleyKESFile = Nothing, shelleyVRFFile = Nothing, shelleyCertFile = Nothing, shelleyBulkCredsFile = Nothing}, ncValidateDB = False, ncShutdownConfig = ShutdownConfig {scIPC = Nothing, scOnSyncLimit = Just NoShutdown}, ncProtocolConfig = NodeProtocolConfigurationCardano (NodeByronProtocolConfiguration {npcByronGenesisFile = "/nix/store/kax0css4lx3ywihvsgrqjym0jpi20f99-byron-genesis.json", npcByronGenesisFileHash = Just "96fceff972c2c06bd3bb5243c39215333be6d56aaf4823073dca31afe5038471", npcByronReqNetworkMagic = RequiresMagic, npcByronPbftSignatureThresh = Nothing, npcByronApplicationName = ApplicationName {unApplicationName = "cardano-sl"}, npcByronApplicationVersion = 0, npcByronSupportedProtocolVersionMajor = 3, npcByronSupportedProtocolVersionMinor = 0, npcByronSupportedProtocolVersionAlt = 0}) (NodeShelleyProtocolConfiguration {npcShelleyGenesisFile = "/nix/store/2xhy92909anynqsvx1b1x153cxwnfmzx-shelley-genesis.json", npcShelleyGenesisFileHash = Just "849a1764f152e1b09c89c0dfdbcbdd38d711d1fec2db5dfa0f87cf2737a0eaf4"}) (NodeAlonzoProtocolConfiguration {npcAlonzoGenesisFile = "/nix/store/8qnphq6yvcjspiy3z0aijfd6cv64l3hl-alonzo-genesis.json", npcAlonzoGenesisFileHash = Just "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874"}) (NodeHardForkProtocolConfiguration {npcTestEnableDevelopmentHardForkEras = False, npcTestShelleyHardForkAtEpoch = Nothing, npcTestShelleyHardForkAtVersion = Nothing, npcTestAllegraHardForkAtEpoch = Nothing, npcTestAllegraHardForkAtVersion = Nothing, npcTestMaryHardForkAtEpoch = Nothing, npcTestMaryHardForkAtVersion = Nothing, npcTestAlonzoHardForkAtEpoch = Nothing, npcTestAlonzoHardForkAtVersion = Nothing, npcTestBabbageHardForkAtEpoch = Nothing, npcTestBabbageHardForkAtVersion = Nothing}), ncDiffusionMode = InitiatorAndResponderDiffusionMode, ncSnapshotInterval = DefaultSnapshotInterval, ncTestEnableDevelopmentNetworkProtocols = False, ncMaxConcurrencyBulkSync = Nothing, ncMaxConcurrencyDeadline = Nothing, ncLoggingSwitch = True, ncLogMetrics = True, ncTraceConfig = TracingOnLegacy (TraceSelection {traceVerbosity = NormalVerbosity, traceAcceptPolicy = OnOff {isOn = True}, traceBlockFetchClient = OnOff {isOn = False}, traceBlockFetchDecisions = OnOff {isOn = False}, traceBlockFetchProtocol = OnOff {isOn = False}, traceBlockFetchProtocolSerialised = OnOff {isOn = False}, traceBlockFetchServer = OnOff {isOn = False}, traceBlockchainTime = OnOff {isOn = False}, traceChainDB = OnOff {isOn = True}, traceChainSyncBlockServer = OnOff {isOn = False}, traceChainSyncClient = OnOff {isOn = False}, traceChainSyncHeaderServer = OnOff {isOn = False}, traceChainSyncProtocol = OnOff {isOn = False}, traceConnectionManager = OnOff {isOn = True}, traceConnectionManagerCounters = OnOff {isOn = True}, traceConnectionManagerTransitions = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorTracer = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorResponderTracer = OnOff {isOn = False}, traceDiffusionInitialization = OnOff {isOn = True}, traceDnsResolver = OnOff {isOn = False}, traceDnsSubscription = OnOff {isOn = True}, traceErrorPolicy = OnOff {isOn = True}, traceForge = OnOff {isOn = True}, traceForgeStateInfo = OnOff {isOn = True}, traceHandshake = OnOff {isOn = False}, traceInboundGovernor = OnOff {isOn = True}, traceInboundGovernorCounters = OnOff {isOn = True}, traceInboundGovernorTransitions = OnOff {isOn = True}, traceIpSubscription = OnOff {isOn = True}, traceKeepAliveClient = OnOff {isOn = False}, traceLedgerPeers = OnOff {isOn = True}, traceLocalChainSyncProtocol = OnOff {isOn = False}, traceLocalConnectionManager = OnOff {isOn = False}, traceLocalErrorPolicy = OnOff {isOn = True}, traceLocalHandshake = OnOff {isOn = False}, traceLocalInboundGovernor = OnOff {isOn = False}, traceLocalMux = OnOff {isOn = False}, traceLocalRootPeers = OnOff {isOn = True}, traceLocalServer = OnOff {isOn = False}, traceLocalStateQueryProtocol = OnOff {isOn = False}, traceLocalTxMonitorProtocol = OnOff {isOn = False}, traceLocalTxSubmissionProtocol = OnOff {isOn = False}, traceLocalTxSubmissionServer = OnOff {isOn = False}, traceMempool = OnOff {isOn = True}, traceMux = OnOff {isOn = False}, tracePeerSelection = OnOff {isOn = True}, tracePeerSelectionCounters = OnOff {isOn = True}, tracePeerSelectionActions = OnOff {isOn = True}, tracePublicRootPeers = OnOff {isOn = True}, traceServer = OnOff {isOn = True}, traceTxInbound = OnOff {isOn = False}, traceTxOutbound = OnOff {isOn = False}, traceTxSubmissionProtocol = OnOff {isOn = False}, traceTxSubmission2Protocol = OnOff {isOn = False}}), ncTraceForwardSocket = Nothing, ncMaybeMempoolCapacityOverride = Nothing, ncProtocolIdleTimeout = 5s, ncTimeWaitTimeout = 60s, ncAcceptedConnectionsLimit = AcceptedConnectionsLimit {acceptedConnectionsHardLimit = 512, acceptedConnectionsSoftLimit = 384, acceptedConnectionsDelay = 5s}, ncTargetNumberOfRootPeers = 100, ncTargetNumberOfKnownPeers = 100, ncTargetNumberOfEstablishedPeers = 50, ncTargetNumberOfActivePeers = 20, ncEnableP2P = DisabledP2PMode}\nListening on http://127.0.0.1:12798\n[c995d1df:cardano.node.basicInfo.protocol:Notice:5] [2022-07-10 13:48:51.68 UTC] Byron; Shelley\n[c995d1df:cardano.node.basicInfo.version:Notice:5] [2022-07-10 13:48:51.68 UTC] 1.35.1\n[c995d1df:cardano.node.basicInfo.commit:Notice:5] [2022-07-10 13:48:51.68 UTC] 0000000000000000000000000000000000000000\n[c995d1df:cardano.node.basicInfo.nodeStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2022-07-10 13:48:51.685957811 UTC\n[c995d1df:cardano.node.basicInfo.systemStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2019-07-24 20:20:16 UTC\n[c995d1df:cardano.node.basicInfo.slotLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 20s\n[c995d1df:cardano.node.basicInfo.epochLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 21600\n[c995d1df:cardano.node.basicInfo.slotLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.basicInfo.slotLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s\n[c995d1df:cardano.node.basicInfo.epochLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000\n[c995d1df:cardano.node.basicInfo.slotsPerKESPeriodBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Config path /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json, Network magic NetworkMagic {unNetworkMagic = 1097911063}, Protocol "Byron; Shelley", Version "1.35.1", Commit "0000000000000000000000000000000000000000", Node start time 2022-07-10 13:48:51.694962147 UTC\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Byron, Slot length 20s, Epoch length 21600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Shelley, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Allegra, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Mary, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Alonzo, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Babbage, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] startup time: 1657460932\n[c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.70 UTC] \nnode addresses: 0.0.0.0:3001\nlocal socket: /ipc/node.socket\nnode-to-node versions:\nNodeToNodeV_7 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)\nNodeToNodeV_8 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)\nNodeToNodeV_9 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* Nil)\nnode-to-client versions:\nNodeToClientV_9 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_10 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_11 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_12 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)\nNodeToClientV_13 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* Nil)\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Chain DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Immutable DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.79 UTC] Validating chunk no. 0 out of 2917. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validated chunk no. 0 out of 2917. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validating chunk no. 1 out of 2917. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validated chunk no. 1 out of 2917. Progress: 0.03%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validating chunk no. 2 out of 2917. Progress: 0.03%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validated chunk no. 2 out of 2917. Progress: 0.07%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validating chunk no. 3 out of 2917. Progress: 0.07%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validated chunk no. 3 out of 2917. Progress: 0.10%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validating chunk no. 4 out of 2917. Progress: 0.10%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validated chunk no. 4 out of 2917. Progress: 0.14%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validating chunk no. 5 out of 2917. Progress: 0.14%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:54.14 UTC] Validated chunk no. 5 out of 2917. \n\n... (Cut for readability)\n\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validated chunk no. 2911 out of 2917. Progress: 99.79%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validating chunk no. 2912 out of 2917. Progress: 99.79%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validated chunk no. 2912 out of 2917. Progress: 99.83%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validating chunk no. 2913 out of 2917. Progress: 99.83%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validated chunk no. 2913 out of 2917. Progress: 99.86%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validating chunk no. 2914 out of 2917. Progress: 99.86%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validated chunk no. 2914 out of 2917. Progress: 99.90%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validating chunk no. 2915 out of 2917. Progress: 99.90%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validated chunk no. 2915 out of 2917. Progress: 99.93%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validating chunk no. 2916 out of 2917. Progress: 99.93%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validated chunk no. 2916 out of 2917. Progress: 99.97%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validating chunk no. 2917 out of 2917. Progress: 99.97%\n[c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the secondary index for the chunk file with number 2917.\n[c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the primary index for the chunk file with number 2917.\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Found a valid last location at chunk 2917 with tip 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432@63009237.\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Opened imm db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and chunk 2917\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Started opening Volatile DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Opened vol db\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Started opening Ledger DB\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replaying ledger from snapshot at 16ce3e707388b8c033f87b440ac89095b2d2fc5fa2b42f768c38da286312a31a at slot 63005524\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replayed block: slot 63005533 out of 63009237. Progress: 0.24%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.20 UTC] Replayed block: slot 63007165 out of 63009237. Progress: 44.20%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Opened lgr db\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Started initial chain selection\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.45 UTC] Pushing ledger state for block 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421. Progress: 0.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] before next, messages elided = 63009476\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 5e59df354b64634bd27fc1b3ed08991c6de909ea085625da2ca78ec5a6a3e37c at slot 63019450. Progress: 13.85%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block e0610e4f03ef640ead31a729f6f18aa820f3906f6414b179d3c553f0011162ef at slot 63019479. Progress: 13.89%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 8edc84f1f289475ca5c2afd9cae3c704ed7bcdf3e489fd1842e3904bd2d6d8c5 at slot 63019510. Progress: 13.93%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] before next, messages elided = 63019575\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block fc426a1c3a8c5ae61100e5ccfcaa47ccfb6cc144ed17fcd47a2b55f48890790a at slot 63029515. Progress: 27.75%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 68059200505d3ec65d3ddce9441efb0607adab002066c00acc050f5bb0c53deb at slot 63029578. Progress: 27.84%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 25f5cc004ad90dc554e085699f1386dc8f69cec4012a7b35735b83da6fa68a0b at slot 63029602. Progress: 27.87%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] before next, messages elided = 63029636\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block cfb3dd669fd1a85aaf005ddd0e4a8b90cbb7b2c66dc8ff6f41e2e7aa2a0f0c57 at slot 63039634. Progress: 41.72%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block d7f057436e749e4468cfd8b17a04d447c4ce628b8dc33ea7ebdc4d3ad4659dec at slot 63039638. Progress: 41.73%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block 73fcb92346714585e1dbb484b1678bb15dab7304a8071cd95ec85195ca7a46be at slot 63039655. Progress: 41.75%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] before next, messages elided = 63039729\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block a7256fa99f7bf50d0e764cb80122222b1d2b80ffef4bee30e42c0bb80c5f1168 at slot 63049716. Progress: 55.64%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block 75e2064629d6a017bfe324a3d31723ed7bfa017eceda1549bd6c9f4d63653394 at slot 63049861. Progress: 55.84%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.94 UTC] Pushing ledger state for block 71aeaae8f83ee6b94a7feb521c16f0d889a9b95be6da85d540ac0435b412fb2c at slot 63049904. Progress: 55.90%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] before next, messages elided = 63049909\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block 15ad241c6908d0748cb80d17035d4001f7f86ee22fe71197cbe9bc7489d8e71b at slot 63059862. Progress: 69.65%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block a5e38b0875d44e10a3cba9c420ad4c9708e913e3458f1003a8236a831762069a at slot 63059915. Progress: 69.73%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block ca6dc89bd705476bcd056d6ffc3dd43499e51d0e5ecfe56a439fadacac50fc1b at slot 63059939. Progress: 69.76%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] before next, messages elided = 63059957\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 3c8593b6859b02abaa7f3b69d2114b1f402c65eef6904020e5ed37356aea4461 at slot 63069941. Progress: 83.57%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 50a06570febcf89ee00c386979d3a616561996b6c5cf6cbff44c20aa8454c375 at slot 63069971. Progress: 83.61%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 6265f3c30f149ba0a797a1d2c6998b918f089e7455ab665e3369456105901a5a at slot 63069972. Progress: 83.62%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] before next, messages elided = 63069985\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 0be786a1d9272083e9e184da3bc3bfcb71b82ad10fbf52f4959dc5dc6d1b7b3c at slot 63079898. Progress: 97.32%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 2862bd67a50bf9f6f31ab11d9153663d3e657f88c24ba8e71174f8f5216c2a99 at slot 63079992. Progress: 97.45%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block cc9036c6c4076ca28ac5d03522001c233a9202cb5b1d9484c3e406fbb3406fd5 at slot 63079994. Progress: 97.45%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] before next, messages elided = 63080024\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Pushing ledger state for block c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837. Progress: 100.00%\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Valid candidate at tip 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Initial chain selected\n[c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Opened db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and tip c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837\n[c995d1df:cardano.node.shutdown:Warning:5] [2022-07-10 13:53:39.87 UTC] Will terminate upon reaching NoShutdown\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] CreatingServerSocket 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ConfiguringServerSocket 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ListeningServerSocket 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ServerSocketUp 0.0.0.0:3001\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] RunServer (0.0.0.0:3001 :| [])\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreateSystemdSocketForSnocketPath (LocalAddress "/ipc/node.socket")\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreatedLocalSocket (LocalAddress "/ipc/node.socket")\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ConfiguringLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ListeningLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] LocalSocketUp (LocalAddress "/ipc/node.socket") (FileDescriptor 26)\n[c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] RunLocalServer (LocalAddress "/ipc/node.socket")\n[c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d014:e00:a200:0:1:0:1]:3001\n[c995d1df:cardano.node.DnsSubscription:Notice:358] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 3.131.32.242:3001\n[c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d01c:321:2101:0:1:0:2]:3001\n[c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 13.41.9.54:3001\n[c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.95 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt End, destination 13.41.9.54:3001 outcome: ConnectSuccessLast\n[c995d1df:cardano.node.ErrorPolicy:Notice:343] [2022-07-10 13:53:39.95 UTC] IP 3.131.32.242:3001 ErrorPolicySuspendConsumer (Just (ConnectionExceptionTrace (SubscriberError {seType = SubscriberParallelConnectionCancelled, seMessage = "Parallel connection cancelled", seStack = []}))) 1s\n')),(0,o.kt)("p",null,"Then the Cardano node will synchronize with the other nodes of the network and start adding blockss"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:53:40.06 UTC] Chain extended, new tip: 7ae33b2f4bc8b84e77dfd539f0f6e7f59b293e96f62fdcfdb17cbd7a006fe5c0 at slot 63081906\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:08.30 UTC] Chain extended, new tip: 6b4ccd2bec5e3862b23ea0f7c2f342a3659cecdcfdaf04551179df3839be6213 at slot 63092090\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:21.36 UTC] Chain extended, new tip: 6e95eb82da5a38544e6ef430a2733f6014c3c10527003b9d3bdc534f6a2ce81f at slot 63092103\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:39.04 UTC] Chain extended, new tip: a662672ec4b988022e135cb0b7e440f5fbffe8e205771d13a566a418f7021ba7 at slot 63092121\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:45.18 UTC] Chain extended, new tip: 2a0f2e6f218a08f4e0bc4668285d8e792fd7ec62f05880bd5b2d23d6bce20dfb at slot 63092127\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:18.05 UTC] Chain extended, new tip: ab9ef8af92ec062ec59a10da588e238ba8840705c095ebd5cd5da7ab9ea9c8e1 at slot 63092160\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:45.15 UTC] Chain extended, new tip: e59bcbf34172eb6a934e2580f6b20ebe1ea32fba7420feec096744fab8ffce76 at slot 63092189\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:57:59.06 UTC] Chain extended, new tip: ea0e76fe069a0bcb831cf6b342530adf2a28de4922a752cff734fe81a1842dff at slot 63092263\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:02.27 UTC] Chain extended, new tip: 1b68a85a10dd7bd840a69ece2807fbca61a1de07c30080bf94fbbfd1de8d1446 at slot 63092266\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:28.21 UTC] Chain extended, new tip: 07e1252c5614b9bb6e6cff95066c134eb251aea6bef33dc34c0dd064934f2cea at slot 63092292\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:33.17 UTC] Chain extended, new tip: 0d3712fd7852b0aff00d660f4e7dc609808018dc271fe460bb9ff8270dd50d8f at slot 63092297\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:48.53 UTC] Chain extended, new tip: c8bb96ea392e41dce6fc157e164dbe19ba894d268f69985e20a2d65daeb4488c at slot 63092312\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:58.08 UTC] Chain extended, new tip: 35ea30e175abaae7983db9f65e7a00ba45312ecb151e53a651b3a6058add4c4f at slot 63092322\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:02.13 UTC] Chain extended, new tip: 5320de43ea30e46515f48263211212833474ea87ff046f36f0d83059fad6e9ff at slot 63092326\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:06.29 UTC] Chain extended, new tip: 58e9cb29bd771e0625689a0d591a7a8309f9e859ce4a3b70a9ab2e28173ce78b at slot 63092330\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:36.31 UTC] Chain extended, new tip: 1af2411f492e1895231cc910bdb1a68a45596157bcbfae5bdfd5c5ed81b03054 at slot 63092360\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:04.51 UTC] Chain extended, new tip: 270d47c5a277ef7efe028b6eb4764ab328db8e509ad962370bb383b1832bb260 at slot 63092388\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:29.52 UTC] Chain extended, new tip: 6fbe009ac36363cbebc607c733964878dfce6054c8785d1294f202acb475c861 at slot 63092413\n[c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:01:12.63 UTC] Chain extended, new tip: f764596ece0b75d5d0054f22f3f0a0846f1647ff980d053015065099ec279839 at slot 63092456\n")))}h.isMDXComponent=!0},5892:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>s,toc:()=>p});var a=n(87462),o=(n(67294),n(3905)),r=n(74866),i=n(85162);const d={unlisted:!0,hide_title:!0,hide_table_of_contents:!0},l=void 0,s={unversionedId:"networks-matrix",id:"version-maintained/networks-matrix",title:"networks-matrix",description:"Here is an up to date list of all the Mithril Networks, their configurations and their status:",source:"@site/versioned_docs/version-maintained/networks-matrix.md",sourceDirName:".",slug:"/networks-matrix",permalink:"/doc/networks-matrix",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/networks-matrix.md",tags:[],version:"maintained",frontMatter:{unlisted:!0,hide_title:!0,hide_table_of_contents:!0}},c={},p=[{value:"pre-release-preview",id:"pre-release-preview",level:2},{value:"testing-preview",id:"testing-preview",level:2},{value:"release-preprod",id:"release-preprod",level:2},{value:"release-mainnet",id:"release-mainnet",level:2}],f={toc:p},u="wrapper";function h(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Here is an up to date list of all the ",(0,o.kt)("strong",{parentName:"p"},"Mithril Networks"),", their configurations and their status:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Last update: 02/28/2023")),(0,o.kt)(r.Z,{mdxType:"Tabs"},(0,o.kt)(i.Z,{value:"preview",label:"Preview",default:!0,mdxType:"TabItem"},(0,o.kt)("h2",{id:"pre-release-preview"},(0,o.kt)("inlineCode",{parentName:"h2"},"pre-release-preview")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"pre-release-preview")," ",(0,o.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.pre-release-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"preview"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"Pre-Release \ud83d\udfe0")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://aggregator.pre-release-preview.api.mithril.network/aggregator")," ",(0,o.kt)("a",{parentName:"td",href:"https://aggregator.pre-release-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Latest Pre-Release")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases?q=pre-release"},"\u2197\ufe0f"))))),(0,o.kt)("br",null),(0,o.kt)("h2",{id:"testing-preview"},(0,o.kt)("inlineCode",{parentName:"h2"},"testing-preview")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f For devs only")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"testing-preview")," ",(0,o.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.testing-preview.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"preview"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"2"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"Unstable \ud83d\udd34")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://aggregator.testing-preview.api.mithril.network/aggregator")," ",(0,o.kt)("a",{parentName:"td",href:"https://aggregator.testing-preview.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Main Branch")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/tree/main"},"\u2197\ufe0f")))))),(0,o.kt)(i.Z,{value:"preprod",label:"Preprod",mdxType:"TabItem"},(0,o.kt)("h2",{id:"release-preprod"},(0,o.kt)("inlineCode",{parentName:"h2"},"release-preprod")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"release-preprod")," ",(0,o.kt)("a",{parentName:"td",href:"https://mithril.network/explorer?aggregator=https%3A%2F%2Faggregator.release-preprod.api.mithril.network%2Faggregator"},"\ud83d\udd0e"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"preprod"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"1"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"Yes \u2714\ufe0f")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"Release \ud83d\udfe2")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://aggregator.release-preprod.api.mithril.network/aggregator")," ",(0,o.kt)("a",{parentName:"td",href:"https://aggregator.release-preprod.api.mithril.network/aggregator"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"cardano-chain"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.addr"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey")," ",(0,o.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/era.vkey"},"\u2197\ufe0f"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Latest Release")," ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/input-output-hk/mithril/releases/latest"},"\u2197\ufe0f")))))),(0,o.kt)(i.Z,{value:"mainnet",label:"Mainnet",mdxType:"TabItem"},(0,o.kt)("h2",{id:"release-mainnet"},(0,o.kt)("inlineCode",{parentName:"h2"},"release-mainnet")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Information"),(0,o.kt)("th",{parentName:"tr",align:null},"-"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Mithril Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"release-mainnet"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Network")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"mainnet"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Cardano Magic Id")),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"-"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Supported")),(0,o.kt)("td",{parentName:"tr",align:null},"No \u274c")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Status")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Aggregator Endpoint")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Genesis Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Adapter Type")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Address")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Era Reader Verification Key")),(0,o.kt)("td",{parentName:"tr",align:null},"-")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("strong",{parentName:"td"},"Build From")),(0,o.kt)("td",{parentName:"tr",align:null},"-")))))),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"In this documentation, we use the generic:"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_CARDANO_NETWORK**")," identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"preprod"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_AGGREGATOR_ENDPOINT**")," identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://aggregator.release-preprod.api.mithril.network/aggregator"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_GENESIS_VERIFICATION_KEY**")," identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADAPTER_TYPE**")," identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"cardano-chain"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADDRESS**")," identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr"),")"),(0,o.kt)("li",{parentName:"ul"},"*",(0,o.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_VERIFICATION_KEY**")," identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey"),")"))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/doc/assets/js/runtime~main.658ee5b6.js b/doc/assets/js/runtime~main.8d2dd959.js similarity index 95% rename from doc/assets/js/runtime~main.658ee5b6.js rename to doc/assets/js/runtime~main.8d2dd959.js index f5418826f5..04884e2e40 100644 --- a/doc/assets/js/runtime~main.658ee5b6.js +++ b/doc/assets/js/runtime~main.8d2dd959.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,c,d,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,d,f)=>{if(!c){var b=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[c,d,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(f,b),f},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({42:"1bcabeba",47:"01a74281",53:"935f2afb",86:"95ba6eac",301:"0dadd2c9",335:"1386e018",359:"7d451ae2",477:"0ab7ecaa",613:"5efc9d3d",649:"05a8eefa",721:"17636f9c",745:"a9095f31",784:"65298297",901:"d0bce024",904:"db6b77e4",1094:"e21cfb82",1182:"c88ce025",1186:"6240f8f6",1197:"b3431997",1331:"eb3cecd3",1397:"adf22360",1588:"15b83b43",1747:"f893c5dd",1761:"42958b8b",1971:"da6513d5",2005:"0325b8ee",2156:"4ef25f62",2307:"6759b17e",2319:"01fd0f6f",2360:"3bb20b2d",2367:"564f9324",2379:"a86de2e0",2414:"146c26a3",2512:"d07df43d",2513:"bdcc07f8",2535:"814f3328",2603:"7fdd55b0",2659:"346551de",2708:"5ee0e852",2852:"b1a5869c",2863:"e76695bb",3089:"a6aa9e1f",3148:"8bb94aa1",3232:"d24297d9",3272:"5c36a5d9",3354:"fdedcd38",3394:"90b73dd1",3440:"a50b183b",3511:"63969280",3608:"9e4087bc",3687:"eab6d850",3821:"da23917a",3828:"c638a06a",3900:"8f5d5d9c",3907:"855a8af1",3922:"3eb12003",3927:"6b7febc5",3945:"1ea8ad02",4005:"67742e99",4013:"01a85c17",4059:"3aecf4c2",4071:"4579318a",4163:"1d3fbc77",4164:"61f849e1",4195:"c4f5d8e4",4322:"c06a55aa",4354:"298e1cbf",4397:"25784c72",4528:"28c41bf0",4687:"646279b0",4700:"b677bce5",4779:"c296e3c5",4912:"3f7b75e6",5006:"846f6ecc",5038:"e7e087cc",5126:"d488fc75",5148:"c15e56d8",5155:"bb5ac14e",5243:"d40532d9",5378:"5bc9239c",5458:"a57cf0ed",5569:"5df169af",5857:"d4f8d7b5",5862:"d3208382",5956:"78f8c35d",5968:"efe9c66f",6013:"10cf2990",6031:"a57d4206",6103:"ccc49370",6130:"3191dacf",6223:"d8bc7b89",6320:"3aa955b1",6365:"499e2bbb",6369:"ab70c45a",6379:"96ff2227",6380:"c554d126",6430:"1dd8b324",6453:"1fa7c5f7",6462:"8a42e3ae",6775:"86ddd18e",6825:"b6aa46a7",6846:"319c539b",6880:"3a51032f",6930:"869a5281",6933:"dd1516db",6998:"57c790d7",7327:"97a0946c",7338:"3488a21a",7356:"e6547a13",7395:"4d078e38",7467:"2fd2680c",7485:"c7d749c3",7615:"2419ec42",7658:"3123e6ae",7686:"f922e42a",7695:"653f7965",7755:"dfcae2ca",7918:"17896441",8003:"c5a2bd80",8051:"77572f6b",8071:"73902fa9",8139:"012f7f96",8159:"bdc52102",8189:"b88313bc",8222:"ec1168c4",8239:"d73922bc",8300:"5c43fc45",8403:"9fedbc11",8587:"bef1cd89",8610:"6875c492",8612:"f0ad3fbb",8665:"f5641504",8834:"f9376de9",8858:"c952f4ae",8985:"59730d2f",9038:"74e3af8e",9356:"99b9aebb",9360:"db7533df",9387:"9494ffc1",9459:"b349a70d",9514:"1be78505",9518:"b48fcc4a",9531:"1fcf426f",9561:"88be3a8b",9574:"891aea0a",9697:"73fe69d8",9817:"14eb3368",9913:"209e6c7d",9937:"183a8603"}[e]||e)+"."+{42:"29f1cb79",47:"ae43aba8",53:"e0439c7d",86:"b9fdef24",301:"efc67afa",335:"8b69217e",359:"2f067e38",477:"a64f9e2a",613:"868703ef",649:"1354b8bf",721:"79235548",745:"7b7c3f31",784:"c23b728a",901:"b81fa86a",904:"c75fda12",1094:"03915fdc",1182:"d4256494",1186:"b461ba1c",1197:"024dbc16",1331:"01259d5e",1397:"ea49fd1b",1588:"f88b2dbf",1747:"c4be936b",1761:"1d36ba8c",1971:"627a1c50",2005:"9da14336",2156:"5619cf56",2307:"086dea05",2319:"139eacb3",2360:"8abc1612",2367:"0fd214d9",2379:"4166abe3",2414:"4932bdb5",2512:"db5b6394",2513:"66a5e771",2535:"511486ad",2603:"94fae475",2659:"4f9e9fa3",2708:"d896f8e6",2852:"00246b69",2863:"bc8d8f32",3089:"6e015b54",3148:"b4d60c46",3232:"3310681a",3272:"1bb78a3f",3354:"342f289a",3394:"8e4d407f",3440:"5833a2e2",3511:"6036368d",3608:"ab666526",3687:"233bece4",3821:"8cf96b3d",3828:"8f5ab191",3900:"46160834",3907:"b92bd08e",3922:"f9f472e3",3927:"d322cb75",3945:"58336a8f",4005:"174b766c",4013:"3047ae62",4059:"f6e0718d",4071:"1624a1b6",4163:"2523382b",4164:"29edd593",4195:"831d7c1e",4322:"1287eeb9",4354:"0a887d40",4397:"45db5e6c",4528:"43a95eec",4687:"ad356ca4",4700:"1bbdda8d",4779:"e0e146e3",4912:"45ab8639",4972:"64bad86f",5006:"b0e481b6",5038:"b5e317ff",5126:"8a642bd5",5148:"a35fbfd4",5155:"3e8809d9",5243:"1f0ca1bb",5378:"381ac5e3",5458:"59f87b00",5569:"2c6ae1d8",5679:"06117b9d",5857:"4b3cf04c",5862:"41dc994d",5956:"0031021f",5968:"449fe4f4",6013:"dc732e52",6031:"3c12278d",6048:"ec67f851",6103:"31ba776a",6130:"ea8c5d1f",6223:"cf41a4b5",6316:"1ea06809",6320:"6bf8798f",6365:"6f2717d3",6369:"f58b1428",6379:"f99e6da1",6380:"9bfaa316",6430:"9ff0c386",6453:"b72adf52",6462:"b49d9a47",6775:"120a9319",6825:"ef357055",6846:"b449f38d",6880:"5c14434e",6930:"76c41b1d",6933:"1ce93fc0",6998:"d284da4d",7327:"7a552ac6",7338:"d8737f1a",7356:"3b75560b",7395:"5a11b696",7467:"abe371f9",7485:"ece2f88a",7615:"8da5c073",7658:"f8386f1d",7686:"26ac6d6b",7695:"f5d56540",7724:"e1af7b56",7755:"be779d54",7824:"15f75901",7918:"72a879f5",8003:"7db97701",8051:"c7f684d0",8071:"b99a99c4",8139:"b251d58a",8159:"4f2af32a",8189:"4b17cc5f",8222:"43cfeb42",8239:"5939942d",8300:"8c01b9fa",8403:"ceb0ff6e",8587:"21f04352",8610:"d63cf4a1",8612:"88766538",8665:"b92c17e1",8834:"e29cd6ea",8858:"9ad2be58",8985:"0b2c9d90",9038:"e8dde44d",9356:"fa1e5805",9360:"15b698c5",9387:"bdde79ff",9459:"16300fdf",9487:"3ab2aba4",9514:"ab067560",9518:"084dce35",9531:"554f7433",9561:"2a0fba2a",9574:"d8e8529c",9697:"f9812bca",9817:"e8103636",9913:"993db7e3",9937:"4cb9eecd"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},f="mithril-doc:",r.l=(e,a,c,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(c))),a)return a(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/doc/",r.gca=function(e){return e={17896441:"7918",63969280:"3511",65298297:"784","1bcabeba":"42","01a74281":"47","935f2afb":"53","95ba6eac":"86","0dadd2c9":"301","1386e018":"335","7d451ae2":"359","0ab7ecaa":"477","5efc9d3d":"613","05a8eefa":"649","17636f9c":"721",a9095f31:"745",d0bce024:"901",db6b77e4:"904",e21cfb82:"1094",c88ce025:"1182","6240f8f6":"1186",b3431997:"1197",eb3cecd3:"1331",adf22360:"1397","15b83b43":"1588",f893c5dd:"1747","42958b8b":"1761",da6513d5:"1971","0325b8ee":"2005","4ef25f62":"2156","6759b17e":"2307","01fd0f6f":"2319","3bb20b2d":"2360","564f9324":"2367",a86de2e0:"2379","146c26a3":"2414",d07df43d:"2512",bdcc07f8:"2513","814f3328":"2535","7fdd55b0":"2603","346551de":"2659","5ee0e852":"2708",b1a5869c:"2852",e76695bb:"2863",a6aa9e1f:"3089","8bb94aa1":"3148",d24297d9:"3232","5c36a5d9":"3272",fdedcd38:"3354","90b73dd1":"3394",a50b183b:"3440","9e4087bc":"3608",eab6d850:"3687",da23917a:"3821",c638a06a:"3828","8f5d5d9c":"3900","855a8af1":"3907","3eb12003":"3922","6b7febc5":"3927","1ea8ad02":"3945","67742e99":"4005","01a85c17":"4013","3aecf4c2":"4059","4579318a":"4071","1d3fbc77":"4163","61f849e1":"4164",c4f5d8e4:"4195",c06a55aa:"4322","298e1cbf":"4354","25784c72":"4397","28c41bf0":"4528","646279b0":"4687",b677bce5:"4700",c296e3c5:"4779","3f7b75e6":"4912","846f6ecc":"5006",e7e087cc:"5038",d488fc75:"5126",c15e56d8:"5148",bb5ac14e:"5155",d40532d9:"5243","5bc9239c":"5378",a57cf0ed:"5458","5df169af":"5569",d4f8d7b5:"5857",d3208382:"5862","78f8c35d":"5956",efe9c66f:"5968","10cf2990":"6013",a57d4206:"6031",ccc49370:"6103","3191dacf":"6130",d8bc7b89:"6223","3aa955b1":"6320","499e2bbb":"6365",ab70c45a:"6369","96ff2227":"6379",c554d126:"6380","1dd8b324":"6430","1fa7c5f7":"6453","8a42e3ae":"6462","86ddd18e":"6775",b6aa46a7:"6825","319c539b":"6846","3a51032f":"6880","869a5281":"6930",dd1516db:"6933","57c790d7":"6998","97a0946c":"7327","3488a21a":"7338",e6547a13:"7356","4d078e38":"7395","2fd2680c":"7467",c7d749c3:"7485","2419ec42":"7615","3123e6ae":"7658",f922e42a:"7686","653f7965":"7695",dfcae2ca:"7755",c5a2bd80:"8003","77572f6b":"8051","73902fa9":"8071","012f7f96":"8139",bdc52102:"8159",b88313bc:"8189",ec1168c4:"8222",d73922bc:"8239","5c43fc45":"8300","9fedbc11":"8403",bef1cd89:"8587","6875c492":"8610",f0ad3fbb:"8612",f5641504:"8665",f9376de9:"8834",c952f4ae:"8858","59730d2f":"8985","74e3af8e":"9038","99b9aebb":"9356",db7533df:"9360","9494ffc1":"9387",b349a70d:"9459","1be78505":"9514",b48fcc4a:"9518","1fcf426f":"9531","88be3a8b":"9561","891aea0a":"9574","73fe69d8":"9697","14eb3368":"9817","209e6c7d":"9913","183a8603":"9937"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,c)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)c.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((c,f)=>d=e[a]=[c,f]));c.push(d[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var f=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var d,f,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(c);n{"use strict";var e,a,c,d,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,d,f)=>{if(!c){var b=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[c,d,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(f,b),f},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({42:"1bcabeba",47:"01a74281",53:"935f2afb",86:"95ba6eac",301:"0dadd2c9",335:"1386e018",359:"7d451ae2",477:"0ab7ecaa",613:"5efc9d3d",649:"05a8eefa",721:"17636f9c",745:"a9095f31",784:"65298297",901:"d0bce024",904:"db6b77e4",1094:"e21cfb82",1182:"c88ce025",1186:"6240f8f6",1197:"b3431997",1331:"eb3cecd3",1397:"adf22360",1588:"15b83b43",1747:"f893c5dd",1761:"42958b8b",1971:"da6513d5",2005:"0325b8ee",2156:"4ef25f62",2307:"6759b17e",2319:"01fd0f6f",2360:"3bb20b2d",2367:"564f9324",2379:"a86de2e0",2414:"146c26a3",2512:"d07df43d",2513:"bdcc07f8",2535:"814f3328",2603:"7fdd55b0",2659:"346551de",2708:"5ee0e852",2852:"b1a5869c",2863:"e76695bb",3089:"a6aa9e1f",3148:"8bb94aa1",3232:"d24297d9",3272:"5c36a5d9",3354:"fdedcd38",3394:"90b73dd1",3440:"a50b183b",3511:"63969280",3608:"9e4087bc",3687:"eab6d850",3821:"da23917a",3828:"c638a06a",3900:"8f5d5d9c",3907:"855a8af1",3922:"3eb12003",3927:"6b7febc5",3945:"1ea8ad02",4005:"67742e99",4013:"01a85c17",4059:"3aecf4c2",4071:"4579318a",4163:"1d3fbc77",4164:"61f849e1",4195:"c4f5d8e4",4322:"c06a55aa",4354:"298e1cbf",4397:"25784c72",4528:"28c41bf0",4687:"646279b0",4700:"b677bce5",4779:"c296e3c5",4912:"3f7b75e6",5006:"846f6ecc",5038:"e7e087cc",5126:"d488fc75",5148:"c15e56d8",5155:"bb5ac14e",5243:"d40532d9",5378:"5bc9239c",5458:"a57cf0ed",5569:"5df169af",5857:"d4f8d7b5",5862:"d3208382",5956:"78f8c35d",5968:"efe9c66f",6013:"10cf2990",6031:"a57d4206",6103:"ccc49370",6130:"3191dacf",6223:"d8bc7b89",6320:"3aa955b1",6365:"499e2bbb",6369:"ab70c45a",6379:"96ff2227",6380:"c554d126",6430:"1dd8b324",6453:"1fa7c5f7",6462:"8a42e3ae",6775:"86ddd18e",6825:"b6aa46a7",6846:"319c539b",6880:"3a51032f",6930:"869a5281",6933:"dd1516db",6998:"57c790d7",7327:"97a0946c",7338:"3488a21a",7356:"e6547a13",7395:"4d078e38",7467:"2fd2680c",7485:"c7d749c3",7615:"2419ec42",7658:"3123e6ae",7686:"f922e42a",7695:"653f7965",7755:"dfcae2ca",7918:"17896441",8003:"c5a2bd80",8051:"77572f6b",8071:"73902fa9",8139:"012f7f96",8159:"bdc52102",8189:"b88313bc",8222:"ec1168c4",8239:"d73922bc",8300:"5c43fc45",8403:"9fedbc11",8587:"bef1cd89",8610:"6875c492",8612:"f0ad3fbb",8665:"f5641504",8834:"f9376de9",8858:"c952f4ae",8985:"59730d2f",9038:"74e3af8e",9356:"99b9aebb",9360:"db7533df",9387:"9494ffc1",9459:"b349a70d",9514:"1be78505",9518:"b48fcc4a",9531:"1fcf426f",9561:"88be3a8b",9574:"891aea0a",9697:"73fe69d8",9817:"14eb3368",9913:"209e6c7d",9937:"183a8603"}[e]||e)+"."+{42:"29f1cb79",47:"ae43aba8",53:"e0439c7d",86:"b9fdef24",301:"efc67afa",335:"8b69217e",359:"2f067e38",477:"a64f9e2a",613:"8e3e22e5",649:"1354b8bf",721:"79235548",745:"7b7c3f31",784:"c23b728a",901:"b81fa86a",904:"c75fda12",1094:"03915fdc",1182:"d4256494",1186:"b461ba1c",1197:"024dbc16",1331:"01259d5e",1397:"ea49fd1b",1588:"f88b2dbf",1747:"266c37f9",1761:"1d36ba8c",1971:"627a1c50",2005:"9da14336",2156:"5619cf56",2307:"086dea05",2319:"139eacb3",2360:"8abc1612",2367:"0fd214d9",2379:"4166abe3",2414:"d97c181b",2512:"db5b6394",2513:"66a5e771",2535:"511486ad",2603:"94fae475",2659:"4f9e9fa3",2708:"d896f8e6",2852:"00246b69",2863:"bc8d8f32",3089:"6e015b54",3148:"b4d60c46",3232:"3310681a",3272:"1bb78a3f",3354:"342f289a",3394:"8e4d407f",3440:"5833a2e2",3511:"6036368d",3608:"ab666526",3687:"233bece4",3821:"8cf96b3d",3828:"8f5ab191",3900:"46160834",3907:"b92bd08e",3922:"f9f472e3",3927:"d322cb75",3945:"58336a8f",4005:"174b766c",4013:"3047ae62",4059:"f6e0718d",4071:"1624a1b6",4163:"2523382b",4164:"29edd593",4195:"831d7c1e",4322:"1287eeb9",4354:"0a887d40",4397:"45db5e6c",4528:"43a95eec",4687:"ad356ca4",4700:"1bbdda8d",4779:"e0e146e3",4912:"45ab8639",4972:"64bad86f",5006:"b0e481b6",5038:"870b2455",5126:"8a642bd5",5148:"a35fbfd4",5155:"3e8809d9",5243:"1f0ca1bb",5378:"381ac5e3",5458:"59f87b00",5569:"2c6ae1d8",5679:"06117b9d",5857:"4b3cf04c",5862:"41dc994d",5956:"0031021f",5968:"449fe4f4",6013:"dc732e52",6031:"3c12278d",6048:"ec67f851",6103:"31ba776a",6130:"ea8c5d1f",6223:"cf41a4b5",6316:"1ea06809",6320:"6bf8798f",6365:"6f2717d3",6369:"f58b1428",6379:"f99e6da1",6380:"9bfaa316",6430:"9ff0c386",6453:"b72adf52",6462:"b49d9a47",6775:"120a9319",6825:"ef357055",6846:"b449f38d",6880:"5c14434e",6930:"76c41b1d",6933:"1ce93fc0",6998:"d284da4d",7327:"7a552ac6",7338:"d8737f1a",7356:"3b75560b",7395:"5a11b696",7467:"abe371f9",7485:"ece2f88a",7615:"8da5c073",7658:"f8386f1d",7686:"26ac6d6b",7695:"5bb2838f",7724:"e1af7b56",7755:"be779d54",7824:"15f75901",7918:"72a879f5",8003:"7db97701",8051:"c7f684d0",8071:"b99a99c4",8139:"b251d58a",8159:"4f2af32a",8189:"4b17cc5f",8222:"43cfeb42",8239:"5939942d",8300:"8c01b9fa",8403:"ceb0ff6e",8587:"21f04352",8610:"d63cf4a1",8612:"88766538",8665:"b92c17e1",8834:"e29cd6ea",8858:"9ad2be58",8985:"0b2c9d90",9038:"e8dde44d",9356:"fa1e5805",9360:"15b698c5",9387:"bdde79ff",9459:"16300fdf",9487:"3ab2aba4",9514:"ab067560",9518:"084dce35",9531:"554f7433",9561:"2a0fba2a",9574:"d8e8529c",9697:"f9812bca",9817:"e8103636",9913:"993db7e3",9937:"7825baa2"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},f="mithril-doc:",r.l=(e,a,c,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(c))),a)return a(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/doc/",r.gca=function(e){return e={17896441:"7918",63969280:"3511",65298297:"784","1bcabeba":"42","01a74281":"47","935f2afb":"53","95ba6eac":"86","0dadd2c9":"301","1386e018":"335","7d451ae2":"359","0ab7ecaa":"477","5efc9d3d":"613","05a8eefa":"649","17636f9c":"721",a9095f31:"745",d0bce024:"901",db6b77e4:"904",e21cfb82:"1094",c88ce025:"1182","6240f8f6":"1186",b3431997:"1197",eb3cecd3:"1331",adf22360:"1397","15b83b43":"1588",f893c5dd:"1747","42958b8b":"1761",da6513d5:"1971","0325b8ee":"2005","4ef25f62":"2156","6759b17e":"2307","01fd0f6f":"2319","3bb20b2d":"2360","564f9324":"2367",a86de2e0:"2379","146c26a3":"2414",d07df43d:"2512",bdcc07f8:"2513","814f3328":"2535","7fdd55b0":"2603","346551de":"2659","5ee0e852":"2708",b1a5869c:"2852",e76695bb:"2863",a6aa9e1f:"3089","8bb94aa1":"3148",d24297d9:"3232","5c36a5d9":"3272",fdedcd38:"3354","90b73dd1":"3394",a50b183b:"3440","9e4087bc":"3608",eab6d850:"3687",da23917a:"3821",c638a06a:"3828","8f5d5d9c":"3900","855a8af1":"3907","3eb12003":"3922","6b7febc5":"3927","1ea8ad02":"3945","67742e99":"4005","01a85c17":"4013","3aecf4c2":"4059","4579318a":"4071","1d3fbc77":"4163","61f849e1":"4164",c4f5d8e4:"4195",c06a55aa:"4322","298e1cbf":"4354","25784c72":"4397","28c41bf0":"4528","646279b0":"4687",b677bce5:"4700",c296e3c5:"4779","3f7b75e6":"4912","846f6ecc":"5006",e7e087cc:"5038",d488fc75:"5126",c15e56d8:"5148",bb5ac14e:"5155",d40532d9:"5243","5bc9239c":"5378",a57cf0ed:"5458","5df169af":"5569",d4f8d7b5:"5857",d3208382:"5862","78f8c35d":"5956",efe9c66f:"5968","10cf2990":"6013",a57d4206:"6031",ccc49370:"6103","3191dacf":"6130",d8bc7b89:"6223","3aa955b1":"6320","499e2bbb":"6365",ab70c45a:"6369","96ff2227":"6379",c554d126:"6380","1dd8b324":"6430","1fa7c5f7":"6453","8a42e3ae":"6462","86ddd18e":"6775",b6aa46a7:"6825","319c539b":"6846","3a51032f":"6880","869a5281":"6930",dd1516db:"6933","57c790d7":"6998","97a0946c":"7327","3488a21a":"7338",e6547a13:"7356","4d078e38":"7395","2fd2680c":"7467",c7d749c3:"7485","2419ec42":"7615","3123e6ae":"7658",f922e42a:"7686","653f7965":"7695",dfcae2ca:"7755",c5a2bd80:"8003","77572f6b":"8051","73902fa9":"8071","012f7f96":"8139",bdc52102:"8159",b88313bc:"8189",ec1168c4:"8222",d73922bc:"8239","5c43fc45":"8300","9fedbc11":"8403",bef1cd89:"8587","6875c492":"8610",f0ad3fbb:"8612",f5641504:"8665",f9376de9:"8834",c952f4ae:"8858","59730d2f":"8985","74e3af8e":"9038","99b9aebb":"9356",db7533df:"9360","9494ffc1":"9387",b349a70d:"9459","1be78505":"9514",b48fcc4a:"9518","1fcf426f":"9531","88be3a8b":"9561","891aea0a":"9574","73fe69d8":"9697","14eb3368":"9817","209e6c7d":"9913","183a8603":"9937"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,c)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)c.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((c,f)=>d=e[a]=[c,f]));c.push(d[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var f=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var d,f,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(c);n - + - + \ No newline at end of file diff --git a/doc/category/getting-started/index.html b/doc/category/getting-started/index.html index 172e67af56..74beefe173 100644 --- a/doc/category/getting-started/index.html +++ b/doc/category/getting-started/index.html @@ -18,13 +18,13 @@ - + - + \ No newline at end of file diff --git a/doc/category/mithril-network-nodes/index.html b/doc/category/mithril-network-nodes/index.html index 22444fc53f..c4826bb06c 100644 --- a/doc/category/mithril-network-nodes/index.html +++ b/doc/category/mithril-network-nodes/index.html @@ -18,13 +18,13 @@ - + - + \ No newline at end of file diff --git a/doc/category/mithril-network/index.html b/doc/category/mithril-network/index.html index 9411348d7a..e94af2af52 100644 --- a/doc/category/mithril-network/index.html +++ b/doc/category/mithril-network/index.html @@ -18,13 +18,13 @@ - + - + \ No newline at end of file diff --git a/doc/category/mithril-protocol/index.html b/doc/category/mithril-protocol/index.html index 2991ee63fb..d1afc285a9 100644 --- a/doc/category/mithril-protocol/index.html +++ b/doc/category/mithril-protocol/index.html @@ -18,13 +18,13 @@ - + - + \ No newline at end of file diff --git a/doc/compiled-binaries/index.html b/doc/compiled-binaries/index.html index 50aba1439f..3fc3b572be 100644 --- a/doc/compiled-binaries/index.html +++ b/doc/compiled-binaries/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    - + \ No newline at end of file diff --git a/doc/dev-blog/2022/09/07/genesis-certificate-feature/index.html b/doc/dev-blog/2022/09/07/genesis-certificate-feature/index.html index 3d5b0df676..b9d357c5f7 100644 --- a/doc/dev-blog/2022/09/07/genesis-certificate-feature/index.html +++ b/doc/dev-blog/2022/09/07/genesis-certificate-feature/index.html @@ -18,13 +18,13 @@ - +

    Genesis Certificate support added

    Β· 2 min read

    Update: The PR has been merged and the feature is being deployed on the GCP Mithril Aggregator.

    This afternoon, we plan to merge the PR that activates the Genesis Certificate feature on the GCP Mithril Aggregator​

    PR: Implement Real Genesis Certificate #438

    Issue: Bootstrap Certificate Chain w/ Genesis Certificate #364

    This will involve some manual operations that will prevent temporarily the service to be running:

    • We will have to reset the stores of the Snapshots and Certificates. This means that the Mithril Explorer will display a No snapshot available message.

    • The Mithril Signers will have to wait until the next epoch #30 to be able to sign. This means that we should see the first available Snapshot 1 hour after the epoch transition.

    The SPOs that are currently running a Mithril Signer will have to recompile their node in order ot take advantage of the latest improvements (such as the registration of the nodes that will take few minutes instead of few hours). However, the previously compiled node will be able to contribute to signatures.

    In order to restore a Mithril Snapshot, a Mithril Client will now need access to the Genesis Verification Key by adding an environment variable when running: GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_genesis.vkey).

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/2022/09/12/certificate-signers-list/index.html b/doc/dev-blog/2022/09/12/certificate-signers-list/index.html index 21f12b99c4..14a7d3ca87 100644 --- a/doc/dev-blog/2022/09/12/certificate-signers-list/index.html +++ b/doc/dev-blog/2022/09/12/certificate-signers-list/index.html @@ -18,13 +18,13 @@ - +

    Signers list computation in Certificates

    Β· One min read

    The way the Signers list is computed inside a Certificate on the Mithril Aggregator is changing​

    PR: Implement filtered Signers in Certificate #494

    Issue: Record 'contributing' Signers only in Certificate #495

    Before this change, the list of Signers displayed in the Certificate detail of the Mithril Explorer was the list of all eligible Signers of the epoch used for signing (those who have successfully registered with the Mithril Aggregator 2 epochs earlier).

    Now that this change has been merged, the list of Signers displayed will only include the contributing Signers, which means only those who have successfully sent individual signatures.

    Note that the already existing Certificates will not be updated as this would break the Certificate Chain and therefore would involve the bootstraping of a new Genesis Certificate.

    This change is transparent to the Signer nodes runned by the SPOs and does not require any specific action from them.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/2022/09/13/stake-distribution-retrieval/index.html b/doc/dev-blog/2022/09/13/stake-distribution-retrieval/index.html index c4762deb83..bd19db179d 100644 --- a/doc/dev-blog/2022/09/13/stake-distribution-retrieval/index.html +++ b/doc/dev-blog/2022/09/13/stake-distribution-retrieval/index.html @@ -18,14 +18,14 @@ - +

    Stake Distribution retrieval fixed

    Β· 2 min read

    Update: The Stake Distribution computation is evolving with the release of Cardano node 8.0.0: the computation now relies on the new cardano-cli query stake-snapshot --all-stake-pools command that retrieves the Stake Distribution all at once and that is way faster. Prior versions of the Cardano node 1.35+ are backward compatible and will keep implementing the algorithm detailed below.

    The way the Mithril nodes retrieve the Stake Distribution is changing​

    PR: Fix Stake Distribution retrieval #499

    Issue: Stake distribution discrepancy #497

    We have noticed that the way the Mithril nodes computed the Stake Distribution was erroneous: the epoch that was used to make the computation was the current epoch instead of the previous epoch. This has lead to some de-synchronization between the Signers and the hosted GCP Aggregator for a few epochs.

    Indeed, the Stake Distribution retrieved from the Cardano node depended on the time at which it was done: the nodes where having differents values that prevented them from being able to work together to produce valid multi-signatures. The problem is related to the epoch that is used (current epoch) to make the computation of the Stake Distribution when the cardano-cli query stake-distribution command is ran, whereas the Mithril protocol needs to work with the previous epoch.

    A workaround is being implemented in this fix that will compute differently the Stake Distribution to target the previous epoch. To do so, the Stake value that is now retrieved sequentially for each pool available in the cardano-cli query stake-distribution by using the command cardano-cli query stake-snapshot --stake-pool-id **pool-id*. This guarantees that the Stake Distribution is computed deterministically on all nodes of the Mithril Network.

    We will continue our efforts to enhance the way the Stake Distribution is retrieved in the future, and so that it works smoothly on the mainnet (where the numbers of pools is bigger ~3,000 vs ~100 on the preview network).

    The SPOs need to recompile their Signer node in order to compute correctly the Stake Distributions on their node (as in this guide). It should then take up to 2 epochs before they are able to successfully register their individual signatures with the Aggregator.

    More information about the Certificate Chain and the epochs retrieval requirements is available here.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/2022/09/14/sqlite-stores/index.html b/doc/dev-blog/2022/09/14/sqlite-stores/index.html index 8534b65d7b..012a8de9f9 100644 --- a/doc/dev-blog/2022/09/14/sqlite-stores/index.html +++ b/doc/dev-blog/2022/09/14/sqlite-stores/index.html @@ -18,13 +18,13 @@ - +

    Mithril internal stores switch to SQLite.

    Β· 4 min read

    What is that?​

    Since almost the beginning of the Mithril project, the software used to rely on a store mechanism to save its different states allowing Signers and Aggregators to resume on correct state when switched on and off. This internal store mechanism used to be a bunch of JSON files saved in a given directory. Even though this does the job it still presents flaws: data are hard to query when debugging especially when crossing data (which signers have participated in this multi-signature?). Also, data are stored in different places which can be a problem when moving these files from one place to another. We also had to imagine what would be a migration scenario in case of a structure change. Switching to a file based SQL database solves these issues.

    The new release now uses SQLite stores in place of JSON file storage. This means that to continue running a Signer or an Aggregator node it is necessary to migrate from the old storage system to SQLite. This release comes with a tool to perform the migration which should be as straightforward as launching a command line (read below). The migration tool will be available only for a limited time in order to make Mithril beta testers able to migrate their existing data.

    How to migrate data from old storage system to SQLite stores?​

    There are 2 ways of getting the new version and the associated migration tool. Either downloading binaries from GitHub or compiling them yourself.

    Downloading​

    Download the new mithril-signer and mithril-signer-migrate files from the nightly builds page. Make them executable:

    $> chmod +x mithril-signer*
    $> ls -1F mithril-signer*
    mithril-signer*
    mithril-signer-migrate*

    note: the suffix * appended to the the entries output above indicates the file is executable. If it is not present, ensure the chmod command does not produce any error.

    Compiling​

    If you used to compile your node as stated in the guide, you have to compile the migration tool as well:

    $> cd mithril-signer
    $> cargo build --all-targets --release
    Compiling mithril-signer v0.1.0 (/home/somebody/shared/mithril/mithril-signer)
    Finished release [optimized] target(s) in 4.56s
    $> ls -1F ../target/release/mithril-signer*
    ../target/release/mithril-signer*
    ../target/release/mithril-signer.d
    ../target/release/mithril-signer-migrate*
    ../target/release/mithril-signer-migrate.d

    Running the migration​

    The first step is to stop the running Mithril node if any. The mithril-signer-migrate executable can perform the migration automatically once you know where your actual JSON files are located. Have a look in your configuration file (default /opt/mithril/mithril-signer/service.env), check the value associated with the DATA_STORES_DIRECTORY key (default to /opt/mithril/mithril-signer/stores) and copy the path indicated here. Copy this path after the --db-dir option on the following command line:

    $> ./mithril-signer-migrate automatic --db-dir /paste/the/data/stores/directory/here
    Mithril Aggregator JSON β†’ SQLite migration tool.
    Migrating protocol_initializer_store data…
    OK βœ“
    Migrating stake_store data…
    OK βœ“

    At the end of this command, a file signer.sqlite3 (or aggregator.sqlite3 if you run an Aggregator) should be present in the specified base directory.

    That should be enough, launch your upgraded mithril node.

    Note: The migration executable does not remove the old JSON files from the disk.

    Manual migration process​

    The executable also provides a manual switch for migrating Mithril JSON store directories placed in custom directories. This is mainly intended for developers who work on tweaked environments. Each internal store has its own data structure. In order to correctly migrate and process data, the type of the store has to be given on the command line.

    $> ./mithril-signer-migrate manual --help

    The command above should give you all informations needed to run a custom store migration.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/2022/10/11/keys-certification-badge/index.html b/doc/dev-blog/2022/10/11/keys-certification-badge/index.html index c83b85742b..914a4fd3fc 100644 --- a/doc/dev-blog/2022/10/11/keys-certification-badge/index.html +++ b/doc/dev-blog/2022/10/11/keys-certification-badge/index.html @@ -18,14 +18,14 @@ - +

    Mithril Keys Certification

    Β· 3 min read

    Update 2022/12/19: The signer registration with declarative PoolId has been decommissioned.

    Update 2022/11/30: The signer registration with declarative PoolId has been deprecated and the certified PoolId is now the stable mode.

    The way the Mithril nodes handle the Certification of the SPOs is evolving​

    PR: New STM registration procedure #433

    Issues: Implement Certification of the Mithril Verification Keys in Signer/Aggregator #455

    We have released a new Mithril Signer Verification Keys Certification mechanism:

    • Mithril Signer nodes running the previous version are still able to interact with the network without any further intervention
    • Mithril Signer nodes that are updated from a previous version must migrate some of their stores
    • This mechanism is experimental and can be activated on demand by the SPOs

    Upgrade a Mithril Signer running a previous version​

    The SPOs need to recompile their Signer node (as in this guide).

    The data stores of the node need to be updated by running the following command:

    # The path to your data stores directory, which defaults to:
    DATA_STORES_DIRECTORY=/opt/mithril/mithril-signer/stores

    # Run this command to upgrade your stores:
    sqlite3 ${DATA_STORES_DIRECTORY}/signer.sqlite3 "UPDATE protocol_initializer SET value = json_object('stm_initializer', json(value), 'kes_signature', null) WHERE json_extract(value, '$.stm_initializer') IS NULL;"

    ⚠️ If you don't update your data stores with this procedure, your node will not be able to register to the Aggregator temporarily. It should then take up to 3 epochs before it is able to successfully register its individual signatures with the Aggregator.

    Hybrid Certification mode in the Mithril network​

    From now, SPOs can either run their node by:

    • Declaring their Cardano PoolId:

      • This is the mode that all nodes were running prior to this release
      • This mode is still the stable mode
      • We intend to deprecate this mode in the near future
    • Certifying their Cardano PoolId:

      • The certification is done by providing the Mithril Signer node with KES Secret Key Path and Operational Certificate Path
      • This is an experimental mode
      • We intend to make this mode the only way of providing a PoolId in the near future
      • These PoolIds will be marked with a Verified Signer green badge in the Mithril Explorer (2 epochs after activating the Certification mode)

    The setup of a Mithril Signer node with these two modes is available in this guide.

    Here is an example of the Verified Signer badge displayed in the Certificate details popin: Verified Signer Badge

    How Keys Certification works​

    We rely on the Cardano KES Keys and Operational Certificate to be able to:

    • Compute automatically the PoolId from a valid Operational Certificate
    • Sign the Mithril Signer Verification Key with the KES Secret Key
    • Verify that the Mithril Signer Verification Key is associated to the owner of the pool

    Keys Certification Schema

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/2022/10/28/updated-environments/index.html b/doc/dev-blog/2022/10/28/updated-environments/index.html index c8e23b471d..e59dc58bfd 100644 --- a/doc/dev-blog/2022/10/28/updated-environments/index.html +++ b/doc/dev-blog/2022/10/28/updated-environments/index.html @@ -18,13 +18,13 @@ - +

    Mithril environments are updated

    Β· 2 min read

    The Mithril environments are updated​

    PR: New hosted environments #561

    Issue: Setup new hosted environments for testing-preview, pre-release-preview and release-preprod) with their terraform and GitHub environments #542

    On Tuesday, November 1st, 2022 the preview Cardano network will be re-spun and will be unavailable for 48h.

    In the mean time, the Mitril team is also implementing a new Release Process that will make use of several new environments.

    The Mithril testing environments are thus evolving in this context:

    • The current testing environment that runs on preview network and that most of the Pioneer SPOs are running is deprecated and will be decommissioned just after the preview network re-spin.

    • This environment will then be replaced by a new pre-release-preview environment open to SPOs that are eager to test pre releases of the Mithril nodes.

    • A new release-preprod environment has been launched on the preprod Cardano nework and will become the stable environment on which SPOs are encouraged to run their nodes.

    • ⚠️ The new release-preprod environment is in unstable status, therefore it is subject to re-genesis. We expect it to be in stable status within 1-2 weeks.

    In the future, when Mithril reaches mainnet, we assume that the release-preprod will be replaced by a release-mainnet environment. This means that we will have the following environments at this time: testing-preview, pre-release-preprod and release-mainnet.

    More information about:

    • The Mithril Networks and their availability here.

    • The Release Process is available in this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/2022/12/05/release-process/index.html b/doc/dev-blog/2022/12/05/release-process/index.html index 610debcde8..7171c6c1f0 100644 --- a/doc/dev-blog/2022/12/05/release-process/index.html +++ b/doc/dev-blog/2022/12/05/release-process/index.html @@ -18,13 +18,13 @@ - +

    Mithril Release Process

    Β· 4 min read

    Mithril follows a defined release process​

    As the Mithril project grew and more and more SPOs became involved in testing Mithril, it became obvious we need clearer identification of artifacts running on various parts of the network. Moreover, on our road towards mainnet availability we'll need to strengthen our testing process in order to validate Mithril network on more realistic environments.

    Release Process​

    We want our release process to follow some basic principles:

    • Continuous Integration: New code is integrated into the main codeline frequently which triggers automated build and test process.
    • Continuous Deployment: New artifacts produced by the build process are continuously deployed to a suitable environment where it can be used and tested by an increasing number of parties.
    • Deployment Pipeline: The deployment process is embodied in a pipeline that describes and implements all the necessary steps to release a new version of Mithril.
    • Artifact Promotion: An artifact is built once and only once and is promoted while travelling through the build pipeline.

    Here is a high-level picture of this process:

    Release Process

    • We will use a custom version based on SemVer for all the crates, binaries and containers of the repository and for the GitHub release.
    • We release a new distribution every 2 weeks (this duration is subject to changes as the project matures)
      • The released version is named after the year and its week number: YYWW.patch (e.g. 2250.0).
      • In case of critical regressions happening in production, a patch version will be released in between "official" releases as a hotfix.
    • A new version YYWW.0 will have the following life cycle:
      • A commit abc123 merged on main branch is deployed on the network named testing-preview.
      • A commit def456 tagged with YYWW.0-prerelease is deployed on the network named pre-release-preview.
      • A GitHub release YYWW.0-prerelease is created and linked with the YYWW.0-prerelease tag and marked as pre-release.
      • A tag YYWW.0-prerelease is qualified and selected for release or rejected (and replaced by a YYWW.1-prerelease tag if necessary on a fed789).
      • If the tag YYWW.0-prerelease is selected, a new tag is created and name YYWW.0 on the same commit def456.
      • A GitHub release YYWW.0 is created and linked to the YYWW.0 tag and marked as release.
      • The commit def456 with tag YYWW.0 is deployed to the network named release-preprod.
    • The Cargo.toml versions of the crates are updated (if required) just before creating the YYWW.0-prerelease tag .
    • The documentation website is also updated at the same time where the next version becomes the current version, leaving future updates be appended to the next version during the upcoming developments.
    • In order to simplify the life of Mithril users, we have introduced a version of the Mithril API used between client/signer and aggregators to check if the nodes are able to communicate together (following semver and considering the versions are compatible only if they share the same minor).
    • Our main distribution artefact is currently docker (OCI) images. We also provide more packages, eg. .deb packages or compiled binaries (some of them available on multiple platforms, e.g. Windows or macOS) to simplify users' life.
    • We also publish some of our crates on the crates.io registry whenever a new version is created (e.g. mithril-stm).

    Networks​

    • We maintain different Mithril networks (eg. servers, VMs, configurations...) to which artifacts are deployed at various stages of the process:
      • testing-preview: This is an internal environment based on the preview cardano testnet where most of the automated tests happen. It is also used to test features as soon as they are merged on the main branch.
      • pre-release-preview: This is a persistent environment based on the preview cardano testnet. SPOs which are active on preview are welcomed to take part in the Mithril signing process and to test new pre-release distributions deployed there.
      • release-preprod: Another persistent environment, based on the preprod cardano testnet, where more SPOs are expected to join and test, updated less frequently (on actual release distributions).
      • (LATER) mainnet: Production environment where new releases are deployed once qualifed on release-preprod.

    Further Reading​

    - + \ No newline at end of file diff --git a/doc/dev-blog/2023/03/02/era-switch-feature/index.html b/doc/dev-blog/2023/03/02/era-switch-feature/index.html index 78704dc491..b476c1f4dc 100644 --- a/doc/dev-blog/2023/03/02/era-switch-feature/index.html +++ b/doc/dev-blog/2023/03/02/era-switch-feature/index.html @@ -18,14 +18,14 @@ - +

    Mithril Era Switch

    Β· 2 min read

    Update 2023/03/10: The Era Switch behavior has been activated on the release-preprod network.

    Update 2023/03/08: The Era Switch behavior has been activated on the pre-release-preview network.

    An new Era Switch behavior will be introduced soon to the Mithril networks​

    Epic: Implement eras behavior switch #707](Implement eras behavior switch #707

    ⚠️ The Era Switch is not deployed yet to the pre-release-preview and release-preprod network. A special announcement will be made on the moria Discord channel when a new release candidate distribution is ready.

    In order to guarantee that any breaking change of the Mithril nodes does not break the Certificate Chain and the that new snapshots are consistently produced, the Mithril team has developped an Era Switch Behavior. This mechanism enables to embed new features in the signer and aggregator nodes prior ro releasing them. Also the activation of these new features will take place in a coordinated manner: all the eligible nodes will hot switch to a new era at the same Cardano epoch transition. To do so, the nodes rely on a transaction that is stored on the Cardano chain that provides era markers with the associated activations epochs for the eras.

    πŸ”₯ Activating this feature will require an update of configuration of the signer nodes after updating their binary:

    • The ERA_READER_ADAPTER_TYPE env var must be set to cardano-chain
    • The ERA_READER_ADAPTER_PARAMS env var must be set to the result of the command jq -nc --arg address $(wget -q -O - **YOUR_ERA_READER_ADDRESS**) --arg verification_key $(wget -q -O - **YOUR_ERA_READER_VERIFICATION_KEY**) '{"address": $address, "verification_key": $verification_key}' (the **YOUR_ERA_READER_ADDRESS** and **YOUR_ERA_READER_VERIFICATION_KEY** are values provided in the networks configuration matrix)

    Here is the configuration values that should be used on pre-release-preview:

    ERA_READER_ADAPTER_TYPE=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address":"addr_test1qrv5xfwh043mlc3vk5d97s4nmhxu7cmleyssvhx37gkfyejfe8d38v3vsfgetjafgrsdc49krug8wf04h5rmtengtejqlxrksk","verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}

    Here is the configuration values that should be used on release-preprod:

    ERA_READER_ADAPTER_TYPE=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address":"addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx","verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}

    All theses information will be available at the updated Run a Mithril Signer node (SPO) guide.

    Here is a schema that illustrates the era switch behavior: Era Switch Schema

    More information is also available at this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/archive/index.html b/doc/dev-blog/archive/index.html index b9d7cf70ad..d7585dc310 100644 --- a/doc/dev-blog/archive/index.html +++ b/doc/dev-blog/archive/index.html @@ -18,13 +18,13 @@ - + - + \ No newline at end of file diff --git a/doc/dev-blog/index.html b/doc/dev-blog/index.html index 44dda964e6..28c14b5095 100644 --- a/doc/dev-blog/index.html +++ b/doc/dev-blog/index.html @@ -18,7 +18,7 @@ - + @@ -27,7 +27,7 @@ Era Switch Schema

    More information is also available at this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    Β· 4 min read

    Mithril follows a defined release process​

    As the Mithril project grew and more and more SPOs became involved in testing Mithril, it became obvious we need clearer identification of artifacts running on various parts of the network. Moreover, on our road towards mainnet availability we'll need to strengthen our testing process in order to validate Mithril network on more realistic environments.

    Release Process​

    We want our release process to follow some basic principles:

    • Continuous Integration: New code is integrated into the main codeline frequently which triggers automated build and test process.
    • Continuous Deployment: New artifacts produced by the build process are continuously deployed to a suitable environment where it can be used and tested by an increasing number of parties.
    • Deployment Pipeline: The deployment process is embodied in a pipeline that describes and implements all the necessary steps to release a new version of Mithril.
    • Artifact Promotion: An artifact is built once and only once and is promoted while travelling through the build pipeline.

    Here is a high-level picture of this process:

    Release Process

    • We will use a custom version based on SemVer for all the crates, binaries and containers of the repository and for the GitHub release.
    • We release a new distribution every 2 weeks (this duration is subject to changes as the project matures)
      • The released version is named after the year and its week number: YYWW.patch (e.g. 2250.0).
      • In case of critical regressions happening in production, a patch version will be released in between "official" releases as a hotfix.
    • A new version YYWW.0 will have the following life cycle:
      • A commit abc123 merged on main branch is deployed on the network named testing-preview.
      • A commit def456 tagged with YYWW.0-prerelease is deployed on the network named pre-release-preview.
      • A GitHub release YYWW.0-prerelease is created and linked with the YYWW.0-prerelease tag and marked as pre-release.
      • A tag YYWW.0-prerelease is qualified and selected for release or rejected (and replaced by a YYWW.1-prerelease tag if necessary on a fed789).
      • If the tag YYWW.0-prerelease is selected, a new tag is created and name YYWW.0 on the same commit def456.
      • A GitHub release YYWW.0 is created and linked to the YYWW.0 tag and marked as release.
      • The commit def456 with tag YYWW.0 is deployed to the network named release-preprod.
    • The Cargo.toml versions of the crates are updated (if required) just before creating the YYWW.0-prerelease tag .
    • The documentation website is also updated at the same time where the next version becomes the current version, leaving future updates be appended to the next version during the upcoming developments.
    • In order to simplify the life of Mithril users, we have introduced a version of the Mithril API used between client/signer and aggregators to check if the nodes are able to communicate together (following semver and considering the versions are compatible only if they share the same minor).
    • Our main distribution artefact is currently docker (OCI) images. We also provide more packages, eg. .deb packages or compiled binaries (some of them available on multiple platforms, e.g. Windows or macOS) to simplify users' life.
    • We also publish some of our crates on the crates.io registry whenever a new version is created (e.g. mithril-stm).

    Networks​

    • We maintain different Mithril networks (eg. servers, VMs, configurations...) to which artifacts are deployed at various stages of the process:
      • testing-preview: This is an internal environment based on the preview cardano testnet where most of the automated tests happen. It is also used to test features as soon as they are merged on the main branch.
      • pre-release-preview: This is a persistent environment based on the preview cardano testnet. SPOs which are active on preview are welcomed to take part in the Mithril signing process and to test new pre-release distributions deployed there.
      • release-preprod: Another persistent environment, based on the preprod cardano testnet, where more SPOs are expected to join and test, updated less frequently (on actual release distributions).
      • (LATER) mainnet: Production environment where new releases are deployed once qualifed on release-preprod.

    Further Reading​

    Β· 2 min read

    The Mithril environments are updated​

    PR: New hosted environments #561

    Issue: Setup new hosted environments for testing-preview, pre-release-preview and release-preprod) with their terraform and GitHub environments #542

    On Tuesday, November 1st, 2022 the preview Cardano network will be re-spun and will be unavailable for 48h.

    In the mean time, the Mitril team is also implementing a new Release Process that will make use of several new environments.

    The Mithril testing environments are thus evolving in this context:

    • The current testing environment that runs on preview network and that most of the Pioneer SPOs are running is deprecated and will be decommissioned just after the preview network re-spin.

    • This environment will then be replaced by a new pre-release-preview environment open to SPOs that are eager to test pre releases of the Mithril nodes.

    • A new release-preprod environment has been launched on the preprod Cardano nework and will become the stable environment on which SPOs are encouraged to run their nodes.

    • ⚠️ The new release-preprod environment is in unstable status, therefore it is subject to re-genesis. We expect it to be in stable status within 1-2 weeks.

    In the future, when Mithril reaches mainnet, we assume that the release-preprod will be replaced by a release-mainnet environment. This means that we will have the following environments at this time: testing-preview, pre-release-preprod and release-mainnet.

    More information about:

    • The Mithril Networks and their availability here.

    • The Release Process is available in this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    Β· 3 min read

    Update 2022/12/19: The signer registration with declarative PoolId has been decommissioned.

    Update 2022/11/30: The signer registration with declarative PoolId has been deprecated and the certified PoolId is now the stable mode.

    The way the Mithril nodes handle the Certification of the SPOs is evolving​

    PR: New STM registration procedure #433

    Issues: Implement Certification of the Mithril Verification Keys in Signer/Aggregator #455

    We have released a new Mithril Signer Verification Keys Certification mechanism:

    • Mithril Signer nodes running the previous version are still able to interact with the network without any further intervention
    • Mithril Signer nodes that are updated from a previous version must migrate some of their stores
    • This mechanism is experimental and can be activated on demand by the SPOs

    Upgrade a Mithril Signer running a previous version​

    The SPOs need to recompile their Signer node (as in this guide).

    The data stores of the node need to be updated by running the following command:

    # The path to your data stores directory, which defaults to:
    DATA_STORES_DIRECTORY=/opt/mithril/mithril-signer/stores

    # Run this command to upgrade your stores:
    sqlite3 ${DATA_STORES_DIRECTORY}/signer.sqlite3 "UPDATE protocol_initializer SET value = json_object('stm_initializer', json(value), 'kes_signature', null) WHERE json_extract(value, '$.stm_initializer') IS NULL;"

    ⚠️ If you don't update your data stores with this procedure, your node will not be able to register to the Aggregator temporarily. It should then take up to 3 epochs before it is able to successfully register its individual signatures with the Aggregator.

    Hybrid Certification mode in the Mithril network​

    From now, SPOs can either run their node by:

    • Declaring their Cardano PoolId:

      • This is the mode that all nodes were running prior to this release
      • This mode is still the stable mode
      • We intend to deprecate this mode in the near future
    • Certifying their Cardano PoolId:

      • The certification is done by providing the Mithril Signer node with KES Secret Key Path and Operational Certificate Path
      • This is an experimental mode
      • We intend to make this mode the only way of providing a PoolId in the near future
      • These PoolIds will be marked with a Verified Signer green badge in the Mithril Explorer (2 epochs after activating the Certification mode)

    The setup of a Mithril Signer node with these two modes is available in this guide.

    Here is an example of the Verified Signer badge displayed in the Certificate details popin: Verified Signer Badge

    How Keys Certification works​

    We rely on the Cardano KES Keys and Operational Certificate to be able to:

    • Compute automatically the PoolId from a valid Operational Certificate
    • Sign the Mithril Signer Verification Key with the KES Secret Key
    • Verify that the Mithril Signer Verification Key is associated to the owner of the pool

    Keys Certification Schema

    Feel free to reach out to us on the Discord channel for questions and/or help.

    Β· 4 min read

    What is that?​

    Since almost the beginning of the Mithril project, the software used to rely on a store mechanism to save its different states allowing Signers and Aggregators to resume on correct state when switched on and off. This internal store mechanism used to be a bunch of JSON files saved in a given directory. Even though this does the job it still presents flaws: data are hard to query when debugging especially when crossing data (which signers have participated in this multi-signature?). Also, data are stored in different places which can be a problem when moving these files from one place to another. We also had to imagine what would be a migration scenario in case of a structure change. Switching to a file based SQL database solves these issues.

    The new release now uses SQLite stores in place of JSON file storage. This means that to continue running a Signer or an Aggregator node it is necessary to migrate from the old storage system to SQLite. This release comes with a tool to perform the migration which should be as straightforward as launching a command line (read below). The migration tool will be available only for a limited time in order to make Mithril beta testers able to migrate their existing data.

    How to migrate data from old storage system to SQLite stores?​

    There are 2 ways of getting the new version and the associated migration tool. Either downloading binaries from GitHub or compiling them yourself.

    Downloading​

    Download the new mithril-signer and mithril-signer-migrate files from the nightly builds page. Make them executable:

    $> chmod +x mithril-signer*
    $> ls -1F mithril-signer*
    mithril-signer*
    mithril-signer-migrate*

    note: the suffix * appended to the the entries output above indicates the file is executable. If it is not present, ensure the chmod command does not produce any error.

    Compiling​

    If you used to compile your node as stated in the guide, you have to compile the migration tool as well:

    $> cd mithril-signer
    $> cargo build --all-targets --release
    Compiling mithril-signer v0.1.0 (/home/somebody/shared/mithril/mithril-signer)
    Finished release [optimized] target(s) in 4.56s
    $> ls -1F ../target/release/mithril-signer*
    ../target/release/mithril-signer*
    ../target/release/mithril-signer.d
    ../target/release/mithril-signer-migrate*
    ../target/release/mithril-signer-migrate.d

    Running the migration​

    The first step is to stop the running Mithril node if any. The mithril-signer-migrate executable can perform the migration automatically once you know where your actual JSON files are located. Have a look in your configuration file (default /opt/mithril/mithril-signer/service.env), check the value associated with the DATA_STORES_DIRECTORY key (default to /opt/mithril/mithril-signer/stores) and copy the path indicated here. Copy this path after the --db-dir option on the following command line:

    $> ./mithril-signer-migrate automatic --db-dir /paste/the/data/stores/directory/here
    Mithril Aggregator JSON β†’ SQLite migration tool.
    Migrating protocol_initializer_store data…
    OK βœ“
    Migrating stake_store data…
    OK βœ“

    At the end of this command, a file signer.sqlite3 (or aggregator.sqlite3 if you run an Aggregator) should be present in the specified base directory.

    That should be enough, launch your upgraded mithril node.

    Note: The migration executable does not remove the old JSON files from the disk.

    Manual migration process​

    The executable also provides a manual switch for migrating Mithril JSON store directories placed in custom directories. This is mainly intended for developers who work on tweaked environments. Each internal store has its own data structure. In order to correctly migrate and process data, the type of the store has to be given on the command line.

    $> ./mithril-signer-migrate manual --help

    The command above should give you all informations needed to run a custom store migration.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    Β· 2 min read

    Update: The Stake Distribution computation is evolving with the release of Cardano node 8.0.0: the computation now relies on the new cardano-cli query stake-snapshot --all-stake-pools command that retrieves the Stake Distribution all at once and that is way faster. Prior versions of the Cardano node 1.35+ are backward compatible and will keep implementing the algorithm detailed below.

    The way the Mithril nodes retrieve the Stake Distribution is changing​

    PR: Fix Stake Distribution retrieval #499

    Issue: Stake distribution discrepancy #497

    We have noticed that the way the Mithril nodes computed the Stake Distribution was erroneous: the epoch that was used to make the computation was the current epoch instead of the previous epoch. This has lead to some de-synchronization between the Signers and the hosted GCP Aggregator for a few epochs.

    Indeed, the Stake Distribution retrieved from the Cardano node depended on the time at which it was done: the nodes where having differents values that prevented them from being able to work together to produce valid multi-signatures. The problem is related to the epoch that is used (current epoch) to make the computation of the Stake Distribution when the cardano-cli query stake-distribution command is ran, whereas the Mithril protocol needs to work with the previous epoch.

    A workaround is being implemented in this fix that will compute differently the Stake Distribution to target the previous epoch. To do so, the Stake value that is now retrieved sequentially for each pool available in the cardano-cli query stake-distribution by using the command cardano-cli query stake-snapshot --stake-pool-id **pool-id*. This guarantees that the Stake Distribution is computed deterministically on all nodes of the Mithril Network.

    We will continue our efforts to enhance the way the Stake Distribution is retrieved in the future, and so that it works smoothly on the mainnet (where the numbers of pools is bigger ~3,000 vs ~100 on the preview network).

    The SPOs need to recompile their Signer node in order to compute correctly the Stake Distributions on their node (as in this guide). It should then take up to 2 epochs before they are able to successfully register their individual signatures with the Aggregator.

    More information about the Certificate Chain and the epochs retrieval requirements is available here.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    Β· One min read

    The way the Signers list is computed inside a Certificate on the Mithril Aggregator is changing​

    PR: Implement filtered Signers in Certificate #494

    Issue: Record 'contributing' Signers only in Certificate #495

    Before this change, the list of Signers displayed in the Certificate detail of the Mithril Explorer was the list of all eligible Signers of the epoch used for signing (those who have successfully registered with the Mithril Aggregator 2 epochs earlier).

    Now that this change has been merged, the list of Signers displayed will only include the contributing Signers, which means only those who have successfully sent individual signatures.

    Note that the already existing Certificates will not be updated as this would break the Certificate Chain and therefore would involve the bootstraping of a new Genesis Certificate.

    This change is transparent to the Signer nodes runned by the SPOs and does not require any specific action from them.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    Β· 2 min read

    Update: The PR has been merged and the feature is being deployed on the GCP Mithril Aggregator.

    This afternoon, we plan to merge the PR that activates the Genesis Certificate feature on the GCP Mithril Aggregator​

    PR: Implement Real Genesis Certificate #438

    Issue: Bootstrap Certificate Chain w/ Genesis Certificate #364

    This will involve some manual operations that will prevent temporarily the service to be running:

    • We will have to reset the stores of the Snapshots and Certificates. This means that the Mithril Explorer will display a No snapshot available message.

    • The Mithril Signers will have to wait until the next epoch #30 to be able to sign. This means that we should see the first available Snapshot 1 hour after the epoch transition.

    The SPOs that are currently running a Mithril Signer will have to recompile their node in order ot take advantage of the latest improvements (such as the registration of the nodes that will take few minutes instead of few hours). However, the previously compiled node will be able to contribute to signatures.

    In order to restore a Mithril Snapshot, a Mithril Client will now need access to the Genesis Verification Key by adding an environment variable when running: GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_genesis.vkey).

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/breaking-change/index.html b/doc/dev-blog/tags/breaking-change/index.html index 5d665beaaf..c32ab2e02b 100644 --- a/doc/dev-blog/tags/breaking-change/index.html +++ b/doc/dev-blog/tags/breaking-change/index.html @@ -18,13 +18,13 @@ - +

    2 posts tagged with "breaking-change"

    View All Tags

    Β· 4 min read

    What is that?​

    Since almost the beginning of the Mithril project, the software used to rely on a store mechanism to save its different states allowing Signers and Aggregators to resume on correct state when switched on and off. This internal store mechanism used to be a bunch of JSON files saved in a given directory. Even though this does the job it still presents flaws: data are hard to query when debugging especially when crossing data (which signers have participated in this multi-signature?). Also, data are stored in different places which can be a problem when moving these files from one place to another. We also had to imagine what would be a migration scenario in case of a structure change. Switching to a file based SQL database solves these issues.

    The new release now uses SQLite stores in place of JSON file storage. This means that to continue running a Signer or an Aggregator node it is necessary to migrate from the old storage system to SQLite. This release comes with a tool to perform the migration which should be as straightforward as launching a command line (read below). The migration tool will be available only for a limited time in order to make Mithril beta testers able to migrate their existing data.

    How to migrate data from old storage system to SQLite stores?​

    There are 2 ways of getting the new version and the associated migration tool. Either downloading binaries from GitHub or compiling them yourself.

    Downloading​

    Download the new mithril-signer and mithril-signer-migrate files from the nightly builds page. Make them executable:

    $> chmod +x mithril-signer*
    $> ls -1F mithril-signer*
    mithril-signer*
    mithril-signer-migrate*

    note: the suffix * appended to the the entries output above indicates the file is executable. If it is not present, ensure the chmod command does not produce any error.

    Compiling​

    If you used to compile your node as stated in the guide, you have to compile the migration tool as well:

    $> cd mithril-signer
    $> cargo build --all-targets --release
    Compiling mithril-signer v0.1.0 (/home/somebody/shared/mithril/mithril-signer)
    Finished release [optimized] target(s) in 4.56s
    $> ls -1F ../target/release/mithril-signer*
    ../target/release/mithril-signer*
    ../target/release/mithril-signer.d
    ../target/release/mithril-signer-migrate*
    ../target/release/mithril-signer-migrate.d

    Running the migration​

    The first step is to stop the running Mithril node if any. The mithril-signer-migrate executable can perform the migration automatically once you know where your actual JSON files are located. Have a look in your configuration file (default /opt/mithril/mithril-signer/service.env), check the value associated with the DATA_STORES_DIRECTORY key (default to /opt/mithril/mithril-signer/stores) and copy the path indicated here. Copy this path after the --db-dir option on the following command line:

    $> ./mithril-signer-migrate automatic --db-dir /paste/the/data/stores/directory/here
    Mithril Aggregator JSON β†’ SQLite migration tool.
    Migrating protocol_initializer_store data…
    OK βœ“
    Migrating stake_store data…
    OK βœ“

    At the end of this command, a file signer.sqlite3 (or aggregator.sqlite3 if you run an Aggregator) should be present in the specified base directory.

    That should be enough, launch your upgraded mithril node.

    Note: The migration executable does not remove the old JSON files from the disk.

    Manual migration process​

    The executable also provides a manual switch for migrating Mithril JSON store directories placed in custom directories. This is mainly intended for developers who work on tweaked environments. Each internal store has its own data structure. In order to correctly migrate and process data, the type of the store has to be given on the command line.

    $> ./mithril-signer-migrate manual --help

    The command above should give you all informations needed to run a custom store migration.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    Β· 2 min read

    Update: The PR has been merged and the feature is being deployed on the GCP Mithril Aggregator.

    This afternoon, we plan to merge the PR that activates the Genesis Certificate feature on the GCP Mithril Aggregator​

    PR: Implement Real Genesis Certificate #438

    Issue: Bootstrap Certificate Chain w/ Genesis Certificate #364

    This will involve some manual operations that will prevent temporarily the service to be running:

    • We will have to reset the stores of the Snapshots and Certificates. This means that the Mithril Explorer will display a No snapshot available message.

    • The Mithril Signers will have to wait until the next epoch #30 to be able to sign. This means that we should see the first available Snapshot 1 hour after the epoch transition.

    The SPOs that are currently running a Mithril Signer will have to recompile their node in order ot take advantage of the latest improvements (such as the registration of the nodes that will take few minutes instead of few hours). However, the previously compiled node will be able to contribute to signatures.

    In order to restore a Mithril Snapshot, a Mithril Client will now need access to the Genesis Verification Key by adding an environment variable when running: GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_genesis.vkey).

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/cardano/index.html b/doc/dev-blog/tags/cardano/index.html index 6c14200e60..78928a01db 100644 --- a/doc/dev-blog/tags/cardano/index.html +++ b/doc/dev-blog/tags/cardano/index.html @@ -18,14 +18,14 @@ - +

    One post tagged with "cardano"

    View All Tags

    Β· 3 min read

    Update 2022/12/19: The signer registration with declarative PoolId has been decommissioned.

    Update 2022/11/30: The signer registration with declarative PoolId has been deprecated and the certified PoolId is now the stable mode.

    The way the Mithril nodes handle the Certification of the SPOs is evolving​

    PR: New STM registration procedure #433

    Issues: Implement Certification of the Mithril Verification Keys in Signer/Aggregator #455

    We have released a new Mithril Signer Verification Keys Certification mechanism:

    • Mithril Signer nodes running the previous version are still able to interact with the network without any further intervention
    • Mithril Signer nodes that are updated from a previous version must migrate some of their stores
    • This mechanism is experimental and can be activated on demand by the SPOs

    Upgrade a Mithril Signer running a previous version​

    The SPOs need to recompile their Signer node (as in this guide).

    The data stores of the node need to be updated by running the following command:

    # The path to your data stores directory, which defaults to:
    DATA_STORES_DIRECTORY=/opt/mithril/mithril-signer/stores

    # Run this command to upgrade your stores:
    sqlite3 ${DATA_STORES_DIRECTORY}/signer.sqlite3 "UPDATE protocol_initializer SET value = json_object('stm_initializer', json(value), 'kes_signature', null) WHERE json_extract(value, '$.stm_initializer') IS NULL;"

    ⚠️ If you don't update your data stores with this procedure, your node will not be able to register to the Aggregator temporarily. It should then take up to 3 epochs before it is able to successfully register its individual signatures with the Aggregator.

    Hybrid Certification mode in the Mithril network​

    From now, SPOs can either run their node by:

    • Declaring their Cardano PoolId:

      • This is the mode that all nodes were running prior to this release
      • This mode is still the stable mode
      • We intend to deprecate this mode in the near future
    • Certifying their Cardano PoolId:

      • The certification is done by providing the Mithril Signer node with KES Secret Key Path and Operational Certificate Path
      • This is an experimental mode
      • We intend to make this mode the only way of providing a PoolId in the near future
      • These PoolIds will be marked with a Verified Signer green badge in the Mithril Explorer (2 epochs after activating the Certification mode)

    The setup of a Mithril Signer node with these two modes is available in this guide.

    Here is an example of the Verified Signer badge displayed in the Certificate details popin: Verified Signer Badge

    How Keys Certification works​

    We rely on the Cardano KES Keys and Operational Certificate to be able to:

    • Compute automatically the PoolId from a valid Operational Certificate
    • Sign the Mithril Signer Verification Key with the KES Secret Key
    • Verify that the Mithril Signer Verification Key is associated to the owner of the pool

    Keys Certification Schema

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/certificate/index.html b/doc/dev-blog/tags/certificate/index.html index 4496eef20a..c8e9342dce 100644 --- a/doc/dev-blog/tags/certificate/index.html +++ b/doc/dev-blog/tags/certificate/index.html @@ -18,14 +18,14 @@ - +

    3 posts tagged with "certificate"

    View All Tags

    Β· 2 min read

    Update: The Stake Distribution computation is evolving with the release of Cardano node 8.0.0: the computation now relies on the new cardano-cli query stake-snapshot --all-stake-pools command that retrieves the Stake Distribution all at once and that is way faster. Prior versions of the Cardano node 1.35+ are backward compatible and will keep implementing the algorithm detailed below.

    The way the Mithril nodes retrieve the Stake Distribution is changing​

    PR: Fix Stake Distribution retrieval #499

    Issue: Stake distribution discrepancy #497

    We have noticed that the way the Mithril nodes computed the Stake Distribution was erroneous: the epoch that was used to make the computation was the current epoch instead of the previous epoch. This has lead to some de-synchronization between the Signers and the hosted GCP Aggregator for a few epochs.

    Indeed, the Stake Distribution retrieved from the Cardano node depended on the time at which it was done: the nodes where having differents values that prevented them from being able to work together to produce valid multi-signatures. The problem is related to the epoch that is used (current epoch) to make the computation of the Stake Distribution when the cardano-cli query stake-distribution command is ran, whereas the Mithril protocol needs to work with the previous epoch.

    A workaround is being implemented in this fix that will compute differently the Stake Distribution to target the previous epoch. To do so, the Stake value that is now retrieved sequentially for each pool available in the cardano-cli query stake-distribution by using the command cardano-cli query stake-snapshot --stake-pool-id **pool-id*. This guarantees that the Stake Distribution is computed deterministically on all nodes of the Mithril Network.

    We will continue our efforts to enhance the way the Stake Distribution is retrieved in the future, and so that it works smoothly on the mainnet (where the numbers of pools is bigger ~3,000 vs ~100 on the preview network).

    The SPOs need to recompile their Signer node in order to compute correctly the Stake Distributions on their node (as in this guide). It should then take up to 2 epochs before they are able to successfully register their individual signatures with the Aggregator.

    More information about the Certificate Chain and the epochs retrieval requirements is available here.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    Β· One min read

    The way the Signers list is computed inside a Certificate on the Mithril Aggregator is changing​

    PR: Implement filtered Signers in Certificate #494

    Issue: Record 'contributing' Signers only in Certificate #495

    Before this change, the list of Signers displayed in the Certificate detail of the Mithril Explorer was the list of all eligible Signers of the epoch used for signing (those who have successfully registered with the Mithril Aggregator 2 epochs earlier).

    Now that this change has been merged, the list of Signers displayed will only include the contributing Signers, which means only those who have successfully sent individual signatures.

    Note that the already existing Certificates will not be updated as this would break the Certificate Chain and therefore would involve the bootstraping of a new Genesis Certificate.

    This change is transparent to the Signer nodes runned by the SPOs and does not require any specific action from them.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    Β· 2 min read

    Update: The PR has been merged and the feature is being deployed on the GCP Mithril Aggregator.

    This afternoon, we plan to merge the PR that activates the Genesis Certificate feature on the GCP Mithril Aggregator​

    PR: Implement Real Genesis Certificate #438

    Issue: Bootstrap Certificate Chain w/ Genesis Certificate #364

    This will involve some manual operations that will prevent temporarily the service to be running:

    • We will have to reset the stores of the Snapshots and Certificates. This means that the Mithril Explorer will display a No snapshot available message.

    • The Mithril Signers will have to wait until the next epoch #30 to be able to sign. This means that we should see the first available Snapshot 1 hour after the epoch transition.

    The SPOs that are currently running a Mithril Signer will have to recompile their node in order ot take advantage of the latest improvements (such as the registration of the nodes that will take few minutes instead of few hours). However, the previously compiled node will be able to contribute to signatures.

    In order to restore a Mithril Snapshot, a Mithril Client will now need access to the Genesis Verification Key by adding an environment variable when running: GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_genesis.vkey).

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/environments/index.html b/doc/dev-blog/tags/environments/index.html index 092611919a..36fadb04a8 100644 --- a/doc/dev-blog/tags/environments/index.html +++ b/doc/dev-blog/tags/environments/index.html @@ -18,13 +18,13 @@ - +

    One post tagged with "environments"

    View All Tags

    Β· 2 min read

    The Mithril environments are updated​

    PR: New hosted environments #561

    Issue: Setup new hosted environments for testing-preview, pre-release-preview and release-preprod) with their terraform and GitHub environments #542

    On Tuesday, November 1st, 2022 the preview Cardano network will be re-spun and will be unavailable for 48h.

    In the mean time, the Mitril team is also implementing a new Release Process that will make use of several new environments.

    The Mithril testing environments are thus evolving in this context:

    • The current testing environment that runs on preview network and that most of the Pioneer SPOs are running is deprecated and will be decommissioned just after the preview network re-spin.

    • This environment will then be replaced by a new pre-release-preview environment open to SPOs that are eager to test pre releases of the Mithril nodes.

    • A new release-preprod environment has been launched on the preprod Cardano nework and will become the stable environment on which SPOs are encouraged to run their nodes.

    • ⚠️ The new release-preprod environment is in unstable status, therefore it is subject to re-genesis. We expect it to be in stable status within 1-2 weeks.

    In the future, when Mithril reaches mainnet, we assume that the release-preprod will be replaced by a release-mainnet environment. This means that we will have the following environments at this time: testing-preview, pre-release-preprod and release-mainnet.

    More information about:

    • The Mithril Networks and their availability here.

    • The Release Process is available in this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/era-activation/index.html b/doc/dev-blog/tags/era-activation/index.html index b8ac318817..f4b35d8173 100644 --- a/doc/dev-blog/tags/era-activation/index.html +++ b/doc/dev-blog/tags/era-activation/index.html @@ -18,14 +18,14 @@ - +

    One post tagged with "era activation"

    View All Tags

    Β· 2 min read

    Update 2023/03/10: The Era Switch behavior has been activated on the release-preprod network.

    Update 2023/03/08: The Era Switch behavior has been activated on the pre-release-preview network.

    An new Era Switch behavior will be introduced soon to the Mithril networks​

    Epic: Implement eras behavior switch #707](Implement eras behavior switch #707

    ⚠️ The Era Switch is not deployed yet to the pre-release-preview and release-preprod network. A special announcement will be made on the moria Discord channel when a new release candidate distribution is ready.

    In order to guarantee that any breaking change of the Mithril nodes does not break the Certificate Chain and the that new snapshots are consistently produced, the Mithril team has developped an Era Switch Behavior. This mechanism enables to embed new features in the signer and aggregator nodes prior ro releasing them. Also the activation of these new features will take place in a coordinated manner: all the eligible nodes will hot switch to a new era at the same Cardano epoch transition. To do so, the nodes rely on a transaction that is stored on the Cardano chain that provides era markers with the associated activations epochs for the eras.

    πŸ”₯ Activating this feature will require an update of configuration of the signer nodes after updating their binary:

    • The ERA_READER_ADAPTER_TYPE env var must be set to cardano-chain
    • The ERA_READER_ADAPTER_PARAMS env var must be set to the result of the command jq -nc --arg address $(wget -q -O - **YOUR_ERA_READER_ADDRESS**) --arg verification_key $(wget -q -O - **YOUR_ERA_READER_VERIFICATION_KEY**) '{"address": $address, "verification_key": $verification_key}' (the **YOUR_ERA_READER_ADDRESS** and **YOUR_ERA_READER_VERIFICATION_KEY** are values provided in the networks configuration matrix)

    Here is the configuration values that should be used on pre-release-preview:

    ERA_READER_ADAPTER_TYPE=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address":"addr_test1qrv5xfwh043mlc3vk5d97s4nmhxu7cmleyssvhx37gkfyejfe8d38v3vsfgetjafgrsdc49krug8wf04h5rmtengtejqlxrksk","verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}

    Here is the configuration values that should be used on release-preprod:

    ERA_READER_ADAPTER_TYPE=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address":"addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx","verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}

    All theses information will be available at the updated Run a Mithril Signer node (SPO) guide.

    Here is a schema that illustrates the era switch behavior: Era Switch Schema

    More information is also available at this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/era-markers/index.html b/doc/dev-blog/tags/era-markers/index.html index 07a25207ef..e011f1aa86 100644 --- a/doc/dev-blog/tags/era-markers/index.html +++ b/doc/dev-blog/tags/era-markers/index.html @@ -18,14 +18,14 @@ - +

    One post tagged with "era markers"

    View All Tags

    Β· 2 min read

    Update 2023/03/10: The Era Switch behavior has been activated on the release-preprod network.

    Update 2023/03/08: The Era Switch behavior has been activated on the pre-release-preview network.

    An new Era Switch behavior will be introduced soon to the Mithril networks​

    Epic: Implement eras behavior switch #707](Implement eras behavior switch #707

    ⚠️ The Era Switch is not deployed yet to the pre-release-preview and release-preprod network. A special announcement will be made on the moria Discord channel when a new release candidate distribution is ready.

    In order to guarantee that any breaking change of the Mithril nodes does not break the Certificate Chain and the that new snapshots are consistently produced, the Mithril team has developped an Era Switch Behavior. This mechanism enables to embed new features in the signer and aggregator nodes prior ro releasing them. Also the activation of these new features will take place in a coordinated manner: all the eligible nodes will hot switch to a new era at the same Cardano epoch transition. To do so, the nodes rely on a transaction that is stored on the Cardano chain that provides era markers with the associated activations epochs for the eras.

    πŸ”₯ Activating this feature will require an update of configuration of the signer nodes after updating their binary:

    • The ERA_READER_ADAPTER_TYPE env var must be set to cardano-chain
    • The ERA_READER_ADAPTER_PARAMS env var must be set to the result of the command jq -nc --arg address $(wget -q -O - **YOUR_ERA_READER_ADDRESS**) --arg verification_key $(wget -q -O - **YOUR_ERA_READER_VERIFICATION_KEY**) '{"address": $address, "verification_key": $verification_key}' (the **YOUR_ERA_READER_ADDRESS** and **YOUR_ERA_READER_VERIFICATION_KEY** are values provided in the networks configuration matrix)

    Here is the configuration values that should be used on pre-release-preview:

    ERA_READER_ADAPTER_TYPE=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address":"addr_test1qrv5xfwh043mlc3vk5d97s4nmhxu7cmleyssvhx37gkfyejfe8d38v3vsfgetjafgrsdc49krug8wf04h5rmtengtejqlxrksk","verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}

    Here is the configuration values that should be used on release-preprod:

    ERA_READER_ADAPTER_TYPE=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address":"addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx","verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}

    All theses information will be available at the updated Run a Mithril Signer node (SPO) guide.

    Here is a schema that illustrates the era switch behavior: Era Switch Schema

    More information is also available at this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/era-switch/index.html b/doc/dev-blog/tags/era-switch/index.html index a3d1338994..007e874152 100644 --- a/doc/dev-blog/tags/era-switch/index.html +++ b/doc/dev-blog/tags/era-switch/index.html @@ -18,14 +18,14 @@ - +

    One post tagged with "era switch"

    View All Tags

    Β· 2 min read

    Update 2023/03/10: The Era Switch behavior has been activated on the release-preprod network.

    Update 2023/03/08: The Era Switch behavior has been activated on the pre-release-preview network.

    An new Era Switch behavior will be introduced soon to the Mithril networks​

    Epic: Implement eras behavior switch #707](Implement eras behavior switch #707

    ⚠️ The Era Switch is not deployed yet to the pre-release-preview and release-preprod network. A special announcement will be made on the moria Discord channel when a new release candidate distribution is ready.

    In order to guarantee that any breaking change of the Mithril nodes does not break the Certificate Chain and the that new snapshots are consistently produced, the Mithril team has developped an Era Switch Behavior. This mechanism enables to embed new features in the signer and aggregator nodes prior ro releasing them. Also the activation of these new features will take place in a coordinated manner: all the eligible nodes will hot switch to a new era at the same Cardano epoch transition. To do so, the nodes rely on a transaction that is stored on the Cardano chain that provides era markers with the associated activations epochs for the eras.

    πŸ”₯ Activating this feature will require an update of configuration of the signer nodes after updating their binary:

    • The ERA_READER_ADAPTER_TYPE env var must be set to cardano-chain
    • The ERA_READER_ADAPTER_PARAMS env var must be set to the result of the command jq -nc --arg address $(wget -q -O - **YOUR_ERA_READER_ADDRESS**) --arg verification_key $(wget -q -O - **YOUR_ERA_READER_VERIFICATION_KEY**) '{"address": $address, "verification_key": $verification_key}' (the **YOUR_ERA_READER_ADDRESS** and **YOUR_ERA_READER_VERIFICATION_KEY** are values provided in the networks configuration matrix)

    Here is the configuration values that should be used on pre-release-preview:

    ERA_READER_ADAPTER_TYPE=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address":"addr_test1qrv5xfwh043mlc3vk5d97s4nmhxu7cmleyssvhx37gkfyejfe8d38v3vsfgetjafgrsdc49krug8wf04h5rmtengtejqlxrksk","verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}

    Here is the configuration values that should be used on release-preprod:

    ERA_READER_ADAPTER_TYPE=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address":"addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx","verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}

    All theses information will be available at the updated Run a Mithril Signer node (SPO) guide.

    Here is a schema that illustrates the era switch behavior: Era Switch Schema

    More information is also available at this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/era/index.html b/doc/dev-blog/tags/era/index.html index 665cfe2519..6a48fc9b53 100644 --- a/doc/dev-blog/tags/era/index.html +++ b/doc/dev-blog/tags/era/index.html @@ -18,14 +18,14 @@ - +

    One post tagged with "era"

    View All Tags

    Β· 2 min read

    Update 2023/03/10: The Era Switch behavior has been activated on the release-preprod network.

    Update 2023/03/08: The Era Switch behavior has been activated on the pre-release-preview network.

    An new Era Switch behavior will be introduced soon to the Mithril networks​

    Epic: Implement eras behavior switch #707](Implement eras behavior switch #707

    ⚠️ The Era Switch is not deployed yet to the pre-release-preview and release-preprod network. A special announcement will be made on the moria Discord channel when a new release candidate distribution is ready.

    In order to guarantee that any breaking change of the Mithril nodes does not break the Certificate Chain and the that new snapshots are consistently produced, the Mithril team has developped an Era Switch Behavior. This mechanism enables to embed new features in the signer and aggregator nodes prior ro releasing them. Also the activation of these new features will take place in a coordinated manner: all the eligible nodes will hot switch to a new era at the same Cardano epoch transition. To do so, the nodes rely on a transaction that is stored on the Cardano chain that provides era markers with the associated activations epochs for the eras.

    πŸ”₯ Activating this feature will require an update of configuration of the signer nodes after updating their binary:

    • The ERA_READER_ADAPTER_TYPE env var must be set to cardano-chain
    • The ERA_READER_ADAPTER_PARAMS env var must be set to the result of the command jq -nc --arg address $(wget -q -O - **YOUR_ERA_READER_ADDRESS**) --arg verification_key $(wget -q -O - **YOUR_ERA_READER_VERIFICATION_KEY**) '{"address": $address, "verification_key": $verification_key}' (the **YOUR_ERA_READER_ADDRESS** and **YOUR_ERA_READER_VERIFICATION_KEY** are values provided in the networks configuration matrix)

    Here is the configuration values that should be used on pre-release-preview:

    ERA_READER_ADAPTER_TYPE=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address":"addr_test1qrv5xfwh043mlc3vk5d97s4nmhxu7cmleyssvhx37gkfyejfe8d38v3vsfgetjafgrsdc49krug8wf04h5rmtengtejqlxrksk","verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}

    Here is the configuration values that should be used on release-preprod:

    ERA_READER_ADAPTER_TYPE=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address":"addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx","verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}

    All theses information will be available at the updated Run a Mithril Signer node (SPO) guide.

    Here is a schema that illustrates the era switch behavior: Era Switch Schema

    More information is also available at this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/genesis/index.html b/doc/dev-blog/tags/genesis/index.html index f9f46736c3..9deb58e58e 100644 --- a/doc/dev-blog/tags/genesis/index.html +++ b/doc/dev-blog/tags/genesis/index.html @@ -18,13 +18,13 @@ - +

    One post tagged with "genesis"

    View All Tags

    Β· 2 min read

    Update: The PR has been merged and the feature is being deployed on the GCP Mithril Aggregator.

    This afternoon, we plan to merge the PR that activates the Genesis Certificate feature on the GCP Mithril Aggregator​

    PR: Implement Real Genesis Certificate #438

    Issue: Bootstrap Certificate Chain w/ Genesis Certificate #364

    This will involve some manual operations that will prevent temporarily the service to be running:

    • We will have to reset the stores of the Snapshots and Certificates. This means that the Mithril Explorer will display a No snapshot available message.

    • The Mithril Signers will have to wait until the next epoch #30 to be able to sign. This means that we should see the first available Snapshot 1 hour after the epoch transition.

    The SPOs that are currently running a Mithril Signer will have to recompile their node in order ot take advantage of the latest improvements (such as the registration of the nodes that will take few minutes instead of few hours). However, the previously compiled node will be able to contribute to signatures.

    In order to restore a Mithril Snapshot, a Mithril Client will now need access to the Genesis Verification Key by adding an environment variable when running: GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_genesis.vkey).

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/hard-fork/index.html b/doc/dev-blog/tags/hard-fork/index.html index cdaf38bdf0..65306edf2e 100644 --- a/doc/dev-blog/tags/hard-fork/index.html +++ b/doc/dev-blog/tags/hard-fork/index.html @@ -18,14 +18,14 @@ - +

    One post tagged with "hard fork"

    View All Tags

    Β· 2 min read

    Update 2023/03/10: The Era Switch behavior has been activated on the release-preprod network.

    Update 2023/03/08: The Era Switch behavior has been activated on the pre-release-preview network.

    An new Era Switch behavior will be introduced soon to the Mithril networks​

    Epic: Implement eras behavior switch #707](Implement eras behavior switch #707

    ⚠️ The Era Switch is not deployed yet to the pre-release-preview and release-preprod network. A special announcement will be made on the moria Discord channel when a new release candidate distribution is ready.

    In order to guarantee that any breaking change of the Mithril nodes does not break the Certificate Chain and the that new snapshots are consistently produced, the Mithril team has developped an Era Switch Behavior. This mechanism enables to embed new features in the signer and aggregator nodes prior ro releasing them. Also the activation of these new features will take place in a coordinated manner: all the eligible nodes will hot switch to a new era at the same Cardano epoch transition. To do so, the nodes rely on a transaction that is stored on the Cardano chain that provides era markers with the associated activations epochs for the eras.

    πŸ”₯ Activating this feature will require an update of configuration of the signer nodes after updating their binary:

    • The ERA_READER_ADAPTER_TYPE env var must be set to cardano-chain
    • The ERA_READER_ADAPTER_PARAMS env var must be set to the result of the command jq -nc --arg address $(wget -q -O - **YOUR_ERA_READER_ADDRESS**) --arg verification_key $(wget -q -O - **YOUR_ERA_READER_VERIFICATION_KEY**) '{"address": $address, "verification_key": $verification_key}' (the **YOUR_ERA_READER_ADDRESS** and **YOUR_ERA_READER_VERIFICATION_KEY** are values provided in the networks configuration matrix)

    Here is the configuration values that should be used on pre-release-preview:

    ERA_READER_ADAPTER_TYPE=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address":"addr_test1qrv5xfwh043mlc3vk5d97s4nmhxu7cmleyssvhx37gkfyejfe8d38v3vsfgetjafgrsdc49krug8wf04h5rmtengtejqlxrksk","verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}

    Here is the configuration values that should be used on release-preprod:

    ERA_READER_ADAPTER_TYPE=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address":"addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx","verification_key":"5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}

    All theses information will be available at the updated Run a Mithril Signer node (SPO) guide.

    Here is a schema that illustrates the era switch behavior: Era Switch Schema

    More information is also available at this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/hybrid-mode/index.html b/doc/dev-blog/tags/hybrid-mode/index.html index 4c56b65c2a..7f6383e9f9 100644 --- a/doc/dev-blog/tags/hybrid-mode/index.html +++ b/doc/dev-blog/tags/hybrid-mode/index.html @@ -18,14 +18,14 @@ - +

    One post tagged with "hybrid-mode"

    View All Tags

    Β· 3 min read

    Update 2022/12/19: The signer registration with declarative PoolId has been decommissioned.

    Update 2022/11/30: The signer registration with declarative PoolId has been deprecated and the certified PoolId is now the stable mode.

    The way the Mithril nodes handle the Certification of the SPOs is evolving​

    PR: New STM registration procedure #433

    Issues: Implement Certification of the Mithril Verification Keys in Signer/Aggregator #455

    We have released a new Mithril Signer Verification Keys Certification mechanism:

    • Mithril Signer nodes running the previous version are still able to interact with the network without any further intervention
    • Mithril Signer nodes that are updated from a previous version must migrate some of their stores
    • This mechanism is experimental and can be activated on demand by the SPOs

    Upgrade a Mithril Signer running a previous version​

    The SPOs need to recompile their Signer node (as in this guide).

    The data stores of the node need to be updated by running the following command:

    # The path to your data stores directory, which defaults to:
    DATA_STORES_DIRECTORY=/opt/mithril/mithril-signer/stores

    # Run this command to upgrade your stores:
    sqlite3 ${DATA_STORES_DIRECTORY}/signer.sqlite3 "UPDATE protocol_initializer SET value = json_object('stm_initializer', json(value), 'kes_signature', null) WHERE json_extract(value, '$.stm_initializer') IS NULL;"

    ⚠️ If you don't update your data stores with this procedure, your node will not be able to register to the Aggregator temporarily. It should then take up to 3 epochs before it is able to successfully register its individual signatures with the Aggregator.

    Hybrid Certification mode in the Mithril network​

    From now, SPOs can either run their node by:

    • Declaring their Cardano PoolId:

      • This is the mode that all nodes were running prior to this release
      • This mode is still the stable mode
      • We intend to deprecate this mode in the near future
    • Certifying their Cardano PoolId:

      • The certification is done by providing the Mithril Signer node with KES Secret Key Path and Operational Certificate Path
      • This is an experimental mode
      • We intend to make this mode the only way of providing a PoolId in the near future
      • These PoolIds will be marked with a Verified Signer green badge in the Mithril Explorer (2 epochs after activating the Certification mode)

    The setup of a Mithril Signer node with these two modes is available in this guide.

    Here is an example of the Verified Signer badge displayed in the Certificate details popin: Verified Signer Badge

    How Keys Certification works​

    We rely on the Cardano KES Keys and Operational Certificate to be able to:

    • Compute automatically the PoolId from a valid Operational Certificate
    • Sign the Mithril Signer Verification Key with the KES Secret Key
    • Verify that the Mithril Signer Verification Key is associated to the owner of the pool

    Keys Certification Schema

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/index.html b/doc/dev-blog/tags/index.html index a05928b242..cf3e021cfb 100644 --- a/doc/dev-blog/tags/index.html +++ b/doc/dev-blog/tags/index.html @@ -18,13 +18,13 @@ - + - + \ No newline at end of file diff --git a/doc/dev-blog/tags/kes-keys/index.html b/doc/dev-blog/tags/kes-keys/index.html index b42fa02cd5..d352fbbd21 100644 --- a/doc/dev-blog/tags/kes-keys/index.html +++ b/doc/dev-blog/tags/kes-keys/index.html @@ -18,14 +18,14 @@ - +

    One post tagged with "kes-keys"

    View All Tags

    Β· 3 min read

    Update 2022/12/19: The signer registration with declarative PoolId has been decommissioned.

    Update 2022/11/30: The signer registration with declarative PoolId has been deprecated and the certified PoolId is now the stable mode.

    The way the Mithril nodes handle the Certification of the SPOs is evolving​

    PR: New STM registration procedure #433

    Issues: Implement Certification of the Mithril Verification Keys in Signer/Aggregator #455

    We have released a new Mithril Signer Verification Keys Certification mechanism:

    • Mithril Signer nodes running the previous version are still able to interact with the network without any further intervention
    • Mithril Signer nodes that are updated from a previous version must migrate some of their stores
    • This mechanism is experimental and can be activated on demand by the SPOs

    Upgrade a Mithril Signer running a previous version​

    The SPOs need to recompile their Signer node (as in this guide).

    The data stores of the node need to be updated by running the following command:

    # The path to your data stores directory, which defaults to:
    DATA_STORES_DIRECTORY=/opt/mithril/mithril-signer/stores

    # Run this command to upgrade your stores:
    sqlite3 ${DATA_STORES_DIRECTORY}/signer.sqlite3 "UPDATE protocol_initializer SET value = json_object('stm_initializer', json(value), 'kes_signature', null) WHERE json_extract(value, '$.stm_initializer') IS NULL;"

    ⚠️ If you don't update your data stores with this procedure, your node will not be able to register to the Aggregator temporarily. It should then take up to 3 epochs before it is able to successfully register its individual signatures with the Aggregator.

    Hybrid Certification mode in the Mithril network​

    From now, SPOs can either run their node by:

    • Declaring their Cardano PoolId:

      • This is the mode that all nodes were running prior to this release
      • This mode is still the stable mode
      • We intend to deprecate this mode in the near future
    • Certifying their Cardano PoolId:

      • The certification is done by providing the Mithril Signer node with KES Secret Key Path and Operational Certificate Path
      • This is an experimental mode
      • We intend to make this mode the only way of providing a PoolId in the near future
      • These PoolIds will be marked with a Verified Signer green badge in the Mithril Explorer (2 epochs after activating the Certification mode)

    The setup of a Mithril Signer node with these two modes is available in this guide.

    Here is an example of the Verified Signer badge displayed in the Certificate details popin: Verified Signer Badge

    How Keys Certification works​

    We rely on the Cardano KES Keys and Operational Certificate to be able to:

    • Compute automatically the PoolId from a valid Operational Certificate
    • Sign the Mithril Signer Verification Key with the KES Secret Key
    • Verify that the Mithril Signer Verification Key is associated to the owner of the pool

    Keys Certification Schema

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/mithril-keys/index.html b/doc/dev-blog/tags/mithril-keys/index.html index 600131bfc6..988bcffd7e 100644 --- a/doc/dev-blog/tags/mithril-keys/index.html +++ b/doc/dev-blog/tags/mithril-keys/index.html @@ -18,14 +18,14 @@ - +

    One post tagged with "mithril-keys"

    View All Tags

    Β· 3 min read

    Update 2022/12/19: The signer registration with declarative PoolId has been decommissioned.

    Update 2022/11/30: The signer registration with declarative PoolId has been deprecated and the certified PoolId is now the stable mode.

    The way the Mithril nodes handle the Certification of the SPOs is evolving​

    PR: New STM registration procedure #433

    Issues: Implement Certification of the Mithril Verification Keys in Signer/Aggregator #455

    We have released a new Mithril Signer Verification Keys Certification mechanism:

    • Mithril Signer nodes running the previous version are still able to interact with the network without any further intervention
    • Mithril Signer nodes that are updated from a previous version must migrate some of their stores
    • This mechanism is experimental and can be activated on demand by the SPOs

    Upgrade a Mithril Signer running a previous version​

    The SPOs need to recompile their Signer node (as in this guide).

    The data stores of the node need to be updated by running the following command:

    # The path to your data stores directory, which defaults to:
    DATA_STORES_DIRECTORY=/opt/mithril/mithril-signer/stores

    # Run this command to upgrade your stores:
    sqlite3 ${DATA_STORES_DIRECTORY}/signer.sqlite3 "UPDATE protocol_initializer SET value = json_object('stm_initializer', json(value), 'kes_signature', null) WHERE json_extract(value, '$.stm_initializer') IS NULL;"

    ⚠️ If you don't update your data stores with this procedure, your node will not be able to register to the Aggregator temporarily. It should then take up to 3 epochs before it is able to successfully register its individual signatures with the Aggregator.

    Hybrid Certification mode in the Mithril network​

    From now, SPOs can either run their node by:

    • Declaring their Cardano PoolId:

      • This is the mode that all nodes were running prior to this release
      • This mode is still the stable mode
      • We intend to deprecate this mode in the near future
    • Certifying their Cardano PoolId:

      • The certification is done by providing the Mithril Signer node with KES Secret Key Path and Operational Certificate Path
      • This is an experimental mode
      • We intend to make this mode the only way of providing a PoolId in the near future
      • These PoolIds will be marked with a Verified Signer green badge in the Mithril Explorer (2 epochs after activating the Certification mode)

    The setup of a Mithril Signer node with these two modes is available in this guide.

    Here is an example of the Verified Signer badge displayed in the Certificate details popin: Verified Signer Badge

    How Keys Certification works​

    We rely on the Cardano KES Keys and Operational Certificate to be able to:

    • Compute automatically the PoolId from a valid Operational Certificate
    • Sign the Mithril Signer Verification Key with the KES Secret Key
    • Verify that the Mithril Signer Verification Key is associated to the owner of the pool

    Keys Certification Schema

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/operational-certificate/index.html b/doc/dev-blog/tags/operational-certificate/index.html index 4901ad56d9..86db436746 100644 --- a/doc/dev-blog/tags/operational-certificate/index.html +++ b/doc/dev-blog/tags/operational-certificate/index.html @@ -18,14 +18,14 @@ - +

    One post tagged with "operational-certificate"

    View All Tags

    Β· 3 min read

    Update 2022/12/19: The signer registration with declarative PoolId has been decommissioned.

    Update 2022/11/30: The signer registration with declarative PoolId has been deprecated and the certified PoolId is now the stable mode.

    The way the Mithril nodes handle the Certification of the SPOs is evolving​

    PR: New STM registration procedure #433

    Issues: Implement Certification of the Mithril Verification Keys in Signer/Aggregator #455

    We have released a new Mithril Signer Verification Keys Certification mechanism:

    • Mithril Signer nodes running the previous version are still able to interact with the network without any further intervention
    • Mithril Signer nodes that are updated from a previous version must migrate some of their stores
    • This mechanism is experimental and can be activated on demand by the SPOs

    Upgrade a Mithril Signer running a previous version​

    The SPOs need to recompile their Signer node (as in this guide).

    The data stores of the node need to be updated by running the following command:

    # The path to your data stores directory, which defaults to:
    DATA_STORES_DIRECTORY=/opt/mithril/mithril-signer/stores

    # Run this command to upgrade your stores:
    sqlite3 ${DATA_STORES_DIRECTORY}/signer.sqlite3 "UPDATE protocol_initializer SET value = json_object('stm_initializer', json(value), 'kes_signature', null) WHERE json_extract(value, '$.stm_initializer') IS NULL;"

    ⚠️ If you don't update your data stores with this procedure, your node will not be able to register to the Aggregator temporarily. It should then take up to 3 epochs before it is able to successfully register its individual signatures with the Aggregator.

    Hybrid Certification mode in the Mithril network​

    From now, SPOs can either run their node by:

    • Declaring their Cardano PoolId:

      • This is the mode that all nodes were running prior to this release
      • This mode is still the stable mode
      • We intend to deprecate this mode in the near future
    • Certifying their Cardano PoolId:

      • The certification is done by providing the Mithril Signer node with KES Secret Key Path and Operational Certificate Path
      • This is an experimental mode
      • We intend to make this mode the only way of providing a PoolId in the near future
      • These PoolIds will be marked with a Verified Signer green badge in the Mithril Explorer (2 epochs after activating the Certification mode)

    The setup of a Mithril Signer node with these two modes is available in this guide.

    Here is an example of the Verified Signer badge displayed in the Certificate details popin: Verified Signer Badge

    How Keys Certification works​

    We rely on the Cardano KES Keys and Operational Certificate to be able to:

    • Compute automatically the PoolId from a valid Operational Certificate
    • Sign the Mithril Signer Verification Key with the KES Secret Key
    • Verify that the Mithril Signer Verification Key is associated to the owner of the pool

    Keys Certification Schema

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/pool-id/index.html b/doc/dev-blog/tags/pool-id/index.html index 60e947a21e..23dd9ae2b0 100644 --- a/doc/dev-blog/tags/pool-id/index.html +++ b/doc/dev-blog/tags/pool-id/index.html @@ -18,14 +18,14 @@ - +

    One post tagged with "poolId"

    View All Tags

    Β· 3 min read

    Update 2022/12/19: The signer registration with declarative PoolId has been decommissioned.

    Update 2022/11/30: The signer registration with declarative PoolId has been deprecated and the certified PoolId is now the stable mode.

    The way the Mithril nodes handle the Certification of the SPOs is evolving​

    PR: New STM registration procedure #433

    Issues: Implement Certification of the Mithril Verification Keys in Signer/Aggregator #455

    We have released a new Mithril Signer Verification Keys Certification mechanism:

    • Mithril Signer nodes running the previous version are still able to interact with the network without any further intervention
    • Mithril Signer nodes that are updated from a previous version must migrate some of their stores
    • This mechanism is experimental and can be activated on demand by the SPOs

    Upgrade a Mithril Signer running a previous version​

    The SPOs need to recompile their Signer node (as in this guide).

    The data stores of the node need to be updated by running the following command:

    # The path to your data stores directory, which defaults to:
    DATA_STORES_DIRECTORY=/opt/mithril/mithril-signer/stores

    # Run this command to upgrade your stores:
    sqlite3 ${DATA_STORES_DIRECTORY}/signer.sqlite3 "UPDATE protocol_initializer SET value = json_object('stm_initializer', json(value), 'kes_signature', null) WHERE json_extract(value, '$.stm_initializer') IS NULL;"

    ⚠️ If you don't update your data stores with this procedure, your node will not be able to register to the Aggregator temporarily. It should then take up to 3 epochs before it is able to successfully register its individual signatures with the Aggregator.

    Hybrid Certification mode in the Mithril network​

    From now, SPOs can either run their node by:

    • Declaring their Cardano PoolId:

      • This is the mode that all nodes were running prior to this release
      • This mode is still the stable mode
      • We intend to deprecate this mode in the near future
    • Certifying their Cardano PoolId:

      • The certification is done by providing the Mithril Signer node with KES Secret Key Path and Operational Certificate Path
      • This is an experimental mode
      • We intend to make this mode the only way of providing a PoolId in the near future
      • These PoolIds will be marked with a Verified Signer green badge in the Mithril Explorer (2 epochs after activating the Certification mode)

    The setup of a Mithril Signer node with these two modes is available in this guide.

    Here is an example of the Verified Signer badge displayed in the Certificate details popin: Verified Signer Badge

    How Keys Certification works​

    We rely on the Cardano KES Keys and Operational Certificate to be able to:

    • Compute automatically the PoolId from a valid Operational Certificate
    • Sign the Mithril Signer Verification Key with the KES Secret Key
    • Verify that the Mithril Signer Verification Key is associated to the owner of the pool

    Keys Certification Schema

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/preprod/index.html b/doc/dev-blog/tags/preprod/index.html index 40003379f0..0d551bae78 100644 --- a/doc/dev-blog/tags/preprod/index.html +++ b/doc/dev-blog/tags/preprod/index.html @@ -18,13 +18,13 @@ - +

    One post tagged with "preprod"

    View All Tags

    Β· 2 min read

    The Mithril environments are updated​

    PR: New hosted environments #561

    Issue: Setup new hosted environments for testing-preview, pre-release-preview and release-preprod) with their terraform and GitHub environments #542

    On Tuesday, November 1st, 2022 the preview Cardano network will be re-spun and will be unavailable for 48h.

    In the mean time, the Mitril team is also implementing a new Release Process that will make use of several new environments.

    The Mithril testing environments are thus evolving in this context:

    • The current testing environment that runs on preview network and that most of the Pioneer SPOs are running is deprecated and will be decommissioned just after the preview network re-spin.

    • This environment will then be replaced by a new pre-release-preview environment open to SPOs that are eager to test pre releases of the Mithril nodes.

    • A new release-preprod environment has been launched on the preprod Cardano nework and will become the stable environment on which SPOs are encouraged to run their nodes.

    • ⚠️ The new release-preprod environment is in unstable status, therefore it is subject to re-genesis. We expect it to be in stable status within 1-2 weeks.

    In the future, when Mithril reaches mainnet, we assume that the release-preprod will be replaced by a release-mainnet environment. This means that we will have the following environments at this time: testing-preview, pre-release-preprod and release-mainnet.

    More information about:

    • The Mithril Networks and their availability here.

    • The Release Process is available in this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/preview/index.html b/doc/dev-blog/tags/preview/index.html index 8fc426ff55..76c0a96a05 100644 --- a/doc/dev-blog/tags/preview/index.html +++ b/doc/dev-blog/tags/preview/index.html @@ -18,13 +18,13 @@ - +

    One post tagged with "preview"

    View All Tags

    Β· 2 min read

    The Mithril environments are updated​

    PR: New hosted environments #561

    Issue: Setup new hosted environments for testing-preview, pre-release-preview and release-preprod) with their terraform and GitHub environments #542

    On Tuesday, November 1st, 2022 the preview Cardano network will be re-spun and will be unavailable for 48h.

    In the mean time, the Mitril team is also implementing a new Release Process that will make use of several new environments.

    The Mithril testing environments are thus evolving in this context:

    • The current testing environment that runs on preview network and that most of the Pioneer SPOs are running is deprecated and will be decommissioned just after the preview network re-spin.

    • This environment will then be replaced by a new pre-release-preview environment open to SPOs that are eager to test pre releases of the Mithril nodes.

    • A new release-preprod environment has been launched on the preprod Cardano nework and will become the stable environment on which SPOs are encouraged to run their nodes.

    • ⚠️ The new release-preprod environment is in unstable status, therefore it is subject to re-genesis. We expect it to be in stable status within 1-2 weeks.

    In the future, when Mithril reaches mainnet, we assume that the release-preprod will be replaced by a release-mainnet environment. This means that we will have the following environments at this time: testing-preview, pre-release-preprod and release-mainnet.

    More information about:

    • The Mithril Networks and their availability here.

    • The Release Process is available in this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/process/index.html b/doc/dev-blog/tags/process/index.html index 5ee3454002..e060a9baae 100644 --- a/doc/dev-blog/tags/process/index.html +++ b/doc/dev-blog/tags/process/index.html @@ -18,13 +18,13 @@ - +

    One post tagged with "process"

    View All Tags

    Β· 4 min read

    Mithril follows a defined release process​

    As the Mithril project grew and more and more SPOs became involved in testing Mithril, it became obvious we need clearer identification of artifacts running on various parts of the network. Moreover, on our road towards mainnet availability we'll need to strengthen our testing process in order to validate Mithril network on more realistic environments.

    Release Process​

    We want our release process to follow some basic principles:

    • Continuous Integration: New code is integrated into the main codeline frequently which triggers automated build and test process.
    • Continuous Deployment: New artifacts produced by the build process are continuously deployed to a suitable environment where it can be used and tested by an increasing number of parties.
    • Deployment Pipeline: The deployment process is embodied in a pipeline that describes and implements all the necessary steps to release a new version of Mithril.
    • Artifact Promotion: An artifact is built once and only once and is promoted while travelling through the build pipeline.

    Here is a high-level picture of this process:

    Release Process

    • We will use a custom version based on SemVer for all the crates, binaries and containers of the repository and for the GitHub release.
    • We release a new distribution every 2 weeks (this duration is subject to changes as the project matures)
      • The released version is named after the year and its week number: YYWW.patch (e.g. 2250.0).
      • In case of critical regressions happening in production, a patch version will be released in between "official" releases as a hotfix.
    • A new version YYWW.0 will have the following life cycle:
      • A commit abc123 merged on main branch is deployed on the network named testing-preview.
      • A commit def456 tagged with YYWW.0-prerelease is deployed on the network named pre-release-preview.
      • A GitHub release YYWW.0-prerelease is created and linked with the YYWW.0-prerelease tag and marked as pre-release.
      • A tag YYWW.0-prerelease is qualified and selected for release or rejected (and replaced by a YYWW.1-prerelease tag if necessary on a fed789).
      • If the tag YYWW.0-prerelease is selected, a new tag is created and name YYWW.0 on the same commit def456.
      • A GitHub release YYWW.0 is created and linked to the YYWW.0 tag and marked as release.
      • The commit def456 with tag YYWW.0 is deployed to the network named release-preprod.
    • The Cargo.toml versions of the crates are updated (if required) just before creating the YYWW.0-prerelease tag .
    • The documentation website is also updated at the same time where the next version becomes the current version, leaving future updates be appended to the next version during the upcoming developments.
    • In order to simplify the life of Mithril users, we have introduced a version of the Mithril API used between client/signer and aggregators to check if the nodes are able to communicate together (following semver and considering the versions are compatible only if they share the same minor).
    • Our main distribution artefact is currently docker (OCI) images. We also provide more packages, eg. .deb packages or compiled binaries (some of them available on multiple platforms, e.g. Windows or macOS) to simplify users' life.
    • We also publish some of our crates on the crates.io registry whenever a new version is created (e.g. mithril-stm).

    Networks​

    • We maintain different Mithril networks (eg. servers, VMs, configurations...) to which artifacts are deployed at various stages of the process:
      • testing-preview: This is an internal environment based on the preview cardano testnet where most of the automated tests happen. It is also used to test features as soon as they are merged on the main branch.
      • pre-release-preview: This is a persistent environment based on the preview cardano testnet. SPOs which are active on preview are welcomed to take part in the Mithril signing process and to test new pre-release distributions deployed there.
      • release-preprod: Another persistent environment, based on the preprod cardano testnet, where more SPOs are expected to join and test, updated less frequently (on actual release distributions).
      • (LATER) mainnet: Production environment where new releases are deployed once qualifed on release-preprod.

    Further Reading​

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/re-spin/index.html b/doc/dev-blog/tags/re-spin/index.html index 5d57173dd4..bc6ca47836 100644 --- a/doc/dev-blog/tags/re-spin/index.html +++ b/doc/dev-blog/tags/re-spin/index.html @@ -18,13 +18,13 @@ - +

    One post tagged with "re-spin"

    View All Tags

    Β· 2 min read

    The Mithril environments are updated​

    PR: New hosted environments #561

    Issue: Setup new hosted environments for testing-preview, pre-release-preview and release-preprod) with their terraform and GitHub environments #542

    On Tuesday, November 1st, 2022 the preview Cardano network will be re-spun and will be unavailable for 48h.

    In the mean time, the Mitril team is also implementing a new Release Process that will make use of several new environments.

    The Mithril testing environments are thus evolving in this context:

    • The current testing environment that runs on preview network and that most of the Pioneer SPOs are running is deprecated and will be decommissioned just after the preview network re-spin.

    • This environment will then be replaced by a new pre-release-preview environment open to SPOs that are eager to test pre releases of the Mithril nodes.

    • A new release-preprod environment has been launched on the preprod Cardano nework and will become the stable environment on which SPOs are encouraged to run their nodes.

    • ⚠️ The new release-preprod environment is in unstable status, therefore it is subject to re-genesis. We expect it to be in stable status within 1-2 weeks.

    In the future, when Mithril reaches mainnet, we assume that the release-preprod will be replaced by a release-mainnet environment. This means that we will have the following environments at this time: testing-preview, pre-release-preprod and release-mainnet.

    More information about:

    • The Mithril Networks and their availability here.

    • The Release Process is available in this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/release-process/index.html b/doc/dev-blog/tags/release-process/index.html index d3f2b0c055..fb532c20d2 100644 --- a/doc/dev-blog/tags/release-process/index.html +++ b/doc/dev-blog/tags/release-process/index.html @@ -18,13 +18,13 @@ - +

    One post tagged with "release-process"

    View All Tags

    Β· 2 min read

    The Mithril environments are updated​

    PR: New hosted environments #561

    Issue: Setup new hosted environments for testing-preview, pre-release-preview and release-preprod) with their terraform and GitHub environments #542

    On Tuesday, November 1st, 2022 the preview Cardano network will be re-spun and will be unavailable for 48h.

    In the mean time, the Mitril team is also implementing a new Release Process that will make use of several new environments.

    The Mithril testing environments are thus evolving in this context:

    • The current testing environment that runs on preview network and that most of the Pioneer SPOs are running is deprecated and will be decommissioned just after the preview network re-spin.

    • This environment will then be replaced by a new pre-release-preview environment open to SPOs that are eager to test pre releases of the Mithril nodes.

    • A new release-preprod environment has been launched on the preprod Cardano nework and will become the stable environment on which SPOs are encouraged to run their nodes.

    • ⚠️ The new release-preprod environment is in unstable status, therefore it is subject to re-genesis. We expect it to be in stable status within 1-2 weeks.

    In the future, when Mithril reaches mainnet, we assume that the release-preprod will be replaced by a release-mainnet environment. This means that we will have the following environments at this time: testing-preview, pre-release-preprod and release-mainnet.

    More information about:

    • The Mithril Networks and their availability here.

    • The Release Process is available in this ADR.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/sqlite/index.html b/doc/dev-blog/tags/sqlite/index.html index fab78de136..46990cc708 100644 --- a/doc/dev-blog/tags/sqlite/index.html +++ b/doc/dev-blog/tags/sqlite/index.html @@ -18,13 +18,13 @@ - +

    One post tagged with "sqlite"

    View All Tags

    Β· 4 min read

    What is that?​

    Since almost the beginning of the Mithril project, the software used to rely on a store mechanism to save its different states allowing Signers and Aggregators to resume on correct state when switched on and off. This internal store mechanism used to be a bunch of JSON files saved in a given directory. Even though this does the job it still presents flaws: data are hard to query when debugging especially when crossing data (which signers have participated in this multi-signature?). Also, data are stored in different places which can be a problem when moving these files from one place to another. We also had to imagine what would be a migration scenario in case of a structure change. Switching to a file based SQL database solves these issues.

    The new release now uses SQLite stores in place of JSON file storage. This means that to continue running a Signer or an Aggregator node it is necessary to migrate from the old storage system to SQLite. This release comes with a tool to perform the migration which should be as straightforward as launching a command line (read below). The migration tool will be available only for a limited time in order to make Mithril beta testers able to migrate their existing data.

    How to migrate data from old storage system to SQLite stores?​

    There are 2 ways of getting the new version and the associated migration tool. Either downloading binaries from GitHub or compiling them yourself.

    Downloading​

    Download the new mithril-signer and mithril-signer-migrate files from the nightly builds page. Make them executable:

    $> chmod +x mithril-signer*
    $> ls -1F mithril-signer*
    mithril-signer*
    mithril-signer-migrate*

    note: the suffix * appended to the the entries output above indicates the file is executable. If it is not present, ensure the chmod command does not produce any error.

    Compiling​

    If you used to compile your node as stated in the guide, you have to compile the migration tool as well:

    $> cd mithril-signer
    $> cargo build --all-targets --release
    Compiling mithril-signer v0.1.0 (/home/somebody/shared/mithril/mithril-signer)
    Finished release [optimized] target(s) in 4.56s
    $> ls -1F ../target/release/mithril-signer*
    ../target/release/mithril-signer*
    ../target/release/mithril-signer.d
    ../target/release/mithril-signer-migrate*
    ../target/release/mithril-signer-migrate.d

    Running the migration​

    The first step is to stop the running Mithril node if any. The mithril-signer-migrate executable can perform the migration automatically once you know where your actual JSON files are located. Have a look in your configuration file (default /opt/mithril/mithril-signer/service.env), check the value associated with the DATA_STORES_DIRECTORY key (default to /opt/mithril/mithril-signer/stores) and copy the path indicated here. Copy this path after the --db-dir option on the following command line:

    $> ./mithril-signer-migrate automatic --db-dir /paste/the/data/stores/directory/here
    Mithril Aggregator JSON β†’ SQLite migration tool.
    Migrating protocol_initializer_store data…
    OK βœ“
    Migrating stake_store data…
    OK βœ“

    At the end of this command, a file signer.sqlite3 (or aggregator.sqlite3 if you run an Aggregator) should be present in the specified base directory.

    That should be enough, launch your upgraded mithril node.

    Note: The migration executable does not remove the old JSON files from the disk.

    Manual migration process​

    The executable also provides a manual switch for migrating Mithril JSON store directories placed in custom directories. This is mainly intended for developers who work on tweaked environments. Each internal store has its own data structure. In order to correctly migrate and process data, the type of the store has to be given on the command line.

    $> ./mithril-signer-migrate manual --help

    The command above should give you all informations needed to run a custom store migration.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/stake-distribution/index.html b/doc/dev-blog/tags/stake-distribution/index.html index 3a72600629..66e3f312c6 100644 --- a/doc/dev-blog/tags/stake-distribution/index.html +++ b/doc/dev-blog/tags/stake-distribution/index.html @@ -18,14 +18,14 @@ - +

    One post tagged with "stake-distribution"

    View All Tags

    Β· 2 min read

    Update: The Stake Distribution computation is evolving with the release of Cardano node 8.0.0: the computation now relies on the new cardano-cli query stake-snapshot --all-stake-pools command that retrieves the Stake Distribution all at once and that is way faster. Prior versions of the Cardano node 1.35+ are backward compatible and will keep implementing the algorithm detailed below.

    The way the Mithril nodes retrieve the Stake Distribution is changing​

    PR: Fix Stake Distribution retrieval #499

    Issue: Stake distribution discrepancy #497

    We have noticed that the way the Mithril nodes computed the Stake Distribution was erroneous: the epoch that was used to make the computation was the current epoch instead of the previous epoch. This has lead to some de-synchronization between the Signers and the hosted GCP Aggregator for a few epochs.

    Indeed, the Stake Distribution retrieved from the Cardano node depended on the time at which it was done: the nodes where having differents values that prevented them from being able to work together to produce valid multi-signatures. The problem is related to the epoch that is used (current epoch) to make the computation of the Stake Distribution when the cardano-cli query stake-distribution command is ran, whereas the Mithril protocol needs to work with the previous epoch.

    A workaround is being implemented in this fix that will compute differently the Stake Distribution to target the previous epoch. To do so, the Stake value that is now retrieved sequentially for each pool available in the cardano-cli query stake-distribution by using the command cardano-cli query stake-snapshot --stake-pool-id **pool-id*. This guarantees that the Stake Distribution is computed deterministically on all nodes of the Mithril Network.

    We will continue our efforts to enhance the way the Stake Distribution is retrieved in the future, and so that it works smoothly on the mainnet (where the numbers of pools is bigger ~3,000 vs ~100 on the preview network).

    The SPOs need to recompile their Signer node in order to compute correctly the Stake Distributions on their node (as in this guide). It should then take up to 2 epochs before they are able to successfully register their individual signatures with the Aggregator.

    More information about the Certificate Chain and the epochs retrieval requirements is available here.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/dev-blog/tags/store/index.html b/doc/dev-blog/tags/store/index.html index 530a3ee037..e124f738b0 100644 --- a/doc/dev-blog/tags/store/index.html +++ b/doc/dev-blog/tags/store/index.html @@ -18,13 +18,13 @@ - +

    One post tagged with "store"

    View All Tags

    Β· 4 min read

    What is that?​

    Since almost the beginning of the Mithril project, the software used to rely on a store mechanism to save its different states allowing Signers and Aggregators to resume on correct state when switched on and off. This internal store mechanism used to be a bunch of JSON files saved in a given directory. Even though this does the job it still presents flaws: data are hard to query when debugging especially when crossing data (which signers have participated in this multi-signature?). Also, data are stored in different places which can be a problem when moving these files from one place to another. We also had to imagine what would be a migration scenario in case of a structure change. Switching to a file based SQL database solves these issues.

    The new release now uses SQLite stores in place of JSON file storage. This means that to continue running a Signer or an Aggregator node it is necessary to migrate from the old storage system to SQLite. This release comes with a tool to perform the migration which should be as straightforward as launching a command line (read below). The migration tool will be available only for a limited time in order to make Mithril beta testers able to migrate their existing data.

    How to migrate data from old storage system to SQLite stores?​

    There are 2 ways of getting the new version and the associated migration tool. Either downloading binaries from GitHub or compiling them yourself.

    Downloading​

    Download the new mithril-signer and mithril-signer-migrate files from the nightly builds page. Make them executable:

    $> chmod +x mithril-signer*
    $> ls -1F mithril-signer*
    mithril-signer*
    mithril-signer-migrate*

    note: the suffix * appended to the the entries output above indicates the file is executable. If it is not present, ensure the chmod command does not produce any error.

    Compiling​

    If you used to compile your node as stated in the guide, you have to compile the migration tool as well:

    $> cd mithril-signer
    $> cargo build --all-targets --release
    Compiling mithril-signer v0.1.0 (/home/somebody/shared/mithril/mithril-signer)
    Finished release [optimized] target(s) in 4.56s
    $> ls -1F ../target/release/mithril-signer*
    ../target/release/mithril-signer*
    ../target/release/mithril-signer.d
    ../target/release/mithril-signer-migrate*
    ../target/release/mithril-signer-migrate.d

    Running the migration​

    The first step is to stop the running Mithril node if any. The mithril-signer-migrate executable can perform the migration automatically once you know where your actual JSON files are located. Have a look in your configuration file (default /opt/mithril/mithril-signer/service.env), check the value associated with the DATA_STORES_DIRECTORY key (default to /opt/mithril/mithril-signer/stores) and copy the path indicated here. Copy this path after the --db-dir option on the following command line:

    $> ./mithril-signer-migrate automatic --db-dir /paste/the/data/stores/directory/here
    Mithril Aggregator JSON β†’ SQLite migration tool.
    Migrating protocol_initializer_store data…
    OK βœ“
    Migrating stake_store data…
    OK βœ“

    At the end of this command, a file signer.sqlite3 (or aggregator.sqlite3 if you run an Aggregator) should be present in the specified base directory.

    That should be enough, launch your upgraded mithril node.

    Note: The migration executable does not remove the old JSON files from the disk.

    Manual migration process​

    The executable also provides a manual switch for migrating Mithril JSON store directories placed in custom directories. This is mainly intended for developers who work on tweaked environments. Each internal store has its own data structure. In order to correctly migrate and process data, the type of the store has to be given on the command line.

    $> ./mithril-signer-migrate manual --help

    The command above should give you all informations needed to run a custom store migration.

    Feel free to reach out to us on the Discord channel for questions and/or help.

    - + \ No newline at end of file diff --git a/doc/glossary/index.html b/doc/glossary/index.html index f76c6dfe50..ded84feedc 100644 --- a/doc/glossary/index.html +++ b/doc/glossary/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    Glossary

    Here is a comprehensive list of definitions for some common terms used in this guide.

    Beacon​

    A Beacon represents a point of the Blockchain for which a Mithril Certificate is created. It embeds at least the version of the Cardano Network that is targeted, and the associated epoch and immutable file number.

    Cardano Network​

    The Cardano Network is a Proof-of-Stake Blockchain platform that supports the ADA cryptocurrency.

    More information is available here

    Cardano Node​

    A Cardano Node is a node that runs in a Cardano Network. There are several types of nodes, among them are Cardano Full Nodes that hold a copy of the whole Blockchain. They can be used by Wallets, Stake Pool Operator, Exchanges or Dapps. One of the use cases of the Mithril Network is to bootsrap rapidly a Cardano Full Node.

    Cardano Key Pair​

    A Cardano Key Pair is an asymmetric key pair used to identify a Stake Pool Operator on the Cardano Network.

    Certificate​

    The Mithril Aggregator combines the produced multi signature and some metadata into a Mithril Certificate that will be later used by the Mithril Client to verify the authenticity of a snapshot. The certificates are chained so that the stake distribution used to create the signatures is verifiably genuine.

    More information is available here

    Epoch​

    The Cardano Network uses Epochs to group blocks computed in a certain amount of time (approximately 5 days). It is part of the design of its Proof-of-Stake consensus Ouroboros. At the end of each epoch, the stake distribution of the ending epoch is computed.

    Immutable File Number​

    Inside a the database of a Cardano Node, the Blockchain state is stored in Immutable files which never change once committed. These immutable files are designed so that they are deterministically produced and thus are the same on any Cardano Node. These files are created by following an incremental number, the Immutable File Number and there are three different immutable files for each number (i.e. chunk, primary and secondary). Only the files up to the penultimate Immutable File Number are considered as committed and final, the last Immutable File Number files are constantly evolving. The Snapshots produced by the Mithril Network rely on these immutable files.

    Individual Signature​

    For each Beacon, the Mithril Signers will compute on their end a message representing the Blockchain state, and sign it with their Verification Keys in order to create an Individual Signature. Upon winning one or multiple lotteries, the Mithril Signer will be able to use this Individual Signature to participate in the creation of a Multi Signature.

    More information is available here

    Mithril Aggregator​

    The Mithril Aggregator is a trustless node of the Mithril Network that orchestrates the work of the Mithril Signer nodes and that gathers their individual signatures to produce Mithril multi signatures and their associated certificates.

    It is also in charge of creating and storing the snapshot archive.

    More information is available here

    Mithril Client​

    The Mithril Client node of the Mithril Network is used to restore a Cardano full node by retrieving, from a Mithril Aggregator, a remote snapshot, its certificate chain and by verifying their validity thanks to the Mithril cryptographic primitives.

    More information is available here

    Mithril Network​

    In its current version, the Mithril Network is a network of nodes responsible for creating Snapshots and Certificates that enable fast bootstrap of a Cardano Node. It runs on top of the Cardano Network.

    More information is available here

    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 stakes.

    More information is available here

    Mithril Signer​

    The Mithril Signer is a node of the Mithril Network that works transparently on top of the Stake Pool Operator Cardano nodes and which individually signs the ledger state.

    More information is available here

    Multi Signature​

    The Mithril Multi Signature is an aggregate of Individual Signatures which guarantees that a minimum share of the total stakes has participated in its creation.

    More information is available here

    Snapshot​

    A Mithril Snapshot is a signed archive of the Blockchain state that can be used by Mithril Clients to restore a Cardano Full Node. It is uniquely identified by its fingerprint or Digest which is part of the message signed by the Mithril Network.

    Stake Distribution​

    The Cardano Stake Distribution is the list of all the Stake Pool Operators Pool Id addresses and their associated Stakes Share of the total Stakes of the Cardano Network.

    The Mithril Stake Distribution is the list of all the Stake Pool Operators (that are running a Mithril Signer) Pool Id addresses, their associated Stakes Share of the total Stakes of the Cardano Network, and their signing Verification Key.

    Stake Pool Operator (SPO)​

    A Stake Pool Operator, also known as a SPO, represents a party that holds (via delegation) Stakes in the Cardano Network. The stakes entitle it to participate in the block production thanks to the Cardano consensus mechanism.

    Verification Key​

    In order to create Individual Signatures, the Mithril Signers must register their signing public key: the Verification Keys. To garantee their genuineness, they are signed by the associated Cardano Key Pair. It is worth mentioning that a Mithril Signer must be aware of the Verification Keys of all the other Mithril Signers in order to produce valid Individual Signatures.

    More information is available here

    - + \ No newline at end of file diff --git a/doc/index.html b/doc/index.html index c5da4d56ec..8d4c18b9bc 100644 --- a/doc/index.html +++ b/doc/index.html @@ -18,13 +18,13 @@ - +

    Mithril. A complete guide.

    Explore the user manual, key concepts, and API reference

    - + \ No newline at end of file diff --git a/doc/manual/developer-docs/nodes/mithril-aggregator/index.html b/doc/manual/developer-docs/nodes/mithril-aggregator/index.html index bdc8c3a8f3..44799268b2 100644 --- a/doc/manual/developer-docs/nodes/mithril-aggregator/index.html +++ b/doc/manual/developer-docs/nodes/mithril-aggregator/index.html @@ -18,7 +18,7 @@ - + @@ -27,7 +27,7 @@ This allows the Mithril Aggregator node to bootstrap a Genesis Certificate. After this operation, the Mithril Aggregator will be able to produce new snapshots and certificates.

    ./mithril-aggregator genesis bootstrap

    Or with a specific Genesis Secret Key, only in test mode.

    ./mithril-aggregator genesis bootstrap --genesis-secret-key **YOUR_SECRET_KEY*

    Run 'genesis export' command in release with default configuration. This allows the Mithril Aggregator node to export the Genesis Payload that needs to be signed (and later reimported) of the Genesis Certificate. The signature of the Genesis Payload must be done manually with the owner of the Genesis Secret Key.

    ./mithril-aggregator genesis export

    Or with a custom export path (to override the default value ./mithril-genesis-payload.txt)

    ./mithril-aggregator genesis export --target-path **YOUR_TARGET_PATH**

    Run 'genesis import' command in release with default configuration. This allows the Mithril Aggregator node to import the signed payload of the Genesis Certificate and create it in the store. After this operation, the Mithril Aggregator will be able to produce new snapshots and certificates.

    ./mithril-aggregator genesis import

    Or with a custom export path (to override the default value ./mithril-genesis-signed-payload.txt)

    ./mithril-aggregator genesis import --signed-payload-path **YOUR_SIGNED_PAYLOAD_PATH**

    Run 'genesis import' command in release with a custom configuration via env vars

    GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**) RUN_INTERVAL=60000 NETWORK=**YOUR_CARDANO_NETWORK** ./mithril-aggregator genesis import

    Release build and run binary 'era' command​

    Build in release with default configuration

    make build

    Display the help menu

    ./mithril-aggregator era --help

    You should see

    Era tools

    Usage: mithril-aggregator era <COMMAND>

    Commands:
    list Era list command
    generate-tx-datum Era tx datum generate command
    help Print this message or the help of the given subcommand(s)

    Options:
    -h, --help Print help

    Run 'era list' to list the supported eras embedded in the binary

    ./mithril-aggregator era list

    You should see something like

    Supported Eras:
    [
    Thales,
    ]
    tip

    You can use the --json option in order to display results in JSON format for the list command:

    ./mithril-aggregator era list --json

    You should see something like

    ["thales"]

    Run 'era generate-tx-datum' to generate the transaction datum file to be stored on the Cardano chain that will provide era markers to the 'cardano-chain' era reader adapter

    Case 1: There is only one supported era in the code, create the datum file with

    ./mithril-aggregator era generate-tx-datum --current-era-epoch **EPOCH_AT_WHICH_CURRENT_ERA_STARTS** --era-markers-secret-key **YOUR_ERA_ACTIVATION_SECRET_KEY**

    You should see something like

    {"constructor":0,"fields":[{"bytes":"5b7b226e223a227468616c6573222c2265223a317d5d"},{"bytes":"a58fe8e336f465ded3bba7c5a7afe5b5a26f2fb65b7c4e6e742e680645f13df28bf2b63a61cc72d9c826be490e2c1f1098d955df503580a4e899b5173884e30e"}]}

    Case 2: There are two supported era in the code, in order to announce the upcoming era (i.e. the activation epoch of this era is not known yet), run the command

    ./mithril-aggregator era generate-tx-datum --current-era-epoch **EPOCH_AT_WHICH_CURRENT_ERA_STARTS** --era-markers-secret-key **YOUR_ERA_ACTIVATION_SECRET_KEY**

    Case 3: There are two supported era in the code, in order to activate the era switch at a following epoch (i.e. the activation epoch of this era known), run the command

    ./mithril-aggregator era generate-tx-datum --current-era-epoch **EPOCH_AT_WHICH_CURRENT_ERA_STARTS** --next-era-epoch **EPOCH_AT_WHICH_NEXT_ERA_STARTS** --era-markers-secret-key **YOUR_ERA_ACTIVATION_SECRET_KEY**
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Aggregator:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Build and run Docker container​

    Build a local Docker image

    make docker-build

    Run a local Docker container

    make docker-run

    Subcommands​

    Here are the subcommands available:

    SubcommandPerformed action
    serveAggregator runs its HTTP server in nominal mode and orchestrates multi signatures production
    helpPrint this message or the help of the given subcommand(s)
    genesis exportExport genesis payload to sign with genesis secret key
    genesis importImport genesis signature (payload signed with genesis secret key) and create & import a genesis certificate in the store
    genesis bootstrapBootstrap a genesis certificate (test only usage)
    era listList the supported eras
    era generate-tx-datumGenerate era markers transaction datum to be stored on chain

    Configuration parameters​

    The configuration parameters are set either:

    • In a configuration file (depending on the --run-mode parameter). If runtime mode is testnet the file is located in ./conf/testnet.json.
    • The value can be overridden by an environment variable whose name is the parameter name uppercased.

    Here is a list of the available parameters.

    General parameters:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    cardano_cli_path--CARDANO_CLI_PATHCardano CLI tool path-cardano-cliβœ”οΈ
    cardano_node_socket_path--CARDANO_NODE_SOCKET_PATHPath of the socket used by the Cardano CLI tool to communicate with the Cardano node-/tmp/cardano.sockβœ”οΈ
    config_directory--config-directory--Directory of the configuration file./config--
    data_stores_directory--data_stores_directoryDirectory to store Aggregator data (Certificates, Snapshots, Protocol Parameters, ...)-./mithril-aggregator/storesβœ”οΈ
    db_directory--db-directory-DB_DIRECTORYDirectory of the Cardano Node stores/db-βœ”οΈ
    genesis_verification_key--GENESIS_VERIFICATION_KEYGenesis verification key--βœ”οΈ
    network--NETWORKCardano network-testnet or mainnet or devnetβœ”οΈ
    network_magic--NETWORK_MAGICCardano Network Magic number (for testnet and devnet)-1097911063 or 42-
    protocol_parameters--PROTOCOL_PARAMETERS__K, PROTOCOL_PARAMETERS__M, and PROTOCOL_PARAMETERS__PHI_FMithril Protocol Parameters-{ k: 5, m: 100, phi_f: 0.65 }βœ”οΈ
    run_mode--run-mode-rRUN_MODERuntime modedev-βœ”οΈ
    store_retention_limit--STORE_RETENTION_LIMITMaximum number of records in stores. If not set, no limit is set.---
    verbose--verbose-vVERBOSEVerbosity level-Parsed from number of occurrences: -v for Warning, -vv for Info, -vvv for Debug and -vvvv for Traceβœ”οΈ

    serve command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    server_ip--server-ip-SERVER_IPListening server IP0.0.0.0-βœ”οΈ
    server_port--server-port-SERVER_PORTListening server port8080-βœ”οΈ
    snapshot_directory--snapshot-directory-SNAPSHOT_DIRECTORYDirectory to store local snapshots of the Cardano Node.-βœ”οΈ
    snapshot_store_type--SNAPSHOT_STORE_TYPEType of snapshot store to use-gcp or localβœ”οΈ
    snapshot_uploader_type--SNAPSHOT_UPLOADER_TYPEType of snapshot uploader to use-gcp or localβœ”οΈ
    snapshot_bucket_name--SNAPSHOT_BUCKET_NAMEName of the bucket where the snapshots are stored-snapshot-bucketβœ”οΈ
    run_interval--RUN_INTERVALInterval between two runtime cycles in ms-60000βœ”οΈ
    url_snapshot_manifest--URL_SNAPSHOT_MANIFESTSnapshots manifest location-Only if snapshot_store_type is gcp, else it should be ``βœ”οΈ
    era_reader_adapter_type--era-reader-adapter-type-ERA_READER_ADAPTER_TYPEEra reader adapter type that can be cardano-chain, file or bootstrap.bootstrap--
    era_reader_adapter_params--era-reader-adapter-params-ERA_READER_ADAPTER_PARAMSEra reader adapter params that is an optional JSON encoded parameters structure that is expected depending on the era_reader_adapter_type parameter---

    genesis bootstrap command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    genesis_secret_key--GENESIS_SECRET_KEYGenesis secret key, ⚠️ for test only---

    genesis import command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    signed_payload_path--signed-payload-path--Path of the payload to import.---

    genesis export command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    target_path--target-path--Path of the file to export the payload to.---

    era list command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    json--json--Export the supported era list to JSON format.---

    era generate-tx-datum command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    current_era_epoch--current-era-epoch-CURRENT_ERA_EPOCHEpoch at which current era starts.---
    next_era_epoch--next-era-epoch-NEXT_ERA_EPOCHEpoch at which the next era starts. If not specified and an upcoming era is available, it will announce the next era. If specified, it must be strictly greater than current-epoch-era---
    era_markers_secret_key--era-markers-secret-key-ERA_MARKERS_SECRET_KEYEra Markers Secret Key that is used to verify the authenticity of the era markers on chain.---
    - + \ No newline at end of file diff --git a/doc/manual/developer-docs/nodes/mithril-client/index.html b/doc/manual/developer-docs/nodes/mithril-client/index.html index 166a96f377..7389cf3363 100644 --- a/doc/manual/developer-docs/nodes/mithril-client/index.html +++ b/doc/manual/developer-docs/nodes/mithril-client/index.html @@ -18,13 +18,13 @@ - +
    -
    Version: Current

    Mithril Client Node

    info

    This is the node of the Mithril Network responsible for restoring the Cardano blockchain on an empty node from a certified snapshot.

    tip
    Mithril Networks

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

    Resources​

    NodeSource RepositoryRust DocumentationDocker Packages
    Mithril Client↗️↗️↗️

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version)

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run apt install libssl-dev

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Switch to build branch / tag

    # **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, 
    # please refer to the **Build From** column of the above **Mithril Networks** table
    git switch **YOUR_BUILD_BRANCH_OR_TAG**

    Change directory

    cd mithril/mithril-client

    Development test and build​

    Run tests

    make test

    Create the help menu

    make help

    Generate the Rust documentation

    make doc

    Run in debug mode with default configuration

    make debug

    Release build and run binary​

    Build and run in release with default configuration

    make run

    Or, build only in release

    make build

    Display the help menu

    ./mithril-client --help

    You should see

    This program downloads, checks and restores certified blockchain snapshots.

    Usage: mithril-client [OPTIONS] <COMMAND>

    Commands:
    list List available snapshots
    show Show detailed informations about a snapshot
    download Download a snapshot
    restore Restore a snapshot
    help Print this message or the help of the given subcommand(s)

    Options:
    --run-mode <RUN_MODE>
    Run Mode [env: RUN_MODE=] [default: dev]
    -v, --verbose...
    Verbosity level (-v=warning, -vv=info, -vvv=debug)
    --config-directory <CONFIG_DIRECTORY>
    Directory where configuration file is located [default: ./config]
    --aggregator-endpoint <AGGREGATOR_ENDPOINT>
    Override configuration Aggregator endpoint URL
    -h, --help
    Print help information
    -V, --version
    Print version information

    Run in release with default configuration

    ./mithril-client

    Run in release with a specific mode

    ./mithril-client --run-mode preview

    Run in release with a custom configuration via env vars

    GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**) NETWORK=**YOUR_CARDANO_NETWORK** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./mithril-client
    tip

    You can use the --json (or -j) option in order to display results in JSON format for the list and show commands:

    ./mithril-client list --json
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Client:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Run Docker container​

    Registry Image​

    The list of available images on the registry is listed here

    Prepare environment variables (values can be retrieved on the above Mithril Networks table)

    export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**
    export NETWORK=**YOUR_CARDANO_NETWORK**
    export AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**
    export GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)
    export SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')

    Here is an example configuration for the release-preprod network and the latest stable Docker image

    export MITHRIL_IMAGE_ID=latest
    export NETWORK=preprod
    export AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator
    export GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    export SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')

    Then create a shell function for the Mithril Client

    mithril_client () {
    docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@
    }

    Now you can use the mithril_client function:

    # 1- Help
    mithril_client help

    # 2- List snapshots
    mithril_client list

    # 3- Download latest snapshot
    mithril_client download $SNAPSHOT_DIGEST

    # 4- Restore latest snapshot
    mithril_client restore $SNAPSHOT_DIGEST

    Local Image​

    Build a local Docker image

    make docker-build

    Run a local Docker container

    make docker-run

    Subcommands​

    Here are the subcommands available:

    SubcommandPerformed action
    downloadDownload a snapshot
    helpPrint this message or the help of the given subcommand(s)
    listList available snapshots
    restoreRestore a snapshot
    showInformations about a snapshot

    Configuration parameters​

    The configuration parameters are set either:

    • In a configuration file (depending on the --run-mode parameter). If runtime mode is testnet the file is located in ./conf/testnet.json.
    • The value can be overridden by an environment variable whose name is the parameter name uppercased.

    Here is a list of the available parameters:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    verbose--verbose-vVERBOSEVerbosity level-Parsed from number of occurrences: -v for Warning, -vv for Info, -vvv for Debug and -vvvv for Traceβœ”οΈ
    run_mode--run-mode-RUN_MODERuntime modedev-βœ”οΈ
    network--NETWORKCardano network-testnet or mainnet or devnetβœ”οΈ
    aggregator_endpoint--aggregator-endpoint-AGGREGATOR_ENDPOINTAggregator node endpoint-https://aggregator.pre-release-preview.api.mithril.network/aggregatorβœ”οΈ
    genesis_verification_key--GENESIS_VERIFICATION_KEYGenesis verification key--βœ”οΈ
    json_output--json-j-Enable JSON outputno--
    - +
    Version: Current

    Mithril Client Node

    info

    This is the node of the Mithril Network responsible for restoring the Cardano blockchain on an empty node from a certified snapshot.

    tip
    Mithril Networks

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

    Resources​

    NodeSource RepositoryRust DocumentationDocker Packages
    Mithril Client↗️↗️↗️

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version)

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run apt install libssl-dev

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Switch to build branch / tag

    # **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, 
    # please refer to the **Build From** column of the above **Mithril Networks** table
    git switch **YOUR_BUILD_BRANCH_OR_TAG**

    Change directory

    cd mithril/mithril-client

    Development test and build​

    Run tests

    make test

    Create the help menu

    make help

    Generate the Rust documentation

    make doc

    Run in debug mode with default configuration

    make debug

    Release build and run binary​

    Build and run in release with default configuration

    make run

    Or, build only in release

    make build

    Display the help menu

    ./mithril-client --help

    You should see

    This program downloads, checks and restores certified blockchain snapshots.

    Usage: mithril-client [OPTIONS] <COMMAND>

    Commands:
    list List available snapshots
    show Show detailed informations about a snapshot
    download Download a snapshot
    restore Restore a snapshot
    help Print this message or the help of the given subcommand(s)

    Options:
    --run-mode <RUN_MODE>
    Run Mode [env: RUN_MODE=] [default: dev]
    -v, --verbose...
    Verbosity level (-v=warning, -vv=info, -vvv=debug)
    --config-directory <CONFIG_DIRECTORY>
    Directory where configuration file is located [default: ./config]
    --aggregator-endpoint <AGGREGATOR_ENDPOINT>
    Override configuration Aggregator endpoint URL
    -h, --help
    Print help information
    -V, --version
    Print version information

    Run in release with default configuration

    ./mithril-client

    Run in release with a specific mode

    ./mithril-client --run-mode preview

    Run in release with a custom configuration via env vars

    GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**) NETWORK=**YOUR_CARDANO_NETWORK** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./mithril-client
    tip

    You can use the --json (or -j) option in order to display results in JSON format for the list and show commands:

    ./mithril-client list --json
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Client:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Run Docker container​

    Registry Image​

    The list of available images on the registry is listed here

    Prepare environment variables (values can be retrieved on the above Mithril Networks table)

    export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**
    export NETWORK=**YOUR_CARDANO_NETWORK**
    export AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**
    export GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)
    export SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')

    Here is an example configuration for the release-preprod network and the latest stable Docker image

    export MITHRIL_IMAGE_ID=latest
    export NETWORK=preprod
    export AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator
    export GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    export SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')

    Then create a shell function for the Mithril Client

    mithril_client () {
    docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@
    }

    Now you can use the mithril_client function:

    # 1- Help
    mithril_client help

    # 2- List snapshots
    mithril_client list

    # 3- Download latest snapshot
    mithril_client download $SNAPSHOT_DIGEST

    # 4- Restore latest snapshot
    mithril_client restore $SNAPSHOT_DIGEST

    Local Image​

    Build a local Docker image

    make docker-build

    Run a local Docker container

    make docker-run

    Subcommands​

    Here are the subcommands available:

    SubcommandPerformed action
    downloadDownload a snapshot
    helpPrint this message or the help of the given subcommand(s)
    listList available snapshots
    restoreRestore a snapshot
    showInformations about a snapshot

    Configuration parameters​

    The configuration parameters are set either:

    • In a configuration file (depending on the --run-mode parameter). If runtime mode is testnet the file is located in ./conf/testnet.json.
    • The value can be overridden by an environment variable whose name is the parameter name uppercased.

    Here is a list of the available parameters:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    verbose--verbose-vVERBOSEVerbosity level-Parsed from number of occurrences: -v for Warning, -vv for Info, -vvv for Debug and -vvvv for Traceβœ”οΈ
    run_mode--run-mode-RUN_MODERuntime modedev-βœ”οΈ
    network--NETWORKCardano network-testnet or mainnet or devnetβœ”οΈ
    aggregator_endpoint--aggregator-endpoint-AGGREGATOR_ENDPOINTAggregator node endpoint-https://aggregator.pre-release-preview.api.mithril.network/aggregatorβœ”οΈ
    genesis_verification_key--GENESIS_VERIFICATION_KEYGenesis verification key--βœ”οΈ
    json_output--json-j-Enable JSON outputno--
    + \ No newline at end of file diff --git a/doc/manual/developer-docs/nodes/mithril-signer/index.html b/doc/manual/developer-docs/nodes/mithril-signer/index.html index 5070348c44..68d02d9138 100644 --- a/doc/manual/developer-docs/nodes/mithril-signer/index.html +++ b/doc/manual/developer-docs/nodes/mithril-signer/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    Mithril Signer Node

    info

    This is the node of the Mithril Network responsible for producing individual signatures that are collected and aggregated by the Mithril Aggregator.

    tip
    Mithril Networks

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

    Resources​

    NodeSource RepositoryRust DocumentationDocker Packages
    Mithril Signer↗️↗️↗️

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version)

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run apt install libssl-dev

    • Ensure SQLite3 library is installed on your system and its version is at least 3.35 (released Apr. 2021) on Debian/Ubuntu: apt install libsqlite3 and sqlite3 --version.

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Switch to build branch / tag

    # **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, 
    # please refer to the **Build From** column of the above **Mithril Networks** table
    git switch **YOUR_BUILD_BRANCH_OR_TAG**

    Change directory

    cd mithril/mithril-signer

    Development test and build​

    Run tests

    make test

    Create the help menu

    make help

    Generate the Rust documentation

    make doc

    Run in debug mode with default configuration

    make debug

    Release build and run binary​

    Build and run in release with default configuration

    make run

    Or, build only in release

    make build

    Display the help menu

    ./mithril-signer --help

    You should see

    An implementation of a Mithril Signer

    Usage: mithril-signer [OPTIONS]

    Options:
    -r, --run-mode <RUN_MODE>
    Run Mode [env: RUN_MODE=] [default: dev]
    -v, --verbose...
    Verbosity level, add more v to increase
    -c, --configuration-dir <CONFIGURATION_DIR>
    Directory where the configuration file is located [default: ./config]
    --disable-digests-cache
    Disable immutables digests cache
    --reset-digests-cache
    If set the existing immutables digests cache will be reset
    -h, --help
    Print help information (use `--help` for more detail)
    -V, --version
    Print version information

    Run in release with default configuration

    ./mithril-signer

    Run in release with a specific mode

    ./mithril-signer -r preview

    Run in release with a custom configuration via env vars

    NETWORK=**YOUR_CARDANO_NETWORK** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./mithril-signer
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Signer:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Build and run Docker container​

    Build a local Docker image

    make docker-build

    Run a local Docker container

    make docker-run

    Configuration parameters​

    The configuration parameters are set either:

    • In a configuration file (depending on the --run-mode parameter). If runtime mode is testnet the file is located in ./conf/testnet.json.
    • The value can be overridden by an environment variable whose name is the parameter name uppercased.

    Here is a list of the available parameters:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    verbose--verbose-vVERBOSEVerbosity level-Parsed from number of occurrences: -v for Warning, -vv for Info, -vvv for Debug and -vvvv for Traceβœ”οΈ
    run_mode--run-mode-rRUN_MODERuntime modedev-βœ”οΈ
    db_directory--db-directory-DB_DIRECTORYDirectory to snapshot from the Cardano Node/db-βœ”οΈ
    network--NETWORKCardano network-testnet or mainnet or devnetβœ”οΈ
    network_magic--NETWORK_MAGICCardano Network Magic number (for testnet and devnet)-1097911063 or 42-
    party_id--PARTY_IDParty Id of the signer, usually the Pool Id of the SPO-pool1pxaqe80sqpde7902er5kf6v0c7y0sv6d5g676766v2h829fvs3x-
    run_interval--RUN_INTERVALInterval between two runtime cycles in ms-60000βœ”οΈ
    aggregator_endpoint--AGGREGATOR_ENDPOINTAggregator node endpoint-https://aggregator.pre-release-preview.api.mithril.network/aggregatorβœ”οΈ
    data_stores_directory--DATA_STORES_DIRECTORYDirectory to store signer data (Stakes, Protocol initializers, ...)-./mithril-signer/storesβœ”οΈ
    store_retention_limit--STORE_RETENTION_LIMITMaximum number of records in stores. If not set, no limit is set.---
    kes_secret_key_path--KES_SECRET_KEY_PATHPath to the Cardano KES Secret Key file. Mandatory in Pool Id Certification Mode where the owner is verified (experimental, soon to be stable & preferred mode)---
    operational_certificate_path--OPERATIONAL_CERTIFICATE_PATHPath to the Cardano Operational Certificate file. Mandatory in Pool Id Certification Mode where the owner is verified (experimental, soon to be stable & preferred mode)---
    era_reader_adapter_type--era-reader-adapter-type-ERA_READER_ADAPTER_TYPEEra reader adapter type that can be cardano-chain, file or bootstrap.bootstrap--
    era_reader_adapter_params--era-reader-adapter-params-ERA_READER_ADAPTER_PARAMSEra reader adapter params that is an optional JSON encoded parameters structure that is expected depending on the era_reader_adapter_type parameter---
    - + \ No newline at end of file diff --git a/doc/manual/developer-docs/references/index.html b/doc/manual/developer-docs/references/index.html index 33157c8ad5..a061971b43 100644 --- a/doc/manual/developer-docs/references/index.html +++ b/doc/manual/developer-docs/references/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    API Reference

    Welcome to the Mithril API references doc!

    info

    This page gathers the external developer documentations available for Mithril. They are intended for a technical audience only.

    tip

    For more information about the Mithril Protocol, please refer to the About Mithril section.

    Mithril Networks​

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

    Dependencies List​

    DependencyDescriptionSource RepositoryRust DocumentationREST API
    Mithril CommonThis is the common library that is used by the Mithril Network nodes.↗️↗️-
    Mithril STMThe core library that implements Mithril protocol cryptographic engine.↗️↗️-
    Mithril AggregatorThe node of the Mithril Network responsible for collecting individual signatures from the Mithril Signers and aggregate them into a multisignature. The Mithril Aggregator uses this ability to provide certified snapshots of the Cardano blockchain.↗️↗️↗️
    Mithril ClientThe node of the Mithril Network responsible for restoring the Cardano blockchain on an empty node from a certified snapshot.↗️↗️-
    Mithril SignerThe node of the Mithril Network responsible for producing individual signatures that are collected and aggregated by the Mithril Aggregator.↗️↗️-
    Mithril DevnetThe private Mithril/Cardano Network used to scaffold a Mithril Network on top of a private Cardano Network.↗️--
    Mithril End to EndThe tool used to run tests scenari against a Mithril Devnet.↗️--
    Mithril ExplorerThe explorer website that connects to a Mithril Aggregator and displays its Certificate Chain.↗️--
    Protocol SimulationA simple cli that helps understand how the Mithril Protocol works and the role of its protocol parameters.↗️--
    - + \ No newline at end of file diff --git a/doc/manual/getting-started/bootstrap-cardano-node/index.html b/doc/manual/getting-started/bootstrap-cardano-node/index.html index 80beba7b5e..955104d8cc 100644 --- a/doc/manual/getting-started/bootstrap-cardano-node/index.html +++ b/doc/manual/getting-started/bootstrap-cardano-node/index.html @@ -18,13 +18,13 @@ - +
    -
    Version: Current

    Bootstrap a Cardano Node

    info

    Thanks to a Mithril Client connected to a Mithril Aggregator, you will restore a full Cardano node in less than 2 hours!

    Mithril Networks

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

    Video demonstration

    In this video you will see how fast the bootstrapping of a Cardano node with Mithril is compared to classical bootstrapping (benchmark done on mainnet with Daedalus wallet).

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version).

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run sudo apt install libssl-dev

    • Install other requirements

    sudo apt-get install make build-essential m4 docker jq

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Build Mithril Client binary​

    Switch to build branch / tag

    # **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, 
    # please refer to the **Build From** column of the above **Mithril Networks** table
    git switch **YOUR_BUILD_BRANCH_OR_TAG**

    Change directory

    cd mithril/mithril-client

    Run tests (Optional)

    make test

    Build executable

    make build

    Verify binary​

    Verify version​

    Check that the Mithril Signer binary is running the correct version by running

    ./mithril-client -V

    You should see something like

    mithril-client 0.2.0

    ⚠️ Verify that the version displayed is the version described in the content of the Release / Pre-Release note (see the Build From column of the above Mithril Networks table)

    Verify build​

    Check that the Mithril Client binary is working fine by running its help

    ./mithril-client -h

    You should see

    This program downloads, checks and restores certified blockchain snapshots.

    Usage: mithril-client [OPTIONS] <COMMAND>

    Commands:
    list List available snapshots
    show Show detailed informations about a snapshot
    download Download a snapshot
    restore Restore a snapshot
    help Print this message or the help of the given subcommand(s)

    Options:
    --run-mode <RUN_MODE>
    Run Mode [env: RUN_MODE=] [default: dev]
    -v, --verbose...
    Verbosity level (-v=warning, -vv=info, -vvv=debug)
    --config-directory <CONFIG_DIRECTORY>
    Directory where configuration file is located [default: ./config]
    --aggregator-endpoint <AGGREGATOR_ENDPOINT>
    Override configuration Aggregator endpoint URL
    -h, --help
    Print help information
    -V, --version
    Print version information
    tip

    You can use the --json option in order to display results in JSON format for the list and show commands:

    ./mithril-client list --json
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Client:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Run Docker container​

    The list of available images on the registry is listed here

    Prepare an environment variable with the selected Docker image

    export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**

    Here is an example configuration for the latest stable Docker image

    export MITHRIL_IMAGE_ID=latest

    Then create a shell function for the Mithril Client:

    mithril_client () {
    docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@
    }

    Now you can use the mithril_client function:

    # 1- Help
    mithril_client help

    # 2- List snapshots
    mithril_client list
    tip

    In the following part of the document, you will need to replace the ./mithril-client commands with mithril_client in order to use the above shell function.

    Bootstrap a Cardano node from a testnet Mithril snapshot​

    Step 1: Prepare some useful variables​

    # Cardano network
    export NETWORK=**YOUR_CARDANO_NETWORK**

    # Aggregator API endpoint URL
    export AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**

    # Genesis verification key
    export GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)

    # Digest of the latest produced snapshot for convenience of the demo
    # You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2
    export SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')

    Step 2: Select A Snapshot​

    List the available snapshots with which you can bootstrap a Cardano node

    ./mithril-client list

    You will see a list of snapshots

    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | Network | Digest | Size | Locations | Created |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 | 5273560121 | 1 | 2022-07-10T11:19:18.042554390Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | 22267a8399cbd1731420f7241c91bec66b3126c971d53b1cdf4db0c016320df4 | 5267582819 | 1 | 2022-07-10T05:44:59.048360039Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | c14792945b3880fa9f8880348f885c707b8e4d13cdb035b9a735c15f88ea45db | 5265335799 | 1 | 2022-07-10T00:03:43.656860711Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | 0344faf7ebcd7cbf606288bfc8e7c11f992bd4f28f3ac159942b487a0217f485 | 5265577167 | 1 | 2022-07-09T18:31:16.604292173Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | fc42ef98e233717a7180502dc51aab1ca64d5bd6d6e9d72b4096ac1f7e45a129 | 5262797245 | 1 | 2022-07-09T12:45:20.306735843Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+

    Step 3: Show Snapshot Details​

    Get some more details from a specific snapshot (Optional)

    ./mithril-client show $SNAPSHOT_DIGEST

    You will see more information about a snapshot

    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Info | Value |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Network | testnet |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Digest | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Size | 5273560121 |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Location 1 | https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Created | 2022-07-10T11:19:18.042554390Z |

    Step 4: Download Selected Snapshot​

    Download the selected snapshot from the remote location to your remote location

    ./mithril-client download $SNAPSHOT_DIGEST

    You will see that the selected snapshot archive has been downloaded locally

    Download success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 #1
    from https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz
    to /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/snapshot.archive.tar.gz

    Step 5: Restore Selected Snapshot​

    Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database

    ./mithril-client restore $SNAPSHOT_DIGEST

    You will see that the snapshot archive is unpacked and that the associated certificate is valid

    Unpacking snapshot...
    Unpack success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068
    to /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db

    Restore a Cardano Node with:

    docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="/home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db",target=/data/db/ -e NETWORK=testnet inputoutput/cardano-node

    Step 6: Launch a Cardano Node From Restored Snapshot​

    Launch an empty Cardano node and make it live in minutes!

    docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="$(pwd)/data/testnet/$SNAPSHOT_DIGEST/db",target=/data/db/ -e NETWORK=**YOUR_CARDANO_NETWORK** inputoutput/cardano-node

    You will see the node start by validating the files injested from the snapshot archive

    Starting: /nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run
    --config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json
    --database-path /data/db
    --topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml
    --host-addr 0.0.0.0
    --port 3001
    --socket-path /ipc/node.socket





    +RTS
    -N2
    -I0
    -A16m
    -qg
    -qb
    --disable-delayed-os-memory-return
    -RTS
    ..or, once again, in a single line:
    /nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run --config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json --database-path /data/db --topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml --host-addr 0.0.0.0 --port 3001 --socket-path /ipc/node.socket +RTS -N2 -I0 -A16m -qg -qb --disable-delayed-os-memory-return -RTS
    Node configuration: NodeConfiguration {ncSocketConfig = SocketConfig {ncNodeIPv4Addr = Last {getLast = Just 0.0.0.0}, ncNodeIPv6Addr = Last {getLast = Nothing}, ncNodePortNumber = Last {getLast = Just 3001}, ncSocketPath = Last {getLast = Just "/ipc/node.socket"}}, ncConfigFile = "/nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json", ncTopologyFile = "/nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml", ncDatabaseFile = "/data/db", ncProtocolFiles = ProtocolFilepaths {byronCertFile = Nothing, byronKeyFile = Nothing, shelleyKESFile = Nothing, shelleyVRFFile = Nothing, shelleyCertFile = Nothing, shelleyBulkCredsFile = Nothing}, ncValidateDB = False, ncShutdownConfig = ShutdownConfig {scIPC = Nothing, scOnSyncLimit = Just NoShutdown}, ncProtocolConfig = NodeProtocolConfigurationCardano (NodeByronProtocolConfiguration {npcByronGenesisFile = "/nix/store/kax0css4lx3ywihvsgrqjym0jpi20f99-byron-genesis.json", npcByronGenesisFileHash = Just "96fceff972c2c06bd3bb5243c39215333be6d56aaf4823073dca31afe5038471", npcByronReqNetworkMagic = RequiresMagic, npcByronPbftSignatureThresh = Nothing, npcByronApplicationName = ApplicationName {unApplicationName = "cardano-sl"}, npcByronApplicationVersion = 0, npcByronSupportedProtocolVersionMajor = 3, npcByronSupportedProtocolVersionMinor = 0, npcByronSupportedProtocolVersionAlt = 0}) (NodeShelleyProtocolConfiguration {npcShelleyGenesisFile = "/nix/store/2xhy92909anynqsvx1b1x153cxwnfmzx-shelley-genesis.json", npcShelleyGenesisFileHash = Just "849a1764f152e1b09c89c0dfdbcbdd38d711d1fec2db5dfa0f87cf2737a0eaf4"}) (NodeAlonzoProtocolConfiguration {npcAlonzoGenesisFile = "/nix/store/8qnphq6yvcjspiy3z0aijfd6cv64l3hl-alonzo-genesis.json", npcAlonzoGenesisFileHash = Just "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874"}) (NodeHardForkProtocolConfiguration {npcTestEnableDevelopmentHardForkEras = False, npcTestShelleyHardForkAtEpoch = Nothing, npcTestShelleyHardForkAtVersion = Nothing, npcTestAllegraHardForkAtEpoch = Nothing, npcTestAllegraHardForkAtVersion = Nothing, npcTestMaryHardForkAtEpoch = Nothing, npcTestMaryHardForkAtVersion = Nothing, npcTestAlonzoHardForkAtEpoch = Nothing, npcTestAlonzoHardForkAtVersion = Nothing, npcTestBabbageHardForkAtEpoch = Nothing, npcTestBabbageHardForkAtVersion = Nothing}), ncDiffusionMode = InitiatorAndResponderDiffusionMode, ncSnapshotInterval = DefaultSnapshotInterval, ncTestEnableDevelopmentNetworkProtocols = False, ncMaxConcurrencyBulkSync = Nothing, ncMaxConcurrencyDeadline = Nothing, ncLoggingSwitch = True, ncLogMetrics = True, ncTraceConfig = TracingOnLegacy (TraceSelection {traceVerbosity = NormalVerbosity, traceAcceptPolicy = OnOff {isOn = True}, traceBlockFetchClient = OnOff {isOn = False}, traceBlockFetchDecisions = OnOff {isOn = False}, traceBlockFetchProtocol = OnOff {isOn = False}, traceBlockFetchProtocolSerialised = OnOff {isOn = False}, traceBlockFetchServer = OnOff {isOn = False}, traceBlockchainTime = OnOff {isOn = False}, traceChainDB = OnOff {isOn = True}, traceChainSyncBlockServer = OnOff {isOn = False}, traceChainSyncClient = OnOff {isOn = False}, traceChainSyncHeaderServer = OnOff {isOn = False}, traceChainSyncProtocol = OnOff {isOn = False}, traceConnectionManager = OnOff {isOn = True}, traceConnectionManagerCounters = OnOff {isOn = True}, traceConnectionManagerTransitions = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorTracer = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorResponderTracer = OnOff {isOn = False}, traceDiffusionInitialization = OnOff {isOn = True}, traceDnsResolver = OnOff {isOn = False}, traceDnsSubscription = OnOff {isOn = True}, traceErrorPolicy = OnOff {isOn = True}, traceForge = OnOff {isOn = True}, traceForgeStateInfo = OnOff {isOn = True}, traceHandshake = OnOff {isOn = False}, traceInboundGovernor = OnOff {isOn = True}, traceInboundGovernorCounters = OnOff {isOn = True}, traceInboundGovernorTransitions = OnOff {isOn = True}, traceIpSubscription = OnOff {isOn = True}, traceKeepAliveClient = OnOff {isOn = False}, traceLedgerPeers = OnOff {isOn = True}, traceLocalChainSyncProtocol = OnOff {isOn = False}, traceLocalConnectionManager = OnOff {isOn = False}, traceLocalErrorPolicy = OnOff {isOn = True}, traceLocalHandshake = OnOff {isOn = False}, traceLocalInboundGovernor = OnOff {isOn = False}, traceLocalMux = OnOff {isOn = False}, traceLocalRootPeers = OnOff {isOn = True}, traceLocalServer = OnOff {isOn = False}, traceLocalStateQueryProtocol = OnOff {isOn = False}, traceLocalTxMonitorProtocol = OnOff {isOn = False}, traceLocalTxSubmissionProtocol = OnOff {isOn = False}, traceLocalTxSubmissionServer = OnOff {isOn = False}, traceMempool = OnOff {isOn = True}, traceMux = OnOff {isOn = False}, tracePeerSelection = OnOff {isOn = True}, tracePeerSelectionCounters = OnOff {isOn = True}, tracePeerSelectionActions = OnOff {isOn = True}, tracePublicRootPeers = OnOff {isOn = True}, traceServer = OnOff {isOn = True}, traceTxInbound = OnOff {isOn = False}, traceTxOutbound = OnOff {isOn = False}, traceTxSubmissionProtocol = OnOff {isOn = False}, traceTxSubmission2Protocol = OnOff {isOn = False}}), ncTraceForwardSocket = Nothing, ncMaybeMempoolCapacityOverride = Nothing, ncProtocolIdleTimeout = 5s, ncTimeWaitTimeout = 60s, ncAcceptedConnectionsLimit = AcceptedConnectionsLimit {acceptedConnectionsHardLimit = 512, acceptedConnectionsSoftLimit = 384, acceptedConnectionsDelay = 5s}, ncTargetNumberOfRootPeers = 100, ncTargetNumberOfKnownPeers = 100, ncTargetNumberOfEstablishedPeers = 50, ncTargetNumberOfActivePeers = 20, ncEnableP2P = DisabledP2PMode}
    Listening on http://127.0.0.1:12798
    [c995d1df:cardano.node.basicInfo.protocol:Notice:5] [2022-07-10 13:48:51.68 UTC] Byron; Shelley
    [c995d1df:cardano.node.basicInfo.version:Notice:5] [2022-07-10 13:48:51.68 UTC] 1.35.1
    [c995d1df:cardano.node.basicInfo.commit:Notice:5] [2022-07-10 13:48:51.68 UTC] 0000000000000000000000000000000000000000
    [c995d1df:cardano.node.basicInfo.nodeStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2022-07-10 13:48:51.685957811 UTC
    [c995d1df:cardano.node.basicInfo.systemStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2019-07-24 20:20:16 UTC
    [c995d1df:cardano.node.basicInfo.slotLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 20s
    [c995d1df:cardano.node.basicInfo.epochLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 21600
    [c995d1df:cardano.node.basicInfo.slotLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Config path /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json, Network magic NetworkMagic {unNetworkMagic = 1097911063}, Protocol "Byron; Shelley", Version "1.35.1", Commit "0000000000000000000000000000000000000000", Node start time 2022-07-10 13:48:51.694962147 UTC
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Byron, Slot length 20s, Epoch length 21600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Shelley, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Allegra, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Mary, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Alonzo, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Babbage, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] startup time: 1657460932
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.70 UTC]
    node addresses: 0.0.0.0:3001
    local socket: /ipc/node.socket
    node-to-node versions:
    NodeToNodeV_7 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)
    NodeToNodeV_8 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)
    NodeToNodeV_9 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* Nil)
    node-to-client versions:
    NodeToClientV_9 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_10 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_11 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_12 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_13 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* Nil)
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Chain DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Immutable DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.79 UTC] Validating chunk no. 0 out of 2917. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validated chunk no. 0 out of 2917. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validating chunk no. 1 out of 2917. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validated chunk no. 1 out of 2917. Progress: 0.03%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validating chunk no. 2 out of 2917. Progress: 0.03%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validated chunk no. 2 out of 2917. Progress: 0.07%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validating chunk no. 3 out of 2917. Progress: 0.07%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validated chunk no. 3 out of 2917. Progress: 0.10%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validating chunk no. 4 out of 2917. Progress: 0.10%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validated chunk no. 4 out of 2917. Progress: 0.14%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validating chunk no. 5 out of 2917. Progress: 0.14%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:54.14 UTC] Validated chunk no. 5 out of 2917.

    ... (Cut for readability)

    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validated chunk no. 2911 out of 2917. Progress: 99.79%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validating chunk no. 2912 out of 2917. Progress: 99.79%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validated chunk no. 2912 out of 2917. Progress: 99.83%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validating chunk no. 2913 out of 2917. Progress: 99.83%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validated chunk no. 2913 out of 2917. Progress: 99.86%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validating chunk no. 2914 out of 2917. Progress: 99.86%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validated chunk no. 2914 out of 2917. Progress: 99.90%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validating chunk no. 2915 out of 2917. Progress: 99.90%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validated chunk no. 2915 out of 2917. Progress: 99.93%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validating chunk no. 2916 out of 2917. Progress: 99.93%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validated chunk no. 2916 out of 2917. Progress: 99.97%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validating chunk no. 2917 out of 2917. Progress: 99.97%
    [c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the secondary index for the chunk file with number 2917.
    [c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the primary index for the chunk file with number 2917.
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Found a valid last location at chunk 2917 with tip 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432@63009237.
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Opened imm db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and chunk 2917
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Started opening Volatile DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Opened vol db
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Started opening Ledger DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replaying ledger from snapshot at 16ce3e707388b8c033f87b440ac89095b2d2fc5fa2b42f768c38da286312a31a at slot 63005524
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replayed block: slot 63005533 out of 63009237. Progress: 0.24%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.20 UTC] Replayed block: slot 63007165 out of 63009237. Progress: 44.20%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Opened lgr db
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Started initial chain selection
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.45 UTC] Pushing ledger state for block 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] before next, messages elided = 63009476
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 5e59df354b64634bd27fc1b3ed08991c6de909ea085625da2ca78ec5a6a3e37c at slot 63019450. Progress: 13.85%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block e0610e4f03ef640ead31a729f6f18aa820f3906f6414b179d3c553f0011162ef at slot 63019479. Progress: 13.89%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 8edc84f1f289475ca5c2afd9cae3c704ed7bcdf3e489fd1842e3904bd2d6d8c5 at slot 63019510. Progress: 13.93%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] before next, messages elided = 63019575
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block fc426a1c3a8c5ae61100e5ccfcaa47ccfb6cc144ed17fcd47a2b55f48890790a at slot 63029515. Progress: 27.75%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 68059200505d3ec65d3ddce9441efb0607adab002066c00acc050f5bb0c53deb at slot 63029578. Progress: 27.84%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 25f5cc004ad90dc554e085699f1386dc8f69cec4012a7b35735b83da6fa68a0b at slot 63029602. Progress: 27.87%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] before next, messages elided = 63029636
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block cfb3dd669fd1a85aaf005ddd0e4a8b90cbb7b2c66dc8ff6f41e2e7aa2a0f0c57 at slot 63039634. Progress: 41.72%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block d7f057436e749e4468cfd8b17a04d447c4ce628b8dc33ea7ebdc4d3ad4659dec at slot 63039638. Progress: 41.73%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block 73fcb92346714585e1dbb484b1678bb15dab7304a8071cd95ec85195ca7a46be at slot 63039655. Progress: 41.75%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] before next, messages elided = 63039729
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block a7256fa99f7bf50d0e764cb80122222b1d2b80ffef4bee30e42c0bb80c5f1168 at slot 63049716. Progress: 55.64%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block 75e2064629d6a017bfe324a3d31723ed7bfa017eceda1549bd6c9f4d63653394 at slot 63049861. Progress: 55.84%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.94 UTC] Pushing ledger state for block 71aeaae8f83ee6b94a7feb521c16f0d889a9b95be6da85d540ac0435b412fb2c at slot 63049904. Progress: 55.90%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] before next, messages elided = 63049909
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block 15ad241c6908d0748cb80d17035d4001f7f86ee22fe71197cbe9bc7489d8e71b at slot 63059862. Progress: 69.65%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block a5e38b0875d44e10a3cba9c420ad4c9708e913e3458f1003a8236a831762069a at slot 63059915. Progress: 69.73%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block ca6dc89bd705476bcd056d6ffc3dd43499e51d0e5ecfe56a439fadacac50fc1b at slot 63059939. Progress: 69.76%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] before next, messages elided = 63059957
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 3c8593b6859b02abaa7f3b69d2114b1f402c65eef6904020e5ed37356aea4461 at slot 63069941. Progress: 83.57%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 50a06570febcf89ee00c386979d3a616561996b6c5cf6cbff44c20aa8454c375 at slot 63069971. Progress: 83.61%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 6265f3c30f149ba0a797a1d2c6998b918f089e7455ab665e3369456105901a5a at slot 63069972. Progress: 83.62%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] before next, messages elided = 63069985
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 0be786a1d9272083e9e184da3bc3bfcb71b82ad10fbf52f4959dc5dc6d1b7b3c at slot 63079898. Progress: 97.32%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 2862bd67a50bf9f6f31ab11d9153663d3e657f88c24ba8e71174f8f5216c2a99 at slot 63079992. Progress: 97.45%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block cc9036c6c4076ca28ac5d03522001c233a9202cb5b1d9484c3e406fbb3406fd5 at slot 63079994. Progress: 97.45%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] before next, messages elided = 63080024
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Pushing ledger state for block c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837. Progress: 100.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Valid candidate at tip 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Initial chain selected
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Opened db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and tip c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837
    [c995d1df:cardano.node.shutdown:Warning:5] [2022-07-10 13:53:39.87 UTC] Will terminate upon reaching NoShutdown
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] CreatingServerSocket 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ConfiguringServerSocket 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ListeningServerSocket 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ServerSocketUp 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] RunServer (0.0.0.0:3001 :| [])
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreateSystemdSocketForSnocketPath (LocalAddress "/ipc/node.socket")
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreatedLocalSocket (LocalAddress "/ipc/node.socket")
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ConfiguringLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ListeningLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] LocalSocketUp (LocalAddress "/ipc/node.socket") (FileDescriptor 26)
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] RunLocalServer (LocalAddress "/ipc/node.socket")
    [c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d014:e00:a200:0:1:0:1]:3001
    [c995d1df:cardano.node.DnsSubscription:Notice:358] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 3.131.32.242:3001
    [c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d01c:321:2101:0:1:0:2]:3001
    [c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 13.41.9.54:3001
    [c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.95 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt End, destination 13.41.9.54:3001 outcome: ConnectSuccessLast
    [c995d1df:cardano.node.ErrorPolicy:Notice:343] [2022-07-10 13:53:39.95 UTC] IP 3.131.32.242:3001 ErrorPolicySuspendConsumer (Just (ConnectionExceptionTrace (SubscriberError {seType = SubscriberParallelConnectionCancelled, seMessage = "Parallel connection cancelled", seStack = []}))) 1s

    Then the Cardano node will synchronize with the other nodes of the network and start adding blockss

    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:53:40.06 UTC] Chain extended, new tip: 7ae33b2f4bc8b84e77dfd539f0f6e7f59b293e96f62fdcfdb17cbd7a006fe5c0 at slot 63081906
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:08.30 UTC] Chain extended, new tip: 6b4ccd2bec5e3862b23ea0f7c2f342a3659cecdcfdaf04551179df3839be6213 at slot 63092090
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:21.36 UTC] Chain extended, new tip: 6e95eb82da5a38544e6ef430a2733f6014c3c10527003b9d3bdc534f6a2ce81f at slot 63092103
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:39.04 UTC] Chain extended, new tip: a662672ec4b988022e135cb0b7e440f5fbffe8e205771d13a566a418f7021ba7 at slot 63092121
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:45.18 UTC] Chain extended, new tip: 2a0f2e6f218a08f4e0bc4668285d8e792fd7ec62f05880bd5b2d23d6bce20dfb at slot 63092127
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:18.05 UTC] Chain extended, new tip: ab9ef8af92ec062ec59a10da588e238ba8840705c095ebd5cd5da7ab9ea9c8e1 at slot 63092160
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:45.15 UTC] Chain extended, new tip: e59bcbf34172eb6a934e2580f6b20ebe1ea32fba7420feec096744fab8ffce76 at slot 63092189
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:57:59.06 UTC] Chain extended, new tip: ea0e76fe069a0bcb831cf6b342530adf2a28de4922a752cff734fe81a1842dff at slot 63092263
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:02.27 UTC] Chain extended, new tip: 1b68a85a10dd7bd840a69ece2807fbca61a1de07c30080bf94fbbfd1de8d1446 at slot 63092266
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:28.21 UTC] Chain extended, new tip: 07e1252c5614b9bb6e6cff95066c134eb251aea6bef33dc34c0dd064934f2cea at slot 63092292
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:33.17 UTC] Chain extended, new tip: 0d3712fd7852b0aff00d660f4e7dc609808018dc271fe460bb9ff8270dd50d8f at slot 63092297
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:48.53 UTC] Chain extended, new tip: c8bb96ea392e41dce6fc157e164dbe19ba894d268f69985e20a2d65daeb4488c at slot 63092312
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:58.08 UTC] Chain extended, new tip: 35ea30e175abaae7983db9f65e7a00ba45312ecb151e53a651b3a6058add4c4f at slot 63092322
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:02.13 UTC] Chain extended, new tip: 5320de43ea30e46515f48263211212833474ea87ff046f36f0d83059fad6e9ff at slot 63092326
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:06.29 UTC] Chain extended, new tip: 58e9cb29bd771e0625689a0d591a7a8309f9e859ce4a3b70a9ab2e28173ce78b at slot 63092330
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:36.31 UTC] Chain extended, new tip: 1af2411f492e1895231cc910bdb1a68a45596157bcbfae5bdfd5c5ed81b03054 at slot 63092360
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:04.51 UTC] Chain extended, new tip: 270d47c5a277ef7efe028b6eb4764ab328db8e509ad962370bb383b1832bb260 at slot 63092388
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:29.52 UTC] Chain extended, new tip: 6fbe009ac36363cbebc607c733964878dfce6054c8785d1294f202acb475c861 at slot 63092413
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:01:12.63 UTC] Chain extended, new tip: f764596ece0b75d5d0054f22f3f0a0846f1647ff980d053015065099ec279839 at slot 63092456
    - +
    Version: Current

    Bootstrap a Cardano Node

    info

    Thanks to a Mithril Client connected to a Mithril Aggregator, you will restore a full Cardano node in less than 2 hours!

    Mithril Networks

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

    Video demonstration

    In this video you will see how fast the bootstrapping of a Cardano node with Mithril is compared to classical bootstrapping (benchmark done on mainnet with Daedalus wallet).

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version).

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run sudo apt install libssl-dev

    • Install other requirements

    sudo apt-get install make build-essential m4 docker jq

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Build Mithril Client binary​

    Switch to build branch / tag

    # **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, 
    # please refer to the **Build From** column of the above **Mithril Networks** table
    git switch **YOUR_BUILD_BRANCH_OR_TAG**

    Change directory

    cd mithril/mithril-client

    Run tests (Optional)

    make test

    Build executable

    make build

    Verify binary​

    Verify version​

    Check that the Mithril Signer binary is running the correct version by running

    ./mithril-client -V

    You should see something like

    mithril-client 0.2.0

    ⚠️ Verify that the version displayed is the version described in the content of the Release / Pre-Release note (see the Build From column of the above Mithril Networks table)

    Verify build​

    Check that the Mithril Client binary is working fine by running its help

    ./mithril-client -h

    You should see

    This program downloads, checks and restores certified blockchain snapshots.

    Usage: mithril-client [OPTIONS] <COMMAND>

    Commands:
    list List available snapshots
    show Show detailed informations about a snapshot
    download Download a snapshot
    restore Restore a snapshot
    help Print this message or the help of the given subcommand(s)

    Options:
    --run-mode <RUN_MODE>
    Run Mode [env: RUN_MODE=] [default: dev]
    -v, --verbose...
    Verbosity level (-v=warning, -vv=info, -vvv=debug)
    --config-directory <CONFIG_DIRECTORY>
    Directory where configuration file is located [default: ./config]
    --aggregator-endpoint <AGGREGATOR_ENDPOINT>
    Override configuration Aggregator endpoint URL
    -h, --help
    Print help information
    -V, --version
    Print version information
    tip

    You can use the --json option in order to display results in JSON format for the list and show commands:

    ./mithril-client list --json
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Client:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Run Docker container​

    The list of available images on the registry is listed here

    Prepare an environment variable with the selected Docker image

    export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**

    Here is an example configuration for the latest stable Docker image

    export MITHRIL_IMAGE_ID=latest

    Then create a shell function for the Mithril Client:

    mithril_client () {
    docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@
    }

    Now you can use the mithril_client function:

    # 1- Help
    mithril_client help

    # 2- List snapshots
    mithril_client list
    tip

    In the following part of the document, you will need to replace the ./mithril-client commands with mithril_client in order to use the above shell function.

    Bootstrap a Cardano node from a testnet Mithril snapshot​

    Step 1: Prepare some useful variables​

    # Cardano network
    export NETWORK=**YOUR_CARDANO_NETWORK**

    # Aggregator API endpoint URL
    export AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**

    # Genesis verification key
    export GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)

    # Digest of the latest produced snapshot for convenience of the demo
    # You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2
    export SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')

    Step 2: Select A Snapshot​

    List the available snapshots with which you can bootstrap a Cardano node

    ./mithril-client list

    You will see a list of snapshots

    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | Network | Digest | Size | Locations | Created |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 | 5273560121 | 1 | 2022-07-10T11:19:18.042554390Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | 22267a8399cbd1731420f7241c91bec66b3126c971d53b1cdf4db0c016320df4 | 5267582819 | 1 | 2022-07-10T05:44:59.048360039Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | c14792945b3880fa9f8880348f885c707b8e4d13cdb035b9a735c15f88ea45db | 5265335799 | 1 | 2022-07-10T00:03:43.656860711Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | 0344faf7ebcd7cbf606288bfc8e7c11f992bd4f28f3ac159942b487a0217f485 | 5265577167 | 1 | 2022-07-09T18:31:16.604292173Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | fc42ef98e233717a7180502dc51aab1ca64d5bd6d6e9d72b4096ac1f7e45a129 | 5262797245 | 1 | 2022-07-09T12:45:20.306735843Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+

    Step 3: Show Snapshot Details​

    Get some more details from a specific snapshot (Optional)

    ./mithril-client show $SNAPSHOT_DIGEST

    You will see more information about a snapshot

    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Info | Value |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Network | testnet |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Digest | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Size | 5273560121 |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Location 1 | https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Created | 2022-07-10T11:19:18.042554390Z |

    Step 4: Download Selected Snapshot​

    Download the selected snapshot from the remote location to your remote location

    ./mithril-client download $SNAPSHOT_DIGEST

    You will see that the selected snapshot archive has been downloaded locally

    Download success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 #1
    from https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz
    to /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/snapshot.archive.tar.gz

    Step 5: Restore Selected Snapshot​

    Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database

    ./mithril-client restore $SNAPSHOT_DIGEST

    You will see that the snapshot archive is unpacked and that the associated certificate is valid

    Unpacking snapshot...
    Unpack success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068
    to /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db

    Restore a Cardano Node with:

    docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="/home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db",target=/data/db/ -e NETWORK=testnet inputoutput/cardano-node

    Step 6: Launch a Cardano Node From Restored Snapshot​

    Launch an empty Cardano node and make it live in minutes!

    docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="$(pwd)/data/testnet/$SNAPSHOT_DIGEST/db",target=/data/db/ -e NETWORK=**YOUR_CARDANO_NETWORK** inputoutput/cardano-node

    You will see the node start by validating the files injested from the snapshot archive

    Starting: /nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run
    --config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json
    --database-path /data/db
    --topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml
    --host-addr 0.0.0.0
    --port 3001
    --socket-path /ipc/node.socket





    +RTS
    -N2
    -I0
    -A16m
    -qg
    -qb
    --disable-delayed-os-memory-return
    -RTS
    ..or, once again, in a single line:
    /nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run --config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json --database-path /data/db --topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml --host-addr 0.0.0.0 --port 3001 --socket-path /ipc/node.socket +RTS -N2 -I0 -A16m -qg -qb --disable-delayed-os-memory-return -RTS
    Node configuration: NodeConfiguration {ncSocketConfig = SocketConfig {ncNodeIPv4Addr = Last {getLast = Just 0.0.0.0}, ncNodeIPv6Addr = Last {getLast = Nothing}, ncNodePortNumber = Last {getLast = Just 3001}, ncSocketPath = Last {getLast = Just "/ipc/node.socket"}}, ncConfigFile = "/nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json", ncTopologyFile = "/nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml", ncDatabaseFile = "/data/db", ncProtocolFiles = ProtocolFilepaths {byronCertFile = Nothing, byronKeyFile = Nothing, shelleyKESFile = Nothing, shelleyVRFFile = Nothing, shelleyCertFile = Nothing, shelleyBulkCredsFile = Nothing}, ncValidateDB = False, ncShutdownConfig = ShutdownConfig {scIPC = Nothing, scOnSyncLimit = Just NoShutdown}, ncProtocolConfig = NodeProtocolConfigurationCardano (NodeByronProtocolConfiguration {npcByronGenesisFile = "/nix/store/kax0css4lx3ywihvsgrqjym0jpi20f99-byron-genesis.json", npcByronGenesisFileHash = Just "96fceff972c2c06bd3bb5243c39215333be6d56aaf4823073dca31afe5038471", npcByronReqNetworkMagic = RequiresMagic, npcByronPbftSignatureThresh = Nothing, npcByronApplicationName = ApplicationName {unApplicationName = "cardano-sl"}, npcByronApplicationVersion = 0, npcByronSupportedProtocolVersionMajor = 3, npcByronSupportedProtocolVersionMinor = 0, npcByronSupportedProtocolVersionAlt = 0}) (NodeShelleyProtocolConfiguration {npcShelleyGenesisFile = "/nix/store/2xhy92909anynqsvx1b1x153cxwnfmzx-shelley-genesis.json", npcShelleyGenesisFileHash = Just "849a1764f152e1b09c89c0dfdbcbdd38d711d1fec2db5dfa0f87cf2737a0eaf4"}) (NodeAlonzoProtocolConfiguration {npcAlonzoGenesisFile = "/nix/store/8qnphq6yvcjspiy3z0aijfd6cv64l3hl-alonzo-genesis.json", npcAlonzoGenesisFileHash = Just "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874"}) (NodeHardForkProtocolConfiguration {npcTestEnableDevelopmentHardForkEras = False, npcTestShelleyHardForkAtEpoch = Nothing, npcTestShelleyHardForkAtVersion = Nothing, npcTestAllegraHardForkAtEpoch = Nothing, npcTestAllegraHardForkAtVersion = Nothing, npcTestMaryHardForkAtEpoch = Nothing, npcTestMaryHardForkAtVersion = Nothing, npcTestAlonzoHardForkAtEpoch = Nothing, npcTestAlonzoHardForkAtVersion = Nothing, npcTestBabbageHardForkAtEpoch = Nothing, npcTestBabbageHardForkAtVersion = Nothing}), ncDiffusionMode = InitiatorAndResponderDiffusionMode, ncSnapshotInterval = DefaultSnapshotInterval, ncTestEnableDevelopmentNetworkProtocols = False, ncMaxConcurrencyBulkSync = Nothing, ncMaxConcurrencyDeadline = Nothing, ncLoggingSwitch = True, ncLogMetrics = True, ncTraceConfig = TracingOnLegacy (TraceSelection {traceVerbosity = NormalVerbosity, traceAcceptPolicy = OnOff {isOn = True}, traceBlockFetchClient = OnOff {isOn = False}, traceBlockFetchDecisions = OnOff {isOn = False}, traceBlockFetchProtocol = OnOff {isOn = False}, traceBlockFetchProtocolSerialised = OnOff {isOn = False}, traceBlockFetchServer = OnOff {isOn = False}, traceBlockchainTime = OnOff {isOn = False}, traceChainDB = OnOff {isOn = True}, traceChainSyncBlockServer = OnOff {isOn = False}, traceChainSyncClient = OnOff {isOn = False}, traceChainSyncHeaderServer = OnOff {isOn = False}, traceChainSyncProtocol = OnOff {isOn = False}, traceConnectionManager = OnOff {isOn = True}, traceConnectionManagerCounters = OnOff {isOn = True}, traceConnectionManagerTransitions = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorTracer = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorResponderTracer = OnOff {isOn = False}, traceDiffusionInitialization = OnOff {isOn = True}, traceDnsResolver = OnOff {isOn = False}, traceDnsSubscription = OnOff {isOn = True}, traceErrorPolicy = OnOff {isOn = True}, traceForge = OnOff {isOn = True}, traceForgeStateInfo = OnOff {isOn = True}, traceHandshake = OnOff {isOn = False}, traceInboundGovernor = OnOff {isOn = True}, traceInboundGovernorCounters = OnOff {isOn = True}, traceInboundGovernorTransitions = OnOff {isOn = True}, traceIpSubscription = OnOff {isOn = True}, traceKeepAliveClient = OnOff {isOn = False}, traceLedgerPeers = OnOff {isOn = True}, traceLocalChainSyncProtocol = OnOff {isOn = False}, traceLocalConnectionManager = OnOff {isOn = False}, traceLocalErrorPolicy = OnOff {isOn = True}, traceLocalHandshake = OnOff {isOn = False}, traceLocalInboundGovernor = OnOff {isOn = False}, traceLocalMux = OnOff {isOn = False}, traceLocalRootPeers = OnOff {isOn = True}, traceLocalServer = OnOff {isOn = False}, traceLocalStateQueryProtocol = OnOff {isOn = False}, traceLocalTxMonitorProtocol = OnOff {isOn = False}, traceLocalTxSubmissionProtocol = OnOff {isOn = False}, traceLocalTxSubmissionServer = OnOff {isOn = False}, traceMempool = OnOff {isOn = True}, traceMux = OnOff {isOn = False}, tracePeerSelection = OnOff {isOn = True}, tracePeerSelectionCounters = OnOff {isOn = True}, tracePeerSelectionActions = OnOff {isOn = True}, tracePublicRootPeers = OnOff {isOn = True}, traceServer = OnOff {isOn = True}, traceTxInbound = OnOff {isOn = False}, traceTxOutbound = OnOff {isOn = False}, traceTxSubmissionProtocol = OnOff {isOn = False}, traceTxSubmission2Protocol = OnOff {isOn = False}}), ncTraceForwardSocket = Nothing, ncMaybeMempoolCapacityOverride = Nothing, ncProtocolIdleTimeout = 5s, ncTimeWaitTimeout = 60s, ncAcceptedConnectionsLimit = AcceptedConnectionsLimit {acceptedConnectionsHardLimit = 512, acceptedConnectionsSoftLimit = 384, acceptedConnectionsDelay = 5s}, ncTargetNumberOfRootPeers = 100, ncTargetNumberOfKnownPeers = 100, ncTargetNumberOfEstablishedPeers = 50, ncTargetNumberOfActivePeers = 20, ncEnableP2P = DisabledP2PMode}
    Listening on http://127.0.0.1:12798
    [c995d1df:cardano.node.basicInfo.protocol:Notice:5] [2022-07-10 13:48:51.68 UTC] Byron; Shelley
    [c995d1df:cardano.node.basicInfo.version:Notice:5] [2022-07-10 13:48:51.68 UTC] 1.35.1
    [c995d1df:cardano.node.basicInfo.commit:Notice:5] [2022-07-10 13:48:51.68 UTC] 0000000000000000000000000000000000000000
    [c995d1df:cardano.node.basicInfo.nodeStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2022-07-10 13:48:51.685957811 UTC
    [c995d1df:cardano.node.basicInfo.systemStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2019-07-24 20:20:16 UTC
    [c995d1df:cardano.node.basicInfo.slotLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 20s
    [c995d1df:cardano.node.basicInfo.epochLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 21600
    [c995d1df:cardano.node.basicInfo.slotLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Config path /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json, Network magic NetworkMagic {unNetworkMagic = 1097911063}, Protocol "Byron; Shelley", Version "1.35.1", Commit "0000000000000000000000000000000000000000", Node start time 2022-07-10 13:48:51.694962147 UTC
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Byron, Slot length 20s, Epoch length 21600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Shelley, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Allegra, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Mary, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Alonzo, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Babbage, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] startup time: 1657460932
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.70 UTC]
    node addresses: 0.0.0.0:3001
    local socket: /ipc/node.socket
    node-to-node versions:
    NodeToNodeV_7 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)
    NodeToNodeV_8 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)
    NodeToNodeV_9 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* Nil)
    node-to-client versions:
    NodeToClientV_9 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_10 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_11 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_12 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_13 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* Nil)
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Chain DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Immutable DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.79 UTC] Validating chunk no. 0 out of 2917. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validated chunk no. 0 out of 2917. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validating chunk no. 1 out of 2917. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validated chunk no. 1 out of 2917. Progress: 0.03%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validating chunk no. 2 out of 2917. Progress: 0.03%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validated chunk no. 2 out of 2917. Progress: 0.07%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validating chunk no. 3 out of 2917. Progress: 0.07%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validated chunk no. 3 out of 2917. Progress: 0.10%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validating chunk no. 4 out of 2917. Progress: 0.10%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validated chunk no. 4 out of 2917. Progress: 0.14%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validating chunk no. 5 out of 2917. Progress: 0.14%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:54.14 UTC] Validated chunk no. 5 out of 2917.

    ... (Cut for readability)

    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validated chunk no. 2911 out of 2917. Progress: 99.79%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validating chunk no. 2912 out of 2917. Progress: 99.79%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validated chunk no. 2912 out of 2917. Progress: 99.83%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validating chunk no. 2913 out of 2917. Progress: 99.83%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validated chunk no. 2913 out of 2917. Progress: 99.86%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validating chunk no. 2914 out of 2917. Progress: 99.86%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validated chunk no. 2914 out of 2917. Progress: 99.90%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validating chunk no. 2915 out of 2917. Progress: 99.90%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validated chunk no. 2915 out of 2917. Progress: 99.93%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validating chunk no. 2916 out of 2917. Progress: 99.93%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validated chunk no. 2916 out of 2917. Progress: 99.97%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validating chunk no. 2917 out of 2917. Progress: 99.97%
    [c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the secondary index for the chunk file with number 2917.
    [c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the primary index for the chunk file with number 2917.
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Found a valid last location at chunk 2917 with tip 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432@63009237.
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Opened imm db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and chunk 2917
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Started opening Volatile DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Opened vol db
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Started opening Ledger DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replaying ledger from snapshot at 16ce3e707388b8c033f87b440ac89095b2d2fc5fa2b42f768c38da286312a31a at slot 63005524
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replayed block: slot 63005533 out of 63009237. Progress: 0.24%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.20 UTC] Replayed block: slot 63007165 out of 63009237. Progress: 44.20%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Opened lgr db
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Started initial chain selection
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.45 UTC] Pushing ledger state for block 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] before next, messages elided = 63009476
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 5e59df354b64634bd27fc1b3ed08991c6de909ea085625da2ca78ec5a6a3e37c at slot 63019450. Progress: 13.85%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block e0610e4f03ef640ead31a729f6f18aa820f3906f6414b179d3c553f0011162ef at slot 63019479. Progress: 13.89%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 8edc84f1f289475ca5c2afd9cae3c704ed7bcdf3e489fd1842e3904bd2d6d8c5 at slot 63019510. Progress: 13.93%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] before next, messages elided = 63019575
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block fc426a1c3a8c5ae61100e5ccfcaa47ccfb6cc144ed17fcd47a2b55f48890790a at slot 63029515. Progress: 27.75%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 68059200505d3ec65d3ddce9441efb0607adab002066c00acc050f5bb0c53deb at slot 63029578. Progress: 27.84%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 25f5cc004ad90dc554e085699f1386dc8f69cec4012a7b35735b83da6fa68a0b at slot 63029602. Progress: 27.87%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] before next, messages elided = 63029636
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block cfb3dd669fd1a85aaf005ddd0e4a8b90cbb7b2c66dc8ff6f41e2e7aa2a0f0c57 at slot 63039634. Progress: 41.72%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block d7f057436e749e4468cfd8b17a04d447c4ce628b8dc33ea7ebdc4d3ad4659dec at slot 63039638. Progress: 41.73%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block 73fcb92346714585e1dbb484b1678bb15dab7304a8071cd95ec85195ca7a46be at slot 63039655. Progress: 41.75%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] before next, messages elided = 63039729
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block a7256fa99f7bf50d0e764cb80122222b1d2b80ffef4bee30e42c0bb80c5f1168 at slot 63049716. Progress: 55.64%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block 75e2064629d6a017bfe324a3d31723ed7bfa017eceda1549bd6c9f4d63653394 at slot 63049861. Progress: 55.84%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.94 UTC] Pushing ledger state for block 71aeaae8f83ee6b94a7feb521c16f0d889a9b95be6da85d540ac0435b412fb2c at slot 63049904. Progress: 55.90%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] before next, messages elided = 63049909
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block 15ad241c6908d0748cb80d17035d4001f7f86ee22fe71197cbe9bc7489d8e71b at slot 63059862. Progress: 69.65%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block a5e38b0875d44e10a3cba9c420ad4c9708e913e3458f1003a8236a831762069a at slot 63059915. Progress: 69.73%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block ca6dc89bd705476bcd056d6ffc3dd43499e51d0e5ecfe56a439fadacac50fc1b at slot 63059939. Progress: 69.76%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] before next, messages elided = 63059957
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 3c8593b6859b02abaa7f3b69d2114b1f402c65eef6904020e5ed37356aea4461 at slot 63069941. Progress: 83.57%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 50a06570febcf89ee00c386979d3a616561996b6c5cf6cbff44c20aa8454c375 at slot 63069971. Progress: 83.61%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 6265f3c30f149ba0a797a1d2c6998b918f089e7455ab665e3369456105901a5a at slot 63069972. Progress: 83.62%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] before next, messages elided = 63069985
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 0be786a1d9272083e9e184da3bc3bfcb71b82ad10fbf52f4959dc5dc6d1b7b3c at slot 63079898. Progress: 97.32%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 2862bd67a50bf9f6f31ab11d9153663d3e657f88c24ba8e71174f8f5216c2a99 at slot 63079992. Progress: 97.45%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block cc9036c6c4076ca28ac5d03522001c233a9202cb5b1d9484c3e406fbb3406fd5 at slot 63079994. Progress: 97.45%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] before next, messages elided = 63080024
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Pushing ledger state for block c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837. Progress: 100.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Valid candidate at tip 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Initial chain selected
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Opened db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and tip c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837
    [c995d1df:cardano.node.shutdown:Warning:5] [2022-07-10 13:53:39.87 UTC] Will terminate upon reaching NoShutdown
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] CreatingServerSocket 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ConfiguringServerSocket 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ListeningServerSocket 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ServerSocketUp 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] RunServer (0.0.0.0:3001 :| [])
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreateSystemdSocketForSnocketPath (LocalAddress "/ipc/node.socket")
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreatedLocalSocket (LocalAddress "/ipc/node.socket")
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ConfiguringLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ListeningLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] LocalSocketUp (LocalAddress "/ipc/node.socket") (FileDescriptor 26)
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] RunLocalServer (LocalAddress "/ipc/node.socket")
    [c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d014:e00:a200:0:1:0:1]:3001
    [c995d1df:cardano.node.DnsSubscription:Notice:358] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 3.131.32.242:3001
    [c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d01c:321:2101:0:1:0:2]:3001
    [c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 13.41.9.54:3001
    [c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.95 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt End, destination 13.41.9.54:3001 outcome: ConnectSuccessLast
    [c995d1df:cardano.node.ErrorPolicy:Notice:343] [2022-07-10 13:53:39.95 UTC] IP 3.131.32.242:3001 ErrorPolicySuspendConsumer (Just (ConnectionExceptionTrace (SubscriberError {seType = SubscriberParallelConnectionCancelled, seMessage = "Parallel connection cancelled", seStack = []}))) 1s

    Then the Cardano node will synchronize with the other nodes of the network and start adding blockss

    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:53:40.06 UTC] Chain extended, new tip: 7ae33b2f4bc8b84e77dfd539f0f6e7f59b293e96f62fdcfdb17cbd7a006fe5c0 at slot 63081906
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:08.30 UTC] Chain extended, new tip: 6b4ccd2bec5e3862b23ea0f7c2f342a3659cecdcfdaf04551179df3839be6213 at slot 63092090
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:21.36 UTC] Chain extended, new tip: 6e95eb82da5a38544e6ef430a2733f6014c3c10527003b9d3bdc534f6a2ce81f at slot 63092103
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:39.04 UTC] Chain extended, new tip: a662672ec4b988022e135cb0b7e440f5fbffe8e205771d13a566a418f7021ba7 at slot 63092121
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:45.18 UTC] Chain extended, new tip: 2a0f2e6f218a08f4e0bc4668285d8e792fd7ec62f05880bd5b2d23d6bce20dfb at slot 63092127
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:18.05 UTC] Chain extended, new tip: ab9ef8af92ec062ec59a10da588e238ba8840705c095ebd5cd5da7ab9ea9c8e1 at slot 63092160
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:45.15 UTC] Chain extended, new tip: e59bcbf34172eb6a934e2580f6b20ebe1ea32fba7420feec096744fab8ffce76 at slot 63092189
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:57:59.06 UTC] Chain extended, new tip: ea0e76fe069a0bcb831cf6b342530adf2a28de4922a752cff734fe81a1842dff at slot 63092263
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:02.27 UTC] Chain extended, new tip: 1b68a85a10dd7bd840a69ece2807fbca61a1de07c30080bf94fbbfd1de8d1446 at slot 63092266
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:28.21 UTC] Chain extended, new tip: 07e1252c5614b9bb6e6cff95066c134eb251aea6bef33dc34c0dd064934f2cea at slot 63092292
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:33.17 UTC] Chain extended, new tip: 0d3712fd7852b0aff00d660f4e7dc609808018dc271fe460bb9ff8270dd50d8f at slot 63092297
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:48.53 UTC] Chain extended, new tip: c8bb96ea392e41dce6fc157e164dbe19ba894d268f69985e20a2d65daeb4488c at slot 63092312
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:58.08 UTC] Chain extended, new tip: 35ea30e175abaae7983db9f65e7a00ba45312ecb151e53a651b3a6058add4c4f at slot 63092322
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:02.13 UTC] Chain extended, new tip: 5320de43ea30e46515f48263211212833474ea87ff046f36f0d83059fad6e9ff at slot 63092326
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:06.29 UTC] Chain extended, new tip: 58e9cb29bd771e0625689a0d591a7a8309f9e859ce4a3b70a9ab2e28173ce78b at slot 63092330
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:36.31 UTC] Chain extended, new tip: 1af2411f492e1895231cc910bdb1a68a45596157bcbfae5bdfd5c5ed81b03054 at slot 63092360
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:04.51 UTC] Chain extended, new tip: 270d47c5a277ef7efe028b6eb4764ab328db8e509ad962370bb383b1832bb260 at slot 63092388
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:29.52 UTC] Chain extended, new tip: 6fbe009ac36363cbebc607c733964878dfce6054c8785d1294f202acb475c861 at slot 63092413
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:01:12.63 UTC] Chain extended, new tip: f764596ece0b75d5d0054f22f3f0a0846f1647ff980d053015065099ec279839 at slot 63092456
    + \ No newline at end of file diff --git a/doc/manual/getting-started/run-mithril-devnet/index.html b/doc/manual/getting-started/run-mithril-devnet/index.html index cf4cc47317..52807d09e4 100644 --- a/doc/manual/getting-started/run-mithril-devnet/index.html +++ b/doc/manual/getting-started/run-mithril-devnet/index.html @@ -18,13 +18,13 @@ - +
    -
    Version: Current

    Run a Private Mithril network

    info

    In this guide, you will learn how to run a demonstration of a Mithril Network working on top of a private devnet Cardano Network. This network is completely autonomous and setup to produce Mithril snapshots every 1 minute.

    The network will be launched with the following topology:

    • 2 Cardano Nodes configured as Stake Pool Operators (SPO) with a Mithril Signer on top
    • 1 Cardano Node configured as BFT node with a Mithril Aggregator on top

    Devnet Topology

    danger

    This demonstration is working only on a Linux machine.

    tip

    More information about this private Cardano/Mithril devnet is available here.

    Video demonstration

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version).

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run apt install libssl-dev

    • Ensure SQLite3 library is installed on your system and its version is at least 3.40. Run sqlite3 --version to check your version.

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Change directory​

    Go to the devnet folder

    cd mithril-test-lab/mithril-devnet

    Run a Private Mithril/Cardano network locally (devnet)​

    Step 1: Launch the devnet​

    Open a first terminal window.

    Run a devnet with 1 BTF and 2 SPO Cardano nodes.

    Option 1: Remote Docker images

    The network will be ready faster with remote Docker images.

    MITHRIL_IMAGE_ID=latest NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh

    Or

    Option 2: Local Docker images

    This takes more time to build local Docker images of the Mithril nodes

    NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh
    info

    You will see that the devnet is launched with the following steps:

    • Bootstraping the devnet: generates the artifacts of the devnet depending on the configuration parameters (cryptographic keys, network topology, transactions to setup pool nodes, ...)
    • Start Cardano Network: run the nodes of the Cardano Network, waits for it to be ready and activate the pool nodes
    • Start Mithril Network: run the nodes of the Mithril Network that works on top of the Cardano Network

    You should see the following information displayed

    =====================================================================
    Bootstrap Mithril/Cardano devnet
    =====================================================================

    >> Directory: artifacts
    >> Cardano BFT nodes: 1
    >> Cardano SPO nodes: 2
    >> Info: Mithril Aggregator will be attached to the first Cardano BFT node
    >> Info: Mithril Signers will be attached to each Cardano SPO node

    =====================================================================
    Start Cardano nodes
    =====================================================================

    >> Start Cardano network
    cardano-node: no process found
    >> Starting Cardano node 'node-bft1'
    >> Starting Cardano node 'node-pool1'
    >> Starting Cardano node 'node-pool2'
    >> Wait for Cardano network to be ready
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> 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

    =====================================================================
    Start Mithril nodes
    =====================================================================

    >> Start 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 }, url_snapshot_manifest: \"\", 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...

    Step 2: Query the devnet​

    Open a second terminal window.

    Watch the state queried from the devnet

    watch -n 1 ./devnet-query.sh

    The networks will be queried every 1s and will display:

    • Certificate production informations gathered from the Mithril Network
    • Utxo, Stake Pools, Stake Distribution from the Cardano Network
    =====================================================================
    Query Mithril/Cardano devnet
    =====================================================================

    =====================================================================
    === Mithril Network
    =====================================================================

    >> Query pending certificate
    {
    "beacon": {
    "network": "devnet",
    "epoch": 2,
    "immutable_file_number": 6
    },
    "protocol": {
    "k": 5,
    "m": 100,
    "phi_f": 0.65
    },
    "signers": []
    }

    >> Query snapshots
    [
    {
    "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"
    ]
    },
    {
    "digest": "1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0",
    "certificate_hash": "be758b84a4b495e82af48747356946efb509ccbc4b44a9c985e3cb3099e35c94",
    "size": 6743,
    "created_at": "2022-07-05T11:26:35.658661878Z",
    "locations": [
    "http://0.0.0.0:8080/aggregator/snapshot/1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0/download"
    ]
    },
    {
    "digest": "fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1",
    "certificate_hash": "4254a6176afbe17967ad1671e4619e9a3f3412115a63dd0eb0f5e8b64094128a",
    "size": 6199,
    "created_at": "2022-07-05T11:26:20.470029035Z",
    "locations": [
    "http://0.0.0.0:8080/aggregator/snapshot/fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1/download"
    ]
    }
    ]

    =====================================================================
    === Cardano Network
    =====================================================================

    >> Query chain tip
    {
    "era": "Alonzo",
    "syncProgress": "100.00",
    "hash": "075fc8366d353b45debedfc6faa92148c8fad584d81dbb4ea7b8b4d121489452",
    "epoch": 2,
    "slot": 219,
    "block": 9
    }

    >> 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

    >> Query stake pools
    pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys
    pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav

    >> Query stake distribution
    PoolId Stake frac
    ------------------------------------------------------------------------------
    pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys 1.052e-3
    pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav 5.258e-4

    Step 3: Observe the devnet​

    Open a third terminal window.

    Watch the logs of each node of the devnet

    watch -n 1 LINES=5 ./devnet-log.sh

    The nodes will be queried every 1s and will display as below

    =====================================================================
    Logs Mithril/Cardano devnet
    =====================================================================

    =====================================================================
    -- docker-compose logs --tail=5
    =====================================================================
    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-bft1/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
    =====================================================================

    =====================================================================
    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
    =====================================================================

    Interact with the Mithril Aggregator by using the Mithril Client​

    Step 1: Prepare some useful variables​

    # Cardano network
    NETWORK=devnet

    # Aggregator API endpoint URL
    AGGREGATOR_ENDPOINT=http://localhost:8080/aggregator

    # Digest of the latest produced snapshot for convenience of the demo
    # You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2
    SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')

    Step 2: Select A Snapshot​

    List the available snapshots with which you can bootstrap a Cardano node

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client list

    You will see a list of snapshots

    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | Network | Digest | Size | Locations | Created |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 | 11808 | 1 | 2022-07-04T16:47:00.258482685Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | 60d9c6e014d22335b34f55f83da728667f04fc1c63152ccff0bce7d217d08447 | 10793 | 1 | 2022-07-04T16:46:45.069646321Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | a3c4bb5f413f1b9648f0a086b3752d25ec62b540b8390917a5a7e78809896d92 | 7991 | 1 | 2022-07-04T16:46:09.817821220Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | b952adaa04dbb42206c69589b9951660f40c7262b088b13434b7a446ec90bc36 | 6746 | 1 | 2022-07-04T16:45:49.616260734Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | 46425fdcfe89ad5ba41a7822a4395e21b539e80c20e2b10546017b14cdcd4e4b | 6196 | 1 | 2022-07-04T16:45:29.425195132Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+

    Step 3: Show Snapshot Details​

    Get some more details from a specific snapshot (Optional)

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client show $SNAPSHOT_DIGEST

    You will see more information about a snapshot

    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Info | Value |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Network | devnet |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Digest | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Size | 11808 |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Location 1 | http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Created | 2022-07-04T16:47:00.258482685Z |
    +------------+-------------------------------------------------------------------------------------------------------------------+

    Step 4: Download Selected Snapshot​

    Download the selected snapshot from the remote location to your remote location

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client download $SNAPSHOT_DIGEST

    You will see that the selected snapshot archive has been downloaded locally

    Download success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 #1
    from http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download
    to /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/snapshot.archive.tar.gz

    Step 5: Restore Selected Snapshot​

    Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client restore $SNAPSHOT_DIGEST

    You will see that the snapshot archive is unpacked and that the associated certificate is valid

    Unpacking snapshot...
    Unpack success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917
    to /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db

    Restore a Cardano Node with:

    docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data \
    --mount type=bind,source="./data/devnet/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db",target=/data/db/ \
    -e NETWORK=devnet \
    inputoutput/cardano-node
    - +
    Version: Current

    Run a Private Mithril network

    info

    In this guide, you will learn how to run a demonstration of a Mithril Network working on top of a private devnet Cardano Network. This network is completely autonomous and setup to produce Mithril snapshots every 1 minute.

    The network will be launched with the following topology:

    • 2 Cardano Nodes configured as Stake Pool Operators (SPO) with a Mithril Signer on top
    • 1 Cardano Node configured as BFT node with a Mithril Aggregator on top

    Devnet Topology

    danger

    This demonstration is working only on a Linux machine.

    tip

    More information about this private Cardano/Mithril devnet is available here.

    Video demonstration

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version).

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run apt install libssl-dev

    • Ensure SQLite3 library is installed on your system and its version is at least 3.40. Run sqlite3 --version to check your version.

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Change directory​

    Go to the devnet folder

    cd mithril-test-lab/mithril-devnet

    Run a Private Mithril/Cardano network locally (devnet)​

    Step 1: Launch the devnet​

    Open a first terminal window.

    Run a devnet with 1 BTF and 2 SPO Cardano nodes.

    Option 1: Remote Docker images

    The network will be ready faster with remote Docker images.

    MITHRIL_IMAGE_ID=latest NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh

    Or

    Option 2: Local Docker images

    This takes more time to build local Docker images of the Mithril nodes

    NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh
    info

    You will see that the devnet is launched with the following steps:

    • Bootstraping the devnet: generates the artifacts of the devnet depending on the configuration parameters (cryptographic keys, network topology, transactions to setup pool nodes, ...)
    • Start Cardano Network: run the nodes of the Cardano Network, waits for it to be ready and activate the pool nodes
    • Start Mithril Network: run the nodes of the Mithril Network that works on top of the Cardano Network

    You should see the following information displayed

    =====================================================================
    Bootstrap Mithril/Cardano devnet
    =====================================================================

    >> Directory: artifacts
    >> Cardano BFT nodes: 1
    >> Cardano SPO nodes: 2
    >> Info: Mithril Aggregator will be attached to the first Cardano BFT node
    >> Info: Mithril Signers will be attached to each Cardano SPO node

    =====================================================================
    Start Cardano nodes
    =====================================================================

    >> Start Cardano network
    cardano-node: no process found
    >> Starting Cardano node 'node-bft1'
    >> Starting Cardano node 'node-pool1'
    >> Starting Cardano node 'node-pool2'
    >> Wait for Cardano network to be ready
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> 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

    =====================================================================
    Start Mithril nodes
    =====================================================================

    >> Start 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 }, url_snapshot_manifest: \"\", 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...

    Step 2: Query the devnet​

    Open a second terminal window.

    Watch the state queried from the devnet

    watch -n 1 ./devnet-query.sh

    The networks will be queried every 1s and will display:

    • Certificate production informations gathered from the Mithril Network
    • Utxo, Stake Pools, Stake Distribution from the Cardano Network
    =====================================================================
    Query Mithril/Cardano devnet
    =====================================================================

    =====================================================================
    === Mithril Network
    =====================================================================

    >> Query pending certificate
    {
    "beacon": {
    "network": "devnet",
    "epoch": 2,
    "immutable_file_number": 6
    },
    "protocol": {
    "k": 5,
    "m": 100,
    "phi_f": 0.65
    },
    "signers": []
    }

    >> Query snapshots
    [
    {
    "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"
    ]
    },
    {
    "digest": "1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0",
    "certificate_hash": "be758b84a4b495e82af48747356946efb509ccbc4b44a9c985e3cb3099e35c94",
    "size": 6743,
    "created_at": "2022-07-05T11:26:35.658661878Z",
    "locations": [
    "http://0.0.0.0:8080/aggregator/snapshot/1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0/download"
    ]
    },
    {
    "digest": "fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1",
    "certificate_hash": "4254a6176afbe17967ad1671e4619e9a3f3412115a63dd0eb0f5e8b64094128a",
    "size": 6199,
    "created_at": "2022-07-05T11:26:20.470029035Z",
    "locations": [
    "http://0.0.0.0:8080/aggregator/snapshot/fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1/download"
    ]
    }
    ]

    =====================================================================
    === Cardano Network
    =====================================================================

    >> Query chain tip
    {
    "era": "Alonzo",
    "syncProgress": "100.00",
    "hash": "075fc8366d353b45debedfc6faa92148c8fad584d81dbb4ea7b8b4d121489452",
    "epoch": 2,
    "slot": 219,
    "block": 9
    }

    >> 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

    >> Query stake pools
    pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys
    pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav

    >> Query stake distribution
    PoolId Stake frac
    ------------------------------------------------------------------------------
    pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys 1.052e-3
    pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav 5.258e-4

    Step 3: Observe the devnet​

    Open a third terminal window.

    Watch the logs of each node of the devnet

    watch -n 1 LINES=5 ./devnet-log.sh

    The nodes will be queried every 1s and will display as below

    =====================================================================
    Logs Mithril/Cardano devnet
    =====================================================================

    =====================================================================
    -- docker-compose logs --tail=5
    =====================================================================
    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-bft1/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
    =====================================================================

    =====================================================================
    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
    =====================================================================

    Interact with the Mithril Aggregator by using the Mithril Client​

    Step 1: Prepare some useful variables​

    # Cardano network
    NETWORK=devnet

    # Aggregator API endpoint URL
    AGGREGATOR_ENDPOINT=http://localhost:8080/aggregator

    # Digest of the latest produced snapshot for convenience of the demo
    # You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2
    SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')

    Step 2: Select A Snapshot​

    List the available snapshots with which you can bootstrap a Cardano node

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client list

    You will see a list of snapshots

    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | Network | Digest | Size | Locations | Created |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 | 11808 | 1 | 2022-07-04T16:47:00.258482685Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | 60d9c6e014d22335b34f55f83da728667f04fc1c63152ccff0bce7d217d08447 | 10793 | 1 | 2022-07-04T16:46:45.069646321Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | a3c4bb5f413f1b9648f0a086b3752d25ec62b540b8390917a5a7e78809896d92 | 7991 | 1 | 2022-07-04T16:46:09.817821220Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | b952adaa04dbb42206c69589b9951660f40c7262b088b13434b7a446ec90bc36 | 6746 | 1 | 2022-07-04T16:45:49.616260734Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | 46425fdcfe89ad5ba41a7822a4395e21b539e80c20e2b10546017b14cdcd4e4b | 6196 | 1 | 2022-07-04T16:45:29.425195132Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+

    Step 3: Show Snapshot Details​

    Get some more details from a specific snapshot (Optional)

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client show $SNAPSHOT_DIGEST

    You will see more information about a snapshot

    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Info | Value |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Network | devnet |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Digest | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Size | 11808 |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Location 1 | http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Created | 2022-07-04T16:47:00.258482685Z |
    +------------+-------------------------------------------------------------------------------------------------------------------+

    Step 4: Download Selected Snapshot​

    Download the selected snapshot from the remote location to your remote location

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client download $SNAPSHOT_DIGEST

    You will see that the selected snapshot archive has been downloaded locally

    Download success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 #1
    from http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download
    to /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/snapshot.archive.tar.gz

    Step 5: Restore Selected Snapshot​

    Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client restore $SNAPSHOT_DIGEST

    You will see that the snapshot archive is unpacked and that the associated certificate is valid

    Unpacking snapshot...
    Unpack success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917
    to /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db

    Restore a Cardano Node with:

    docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data \
    --mount type=bind,source="./data/devnet/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db",target=/data/db/ \
    -e NETWORK=devnet \
    inputoutput/cardano-node
    + \ No newline at end of file diff --git a/doc/manual/getting-started/run-signer-node/index.html b/doc/manual/getting-started/run-signer-node/index.html index 7062442e84..dec8df75c4 100644 --- a/doc/manual/getting-started/run-signer-node/index.html +++ b/doc/manual/getting-started/run-signer-node/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@
    Version: Current

    Run a Mithril Signer node (SPO)

    info

    In this guide, you will learn how to setup a Mithril Signer on top of a Cardano SPO Node for the testnet.

    Mithril Networks

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)
    danger

    This guide is working only on a Linux machine.

    tip

    For more information about the Mithril Protocol, please refer to the About Mithril section.

    Pre-requisites​

    What you'll need​

    • Operating a Cardano Node as a Stake Pool:

      • The Cardano Operational Certificate file of the pool
      • The Cardano KES Secret Key file of the pool
    • Access to the file system of a relay Cardano Node running on the testnet:

      • Read rights on the Database folder (--database-path setting of the Cardano Node)
      • Read/Write rights on the Inter Process Communication file (usually CARDANO_NODE_SOCKET_PATH env var used to launch the Cardano Node)
    • Install a recent version of the cardano-cli (version 8.0.0+)

    • Install a correctly configured Rust toolchain (latest stable version).

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run apt install libssl-dev

    • Ensure the SQLite3 version is at least 3.35 (released Apr. 2021)

    • Install a recent version of jq (version 1.6+) apt install jq

    Mithril Keys Certification​

    Certify your Pool Id​

    You must declare your Cardano Operational Certificate file and KES Secret Key file which allows to:

    • Compute automatically the PoolId
    • Verify that you are the owner of the PoolId, and thus of the associated stakes used by Mithril protocol
    • Verify that you are the owner of the Mithril Signer Secret Key, and thus allowed to contribute to the multi-signatures and certificate production of the Mithril network

    Building your own executable​

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Build Mithril Signer binary​

    Switch to build branch / tag

    # **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, 
    # please refer to the **Build From** column of the above **Mithril Networks** table
    git switch **YOUR_BUILD_BRANCH_OR_TAG**

    Change directory

    cd mithril/mithril-signer

    Run tests (Optional)

    make test

    Build executable

    make build

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Verify binary​

    Verify version​

    Check that the Mithril Signer binary is running the correct version by running

    ./mithril-signer -V

    You should see something like

    mithril-signer 0.2.0

    ⚠️ Verify that the version displayed is the version described in the content of the Release / Pre-Release note (see the Build From column of the above Mithril Networks table)

    Verify build​

    Check that the Mithril Signer binary is working fine by running its help

    ./mithril-signer -h

    You should see

    An implementation of a Mithril Signer

    Usage: mithril-signer [OPTIONS]

    Options:
    -r, --run-mode <RUN_MODE>
    Run Mode [env: RUN_MODE=] [default: dev]
    -v, --verbose...
    Verbosity level, add more v to increase
    -c, --configuration-dir <CONFIGURATION_DIR>
    Directory where the configuration file is located [default: ./config]
    --disable-digests-cache
    Disable immutables digests cache
    --reset-digests-cache
    If set the existing immutables digests cache will be reset
    -h, --help
    Print help information (use `--help` for more detail)
    -V, --version
    Print version information
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Signer:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Install the service​

    Move executable​

    Move executable to /opt/mithril

    sudo mkdir -p /opt/mithril
    sudo mv mithril-signer /opt/mithril

    Setup the service​

    caution
    • User=cardano: Replace this value with the correct user. We assume that the user used to run the Cardano Node is cardano. The Mithril Signer must imperatively run with the same user.

    • In the /opt/mithril/mithril-signer/service.env env file:

      • KES_SECRET_KEY_PATH=/cardano/keys/kes.skey: replace /cardano/keys/kes.skey with the path to your Cardano KES Secret Key file
      • OPERATIONAL_CERTIFICATE_PATH=/cardano/cert/opcert.cert: replace /cardano/cert/opcert.cert with the path to your Cardano Operational Certificate file
      • DB_DIRECTORY=/cardano/db: replace /cardano/db with the path to the database folder of the Cardano Node (the one in --database-path)
      • CARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket: replace with the path to the IPC file (CARDANO_NODE_SOCKET_PATH env var)
      • CARDANO_CLI_PATH=/app/bin/cardano-cli: replace with the path to the cardano-cli executable
      • DATA_STORES_DIRECTORY=/opt/mithril/stores: replace with the path to a folder where the Mithril Signer will store its data (/opt/mithril/stores e.g.)
      • STORE_RETENTION_LIMIT: if set, this will limit the number of records in some internal stores (5 is a good fit).
      • ERA_READER_ADAPTER_TYPE=cardano-chain: replace cardano-chain with the era reader adapter type used in your Mithril network
      • ERA_READER_ADAPTER_PARAMS={"address": "...", "verification_key": "..."}: replace {"address": "...", "verification_key": "..."} with the era reader params that you need to compute by running the command jq -nc --arg address $(wget -q -O - **YOUR_ERA_READER_ADDRESS**) --arg verification_key $(wget -q -O - **YOUR_ERA_READER_VERIFICATION_KEY**) '{"address": $address, "verification_key": $verification_key}'

    First create an env file that will be used by the service:

    sudo bash -c 'cat > /opt/mithril/mithril-signer.env << EOF
    KES_SECRET_KEY_PATH=**YOUR_KES_SECRET_KEY_PATH**
    OPERATIONAL_CERTIFICATE_PATH=**YOUR_OPERATIONAL_CERTIFICATE_PATH**
    NETWORK=**YOUR_CARDANO_NETWORK**
    AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**
    RUN_INTERVAL=60000
    DB_DIRECTORY=/cardano/db
    CARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket
    CARDANO_CLI_PATH=/app/bin/cardano-cli
    DATA_STORES_DIRECTORY=/opt/mithril/stores
    STORE_RETENTION_LIMIT=5
    ERA_READER_ADAPTER_TYPE=**YOUR_ERA_READER_ADAPTER_TYPE**
    ERA_READER_ADAPTER_PARAMS=**YOUR_ERA_READER_ADAPTER_PARAMS**
    EOF'

    Then we will create a /etc/systemd/system/mithril-signer.service description file for our service

    sudo bash -c 'cat > /etc/systemd/system/mithril-signer.service << EOF
    [Unit]
    Description=Mithril Signer service
    StartLimitIntervalSec=0

    [Service]
    Type=simple
    Restart=always
    RestartSec=1
    User=cardano
    EnvironmentFile=/opt/mithril/mithril-signer.env
    ExecStart=/opt/mithril/mithril-signer -vvv

    [Install]
    WantedBy=multi-user.target
    EOF'

    Reload the service configuration (Optional)

    sudo systemctl daemon-reload

    Then start the service

    sudo systemctl start mithril-signer

    Then register the service to start on boot

    sudo systemctl enable mithril-signer

    Then monitor status of the service

    systemctl status mithril-signer.service

    And monitor the logs of the service

    tail /var/log/syslog
    tip

    There is a 2 epochs delay between the signer node registration and its ability to create individual signatures, as explained in the Mithril Certificate Chain in depth. After this delay, you should be able to see your PoolId listed in some of the certificates available on the Mithril Explorer

    - + \ No newline at end of file diff --git a/doc/manual/welcome/index.html b/doc/manual/welcome/index.html index 3275c91107..c34e4cee22 100644 --- a/doc/manual/welcome/index.html +++ b/doc/manual/welcome/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    User Manual

    Welcome to the Mithril user manual!

    Let's discover Mithril in less than 5 minutes.

    Introduction​

    A Mithril Network is composed of 3 main components:

    • Mithril Aggregator:

    This node is in charge of coordinating the production of the Cardano snapshot archives (along with the associated certificates powered by Mithril multi signatures) by interacting with Mithril Signer nodes and a Cardano node.

    • Mithril Signer:

    This node is in charge of producing single signatures that are then combined into a multi signature by the Mithril Aggregator. It works side by side with a Cardano node that has stakes in the network (Stake Pool Operator or SPO).

    • Mithril Client:

    This node is in charge of verifying and restoring a snapshot that will allow a lightning fast bootstrapping of a Cardano full node.

    tip

    For more information about the Mithril Protocol, please refer to the About Mithril section.

    What you'll need​

    What you'll find in the user manual​

    In the Getting Started guide, you will find tutorials for:

    In the Developer Docs, you will find documentation for:

    tip

    If you need help, feel free to reach the Mithril team:

    - + \ No newline at end of file diff --git a/doc/mithril/intro/index.html b/doc/mithril/intro/index.html index 28fddc61bc..ad67f7d620 100644 --- a/doc/mithril/intro/index.html +++ b/doc/mithril/intro/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    About Mithril

    New

    πŸ†• Interact with the Mithril Protocol by experiencing with our protocol simulation. This will help you understand how the participants interact to create a multi signature and what's the impact of the protocol parameters.

    Mithril in a nutshell​

    Mithril is a research project which goal is to provide Stake-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 stakes.

    In other words, an adversarial participant with less than this share of the total stakes will not be able to produce valid multi signatures πŸ”.

    What you'll find in this guide​

    In this About Mithril guide, you will find:

    tip

    If you need help, feel free to reach the Mithril team:

    - + \ No newline at end of file diff --git a/doc/mithril/mithril-network/aggregator/index.html b/doc/mithril/mithril-network/aggregator/index.html index 5f9f057238..1f5f317b95 100644 --- a/doc/mithril/mithril-network/aggregator/index.html +++ b/doc/mithril/mithril-network/aggregator/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    Mithril Aggregator Node

    Welcome to the Mithril Aggregator Node guide!

    Introduction​

    info

    The Mithril Aggregator is a trustless node that orchestrates the work of the Mithril Signer nodes and that gathers their individual signatures to produce Mithril multi signatures and their associated certificates. It is also in charge of creating and storing the ledger state snapshot archive.

    tip

    Trustless Orchestration​

    The primary goal of the Mithril Aggregator is to orchestrate and synchronize the Mithril multi signatures production:

    • When a new snapshot is ready to be produced (and certified), the Mithril Aggregator creates and broadcasts a new Beacon that indicates to the Mithril Signers which point in time they should use to compute the message (or digest) to sign.

    • It is also responsible for advertising the Verification Keys (Mithril public keys) of all the registered Mithril Signers.

    • The Beacon, the current Protocol Parameters and the available Verification Keys are gathered and advertised in a Pending Certificate.

    • The Mithril Signers can register with it, in order to be able to later participate in the signature process.

    An important fact is that the Mithril Aggregator is trustless:

    • Anyone could run an aggregator on the network.

    • It does not broadcast any sensitive information (such as the message that needs to be signed). The signer nodes are responsible for computing these information directy from a Cardano Node on top of which they run.

    Also, in order to aggregate single signatures into Mithril multi signatures, the *Mithril Aggregator does not need to represent any share of the total stakes of the Cardano Network.

    Multi Signature and Certificate Production​

    The Mithril Aggregator is in charge of producing the Mithril multi signatures and their associated certificates for a part and/or all of the ledger state (the snapshots):

    • The previously registered Mithril Signers are able to produce individual signatures. They send these individual signatures to the Mithril Aggregator that checks their validity and then store them.

    • Once the quorum of individual signatures has been reached, the Mithril Aggregator is able to produce a multi signature.

    • The Mithril Aggregator combines the multi signature and some metadata into a Mithril Certificate that will be later used by the Mithril Client to verify the authenticity of a snapshot.

    tip

    For more information about the Mithril Certificate Chain, please refer to the Certificate Chain page.

    Snapshot Artifacts Production​

    In its first version, the Mithril Aggregator also takes care of producing the artifacts associated to the snapshot (e.g. the snapshot archive that will be later used by a Mithril Client).

    note

    It is worthy to mention that this role is endorsed only for convenience at the moment, and that on the long run the artifacts production will be delegated to a separate Mithril Snapshotter node.

    Once the snapshot artifact is created, it can be synchronized anywhere:

    • On the Mithril Aggregator itself.

    • On any cloud platform that provides a CDN.

    • On a separate peer to peer network (such as IPFS or Bittorrent).

    The Mithril Certificate is part of a chain of certificates that are involved in the snapshot authenticity verification and is stored:

    • On the Mithril Aggregator itself

    • Or on any accessible storage (as a cloud storage for example)

    Snapshot Artifacts and Certificate Distribution​

    In case the Mithril Aggregator stores the snapshot artifacts and/or the certificates, it can be used to distribute these data to remote clients. These clients can use them according to their need and verify that are genuine.

    Under the hood​

    In its first version, the Mithril Aggregator is composed of two main components:

    • A REST API, that enables the Mithril Signers to:
      • Retrieve other registered signers Verification Keys.
      • Register their Verification Keys.
      • Register their Individual Signatures.
    tip

    The documentation of the REST API of the Mithril Aggregator is available here.

    • A runtime that is powered by a state machine:
      • The runtime is synchronous and is scheduled to execute at regular intervals.
      • There are three possible states: IDLE , READY and SIGNING.
      • The runtime handles state transitions.
      • The runtime is summarized in the diagram below:

    Aggregator Runtime

    - + \ No newline at end of file diff --git a/doc/mithril/mithril-network/architecture/index.html b/doc/mithril/mithril-network/architecture/index.html index c04274b7c4..21fe82181c 100644 --- a/doc/mithril/mithril-network/architecture/index.html +++ b/doc/mithril/mithril-network/architecture/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    Mithril Network Architecture

    Welcome to the Mithril Network Architecture guide!

    tip

    For more information about the Mithril Protocol, please refer to the About Mithril section.

    Introduction​

    In its current version, the Mithril Network is a network of nodes responsible for creating Snapshots and Certificates that enable fast bootstrap of a Cardano Node. It runs on top of the Cardano Network.

    info

    The role of a Mithril Network is to enable end users to restore a full Cardano node in less than 2 hours!

    It is basically composed of three nodes:

    The trustless node that orchestrates the work of the Mithril Signer nodes and that gathers their individual signatures to produce Mithril multi signatures and their associated certificates. It is also in charge of creating and storing the ledger state snapshot archive.

    The node that works transparently on top of the Stake Pool Operator Cardano nodes and which individually signs the ledger state.

    The node used to restore a Cardano full node by retrieving, from a Mithril Aggregator, a remote snapshot, its certificate chain and by verifying their validity thanks to the Mithril cryptographic primitives.

    Architecture Overview​

    info
    • This document is subject to change as it is a work in progress.
    • We are currenty working on decentralizing further the somewhat centralized architecture.

    Architecture

    - + \ No newline at end of file diff --git a/doc/mithril/mithril-network/client/index.html b/doc/mithril/mithril-network/client/index.html index 8039135856..6a94e22e34 100644 --- a/doc/mithril/mithril-network/client/index.html +++ b/doc/mithril/mithril-network/client/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    Mithril Client Node

    Welcome to the Mithril Client Node guide!

    Introduction​

    info

    The Mithril Client node is used to restore a Cardano full node by retrieving, from a Mithril Aggregator, a remote snapshot, its certificate chain and by verifying their validity thanks to the Mithril cryptographic primitives.

    tip

    Usecases​

    At a first glance, a Mithril Client can be used by any user that needs to restore and bootstrap rapidly a Cardano full node:

    • A full node wallet such as Daedalus
    • A node operator (SPO, Exchange, Dapp)

    On the long run, the Mithril Client is intended to be incorporated in Light Clients and Wallets.

    Snapshot Artifacts Retrieval​

    The first operation that a Mithril Client does is to retrieve snapshot artifacts from a remote source.

    The Mithril Aggregator is used as a provider for the Snapshots (at least their locations).

    This is done upon a manual action of a user that has previously selected the snapshot to use (if multiple are available).

    These artifacs are stored locally on a temporary location, are uncompressed if necessary and used to compute the message that should have been computed and signed by the Mithril Signers.

    Snapshot Verification​

    Along with the snapshot artifacts, the Mithril Client will download the associated Certificate Chain and for each Mithril Certificate verify that (in the following order):

    1. The certificate is not tampered (by computing its hash and verifying that is is the same as the one used for downloading it).
    2. The locally computed message is the same as in the certificate.
    3. The multi signature of the certificate is valid and computed with the certificate message.
    4. The stake distribution used to compute the multi signature is signed:
      • Into a multi signature of a previous certificate of the chain (if there is one available).
      • Or by a valid Genesis Certificate (in case this is the first certificate of the chain).

    The Mithril Aggregator is used as a provider for the Certificate Chain.

    tip

    For more information about the Mithril Certificate Chain, please refer to the Certificate Chain page.

    Snapshot Restoration​

    Once the snapshot artifacts are verified, the Mithril Client node will move them from the temporary location to the final (user specified) location.

    At this point, the Cardano Node will take over, start using the artifacts. and hopefully start addng new blocks to the ledger!

    - + \ No newline at end of file diff --git a/doc/mithril/mithril-network/signer/index.html b/doc/mithril/mithril-network/signer/index.html index f37e05d43b..83f3318ee9 100644 --- a/doc/mithril/mithril-network/signer/index.html +++ b/doc/mithril/mithril-network/signer/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    Mithril Signer Node

    Welcome to the Mithril Signer Node guide!

    Introduction​

    info

    The Mithril Signer is a node that works transparently on top of the Stake Pool Operator Cardano nodes and which individually signs the ledger state.

    tip

    Individual Signatures Production​

    The Mithril Signer is a node that represents a share of the total stake of the Cardano Network which entitles it to participate in the Mithril multi signature creation (with respect to its share of total stakes). The rule is simple, the more stake shares, the more contribution to the production of the multi signatures.

    In order to produce an Individual Signature a Mithril Signer must also be aware of all the other Mithril Signers that may contribute.

    For the protocol to be secure, the Mithril Signer must also be in charge of computing by itself the messages (or digest) that are signed. To do so, they heavily rely on the Consensus mechanism of the Cardano Network that guarantees that all nodes of the network will store the same data locally (after a certain delay).

    If some nodes are not fully synchronized or if they have adversarial behavior they will simple not be able to contribute:

    • Either because they don't sign the same message (given they don't use the same data as those agreed by the rest of the network)

    • Or they are not entitled to sign (because they are not true holders of the stake share they used to sign)

    Interaction with the Mithril Aggregator​

    In its first version, the Mithril Signer works with other Mithril Signers through one Mithril Aggregator which acts as a facilitator and avoids direct signer to signer communications.

    In the long run, any signer will also have the ability to be a Mithril Aggregator as well in order to achieve a higher level of decentralization in the Mithril Network.

    The Mithril Signer connects to the Mithril Aggregator:

    • To know when to sign a new snapshot (by using the advertised Beacon of the Pending Certificate).
    • To retrieve the currently used Protocol Parameters.
    • To register its Verification Keys (public keys).
    • To receive the Verification Keys of all the other declared signers available for the next message to sign.
    • To send the Single Signatures of the locally computed messages (that will hopefuly be combined into Multi signatures by the aggregator).

    This process is summarized in the following diagram:

    signer workflow

    Under the hood​

    In its first version, the Mithril Signer is composed of a main component:

    • A runtime that is powered by a state machine:
      • The runtime is synchronous and is scheduled to execute at regular intervals.
      • There are three possible states: UNREGISTERED, REGISTERED and SIGNED.
      • The runtime handles state transitions.
      • The runtime is summarized in the diagram below:

    Signer Runtime

    - + \ No newline at end of file diff --git a/doc/mithril/mithril-protocol/certificates/index.html b/doc/mithril/mithril-protocol/certificates/index.html index cbfcdf4ac4..d682c6dab4 100644 --- a/doc/mithril/mithril-protocol/certificates/index.html +++ b/doc/mithril/mithril-protocol/certificates/index.html @@ -18,14 +18,14 @@ - +
    Version: Current

    Mithril Certificate Chain in depth

    Introduction​

    The Mithril Protocol 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 stakes.

    The stake distribution that is used to create the multi signature can't be trusted "as is" and must also be signed. Indeed, any one could relatively easily create a Fake Stake Distribution and use it to produce a valid multi signature that would be embedded in a perfectly Valid but Non Genuine Certificate. This certificate could be served by a dishonest Mithril Aggregator node and thus could lead to restoring a non genuine snapshot by a honest Mithril Client.

    In order to avoid this type of eclipse attack, the stake distribution used to create a multi signature must be certified beforehand. This is where the Certificate Chain takes place.

    The Certificate Chain Design​

    danger

    The Stake Distribution of an epoch is computed by the Cardano Nodes at the end of this epoch. It will be usable from the beginning of the following epoch.

    A way to certify the stake distribution used to create a multi signature is to verify that it has been previously signed in an earlier certificate. Then one can recursively verify that the earlier certificate is valid the same way. This process can be designed as a Chain of certificates: the Mithril Certificate Chain.

    As multiple certificates may be created during the same epoch (i.e. with the same stake distribution), it is sufficient to link to only one certificate of the previous epoch: this will allow faster verification times and it will also avoid network congestion.

    Also, the certificate at the beginning of the Certificate Chain has a special role. This is the Genesis Certificate. The only way to validate the stake distributon embedded in the Genesis Certificate is to sign it with a private key that is associated to a broadly available public key: the Genesis Keys. These are the keys that sign the hard forks used during the era transitions of the Cardano Blockchain.

    Here is a diagram illustrating the Certificate Chain design: Certificate Chain Design

    Where the following notations have been used:

    • C(p,n): Certificate at trigger p and epoch n
    • FC(n): First Certificate of epoch n
    • GC: Genesis Certificate
    • H(): Hash
    • SD(n): Stake Distribution of epoch n
    • VK(n): Verification Key at epoch n
    • AVK(n): Aggregrate Verification Key at epoch n such as AVK(n) = MKT_ROOT(SD(n) || VK(n))
    • MKT_ROOT(): Merkle-tree root
    • BEACON(p,n): Beacon at trigger p and epoch n
    • METADATA(p,n): Metadata of the certificate at trigger p and epoch n
    • MSG(p,n): Message of the certificate at trigger p and epoch n
    • MULTI_SIG(p,n): Multi signature created to the message H(MSG(p,n) || AVK(n-1))
    • GENESIS_SIG(MSG): Genesis Signature, i.e. signature of MSG with the Genesis Keys

    The hash of a Certificate H(C(p,n)) is computed as the concatenation (||) of all its fields. Therefore, if one field is modified, its hash is different.

    The informations embedded in the METADATA(p,n) field are:

    • The version of the Mithril Protocol
    • The parameter of the Mithril Protocol (k, m, and phi_f)
    • The date and time at which the multi signature creation was initiated
    • The date and time at which the Certificate was sealed
    • The list of the signers that actively contributed to the multi signature

    The message MSG(p,n) is a map of multiple values associated with their respective keys and provides a way to add more informations in the certificates without breaking the chain itself. These can be any message that the signers are able to compute deterministically thanks to the Cardano consensus: an immutable files snapshot, the Utxo set, the stahe distribution, ...

    note

    The trigger represents the instant at which a certificate should be created. It is combined, with at least the associated epoch to create the Beacon of the certificate. In the current implementation, this trigger is a new Immutable File Number. The epoch creation and the trigger creation processes may be uncorrelated.

    info

    The AVK or Aggregate Verification Key is the root of the Merkle-tree where each leaf is filled with H(STAKE(signer) || VK(signer)). It represents the corresponding Stake Distribution in a condensed way.

    The Verification Algorithm​

    The Certificate Chain verification can be stated as:

    CHAIN_VERIFY[C(p,n(p))] = CERT_VERIFY[C(p,n(p)] ^ CERT_VERIFY[FC(n(p))] ^ CERT_VERIFY[FC(n(p)-1)] ^ ... ^ CERT_VERIFY[FC(1)] ^ CERT_VERIFY[GC]

    Where the following notations have been used:

    • The epoch n(p) depends on the trigger p
    • CHAIN_VERIFY[]: Verify all the chain backward from a certificate
    • CERT_VERIFY[]: Verify a specific certificate

    A Certificate Chain is valid if from a Certificate, up to the Genesis Certificate of the chain there is at least one valid certificate per epoch.

    A non Genesis Certificate is valid if and only if the AVK used to verify the multi signature is also part of the signed message used to create a valid multi signature in a previously sealed Certificate.

    The Genesis Certificate is valid if and only if its Genesis Signature is verified with the advertised Public Genesis Key.

    An implementation of the algorithm would work as follows for a certificate:

    • Step 1: Use this certificate as the current_certificate
    • Step 2: Verify (or fail) that the current_hash of the current_certificate is valid (by computing it and comparing with the hash field of the certificate)
    • Step 3: Get the previous_hash of the previous_certificate by reading its value in the current_certificate
    • Step 4: Verify (or fail) that the multi_signature of the current_certificate is valid
    • Step 5: Retrieve the previous_certificate that has the hash previous_hash:
      • Step 5.1: If it is not a genesis_certificate:
        • Step 5.1.1: Verify (or fail) that the previous_hash of the previous_certificate is valid (by computing it and comparing with the hash field of the certificate)
        • Step 5.1.2: Verify the current_avk
          • Step 5.1.2.1: If the current_certificate is the first_certificate of the epoch, verify (or fail) that the current_avk of the current_certificate is part of the message signed by the multi signature of the previous_certificate
          • Step 5.1.2.2: Else verify (or fail) that the current_avk of the current_certificate is the same as the current_avk of the previous_certificate
        • Step 5.1.3: Verify (or fail) that the multi_signature of the previous_certificate is valid
        • Step 5.1.4: Use the previous_certificate as current_certificate and start again at Step 2
      • Step 5.2: If it is a genesis_certificate:
        • Step 5.2.1: Verify (or fail) that the previous_hash of the previous_certificate is valid (by computing it and comparing with the hash field of the certificate)
        • Step 5.2.2: Verify (or fail) that the current_avk of the current_certificate is part of the message signed by the genesis signature of the previous_certificate
        • Step 5.2.3: The certificate is valid (Success)

    The coexistence of multiple Certificate Chain​

    What would happen if some Mithril Aggregator claims that not enough signatures were received? This doesn’t really matter, as there will be a different Mithril Aggregator that would collect sufficient signatures and aggregate them into a valid Certificate.

    Similarly, different Mithril Aggregators might have different views of the individual signatures submitted (one aggregator might receive 10 signatures, and a different one could receive 11), which would result in different Certificates signing the same message.

    This would result in different Certificate Chains that would all link back to the Genesis Certificate. Indeed they would be represented by a tree of certificates where each traversal path from the root to a leaf represent a valid Certificate Chain.

    The need of backward compatibility​

    The Certificate Chain is designed to last. At a certain point, we will need to handle the verification of the multi signature from legacy versions of the Mithril cryptographic library.

    In order to achieve this backward compatibility, some options are available:

    • Handle multi signature verification functions of legacy versions
    • Recreate Genesis Certificates from time to time
    • Create intermediate Milestones Certificates (with both a multi signature and a genesis signature)
    • Design a format migration algorithm
    - + \ No newline at end of file diff --git a/doc/mithril/mithril-protocol/protocol/index.html b/doc/mithril/mithril-protocol/protocol/index.html index f5739e129c..7a78292f47 100644 --- a/doc/mithril/mithril-protocol/protocol/index.html +++ b/doc/mithril/mithril-protocol/protocol/index.html @@ -18,7 +18,7 @@ - + @@ -42,7 +42,7 @@ party is stored.
  • Then an aggregate verification key (AVK in the paper) is created from the registration material, in the form of a Merkle-tree.
  • The key dissemination process can also happen on-chain, which makes sense as the parties need to have some guarantees about the validity of keys and stakes of each other party.

    This phase happens once for each instance of the protocol running.

    3. Operations Phase​

    Operations run in cycles, where each cycle is triggered by a message (eg. a snapshot of the UTxO set) to sign for which a quorum of k valid signatures must be submitted.

    • Each party needs to check for eligibility to sign the message. It may be eligible to sign the same message more than once. This check is performed for m distinct indices. For every index, the signer evaluates a function (parameterized with phi_f) that takes its stake as input. If the result of the function is SUCCESS, then the signer is eligible to sign this message for the given index.

    • For every valid signature, it creates a proof (Ο€) containing a signature of the message, verification key, stake and paths of party in the Merkle-tree.

    • Then, multiple signatures can be aggregated together to form a certificate (Ο„) by:

      • Verifying signatures from each party:
        • Checking the party is authorized to sign for the given index (using the same procedure as the signing)
        • Checking the proof is valid which means:
          • Check the evaluation threshold is correct for party’s stake given the message, index and signature
          • Check the provided path exists in the aggregate keys' Merkle-tree
          • Verify the signature of the message is valid w.r.t to verification key
      • Producing an aggregation key from all verification keys
      • Producing an aggregate signature from all signatures ΞΌ
      • Producing a proof using the aggregate keys, the message and the vector of individual proofs from each party:
        • In the concatenation proof system all these values are simply packed together to form the proof,
        • In the case of bulletproof system, a more compact proof is generated.
    • Each certificate Ο„ can be verified to be valid for some message, using the known setup parameters to verify the certificate’s proof and then verifying the aggregate signatures and verification keys.

    Note

    Note that if the individual signatures are broadcast to all parties, then each party can independently produce the certificates. In particular, the party that performs aggregation is not required to have any specific knowledge, nor it is assumed to be honest. This means that any third party that has access to the individual signatures can perform the signature aggregation.

    tip

    For more information about the Mithril Network, please refer to the Architecture page.

    - + \ No newline at end of file diff --git a/doc/mithril/mithril-protocol/simulation/index.html b/doc/mithril/mithril-protocol/simulation/index.html index f92ba4c1a8..e0db0c2b5b 100644 --- a/doc/mithril/mithril-protocol/simulation/index.html +++ b/doc/mithril/mithril-protocol/simulation/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    Mithril Protocol Simulation

    info
    • Thanks to this demo you will get a better understanding of the Mithril Protocol. You will hopefully visualize how the participants interact to create a multi signature and what's the impact of the protocol parameters.

    • This simulation is ran by a CLI that you will build and run, and that will ultimately generate real Mithril multi signatures!

    • For the purpose of reproducibility of the results, the simulation uses a deterministic source of randomness.

    • During the simulation some artifacts will be written to an artifacts folder, such as verification keys, individual signatures and multi signatures.

    What you'll need​

    • A Linux (preferred) or a macOS computer.

    • A correctly configured Rust toolchain (latest stable version).

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Build Mithril Protocol demo binary​

    Change directory

    cd mithril/demo/protocol-demo

    Run tests (Optional)

    make test

    Build executable

    make build

    Verify build​

    Check that the Mithril Client binary is working fine by running its help

    ./mithrildemo -h

    You should see

    mithrildemo 
    Simple demonstration of the Mithril protocol

    USAGE:
    mithrildemo [OPTIONS]

    OPTIONS:
    -h, --help Print help information
    -k, --k <K> Quorum parameter [default: 5]
    -m, --m <M> Security parameter, upper bound on indices [default: 200]
    --nmessages <NMESSAGES> Number of messages to sign [default: 1]
    --nparties <NPARTIES> Number of parties [default: 5]
    --phi-f <PHI_F> f in phi(w) = 1 - (1 - f)^w, where w is the stake of a
    participant [default: 0.2]

    Run the simulation​

    tip

    A friendly reminder about the protocol parameters:

    • k: the Quorum parameter represents the minimum number of individual signatures (gathered from multiple participants) required to be aggregated in a multi signature.
    • m: the Security parameter represents the total number of lotteries in which each participant can participate in order to individually sign the message.
    • phi-f: the parameter on which depends the probability of a particpant to win a lottery. It variates between 0.0 (less chance) and 1.0 (more chance).
    danger

    The security level of the protocol is highly dependent on the value of the protocol parameters.

    Therefore they will be carefully selected by the Mithril cryptographers and researchers in order to guarantee that only legit stakeholders representing a sufficient threshold of the total stakes can combine their individual signatures in a valid multi signature.

    Case 1: Produce a multi signature​

    Run the simulation wih 5 participants

    ./mithrildemo -k 5 -m 50 --phi-f 0.65 --nparties 5

    The simulation should succeed and produce (or aggregate) a multi signature!

    >> Launch Mithril protocol demonstrator with configuration: 
    Config {
    m: 50,
    k: 5,
    phi_f: 0.65,
    nparties: 5,
    nmessages: 1,
    }

    >> Protocol establish phase
    Party #0: party created with 826 stakes
    Party #1: party created with 741 stakes
    Party #2: party created with 144 stakes
    Party #3: party created with 734 stakes
    Party #4: party created with 41 stakes
    Protocol established to StmParameters { m: 50, k: 5, phi_f: 0.65 }

    >> Protocol initialize phase:
    Verifier: verifier created
    Verifier: protocol params updated to StmParameters { m: 50, k: 5, phi_f: 0.65 }
    Party #0: protocol params updated to StmParameters { m: 50, k: 5, phi_f: 0.65 }
    Party #1: protocol params updated to StmParameters { m: 50, k: 5, phi_f: 0.65 }
    Party #2: protocol params updated to StmParameters { m: 50, k: 5, phi_f: 0.65 }
    Party #3: protocol params updated to StmParameters { m: 50, k: 5, phi_f: 0.65 }
    Party #4: protocol params updated to StmParameters { m: 50, k: 5, phi_f: 0.65 }
    Verifier: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #0: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #1: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #2: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #3: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #4: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Artifacts written to artifacts/parties-keys.json

    >> Protocol issue certificates phase:
    Message #0 to sign: [119, 36, 224, 63, 184, 216, 74, 55, 106, 67, 184, 244, 21, 24, 161, 28]
    Party #0: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #0: lottery #2 won
    Party #0: lottery #3 won
    Party #0: lottery #8 won
    Party #0: lottery #13 won
    Party #0: lottery #16 won
    Party #0: lottery #17 won
    Party #0: lottery #19 won
    Party #0: lottery #23 won
    Party #0: lottery #25 won
    Party #0: lottery #28 won
    Party #0: lottery #29 won
    Party #0: lottery #31 won
    Party #0: lottery #42 won
    Party #0: lottery #43 won
    Party #0: lottery #46 won
    Party #1: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #1: lottery #2 won
    Party #1: lottery #3 won
    Party #1: lottery #8 won
    Party #1: lottery #13 won
    Party #1: lottery #16 won
    Party #1: lottery #17 won
    Party #1: lottery #19 won
    Party #1: lottery #23 won
    Party #1: lottery #25 won
    Party #1: lottery #29 won
    Party #1: lottery #31 won
    Party #1: lottery #42 won
    Party #1: lottery #43 won
    Party #1: lottery #46 won
    Party #2: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #2: lottery #19 won
    Party #2: lottery #43 won
    Party #2: lottery #46 won
    Party #3: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #3: lottery #2 won
    Party #3: lottery #3 won
    Party #3: lottery #8 won
    Party #3: lottery #13 won
    Party #3: lottery #16 won
    Party #3: lottery #17 won
    Party #3: lottery #19 won
    Party #3: lottery #23 won
    Party #3: lottery #25 won
    Party #3: lottery #29 won
    Party #3: lottery #31 won
    Party #3: lottery #42 won
    Party #3: lottery #43 won
    Party #3: lottery #46 won
    Party #4: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #4: lottery #19 won
    Party #0: aggregate signature computed
    Party #1: aggregate signature computed
    Party #2: aggregate signature computed
    Party #3: aggregate signature computed
    Party #4: aggregate signature computed
    Artifacts written to artifacts/single-signatures.json
    Artifacts written to artifacts/multi-signatures.json

    >> Protocol verify certificates phase:
    Message #0 to verify: 7724e03fb8d84a376a43b8f41518a11c
    Party #0: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Verifier: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Party #1: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Verifier: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Party #2: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Verifier: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Party #3: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Verifier: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Party #4: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Verifier: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!

    >> Congrats, protocol terminated with success!

    Case 2: Does not produce a multi signature​

    Run the simulation wih 5 participants

    ./mithrildemo -k 5 -m 5 --phi-f 0.25 --nparties 5

    The simulation should fail and not produce (or aggregate) any multi signature!

    >> Launch Mithril protocol demonstrator with configuration: 
    Config {
    m: 5,
    k: 5,
    phi_f: 0.25,
    nparties: 5,
    nmessages: 1,
    }

    >> Protocol establish phase
    Party #0: party created with 826 stakes
    Party #1: party created with 741 stakes
    Party #2: party created with 144 stakes
    Party #3: party created with 734 stakes
    Party #4: party created with 41 stakes
    Protocol established to StmParameters { m: 5, k: 5, phi_f: 0.25 }

    >> Protocol initialize phase:
    Verifier: verifier created
    Verifier: protocol params updated to StmParameters { m: 5, k: 5, phi_f: 0.25 }
    Party #0: protocol params updated to StmParameters { m: 5, k: 5, phi_f: 0.25 }
    Party #1: protocol params updated to StmParameters { m: 5, k: 5, phi_f: 0.25 }
    Party #2: protocol params updated to StmParameters { m: 5, k: 5, phi_f: 0.25 }
    Party #3: protocol params updated to StmParameters { m: 5, k: 5, phi_f: 0.25 }
    Party #4: protocol params updated to StmParameters { m: 5, k: 5, phi_f: 0.25 }
    Verifier: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #0: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #1: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #2: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #3: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #4: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Artifacts written to artifacts/parties-keys.json

    >> Protocol issue certificates phase:
    Message #0 to sign: [119, 36, 224, 63, 184, 216, 74, 55, 106, 67, 184, 244, 21, 24, 161, 28]
    Party #0: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #1: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #2: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #3: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #4: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #0: not enough signatures to compute aggregate
    Party #1: not enough signatures to compute aggregate
    Party #2: not enough signatures to compute aggregate
    Party #3: not enough signatures to compute aggregate
    Party #4: not enough signatures to compute aggregate
    Artifacts written to artifacts/single-signatures.json
    Artifacts written to artifacts/multi-signatures.json

    >> Protocol verify certificates phase:
    Message #0 to verify: 7724e03fb8d84a376a43b8f41518a11c
    Party #0: aggregate signature not found 7724e03fb8d84a376a43b8f41518a11c

    >> Certificate verification failed: aggregate signature not found
    tip

    For more information about the Mithril Protocol, please refer to the About Mithril section.

    - + \ No newline at end of file diff --git a/doc/networks-matrix/index.html b/doc/networks-matrix/index.html index c8347b585f..c04423e105 100644 --- a/doc/networks-matrix/index.html +++ b/doc/networks-matrix/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)
    - + \ No newline at end of file diff --git a/doc/next/category/developer-docs/index.html b/doc/next/category/developer-docs/index.html index f712d099b5..2cd5fdcbc4 100644 --- a/doc/next/category/developer-docs/index.html +++ b/doc/next/category/developer-docs/index.html @@ -18,13 +18,13 @@ - + - + \ No newline at end of file diff --git a/doc/next/category/getting-started/index.html b/doc/next/category/getting-started/index.html index 19b7d82528..a6b96969c2 100644 --- a/doc/next/category/getting-started/index.html +++ b/doc/next/category/getting-started/index.html @@ -18,13 +18,13 @@ - +
    - + \ No newline at end of file diff --git a/doc/next/category/mithril-network-nodes/index.html b/doc/next/category/mithril-network-nodes/index.html index 1f600863ef..d187621187 100644 --- a/doc/next/category/mithril-network-nodes/index.html +++ b/doc/next/category/mithril-network-nodes/index.html @@ -18,13 +18,13 @@ - +
    - + \ No newline at end of file diff --git a/doc/next/category/mithril-network/index.html b/doc/next/category/mithril-network/index.html index 7f23f3d319..5e3dfb5046 100644 --- a/doc/next/category/mithril-network/index.html +++ b/doc/next/category/mithril-network/index.html @@ -18,13 +18,13 @@ - + - + \ No newline at end of file diff --git a/doc/next/category/mithril-protocol/index.html b/doc/next/category/mithril-protocol/index.html index 1cafbf0f58..6c720f2f75 100644 --- a/doc/next/category/mithril-protocol/index.html +++ b/doc/next/category/mithril-protocol/index.html @@ -18,13 +18,13 @@ - + - + \ No newline at end of file diff --git a/doc/next/compiled-binaries/index.html b/doc/next/compiled-binaries/index.html index 1137b83154..aa403e7681 100644 --- a/doc/next/compiled-binaries/index.html +++ b/doc/next/compiled-binaries/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    - + \ No newline at end of file diff --git a/doc/next/glossary/index.html b/doc/next/glossary/index.html index 9799cd993d..344af63c64 100644 --- a/doc/next/glossary/index.html +++ b/doc/next/glossary/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    Glossary

    Here is a comprehensive list of definitions for some common terms used in this guide.

    Beacon​

    A Beacon represents a point of the Blockchain for which a Mithril Certificate is created. It embeds at least the version of the Cardano Network that is targeted, and the associated epoch and immutable file number.

    Cardano Network​

    The Cardano Network is a Proof-of-Stake Blockchain platform that supports the ADA cryptocurrency.

    More information is available here

    Cardano Node​

    A Cardano Node is a node that runs in a Cardano Network. There are several types of nodes, among them are Cardano Full Nodes that hold a copy of the whole Blockchain. They can be used by Wallets, Stake Pool Operator, Exchanges or Dapps. One of the use cases of the Mithril Network is to bootsrap rapidly a Cardano Full Node.

    Cardano Key Pair​

    A Cardano Key Pair is an asymmetric key pair used to identify a Stake Pool Operator on the Cardano Network.

    Certificate​

    The Mithril Aggregator combines the produced multi signature and some metadata into a Mithril Certificate that will be later used by the Mithril Client to verify the authenticity of a snapshot. The certificates are chained so that the stake distribution used to create the signatures is verifiably genuine.

    More information is available here

    Epoch​

    The Cardano Network uses Epochs to group blocks computed in a certain amount of time (approximately 5 days). It is part of the design of its Proof-of-Stake consensus Ouroboros. At the end of each epoch, the stake distribution of the ending epoch is computed.

    Immutable File Number​

    Inside a the database of a Cardano Node, the Blockchain state is stored in Immutable files which never change once committed. These immutable files are designed so that they are deterministically produced and thus are the same on any Cardano Node. These files are created by following an incremental number, the Immutable File Number and there are three different immutable files for each number (i.e. chunk, primary and secondary). Only the files up to the penultimate Immutable File Number are considered as committed and final, the last Immutable File Number files are constantly evolving. The Snapshots produced by the Mithril Network rely on these immutable files.

    Individual Signature​

    For each Beacon, the Mithril Signers will compute on their end a message representing the Blockchain state, and sign it with their Verification Keys in order to create an Individual Signature. Upon winning one or multiple lotteries, the Mithril Signer will be able to use this Individual Signature to participate in the creation of a Multi Signature.

    More information is available here

    Mithril Aggregator​

    The Mithril Aggregator is a trustless node of the Mithril Network that orchestrates the work of the Mithril Signer nodes and that gathers their individual signatures to produce Mithril multi signatures and their associated certificates.

    It is also in charge of creating and storing the snapshot archive.

    More information is available here

    Mithril Client​

    The Mithril Client node of the Mithril Network is used to restore a Cardano full node by retrieving, from a Mithril Aggregator, a remote snapshot, its certificate chain and by verifying their validity thanks to the Mithril cryptographic primitives.

    More information is available here

    Mithril Network​

    In its current version, the Mithril Network is a network of nodes responsible for creating Snapshots and Certificates that enable fast bootstrap of a Cardano Node. It runs on top of the Cardano Network.

    More information is available here

    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 stakes.

    More information is available here

    Mithril Signer​

    The Mithril Signer is a node of the Mithril Network that works transparently on top of the Stake Pool Operator Cardano nodes and which individually signs the ledger state.

    More information is available here

    Multi Signature​

    The Mithril Multi Signature is an aggregate of Individual Signatures which guarantees that a minimum share of the total stakes has participated in its creation.

    More information is available here

    Snapshot​

    A Mithril Snapshot is a signed archive of the Blockchain state that can be used by Mithril Clients to restore a Cardano Full Node. It is uniquely identified by its fingerprint or Digest which is part of the message signed by the Mithril Network.

    Stake Distribution​

    The Cardano Stake Distribution is the list of all the Stake Pool Operators Pool Id addresses and their associated Stakes Share of the total Stakes of the Cardano Network.

    The Mithril Stake Distribution is the list of all the Stake Pool Operators (that are running a Mithril Signer) Pool Id addresses, their associated Stakes Share of the total Stakes of the Cardano Network, and their signing Verification Key.

    Stake Pool Operator (SPO)​

    A Stake Pool Operator, also known as a SPO, represents a party that holds (via delegation) Stakes in the Cardano Network. The stakes entitle it to participate in the block production thanks to the Cardano consensus mechanism.

    Verification Key​

    In order to create Individual Signatures, the Mithril Signers must register their signing public key: the Verification Keys. To garantee their genuineness, they are signed by the associated Cardano Key Pair. It is worth mentioning that a Mithril Signer must be aware of the Verification Keys of all the other Mithril Signers in order to produce valid Individual Signatures.

    More information is available here

    - + \ No newline at end of file diff --git a/doc/next/manual/developer-docs/nodes/mithril-aggregator/index.html b/doc/next/manual/developer-docs/nodes/mithril-aggregator/index.html index 1f6b64775d..39e52c8c64 100644 --- a/doc/next/manual/developer-docs/nodes/mithril-aggregator/index.html +++ b/doc/next/manual/developer-docs/nodes/mithril-aggregator/index.html @@ -18,7 +18,7 @@ - + @@ -27,7 +27,7 @@ This allows the Mithril Aggregator node to bootstrap a Genesis Certificate. After this operation, the Mithril Aggregator will be able to produce new snapshots and certificates.

    ./mithril-aggregator genesis bootstrap

    Or with a specific Genesis Secret Key, only in test mode.

    ./mithril-aggregator genesis bootstrap --genesis-secret-key **YOUR_SECRET_KEY*

    Run 'genesis export' command in release with default configuration. This allows the Mithril Aggregator node to export the Genesis Payload that needs to be signed (and later reimported) of the Genesis Certificate. The signature of the Genesis Payload must be done manually with the owner of the Genesis Secret Key.

    ./mithril-aggregator genesis export

    Or with a custom export path (to override the default value ./mithril-genesis-payload.txt)

    ./mithril-aggregator genesis export --target-path **YOUR_TARGET_PATH**

    Run 'genesis import' command in release with default configuration. This allows the Mithril Aggregator node to import the signed payload of the Genesis Certificate and create it in the store. After this operation, the Mithril Aggregator will be able to produce new snapshots and certificates.

    ./mithril-aggregator genesis import

    Or with a custom export path (to override the default value ./mithril-genesis-signed-payload.txt)

    ./mithril-aggregator genesis import --signed-payload-path **YOUR_SIGNED_PAYLOAD_PATH**

    Run 'genesis import' command in release with a custom configuration via env vars

    GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**) RUN_INTERVAL=60000 NETWORK=**YOUR_CARDANO_NETWORK** ./mithril-aggregator genesis import

    Release build and run binary 'era' command​

    Build in release with default configuration

    make build

    Display the help menu

    ./mithril-aggregator era --help

    You should see

    Era tools

    Usage: mithril-aggregator era <COMMAND>

    Commands:
    list Era list command
    generate-tx-datum Era tx datum generate command
    help Print this message or the help of the given subcommand(s)

    Options:
    -h, --help Print help

    Run 'era list' to list the supported eras embedded in the binary

    ./mithril-aggregator era list

    You should see something like

    Supported Eras:
    [
    Thales,
    ]
    tip

    You can use the --json option in order to display results in JSON format for the list command:

    ./mithril-aggregator era list --json

    You should see something like

    ["thales"]

    Run 'era generate-tx-datum' to generate the transaction datum file to be stored on the Cardano chain that will provide era markers to the 'cardano-chain' era reader adapter

    Case 1: There is only one supported era in the code, create the datum file with

    ./mithril-aggregator era generate-tx-datum --current-era-epoch **EPOCH_AT_WHICH_CURRENT_ERA_STARTS** --era-markers-secret-key **YOUR_ERA_ACTIVATION_SECRET_KEY**

    You should see something like

    {"constructor":0,"fields":[{"bytes":"5b7b226e223a227468616c6573222c2265223a317d5d"},{"bytes":"a58fe8e336f465ded3bba7c5a7afe5b5a26f2fb65b7c4e6e742e680645f13df28bf2b63a61cc72d9c826be490e2c1f1098d955df503580a4e899b5173884e30e"}]}

    Case 2: There are two supported era in the code, in order to announce the upcoming era (i.e. the activation epoch of this era is not known yet), run the command

    ./mithril-aggregator era generate-tx-datum --current-era-epoch **EPOCH_AT_WHICH_CURRENT_ERA_STARTS** --era-markers-secret-key **YOUR_ERA_ACTIVATION_SECRET_KEY**

    Case 3: There are two supported era in the code, in order to activate the era switch at a following epoch (i.e. the activation epoch of this era known), run the command

    ./mithril-aggregator era generate-tx-datum --current-era-epoch **EPOCH_AT_WHICH_CURRENT_ERA_STARTS** --next-era-epoch **EPOCH_AT_WHICH_NEXT_ERA_STARTS** --era-markers-secret-key **YOUR_ERA_ACTIVATION_SECRET_KEY**
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Aggregator:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Build and run Docker container​

    Build a local Docker image

    make docker-build

    Run a local Docker container

    make docker-run

    Subcommands​

    Here are the subcommands available:

    SubcommandPerformed action
    serveAggregator runs its HTTP server in nominal mode and orchestrates multi signatures production
    helpPrint this message or the help of the given subcommand(s)
    genesis exportExport genesis payload to sign with genesis secret key
    genesis importImport genesis signature (payload signed with genesis secret key) and create & import a genesis certificate in the store
    genesis bootstrapBootstrap a genesis certificate (test only usage)
    era listList the supported eras
    era generate-tx-datumGenerate era markers transaction datum to be stored on chain

    Configuration parameters​

    The configuration parameters are set either:

    • In a configuration file (depending on the --run-mode parameter). If runtime mode is testnet the file is located in ./conf/testnet.json.
    • The value can be overridden by an environment variable whose name is the parameter name uppercased.

    Here is a list of the available parameters.

    General parameters:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    cardano_cli_path--CARDANO_CLI_PATHCardano CLI tool path-cardano-cliβœ”οΈ
    cardano_node_socket_path--CARDANO_NODE_SOCKET_PATHPath of the socket used by the Cardano CLI tool to communicate with the Cardano node-/tmp/cardano.sockβœ”οΈ
    config_directory--config-directory--Directory of the configuration file./config--
    data_stores_directory--data_stores_directoryDirectory to store Aggregator data (Certificates, Snapshots, Protocol Parameters, ...)-./mithril-aggregator/storesβœ”οΈ
    db_directory--db-directory-DB_DIRECTORYDirectory of the Cardano Node stores/db-βœ”οΈ
    genesis_verification_key--GENESIS_VERIFICATION_KEYGenesis verification key--βœ”οΈ
    network--NETWORKCardano network-testnet or mainnet or devnetβœ”οΈ
    network_magic--NETWORK_MAGICCardano Network Magic number (for testnet and devnet)-1097911063 or 42-
    protocol_parameters--PROTOCOL_PARAMETERS__K, PROTOCOL_PARAMETERS__M, and PROTOCOL_PARAMETERS__PHI_FMithril Protocol Parameters-{ k: 5, m: 100, phi_f: 0.65 }βœ”οΈ
    run_mode--run-mode-rRUN_MODERuntime modedev-βœ”οΈ
    store_retention_limit--STORE_RETENTION_LIMITMaximum number of records in stores. If not set, no limit is set.---
    verbose--verbose-vVERBOSEVerbosity level-Parsed from number of occurrences: -v for Warning, -vv for Info, -vvv for Debug and -vvvv for Traceβœ”οΈ

    serve command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    server_ip--server-ip-SERVER_IPListening server IP0.0.0.0-βœ”οΈ
    server_port--server-port-SERVER_PORTListening server port8080-βœ”οΈ
    snapshot_directory--snapshot-directory-SNAPSHOT_DIRECTORYDirectory to store local snapshots of the Cardano Node.-βœ”οΈ
    snapshot_store_type--SNAPSHOT_STORE_TYPEType of snapshot store to use-gcp or localβœ”οΈ
    snapshot_uploader_type--SNAPSHOT_UPLOADER_TYPEType of snapshot uploader to use-gcp or localβœ”οΈ
    snapshot_bucket_name--SNAPSHOT_BUCKET_NAMEName of the bucket where the snapshots are stored-snapshot-bucketβœ”οΈ
    run_interval--RUN_INTERVALInterval between two runtime cycles in ms-60000βœ”οΈ
    url_snapshot_manifest--URL_SNAPSHOT_MANIFESTSnapshots manifest location-Only if snapshot_store_type is gcp, else it should be ``βœ”οΈ
    era_reader_adapter_type--era-reader-adapter-type-ERA_READER_ADAPTER_TYPEEra reader adapter type that can be cardano-chain, file or bootstrap.bootstrap--
    era_reader_adapter_params--era-reader-adapter-params-ERA_READER_ADAPTER_PARAMSEra reader adapter params that is an optional JSON encoded parameters structure that is expected depending on the era_reader_adapter_type parameter---

    genesis bootstrap command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    genesis_secret_key--GENESIS_SECRET_KEYGenesis secret key, ⚠️ for test only---

    genesis import command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    signed_payload_path--signed-payload-path--Path of the payload to import.---

    genesis export command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    target_path--target-path--Path of the file to export the payload to.---

    era list command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    json--json--Export the supported era list to JSON format.---

    era generate-tx-datum command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    current_era_epoch--current-era-epoch-CURRENT_ERA_EPOCHEpoch at which current era starts.---
    next_era_epoch--next-era-epoch-NEXT_ERA_EPOCHEpoch at which the next era starts. If not specified and an upcoming era is available, it will announce the next era. If specified, it must be strictly greater than current-epoch-era---
    era_markers_secret_key--era-markers-secret-key-ERA_MARKERS_SECRET_KEYEra Markers Secret Key that is used to verify the authenticity of the era markers on chain.---
    - + \ No newline at end of file diff --git a/doc/next/manual/developer-docs/nodes/mithril-client/index.html b/doc/next/manual/developer-docs/nodes/mithril-client/index.html index 9bce8da6e0..d0b1f92321 100644 --- a/doc/next/manual/developer-docs/nodes/mithril-client/index.html +++ b/doc/next/manual/developer-docs/nodes/mithril-client/index.html @@ -18,13 +18,13 @@ - +
    -
    Version: Next 🚧

    Mithril Client Node

    info

    This is the node of the Mithril Network responsible for restoring the Cardano blockchain on an empty node from a certified snapshot.

    tip
    Mithril Networks

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

    Resources​

    NodeSource RepositoryRust DocumentationDocker Packages
    Mithril Client↗️↗️↗️

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version)

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run apt install libssl-dev

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Switch to build branch / tag

    # **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, 
    # please refer to the **Build From** column of the above **Mithril Networks** table
    git switch **YOUR_BUILD_BRANCH_OR_TAG**

    Change directory

    cd mithril/mithril-client

    Development test and build​

    Run tests

    make test

    Create the help menu

    make help

    Generate the Rust documentation

    make doc

    Run in debug mode with default configuration

    make debug

    Release build and run binary​

    Build and run in release with default configuration

    make run

    Or, build only in release

    make build

    Display the help menu

    ./mithril-client --help

    You should see

    This program downloads, checks and restores certified blockchain snapshots.

    Usage: mithril-client [OPTIONS] <COMMAND>

    Commands:
    list List available snapshots
    show Show detailed informations about a snapshot
    download Download a snapshot
    restore Restore a snapshot
    help Print this message or the help of the given subcommand(s)

    Options:
    --run-mode <RUN_MODE>
    Run Mode [env: RUN_MODE=] [default: dev]
    -v, --verbose...
    Verbosity level (-v=warning, -vv=info, -vvv=debug)
    --config-directory <CONFIG_DIRECTORY>
    Directory where configuration file is located [default: ./config]
    --aggregator-endpoint <AGGREGATOR_ENDPOINT>
    Override configuration Aggregator endpoint URL
    -h, --help
    Print help information
    -V, --version
    Print version information

    Run in release with default configuration

    ./mithril-client

    Run in release with a specific mode

    ./mithril-client --run-mode preview

    Run in release with a custom configuration via env vars

    GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**) NETWORK=**YOUR_CARDANO_NETWORK** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./mithril-client
    tip

    You can use the --json (or -j) option in order to display results in JSON format for the list and show commands:

    ./mithril-client list --json
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Client:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Run Docker container​

    Registry Image​

    The list of available images on the registry is listed here

    Prepare environment variables (values can be retrieved on the above Mithril Networks table)

    export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**
    export NETWORK=**YOUR_CARDANO_NETWORK**
    export AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**
    export GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)
    export SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')

    Here is an example configuration for the release-preprod network and the latest stable Docker image

    export MITHRIL_IMAGE_ID=latest
    export NETWORK=preprod
    export AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator
    export GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    export SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')

    Then create a shell function for the Mithril Client

    mithril_client () {
    docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@
    }

    Now you can use the mithril_client function:

    # 1- Help
    mithril_client help

    # 2- List snapshots
    mithril_client list

    # 3- Download latest snapshot
    mithril_client download $SNAPSHOT_DIGEST

    # 4- Restore latest snapshot
    mithril_client restore $SNAPSHOT_DIGEST

    Local Image​

    Build a local Docker image

    make docker-build

    Run a local Docker container

    make docker-run

    Subcommands​

    Here are the subcommands available:

    SubcommandPerformed action
    downloadDownload a snapshot
    helpPrint this message or the help of the given subcommand(s)
    listList available snapshots
    restoreRestore a snapshot
    showInformations about a snapshot

    Configuration parameters​

    The configuration parameters are set either:

    • In a configuration file (depending on the --run-mode parameter). If runtime mode is testnet the file is located in ./conf/testnet.json.
    • The value can be overridden by an environment variable whose name is the parameter name uppercased.

    Here is a list of the available parameters:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    verbose--verbose-vVERBOSEVerbosity level-Parsed from number of occurrences: -v for Warning, -vv for Info, -vvv for Debug and -vvvv for Traceβœ”οΈ
    run_mode--run-mode-RUN_MODERuntime modedev-βœ”οΈ
    network--NETWORKCardano network-testnet or mainnet or devnetβœ”οΈ
    aggregator_endpoint--aggregator-endpoint-AGGREGATOR_ENDPOINTAggregator node endpoint-https://aggregator.pre-release-preview.api.mithril.network/aggregatorβœ”οΈ
    genesis_verification_key--GENESIS_VERIFICATION_KEYGenesis verification key--βœ”οΈ
    json_output--json-j-Enable JSON outputno--
    - +
    Version: Next 🚧

    Mithril Client Node

    info

    This is the node of the Mithril Network responsible for restoring the Cardano blockchain on an empty node from a certified snapshot.

    tip
    Mithril Networks

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

    Resources​

    NodeSource RepositoryRust DocumentationDocker Packages
    Mithril Client↗️↗️↗️

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version)

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run apt install libssl-dev

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Switch to build branch / tag

    # **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, 
    # please refer to the **Build From** column of the above **Mithril Networks** table
    git switch **YOUR_BUILD_BRANCH_OR_TAG**

    Change directory

    cd mithril/mithril-client

    Development test and build​

    Run tests

    make test

    Create the help menu

    make help

    Generate the Rust documentation

    make doc

    Run in debug mode with default configuration

    make debug

    Release build and run binary​

    Build and run in release with default configuration

    make run

    Or, build only in release

    make build

    Display the help menu

    ./mithril-client --help

    You should see

    This program downloads, checks and restores certified blockchain snapshots.

    Usage: mithril-client [OPTIONS] <COMMAND>

    Commands:
    list List available snapshots
    show Show detailed informations about a snapshot
    download Download a snapshot
    restore Restore a snapshot
    help Print this message or the help of the given subcommand(s)

    Options:
    --run-mode <RUN_MODE>
    Run Mode [env: RUN_MODE=] [default: dev]
    -v, --verbose...
    Verbosity level (-v=warning, -vv=info, -vvv=debug)
    --config-directory <CONFIG_DIRECTORY>
    Directory where configuration file is located [default: ./config]
    --aggregator-endpoint <AGGREGATOR_ENDPOINT>
    Override configuration Aggregator endpoint URL
    -h, --help
    Print help information
    -V, --version
    Print version information

    Run in release with default configuration

    ./mithril-client

    Run in release with a specific mode

    ./mithril-client --run-mode preview

    Run in release with a custom configuration via env vars

    GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**) NETWORK=**YOUR_CARDANO_NETWORK** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./mithril-client
    tip

    You can use the --json (or -j) option in order to display results in JSON format for the list and show commands:

    ./mithril-client list --json
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Client:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Run Docker container​

    Registry Image​

    The list of available images on the registry is listed here

    Prepare environment variables (values can be retrieved on the above Mithril Networks table)

    export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**
    export NETWORK=**YOUR_CARDANO_NETWORK**
    export AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**
    export GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)
    export SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/artifact/snapshots | jq -r '.[0].digest')

    Here is an example configuration for the release-preprod network and the latest stable Docker image

    export MITHRIL_IMAGE_ID=latest
    export NETWORK=preprod
    export AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator
    export GENESIS_VERIFICATION_KEY=$(wget -q -O - https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    export SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/artifact/snapshots | jq -r '.[0].digest')

    Then create a shell function for the Mithril Client

    mithril_client () {
    docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@
    }

    Now you can use the mithril_client function:

    # 1- Help
    mithril_client help

    # 2- List snapshots
    mithril_client list

    # 3- Download latest snapshot
    mithril_client download $SNAPSHOT_DIGEST

    # 4- Restore latest snapshot
    mithril_client restore $SNAPSHOT_DIGEST

    Local Image​

    Build a local Docker image

    make docker-build

    Run a local Docker container

    make docker-run

    Subcommands​

    Here are the subcommands available:

    SubcommandPerformed action
    downloadDownload a snapshot
    helpPrint this message or the help of the given subcommand(s)
    listList available snapshots
    restoreRestore a snapshot
    showInformations about a snapshot

    Configuration parameters​

    The configuration parameters are set either:

    • In a configuration file (depending on the --run-mode parameter). If runtime mode is testnet the file is located in ./conf/testnet.json.
    • The value can be overridden by an environment variable whose name is the parameter name uppercased.

    Here is a list of the available parameters:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    verbose--verbose-vVERBOSEVerbosity level-Parsed from number of occurrences: -v for Warning, -vv for Info, -vvv for Debug and -vvvv for Traceβœ”οΈ
    run_mode--run-mode-RUN_MODERuntime modedev-βœ”οΈ
    network--NETWORKCardano network-testnet or mainnet or devnetβœ”οΈ
    aggregator_endpoint--aggregator-endpoint-AGGREGATOR_ENDPOINTAggregator node endpoint-https://aggregator.pre-release-preview.api.mithril.network/aggregatorβœ”οΈ
    genesis_verification_key--GENESIS_VERIFICATION_KEYGenesis verification key--βœ”οΈ
    json_output--json-j-Enable JSON outputno--
    + \ No newline at end of file diff --git a/doc/next/manual/developer-docs/nodes/mithril-signer/index.html b/doc/next/manual/developer-docs/nodes/mithril-signer/index.html index 6790eddd21..cdc40b5d9a 100644 --- a/doc/next/manual/developer-docs/nodes/mithril-signer/index.html +++ b/doc/next/manual/developer-docs/nodes/mithril-signer/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    Mithril Signer Node

    info

    This is the node of the Mithril Network responsible for producing individual signatures that are collected and aggregated by the Mithril Aggregator.

    tip
    Mithril Networks

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

    Resources​

    NodeSource RepositoryRust DocumentationDocker Packages
    Mithril Signer↗️↗️↗️

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version)

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run apt install libssl-dev

    • Ensure SQLite3 library is installed on your system and its version is at least 3.35 (released Apr. 2021) on Debian/Ubuntu: apt install libsqlite3 and sqlite3 --version.

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Switch to build branch / tag

    # **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, 
    # please refer to the **Build From** column of the above **Mithril Networks** table
    git switch **YOUR_BUILD_BRANCH_OR_TAG**

    Change directory

    cd mithril/mithril-signer

    Development test and build​

    Run tests

    make test

    Create the help menu

    make help

    Generate the Rust documentation

    make doc

    Run in debug mode with default configuration

    make debug

    Release build and run binary​

    Build and run in release with default configuration

    make run

    Or, build only in release

    make build

    Display the help menu

    ./mithril-signer --help

    You should see

    An implementation of a Mithril Signer

    Usage: mithril-signer [OPTIONS]

    Options:
    -r, --run-mode <RUN_MODE>
    Run Mode [env: RUN_MODE=] [default: dev]
    -v, --verbose...
    Verbosity level, add more v to increase
    -c, --configuration-dir <CONFIGURATION_DIR>
    Directory where the configuration file is located [default: ./config]
    --disable-digests-cache
    Disable immutables digests cache
    --reset-digests-cache
    If set the existing immutables digests cache will be reset
    -h, --help
    Print help information (use `--help` for more detail)
    -V, --version
    Print version information

    Run in release with default configuration

    ./mithril-signer

    Run in release with a specific mode

    ./mithril-signer -r preview

    Run in release with a custom configuration via env vars

    NETWORK=**YOUR_CARDANO_NETWORK** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./mithril-signer
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Signer:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Build and run Docker container​

    Build a local Docker image

    make docker-build

    Run a local Docker container

    make docker-run

    Configuration parameters​

    The configuration parameters are set either:

    • In a configuration file (depending on the --run-mode parameter). If runtime mode is testnet the file is located in ./conf/testnet.json.
    • The value can be overridden by an environment variable whose name is the parameter name uppercased.

    Here is a list of the available parameters:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    verbose--verbose-vVERBOSEVerbosity level-Parsed from number of occurrences: -v for Warning, -vv for Info, -vvv for Debug and -vvvv for Traceβœ”οΈ
    run_mode--run-mode-rRUN_MODERuntime modedev-βœ”οΈ
    db_directory--db-directory-DB_DIRECTORYDirectory to snapshot from the Cardano Node/db-βœ”οΈ
    network--NETWORKCardano network-testnet or mainnet or devnetβœ”οΈ
    network_magic--NETWORK_MAGICCardano Network Magic number (for testnet and devnet)-1097911063 or 42-
    party_id--PARTY_IDParty Id of the signer, usually the Pool Id of the SPO-pool1pxaqe80sqpde7902er5kf6v0c7y0sv6d5g676766v2h829fvs3x-
    run_interval--RUN_INTERVALInterval between two runtime cycles in ms-60000βœ”οΈ
    aggregator_endpoint--AGGREGATOR_ENDPOINTAggregator node endpoint-https://aggregator.pre-release-preview.api.mithril.network/aggregatorβœ”οΈ
    data_stores_directory--DATA_STORES_DIRECTORYDirectory to store signer data (Stakes, Protocol initializers, ...)-./mithril-signer/storesβœ”οΈ
    store_retention_limit--STORE_RETENTION_LIMITMaximum number of records in stores. If not set, no limit is set.---
    kes_secret_key_path--KES_SECRET_KEY_PATHPath to the Cardano KES Secret Key file. Mandatory in Pool Id Certification Mode where the owner is verified (experimental, soon to be stable & preferred mode)---
    operational_certificate_path--OPERATIONAL_CERTIFICATE_PATHPath to the Cardano Operational Certificate file. Mandatory in Pool Id Certification Mode where the owner is verified (experimental, soon to be stable & preferred mode)---
    era_reader_adapter_type--era-reader-adapter-type-ERA_READER_ADAPTER_TYPEEra reader adapter type that can be cardano-chain, file or bootstrap.bootstrap--
    era_reader_adapter_params--era-reader-adapter-params-ERA_READER_ADAPTER_PARAMSEra reader adapter params that is an optional JSON encoded parameters structure that is expected depending on the era_reader_adapter_type parameter---
    - + \ No newline at end of file diff --git a/doc/next/manual/developer-docs/references/index.html b/doc/next/manual/developer-docs/references/index.html index 2983ebaa3b..d1449a9112 100644 --- a/doc/next/manual/developer-docs/references/index.html +++ b/doc/next/manual/developer-docs/references/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    API Reference

    Welcome to the Mithril API references doc!

    info

    This page gathers the external developer documentations available for Mithril. They are intended for a technical audience only.

    tip

    For more information about the Mithril Protocol, please refer to the About Mithril section.

    Mithril Networks​

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

    Dependencies List​

    DependencyDescriptionSource RepositoryRust DocumentationREST API
    Mithril CommonThis is the common library that is used by the Mithril Network nodes.↗️↗️-
    Mithril STMThe core library that implements Mithril protocol cryptographic engine.↗️↗️-
    Mithril AggregatorThe node of the Mithril Network responsible for collecting individual signatures from the Mithril Signers and aggregate them into a multisignature. The Mithril Aggregator uses this ability to provide certified snapshots of the Cardano blockchain.↗️↗️↗️
    Mithril ClientThe node of the Mithril Network responsible for restoring the Cardano blockchain on an empty node from a certified snapshot.↗️↗️-
    Mithril SignerThe node of the Mithril Network responsible for producing individual signatures that are collected and aggregated by the Mithril Aggregator.↗️↗️-
    Mithril DevnetThe private Mithril/Cardano Network used to scaffold a Mithril Network on top of a private Cardano Network.↗️--
    Mithril End to EndThe tool used to run tests scenari against a Mithril Devnet.↗️--
    Mithril ExplorerThe explorer website that connects to a Mithril Aggregator and displays its Certificate Chain.↗️--
    Protocol SimulationA simple cli that helps understand how the Mithril Protocol works and the role of its protocol parameters.↗️--
    - + \ No newline at end of file diff --git a/doc/next/manual/getting-started/bootstrap-cardano-node/index.html b/doc/next/manual/getting-started/bootstrap-cardano-node/index.html index 0278dadb04..7d762f3694 100644 --- a/doc/next/manual/getting-started/bootstrap-cardano-node/index.html +++ b/doc/next/manual/getting-started/bootstrap-cardano-node/index.html @@ -18,13 +18,13 @@ - +
    -
    Version: Next 🚧

    Bootstrap a Cardano Node

    info

    Thanks to a Mithril Client connected to a Mithril Aggregator, you will restore a full Cardano node in less than 2 hours!

    Mithril Networks

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

    Video demonstration

    In this video you will see how fast the bootstrapping of a Cardano node with Mithril is compared to classical bootstrapping (benchmark done on mainnet with Daedalus wallet).

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version).

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run sudo apt install libssl-dev

    • Install other requirements

    sudo apt-get install make build-essential m4 docker jq

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Build Mithril Client binary​

    Switch to build branch / tag

    # **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, 
    # please refer to the **Build From** column of the above **Mithril Networks** table
    git switch **YOUR_BUILD_BRANCH_OR_TAG**

    Change directory

    cd mithril/mithril-client

    Run tests (Optional)

    make test

    Build executable

    make build

    Verify binary​

    Verify version​

    Check that the Mithril Signer binary is running the correct version by running

    ./mithril-client -V

    You should see something like

    mithril-client 0.2.0

    ⚠️ Verify that the version displayed is the version described in the content of the Release / Pre-Release note (see the Build From column of the above Mithril Networks table)

    Verify build​

    Check that the Mithril Client binary is working fine by running its help

    ./mithril-client -h

    You should see

    This program downloads, checks and restores certified blockchain snapshots.

    Usage: mithril-client [OPTIONS] <COMMAND>

    Commands:
    list List available snapshots
    show Show detailed informations about a snapshot
    download Download a snapshot
    restore Restore a snapshot
    help Print this message or the help of the given subcommand(s)

    Options:
    --run-mode <RUN_MODE>
    Run Mode [env: RUN_MODE=] [default: dev]
    -v, --verbose...
    Verbosity level (-v=warning, -vv=info, -vvv=debug)
    --config-directory <CONFIG_DIRECTORY>
    Directory where configuration file is located [default: ./config]
    --aggregator-endpoint <AGGREGATOR_ENDPOINT>
    Override configuration Aggregator endpoint URL
    -h, --help
    Print help information
    -V, --version
    Print version information
    tip

    You can use the --json option in order to display results in JSON format for the list and show commands:

    ./mithril-client list --json
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Client:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Run Docker container​

    The list of available images on the registry is listed here

    Prepare an environment variable with the selected Docker image

    export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**

    Here is an example configuration for the latest stable Docker image

    export MITHRIL_IMAGE_ID=latest

    Then create a shell function for the Mithril Client:

    mithril_client () {
    docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@
    }

    Now you can use the mithril_client function:

    # 1- Help
    mithril_client help

    # 2- List snapshots
    mithril_client list
    tip

    In the following part of the document, you will need to replace the ./mithril-client commands with mithril_client in order to use the above shell function.

    Bootstrap a Cardano node from a testnet Mithril snapshot​

    Step 1: Prepare some useful variables​

    # Cardano network
    export NETWORK=**YOUR_CARDANO_NETWORK**

    # Aggregator API endpoint URL
    export AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**

    # Genesis verification key
    export GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)

    # Digest of the latest produced snapshot for convenience of the demo
    # You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2
    export SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')

    Step 2: Select A Snapshot​

    List the available snapshots with which you can bootstrap a Cardano node

    ./mithril-client list

    You will see a list of snapshots

    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | Network | Digest | Size | Locations | Created |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 | 5273560121 | 1 | 2022-07-10T11:19:18.042554390Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | 22267a8399cbd1731420f7241c91bec66b3126c971d53b1cdf4db0c016320df4 | 5267582819 | 1 | 2022-07-10T05:44:59.048360039Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | c14792945b3880fa9f8880348f885c707b8e4d13cdb035b9a735c15f88ea45db | 5265335799 | 1 | 2022-07-10T00:03:43.656860711Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | 0344faf7ebcd7cbf606288bfc8e7c11f992bd4f28f3ac159942b487a0217f485 | 5265577167 | 1 | 2022-07-09T18:31:16.604292173Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | fc42ef98e233717a7180502dc51aab1ca64d5bd6d6e9d72b4096ac1f7e45a129 | 5262797245 | 1 | 2022-07-09T12:45:20.306735843Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+

    Step 3: Show Snapshot Details​

    Get some more details from a specific snapshot (Optional)

    ./mithril-client show $SNAPSHOT_DIGEST

    You will see more information about a snapshot

    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Info | Value |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Network | testnet |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Digest | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Size | 5273560121 |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Location 1 | https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Created | 2022-07-10T11:19:18.042554390Z |

    Step 4: Download Selected Snapshot​

    Download the selected snapshot from the remote location to your remote location

    ./mithril-client download $SNAPSHOT_DIGEST

    You will see that the selected snapshot archive has been downloaded locally

    Download success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 #1
    from https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz
    to /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/snapshot.archive.tar.gz

    Step 5: Restore Selected Snapshot​

    Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database

    ./mithril-client restore $SNAPSHOT_DIGEST

    You will see that the snapshot archive is unpacked and that the associated certificate is valid

    Unpacking snapshot...
    Unpack success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068
    to /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db

    Restore a Cardano Node with:

    docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="/home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db",target=/data/db/ -e NETWORK=testnet inputoutput/cardano-node

    Step 6: Launch a Cardano Node From Restored Snapshot​

    Launch an empty Cardano node and make it live in minutes!

    docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="$(pwd)/data/testnet/$SNAPSHOT_DIGEST/db",target=/data/db/ -e NETWORK=**YOUR_CARDANO_NETWORK** inputoutput/cardano-node

    You will see the node start by validating the files injested from the snapshot archive

    Starting: /nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run
    --config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json
    --database-path /data/db
    --topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml
    --host-addr 0.0.0.0
    --port 3001
    --socket-path /ipc/node.socket





    +RTS
    -N2
    -I0
    -A16m
    -qg
    -qb
    --disable-delayed-os-memory-return
    -RTS
    ..or, once again, in a single line:
    /nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run --config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json --database-path /data/db --topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml --host-addr 0.0.0.0 --port 3001 --socket-path /ipc/node.socket +RTS -N2 -I0 -A16m -qg -qb --disable-delayed-os-memory-return -RTS
    Node configuration: NodeConfiguration {ncSocketConfig = SocketConfig {ncNodeIPv4Addr = Last {getLast = Just 0.0.0.0}, ncNodeIPv6Addr = Last {getLast = Nothing}, ncNodePortNumber = Last {getLast = Just 3001}, ncSocketPath = Last {getLast = Just "/ipc/node.socket"}}, ncConfigFile = "/nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json", ncTopologyFile = "/nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml", ncDatabaseFile = "/data/db", ncProtocolFiles = ProtocolFilepaths {byronCertFile = Nothing, byronKeyFile = Nothing, shelleyKESFile = Nothing, shelleyVRFFile = Nothing, shelleyCertFile = Nothing, shelleyBulkCredsFile = Nothing}, ncValidateDB = False, ncShutdownConfig = ShutdownConfig {scIPC = Nothing, scOnSyncLimit = Just NoShutdown}, ncProtocolConfig = NodeProtocolConfigurationCardano (NodeByronProtocolConfiguration {npcByronGenesisFile = "/nix/store/kax0css4lx3ywihvsgrqjym0jpi20f99-byron-genesis.json", npcByronGenesisFileHash = Just "96fceff972c2c06bd3bb5243c39215333be6d56aaf4823073dca31afe5038471", npcByronReqNetworkMagic = RequiresMagic, npcByronPbftSignatureThresh = Nothing, npcByronApplicationName = ApplicationName {unApplicationName = "cardano-sl"}, npcByronApplicationVersion = 0, npcByronSupportedProtocolVersionMajor = 3, npcByronSupportedProtocolVersionMinor = 0, npcByronSupportedProtocolVersionAlt = 0}) (NodeShelleyProtocolConfiguration {npcShelleyGenesisFile = "/nix/store/2xhy92909anynqsvx1b1x153cxwnfmzx-shelley-genesis.json", npcShelleyGenesisFileHash = Just "849a1764f152e1b09c89c0dfdbcbdd38d711d1fec2db5dfa0f87cf2737a0eaf4"}) (NodeAlonzoProtocolConfiguration {npcAlonzoGenesisFile = "/nix/store/8qnphq6yvcjspiy3z0aijfd6cv64l3hl-alonzo-genesis.json", npcAlonzoGenesisFileHash = Just "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874"}) (NodeHardForkProtocolConfiguration {npcTestEnableDevelopmentHardForkEras = False, npcTestShelleyHardForkAtEpoch = Nothing, npcTestShelleyHardForkAtVersion = Nothing, npcTestAllegraHardForkAtEpoch = Nothing, npcTestAllegraHardForkAtVersion = Nothing, npcTestMaryHardForkAtEpoch = Nothing, npcTestMaryHardForkAtVersion = Nothing, npcTestAlonzoHardForkAtEpoch = Nothing, npcTestAlonzoHardForkAtVersion = Nothing, npcTestBabbageHardForkAtEpoch = Nothing, npcTestBabbageHardForkAtVersion = Nothing}), ncDiffusionMode = InitiatorAndResponderDiffusionMode, ncSnapshotInterval = DefaultSnapshotInterval, ncTestEnableDevelopmentNetworkProtocols = False, ncMaxConcurrencyBulkSync = Nothing, ncMaxConcurrencyDeadline = Nothing, ncLoggingSwitch = True, ncLogMetrics = True, ncTraceConfig = TracingOnLegacy (TraceSelection {traceVerbosity = NormalVerbosity, traceAcceptPolicy = OnOff {isOn = True}, traceBlockFetchClient = OnOff {isOn = False}, traceBlockFetchDecisions = OnOff {isOn = False}, traceBlockFetchProtocol = OnOff {isOn = False}, traceBlockFetchProtocolSerialised = OnOff {isOn = False}, traceBlockFetchServer = OnOff {isOn = False}, traceBlockchainTime = OnOff {isOn = False}, traceChainDB = OnOff {isOn = True}, traceChainSyncBlockServer = OnOff {isOn = False}, traceChainSyncClient = OnOff {isOn = False}, traceChainSyncHeaderServer = OnOff {isOn = False}, traceChainSyncProtocol = OnOff {isOn = False}, traceConnectionManager = OnOff {isOn = True}, traceConnectionManagerCounters = OnOff {isOn = True}, traceConnectionManagerTransitions = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorTracer = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorResponderTracer = OnOff {isOn = False}, traceDiffusionInitialization = OnOff {isOn = True}, traceDnsResolver = OnOff {isOn = False}, traceDnsSubscription = OnOff {isOn = True}, traceErrorPolicy = OnOff {isOn = True}, traceForge = OnOff {isOn = True}, traceForgeStateInfo = OnOff {isOn = True}, traceHandshake = OnOff {isOn = False}, traceInboundGovernor = OnOff {isOn = True}, traceInboundGovernorCounters = OnOff {isOn = True}, traceInboundGovernorTransitions = OnOff {isOn = True}, traceIpSubscription = OnOff {isOn = True}, traceKeepAliveClient = OnOff {isOn = False}, traceLedgerPeers = OnOff {isOn = True}, traceLocalChainSyncProtocol = OnOff {isOn = False}, traceLocalConnectionManager = OnOff {isOn = False}, traceLocalErrorPolicy = OnOff {isOn = True}, traceLocalHandshake = OnOff {isOn = False}, traceLocalInboundGovernor = OnOff {isOn = False}, traceLocalMux = OnOff {isOn = False}, traceLocalRootPeers = OnOff {isOn = True}, traceLocalServer = OnOff {isOn = False}, traceLocalStateQueryProtocol = OnOff {isOn = False}, traceLocalTxMonitorProtocol = OnOff {isOn = False}, traceLocalTxSubmissionProtocol = OnOff {isOn = False}, traceLocalTxSubmissionServer = OnOff {isOn = False}, traceMempool = OnOff {isOn = True}, traceMux = OnOff {isOn = False}, tracePeerSelection = OnOff {isOn = True}, tracePeerSelectionCounters = OnOff {isOn = True}, tracePeerSelectionActions = OnOff {isOn = True}, tracePublicRootPeers = OnOff {isOn = True}, traceServer = OnOff {isOn = True}, traceTxInbound = OnOff {isOn = False}, traceTxOutbound = OnOff {isOn = False}, traceTxSubmissionProtocol = OnOff {isOn = False}, traceTxSubmission2Protocol = OnOff {isOn = False}}), ncTraceForwardSocket = Nothing, ncMaybeMempoolCapacityOverride = Nothing, ncProtocolIdleTimeout = 5s, ncTimeWaitTimeout = 60s, ncAcceptedConnectionsLimit = AcceptedConnectionsLimit {acceptedConnectionsHardLimit = 512, acceptedConnectionsSoftLimit = 384, acceptedConnectionsDelay = 5s}, ncTargetNumberOfRootPeers = 100, ncTargetNumberOfKnownPeers = 100, ncTargetNumberOfEstablishedPeers = 50, ncTargetNumberOfActivePeers = 20, ncEnableP2P = DisabledP2PMode}
    Listening on http://127.0.0.1:12798
    [c995d1df:cardano.node.basicInfo.protocol:Notice:5] [2022-07-10 13:48:51.68 UTC] Byron; Shelley
    [c995d1df:cardano.node.basicInfo.version:Notice:5] [2022-07-10 13:48:51.68 UTC] 1.35.1
    [c995d1df:cardano.node.basicInfo.commit:Notice:5] [2022-07-10 13:48:51.68 UTC] 0000000000000000000000000000000000000000
    [c995d1df:cardano.node.basicInfo.nodeStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2022-07-10 13:48:51.685957811 UTC
    [c995d1df:cardano.node.basicInfo.systemStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2019-07-24 20:20:16 UTC
    [c995d1df:cardano.node.basicInfo.slotLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 20s
    [c995d1df:cardano.node.basicInfo.epochLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 21600
    [c995d1df:cardano.node.basicInfo.slotLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Config path /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json, Network magic NetworkMagic {unNetworkMagic = 1097911063}, Protocol "Byron; Shelley", Version "1.35.1", Commit "0000000000000000000000000000000000000000", Node start time 2022-07-10 13:48:51.694962147 UTC
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Byron, Slot length 20s, Epoch length 21600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Shelley, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Allegra, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Mary, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Alonzo, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Babbage, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] startup time: 1657460932
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.70 UTC]
    node addresses: 0.0.0.0:3001
    local socket: /ipc/node.socket
    node-to-node versions:
    NodeToNodeV_7 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)
    NodeToNodeV_8 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)
    NodeToNodeV_9 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* Nil)
    node-to-client versions:
    NodeToClientV_9 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_10 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_11 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_12 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_13 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* Nil)
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Chain DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Immutable DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.79 UTC] Validating chunk no. 0 out of 2917. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validated chunk no. 0 out of 2917. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validating chunk no. 1 out of 2917. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validated chunk no. 1 out of 2917. Progress: 0.03%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validating chunk no. 2 out of 2917. Progress: 0.03%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validated chunk no. 2 out of 2917. Progress: 0.07%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validating chunk no. 3 out of 2917. Progress: 0.07%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validated chunk no. 3 out of 2917. Progress: 0.10%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validating chunk no. 4 out of 2917. Progress: 0.10%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validated chunk no. 4 out of 2917. Progress: 0.14%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validating chunk no. 5 out of 2917. Progress: 0.14%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:54.14 UTC] Validated chunk no. 5 out of 2917.

    ... (Cut for readability)

    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validated chunk no. 2911 out of 2917. Progress: 99.79%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validating chunk no. 2912 out of 2917. Progress: 99.79%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validated chunk no. 2912 out of 2917. Progress: 99.83%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validating chunk no. 2913 out of 2917. Progress: 99.83%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validated chunk no. 2913 out of 2917. Progress: 99.86%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validating chunk no. 2914 out of 2917. Progress: 99.86%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validated chunk no. 2914 out of 2917. Progress: 99.90%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validating chunk no. 2915 out of 2917. Progress: 99.90%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validated chunk no. 2915 out of 2917. Progress: 99.93%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validating chunk no. 2916 out of 2917. Progress: 99.93%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validated chunk no. 2916 out of 2917. Progress: 99.97%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validating chunk no. 2917 out of 2917. Progress: 99.97%
    [c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the secondary index for the chunk file with number 2917.
    [c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the primary index for the chunk file with number 2917.
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Found a valid last location at chunk 2917 with tip 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432@63009237.
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Opened imm db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and chunk 2917
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Started opening Volatile DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Opened vol db
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Started opening Ledger DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replaying ledger from snapshot at 16ce3e707388b8c033f87b440ac89095b2d2fc5fa2b42f768c38da286312a31a at slot 63005524
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replayed block: slot 63005533 out of 63009237. Progress: 0.24%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.20 UTC] Replayed block: slot 63007165 out of 63009237. Progress: 44.20%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Opened lgr db
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Started initial chain selection
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.45 UTC] Pushing ledger state for block 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] before next, messages elided = 63009476
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 5e59df354b64634bd27fc1b3ed08991c6de909ea085625da2ca78ec5a6a3e37c at slot 63019450. Progress: 13.85%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block e0610e4f03ef640ead31a729f6f18aa820f3906f6414b179d3c553f0011162ef at slot 63019479. Progress: 13.89%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 8edc84f1f289475ca5c2afd9cae3c704ed7bcdf3e489fd1842e3904bd2d6d8c5 at slot 63019510. Progress: 13.93%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] before next, messages elided = 63019575
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block fc426a1c3a8c5ae61100e5ccfcaa47ccfb6cc144ed17fcd47a2b55f48890790a at slot 63029515. Progress: 27.75%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 68059200505d3ec65d3ddce9441efb0607adab002066c00acc050f5bb0c53deb at slot 63029578. Progress: 27.84%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 25f5cc004ad90dc554e085699f1386dc8f69cec4012a7b35735b83da6fa68a0b at slot 63029602. Progress: 27.87%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] before next, messages elided = 63029636
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block cfb3dd669fd1a85aaf005ddd0e4a8b90cbb7b2c66dc8ff6f41e2e7aa2a0f0c57 at slot 63039634. Progress: 41.72%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block d7f057436e749e4468cfd8b17a04d447c4ce628b8dc33ea7ebdc4d3ad4659dec at slot 63039638. Progress: 41.73%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block 73fcb92346714585e1dbb484b1678bb15dab7304a8071cd95ec85195ca7a46be at slot 63039655. Progress: 41.75%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] before next, messages elided = 63039729
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block a7256fa99f7bf50d0e764cb80122222b1d2b80ffef4bee30e42c0bb80c5f1168 at slot 63049716. Progress: 55.64%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block 75e2064629d6a017bfe324a3d31723ed7bfa017eceda1549bd6c9f4d63653394 at slot 63049861. Progress: 55.84%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.94 UTC] Pushing ledger state for block 71aeaae8f83ee6b94a7feb521c16f0d889a9b95be6da85d540ac0435b412fb2c at slot 63049904. Progress: 55.90%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] before next, messages elided = 63049909
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block 15ad241c6908d0748cb80d17035d4001f7f86ee22fe71197cbe9bc7489d8e71b at slot 63059862. Progress: 69.65%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block a5e38b0875d44e10a3cba9c420ad4c9708e913e3458f1003a8236a831762069a at slot 63059915. Progress: 69.73%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block ca6dc89bd705476bcd056d6ffc3dd43499e51d0e5ecfe56a439fadacac50fc1b at slot 63059939. Progress: 69.76%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] before next, messages elided = 63059957
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 3c8593b6859b02abaa7f3b69d2114b1f402c65eef6904020e5ed37356aea4461 at slot 63069941. Progress: 83.57%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 50a06570febcf89ee00c386979d3a616561996b6c5cf6cbff44c20aa8454c375 at slot 63069971. Progress: 83.61%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 6265f3c30f149ba0a797a1d2c6998b918f089e7455ab665e3369456105901a5a at slot 63069972. Progress: 83.62%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] before next, messages elided = 63069985
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 0be786a1d9272083e9e184da3bc3bfcb71b82ad10fbf52f4959dc5dc6d1b7b3c at slot 63079898. Progress: 97.32%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 2862bd67a50bf9f6f31ab11d9153663d3e657f88c24ba8e71174f8f5216c2a99 at slot 63079992. Progress: 97.45%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block cc9036c6c4076ca28ac5d03522001c233a9202cb5b1d9484c3e406fbb3406fd5 at slot 63079994. Progress: 97.45%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] before next, messages elided = 63080024
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Pushing ledger state for block c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837. Progress: 100.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Valid candidate at tip 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Initial chain selected
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Opened db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and tip c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837
    [c995d1df:cardano.node.shutdown:Warning:5] [2022-07-10 13:53:39.87 UTC] Will terminate upon reaching NoShutdown
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] CreatingServerSocket 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ConfiguringServerSocket 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ListeningServerSocket 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ServerSocketUp 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] RunServer (0.0.0.0:3001 :| [])
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreateSystemdSocketForSnocketPath (LocalAddress "/ipc/node.socket")
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreatedLocalSocket (LocalAddress "/ipc/node.socket")
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ConfiguringLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ListeningLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] LocalSocketUp (LocalAddress "/ipc/node.socket") (FileDescriptor 26)
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] RunLocalServer (LocalAddress "/ipc/node.socket")
    [c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d014:e00:a200:0:1:0:1]:3001
    [c995d1df:cardano.node.DnsSubscription:Notice:358] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 3.131.32.242:3001
    [c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d01c:321:2101:0:1:0:2]:3001
    [c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 13.41.9.54:3001
    [c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.95 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt End, destination 13.41.9.54:3001 outcome: ConnectSuccessLast
    [c995d1df:cardano.node.ErrorPolicy:Notice:343] [2022-07-10 13:53:39.95 UTC] IP 3.131.32.242:3001 ErrorPolicySuspendConsumer (Just (ConnectionExceptionTrace (SubscriberError {seType = SubscriberParallelConnectionCancelled, seMessage = "Parallel connection cancelled", seStack = []}))) 1s

    Then the Cardano node will synchronize with the other nodes of the network and start adding blockss

    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:53:40.06 UTC] Chain extended, new tip: 7ae33b2f4bc8b84e77dfd539f0f6e7f59b293e96f62fdcfdb17cbd7a006fe5c0 at slot 63081906
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:08.30 UTC] Chain extended, new tip: 6b4ccd2bec5e3862b23ea0f7c2f342a3659cecdcfdaf04551179df3839be6213 at slot 63092090
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:21.36 UTC] Chain extended, new tip: 6e95eb82da5a38544e6ef430a2733f6014c3c10527003b9d3bdc534f6a2ce81f at slot 63092103
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:39.04 UTC] Chain extended, new tip: a662672ec4b988022e135cb0b7e440f5fbffe8e205771d13a566a418f7021ba7 at slot 63092121
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:45.18 UTC] Chain extended, new tip: 2a0f2e6f218a08f4e0bc4668285d8e792fd7ec62f05880bd5b2d23d6bce20dfb at slot 63092127
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:18.05 UTC] Chain extended, new tip: ab9ef8af92ec062ec59a10da588e238ba8840705c095ebd5cd5da7ab9ea9c8e1 at slot 63092160
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:45.15 UTC] Chain extended, new tip: e59bcbf34172eb6a934e2580f6b20ebe1ea32fba7420feec096744fab8ffce76 at slot 63092189
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:57:59.06 UTC] Chain extended, new tip: ea0e76fe069a0bcb831cf6b342530adf2a28de4922a752cff734fe81a1842dff at slot 63092263
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:02.27 UTC] Chain extended, new tip: 1b68a85a10dd7bd840a69ece2807fbca61a1de07c30080bf94fbbfd1de8d1446 at slot 63092266
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:28.21 UTC] Chain extended, new tip: 07e1252c5614b9bb6e6cff95066c134eb251aea6bef33dc34c0dd064934f2cea at slot 63092292
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:33.17 UTC] Chain extended, new tip: 0d3712fd7852b0aff00d660f4e7dc609808018dc271fe460bb9ff8270dd50d8f at slot 63092297
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:48.53 UTC] Chain extended, new tip: c8bb96ea392e41dce6fc157e164dbe19ba894d268f69985e20a2d65daeb4488c at slot 63092312
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:58.08 UTC] Chain extended, new tip: 35ea30e175abaae7983db9f65e7a00ba45312ecb151e53a651b3a6058add4c4f at slot 63092322
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:02.13 UTC] Chain extended, new tip: 5320de43ea30e46515f48263211212833474ea87ff046f36f0d83059fad6e9ff at slot 63092326
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:06.29 UTC] Chain extended, new tip: 58e9cb29bd771e0625689a0d591a7a8309f9e859ce4a3b70a9ab2e28173ce78b at slot 63092330
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:36.31 UTC] Chain extended, new tip: 1af2411f492e1895231cc910bdb1a68a45596157bcbfae5bdfd5c5ed81b03054 at slot 63092360
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:04.51 UTC] Chain extended, new tip: 270d47c5a277ef7efe028b6eb4764ab328db8e509ad962370bb383b1832bb260 at slot 63092388
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:29.52 UTC] Chain extended, new tip: 6fbe009ac36363cbebc607c733964878dfce6054c8785d1294f202acb475c861 at slot 63092413
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:01:12.63 UTC] Chain extended, new tip: f764596ece0b75d5d0054f22f3f0a0846f1647ff980d053015065099ec279839 at slot 63092456
    - +
    Version: Next 🚧

    Bootstrap a Cardano Node

    info

    Thanks to a Mithril Client connected to a Mithril Aggregator, you will restore a full Cardano node in less than 2 hours!

    Mithril Networks

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)

    Video demonstration

    In this video you will see how fast the bootstrapping of a Cardano node with Mithril is compared to classical bootstrapping (benchmark done on mainnet with Daedalus wallet).

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version).

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run sudo apt install libssl-dev

    • Install other requirements

    sudo apt-get install make build-essential m4 docker jq

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Build Mithril Client binary​

    Switch to build branch / tag

    # **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, 
    # please refer to the **Build From** column of the above **Mithril Networks** table
    git switch **YOUR_BUILD_BRANCH_OR_TAG**

    Change directory

    cd mithril/mithril-client

    Run tests (Optional)

    make test

    Build executable

    make build

    Verify binary​

    Verify version​

    Check that the Mithril Signer binary is running the correct version by running

    ./mithril-client -V

    You should see something like

    mithril-client 0.2.0

    ⚠️ Verify that the version displayed is the version described in the content of the Release / Pre-Release note (see the Build From column of the above Mithril Networks table)

    Verify build​

    Check that the Mithril Client binary is working fine by running its help

    ./mithril-client -h

    You should see

    This program downloads, checks and restores certified blockchain snapshots.

    Usage: mithril-client [OPTIONS] <COMMAND>

    Commands:
    list List available snapshots
    show Show detailed informations about a snapshot
    download Download a snapshot
    restore Restore a snapshot
    help Print this message or the help of the given subcommand(s)

    Options:
    --run-mode <RUN_MODE>
    Run Mode [env: RUN_MODE=] [default: dev]
    -v, --verbose...
    Verbosity level (-v=warning, -vv=info, -vvv=debug)
    --config-directory <CONFIG_DIRECTORY>
    Directory where configuration file is located [default: ./config]
    --aggregator-endpoint <AGGREGATOR_ENDPOINT>
    Override configuration Aggregator endpoint URL
    -h, --help
    Print help information
    -V, --version
    Print version information
    tip

    You can use the --json option in order to display results in JSON format for the list and show commands:

    ./mithril-client list --json
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Client:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Run Docker container​

    The list of available images on the registry is listed here

    Prepare an environment variable with the selected Docker image

    export MITHRIL_IMAGE_ID=**YOUR_MITHRIL_IMAGE_ID**

    Here is an example configuration for the latest stable Docker image

    export MITHRIL_IMAGE_ID=latest

    Then create a shell function for the Mithril Client:

    mithril_client () {
    docker run --rm -e NETWORK=$NETWORK -e GENESIS_VERIFICATION_KEY=$GENESIS_VERIFICATION_KEY -e AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT --name='mithril-client' -v $(pwd):/app/data -u $(id -u) ghcr.io/input-output-hk/mithril-client:$MITHRIL_IMAGE_ID $@
    }

    Now you can use the mithril_client function:

    # 1- Help
    mithril_client help

    # 2- List snapshots
    mithril_client list
    tip

    In the following part of the document, you will need to replace the ./mithril-client commands with mithril_client in order to use the above shell function.

    Bootstrap a Cardano node from a testnet Mithril snapshot​

    Step 1: Prepare some useful variables​

    # Cardano network
    export NETWORK=**YOUR_CARDANO_NETWORK**

    # Aggregator API endpoint URL
    export AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**

    # Genesis verification key
    export GENESIS_VERIFICATION_KEY=$(wget -q -O - **YOUR_GENESIS_VERIFICATION_KEY**)

    # Digest of the latest produced snapshot for convenience of the demo
    # You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2
    export SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/artifact/snapshots | jq -r '.[0].digest')

    Step 2: Select A Snapshot​

    List the available snapshots with which you can bootstrap a Cardano node

    ./mithril-client list

    You will see a list of snapshots

    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | Network | Digest | Size | Locations | Created |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 | 5273560121 | 1 | 2022-07-10T11:19:18.042554390Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | 22267a8399cbd1731420f7241c91bec66b3126c971d53b1cdf4db0c016320df4 | 5267582819 | 1 | 2022-07-10T05:44:59.048360039Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | c14792945b3880fa9f8880348f885c707b8e4d13cdb035b9a735c15f88ea45db | 5265335799 | 1 | 2022-07-10T00:03:43.656860711Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | 0344faf7ebcd7cbf606288bfc8e7c11f992bd4f28f3ac159942b487a0217f485 | 5265577167 | 1 | 2022-07-09T18:31:16.604292173Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | testnet | fc42ef98e233717a7180502dc51aab1ca64d5bd6d6e9d72b4096ac1f7e45a129 | 5262797245 | 1 | 2022-07-09T12:45:20.306735843Z |
    +---------+------------------------------------------------------------------+------------+-----------+--------------------------------+

    Step 3: Show Snapshot Details​

    Get some more details from a specific snapshot (Optional)

    ./mithril-client show $SNAPSHOT_DIGEST

    You will see more information about a snapshot

    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Info | Value |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Network | testnet |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Digest | cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Size | 5273560121 |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Location 1 | https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz |
    +------------+--------------------------------------------------------------------------------------------------------------------------------+
    | Created | 2022-07-10T11:19:18.042554390Z |

    Step 4: Download Selected Snapshot​

    Download the selected snapshot from the remote location to your remote location

    ./mithril-client download $SNAPSHOT_DIGEST

    You will see that the selected snapshot archive has been downloaded locally

    Download success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068 #1
    from https://storage.googleapis.com/cardano-testnet/testnet.cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068.tar.gz
    to /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/snapshot.archive.tar.gz

    Step 5: Restore Selected Snapshot​

    Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database

    ./mithril-client restore $SNAPSHOT_DIGEST

    You will see that the snapshot archive is unpacked and that the associated certificate is valid

    Unpacking snapshot...
    Unpack success cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068
    to /home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db

    Restore a Cardano Node with:

    docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="/home/mithril/data/testnet/cd587611b5ff2445c714bef083d9455ed3e42e9304ae0ad38b02432d03f9b068/db",target=/data/db/ -e NETWORK=testnet inputoutput/cardano-node

    Step 6: Launch a Cardano Node From Restored Snapshot​

    Launch an empty Cardano node and make it live in minutes!

    docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="$(pwd)/data/testnet/$SNAPSHOT_DIGEST/db",target=/data/db/ -e NETWORK=**YOUR_CARDANO_NETWORK** inputoutput/cardano-node

    You will see the node start by validating the files injested from the snapshot archive

    Starting: /nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run
    --config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json
    --database-path /data/db
    --topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml
    --host-addr 0.0.0.0
    --port 3001
    --socket-path /ipc/node.socket





    +RTS
    -N2
    -I0
    -A16m
    -qg
    -qb
    --disable-delayed-os-memory-return
    -RTS
    ..or, once again, in a single line:
    /nix/store/gps7n088g6xv3zqg281sng821471vq78-cardano-node-exe-cardano-node-1.35.1/bin/cardano-node run --config /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json --database-path /data/db --topology /nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml --host-addr 0.0.0.0 --port 3001 --socket-path /ipc/node.socket +RTS -N2 -I0 -A16m -qg -qb --disable-delayed-os-memory-return -RTS
    Node configuration: NodeConfiguration {ncSocketConfig = SocketConfig {ncNodeIPv4Addr = Last {getLast = Just 0.0.0.0}, ncNodeIPv6Addr = Last {getLast = Nothing}, ncNodePortNumber = Last {getLast = Just 3001}, ncSocketPath = Last {getLast = Just "/ipc/node.socket"}}, ncConfigFile = "/nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json", ncTopologyFile = "/nix/store/dpajyi2vaychwps1x7d20c2ddls4kf62-topology.yaml", ncDatabaseFile = "/data/db", ncProtocolFiles = ProtocolFilepaths {byronCertFile = Nothing, byronKeyFile = Nothing, shelleyKESFile = Nothing, shelleyVRFFile = Nothing, shelleyCertFile = Nothing, shelleyBulkCredsFile = Nothing}, ncValidateDB = False, ncShutdownConfig = ShutdownConfig {scIPC = Nothing, scOnSyncLimit = Just NoShutdown}, ncProtocolConfig = NodeProtocolConfigurationCardano (NodeByronProtocolConfiguration {npcByronGenesisFile = "/nix/store/kax0css4lx3ywihvsgrqjym0jpi20f99-byron-genesis.json", npcByronGenesisFileHash = Just "96fceff972c2c06bd3bb5243c39215333be6d56aaf4823073dca31afe5038471", npcByronReqNetworkMagic = RequiresMagic, npcByronPbftSignatureThresh = Nothing, npcByronApplicationName = ApplicationName {unApplicationName = "cardano-sl"}, npcByronApplicationVersion = 0, npcByronSupportedProtocolVersionMajor = 3, npcByronSupportedProtocolVersionMinor = 0, npcByronSupportedProtocolVersionAlt = 0}) (NodeShelleyProtocolConfiguration {npcShelleyGenesisFile = "/nix/store/2xhy92909anynqsvx1b1x153cxwnfmzx-shelley-genesis.json", npcShelleyGenesisFileHash = Just "849a1764f152e1b09c89c0dfdbcbdd38d711d1fec2db5dfa0f87cf2737a0eaf4"}) (NodeAlonzoProtocolConfiguration {npcAlonzoGenesisFile = "/nix/store/8qnphq6yvcjspiy3z0aijfd6cv64l3hl-alonzo-genesis.json", npcAlonzoGenesisFileHash = Just "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874"}) (NodeHardForkProtocolConfiguration {npcTestEnableDevelopmentHardForkEras = False, npcTestShelleyHardForkAtEpoch = Nothing, npcTestShelleyHardForkAtVersion = Nothing, npcTestAllegraHardForkAtEpoch = Nothing, npcTestAllegraHardForkAtVersion = Nothing, npcTestMaryHardForkAtEpoch = Nothing, npcTestMaryHardForkAtVersion = Nothing, npcTestAlonzoHardForkAtEpoch = Nothing, npcTestAlonzoHardForkAtVersion = Nothing, npcTestBabbageHardForkAtEpoch = Nothing, npcTestBabbageHardForkAtVersion = Nothing}), ncDiffusionMode = InitiatorAndResponderDiffusionMode, ncSnapshotInterval = DefaultSnapshotInterval, ncTestEnableDevelopmentNetworkProtocols = False, ncMaxConcurrencyBulkSync = Nothing, ncMaxConcurrencyDeadline = Nothing, ncLoggingSwitch = True, ncLogMetrics = True, ncTraceConfig = TracingOnLegacy (TraceSelection {traceVerbosity = NormalVerbosity, traceAcceptPolicy = OnOff {isOn = True}, traceBlockFetchClient = OnOff {isOn = False}, traceBlockFetchDecisions = OnOff {isOn = False}, traceBlockFetchProtocol = OnOff {isOn = False}, traceBlockFetchProtocolSerialised = OnOff {isOn = False}, traceBlockFetchServer = OnOff {isOn = False}, traceBlockchainTime = OnOff {isOn = False}, traceChainDB = OnOff {isOn = True}, traceChainSyncBlockServer = OnOff {isOn = False}, traceChainSyncClient = OnOff {isOn = False}, traceChainSyncHeaderServer = OnOff {isOn = False}, traceChainSyncProtocol = OnOff {isOn = False}, traceConnectionManager = OnOff {isOn = True}, traceConnectionManagerCounters = OnOff {isOn = True}, traceConnectionManagerTransitions = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorTracer = OnOff {isOn = False}, traceDebugPeerSelectionInitiatorResponderTracer = OnOff {isOn = False}, traceDiffusionInitialization = OnOff {isOn = True}, traceDnsResolver = OnOff {isOn = False}, traceDnsSubscription = OnOff {isOn = True}, traceErrorPolicy = OnOff {isOn = True}, traceForge = OnOff {isOn = True}, traceForgeStateInfo = OnOff {isOn = True}, traceHandshake = OnOff {isOn = False}, traceInboundGovernor = OnOff {isOn = True}, traceInboundGovernorCounters = OnOff {isOn = True}, traceInboundGovernorTransitions = OnOff {isOn = True}, traceIpSubscription = OnOff {isOn = True}, traceKeepAliveClient = OnOff {isOn = False}, traceLedgerPeers = OnOff {isOn = True}, traceLocalChainSyncProtocol = OnOff {isOn = False}, traceLocalConnectionManager = OnOff {isOn = False}, traceLocalErrorPolicy = OnOff {isOn = True}, traceLocalHandshake = OnOff {isOn = False}, traceLocalInboundGovernor = OnOff {isOn = False}, traceLocalMux = OnOff {isOn = False}, traceLocalRootPeers = OnOff {isOn = True}, traceLocalServer = OnOff {isOn = False}, traceLocalStateQueryProtocol = OnOff {isOn = False}, traceLocalTxMonitorProtocol = OnOff {isOn = False}, traceLocalTxSubmissionProtocol = OnOff {isOn = False}, traceLocalTxSubmissionServer = OnOff {isOn = False}, traceMempool = OnOff {isOn = True}, traceMux = OnOff {isOn = False}, tracePeerSelection = OnOff {isOn = True}, tracePeerSelectionCounters = OnOff {isOn = True}, tracePeerSelectionActions = OnOff {isOn = True}, tracePublicRootPeers = OnOff {isOn = True}, traceServer = OnOff {isOn = True}, traceTxInbound = OnOff {isOn = False}, traceTxOutbound = OnOff {isOn = False}, traceTxSubmissionProtocol = OnOff {isOn = False}, traceTxSubmission2Protocol = OnOff {isOn = False}}), ncTraceForwardSocket = Nothing, ncMaybeMempoolCapacityOverride = Nothing, ncProtocolIdleTimeout = 5s, ncTimeWaitTimeout = 60s, ncAcceptedConnectionsLimit = AcceptedConnectionsLimit {acceptedConnectionsHardLimit = 512, acceptedConnectionsSoftLimit = 384, acceptedConnectionsDelay = 5s}, ncTargetNumberOfRootPeers = 100, ncTargetNumberOfKnownPeers = 100, ncTargetNumberOfEstablishedPeers = 50, ncTargetNumberOfActivePeers = 20, ncEnableP2P = DisabledP2PMode}
    Listening on http://127.0.0.1:12798
    [c995d1df:cardano.node.basicInfo.protocol:Notice:5] [2022-07-10 13:48:51.68 UTC] Byron; Shelley
    [c995d1df:cardano.node.basicInfo.version:Notice:5] [2022-07-10 13:48:51.68 UTC] 1.35.1
    [c995d1df:cardano.node.basicInfo.commit:Notice:5] [2022-07-10 13:48:51.68 UTC] 0000000000000000000000000000000000000000
    [c995d1df:cardano.node.basicInfo.nodeStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2022-07-10 13:48:51.685957811 UTC
    [c995d1df:cardano.node.basicInfo.systemStartTime:Notice:5] [2022-07-10 13:48:51.68 UTC] 2019-07-24 20:20:16 UTC
    [c995d1df:cardano.node.basicInfo.slotLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 20s
    [c995d1df:cardano.node.basicInfo.epochLengthByron:Notice:5] [2022-07-10 13:48:51.68 UTC] 21600
    [c995d1df:cardano.node.basicInfo.slotLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodShelley:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAllegra:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodMary:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodAlonzo:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.basicInfo.slotLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 1s
    [c995d1df:cardano.node.basicInfo.epochLengthBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 432000
    [c995d1df:cardano.node.basicInfo.slotsPerKESPeriodBabbage:Notice:5] [2022-07-10 13:48:51.68 UTC] 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Config path /nix/store/5b6pry15w93fv0r0x9rc3r1ii5871lvr-config-0-0.json, Network magic NetworkMagic {unNetworkMagic = 1097911063}, Protocol "Byron; Shelley", Version "1.35.1", Commit "0000000000000000000000000000000000000000", Node start time 2022-07-10 13:48:51.694962147 UTC
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Byron, Slot length 20s, Epoch length 21600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Shelley, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Allegra, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Mary, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Alonzo, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] Era Babbage, Slot length 1s, Epoch length 432000, Slots per KESPeriod 129600
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.69 UTC] startup time: 1657460932
    [c995d1df:cardano.node.startup:Info:5] [2022-07-10 13:48:51.70 UTC]
    node addresses: 0.0.0.0:3001
    local socket: /ipc/node.socket
    node-to-node versions:
    NodeToNodeV_7 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)
    NodeToNodeV_8 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeDisabled :* Nil)
    NodeToNodeV_9 HardForkNodeToNodeEnabled HardForkSpecificNodeToNodeVersion1 (EraNodeToNodeEnabled ByronNodeToNodeVersion2 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* EraNodeToNodeEnabled ShelleyNodeToNodeVersion1 :* Nil)
    node-to-client versions:
    NodeToClientV_9 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_10 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientEnabled ShelleyNodeToClientVersion4 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_11 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_12 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientDisabled :* Nil)
    NodeToClientV_13 HardForkNodeToClientEnabled HardForkSpecificNodeToClientVersion2 (EraNodeToClientEnabled ByronNodeToClientVersion1 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* EraNodeToClientEnabled ShelleyNodeToClientVersion5 :* Nil)
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Chain DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.70 UTC] Started opening Immutable DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:51.79 UTC] Validating chunk no. 0 out of 2917. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validated chunk no. 0 out of 2917. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.16 UTC] Validating chunk no. 1 out of 2917. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validated chunk no. 1 out of 2917. Progress: 0.03%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.56 UTC] Validating chunk no. 2 out of 2917. Progress: 0.03%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validated chunk no. 2 out of 2917. Progress: 0.07%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:52.96 UTC] Validating chunk no. 3 out of 2917. Progress: 0.07%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validated chunk no. 3 out of 2917. Progress: 0.10%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.35 UTC] Validating chunk no. 4 out of 2917. Progress: 0.10%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validated chunk no. 4 out of 2917. Progress: 0.14%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:53.75 UTC] Validating chunk no. 5 out of 2917. Progress: 0.14%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:48:54.14 UTC] Validated chunk no. 5 out of 2917.

    ... (Cut for readability)

    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validated chunk no. 2911 out of 2917. Progress: 99.79%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.33 UTC] Validating chunk no. 2912 out of 2917. Progress: 99.79%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validated chunk no. 2912 out of 2917. Progress: 99.83%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.40 UTC] Validating chunk no. 2913 out of 2917. Progress: 99.83%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validated chunk no. 2913 out of 2917. Progress: 99.86%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.48 UTC] Validating chunk no. 2914 out of 2917. Progress: 99.86%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validated chunk no. 2914 out of 2917. Progress: 99.90%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.54 UTC] Validating chunk no. 2915 out of 2917. Progress: 99.90%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validated chunk no. 2915 out of 2917. Progress: 99.93%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.60 UTC] Validating chunk no. 2916 out of 2917. Progress: 99.93%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validated chunk no. 2916 out of 2917. Progress: 99.97%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.66 UTC] Validating chunk no. 2917 out of 2917. Progress: 99.97%
    [c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the secondary index for the chunk file with number 2917.
    [c995d1df:cardano.node.ChainDB:Warning:5] [2022-07-10 13:53:08.67 UTC] Rewriting the primary index for the chunk file with number 2917.
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Found a valid last location at chunk 2917 with tip 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432@63009237.
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Opened imm db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and chunk 2917
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:08.72 UTC] Started opening Volatile DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Opened vol db
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:09.28 UTC] Started opening Ledger DB
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replaying ledger from snapshot at 16ce3e707388b8c033f87b440ac89095b2d2fc5fa2b42f768c38da286312a31a at slot 63005524
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.19 UTC] Replayed block: slot 63005533 out of 63009237. Progress: 0.24%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.20 UTC] Replayed block: slot 63007165 out of 63009237. Progress: 44.20%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Opened lgr db
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.24 UTC] Started initial chain selection
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.45 UTC] Pushing ledger state for block 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421. Progress: 0.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] before next, messages elided = 63009476
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 5e59df354b64634bd27fc1b3ed08991c6de909ea085625da2ca78ec5a6a3e37c at slot 63019450. Progress: 13.85%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block e0610e4f03ef640ead31a729f6f18aa820f3906f6414b179d3c553f0011162ef at slot 63019479. Progress: 13.89%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:37.82 UTC] Pushing ledger state for block 8edc84f1f289475ca5c2afd9cae3c704ed7bcdf3e489fd1842e3904bd2d6d8c5 at slot 63019510. Progress: 13.93%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] before next, messages elided = 63019575
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block fc426a1c3a8c5ae61100e5ccfcaa47ccfb6cc144ed17fcd47a2b55f48890790a at slot 63029515. Progress: 27.75%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 68059200505d3ec65d3ddce9441efb0607adab002066c00acc050f5bb0c53deb at slot 63029578. Progress: 27.84%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.21 UTC] Pushing ledger state for block 25f5cc004ad90dc554e085699f1386dc8f69cec4012a7b35735b83da6fa68a0b at slot 63029602. Progress: 27.87%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] before next, messages elided = 63029636
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block cfb3dd669fd1a85aaf005ddd0e4a8b90cbb7b2c66dc8ff6f41e2e7aa2a0f0c57 at slot 63039634. Progress: 41.72%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block d7f057436e749e4468cfd8b17a04d447c4ce628b8dc33ea7ebdc4d3ad4659dec at slot 63039638. Progress: 41.73%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.61 UTC] Pushing ledger state for block 73fcb92346714585e1dbb484b1678bb15dab7304a8071cd95ec85195ca7a46be at slot 63039655. Progress: 41.75%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] before next, messages elided = 63039729
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block a7256fa99f7bf50d0e764cb80122222b1d2b80ffef4bee30e42c0bb80c5f1168 at slot 63049716. Progress: 55.64%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.93 UTC] Pushing ledger state for block 75e2064629d6a017bfe324a3d31723ed7bfa017eceda1549bd6c9f4d63653394 at slot 63049861. Progress: 55.84%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:38.94 UTC] Pushing ledger state for block 71aeaae8f83ee6b94a7feb521c16f0d889a9b95be6da85d540ac0435b412fb2c at slot 63049904. Progress: 55.90%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] before next, messages elided = 63049909
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block 15ad241c6908d0748cb80d17035d4001f7f86ee22fe71197cbe9bc7489d8e71b at slot 63059862. Progress: 69.65%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block a5e38b0875d44e10a3cba9c420ad4c9708e913e3458f1003a8236a831762069a at slot 63059915. Progress: 69.73%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.19 UTC] Pushing ledger state for block ca6dc89bd705476bcd056d6ffc3dd43499e51d0e5ecfe56a439fadacac50fc1b at slot 63059939. Progress: 69.76%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] before next, messages elided = 63059957
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 3c8593b6859b02abaa7f3b69d2114b1f402c65eef6904020e5ed37356aea4461 at slot 63069941. Progress: 83.57%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 50a06570febcf89ee00c386979d3a616561996b6c5cf6cbff44c20aa8454c375 at slot 63069971. Progress: 83.61%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.48 UTC] Pushing ledger state for block 6265f3c30f149ba0a797a1d2c6998b918f089e7455ab665e3369456105901a5a at slot 63069972. Progress: 83.62%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] before next, messages elided = 63069985
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 0be786a1d9272083e9e184da3bc3bfcb71b82ad10fbf52f4959dc5dc6d1b7b3c at slot 63079898. Progress: 97.32%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block 2862bd67a50bf9f6f31ab11d9153663d3e657f88c24ba8e71174f8f5216c2a99 at slot 63079992. Progress: 97.45%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.79 UTC] Pushing ledger state for block cc9036c6c4076ca28ac5d03522001c233a9202cb5b1d9484c3e406fbb3406fd5 at slot 63079994. Progress: 97.45%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] before next, messages elided = 63080024
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Pushing ledger state for block c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837. Progress: 100.00%
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Valid candidate at tip 110b618d3359fb6d8bddf8cb1e98823dc995083a2af2607f1c179928a26d03c3 at slot 63009421
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Initial chain selected
    [c995d1df:cardano.node.ChainDB:Info:5] [2022-07-10 13:53:39.86 UTC] Opened db with immutable tip at 07c1891b7394c92f50ddfabb84b9bd6be5944c5a201796190b5f69a69dcbc432 at slot 63009237 and tip c9bb7635b3e55175af30d1c9ca943d5df438ed838e814956d304cbb638c664aa at slot 63081837
    [c995d1df:cardano.node.shutdown:Warning:5] [2022-07-10 13:53:39.87 UTC] Will terminate upon reaching NoShutdown
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] CreatingServerSocket 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ConfiguringServerSocket 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ListeningServerSocket 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] ServerSocketUp 0.0.0.0:3001
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:346] [2022-07-10 13:53:39.87 UTC] RunServer (0.0.0.0:3001 :| [])
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreateSystemdSocketForSnocketPath (LocalAddress "/ipc/node.socket")
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] CreatedLocalSocket (LocalAddress "/ipc/node.socket")
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ConfiguringLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] ListeningLocalSocket (LocalAddress "/ipc/node.socket") (FileDescriptor 26)
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] LocalSocketUp (LocalAddress "/ipc/node.socket") (FileDescriptor 26)
    [c995d1df:cardano.node.DiffusionInitializationTracer:Info:349] [2022-07-10 13:53:39.87 UTC] RunLocalServer (LocalAddress "/ipc/node.socket")
    [c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d014:e00:a200:0:1:0:1]:3001
    [c995d1df:cardano.node.DnsSubscription:Notice:358] [2022-07-10 13:53:39.91 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 3.131.32.242:3001
    [c995d1df:cardano.node.DnsSubscription:Warning:345] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Unsupported remote target address [2a05:d01c:321:2101:0:1:0:2]:3001
    [c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.94 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt Start, destination 13.41.9.54:3001
    [c995d1df:cardano.node.DnsSubscription:Notice:359] [2022-07-10 13:53:39.95 UTC] Domain: "relays-new.cardano-testnet.iohkdev.io" Connection Attempt End, destination 13.41.9.54:3001 outcome: ConnectSuccessLast
    [c995d1df:cardano.node.ErrorPolicy:Notice:343] [2022-07-10 13:53:39.95 UTC] IP 3.131.32.242:3001 ErrorPolicySuspendConsumer (Just (ConnectionExceptionTrace (SubscriberError {seType = SubscriberParallelConnectionCancelled, seMessage = "Parallel connection cancelled", seStack = []}))) 1s

    Then the Cardano node will synchronize with the other nodes of the network and start adding blockss

    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:53:40.06 UTC] Chain extended, new tip: 7ae33b2f4bc8b84e77dfd539f0f6e7f59b293e96f62fdcfdb17cbd7a006fe5c0 at slot 63081906
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:08.30 UTC] Chain extended, new tip: 6b4ccd2bec5e3862b23ea0f7c2f342a3659cecdcfdaf04551179df3839be6213 at slot 63092090
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:21.36 UTC] Chain extended, new tip: 6e95eb82da5a38544e6ef430a2733f6014c3c10527003b9d3bdc534f6a2ce81f at slot 63092103
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:39.04 UTC] Chain extended, new tip: a662672ec4b988022e135cb0b7e440f5fbffe8e205771d13a566a418f7021ba7 at slot 63092121
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:55:45.18 UTC] Chain extended, new tip: 2a0f2e6f218a08f4e0bc4668285d8e792fd7ec62f05880bd5b2d23d6bce20dfb at slot 63092127
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:18.05 UTC] Chain extended, new tip: ab9ef8af92ec062ec59a10da588e238ba8840705c095ebd5cd5da7ab9ea9c8e1 at slot 63092160
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:56:45.15 UTC] Chain extended, new tip: e59bcbf34172eb6a934e2580f6b20ebe1ea32fba7420feec096744fab8ffce76 at slot 63092189
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:57:59.06 UTC] Chain extended, new tip: ea0e76fe069a0bcb831cf6b342530adf2a28de4922a752cff734fe81a1842dff at slot 63092263
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:02.27 UTC] Chain extended, new tip: 1b68a85a10dd7bd840a69ece2807fbca61a1de07c30080bf94fbbfd1de8d1446 at slot 63092266
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:28.21 UTC] Chain extended, new tip: 07e1252c5614b9bb6e6cff95066c134eb251aea6bef33dc34c0dd064934f2cea at slot 63092292
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:33.17 UTC] Chain extended, new tip: 0d3712fd7852b0aff00d660f4e7dc609808018dc271fe460bb9ff8270dd50d8f at slot 63092297
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:48.53 UTC] Chain extended, new tip: c8bb96ea392e41dce6fc157e164dbe19ba894d268f69985e20a2d65daeb4488c at slot 63092312
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:58:58.08 UTC] Chain extended, new tip: 35ea30e175abaae7983db9f65e7a00ba45312ecb151e53a651b3a6058add4c4f at slot 63092322
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:02.13 UTC] Chain extended, new tip: 5320de43ea30e46515f48263211212833474ea87ff046f36f0d83059fad6e9ff at slot 63092326
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:06.29 UTC] Chain extended, new tip: 58e9cb29bd771e0625689a0d591a7a8309f9e859ce4a3b70a9ab2e28173ce78b at slot 63092330
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 13:59:36.31 UTC] Chain extended, new tip: 1af2411f492e1895231cc910bdb1a68a45596157bcbfae5bdfd5c5ed81b03054 at slot 63092360
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:04.51 UTC] Chain extended, new tip: 270d47c5a277ef7efe028b6eb4764ab328db8e509ad962370bb383b1832bb260 at slot 63092388
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:00:29.52 UTC] Chain extended, new tip: 6fbe009ac36363cbebc607c733964878dfce6054c8785d1294f202acb475c861 at slot 63092413
    [c995d1df:cardano.node.ChainDB:Notice:322] [2022-07-10 14:01:12.63 UTC] Chain extended, new tip: f764596ece0b75d5d0054f22f3f0a0846f1647ff980d053015065099ec279839 at slot 63092456
    + \ No newline at end of file diff --git a/doc/next/manual/getting-started/run-mithril-devnet/index.html b/doc/next/manual/getting-started/run-mithril-devnet/index.html index 1fc9d2b926..f4189995ef 100644 --- a/doc/next/manual/getting-started/run-mithril-devnet/index.html +++ b/doc/next/manual/getting-started/run-mithril-devnet/index.html @@ -18,13 +18,13 @@ - +
    -
    Version: Next 🚧

    Run a Private Mithril network

    info

    In this guide, you will learn how to run a demonstration of a Mithril Network working on top of a private devnet Cardano Network. This network is completely autonomous and setup to produce Mithril snapshots every 1 minute.

    The network will be launched with the following topology:

    • 2 Cardano Nodes configured as Stake Pool Operators (SPO) with a Mithril Signer on top
    • 1 Cardano Node configured as BFT node with a Mithril Aggregator on top

    Devnet Topology

    danger

    This demonstration is working only on a Linux machine.

    tip

    More information about this private Cardano/Mithril devnet is available here.

    Video demonstration

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version).

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run apt install libssl-dev

    • Ensure SQLite3 library is installed on your system and its version is at least 3.40. Run sqlite3 --version to check your version.

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Change directory​

    Go to the devnet folder

    cd mithril-test-lab/mithril-devnet

    Run a Private Mithril/Cardano network locally (devnet)​

    Step 1: Launch the devnet​

    Open a first terminal window.

    Run a devnet with 1 BTF and 2 SPO Cardano nodes.

    Option 1: Remote Docker images

    The network will be ready faster with remote Docker images.

    MITHRIL_IMAGE_ID=latest NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh

    Or

    Option 2: Local Docker images

    This takes more time to build local Docker images of the Mithril nodes

    NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh
    info

    You will see that the devnet is launched with the following steps:

    • Bootstraping the devnet: generates the artifacts of the devnet depending on the configuration parameters (cryptographic keys, network topology, transactions to setup pool nodes, ...)
    • Start Cardano Network: run the nodes of the Cardano Network, waits for it to be ready and activate the pool nodes
    • Start Mithril Network: run the nodes of the Mithril Network that works on top of the Cardano Network

    You should see the following information displayed

    =====================================================================
    Bootstrap Mithril/Cardano devnet
    =====================================================================

    >> Directory: artifacts
    >> Cardano BFT nodes: 1
    >> Cardano SPO nodes: 2
    >> Info: Mithril Aggregator will be attached to the first Cardano BFT node
    >> Info: Mithril Signers will be attached to each Cardano SPO node

    =====================================================================
    Start Cardano nodes
    =====================================================================

    >> Start Cardano network
    cardano-node: no process found
    >> Starting Cardano node 'node-bft1'
    >> Starting Cardano node 'node-pool1'
    >> Starting Cardano node 'node-pool2'
    >> Wait for Cardano network to be ready
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> 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

    =====================================================================
    Start Mithril nodes
    =====================================================================

    >> Start 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 }, url_snapshot_manifest: \"\", 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...

    Step 2: Query the devnet​

    Open a second terminal window.

    Watch the state queried from the devnet

    watch -n 1 ./devnet-query.sh

    The networks will be queried every 1s and will display:

    • Certificate production informations gathered from the Mithril Network
    • Utxo, Stake Pools, Stake Distribution from the Cardano Network
    =====================================================================
    Query Mithril/Cardano devnet
    =====================================================================

    =====================================================================
    === Mithril Network
    =====================================================================

    >> Query pending certificate
    {
    "beacon": {
    "network": "devnet",
    "epoch": 2,
    "immutable_file_number": 6
    },
    "protocol": {
    "k": 5,
    "m": 100,
    "phi_f": 0.65
    },
    "signers": []
    }

    >> Query snapshots
    [
    {
    "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"
    ]
    },
    {
    "digest": "1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0",
    "certificate_hash": "be758b84a4b495e82af48747356946efb509ccbc4b44a9c985e3cb3099e35c94",
    "size": 6743,
    "created_at": "2022-07-05T11:26:35.658661878Z",
    "locations": [
    "http://0.0.0.0:8080/aggregator/snapshot/1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0/download"
    ]
    },
    {
    "digest": "fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1",
    "certificate_hash": "4254a6176afbe17967ad1671e4619e9a3f3412115a63dd0eb0f5e8b64094128a",
    "size": 6199,
    "created_at": "2022-07-05T11:26:20.470029035Z",
    "locations": [
    "http://0.0.0.0:8080/aggregator/snapshot/fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1/download"
    ]
    }
    ]

    =====================================================================
    === Cardano Network
    =====================================================================

    >> Query chain tip
    {
    "era": "Alonzo",
    "syncProgress": "100.00",
    "hash": "075fc8366d353b45debedfc6faa92148c8fad584d81dbb4ea7b8b4d121489452",
    "epoch": 2,
    "slot": 219,
    "block": 9
    }

    >> 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

    >> Query stake pools
    pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys
    pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav

    >> Query stake distribution
    PoolId Stake frac
    ------------------------------------------------------------------------------
    pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys 1.052e-3
    pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav 5.258e-4

    Step 3: Observe the devnet​

    Open a third terminal window.

    Watch the logs of each node of the devnet

    watch -n 1 LINES=5 ./devnet-log.sh

    The nodes will be queried every 1s and will display as below

    =====================================================================
    Logs Mithril/Cardano devnet
    =====================================================================

    =====================================================================
    -- docker-compose logs --tail=5
    =====================================================================
    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-bft1/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
    =====================================================================

    =====================================================================
    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
    =====================================================================

    Interact with the Mithril Aggregator by using the Mithril Client​

    Step 1: Prepare some useful variables​

    # Cardano network
    NETWORK=devnet

    # Aggregator API endpoint URL
    AGGREGATOR_ENDPOINT=http://localhost:8080/aggregator

    # Digest of the latest produced snapshot for convenience of the demo
    # You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2
    SNAPSHOT_DIGEST=$(curl -s $AGGREGATOR_ENDPOINT/snapshots | jq -r '.[0].digest')

    Step 2: Select A Snapshot​

    List the available snapshots with which you can bootstrap a Cardano node

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client list

    You will see a list of snapshots

    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | Network | Digest | Size | Locations | Created |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 | 11808 | 1 | 2022-07-04T16:47:00.258482685Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | 60d9c6e014d22335b34f55f83da728667f04fc1c63152ccff0bce7d217d08447 | 10793 | 1 | 2022-07-04T16:46:45.069646321Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | a3c4bb5f413f1b9648f0a086b3752d25ec62b540b8390917a5a7e78809896d92 | 7991 | 1 | 2022-07-04T16:46:09.817821220Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | b952adaa04dbb42206c69589b9951660f40c7262b088b13434b7a446ec90bc36 | 6746 | 1 | 2022-07-04T16:45:49.616260734Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | 46425fdcfe89ad5ba41a7822a4395e21b539e80c20e2b10546017b14cdcd4e4b | 6196 | 1 | 2022-07-04T16:45:29.425195132Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+

    Step 3: Show Snapshot Details​

    Get some more details from a specific snapshot (Optional)

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client show $SNAPSHOT_DIGEST

    You will see more information about a snapshot

    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Info | Value |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Network | devnet |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Digest | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Size | 11808 |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Location 1 | http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Created | 2022-07-04T16:47:00.258482685Z |
    +------------+-------------------------------------------------------------------------------------------------------------------+

    Step 4: Download Selected Snapshot​

    Download the selected snapshot from the remote location to your remote location

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client download $SNAPSHOT_DIGEST

    You will see that the selected snapshot archive has been downloaded locally

    Download success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 #1
    from http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download
    to /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/snapshot.archive.tar.gz

    Step 5: Restore Selected Snapshot​

    Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client restore $SNAPSHOT_DIGEST

    You will see that the snapshot archive is unpacked and that the associated certificate is valid

    Unpacking snapshot...
    Unpack success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917
    to /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db

    Restore a Cardano Node with:

    docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data \
    --mount type=bind,source="./data/devnet/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db",target=/data/db/ \
    -e NETWORK=devnet \
    inputoutput/cardano-node
    - +
    Version: Next 🚧

    Run a Private Mithril network

    info

    In this guide, you will learn how to run a demonstration of a Mithril Network working on top of a private devnet Cardano Network. This network is completely autonomous and setup to produce Mithril snapshots every 1 minute.

    The network will be launched with the following topology:

    • 2 Cardano Nodes configured as Stake Pool Operators (SPO) with a Mithril Signer on top
    • 1 Cardano Node configured as BFT node with a Mithril Aggregator on top

    Devnet Topology

    danger

    This demonstration is working only on a Linux machine.

    tip

    More information about this private Cardano/Mithril devnet is available here.

    Video demonstration

    Pre-requisites​

    • Install a correctly configured Rust toolchain (latest stable version).

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run apt install libssl-dev

    • Ensure SQLite3 library is installed on your system and its version is at least 3.40. Run sqlite3 --version to check your version.

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Change directory​

    Go to the devnet folder

    cd mithril-test-lab/mithril-devnet

    Run a Private Mithril/Cardano network locally (devnet)​

    Step 1: Launch the devnet​

    Open a first terminal window.

    Run a devnet with 1 BTF and 2 SPO Cardano nodes.

    Option 1: Remote Docker images

    The network will be ready faster with remote Docker images.

    MITHRIL_IMAGE_ID=latest NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh

    Or

    Option 2: Local Docker images

    This takes more time to build local Docker images of the Mithril nodes

    NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh
    info

    You will see that the devnet is launched with the following steps:

    • Bootstraping the devnet: generates the artifacts of the devnet depending on the configuration parameters (cryptographic keys, network topology, transactions to setup pool nodes, ...)
    • Start Cardano Network: run the nodes of the Cardano Network, waits for it to be ready and activate the pool nodes
    • Start Mithril Network: run the nodes of the Mithril Network that works on top of the Cardano Network

    You should see the following information displayed

    =====================================================================
    Bootstrap Mithril/Cardano devnet
    =====================================================================

    >> Directory: artifacts
    >> Cardano BFT nodes: 1
    >> Cardano SPO nodes: 2
    >> Info: Mithril Aggregator will be attached to the first Cardano BFT node
    >> Info: Mithril Signers will be attached to each Cardano SPO node

    =====================================================================
    Start Cardano nodes
    =====================================================================

    >> Start Cardano network
    cardano-node: no process found
    >> Starting Cardano node 'node-bft1'
    >> Starting Cardano node 'node-pool1'
    >> Starting Cardano node 'node-pool2'
    >> Wait for Cardano network to be ready
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> Not ready yet
    >>>> 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

    =====================================================================
    Start Mithril nodes
    =====================================================================

    >> Start 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 }, url_snapshot_manifest: \"\", 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...

    Step 2: Query the devnet​

    Open a second terminal window.

    Watch the state queried from the devnet

    watch -n 1 ./devnet-query.sh

    The networks will be queried every 1s and will display:

    • Certificate production informations gathered from the Mithril Network
    • Utxo, Stake Pools, Stake Distribution from the Cardano Network
    =====================================================================
    Query Mithril/Cardano devnet
    =====================================================================

    =====================================================================
    === Mithril Network
    =====================================================================

    >> Query pending certificate
    {
    "beacon": {
    "network": "devnet",
    "epoch": 2,
    "immutable_file_number": 6
    },
    "protocol": {
    "k": 5,
    "m": 100,
    "phi_f": 0.65
    },
    "signers": []
    }

    >> Query snapshots
    [
    {
    "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"
    ]
    },
    {
    "digest": "1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0",
    "certificate_hash": "be758b84a4b495e82af48747356946efb509ccbc4b44a9c985e3cb3099e35c94",
    "size": 6743,
    "created_at": "2022-07-05T11:26:35.658661878Z",
    "locations": [
    "http://0.0.0.0:8080/aggregator/snapshot/1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0/download"
    ]
    },
    {
    "digest": "fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1",
    "certificate_hash": "4254a6176afbe17967ad1671e4619e9a3f3412115a63dd0eb0f5e8b64094128a",
    "size": 6199,
    "created_at": "2022-07-05T11:26:20.470029035Z",
    "locations": [
    "http://0.0.0.0:8080/aggregator/snapshot/fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1/download"
    ]
    }
    ]

    =====================================================================
    === Cardano Network
    =====================================================================

    >> Query chain tip
    {
    "era": "Alonzo",
    "syncProgress": "100.00",
    "hash": "075fc8366d353b45debedfc6faa92148c8fad584d81dbb4ea7b8b4d121489452",
    "epoch": 2,
    "slot": 219,
    "block": 9
    }

    >> 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

    >> Query stake pools
    pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys
    pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav

    >> Query stake distribution
    PoolId Stake frac
    ------------------------------------------------------------------------------
    pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys 1.052e-3
    pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav 5.258e-4

    Step 3: Observe the devnet​

    Open a third terminal window.

    Watch the logs of each node of the devnet

    watch -n 1 LINES=5 ./devnet-log.sh

    The nodes will be queried every 1s and will display as below

    =====================================================================
    Logs Mithril/Cardano devnet
    =====================================================================

    =====================================================================
    -- docker-compose logs --tail=5
    =====================================================================
    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-bft1/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
    =====================================================================

    =====================================================================
    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
    =====================================================================

    Interact with the Mithril Aggregator by using the Mithril Client​

    Step 1: Prepare some useful variables​

    # Cardano network
    NETWORK=devnet

    # Aggregator API endpoint URL
    AGGREGATOR_ENDPOINT=http://localhost:8080/aggregator

    # Digest of the latest produced snapshot for convenience of the demo
    # You can also modify this variable and set it to the value of the digest of a snapshot that you can retrieve at step 2
    SNAPSHOT_DIGEST=$(curl -sL $AGGREGATOR_ENDPOINT/artifact/snapshots | jq -r '.[0].digest')

    Step 2: Select A Snapshot​

    List the available snapshots with which you can bootstrap a Cardano node

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client list

    You will see a list of snapshots

    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | Network | Digest | Size | Locations | Created |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 | 11808 | 1 | 2022-07-04T16:47:00.258482685Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | 60d9c6e014d22335b34f55f83da728667f04fc1c63152ccff0bce7d217d08447 | 10793 | 1 | 2022-07-04T16:46:45.069646321Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | a3c4bb5f413f1b9648f0a086b3752d25ec62b540b8390917a5a7e78809896d92 | 7991 | 1 | 2022-07-04T16:46:09.817821220Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | b952adaa04dbb42206c69589b9951660f40c7262b088b13434b7a446ec90bc36 | 6746 | 1 | 2022-07-04T16:45:49.616260734Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+
    | devnet | 46425fdcfe89ad5ba41a7822a4395e21b539e80c20e2b10546017b14cdcd4e4b | 6196 | 1 | 2022-07-04T16:45:29.425195132Z |
    +---------+------------------------------------------------------------------+-------+-----------+--------------------------------+

    Step 3: Show Snapshot Details​

    Get some more details from a specific snapshot (Optional)

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client show $SNAPSHOT_DIGEST

    You will see more information about a snapshot

    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Info | Value |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Network | devnet |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Digest | 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Size | 11808 |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Location 1 | http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download |
    +------------+-------------------------------------------------------------------------------------------------------------------+
    | Created | 2022-07-04T16:47:00.258482685Z |
    +------------+-------------------------------------------------------------------------------------------------------------------+

    Step 4: Download Selected Snapshot​

    Download the selected snapshot from the remote location to your remote location

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client download $SNAPSHOT_DIGEST

    You will see that the selected snapshot archive has been downloaded locally

    Download success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917 #1
    from http://0.0.0.0:8080/aggregator/snapshot/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/download
    to /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/snapshot.archive.tar.gz

    Step 5: Restore Selected Snapshot​

    Verify the Certificate of the snapshot and unpack its content in order to feed the Cardano node database

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client restore $SNAPSHOT_DIGEST

    You will see that the snapshot archive is unpacked and that the associated certificate is valid

    Unpacking snapshot...
    Unpack success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917
    to /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db

    Restore a Cardano Node with:

    docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data \
    --mount type=bind,source="./data/devnet/85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db",target=/data/db/ \
    -e NETWORK=devnet \
    inputoutput/cardano-node
    + \ No newline at end of file diff --git a/doc/next/manual/getting-started/run-signer-node/index.html b/doc/next/manual/getting-started/run-signer-node/index.html index cfee8a862f..28ccdd31ce 100644 --- a/doc/next/manual/getting-started/run-signer-node/index.html +++ b/doc/next/manual/getting-started/run-signer-node/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@
    Version: Next 🚧

    Run a Mithril Signer node (SPO)

    info

    In this guide, you will learn how to setup a Mithril Signer on top of a Cardano SPO Node for the testnet.

    Mithril Networks

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)
    danger

    This guide is working only on a Linux machine.

    tip

    For more information about the Mithril Protocol, please refer to the About Mithril section.

    Pre-requisites​

    What you'll need​

    • Operating a Cardano Node as a Stake Pool:

      • The Cardano Operational Certificate file of the pool
      • The Cardano KES Secret Key file of the pool
    • Access to the file system of a relay Cardano Node running on the testnet:

      • Read rights on the Database folder (--database-path setting of the Cardano Node)
      • Read/Write rights on the Inter Process Communication file (usually CARDANO_NODE_SOCKET_PATH env var used to launch the Cardano Node)
    • Install a recent version of the cardano-cli (version 8.0.0+)

    • Install a correctly configured Rust toolchain (latest stable version).

    • Install OpenSSL development libraries, for example on Ubuntu/Debian/Mint run apt install libssl-dev

    • Ensure the SQLite3 version is at least 3.35 (released Apr. 2021)

    • Install a recent version of jq (version 1.6+) apt install jq

    Mithril Keys Certification​

    Certify your Pool Id​

    You must declare your Cardano Operational Certificate file and KES Secret Key file which allows to:

    • Compute automatically the PoolId
    • Verify that you are the owner of the PoolId, and thus of the associated stakes used by Mithril protocol
    • Verify that you are the owner of the Mithril Signer Secret Key, and thus allowed to contribute to the multi-signatures and certificate production of the Mithril network

    Building your own executable​

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Build Mithril Signer binary​

    Switch to build branch / tag

    # **YOUR_BUILD_BRANCH_OR_TAG** depends on the Mithril network you target, 
    # please refer to the **Build From** column of the above **Mithril Networks** table
    git switch **YOUR_BUILD_BRANCH_OR_TAG**

    Change directory

    cd mithril/mithril-signer

    Run tests (Optional)

    make test

    Build executable

    make build

    Download compiled binary​

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package.

    You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you are targeting.

    These links are available in the Build From column of the above Mithril Networks table.

    Verify binary​

    Verify version​

    Check that the Mithril Signer binary is running the correct version by running

    ./mithril-signer -V

    You should see something like

    mithril-signer 0.2.0

    ⚠️ Verify that the version displayed is the version described in the content of the Release / Pre-Release note (see the Build From column of the above Mithril Networks table)

    Verify build​

    Check that the Mithril Signer binary is working fine by running its help

    ./mithril-signer -h

    You should see

    An implementation of a Mithril Signer

    Usage: mithril-signer [OPTIONS]

    Options:
    -r, --run-mode <RUN_MODE>
    Run Mode [env: RUN_MODE=] [default: dev]
    -v, --verbose...
    Verbosity level, add more v to increase
    -c, --configuration-dir <CONFIGURATION_DIR>
    Directory where the configuration file is located [default: ./config]
    --disable-digests-cache
    Disable immutables digests cache
    --reset-digests-cache
    If set the existing immutables digests cache will be reset
    -h, --help
    Print help information (use `--help` for more detail)
    -V, --version
    Print version information
    tip

    If you want to dig deeper, you can get access to several level of logs from the Mithril Signer:

    • Add -v for some logs (WARN)
    • Add -vv for more logs (INFO)
    • Add -vvv for even more logs (DEBUG)
    • Add -vvvv for all logs (TRACE)

    Install the service​

    Move executable​

    Move executable to /opt/mithril

    sudo mkdir -p /opt/mithril
    sudo mv mithril-signer /opt/mithril

    Setup the service​

    caution
    • User=cardano: Replace this value with the correct user. We assume that the user used to run the Cardano Node is cardano. The Mithril Signer must imperatively run with the same user.

    • In the /opt/mithril/mithril-signer/service.env env file:

      • KES_SECRET_KEY_PATH=/cardano/keys/kes.skey: replace /cardano/keys/kes.skey with the path to your Cardano KES Secret Key file
      • OPERATIONAL_CERTIFICATE_PATH=/cardano/cert/opcert.cert: replace /cardano/cert/opcert.cert with the path to your Cardano Operational Certificate file
      • DB_DIRECTORY=/cardano/db: replace /cardano/db with the path to the database folder of the Cardano Node (the one in --database-path)
      • CARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket: replace with the path to the IPC file (CARDANO_NODE_SOCKET_PATH env var)
      • CARDANO_CLI_PATH=/app/bin/cardano-cli: replace with the path to the cardano-cli executable
      • DATA_STORES_DIRECTORY=/opt/mithril/stores: replace with the path to a folder where the Mithril Signer will store its data (/opt/mithril/stores e.g.)
      • STORE_RETENTION_LIMIT: if set, this will limit the number of records in some internal stores (5 is a good fit).
      • ERA_READER_ADAPTER_TYPE=cardano-chain: replace cardano-chain with the era reader adapter type used in your Mithril network
      • ERA_READER_ADAPTER_PARAMS={"address": "...", "verification_key": "..."}: replace {"address": "...", "verification_key": "..."} with the era reader params that you need to compute by running the command jq -nc --arg address $(wget -q -O - **YOUR_ERA_READER_ADDRESS**) --arg verification_key $(wget -q -O - **YOUR_ERA_READER_VERIFICATION_KEY**) '{"address": $address, "verification_key": $verification_key}'

    First create an env file that will be used by the service:

    sudo bash -c 'cat > /opt/mithril/mithril-signer.env << EOF
    KES_SECRET_KEY_PATH=**YOUR_KES_SECRET_KEY_PATH**
    OPERATIONAL_CERTIFICATE_PATH=**YOUR_OPERATIONAL_CERTIFICATE_PATH**
    NETWORK=**YOUR_CARDANO_NETWORK**
    AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**
    RUN_INTERVAL=60000
    DB_DIRECTORY=/cardano/db
    CARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket
    CARDANO_CLI_PATH=/app/bin/cardano-cli
    DATA_STORES_DIRECTORY=/opt/mithril/stores
    STORE_RETENTION_LIMIT=5
    ERA_READER_ADAPTER_TYPE=**YOUR_ERA_READER_ADAPTER_TYPE**
    ERA_READER_ADAPTER_PARAMS=**YOUR_ERA_READER_ADAPTER_PARAMS**
    EOF'

    Then we will create a /etc/systemd/system/mithril-signer.service description file for our service

    sudo bash -c 'cat > /etc/systemd/system/mithril-signer.service << EOF
    [Unit]
    Description=Mithril Signer service
    StartLimitIntervalSec=0

    [Service]
    Type=simple
    Restart=always
    RestartSec=1
    User=cardano
    EnvironmentFile=/opt/mithril/mithril-signer.env
    ExecStart=/opt/mithril/mithril-signer -vvv

    [Install]
    WantedBy=multi-user.target
    EOF'

    Reload the service configuration (Optional)

    sudo systemctl daemon-reload

    Then start the service

    sudo systemctl start mithril-signer

    Then register the service to start on boot

    sudo systemctl enable mithril-signer

    Then monitor status of the service

    systemctl status mithril-signer.service

    And monitor the logs of the service

    tail /var/log/syslog
    tip

    There is a 2 epochs delay between the signer node registration and its ability to create individual signatures, as explained in the Mithril Certificate Chain in depth. After this delay, you should be able to see your PoolId listed in some of the certificates available on the Mithril Explorer

    - + \ No newline at end of file diff --git a/doc/next/manual/welcome/index.html b/doc/next/manual/welcome/index.html index 587813cc40..73b1a28108 100644 --- a/doc/next/manual/welcome/index.html +++ b/doc/next/manual/welcome/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    User Manual

    Welcome to the Mithril user manual!

    Let's discover Mithril in less than 5 minutes.

    Introduction​

    A Mithril Network is composed of 3 main components:

    • Mithril Aggregator:

    This node is in charge of coordinating the production of the Cardano snapshot archives (along with the associated certificates powered by Mithril multi signatures) by interacting with Mithril Signer nodes and a Cardano node.

    • Mithril Signer:

    This node is in charge of producing single signatures that are then combined into a multi signature by the Mithril Aggregator. It works side by side with a Cardano node that has stakes in the network (Stake Pool Operator or SPO).

    • Mithril Client:

    This node is in charge of verifying and restoring a snapshot that will allow a lightning fast bootstrapping of a Cardano full node.

    tip

    For more information about the Mithril Protocol, please refer to the About Mithril section.

    What you'll need​

    What you'll find in the user manual​

    In the Getting Started guide, you will find tutorials for:

    In the Developer Docs, you will find documentation for:

    tip

    If you need help, feel free to reach the Mithril team:

    - + \ No newline at end of file diff --git a/doc/next/mithril/intro/index.html b/doc/next/mithril/intro/index.html index a292c8f5a3..0b890c79dc 100644 --- a/doc/next/mithril/intro/index.html +++ b/doc/next/mithril/intro/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    About Mithril

    New

    πŸ†• Interact with the Mithril Protocol by experiencing with our protocol simulation. This will help you understand how the participants interact to create a multi signature and what's the impact of the protocol parameters.

    Mithril in a nutshell​

    Mithril is a research project which goal is to provide Stake-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 stakes.

    In other words, an adversarial participant with less than this share of the total stakes will not be able to produce valid multi signatures πŸ”.

    What you'll find in this guide​

    In this About Mithril guide, you will find:

    tip

    If you need help, feel free to reach the Mithril team:

    - + \ No newline at end of file diff --git a/doc/next/mithril/mithril-network/aggregator/index.html b/doc/next/mithril/mithril-network/aggregator/index.html index a5c85b4bc8..18e9d041a1 100644 --- a/doc/next/mithril/mithril-network/aggregator/index.html +++ b/doc/next/mithril/mithril-network/aggregator/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    Mithril Aggregator Node

    Welcome to the Mithril Aggregator Node guide!

    Introduction​

    info

    The Mithril Aggregator is a trustless node that orchestrates the work of the Mithril Signer nodes and that gathers their individual signatures to produce Mithril multi signatures and their associated certificates. It is also in charge of creating and storing the ledger state snapshot archive.

    tip

    Trustless Orchestration​

    The primary goal of the Mithril Aggregator is to orchestrate and synchronize the Mithril multi signatures production:

    • When a new snapshot is ready to be produced (and certified), the Mithril Aggregator creates and broadcasts a new Beacon that indicates to the Mithril Signers which point in time they should use to compute the message (or digest) to sign.

    • It is also responsible for advertising the Verification Keys (Mithril public keys) of all the registered Mithril Signers.

    • The Beacon, the current Protocol Parameters and the available Verification Keys are gathered and advertised in a Pending Certificate.

    • The Mithril Signers can register with it, in order to be able to later participate in the signature process.

    An important fact is that the Mithril Aggregator is trustless:

    • Anyone could run an aggregator on the network.

    • It does not broadcast any sensitive information (such as the message that needs to be signed). The signer nodes are responsible for computing these information directy from a Cardano Node on top of which they run.

    Also, in order to aggregate single signatures into Mithril multi signatures, the *Mithril Aggregator does not need to represent any share of the total stakes of the Cardano Network.

    Multi Signature and Certificate Production​

    The Mithril Aggregator is in charge of producing the Mithril multi signatures and their associated certificates for a part and/or all of the ledger state (the snapshots):

    • The previously registered Mithril Signers are able to produce individual signatures. They send these individual signatures to the Mithril Aggregator that checks their validity and then store them.

    • Once the quorum of individual signatures has been reached, the Mithril Aggregator is able to produce a multi signature.

    • The Mithril Aggregator combines the multi signature and some metadata into a Mithril Certificate that will be later used by the Mithril Client to verify the authenticity of a snapshot.

    tip

    For more information about the Mithril Certificate Chain, please refer to the Certificate Chain page.

    Snapshot Artifacts Production​

    In its first version, the Mithril Aggregator also takes care of producing the artifacts associated to the snapshot (e.g. the snapshot archive that will be later used by a Mithril Client).

    note

    It is worthy to mention that this role is endorsed only for convenience at the moment, and that on the long run the artifacts production will be delegated to a separate Mithril Snapshotter node.

    Once the snapshot artifact is created, it can be synchronized anywhere:

    • On the Mithril Aggregator itself.

    • On any cloud platform that provides a CDN.

    • On a separate peer to peer network (such as IPFS or Bittorrent).

    The Mithril Certificate is part of a chain of certificates that are involved in the snapshot authenticity verification and is stored:

    • On the Mithril Aggregator itself

    • Or on any accessible storage (as a cloud storage for example)

    Snapshot Artifacts and Certificate Distribution​

    In case the Mithril Aggregator stores the snapshot artifacts and/or the certificates, it can be used to distribute these data to remote clients. These clients can use them according to their need and verify that are genuine.

    Under the hood​

    In its first version, the Mithril Aggregator is composed of two main components:

    • A REST API, that enables the Mithril Signers to:
      • Retrieve other registered signers Verification Keys.
      • Register their Verification Keys.
      • Register their Individual Signatures.
    tip

    The documentation of the REST API of the Mithril Aggregator is available here.

    • A runtime that is powered by a state machine:
      • The runtime is synchronous and is scheduled to execute at regular intervals.
      • There are three possible states: IDLE , READY and SIGNING.
      • The runtime handles state transitions.
      • The runtime is summarized in the diagram below:

    Aggregator Runtime

    - + \ No newline at end of file diff --git a/doc/next/mithril/mithril-network/architecture/index.html b/doc/next/mithril/mithril-network/architecture/index.html index a7e6389989..8e4216c6dc 100644 --- a/doc/next/mithril/mithril-network/architecture/index.html +++ b/doc/next/mithril/mithril-network/architecture/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    Mithril Network Architecture

    Welcome to the Mithril Network Architecture guide!

    tip

    For more information about the Mithril Protocol, please refer to the About Mithril section.

    Introduction​

    In its current version, the Mithril Network is a network of nodes responsible for creating Snapshots and Certificates that enable fast bootstrap of a Cardano Node. It runs on top of the Cardano Network.

    info

    The role of a Mithril Network is to enable end users to restore a full Cardano node in less than 2 hours!

    It is basically composed of three nodes:

    The trustless node that orchestrates the work of the Mithril Signer nodes and that gathers their individual signatures to produce Mithril multi signatures and their associated certificates. It is also in charge of creating and storing the ledger state snapshot archive.

    The node that works transparently on top of the Stake Pool Operator Cardano nodes and which individually signs the ledger state.

    The node used to restore a Cardano full node by retrieving, from a Mithril Aggregator, a remote snapshot, its certificate chain and by verifying their validity thanks to the Mithril cryptographic primitives.

    Architecture Overview​

    info
    • This document is subject to change as it is a work in progress.
    • We are currenty working on decentralizing further the somewhat centralized architecture.

    Architecture

    - + \ No newline at end of file diff --git a/doc/next/mithril/mithril-network/client/index.html b/doc/next/mithril/mithril-network/client/index.html index 7e59d0a521..e7e2cf43ea 100644 --- a/doc/next/mithril/mithril-network/client/index.html +++ b/doc/next/mithril/mithril-network/client/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    Mithril Client Node

    Welcome to the Mithril Client Node guide!

    Introduction​

    info

    The Mithril Client node is used to restore a Cardano full node by retrieving, from a Mithril Aggregator, a remote snapshot, its certificate chain and by verifying their validity thanks to the Mithril cryptographic primitives.

    tip

    Usecases​

    At a first glance, a Mithril Client can be used by any user that needs to restore and bootstrap rapidly a Cardano full node:

    • A full node wallet such as Daedalus
    • A node operator (SPO, Exchange, Dapp)

    On the long run, the Mithril Client is intended to be incorporated in Light Clients and Wallets.

    Snapshot Artifacts Retrieval​

    The first operation that a Mithril Client does is to retrieve snapshot artifacts from a remote source.

    The Mithril Aggregator is used as a provider for the Snapshots (at least their locations).

    This is done upon a manual action of a user that has previously selected the snapshot to use (if multiple are available).

    These artifacs are stored locally on a temporary location, are uncompressed if necessary and used to compute the message that should have been computed and signed by the Mithril Signers.

    Snapshot Verification​

    Along with the snapshot artifacts, the Mithril Client will download the associated Certificate Chain and for each Mithril Certificate verify that (in the following order):

    1. The certificate is not tampered (by computing its hash and verifying that is is the same as the one used for downloading it).
    2. The locally computed message is the same as in the certificate.
    3. The multi signature of the certificate is valid and computed with the certificate message.
    4. The stake distribution used to compute the multi signature is signed:
      • Into a multi signature of a previous certificate of the chain (if there is one available).
      • Or by a valid Genesis Certificate (in case this is the first certificate of the chain).

    The Mithril Aggregator is used as a provider for the Certificate Chain.

    tip

    For more information about the Mithril Certificate Chain, please refer to the Certificate Chain page.

    Snapshot Restoration​

    Once the snapshot artifacts are verified, the Mithril Client node will move them from the temporary location to the final (user specified) location.

    At this point, the Cardano Node will take over, start using the artifacts. and hopefully start addng new blocks to the ledger!

    - + \ No newline at end of file diff --git a/doc/next/mithril/mithril-network/signer/index.html b/doc/next/mithril/mithril-network/signer/index.html index 1d1bb4e180..a800aa0b49 100644 --- a/doc/next/mithril/mithril-network/signer/index.html +++ b/doc/next/mithril/mithril-network/signer/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    Mithril Signer Node

    Welcome to the Mithril Signer Node guide!

    Introduction​

    info

    The Mithril Signer is a node that works transparently on top of the Stake Pool Operator Cardano nodes and which individually signs the ledger state.

    tip

    Individual Signatures Production​

    The Mithril Signer is a node that represents a share of the total stake of the Cardano Network which entitles it to participate in the Mithril multi signature creation (with respect to its share of total stakes). The rule is simple, the more stake shares, the more contribution to the production of the multi signatures.

    In order to produce an Individual Signature a Mithril Signer must also be aware of all the other Mithril Signers that may contribute.

    For the protocol to be secure, the Mithril Signer must also be in charge of computing by itself the messages (or digest) that are signed. To do so, they heavily rely on the Consensus mechanism of the Cardano Network that guarantees that all nodes of the network will store the same data locally (after a certain delay).

    If some nodes are not fully synchronized or if they have adversarial behavior they will simple not be able to contribute:

    • Either because they don't sign the same message (given they don't use the same data as those agreed by the rest of the network)

    • Or they are not entitled to sign (because they are not true holders of the stake share they used to sign)

    Interaction with the Mithril Aggregator​

    In its first version, the Mithril Signer works with other Mithril Signers through one Mithril Aggregator which acts as a facilitator and avoids direct signer to signer communications.

    In the long run, any signer will also have the ability to be a Mithril Aggregator as well in order to achieve a higher level of decentralization in the Mithril Network.

    The Mithril Signer connects to the Mithril Aggregator:

    • To know when to sign a new snapshot (by using the advertised Beacon of the Pending Certificate).
    • To retrieve the currently used Protocol Parameters.
    • To register its Verification Keys (public keys).
    • To receive the Verification Keys of all the other declared signers available for the next message to sign.
    • To send the Single Signatures of the locally computed messages (that will hopefuly be combined into Multi signatures by the aggregator).

    This process is summarized in the following diagram:

    signer workflow

    Under the hood​

    In its first version, the Mithril Signer is composed of a main component:

    • A runtime that is powered by a state machine:
      • The runtime is synchronous and is scheduled to execute at regular intervals.
      • There are three possible states: UNREGISTERED, REGISTERED and SIGNED.
      • The runtime handles state transitions.
      • The runtime is summarized in the diagram below:

    Signer Runtime

    - + \ No newline at end of file diff --git a/doc/next/mithril/mithril-protocol/certificates/index.html b/doc/next/mithril/mithril-protocol/certificates/index.html index 44d8433f7b..be24feb2e2 100644 --- a/doc/next/mithril/mithril-protocol/certificates/index.html +++ b/doc/next/mithril/mithril-protocol/certificates/index.html @@ -18,14 +18,14 @@ - +
    Version: Next 🚧

    Mithril Certificate Chain in depth

    Introduction​

    The Mithril Protocol 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 stakes.

    The stake distribution that is used to create the multi signature can't be trusted "as is" and must also be signed. Indeed, any one could relatively easily create a Fake Stake Distribution and use it to produce a valid multi signature that would be embedded in a perfectly Valid but Non Genuine Certificate. This certificate could be served by a dishonest Mithril Aggregator node and thus could lead to restoring a non genuine snapshot by a honest Mithril Client.

    In order to avoid this type of eclipse attack, the stake distribution used to create a multi signature must be certified beforehand. This is where the Certificate Chain takes place.

    The Certificate Chain Design​

    danger

    The Stake Distribution of an epoch is computed by the Cardano Nodes at the end of this epoch. It will be usable from the beginning of the following epoch.

    A way to certify the stake distribution used to create a multi signature is to verify that it has been previously signed in an earlier certificate. Then one can recursively verify that the earlier certificate is valid the same way. This process can be designed as a Chain of certificates: the Mithril Certificate Chain.

    As multiple certificates may be created during the same epoch (i.e. with the same stake distribution), it is sufficient to link to only one certificate of the previous epoch: this will allow faster verification times and it will also avoid network congestion.

    Also, the certificate at the beginning of the Certificate Chain has a special role. This is the Genesis Certificate. The only way to validate the stake distributon embedded in the Genesis Certificate is to sign it with a private key that is associated to a broadly available public key: the Genesis Keys. These are the keys that sign the hard forks used during the era transitions of the Cardano Blockchain.

    Here is a diagram illustrating the Certificate Chain design: Certificate Chain Design

    Where the following notations have been used:

    • C(p,n): Certificate at trigger p and epoch n
    • FC(n): First Certificate of epoch n
    • GC: Genesis Certificate
    • H(): Hash
    • SD(n): Stake Distribution of epoch n
    • VK(n): Verification Key at epoch n
    • AVK(n): Aggregrate Verification Key at epoch n such as AVK(n) = MKT_ROOT(SD(n) || VK(n))
    • MKT_ROOT(): Merkle-tree root
    • BEACON(p,n): Beacon at trigger p and epoch n
    • METADATA(p,n): Metadata of the certificate at trigger p and epoch n
    • MSG(p,n): Message of the certificate at trigger p and epoch n
    • MULTI_SIG(p,n): Multi signature created to the message H(MSG(p,n) || AVK(n-1))
    • GENESIS_SIG(MSG): Genesis Signature, i.e. signature of MSG with the Genesis Keys

    The hash of a Certificate H(C(p,n)) is computed as the concatenation (||) of all its fields. Therefore, if one field is modified, its hash is different.

    The informations embedded in the METADATA(p,n) field are:

    • The version of the Mithril Protocol
    • The parameter of the Mithril Protocol (k, m, and phi_f)
    • The date and time at which the multi signature creation was initiated
    • The date and time at which the Certificate was sealed
    • The list of the signers that actively contributed to the multi signature

    The message MSG(p,n) is a map of multiple values associated with their respective keys and provides a way to add more informations in the certificates without breaking the chain itself. These can be any message that the signers are able to compute deterministically thanks to the Cardano consensus: an immutable files snapshot, the Utxo set, the stahe distribution, ...

    note

    The trigger represents the instant at which a certificate should be created. It is combined, with at least the associated epoch to create the Beacon of the certificate. In the current implementation, this trigger is a new Immutable File Number. The epoch creation and the trigger creation processes may be uncorrelated.

    info

    The AVK or Aggregate Verification Key is the root of the Merkle-tree where each leaf is filled with H(STAKE(signer) || VK(signer)). It represents the corresponding Stake Distribution in a condensed way.

    The Verification Algorithm​

    The Certificate Chain verification can be stated as:

    CHAIN_VERIFY[C(p,n(p))] = CERT_VERIFY[C(p,n(p)] ^ CERT_VERIFY[FC(n(p))] ^ CERT_VERIFY[FC(n(p)-1)] ^ ... ^ CERT_VERIFY[FC(1)] ^ CERT_VERIFY[GC]

    Where the following notations have been used:

    • The epoch n(p) depends on the trigger p
    • CHAIN_VERIFY[]: Verify all the chain backward from a certificate
    • CERT_VERIFY[]: Verify a specific certificate

    A Certificate Chain is valid if from a Certificate, up to the Genesis Certificate of the chain there is at least one valid certificate per epoch.

    A non Genesis Certificate is valid if and only if the AVK used to verify the multi signature is also part of the signed message used to create a valid multi signature in a previously sealed Certificate.

    The Genesis Certificate is valid if and only if its Genesis Signature is verified with the advertised Public Genesis Key.

    An implementation of the algorithm would work as follows for a certificate:

    • Step 1: Use this certificate as the current_certificate
    • Step 2: Verify (or fail) that the current_hash of the current_certificate is valid (by computing it and comparing with the hash field of the certificate)
    • Step 3: Get the previous_hash of the previous_certificate by reading its value in the current_certificate
    • Step 4: Verify (or fail) that the multi_signature of the current_certificate is valid
    • Step 5: Retrieve the previous_certificate that has the hash previous_hash:
      • Step 5.1: If it is not a genesis_certificate:
        • Step 5.1.1: Verify (or fail) that the previous_hash of the previous_certificate is valid (by computing it and comparing with the hash field of the certificate)
        • Step 5.1.2: Verify the current_avk
          • Step 5.1.2.1: If the current_certificate is the first_certificate of the epoch, verify (or fail) that the current_avk of the current_certificate is part of the message signed by the multi signature of the previous_certificate
          • Step 5.1.2.2: Else verify (or fail) that the current_avk of the current_certificate is the same as the current_avk of the previous_certificate
        • Step 5.1.3: Verify (or fail) that the multi_signature of the previous_certificate is valid
        • Step 5.1.4: Use the previous_certificate as current_certificate and start again at Step 2
      • Step 5.2: If it is a genesis_certificate:
        • Step 5.2.1: Verify (or fail) that the previous_hash of the previous_certificate is valid (by computing it and comparing with the hash field of the certificate)
        • Step 5.2.2: Verify (or fail) that the current_avk of the current_certificate is part of the message signed by the genesis signature of the previous_certificate
        • Step 5.2.3: The certificate is valid (Success)

    The coexistence of multiple Certificate Chain​

    What would happen if some Mithril Aggregator claims that not enough signatures were received? This doesn’t really matter, as there will be a different Mithril Aggregator that would collect sufficient signatures and aggregate them into a valid Certificate.

    Similarly, different Mithril Aggregators might have different views of the individual signatures submitted (one aggregator might receive 10 signatures, and a different one could receive 11), which would result in different Certificates signing the same message.

    This would result in different Certificate Chains that would all link back to the Genesis Certificate. Indeed they would be represented by a tree of certificates where each traversal path from the root to a leaf represent a valid Certificate Chain.

    The need of backward compatibility​

    The Certificate Chain is designed to last. At a certain point, we will need to handle the verification of the multi signature from legacy versions of the Mithril cryptographic library.

    In order to achieve this backward compatibility, some options are available:

    • Handle multi signature verification functions of legacy versions
    • Recreate Genesis Certificates from time to time
    • Create intermediate Milestones Certificates (with both a multi signature and a genesis signature)
    • Design a format migration algorithm
    - + \ No newline at end of file diff --git a/doc/next/mithril/mithril-protocol/protocol/index.html b/doc/next/mithril/mithril-protocol/protocol/index.html index ecdbd45f60..97434d0db8 100644 --- a/doc/next/mithril/mithril-protocol/protocol/index.html +++ b/doc/next/mithril/mithril-protocol/protocol/index.html @@ -18,7 +18,7 @@ - + @@ -42,7 +42,7 @@ party is stored.
  • Then an aggregate verification key (AVK in the paper) is created from the registration material, in the form of a Merkle-tree.
  • The key dissemination process can also happen on-chain, which makes sense as the parties need to have some guarantees about the validity of keys and stakes of each other party.

    This phase happens once for each instance of the protocol running.

    3. Operations Phase​

    Operations run in cycles, where each cycle is triggered by a message (eg. a snapshot of the UTxO set) to sign for which a quorum of k valid signatures must be submitted.

    • Each party needs to check for eligibility to sign the message. It may be eligible to sign the same message more than once. This check is performed for m distinct indices. For every index, the signer evaluates a function (parameterized with phi_f) that takes its stake as input. If the result of the function is SUCCESS, then the signer is eligible to sign this message for the given index.

    • For every valid signature, it creates a proof (Ο€) containing a signature of the message, verification key, stake and paths of party in the Merkle-tree.

    • Then, multiple signatures can be aggregated together to form a certificate (Ο„) by:

      • Verifying signatures from each party:
        • Checking the party is authorized to sign for the given index (using the same procedure as the signing)
        • Checking the proof is valid which means:
          • Check the evaluation threshold is correct for party’s stake given the message, index and signature
          • Check the provided path exists in the aggregate keys' Merkle-tree
          • Verify the signature of the message is valid w.r.t to verification key
      • Producing an aggregation key from all verification keys
      • Producing an aggregate signature from all signatures ΞΌ
      • Producing a proof using the aggregate keys, the message and the vector of individual proofs from each party:
        • In the concatenation proof system all these values are simply packed together to form the proof,
        • In the case of bulletproof system, a more compact proof is generated.
    • Each certificate Ο„ can be verified to be valid for some message, using the known setup parameters to verify the certificate’s proof and then verifying the aggregate signatures and verification keys.

    Note

    Note that if the individual signatures are broadcast to all parties, then each party can independently produce the certificates. In particular, the party that performs aggregation is not required to have any specific knowledge, nor it is assumed to be honest. This means that any third party that has access to the individual signatures can perform the signature aggregation.

    tip

    For more information about the Mithril Network, please refer to the Architecture page.

    - + \ No newline at end of file diff --git a/doc/next/mithril/mithril-protocol/simulation/index.html b/doc/next/mithril/mithril-protocol/simulation/index.html index 55b660d06b..0a6e7740e9 100644 --- a/doc/next/mithril/mithril-protocol/simulation/index.html +++ b/doc/next/mithril/mithril-protocol/simulation/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    Mithril Protocol Simulation

    info
    • Thanks to this demo you will get a better understanding of the Mithril Protocol. You will hopefully visualize how the participants interact to create a multi signature and what's the impact of the protocol parameters.

    • This simulation is ran by a CLI that you will build and run, and that will ultimately generate real Mithril multi signatures!

    • For the purpose of reproducibility of the results, the simulation uses a deterministic source of randomness.

    • During the simulation some artifacts will be written to an artifacts folder, such as verification keys, individual signatures and multi signatures.

    What you'll need​

    • A Linux (preferred) or a macOS computer.

    • A correctly configured Rust toolchain (latest stable version).

    Download source​

    Download from GitHub (HTTPS)

    git clone https://github.com/input-output-hk/mithril.git

    Or (SSH)

    git clone git@github.com:input-output-hk/mithril.git

    Build Mithril Protocol demo binary​

    Change directory

    cd mithril/demo/protocol-demo

    Run tests (Optional)

    make test

    Build executable

    make build

    Verify build​

    Check that the Mithril Client binary is working fine by running its help

    ./mithrildemo -h

    You should see

    mithrildemo 
    Simple demonstration of the Mithril protocol

    USAGE:
    mithrildemo [OPTIONS]

    OPTIONS:
    -h, --help Print help information
    -k, --k <K> Quorum parameter [default: 5]
    -m, --m <M> Security parameter, upper bound on indices [default: 200]
    --nmessages <NMESSAGES> Number of messages to sign [default: 1]
    --nparties <NPARTIES> Number of parties [default: 5]
    --phi-f <PHI_F> f in phi(w) = 1 - (1 - f)^w, where w is the stake of a
    participant [default: 0.2]

    Run the simulation​

    tip

    A friendly reminder about the protocol parameters:

    • k: the Quorum parameter represents the minimum number of individual signatures (gathered from multiple participants) required to be aggregated in a multi signature.
    • m: the Security parameter represents the total number of lotteries in which each participant can participate in order to individually sign the message.
    • phi-f: the parameter on which depends the probability of a particpant to win a lottery. It variates between 0.0 (less chance) and 1.0 (more chance).
    danger

    The security level of the protocol is highly dependent on the value of the protocol parameters.

    Therefore they will be carefully selected by the Mithril cryptographers and researchers in order to guarantee that only legit stakeholders representing a sufficient threshold of the total stakes can combine their individual signatures in a valid multi signature.

    Case 1: Produce a multi signature​

    Run the simulation wih 5 participants

    ./mithrildemo -k 5 -m 50 --phi-f 0.65 --nparties 5

    The simulation should succeed and produce (or aggregate) a multi signature!

    >> Launch Mithril protocol demonstrator with configuration: 
    Config {
    m: 50,
    k: 5,
    phi_f: 0.65,
    nparties: 5,
    nmessages: 1,
    }

    >> Protocol establish phase
    Party #0: party created with 826 stakes
    Party #1: party created with 741 stakes
    Party #2: party created with 144 stakes
    Party #3: party created with 734 stakes
    Party #4: party created with 41 stakes
    Protocol established to StmParameters { m: 50, k: 5, phi_f: 0.65 }

    >> Protocol initialize phase:
    Verifier: verifier created
    Verifier: protocol params updated to StmParameters { m: 50, k: 5, phi_f: 0.65 }
    Party #0: protocol params updated to StmParameters { m: 50, k: 5, phi_f: 0.65 }
    Party #1: protocol params updated to StmParameters { m: 50, k: 5, phi_f: 0.65 }
    Party #2: protocol params updated to StmParameters { m: 50, k: 5, phi_f: 0.65 }
    Party #3: protocol params updated to StmParameters { m: 50, k: 5, phi_f: 0.65 }
    Party #4: protocol params updated to StmParameters { m: 50, k: 5, phi_f: 0.65 }
    Verifier: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #0: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #1: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #2: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #3: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #4: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Artifacts written to artifacts/parties-keys.json

    >> Protocol issue certificates phase:
    Message #0 to sign: [119, 36, 224, 63, 184, 216, 74, 55, 106, 67, 184, 244, 21, 24, 161, 28]
    Party #0: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #0: lottery #2 won
    Party #0: lottery #3 won
    Party #0: lottery #8 won
    Party #0: lottery #13 won
    Party #0: lottery #16 won
    Party #0: lottery #17 won
    Party #0: lottery #19 won
    Party #0: lottery #23 won
    Party #0: lottery #25 won
    Party #0: lottery #28 won
    Party #0: lottery #29 won
    Party #0: lottery #31 won
    Party #0: lottery #42 won
    Party #0: lottery #43 won
    Party #0: lottery #46 won
    Party #1: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #1: lottery #2 won
    Party #1: lottery #3 won
    Party #1: lottery #8 won
    Party #1: lottery #13 won
    Party #1: lottery #16 won
    Party #1: lottery #17 won
    Party #1: lottery #19 won
    Party #1: lottery #23 won
    Party #1: lottery #25 won
    Party #1: lottery #29 won
    Party #1: lottery #31 won
    Party #1: lottery #42 won
    Party #1: lottery #43 won
    Party #1: lottery #46 won
    Party #2: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #2: lottery #19 won
    Party #2: lottery #43 won
    Party #2: lottery #46 won
    Party #3: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #3: lottery #2 won
    Party #3: lottery #3 won
    Party #3: lottery #8 won
    Party #3: lottery #13 won
    Party #3: lottery #16 won
    Party #3: lottery #17 won
    Party #3: lottery #19 won
    Party #3: lottery #23 won
    Party #3: lottery #25 won
    Party #3: lottery #29 won
    Party #3: lottery #31 won
    Party #3: lottery #42 won
    Party #3: lottery #43 won
    Party #3: lottery #46 won
    Party #4: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #4: lottery #19 won
    Party #0: aggregate signature computed
    Party #1: aggregate signature computed
    Party #2: aggregate signature computed
    Party #3: aggregate signature computed
    Party #4: aggregate signature computed
    Artifacts written to artifacts/single-signatures.json
    Artifacts written to artifacts/multi-signatures.json

    >> Protocol verify certificates phase:
    Message #0 to verify: 7724e03fb8d84a376a43b8f41518a11c
    Party #0: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Verifier: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Party #1: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Verifier: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Party #2: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Verifier: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Party #3: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Verifier: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Party #4: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!
    Verifier: aggregate signature successfully verified for 7724e03fb8d84a376a43b8f41518a11c!

    >> Congrats, protocol terminated with success!

    Case 2: Does not produce a multi signature​

    Run the simulation wih 5 participants

    ./mithrildemo -k 5 -m 5 --phi-f 0.25 --nparties 5

    The simulation should fail and not produce (or aggregate) any multi signature!

    >> Launch Mithril protocol demonstrator with configuration: 
    Config {
    m: 5,
    k: 5,
    phi_f: 0.25,
    nparties: 5,
    nmessages: 1,
    }

    >> Protocol establish phase
    Party #0: party created with 826 stakes
    Party #1: party created with 741 stakes
    Party #2: party created with 144 stakes
    Party #3: party created with 734 stakes
    Party #4: party created with 41 stakes
    Protocol established to StmParameters { m: 5, k: 5, phi_f: 0.25 }

    >> Protocol initialize phase:
    Verifier: verifier created
    Verifier: protocol params updated to StmParameters { m: 5, k: 5, phi_f: 0.25 }
    Party #0: protocol params updated to StmParameters { m: 5, k: 5, phi_f: 0.25 }
    Party #1: protocol params updated to StmParameters { m: 5, k: 5, phi_f: 0.25 }
    Party #2: protocol params updated to StmParameters { m: 5, k: 5, phi_f: 0.25 }
    Party #3: protocol params updated to StmParameters { m: 5, k: 5, phi_f: 0.25 }
    Party #4: protocol params updated to StmParameters { m: 5, k: 5, phi_f: 0.25 }
    Verifier: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #0: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #1: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #2: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #3: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Party #4: protocol keys registration from [("0", 826), ("1", 741), ("2", 144), ("3", 734), ("4", 41)]
    Artifacts written to artifacts/parties-keys.json

    >> Protocol issue certificates phase:
    Message #0 to sign: [119, 36, 224, 63, 184, 216, 74, 55, 106, 67, 184, 244, 21, 24, 161, 28]
    Party #0: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #1: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #2: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #3: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #4: sign message 7724e03fb8d84a376a43b8f41518a11c
    Party #0: not enough signatures to compute aggregate
    Party #1: not enough signatures to compute aggregate
    Party #2: not enough signatures to compute aggregate
    Party #3: not enough signatures to compute aggregate
    Party #4: not enough signatures to compute aggregate
    Artifacts written to artifacts/single-signatures.json
    Artifacts written to artifacts/multi-signatures.json

    >> Protocol verify certificates phase:
    Message #0 to verify: 7724e03fb8d84a376a43b8f41518a11c
    Party #0: aggregate signature not found 7724e03fb8d84a376a43b8f41518a11c

    >> Certificate verification failed: aggregate signature not found
    tip

    For more information about the Mithril Protocol, please refer to the About Mithril section.

    - + \ No newline at end of file diff --git a/doc/next/networks-matrix/index.html b/doc/next/networks-matrix/index.html index 0accdb0c36..5c6f0ffbf2 100644 --- a/doc/next/networks-matrix/index.html +++ b/doc/next/networks-matrix/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    Here is an up to date list of all the Mithril Networks, their configurations and their status:

    Last update: 02/28/2023

    pre-release-preview​

    Information-
    Mithril Networkpre-release-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusPre-Release 🟠
    Aggregator Endpointhttps://aggregator.pre-release-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/pre-release-preview/era.vkey ↗️
    Build FromLatest Pre-Release ↗️

    testing-preview​

    ⚠️ For devs only

    Information-
    Mithril Networktesting-preview πŸ”Ž
    Cardano Networkpreview
    Cardano Magic Id2
    SupportedYes βœ”οΈ
    StatusUnstable πŸ”΄
    Aggregator Endpointhttps://aggregator.testing-preview.api.mithril.network/aggregator ↗️
    Genesis Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/genesis.vkey ↗️
    Era Reader Adapter Typecardano-chain
    Era Reader Addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.addr ↗️
    Era Reader Verification Keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/testing-preview/era.vkey ↗️
    Build FromMain Branch ↗️
    caution

    In this documentation, we use the generic:

    • **YOUR_CARDANO_NETWORK** identifier, but you need to replace it with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** identifier, but you need to replace it with the endpoint of an aggregator that runs on the Cardano network you target (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** identifier, but you need to replace it with the genesis verification key url that runs on the Cardano network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** identifier, but you need to replace it with the era reader adapter type used by the Mithril network you target (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** identifier, but you need to replace it with the era reader address url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** identifier, but you need to replace it with the era reader verification key url used by the Mithril network you target (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey)
    - + \ No newline at end of file diff --git a/explorer/404.html b/explorer/404.html index 01b9e090ab..8245f59c2b 100644 --- a/explorer/404.html +++ b/explorer/404.html @@ -1 +1 @@ -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/explorer/_next/static/OpL_plt6X_xNH1tkrGwl9/_buildManifest.js b/explorer/_next/static/N9dJdZk8jolEtBtFNRg5d/_buildManifest.js similarity index 100% rename from explorer/_next/static/OpL_plt6X_xNH1tkrGwl9/_buildManifest.js rename to explorer/_next/static/N9dJdZk8jolEtBtFNRg5d/_buildManifest.js diff --git a/explorer/_next/static/OpL_plt6X_xNH1tkrGwl9/_ssgManifest.js b/explorer/_next/static/N9dJdZk8jolEtBtFNRg5d/_ssgManifest.js similarity index 100% rename from explorer/_next/static/OpL_plt6X_xNH1tkrGwl9/_ssgManifest.js rename to explorer/_next/static/N9dJdZk8jolEtBtFNRg5d/_ssgManifest.js diff --git a/explorer/index.html b/explorer/index.html index a02b28765b..1148c9f86c 100644 --- a/explorer/index.html +++ b/explorer/index.html @@ -1 +1 @@ -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/rust-doc/help.html b/rust-doc/help.html index cb77a0560e..576ccd1007 100644 --- a/rust-doc/help.html +++ b/rust-doc/help.html @@ -1 +1 @@ -Rustdoc help

    Rustdoc help

    Back
    \ No newline at end of file +Rustdoc help

    Rustdoc help

    Back
    \ No newline at end of file diff --git a/rust-doc/settings.html b/rust-doc/settings.html index 008bdf0a68..5ad73fb0d0 100644 --- a/rust-doc/settings.html +++ b/rust-doc/settings.html @@ -1 +1 @@ -Rustdoc settings

    Rustdoc settings

    Back
    \ No newline at end of file +Rustdoc settings

    Rustdoc settings

    Back
    \ No newline at end of file