diff --git a/doc/404.html b/doc/404.html index 12656e9e403..3619c5793bd 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 36236cddc1f..6c32298bf16 100644 --- a/doc/adr/1/index.html +++ b/doc/adr/1/index.html @@ -18,7 +18,7 @@ - + @@ -38,7 +38,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 1940d605826..e1e1a9b3579 100644 --- a/doc/adr/2/index.html +++ b/doc/adr/2/index.html @@ -18,7 +18,7 @@ - + @@ -32,7 +32,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 3e88404b360..941da26eab8 100644 --- a/doc/adr/3/index.html +++ b/doc/adr/3/index.html @@ -18,7 +18,7 @@ - + @@ -34,7 +34,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 0c95c113972..b8f82a65372 100644 --- a/doc/adr/4/index.html +++ b/doc/adr/4/index.html @@ -18,7 +18,7 @@ - + @@ -32,7 +32,7 @@
· 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:

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:

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/5/index.html b/doc/adr/5/index.html index 594817b1d67..350d5cf6ae4 100644 --- a/doc/adr/5/index.html +++ b/doc/adr/5/index.html @@ -18,7 +18,7 @@ - + @@ -38,7 +38,7 @@ chrono crate.
  • Internally, we will always use the UTC timezone, to avoid useless conversions between timezones.
  • Users or scripts querying dates from our applications or from our databases will be able to parse all of them using the same format.
  • - + \ No newline at end of file diff --git a/doc/adr/archive/index.html b/doc/adr/archive/index.html index c2f73eabef1..c566d56a3c0 100644 --- a/doc/adr/archive/index.html +++ b/doc/adr/archive/index.html @@ -18,7 +18,7 @@ - + @@ -29,7 +29,7 @@

    2023

    - + \ No newline at end of file diff --git a/doc/adr/index.html b/doc/adr/index.html index c119f0229e3..d17bb2f79ef 100644 --- a/doc/adr/index.html +++ b/doc/adr/index.html @@ -18,7 +18,7 @@ - + @@ -50,7 +50,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 68a5dbe7e38..09be026716e 100644 --- a/doc/adr/tags/accepted/index.html +++ b/doc/adr/tags/accepted/index.html @@ -18,7 +18,7 @@ - + @@ -45,7 +45,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 53908f01897..74ee4dc3332 100644 --- a/doc/adr/tags/draft/index.html +++ b/doc/adr/tags/draft/index.html @@ -18,7 +18,7 @@ - + @@ -34,7 +34,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 b304cf40073..658601eed4b 100644 --- a/doc/adr/tags/index.html +++ b/doc/adr/tags/index.html @@ -18,7 +18,7 @@ - + @@ -29,7 +29,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 8ff2dc95fe1..71765129767 100644 --- a/doc/aggregator-api/index.html +++ b/doc/aggregator-api/index.html @@ -24,7 +24,7 @@ - + @@ -129,7 +129,7 @@

    Request samples

    Content type
    application/json
    {
    • "entity_type": {
      },
    • "party_id": "1234567890",
    • "signature": "7b2c36322c3130352c3232322c31302c3131302c33312c37312c39372c22766b223a5b3136342c2c31393137352c313834",
    • "indexes": [
      ]
    }

    Response samples

    Content type
    application/json
    {
    • "label": "Internal error",
    • "message": "An error occurred, the operation could not be completed"
    }
    - + \ No newline at end of file diff --git a/doc/assets/js/1d3fbc77.c4b50998.js b/doc/assets/js/1d3fbc77.293141d5.js similarity index 99% rename from doc/assets/js/1d3fbc77.c4b50998.js rename to doc/assets/js/1d3fbc77.293141d5.js index eed65c076e9..6d9b42e2332 100644 --- a/doc/assets/js/1d3fbc77.c4b50998.js +++ b/doc/assets/js/1d3fbc77.293141d5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[4163,9531,2379],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>h});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},d=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),m=s(a),c=r,h=m["".concat(p,".").concat(c)]||m[c]||u[c]||i;return a?n.createElement(h,l(l({ref:t},d),{},{components:a})):n.createElement(h,l({ref:t},d))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,l=new Array(i);l[0]=c;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o[m]="string"==typeof e?e:r,l[1]=o;for(var s=2;s{a.d(t,{Z:()=>l});var n=a(67294),r=a(86010);const i={tabItem:"tabItem_Ymn6"};function l(e){let{children:t,hidden:a,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,l),hidden:a},t)}},74866:(e,t,a)=>{a.d(t,{Z:()=>_});var n=a(87462),r=a(67294),i=a(86010),l=a(12466),o=a(16550),p=a(91980),s=a(67392),d=a(50012);function m(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.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:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function u(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??m(a);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,a])}function c(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const n=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!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:t,groupId:a});return[(0,p._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(n.location.search);t.set(i,e),n.replace({...n.location,search:t.toString()})}),[i,n])]}function k(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,i=u(e),[l,o]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:i}))),[p,s]=h({queryString:a,groupId:n}),[m,k]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,i]=(0,d.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&i.set(e)}),[a,i])]}({groupId:n}),g=(()=>{const e=p??m;return c({value:e,tabValues:i})?e:null})();(0,r.useLayoutEffect)((()=>{g&&o(g)}),[g]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!c({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),s(e),k(e)}),[s,k,i]),tabValues:i}}var g=a(72389);const N={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function f(e){let{className:t,block:a,selectedValue:o,selectValue:p,tabValues:s}=e;const d=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),u=e=>{const t=e.currentTarget,a=d.indexOf(t),n=s[a].value;n!==o&&(m(t),p(n))},c=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=d.indexOf(e.currentTarget)+1;t=d[a]??d[0];break}case"ArrowLeft":{const a=d.indexOf(e.currentTarget)-1;t=d[a]??d[d.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t)},s.map((e=>{let{value:t,label:a,attributes:l}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:o===t?0:-1,"aria-selected":o===t,key:t,ref:e=>d.push(e),onKeyDown:c,onClick:u},l,{className:(0,i.Z)("tabs__item",N.tabItem,l?.className,{"tabs__item--active":o===t})}),a??t)})))}function y(e){let{lazy:t,children:a,selectedValue:n}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},i.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function b(e){const t=k(e);return r.createElement("div",{className:(0,i.Z)("tabs-container",N.tabList)},r.createElement(f,(0,n.Z)({},e,t)),r.createElement(y,(0,n.Z)({},e,t)))}function _(e){const t=(0,g.Z)();return r.createElement(b,(0,n.Z)({key:String(t)},e))}},61494:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>s});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:"Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package",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={},s=[],d={toc:s},m="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(m,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package\nfor linux\xb9."),(0,r.kt)("p",null,"You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you\nare 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."),(0,r.kt)("p",null,"\xb9 The Linux binaries target ",(0,r.kt)("inlineCode",{parentName:"p"},"glibc"),", and have a minimum requirement of ",(0,r.kt)("inlineCode",{parentName:"p"},"glibc 2.31")," (compatible with ",(0,r.kt)("inlineCode",{parentName:"p"},"Ubuntu 20.04"),"\nor ",(0,r.kt)("inlineCode",{parentName:"p"},"Debian Bullseye"),")."))}u.isMDXComponent=!0},99544:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>m});var n=a(87462),r=(a(67294),a(3905)),i=a(81900),l=a(61494);const o={sidebar_position:3},p="Run a Mithril Signer as an SPO",s={unversionedId:"manual/getting-started/run-signer-node",id:"manual/getting-started/run-signer-node",title:"Run a Mithril Signer as an SPO",description:"For more information about the Mithril protocol, see the section About Mithril.",source:"@site/root/manual/getting-started/run-signer-node.md",sourceDirName:"manual/getting-started",slug:"/manual/getting-started/run-signer-node",permalink:"/doc/next/manual/getting-started/run-signer-node",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/getting-started/run-signer-node.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docSideBar",previous:{title:"Bootstrap a Cardano node",permalink:"/doc/next/manual/getting-started/bootstrap-cardano-node"},next:{title:"Run a private Mithril network",permalink:"/doc/next/manual/getting-started/run-mithril-devnet"}},d={},m=[{value:"Mithril Signer deployment model",id:"mithril-signer-deployment-model",level:2},{value:"Mithril keys certification",id:"mithril-keys-certification",level:2},{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Set up the Mithril Signer node",id:"set-up-the-mithril-signer-node",level:2},{value:"Building your own executable",id:"building-your-own-executable",level:3},{value:"Download the source file",id:"download-the-source-file",level:4},{value:"Build the Mithril Signer binary",id:"build-the-mithril-signer-binary",level:4},{value:"Download the pre-built binary",id:"download-the-pre-built-binary",level:3},{value:"Verifying the binary",id:"verifying-the-binary",level:3},{value:"Verify the version of the binary",id:"verify-the-version-of-the-binary",level:4},{value:"Verify the build",id:"verify-the-build",level:4},{value:"Installing the service",id:"installing-the-service",level:3},{value:"Move the executable",id:"move-the-executable",level:4},{value:"Set up the service",id:"set-up-the-service",level:4},{value:"Set up the Mithril relay node",id:"set-up-the-mithril-relay-node",level:2},{value:"Configuring the Squid service",id:"configuring-the-squid-service",level:3},{value:"Firewall configuration",id:"firewall-configuration",level:3},{value:"About the Cardano relay machine",id:"about-the-cardano-relay-machine",level:4},{value:"Verify the Mithril Signer deployment",id:"verify-the-mithril-signer-deployment",level:2},{value:"Verify your signer is registered",id:"verify-your-signer-is-registered",level:3},{value:"Verify your signer contributes with individual signatures",id:"verify-your-signer-contributes-with-individual-signatures",level:3}],u={toc:m},c="wrapper";function h(e){let{components:t,...o}=e;return(0,r.kt)(c,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"run-a-mithril-signer-as-an-spo"},"Run a Mithril Signer as an SPO"),(0,r.kt)("admonition",{title:"Mithril networks",type:"note"},(0,r.kt)(i.default,{mdxType:"NetworksMatrix"})),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"For more information about the ",(0,r.kt)("strong",{parentName:"p"},"Mithril protocol"),", see the section ",(0,r.kt)("a",{parentName:"p",href:"/doc/next/mithril/intro"},"About Mithril"),".")),(0,r.kt)("h2",{id:"mithril-signer-deployment-model"},"Mithril Signer deployment model"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"In this guide, you will learn how to set up a ",(0,r.kt)("strong",{parentName:"p"},"Mithril Signer")," within the stake pool operator (SPO) infrastructure both on Cardano ",(0,r.kt)("inlineCode",{parentName:"p"},"mainnet")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"testnet")," environments:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"On ",(0,r.kt)("inlineCode",{parentName:"li"},"mainnet"),", you ",(0,r.kt)("strong",{parentName:"li"},"must")," run the ",(0,r.kt)("strong",{parentName:"li"},"production")," deployment where the ",(0,r.kt)("strong",{parentName:"li"},"Mithril Signer")," runs on the ",(0,r.kt)("strong",{parentName:"li"},"Cardano block producer")," machine and the ",(0,r.kt)("strong",{parentName:"li"},"Mithril relay")," runs on the ",(0,r.kt)("strong",{parentName:"li"},"Cardano relay")," machine. ",(0,r.kt)("strong",{parentName:"li"},"Note")," that you can run the ",(0,r.kt)("strong",{parentName:"li"},"production")," deployment on ",(0,r.kt)("inlineCode",{parentName:"li"},"testnet"),"."),(0,r.kt)("li",{parentName:"ul"},"You can also run ",(0,r.kt)("strong",{parentName:"li"},"naive")," deployment, where the ",(0,r.kt)("strong",{parentName:"li"},"Mithril Signer")," runs on the ",(0,r.kt)("strong",{parentName:"li"},"Cardano relay")," machine. This is possible in the testnet environment only, and does not require setting up a ",(0,r.kt)("strong",{parentName:"li"},"Mithril relay"),"."))),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"In the current setup, you don't need to install a Mithril Aggregator.")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The ",(0,r.kt)("strong",{parentName:"p"},"production")," deployment model is currently in the beta version.")),(0,r.kt)("p",null,"Here is the schema of the ",(0,r.kt)("strong",{parentName:"p"},"production")," deployment on mainnet:\n",(0,r.kt)("a",{target:"_blank",href:a(34310).Z},(0,r.kt)("img",{alt:"Production Mithril Signer Deployment Model",src:a(39009).Z,width:"2208",height:"452"}))),(0,r.kt)("p",null,"and the schema of the ",(0,r.kt)("strong",{parentName:"p"},"naive")," deployment specifically for ",(0,r.kt)("inlineCode",{parentName:"p"},"testnets"),":\n",(0,r.kt)("a",{target:"_blank",href:a(66182).Z},(0,r.kt)("img",{alt:"Naive Mithril Signer Deployment Model",src:a(15588).Z,width:"2209",height:"452"}))),(0,r.kt)("admonition",{type:"danger"},(0,r.kt)("p",{parentName:"admonition"},"On ",(0,r.kt)("inlineCode",{parentName:"p"},"mainnet"),", you must ",(0,r.kt)("strong",{parentName:"p"},"never")," copy the ",(0,r.kt)("inlineCode",{parentName:"p"},"KES secret key")," from the ",(0,r.kt)("strong",{parentName:"p"},"Cardano block producer")," machine!")),(0,r.kt)("h2",{id:"mithril-keys-certification"},"Mithril keys certification"),(0,r.kt)("p",null,"The ",(0,r.kt)("strong",{parentName:"p"},"Mithril Signer")," uses your Cardano ",(0,r.kt)("inlineCode",{parentName:"p"},"operational certificate")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"KES secret key")," files which enable:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Automatic computation of the ",(0,r.kt)("inlineCode",{parentName:"li"},"PoolId")),(0,r.kt)("li",{parentName:"ul"},"Verification of your ",(0,r.kt)("inlineCode",{parentName:"li"},"PoolId")," ownership and the associated stake used by the Mithril protocol"),(0,r.kt)("li",{parentName:"ul"},"Verification of your Mithril ",(0,r.kt)("inlineCode",{parentName:"li"},"Signer secret key")," ownership, which allows you to participate in the multi-signature process for certificate production on the Mithril network")),(0,r.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Note that this guide works on a Linux machine only.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"To operate a ",(0,r.kt)("strong",{parentName:"p"},"Cardano node")," as a ",(0,r.kt)("strong",{parentName:"p"},"stake pool"),", you need:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"The pool's ",(0,r.kt)("inlineCode",{parentName:"li"},"operational certificate")," "),(0,r.kt)("li",{parentName:"ul"},"The pool's ",(0,r.kt)("inlineCode",{parentName:"li"},"KES secret key")," "))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"To access the file system of the ",(0,r.kt)("strong",{parentName:"p"},"Cardano block producer")," node for ",(0,r.kt)("strong",{parentName:"p"},"production")," deployment (or of the ",(0,r.kt)("strong",{parentName:"p"},"Cardano relay")," node for ",(0,r.kt)("strong",{parentName:"p"},"naive")," deployment), you will need the following permissions:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Read rights on the ",(0,r.kt)("inlineCode",{parentName:"li"},"Database")," folder (specified by the ",(0,r.kt)("inlineCode",{parentName:"li"},"--database-path")," setting of the ",(0,r.kt)("strong",{parentName:"li"},"Cardano node"),")"),(0,r.kt)("li",{parentName:"ul"},"Read and write rights on the ",(0,r.kt)("inlineCode",{parentName:"li"},"Inter Process Communication")," file (typically defined by the ",(0,r.kt)("inlineCode",{parentName:"li"},"CARDANO_NODE_SOCKET_PATH")," environment variable used to launch the ",(0,r.kt)("strong",{parentName:"li"},"Cardano node"),")"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install a recent version of ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/cardano-node/releases/tag/8.1.1"},(0,r.kt)("inlineCode",{parentName:"a"},"cardano-cli"))," (version 8.1.1+).")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install a correctly configured Rust toolchain (latest stable version). You can follow the instructions provided ",(0,r.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"here"),".")),(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)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install a recent version of ",(0,r.kt)("inlineCode",{parentName:"p"},"jq")," (version 1.6+). You can install it by running ",(0,r.kt)("inlineCode",{parentName:"p"},"apt install jq"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Only for the ",(0,r.kt)("strong",{parentName:"p"},"production")," deployment, install a recent version of ",(0,r.kt)("a",{parentName:"p",href:"http://www.squid-cache.org/"},(0,r.kt)("inlineCode",{parentName:"a"},"squid-cache"))," (version 5.2+). You can install it by running ",(0,r.kt)("inlineCode",{parentName:"p"},"apt install squid"),"."))),(0,r.kt)("h2",{id:"set-up-the-mithril-signer-node"},"Set up the Mithril Signer node"),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For ",(0,r.kt)("strong",{parentName:"p"},"production")," deployment, the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Signer")," setup is performed on the ",(0,r.kt)("strong",{parentName:"p"},"Cardano block producer")," machine.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For ",(0,r.kt)("strong",{parentName:"p"},"naive")," deployment, the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Signer")," setup is performed on the ",(0,r.kt)("strong",{parentName:"p"},"Cardano relay")," machine.")))),(0,r.kt)("h3",{id:"building-your-own-executable"},"Building your own executable"),(0,r.kt)("h4",{id:"download-the-source-file"},"Download the source file"),(0,r.kt)("p",null,"To download the source from GitHub (HTTPS), run:"),(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)("h4",{id:"build-the-mithril-signer-binary"},"Build the Mithril Signer binary"),(0,r.kt)("p",null,"First, switch to build a 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,"Then, change the directory:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril/mithril-signer\n")),(0,r.kt)("p",null,"Run tests (optional):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make test\n")),(0,r.kt)("p",null,"Finally, build the executable:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make build\n")),(0,r.kt)("h3",{id:"download-the-pre-built-binary"},"Download the pre-built binary"),(0,r.kt)(l.default,{mdxType:"CompiledBinaries"}),(0,r.kt)("h3",{id:"verifying-the-binary"},"Verifying the binary"),(0,r.kt)("h4",{id:"verify-the-version-of-the-binary"},"Verify the version of the binary"),(0,r.kt)("p",null,"You can check that the Mithril Signer binary is running the correct version by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-signer -V\n")),(0,r.kt)("p",null,"You should see something like:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mithril-signer 0.2.0\n")),(0,r.kt)("p",null,"\u26a0\ufe0f Please verify that the displayed version matches the version described in the release/pre-release notes (refer to the ",(0,r.kt)("strong",{parentName:"p"},"Build from")," column in the ",(0,r.kt)("strong",{parentName:"p"},"Mithril networks")," table above)."),(0,r.kt)("h4",{id:"verify-the-build"},"Verify the build"),(0,r.kt)("p",null,"Check that the Mithril Signer binary is working correctly by running the help function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-signer -h\n")),(0,r.kt)("p",null,"You should see:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"An implementation of a Mithril Signer\n\nUsage: mithril-signer [OPTIONS]\n\nOptions:\n -r, --run-mode \n Run Mode [env: RUN_MODE=] [default: dev]\n -v, --verbose...\n Verbosity level, add more v to increase\n -c, --configuration-dir \n Directory where the configuration file is located [default: ./config]\n --disable-digests-cache\n Disable immutables digests cache\n --reset-digests-cache\n If set the existing immutables digests cache will be reset\n -h, --help\n Print help information (use `--help` for more detail)\n -V, --version\n Print version information\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"If you wish to delve deeper, you can access logs at various levels from the Mithril Signer:"),(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)("h3",{id:"installing-the-service"},"Installing the service"),(0,r.kt)("h4",{id:"move-the-executable"},"Move the executable"),(0,r.kt)("p",null,"To move the executable to /opt/mithril, run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo mkdir -p /opt/mithril\nsudo mv mithril-signer /opt/mithril\n")),(0,r.kt)("h4",{id:"set-up-the-service"},"Set up the service"),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"User=cardano"),":\nReplace this value with the correct user. We assume that the user used to run the ",(0,r.kt)("strong",{parentName:"p"},"Cardano node")," is ",(0,r.kt)("inlineCode",{parentName:"p"},"cardano"),". The ",(0,r.kt)("strong",{parentName:"p"},"Mithril Signer")," must imperatively run with the same user.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"In the ",(0,r.kt)("inlineCode",{parentName:"p"},"/opt/mithril/mithril-signer/service.env")," env file:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"KES_SECRET_KEY_PATH=/cardano/keys/kes.skey"),": replace ",(0,r.kt)("inlineCode",{parentName:"li"},"/cardano/keys/kes.skey")," with the path to your Cardano ",(0,r.kt)("inlineCode",{parentName:"li"},"KES secret key")," file"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"OPERATIONAL_CERTIFICATE_PATH=/cardano/cert/opcert.cert"),": replace ",(0,r.kt)("inlineCode",{parentName:"li"},"/cardano/cert/opcert.cert")," with the path to your Cardano ",(0,r.kt)("inlineCode",{parentName:"li"},"operational certificate")," file"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"DB_DIRECTORY=/cardano/db"),": replace ",(0,r.kt)("inlineCode",{parentName:"li"},"/cardano/db")," with the path to the database folder of the ",(0,r.kt)("strong",{parentName:"li"},"Cardano node")," (the one in ",(0,r.kt)("inlineCode",{parentName:"li"},"--database-path"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket"),": replace with the path to the IPC file (",(0,r.kt)("inlineCode",{parentName:"li"},"CARDANO_NODE_SOCKET_PATH")," env var)"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CARDANO_CLI_PATH=/app/bin/cardano-cli"),": replace with the path to the ",(0,r.kt)("inlineCode",{parentName:"li"},"cardano-cli")," executable"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"DATA_STORES_DIRECTORY=/opt/mithril/stores"),": replace with the path to a folder where the ",(0,r.kt)("strong",{parentName:"li"},"Mithril Signer")," will store its data (",(0,r.kt)("inlineCode",{parentName:"li"},"/opt/mithril/stores")," e.g.)"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"STORE_RETENTION_LIMIT"),": if set, this will limit the number of records in some internal stores (5 is a good fit)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ERA_READER_ADAPTER_TYPE=cardano-chain"),": replace ",(0,r.kt)("inlineCode",{parentName:"li"},"cardano-chain")," with the era reader adapter type used in your Mithril network"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},'ERA_READER_ADAPTER_PARAMS={"address": "...", "verification_key": "..."}'),": replace ",(0,r.kt)("inlineCode",{parentName:"li"},'{"address": "...", "verification_key": "..."}')," with the era reader parameters that you need to compute by running the command ",(0,r.kt)("inlineCode",{parentName:"li"},'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}\'')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"RELAY_ENDPOINT=http://192.168.1.50:3128")," ",(0,r.kt)("strong",{parentName:"li"},"(optional)"),": this is the endpoint of the ",(0,r.kt)("strong",{parentName:"li"},"Mithril relay"),", which is required for ",(0,r.kt)("strong",{parentName:"li"},"production")," deployment only. For ",(0,r.kt)("strong",{parentName:"li"},"naive")," deployment, do not set this variable in your environment file."))))),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an ",(0,r.kt)("strong",{parentName:"p"},"example")," set of values for ",(0,r.kt)("strong",{parentName:"p"},"release-preprod")," that will be used in this guide in the ",(0,r.kt)("strong",{parentName:"p"},"tip")," boxes to illustrate some commands: "),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_KES_SECRET_KEY_PATH**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"/cardano/keys/kes.skey")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_OPERATIONAL_CERTIFICATE_PATH**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"/cardano/keys/node.cert")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_CARDANO_NETWORK**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"preprod")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_AGGREGATOR_ENDPOINT**"),": ",(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_ERA_READER_ADAPTER_TYPE**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"cardano-chain")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADAPTER_PARAMS**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},'{"address": "addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx", "verification_key": "5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}')),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_RELAY_ENDPOINT**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"192.168.1.50")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_RELAY_LISTENING_PORT**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"3128")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_BLOCK_PRODUCER_INTERNAL_IP**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"192.168.1.75")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_SIGNER_LOGS_PATH**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"/var/log/syslog")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_PARTY_ID**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"pool1hp72sauk0g0yqm4dzllz0pz6j93gewhllkzphn4hykkfmne43y")))),(0,r.kt)("p",null,"First, create an environment file that will be used by the service:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"for ",(0,r.kt)("strong",{parentName:"li"},"production")," deployment:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo bash -c 'cat > /opt/mithril/mithril-signer.env << EOF\nKES_SECRET_KEY_PATH=**YOUR_KES_SECRET_KEY_PATH**\nOPERATIONAL_CERTIFICATE_PATH=**YOUR_OPERATIONAL_CERTIFICATE_PATH**\nNETWORK=**YOUR_CARDANO_NETWORK**\nAGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**\nRUN_INTERVAL=60000\nDB_DIRECTORY=/cardano/db\nCARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket\nCARDANO_CLI_PATH=/app/bin/cardano-cli\nDATA_STORES_DIRECTORY=/opt/mithril/stores\nSTORE_RETENTION_LIMIT=5\nERA_READER_ADAPTER_TYPE=**YOUR_ERA_READER_ADAPTER_TYPE**\nERA_READER_ADAPTER_PARAMS=**YOUR_ERA_READER_ADAPTER_PARAMS**\nRELAY_ENDPOINT=**YOUR_RELAY_ENDPOINT**\nEOF'\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example of the aforementioned command created with the example set for ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'sudo bash -c \'cat > /opt/mithril/mithril-signer.env << EOF\nKES_SECRET_KEY_PATH=/cardano/keys/kes.skey\nOPERATIONAL_CERTIFICATE_PATH=/cardano/keys/node.cert\nNETWORK=preprod\nAGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator\nRUN_INTERVAL=60000\nDB_DIRECTORY=/cardano/db\nCARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket\nCARDANO_CLI_PATH=/app/bin/cardano-cli\nDATA_STORES_DIRECTORY=/opt/mithril/stores\nSTORE_RETENTION_LIMIT=5\nERA_READER_ADAPTER_TYPE=cardano-chain\nERA_READER_ADAPTER_PARAMS={"address": "addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx", "verification_key": "5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}\nRELAY_ENDPOINT=http://192.168.1.50:3128\nEOF\'\n'))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"for ",(0,r.kt)("strong",{parentName:"li"},"naive")," deployment:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo bash -c 'cat > /opt/mithril/mithril-signer.env << EOF\nKES_SECRET_KEY_PATH=**YOUR_KES_SECRET_KEY_PATH**\nOPERATIONAL_CERTIFICATE_PATH=**YOUR_OPERATIONAL_CERTIFICATE_PATH**\nNETWORK=**YOUR_CARDANO_NETWORK**\nAGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**\nRUN_INTERVAL=60000\nDB_DIRECTORY=/cardano/db\nCARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket\nCARDANO_CLI_PATH=/app/bin/cardano-cli\nDATA_STORES_DIRECTORY=/opt/mithril/stores\nSTORE_RETENTION_LIMIT=5\nERA_READER_ADAPTER_TYPE=**YOUR_ERA_READER_ADAPTER_TYPE**\nERA_READER_ADAPTER_PARAMS=**YOUR_ERA_READER_ADAPTER_PARAMS**\nEOF'\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example of the aforementioned command created with the example set for ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'sudo bash -c \'cat > /opt/mithril/mithril-signer.env << EOF\nKES_SECRET_KEY_PATH=/cardano/keys/kes.skey\nOPERATIONAL_CERTIFICATE_PATH=/cardano/keys/node.cert\nNETWORK=preprod\nAGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator\nRUN_INTERVAL=60000\nDB_DIRECTORY=/cardano/db\nCARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket\nCARDANO_CLI_PATH=/app/bin/cardano-cli\nDATA_STORES_DIRECTORY=/opt/mithril/stores\nSTORE_RETENTION_LIMIT=5\nERA_READER_ADAPTER_TYPE=cardano-chain\nERA_READER_ADAPTER_PARAMS={"address": "addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx", "verification_key": "5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}\nEOF\'\n'))),(0,r.kt)("p",null,"Then, create a ",(0,r.kt)("inlineCode",{parentName:"p"},"/etc/systemd/system/mithril-signer.service")," description file for the service:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo bash -c 'cat > /etc/systemd/system/mithril-signer.service << EOF\n[Unit]\nDescription=Mithril Signer service\nStartLimitIntervalSec=0\n\n[Service]\nType=simple\nRestart=always\nRestartSec=1\nUser=cardano\nEnvironmentFile=/opt/mithril/mithril-signer.env\nExecStart=/opt/mithril/mithril-signer -vvv\n\n[Install]\nWantedBy=multi-user.target\nEOF'\n")),(0,r.kt)("p",null,"Reload the service configuration (optional):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl daemon-reload\n")),(0,r.kt)("p",null,"Then, start the service:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl start mithril-signer\n")),(0,r.kt)("p",null,"Register the service to start on boot:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl enable mithril-signer\n")),(0,r.kt)("p",null,"Monitor the status of the service:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"systemctl status mithril-signer.service\n")),(0,r.kt)("p",null,"Finally, monitor the logs of the service:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tail /var/log/syslog\n")),(0,r.kt)("h2",{id:"set-up-the-mithril-relay-node"},"Set up the Mithril relay node"),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For ",(0,r.kt)("strong",{parentName:"p"},"production")," deployment, the setup of the ",(0,r.kt)("strong",{parentName:"p"},"Mithril relay")," is performed on the ",(0,r.kt)("strong",{parentName:"p"},"Cardano relay")," machine.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For ",(0,r.kt)("strong",{parentName:"p"},"naive")," deployment: this step is not necessary.")))),(0,r.kt)("h3",{id:"configuring-the-squid-service"},"Configuring the Squid service"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The ",(0,r.kt)("strong",{parentName:"p"},"Mithril relay")," node serves as a forward proxy, relaying traffic between the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Signer")," and the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Aggregator"),". When appropriately configured, it facilitates the security of the ",(0,r.kt)("strong",{parentName:"p"},"block-producing")," node. You can use ",(0,r.kt)("inlineCode",{parentName:"p"},"squid")," to operate this forward proxy, and this section presents a recommended configuration.")),(0,r.kt)("p",null,"Verify that the service was correctly configured at installation:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl status squid\n")),(0,r.kt)("p",null,"Make a copy of the original configuration:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak\n")),(0,r.kt)("p",null,"Prepare the forward proxy configuration file:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo bash -c 'cat > /etc/squid/squid.conf << EOF\n# Listening port (port 3128 is recommended)\nhttp_port **YOUR_RELAY_LISTENING_PORT**\n\n# ACL for internal IP of your block producer node\nacl relay_internal_ip src **YOUR_BLOCK_PRODUCER_INTERNAL_IP**\n\n# ACL for aggregator endpoint\nacl aggregator_domain dstdomain .mithril.network\n\n# ACL for SSL port only\nacl SSL_port port 443\n\n# Allowed traffic\nhttp_access allow relay_internal_ip aggregator_domain SSL_port\n\n# Do not disclose block producer internal IP\nforwarded_for delete\n\n# Turn off via header\nvia off\n \n# Deny request for original source of a request\nfollow_x_forwarded_for deny all\n \n# Anonymize request headers\nrequest_header_access Authorization allow all\nrequest_header_access Proxy-Authorization allow all\nrequest_header_access Cache-Control allow all\nrequest_header_access Content-Length allow all\nrequest_header_access Content-Type allow all\nrequest_header_access Date allow all\nrequest_header_access Host allow all\nrequest_header_access If-Modified-Since allow all\nrequest_header_access Pragma allow all\nrequest_header_access Accept allow all\nrequest_header_access Accept-Charset allow all\nrequest_header_access Accept-Encoding allow all\nrequest_header_access Accept-Language allow all\nrequest_header_access Connection allow all\nrequest_header_access All deny all\n\n# Disable cache\ncache deny all\n\n# Deny everything else\nhttp_access deny all\nEOF'\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example of the aforementioned command created with the example set for ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo bash -c 'cat > /etc/squid/squid.conf << EOF\n# Listening port (port 3128 is recommended)\nhttp_port 3128\n\n# ACL for internal IP of your block producer node\nacl relay_internal_ip src 192.168.1.75\n\n# ACL for aggregator endpoint\nacl aggregator_domain dstdomain .mithril.network\n\n# ACL for SSL port only\nacl SSL_port port 443\n\n# Allowed traffic\nhttp_access allow relay_internal_ip aggregator_domain SSL_port\n\n# Do not disclose block producer internal IP\nforwarded_for delete\n\n# Turn off via header\nvia off\n \n# Deny request for original source of a request\nfollow_x_forwarded_for deny all\n \n# Anonymize request headers\nrequest_header_access Authorization allow all\nrequest_header_access Proxy-Authorization allow all\nrequest_header_access Cache-Control allow all\nrequest_header_access Content-Length allow all\nrequest_header_access Content-Type allow all\nrequest_header_access Date allow all\nrequest_header_access Host allow all\nrequest_header_access If-Modified-Since allow all\nrequest_header_access Pragma allow all\nrequest_header_access Accept allow all\nrequest_header_access Accept-Charset allow all\nrequest_header_access Accept-Encoding allow all\nrequest_header_access Accept-Language allow all\nrequest_header_access Connection allow all\nrequest_header_access All deny all\n\n# Disable cache\ncache deny all\n\n# Deny everything else\nhttp_access deny all\nEOF'\n"))),(0,r.kt)("p",null,"With this configuration, the proxy will:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"accept incoming traffic originating from the internal IP of the block-producing machine"),(0,r.kt)("li",{parentName:"ul"},"accept incoming traffic directed to the listening port of the proxy"),(0,r.kt)("li",{parentName:"ul"},"accept incoming HTTPS traffic proxied to ",(0,r.kt)("inlineCode",{parentName:"li"},"mithril.network")," domain hosts"),(0,r.kt)("li",{parentName:"ul"},"anonymize completely the traffic and avoid disclosing any information about the block-producing machine"),(0,r.kt)("li",{parentName:"ul"},"deny all other traffic")),(0,r.kt)("p",null,"Restart the service:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl restart squid\n")),(0,r.kt)("p",null,"Ensure it runs properly:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl status squid\n")),(0,r.kt)("p",null,"Finally, monitor service logs:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tail /var/log/syslog\n")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Here is the command to see squid access logs:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tail /var/log/squid/access.log\n"))),(0,r.kt)("h3",{id:"firewall-configuration"},"Firewall configuration"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"We assume that the ",(0,r.kt)("strong",{parentName:"p"},"Cardano relay")," machine is protected by a firewall. It is necessary to allow the proxied traffic, originating from the ",(0,r.kt)("strong",{parentName:"p"},"Cardano block producer"),", through this firewall.")),(0,r.kt)("h4",{id:"about-the-cardano-relay-machine"},"About the Cardano relay machine"),(0,r.kt)("p",null,"You need to allow incoming traffic on the listening port of the ",(0,r.kt)("strong",{parentName:"p"},"Mithril relay")," on the ",(0,r.kt)("strong",{parentName:"p"},"Cardano relay")," machine, originating from the ",(0,r.kt)("strong",{parentName:"p"},"Cardano block producer")," machine."),(0,r.kt)("p",null,"Assuming you are using ",(0,r.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Uncomplicated_Firewall"},(0,r.kt)("inlineCode",{parentName:"a"},"Uncomplicated Firewall"))," (",(0,r.kt)("inlineCode",{parentName:"p"},"0.36+"),"), the command to open that traffic is:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo ufw allow from **YOUR_BLOCK_PRODUCER_INTERNAL_IP** to any port **YOUR_RELAY_LISTENING_PORT** proto tcp\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example of the aforementioned command created with the example set for ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo ufw allow from 192.168.1.75 to any port 3128 proto tcp\n"))),(0,r.kt)("p",null,"Assuming you are using ",(0,r.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Iptables"},(0,r.kt)("inlineCode",{parentName:"a"},"Iptables"))," (",(0,r.kt)("inlineCode",{parentName:"p"},"1.8.7+"),"), the command to open that traffic is:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo iptables -A INPUT -s **YOUR_BLOCK_PRODUCER_INTERNAL_IP** -p tcp --dport **YOUR_RELAY_LISTENING_PORT** -j ACCEPT\nsudo iptables -L -v\nsudo service netfilter-persistent save\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example of the aforementioned command created with the example set for ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo iptables -A INPUT -s 192.168.1.75 -p tcp --dport 3128 -j ACCEPT\nsudo iptables -L -v\nsudo service netfilter-persistent save\n"))),(0,r.kt)("h2",{id:"verify-the-mithril-signer-deployment"},"Verify the Mithril Signer deployment"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"There is a delay of ",(0,r.kt)("inlineCode",{parentName:"p"},"2")," epochs between the registration of the signer node and its ability to generate individual signatures. This delay is further explained in the ",(0,r.kt)("a",{parentName:"p",href:"https://mithril.network/doc/mithril/mithril-protocol/certificates"},"Mithril certificate chain in depth")," documentation."),(0,r.kt)("p",{parentName:"admonition"},"Once this delay has passed, you should be able to observe your ",(0,r.kt)("inlineCode",{parentName:"p"},"PoolId")," listed in some of the certificates accessible on the ",(0,r.kt)("a",{parentName:"p",href:"https://mithril.network/explorer"},(0,r.kt)("inlineCode",{parentName:"a"},"Mithril Explorer")),".")),(0,r.kt)("h3",{id:"verify-your-signer-is-registered"},"Verify your signer is registered"),(0,r.kt)("p",null,"After installing the Mithril Signer, you can verify that your node is registered by checking your Mithril Signer node logs. "),(0,r.kt)("p",null,"First, download the script into the desired directory:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://mithril.network/doc/scripts/verify_signer_registration.sh\n")),(0,r.kt)("p",null,"Make the script executable:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"chmod +x verify_signer_registration.sh\n")),(0,r.kt)("p",null,"Finally, execute the script:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"SIGNER_LOGS_PATH=**YOUR_SIGNER_LOGS_PATH** ./verify_signer_registration.sh\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example command:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"SIGNER_LOGS_PATH=/var/log/syslog ./verify_signer_registration.sh\n"))),(0,r.kt)("p",null,"If your signer is registered, you should see this message:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},">> Congrats, your signer node is registered!\n")),(0,r.kt)("p",null,"Otherwise, you should see this error message:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},">> Oops, your signer node is not registered. Check your configuration.\n")),(0,r.kt)("h3",{id:"verify-your-signer-contributes-with-individual-signatures"},"Verify your signer contributes with individual signatures"),(0,r.kt)("p",null,"After waiting for two epochs, you will be able to verify that your signer is contributing with individual signatures."),(0,r.kt)("p",null,"First, download the script into the desired directory:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://mithril.network/doc/scripts/verify_signer_signature.sh\n")),(0,r.kt)("p",null,"Make the script executable:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"chmod +x verify_signer_signature.sh\n")),(0,r.kt)("p",null,"Finally, execute the script:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"PARTY_ID=**YOUR_PARTY_ID** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./verify_signer_signature.sh\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example of the aforementioned command created with the example set for ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"PARTY_ID=pool1hp72sauk0g0yqm4dzllz0pz6j93gewhllkzphn4hykkfmne43y AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator ./verify_signer_signature.sh\n"))),(0,r.kt)("p",null,"If your signer is contributing, you should see this message:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},">> Congrats, you have signed this certificate: https://aggregator.release-preprod.api.mithril.network/aggregator/certificate/el3p289b03a223244285b2ls10839846ae7a69f1e8362824a383f376f93f723f !\n")),(0,r.kt)("p",null,"Otherwise, you should see this error message:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},">> Oops, your party id was not found in the last 20 certificates. Please try again later.\n")))}h.isMDXComponent=!0},81900:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>m});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,s={unversionedId:"networks-matrix",id:"networks-matrix",title:"networks-matrix",description:"Here is an updated list of all Mithril networks, including their configurations and current statuses:",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}},d={},m=[{value:"release-mainnet",id:"release-mainnet",level:2},{value:"release-preprod",id:"release-preprod",level:2},{value:"pre-release-preview",id:"pre-release-preview",level:2},{value:"testing-preview",id:"testing-preview",level:2}],u={toc:m},c="wrapper";function h(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Here is an updated list of all ",(0,r.kt)("strong",{parentName:"p"},"Mithril networks"),", including their configurations and current statuses:"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Last update: 07/21/2023")),(0,r.kt)(i.Z,{mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"mainnet",label:"Mainnet",default:!0,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},"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},"Beta \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-mainnet.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.release-mainnet.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-mainnet/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/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-mainnet/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/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-mainnet/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/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:"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:"preview",label:"Preview",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"},"\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)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"In this documentation, we use the following generic identifiers:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_CARDANO_NETWORK**")," You need to replace this 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**")," You need to replace this with the endpoint of an aggregator that runs on the Cardano network you are targeting (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**")," You need to replace this with the genesis verification key URL that runs on the Cardano network you are targeting (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**")," You need to replace this with the era reader adapter type used by the Mithril network you are targeting (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**")," You need to replace this with the era reader address URL used by the Mithril network you are targeting (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**")," You need to replace this with the era reader verification key URL used by the Mithril network you are targeting (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey"),")"))))}h.isMDXComponent=!0},66182:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/files/signer-deployment-naive-6f2cc44fb5738b30cc3b5c370042845a.jpg"},34310:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/files/signer-deployment-production-691bb17c165b4da09c46222bc71c06ac.jpg"},15588:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/signer-deployment-naive-6f2cc44fb5738b30cc3b5c370042845a.jpg"},39009:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/signer-deployment-production-691bb17c165b4da09c46222bc71c06ac.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunkmithril_doc=self.webpackChunkmithril_doc||[]).push([[4163,9531,2379],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>h});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},d=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),m=s(a),c=r,h=m["".concat(p,".").concat(c)]||m[c]||u[c]||i;return a?n.createElement(h,l(l({ref:t},d),{},{components:a})):n.createElement(h,l({ref:t},d))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,l=new Array(i);l[0]=c;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o[m]="string"==typeof e?e:r,l[1]=o;for(var s=2;s{a.d(t,{Z:()=>l});var n=a(67294),r=a(86010);const i={tabItem:"tabItem_Ymn6"};function l(e){let{children:t,hidden:a,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,l),hidden:a},t)}},74866:(e,t,a)=>{a.d(t,{Z:()=>_});var n=a(87462),r=a(67294),i=a(86010),l=a(12466),o=a(16550),p=a(91980),s=a(67392),d=a(50012);function m(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.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:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function u(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??m(a);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,a])}function c(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const n=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!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:t,groupId:a});return[(0,p._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(n.location.search);t.set(i,e),n.replace({...n.location,search:t.toString()})}),[i,n])]}function k(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,i=u(e),[l,o]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!c({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:i}))),[p,s]=h({queryString:a,groupId:n}),[m,k]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,i]=(0,d.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&i.set(e)}),[a,i])]}({groupId:n}),g=(()=>{const e=p??m;return c({value:e,tabValues:i})?e:null})();(0,r.useLayoutEffect)((()=>{g&&o(g)}),[g]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!c({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),s(e),k(e)}),[s,k,i]),tabValues:i}}var g=a(72389);const N={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function f(e){let{className:t,block:a,selectedValue:o,selectValue:p,tabValues:s}=e;const d=[],{blockElementScrollPositionUntilNextRender:m}=(0,l.o5)(),u=e=>{const t=e.currentTarget,a=d.indexOf(t),n=s[a].value;n!==o&&(m(t),p(n))},c=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const a=d.indexOf(e.currentTarget)+1;t=d[a]??d[0];break}case"ArrowLeft":{const a=d.indexOf(e.currentTarget)-1;t=d[a]??d[d.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t)},s.map((e=>{let{value:t,label:a,attributes:l}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:o===t?0:-1,"aria-selected":o===t,key:t,ref:e=>d.push(e),onKeyDown:c,onClick:u},l,{className:(0,i.Z)("tabs__item",N.tabItem,l?.className,{"tabs__item--active":o===t})}),a??t)})))}function y(e){let{lazy:t,children:a,selectedValue:n}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},i.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function b(e){const t=k(e);return r.createElement("div",{className:(0,i.Z)("tabs-container",N.tabList)},r.createElement(f,(0,n.Z)({},e,t)),r.createElement(y,(0,n.Z)({},e,t)))}function _(e){const t=(0,g.Z)();return r.createElement(b,(0,n.Z)({key:String(t)},e))}},61494:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>s});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:"Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package",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={},s=[],d={toc:s},m="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(m,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package\nfor linux\xb9."),(0,r.kt)("p",null,"You can download them from the Release / Pre-Release distribution page that depends on the Mithril Network you\nare 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."),(0,r.kt)("p",null,"\xb9 The Linux binaries target ",(0,r.kt)("inlineCode",{parentName:"p"},"glibc"),", and have a minimum requirement of ",(0,r.kt)("inlineCode",{parentName:"p"},"glibc 2.31")," (compatible with ",(0,r.kt)("inlineCode",{parentName:"p"},"Ubuntu 20.04"),"\nor ",(0,r.kt)("inlineCode",{parentName:"p"},"Debian Bullseye"),")."))}u.isMDXComponent=!0},99544:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>m});var n=a(87462),r=(a(67294),a(3905)),i=a(81900),l=a(61494);const o={sidebar_position:3},p="Run a Mithril Signer as an SPO",s={unversionedId:"manual/getting-started/run-signer-node",id:"manual/getting-started/run-signer-node",title:"Run a Mithril Signer as an SPO",description:"For more information about the Mithril protocol, see the section About Mithril.",source:"@site/root/manual/getting-started/run-signer-node.md",sourceDirName:"manual/getting-started",slug:"/manual/getting-started/run-signer-node",permalink:"/doc/next/manual/getting-started/run-signer-node",draft:!1,editUrl:"https://github.com/input-output-hk/mithril/edit/main/docs/root/manual/getting-started/run-signer-node.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docSideBar",previous:{title:"Bootstrap a Cardano node",permalink:"/doc/next/manual/getting-started/bootstrap-cardano-node"},next:{title:"Run a private Mithril network",permalink:"/doc/next/manual/getting-started/run-mithril-devnet"}},d={},m=[{value:"Mithril Signer deployment model",id:"mithril-signer-deployment-model",level:2},{value:"Mithril keys certification",id:"mithril-keys-certification",level:2},{value:"Pre-requisites",id:"pre-requisites",level:2},{value:"Set up the Mithril Signer node",id:"set-up-the-mithril-signer-node",level:2},{value:"Building your own executable",id:"building-your-own-executable",level:3},{value:"Download the source file",id:"download-the-source-file",level:4},{value:"Build the Mithril Signer binary",id:"build-the-mithril-signer-binary",level:4},{value:"Download the pre-built binary",id:"download-the-pre-built-binary",level:3},{value:"Verifying the binary",id:"verifying-the-binary",level:3},{value:"Verify the version of the binary",id:"verify-the-version-of-the-binary",level:4},{value:"Verify the build",id:"verify-the-build",level:4},{value:"Installing the service",id:"installing-the-service",level:3},{value:"Move the executable",id:"move-the-executable",level:4},{value:"Set up the service",id:"set-up-the-service",level:4},{value:"Set up the Mithril relay node",id:"set-up-the-mithril-relay-node",level:2},{value:"Configuring the Squid service",id:"configuring-the-squid-service",level:3},{value:"Firewall configuration",id:"firewall-configuration",level:3},{value:"About the Cardano relay machine",id:"about-the-cardano-relay-machine",level:4},{value:"Verify the Mithril Signer deployment",id:"verify-the-mithril-signer-deployment",level:2},{value:"Verify your signer is registered",id:"verify-your-signer-is-registered",level:3},{value:"Verify your signer contributes with individual signatures",id:"verify-your-signer-contributes-with-individual-signatures",level:3}],u={toc:m},c="wrapper";function h(e){let{components:t,...o}=e;return(0,r.kt)(c,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"run-a-mithril-signer-as-an-spo"},"Run a Mithril Signer as an SPO"),(0,r.kt)("admonition",{title:"Mithril networks",type:"note"},(0,r.kt)(i.default,{mdxType:"NetworksMatrix"})),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"For more information about the ",(0,r.kt)("strong",{parentName:"p"},"Mithril protocol"),", see the section ",(0,r.kt)("a",{parentName:"p",href:"/doc/next/mithril/intro"},"About Mithril"),".")),(0,r.kt)("h2",{id:"mithril-signer-deployment-model"},"Mithril Signer deployment model"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"In this guide, you will learn how to set up a ",(0,r.kt)("strong",{parentName:"p"},"Mithril Signer")," within the stake pool operator (SPO) infrastructure both on Cardano ",(0,r.kt)("inlineCode",{parentName:"p"},"mainnet")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"testnet")," environments:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"On ",(0,r.kt)("inlineCode",{parentName:"li"},"mainnet"),", you ",(0,r.kt)("strong",{parentName:"li"},"must")," run the ",(0,r.kt)("strong",{parentName:"li"},"production")," deployment where the ",(0,r.kt)("strong",{parentName:"li"},"Mithril Signer")," runs on the ",(0,r.kt)("strong",{parentName:"li"},"Cardano block producer")," machine and the ",(0,r.kt)("strong",{parentName:"li"},"Mithril relay")," runs on the ",(0,r.kt)("strong",{parentName:"li"},"Cardano relay")," machine. ",(0,r.kt)("strong",{parentName:"li"},"Note")," that you can run the ",(0,r.kt)("strong",{parentName:"li"},"production")," deployment on ",(0,r.kt)("inlineCode",{parentName:"li"},"testnet"),"."),(0,r.kt)("li",{parentName:"ul"},"You can also run ",(0,r.kt)("strong",{parentName:"li"},"naive")," deployment, where the ",(0,r.kt)("strong",{parentName:"li"},"Mithril Signer")," runs on the ",(0,r.kt)("strong",{parentName:"li"},"Cardano relay")," machine. This is possible in the testnet environment only, and does not require setting up a ",(0,r.kt)("strong",{parentName:"li"},"Mithril relay"),"."))),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"In the current setup, you don't need to install a Mithril Aggregator.")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"The ",(0,r.kt)("strong",{parentName:"p"},"production")," deployment model is currently in the beta version.")),(0,r.kt)("p",null,"Here is the schema of the ",(0,r.kt)("strong",{parentName:"p"},"production")," deployment on mainnet:\n",(0,r.kt)("a",{target:"_blank",href:a(34310).Z},(0,r.kt)("img",{alt:"Production Mithril Signer Deployment Model",src:a(39009).Z,width:"2208",height:"452"}))),(0,r.kt)("p",null,"and the schema of the ",(0,r.kt)("strong",{parentName:"p"},"naive")," deployment specifically for ",(0,r.kt)("inlineCode",{parentName:"p"},"testnets"),":\n",(0,r.kt)("a",{target:"_blank",href:a(66182).Z},(0,r.kt)("img",{alt:"Naive Mithril Signer Deployment Model",src:a(15588).Z,width:"2209",height:"452"}))),(0,r.kt)("admonition",{type:"danger"},(0,r.kt)("p",{parentName:"admonition"},"On ",(0,r.kt)("inlineCode",{parentName:"p"},"mainnet"),", you must ",(0,r.kt)("strong",{parentName:"p"},"never")," copy the ",(0,r.kt)("inlineCode",{parentName:"p"},"KES secret key")," from the ",(0,r.kt)("strong",{parentName:"p"},"Cardano block producer")," machine!")),(0,r.kt)("h2",{id:"mithril-keys-certification"},"Mithril keys certification"),(0,r.kt)("p",null,"The ",(0,r.kt)("strong",{parentName:"p"},"Mithril Signer")," uses your Cardano ",(0,r.kt)("inlineCode",{parentName:"p"},"operational certificate")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"KES secret key")," files which enable:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Automatic computation of the ",(0,r.kt)("inlineCode",{parentName:"li"},"PoolId")),(0,r.kt)("li",{parentName:"ul"},"Verification of your ",(0,r.kt)("inlineCode",{parentName:"li"},"PoolId")," ownership and the associated stake used by the Mithril protocol"),(0,r.kt)("li",{parentName:"ul"},"Verification of your Mithril ",(0,r.kt)("inlineCode",{parentName:"li"},"Signer secret key")," ownership, which allows you to participate in the multi-signature process for certificate production on the Mithril network")),(0,r.kt)("h2",{id:"pre-requisites"},"Pre-requisites"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Note that this guide works on a Linux machine only.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"To operate a ",(0,r.kt)("strong",{parentName:"p"},"Cardano node")," as a ",(0,r.kt)("strong",{parentName:"p"},"stake pool"),", you need:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"The pool's ",(0,r.kt)("inlineCode",{parentName:"li"},"operational certificate")," "),(0,r.kt)("li",{parentName:"ul"},"The pool's ",(0,r.kt)("inlineCode",{parentName:"li"},"KES secret key")," "))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"To access the file system of the ",(0,r.kt)("strong",{parentName:"p"},"Cardano block producer")," node for ",(0,r.kt)("strong",{parentName:"p"},"production")," deployment (or of the ",(0,r.kt)("strong",{parentName:"p"},"Cardano relay")," node for ",(0,r.kt)("strong",{parentName:"p"},"naive")," deployment), you will need the following permissions:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Read rights on the ",(0,r.kt)("inlineCode",{parentName:"li"},"Database")," folder (specified by the ",(0,r.kt)("inlineCode",{parentName:"li"},"--database-path")," setting of the ",(0,r.kt)("strong",{parentName:"li"},"Cardano node"),")"),(0,r.kt)("li",{parentName:"ul"},"Read and write rights on the ",(0,r.kt)("inlineCode",{parentName:"li"},"Inter Process Communication")," file (typically defined by the ",(0,r.kt)("inlineCode",{parentName:"li"},"CARDANO_NODE_SOCKET_PATH")," environment variable used to launch the ",(0,r.kt)("strong",{parentName:"li"},"Cardano node"),")"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install a recent version of ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/input-output-hk/cardano-node/releases/tag/8.1.2"},(0,r.kt)("inlineCode",{parentName:"a"},"cardano-cli"))," (version 8.1.2+).")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install a correctly configured Rust toolchain (latest stable version). You can follow the instructions provided ",(0,r.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/learn/get-started"},"here"),".")),(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)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Install a recent version of ",(0,r.kt)("inlineCode",{parentName:"p"},"jq")," (version 1.6+). You can install it by running ",(0,r.kt)("inlineCode",{parentName:"p"},"apt install jq"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Only for the ",(0,r.kt)("strong",{parentName:"p"},"production")," deployment, install a recent version of ",(0,r.kt)("a",{parentName:"p",href:"http://www.squid-cache.org/"},(0,r.kt)("inlineCode",{parentName:"a"},"squid-cache"))," (version 5.2+). You can install it by running ",(0,r.kt)("inlineCode",{parentName:"p"},"apt install squid"),"."))),(0,r.kt)("h2",{id:"set-up-the-mithril-signer-node"},"Set up the Mithril Signer node"),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For ",(0,r.kt)("strong",{parentName:"p"},"production")," deployment, the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Signer")," setup is performed on the ",(0,r.kt)("strong",{parentName:"p"},"Cardano block producer")," machine.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For ",(0,r.kt)("strong",{parentName:"p"},"naive")," deployment, the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Signer")," setup is performed on the ",(0,r.kt)("strong",{parentName:"p"},"Cardano relay")," machine.")))),(0,r.kt)("h3",{id:"building-your-own-executable"},"Building your own executable"),(0,r.kt)("h4",{id:"download-the-source-file"},"Download the source file"),(0,r.kt)("p",null,"To download the source from GitHub (HTTPS), run:"),(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)("h4",{id:"build-the-mithril-signer-binary"},"Build the Mithril Signer binary"),(0,r.kt)("p",null,"First, switch to build a 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,"Then, change the directory:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cd mithril/mithril-signer\n")),(0,r.kt)("p",null,"Run tests (optional):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make test\n")),(0,r.kt)("p",null,"Finally, build the executable:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"make build\n")),(0,r.kt)("h3",{id:"download-the-pre-built-binary"},"Download the pre-built binary"),(0,r.kt)(l.default,{mdxType:"CompiledBinaries"}),(0,r.kt)("h3",{id:"verifying-the-binary"},"Verifying the binary"),(0,r.kt)("h4",{id:"verify-the-version-of-the-binary"},"Verify the version of the binary"),(0,r.kt)("p",null,"You can check that the Mithril Signer binary is running the correct version by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-signer -V\n")),(0,r.kt)("p",null,"You should see something like:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mithril-signer 0.2.0\n")),(0,r.kt)("p",null,"\u26a0\ufe0f Please verify that the displayed version matches the version described in the release/pre-release notes (refer to the ",(0,r.kt)("strong",{parentName:"p"},"Build from")," column in the ",(0,r.kt)("strong",{parentName:"p"},"Mithril networks")," table above)."),(0,r.kt)("h4",{id:"verify-the-build"},"Verify the build"),(0,r.kt)("p",null,"Check that the Mithril Signer binary is working correctly by running the help function:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"./mithril-signer -h\n")),(0,r.kt)("p",null,"You should see:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"An implementation of a Mithril Signer\n\nUsage: mithril-signer [OPTIONS]\n\nOptions:\n -r, --run-mode \n Run Mode [env: RUN_MODE=] [default: dev]\n -v, --verbose...\n Verbosity level, add more v to increase\n -c, --configuration-dir \n Directory where the configuration file is located [default: ./config]\n --disable-digests-cache\n Disable immutables digests cache\n --reset-digests-cache\n If set the existing immutables digests cache will be reset\n -h, --help\n Print help information (use `--help` for more detail)\n -V, --version\n Print version information\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"If you wish to delve deeper, you can access logs at various levels from the Mithril Signer:"),(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)("h3",{id:"installing-the-service"},"Installing the service"),(0,r.kt)("h4",{id:"move-the-executable"},"Move the executable"),(0,r.kt)("p",null,"To move the executable to /opt/mithril, run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo mkdir -p /opt/mithril\nsudo mv mithril-signer /opt/mithril\n")),(0,r.kt)("h4",{id:"set-up-the-service"},"Set up the service"),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"User=cardano"),":\nReplace this value with the correct user. We assume that the user used to run the ",(0,r.kt)("strong",{parentName:"p"},"Cardano node")," is ",(0,r.kt)("inlineCode",{parentName:"p"},"cardano"),". The ",(0,r.kt)("strong",{parentName:"p"},"Mithril Signer")," must imperatively run with the same user.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"In the ",(0,r.kt)("inlineCode",{parentName:"p"},"/opt/mithril/mithril-signer/service.env")," env file:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"KES_SECRET_KEY_PATH=/cardano/keys/kes.skey"),": replace ",(0,r.kt)("inlineCode",{parentName:"li"},"/cardano/keys/kes.skey")," with the path to your Cardano ",(0,r.kt)("inlineCode",{parentName:"li"},"KES secret key")," file"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"OPERATIONAL_CERTIFICATE_PATH=/cardano/cert/opcert.cert"),": replace ",(0,r.kt)("inlineCode",{parentName:"li"},"/cardano/cert/opcert.cert")," with the path to your Cardano ",(0,r.kt)("inlineCode",{parentName:"li"},"operational certificate")," file"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"DB_DIRECTORY=/cardano/db"),": replace ",(0,r.kt)("inlineCode",{parentName:"li"},"/cardano/db")," with the path to the database folder of the ",(0,r.kt)("strong",{parentName:"li"},"Cardano node")," (the one in ",(0,r.kt)("inlineCode",{parentName:"li"},"--database-path"),")"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket"),": replace with the path to the IPC file (",(0,r.kt)("inlineCode",{parentName:"li"},"CARDANO_NODE_SOCKET_PATH")," env var)"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CARDANO_CLI_PATH=/app/bin/cardano-cli"),": replace with the path to the ",(0,r.kt)("inlineCode",{parentName:"li"},"cardano-cli")," executable"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"DATA_STORES_DIRECTORY=/opt/mithril/stores"),": replace with the path to a folder where the ",(0,r.kt)("strong",{parentName:"li"},"Mithril Signer")," will store its data (",(0,r.kt)("inlineCode",{parentName:"li"},"/opt/mithril/stores")," e.g.)"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"STORE_RETENTION_LIMIT"),": if set, this will limit the number of records in some internal stores (5 is a good fit)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ERA_READER_ADAPTER_TYPE=cardano-chain"),": replace ",(0,r.kt)("inlineCode",{parentName:"li"},"cardano-chain")," with the era reader adapter type used in your Mithril network"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},'ERA_READER_ADAPTER_PARAMS={"address": "...", "verification_key": "..."}'),": replace ",(0,r.kt)("inlineCode",{parentName:"li"},'{"address": "...", "verification_key": "..."}')," with the era reader parameters that you need to compute by running the command ",(0,r.kt)("inlineCode",{parentName:"li"},'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}\'')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"RELAY_ENDPOINT=http://192.168.1.50:3128")," ",(0,r.kt)("strong",{parentName:"li"},"(optional)"),": this is the endpoint of the ",(0,r.kt)("strong",{parentName:"li"},"Mithril relay"),", which is required for ",(0,r.kt)("strong",{parentName:"li"},"production")," deployment only. For ",(0,r.kt)("strong",{parentName:"li"},"naive")," deployment, do not set this variable in your environment file."))))),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an ",(0,r.kt)("strong",{parentName:"p"},"example")," set of values for ",(0,r.kt)("strong",{parentName:"p"},"release-preprod")," that will be used in this guide in the ",(0,r.kt)("strong",{parentName:"p"},"tip")," boxes to illustrate some commands: "),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_KES_SECRET_KEY_PATH**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"/cardano/keys/kes.skey")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_OPERATIONAL_CERTIFICATE_PATH**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"/cardano/keys/node.cert")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_CARDANO_NETWORK**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"preprod")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_AGGREGATOR_ENDPOINT**"),": ",(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_ERA_READER_ADAPTER_TYPE**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"cardano-chain")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_ERA_READER_ADAPTER_PARAMS**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},'{"address": "addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx", "verification_key": "5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}')),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_RELAY_ENDPOINT**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"192.168.1.50")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_RELAY_LISTENING_PORT**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"3128")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_BLOCK_PRODUCER_INTERNAL_IP**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"192.168.1.75")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_SIGNER_LOGS_PATH**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"/var/log/syslog")),(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_PARTY_ID**"),": ",(0,r.kt)("inlineCode",{parentName:"li"},"pool1hp72sauk0g0yqm4dzllz0pz6j93gewhllkzphn4hykkfmne43y")))),(0,r.kt)("p",null,"First, create an environment file that will be used by the service:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"for ",(0,r.kt)("strong",{parentName:"li"},"production")," deployment:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo bash -c 'cat > /opt/mithril/mithril-signer.env << EOF\nKES_SECRET_KEY_PATH=**YOUR_KES_SECRET_KEY_PATH**\nOPERATIONAL_CERTIFICATE_PATH=**YOUR_OPERATIONAL_CERTIFICATE_PATH**\nNETWORK=**YOUR_CARDANO_NETWORK**\nAGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**\nRUN_INTERVAL=60000\nDB_DIRECTORY=/cardano/db\nCARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket\nCARDANO_CLI_PATH=/app/bin/cardano-cli\nDATA_STORES_DIRECTORY=/opt/mithril/stores\nSTORE_RETENTION_LIMIT=5\nERA_READER_ADAPTER_TYPE=**YOUR_ERA_READER_ADAPTER_TYPE**\nERA_READER_ADAPTER_PARAMS=**YOUR_ERA_READER_ADAPTER_PARAMS**\nRELAY_ENDPOINT=**YOUR_RELAY_ENDPOINT**\nEOF'\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example of the aforementioned command created with the example set for ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'sudo bash -c \'cat > /opt/mithril/mithril-signer.env << EOF\nKES_SECRET_KEY_PATH=/cardano/keys/kes.skey\nOPERATIONAL_CERTIFICATE_PATH=/cardano/keys/node.cert\nNETWORK=preprod\nAGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator\nRUN_INTERVAL=60000\nDB_DIRECTORY=/cardano/db\nCARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket\nCARDANO_CLI_PATH=/app/bin/cardano-cli\nDATA_STORES_DIRECTORY=/opt/mithril/stores\nSTORE_RETENTION_LIMIT=5\nERA_READER_ADAPTER_TYPE=cardano-chain\nERA_READER_ADAPTER_PARAMS={"address": "addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx", "verification_key": "5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}\nRELAY_ENDPOINT=http://192.168.1.50:3128\nEOF\'\n'))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"for ",(0,r.kt)("strong",{parentName:"li"},"naive")," deployment:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo bash -c 'cat > /opt/mithril/mithril-signer.env << EOF\nKES_SECRET_KEY_PATH=**YOUR_KES_SECRET_KEY_PATH**\nOPERATIONAL_CERTIFICATE_PATH=**YOUR_OPERATIONAL_CERTIFICATE_PATH**\nNETWORK=**YOUR_CARDANO_NETWORK**\nAGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT**\nRUN_INTERVAL=60000\nDB_DIRECTORY=/cardano/db\nCARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket\nCARDANO_CLI_PATH=/app/bin/cardano-cli\nDATA_STORES_DIRECTORY=/opt/mithril/stores\nSTORE_RETENTION_LIMIT=5\nERA_READER_ADAPTER_TYPE=**YOUR_ERA_READER_ADAPTER_TYPE**\nERA_READER_ADAPTER_PARAMS=**YOUR_ERA_READER_ADAPTER_PARAMS**\nEOF'\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example of the aforementioned command created with the example set for ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'sudo bash -c \'cat > /opt/mithril/mithril-signer.env << EOF\nKES_SECRET_KEY_PATH=/cardano/keys/kes.skey\nOPERATIONAL_CERTIFICATE_PATH=/cardano/keys/node.cert\nNETWORK=preprod\nAGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator\nRUN_INTERVAL=60000\nDB_DIRECTORY=/cardano/db\nCARDANO_NODE_SOCKET_PATH=/cardano/ipc/node.socket\nCARDANO_CLI_PATH=/app/bin/cardano-cli\nDATA_STORES_DIRECTORY=/opt/mithril/stores\nSTORE_RETENTION_LIMIT=5\nERA_READER_ADAPTER_TYPE=cardano-chain\nERA_READER_ADAPTER_PARAMS={"address": "addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx", "verification_key": "5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}\nEOF\'\n'))),(0,r.kt)("p",null,"Then, create a ",(0,r.kt)("inlineCode",{parentName:"p"},"/etc/systemd/system/mithril-signer.service")," description file for the service:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo bash -c 'cat > /etc/systemd/system/mithril-signer.service << EOF\n[Unit]\nDescription=Mithril Signer service\nStartLimitIntervalSec=0\n\n[Service]\nType=simple\nRestart=always\nRestartSec=1\nUser=cardano\nEnvironmentFile=/opt/mithril/mithril-signer.env\nExecStart=/opt/mithril/mithril-signer -vvv\n\n[Install]\nWantedBy=multi-user.target\nEOF'\n")),(0,r.kt)("p",null,"Reload the service configuration (optional):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl daemon-reload\n")),(0,r.kt)("p",null,"Then, start the service:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl start mithril-signer\n")),(0,r.kt)("p",null,"Register the service to start on boot:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl enable mithril-signer\n")),(0,r.kt)("p",null,"Monitor the status of the service:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"systemctl status mithril-signer.service\n")),(0,r.kt)("p",null,"Finally, monitor the logs of the service:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tail /var/log/syslog\n")),(0,r.kt)("h2",{id:"set-up-the-mithril-relay-node"},"Set up the Mithril relay node"),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For ",(0,r.kt)("strong",{parentName:"p"},"production")," deployment, the setup of the ",(0,r.kt)("strong",{parentName:"p"},"Mithril relay")," is performed on the ",(0,r.kt)("strong",{parentName:"p"},"Cardano relay")," machine.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For ",(0,r.kt)("strong",{parentName:"p"},"naive")," deployment: this step is not necessary.")))),(0,r.kt)("h3",{id:"configuring-the-squid-service"},"Configuring the Squid service"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The ",(0,r.kt)("strong",{parentName:"p"},"Mithril relay")," node serves as a forward proxy, relaying traffic between the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Signer")," and the ",(0,r.kt)("strong",{parentName:"p"},"Mithril Aggregator"),". When appropriately configured, it facilitates the security of the ",(0,r.kt)("strong",{parentName:"p"},"block-producing")," node. You can use ",(0,r.kt)("inlineCode",{parentName:"p"},"squid")," to operate this forward proxy, and this section presents a recommended configuration.")),(0,r.kt)("p",null,"Verify that the service was correctly configured at installation:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl status squid\n")),(0,r.kt)("p",null,"Make a copy of the original configuration:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak\n")),(0,r.kt)("p",null,"Prepare the forward proxy configuration file:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo bash -c 'cat > /etc/squid/squid.conf << EOF\n# Listening port (port 3128 is recommended)\nhttp_port **YOUR_RELAY_LISTENING_PORT**\n\n# ACL for internal IP of your block producer node\nacl relay_internal_ip src **YOUR_BLOCK_PRODUCER_INTERNAL_IP**\n\n# ACL for aggregator endpoint\nacl aggregator_domain dstdomain .mithril.network\n\n# ACL for SSL port only\nacl SSL_port port 443\n\n# Allowed traffic\nhttp_access allow relay_internal_ip aggregator_domain SSL_port\n\n# Do not disclose block producer internal IP\nforwarded_for delete\n\n# Turn off via header\nvia off\n \n# Deny request for original source of a request\nfollow_x_forwarded_for deny all\n \n# Anonymize request headers\nrequest_header_access Authorization allow all\nrequest_header_access Proxy-Authorization allow all\nrequest_header_access Cache-Control allow all\nrequest_header_access Content-Length allow all\nrequest_header_access Content-Type allow all\nrequest_header_access Date allow all\nrequest_header_access Host allow all\nrequest_header_access If-Modified-Since allow all\nrequest_header_access Pragma allow all\nrequest_header_access Accept allow all\nrequest_header_access Accept-Charset allow all\nrequest_header_access Accept-Encoding allow all\nrequest_header_access Accept-Language allow all\nrequest_header_access Connection allow all\nrequest_header_access All deny all\n\n# Disable cache\ncache deny all\n\n# Deny everything else\nhttp_access deny all\nEOF'\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example of the aforementioned command created with the example set for ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo bash -c 'cat > /etc/squid/squid.conf << EOF\n# Listening port (port 3128 is recommended)\nhttp_port 3128\n\n# ACL for internal IP of your block producer node\nacl relay_internal_ip src 192.168.1.75\n\n# ACL for aggregator endpoint\nacl aggregator_domain dstdomain .mithril.network\n\n# ACL for SSL port only\nacl SSL_port port 443\n\n# Allowed traffic\nhttp_access allow relay_internal_ip aggregator_domain SSL_port\n\n# Do not disclose block producer internal IP\nforwarded_for delete\n\n# Turn off via header\nvia off\n \n# Deny request for original source of a request\nfollow_x_forwarded_for deny all\n \n# Anonymize request headers\nrequest_header_access Authorization allow all\nrequest_header_access Proxy-Authorization allow all\nrequest_header_access Cache-Control allow all\nrequest_header_access Content-Length allow all\nrequest_header_access Content-Type allow all\nrequest_header_access Date allow all\nrequest_header_access Host allow all\nrequest_header_access If-Modified-Since allow all\nrequest_header_access Pragma allow all\nrequest_header_access Accept allow all\nrequest_header_access Accept-Charset allow all\nrequest_header_access Accept-Encoding allow all\nrequest_header_access Accept-Language allow all\nrequest_header_access Connection allow all\nrequest_header_access All deny all\n\n# Disable cache\ncache deny all\n\n# Deny everything else\nhttp_access deny all\nEOF'\n"))),(0,r.kt)("p",null,"With this configuration, the proxy will:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"accept incoming traffic originating from the internal IP of the block-producing machine"),(0,r.kt)("li",{parentName:"ul"},"accept incoming traffic directed to the listening port of the proxy"),(0,r.kt)("li",{parentName:"ul"},"accept incoming HTTPS traffic proxied to ",(0,r.kt)("inlineCode",{parentName:"li"},"mithril.network")," domain hosts"),(0,r.kt)("li",{parentName:"ul"},"anonymize completely the traffic and avoid disclosing any information about the block-producing machine"),(0,r.kt)("li",{parentName:"ul"},"deny all other traffic")),(0,r.kt)("p",null,"Restart the service:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl restart squid\n")),(0,r.kt)("p",null,"Ensure it runs properly:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl status squid\n")),(0,r.kt)("p",null,"Finally, monitor service logs:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tail /var/log/syslog\n")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Here is the command to see squid access logs:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tail /var/log/squid/access.log\n"))),(0,r.kt)("h3",{id:"firewall-configuration"},"Firewall configuration"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"We assume that the ",(0,r.kt)("strong",{parentName:"p"},"Cardano relay")," machine is protected by a firewall. It is necessary to allow the proxied traffic, originating from the ",(0,r.kt)("strong",{parentName:"p"},"Cardano block producer"),", through this firewall.")),(0,r.kt)("h4",{id:"about-the-cardano-relay-machine"},"About the Cardano relay machine"),(0,r.kt)("p",null,"You need to allow incoming traffic on the listening port of the ",(0,r.kt)("strong",{parentName:"p"},"Mithril relay")," on the ",(0,r.kt)("strong",{parentName:"p"},"Cardano relay")," machine, originating from the ",(0,r.kt)("strong",{parentName:"p"},"Cardano block producer")," machine."),(0,r.kt)("p",null,"Assuming you are using ",(0,r.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Uncomplicated_Firewall"},(0,r.kt)("inlineCode",{parentName:"a"},"Uncomplicated Firewall"))," (",(0,r.kt)("inlineCode",{parentName:"p"},"0.36+"),"), the command to open that traffic is:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo ufw allow from **YOUR_BLOCK_PRODUCER_INTERNAL_IP** to any port **YOUR_RELAY_LISTENING_PORT** proto tcp\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example of the aforementioned command created with the example set for ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo ufw allow from 192.168.1.75 to any port 3128 proto tcp\n"))),(0,r.kt)("p",null,"Assuming you are using ",(0,r.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Iptables"},(0,r.kt)("inlineCode",{parentName:"a"},"Iptables"))," (",(0,r.kt)("inlineCode",{parentName:"p"},"1.8.7+"),"), the command to open that traffic is:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo iptables -A INPUT -s **YOUR_BLOCK_PRODUCER_INTERNAL_IP** -p tcp --dport **YOUR_RELAY_LISTENING_PORT** -j ACCEPT\nsudo iptables -L -v\nsudo service netfilter-persistent save\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example of the aforementioned command created with the example set for ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo iptables -A INPUT -s 192.168.1.75 -p tcp --dport 3128 -j ACCEPT\nsudo iptables -L -v\nsudo service netfilter-persistent save\n"))),(0,r.kt)("h2",{id:"verify-the-mithril-signer-deployment"},"Verify the Mithril Signer deployment"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"There is a delay of ",(0,r.kt)("inlineCode",{parentName:"p"},"2")," epochs between the registration of the signer node and its ability to generate individual signatures. This delay is further explained in the ",(0,r.kt)("a",{parentName:"p",href:"https://mithril.network/doc/mithril/mithril-protocol/certificates"},"Mithril certificate chain in depth")," documentation."),(0,r.kt)("p",{parentName:"admonition"},"Once this delay has passed, you should be able to observe your ",(0,r.kt)("inlineCode",{parentName:"p"},"PoolId")," listed in some of the certificates accessible on the ",(0,r.kt)("a",{parentName:"p",href:"https://mithril.network/explorer"},(0,r.kt)("inlineCode",{parentName:"a"},"Mithril Explorer")),".")),(0,r.kt)("h3",{id:"verify-your-signer-is-registered"},"Verify your signer is registered"),(0,r.kt)("p",null,"After installing the Mithril Signer, you can verify that your node is registered by checking your Mithril Signer node logs. "),(0,r.kt)("p",null,"First, download the script into the desired directory:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://mithril.network/doc/scripts/verify_signer_registration.sh\n")),(0,r.kt)("p",null,"Make the script executable:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"chmod +x verify_signer_registration.sh\n")),(0,r.kt)("p",null,"Finally, execute the script:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"SIGNER_LOGS_PATH=**YOUR_SIGNER_LOGS_PATH** ./verify_signer_registration.sh\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example command:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"SIGNER_LOGS_PATH=/var/log/syslog ./verify_signer_registration.sh\n"))),(0,r.kt)("p",null,"If your signer is registered, you should see this message:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},">> Congrats, your signer node is registered!\n")),(0,r.kt)("p",null,"Otherwise, you should see this error message:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},">> Oops, your signer node is not registered. Check your configuration.\n")),(0,r.kt)("h3",{id:"verify-your-signer-contributes-with-individual-signatures"},"Verify your signer contributes with individual signatures"),(0,r.kt)("p",null,"After waiting for two epochs, you will be able to verify that your signer is contributing with individual signatures."),(0,r.kt)("p",null,"First, download the script into the desired directory:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://mithril.network/doc/scripts/verify_signer_signature.sh\n")),(0,r.kt)("p",null,"Make the script executable:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"chmod +x verify_signer_signature.sh\n")),(0,r.kt)("p",null,"Finally, execute the script:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"PARTY_ID=**YOUR_PARTY_ID** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./verify_signer_signature.sh\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Here is an example of the aforementioned command created with the example set for ",(0,r.kt)("inlineCode",{parentName:"p"},"release-preprod"),":"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"PARTY_ID=pool1hp72sauk0g0yqm4dzllz0pz6j93gewhllkzphn4hykkfmne43y AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator ./verify_signer_signature.sh\n"))),(0,r.kt)("p",null,"If your signer is contributing, you should see this message:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},">> Congrats, you have signed this certificate: https://aggregator.release-preprod.api.mithril.network/aggregator/certificate/el3p289b03a223244285b2ls10839846ae7a69f1e8362824a383f376f93f723f !\n")),(0,r.kt)("p",null,"Otherwise, you should see this error message:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},">> Oops, your party id was not found in the last 20 certificates. Please try again later.\n")))}h.isMDXComponent=!0},81900:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>m});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,s={unversionedId:"networks-matrix",id:"networks-matrix",title:"networks-matrix",description:"Here is an updated list of all Mithril networks, including their configurations and current statuses:",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}},d={},m=[{value:"release-mainnet",id:"release-mainnet",level:2},{value:"release-preprod",id:"release-preprod",level:2},{value:"pre-release-preview",id:"pre-release-preview",level:2},{value:"testing-preview",id:"testing-preview",level:2}],u={toc:m},c="wrapper";function h(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Here is an updated list of all ",(0,r.kt)("strong",{parentName:"p"},"Mithril networks"),", including their configurations and current statuses:"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Last update: 07/21/2023")),(0,r.kt)(i.Z,{mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"mainnet",label:"Mainnet",default:!0,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},"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},"Beta \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-mainnet.api.mithril.network/aggregator")," ",(0,r.kt)("a",{parentName:"td",href:"https://aggregator.release-mainnet.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-mainnet/genesis.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/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-mainnet/era.addr")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/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-mainnet/era.vkey")," ",(0,r.kt)("a",{parentName:"td",href:"https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/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:"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:"preview",label:"Preview",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"},"\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)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"In this documentation, we use the following generic identifiers:"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"*",(0,r.kt)("strong",{parentName:"li"},"*YOUR_CARDANO_NETWORK**")," You need to replace this 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**")," You need to replace this with the endpoint of an aggregator that runs on the Cardano network you are targeting (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**")," You need to replace this with the genesis verification key URL that runs on the Cardano network you are targeting (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**")," You need to replace this with the era reader adapter type used by the Mithril network you are targeting (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**")," You need to replace this with the era reader address URL used by the Mithril network you are targeting (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**")," You need to replace this with the era reader verification key URL used by the Mithril network you are targeting (e.g. ",(0,r.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/input-output-hk/mithril/main/TEST_ONLY_era.vkey"),")"))))}h.isMDXComponent=!0},66182:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/files/signer-deployment-naive-6f2cc44fb5738b30cc3b5c370042845a.jpg"},34310:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/files/signer-deployment-production-691bb17c165b4da09c46222bc71c06ac.jpg"},15588:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/signer-deployment-naive-6f2cc44fb5738b30cc3b5c370042845a.jpg"},39009:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/signer-deployment-production-691bb17c165b4da09c46222bc71c06ac.jpg"}}]); \ No newline at end of file diff --git a/doc/assets/js/runtime~main.b648a70e.js b/doc/assets/js/runtime~main.220df5fa.js similarity index 99% rename from doc/assets/js/runtime~main.b648a70e.js rename to doc/assets/js/runtime~main.220df5fa.js index cf9d63e8ea1..beaf7f5bdfe 100644 --- a/doc/assets/js/runtime~main.b648a70e.js +++ b/doc/assets/js/runtime~main.220df5fa.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,d,c,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,r.c=t,e=[],r.O=(a,d,c,f)=>{if(!d){var b=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[d,c,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=d(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 d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,d)=>(r.f[d](e,a),a)),[])),r.u=e=>"assets/js/"+({42:"1bcabeba",47:"01a74281",53:"935f2afb",86:"95ba6eac",301:"0dadd2c9",335:"1386e018",359:"7d451ae2",477:"0ab7ecaa",546:"beda7dd9",613:"5efc9d3d",649:"05a8eefa",721:"17636f9c",745:"a9095f31",784:"65298297",901:"d0bce024",904:"db6b77e4",944:"4196d231",1094:"e21cfb82",1182:"c88ce025",1186:"6240f8f6",1197:"b3431997",1331:"eb3cecd3",1334:"3e9f7a55",1397:"adf22360",1588:"15b83b43",1747:"f893c5dd",1761:"42958b8b",1864:"33ebebad",1971:"da6513d5",2005:"0325b8ee",2156:"4ef25f62",2307:"6759b17e",2319:"01fd0f6f",2360:"3bb20b2d",2367:"564f9324",2379:"a86de2e0",2414:"146c26a3",2512:"d07df43d",2513:"bdcc07f8",2534:"716f7b5d",2535:"814f3328",2564:"549efa88",2603:"7fdd55b0",2659:"346551de",2708:"5ee0e852",2790:"395e1d82",2852:"b1a5869c",2863:"e76695bb",3089:"a6aa9e1f",3148:"8bb94aa1",3209:"f4d04751",3232:"d24297d9",3272:"5c36a5d9",3354:"fdedcd38",3394:"90b73dd1",3440:"a50b183b",3511:"63969280",3587:"e8a005e7",3608:"9e4087bc",3687:"eab6d850",3821:"da23917a",3828:"c638a06a",3900:"8f5d5d9c",3907:"855a8af1",3922:"3eb12003",3927:"6b7febc5",3945:"1ea8ad02",3986:"19c944a1",4005:"67742e99",4013:"01a85c17",4059:"3aecf4c2",4071:"4579318a",4163:"1d3fbc77",4164:"61f849e1",4195:"c4f5d8e4",4322:"c06a55aa",4354:"298e1cbf",4397:"25784c72",4500:"03ba7948",4528:"28c41bf0",4687:"646279b0",4700:"b677bce5",4779:"c296e3c5",4851:"3af19306",4912:"3f7b75e6",5006:"846f6ecc",5038:"e7e087cc",5039:"de8c4134",5126:"d488fc75",5148:"c15e56d8",5155:"bb5ac14e",5243:"d40532d9",5378:"5bc9239c",5442:"d54cbf3a",5458:"a57cf0ed",5569:"5df169af",5750:"e439b792",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",6654:"4e19f401",6775:"86ddd18e",6825:"b6aa46a7",6844:"413826f2",6846:"319c539b",6880:"3a51032f",6930:"869a5281",6933:"dd1516db",6998:"57c790d7",7119:"e5a2396c",7131:"e83b0d30",7324:"f54f8efa",7327:"97a0946c",7338:"3488a21a",7356:"e6547a13",7395:"4d078e38",7467:"2fd2680c",7485:"c7d749c3",7615:"2419ec42",7652:"fd4f3ace",7658:"3123e6ae",7686:"f922e42a",7695:"653f7965",7755:"dfcae2ca",7836:"d67b5581",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",9052:"5bb609d6",9331:"106ac1de",9356:"99b9aebb",9360:"db7533df",9362:"69f212a1",9387:"9494ffc1",9459:"b349a70d",9514:"1be78505",9518:"b48fcc4a",9531:"1fcf426f",9561:"88be3a8b",9574:"891aea0a",9697:"73fe69d8",9747:"cab446d6",9817:"14eb3368",9913:"209e6c7d",9937:"183a8603",9971:"21cced07"}[e]||e)+"."+{42:"fbff67ad",47:"ae43aba8",53:"bd4b490f",86:"3ee4b59b",301:"17a126e3",335:"3a0a31c2",359:"2f067e38",477:"a64f9e2a",546:"495fd571",613:"44f16826",649:"f48c94c3",721:"79235548",745:"a380d383",784:"5a4ffbc4",901:"a7aad0a6",904:"a371f416",944:"de1a107e",1094:"4b9e5e5f",1182:"795b177b",1186:"b461ba1c",1197:"024dbc16",1331:"87bf7fdb",1334:"c757c091",1397:"ea49fd1b",1588:"f88b2dbf",1747:"10b2a0cc",1761:"33001d72",1864:"51d1c5f6",1971:"627a1c50",2005:"9da14336",2156:"af4b7e1d",2307:"086dea05",2319:"139eacb3",2360:"8abc1612",2367:"0fd214d9",2379:"25693e77",2414:"85af4ef8",2512:"d0da54d8",2513:"66a5e771",2534:"19682bd6",2535:"57222231",2564:"13237718",2603:"94fae475",2659:"4f9e9fa3",2708:"d896f8e6",2790:"260a6733",2852:"00246b69",2863:"bc8d8f32",3089:"6e015b54",3148:"b4d60c46",3209:"276e4a59",3232:"3310681a",3272:"51de6ebd",3354:"d3db97a5",3394:"8e4d407f",3440:"5833a2e2",3511:"6036368d",3587:"5633eb7b",3608:"ab666526",3687:"a6ccc4c8",3821:"8cf96b3d",3828:"8f5ab191",3900:"46160834",3907:"3f87eacd",3922:"f9f472e3",3927:"d322cb75",3945:"58336a8f",3986:"4559e83b",4005:"174b766c",4013:"3047ae62",4059:"f6e0718d",4071:"1624a1b6",4163:"c4b50998",4164:"29edd593",4195:"831d7c1e",4322:"1287eeb9",4354:"0a887d40",4397:"45db5e6c",4500:"0d6e395f",4528:"43a95eec",4687:"ad356ca4",4700:"1bbdda8d",4779:"e0e146e3",4851:"a6e08ea7",4912:"45ab8639",4972:"64bad86f",5006:"b0e481b6",5038:"3fc68ee1",5039:"ff434d15",5126:"8a642bd5",5148:"a35fbfd4",5155:"3e8809d9",5243:"1f0ca1bb",5378:"381ac5e3",5442:"963d50bb",5458:"9dbcf3ff",5569:"eb06375c",5679:"98b860ec",5750:"7c5bee09",5857:"4b3cf04c",5862:"41dc994d",5956:"0031021f",5968:"479060cc",6013:"dc732e52",6031:"3c12278d",6048:"42e758df",6103:"31ba776a",6130:"ea8c5d1f",6223:"cf41a4b5",6316:"1ea06809",6320:"6bf8798f",6365:"6330b445",6369:"f58b1428",6379:"16d2fab9",6380:"cbd1c717",6430:"9ff0c386",6453:"b72adf52",6462:"b49d9a47",6654:"9e6cd92f",6775:"120a9319",6825:"81cb0e3b",6844:"b785abbe",6846:"02c2413d",6880:"5c14434e",6930:"76c41b1d",6933:"1ce93fc0",6998:"d284da4d",7119:"bf55f4c4",7131:"3ed93bd0",7324:"237e2c15",7327:"7a552ac6",7338:"8d61802c",7356:"3b75560b",7395:"5a11b696",7467:"abe371f9",7485:"ece2f88a",7615:"8da5c073",7652:"264939b9",7658:"f8386f1d",7686:"26ac6d6b",7695:"062dfe1b",7724:"8d7e887f",7755:"be779d54",7836:"68061cd9",7918:"5685dc41",8003:"b814f615",8051:"f3c6d589",8071:"b99a99c4",8139:"b251d58a",8159:"d138a00b",8189:"4b17cc5f",8222:"43cfeb42",8239:"9367e29e",8300:"8c01b9fa",8403:"ceb0ff6e",8587:"21f04352",8610:"d63cf4a1",8612:"88766538",8665:"bb5a3510",8834:"e29cd6ea",8858:"9ad2be58",8954:"338e5e24",8985:"0b2c9d90",9038:"64a4bcc7",9052:"6e17e2ed",9331:"cdaee5aa",9356:"fa1e5805",9360:"15b698c5",9362:"c35640c9",9387:"bdde79ff",9459:"16300fdf",9487:"3ab2aba4",9514:"2e2ef114",9518:"c31f48f4",9531:"d5b020ba",9561:"2a0fba2a",9574:"d8e8529c",9697:"f9812bca",9747:"3f3fcd0d",9817:"ca359394",9913:"993db7e3",9937:"e7f5de09",9971:"04a404f8"}[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),c={},f="mithril-doc:",r.l=(e,a,d,b)=>{if(c[e])c[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(d))),a)return a(d)},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",beda7dd9:"546","5efc9d3d":"613","05a8eefa":"649","17636f9c":"721",a9095f31:"745",d0bce024:"901",db6b77e4:"904","4196d231":"944",e21cfb82:"1094",c88ce025:"1182","6240f8f6":"1186",b3431997:"1197",eb3cecd3:"1331","3e9f7a55":"1334",adf22360:"1397","15b83b43":"1588",f893c5dd:"1747","42958b8b":"1761","33ebebad":"1864",da6513d5:"1971","0325b8ee":"2005","4ef25f62":"2156","6759b17e":"2307","01fd0f6f":"2319","3bb20b2d":"2360","564f9324":"2367",a86de2e0:"2379","146c26a3":"2414",d07df43d:"2512",bdcc07f8:"2513","716f7b5d":"2534","814f3328":"2535","549efa88":"2564","7fdd55b0":"2603","346551de":"2659","5ee0e852":"2708","395e1d82":"2790",b1a5869c:"2852",e76695bb:"2863",a6aa9e1f:"3089","8bb94aa1":"3148",f4d04751:"3209",d24297d9:"3232","5c36a5d9":"3272",fdedcd38:"3354","90b73dd1":"3394",a50b183b:"3440",e8a005e7:"3587","9e4087bc":"3608",eab6d850:"3687",da23917a:"3821",c638a06a:"3828","8f5d5d9c":"3900","855a8af1":"3907","3eb12003":"3922","6b7febc5":"3927","1ea8ad02":"3945","19c944a1":"3986","67742e99":"4005","01a85c17":"4013","3aecf4c2":"4059","4579318a":"4071","1d3fbc77":"4163","61f849e1":"4164",c4f5d8e4:"4195",c06a55aa:"4322","298e1cbf":"4354","25784c72":"4397","03ba7948":"4500","28c41bf0":"4528","646279b0":"4687",b677bce5:"4700",c296e3c5:"4779","3af19306":"4851","3f7b75e6":"4912","846f6ecc":"5006",e7e087cc:"5038",de8c4134:"5039",d488fc75:"5126",c15e56d8:"5148",bb5ac14e:"5155",d40532d9:"5243","5bc9239c":"5378",d54cbf3a:"5442",a57cf0ed:"5458","5df169af":"5569",e439b792:"5750",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","4e19f401":"6654","86ddd18e":"6775",b6aa46a7:"6825","413826f2":"6844","319c539b":"6846","3a51032f":"6880","869a5281":"6930",dd1516db:"6933","57c790d7":"6998",e5a2396c:"7119",e83b0d30:"7131",f54f8efa:"7324","97a0946c":"7327","3488a21a":"7338",e6547a13:"7356","4d078e38":"7395","2fd2680c":"7467",c7d749c3:"7485","2419ec42":"7615",fd4f3ace:"7652","3123e6ae":"7658",f922e42a:"7686","653f7965":"7695",dfcae2ca:"7755",d67b5581:"7836",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","5bb609d6":"9052","106ac1de":"9331","99b9aebb":"9356",db7533df:"9360","69f212a1":"9362","9494ffc1":"9387",b349a70d:"9459","1be78505":"9514",b48fcc4a:"9518","1fcf426f":"9531","88be3a8b":"9561","891aea0a":"9574","73fe69d8":"9697",cab446d6:"9747","14eb3368":"9817","209e6c7d":"9913","183a8603":"9937","21cced07":"9971"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,d)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)d.push(c[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((d,f)=>c=e[a]=[d,f]));d.push(c[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(d=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var f=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var c,f,b=d[0],t=d[1],o=d[2],n=0;if(b.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(d);n{"use strict";var e,a,d,c,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,r.c=t,e=[],r.O=(a,d,c,f)=>{if(!d){var b=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[d,c,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=d(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 d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,d)=>(r.f[d](e,a),a)),[])),r.u=e=>"assets/js/"+({42:"1bcabeba",47:"01a74281",53:"935f2afb",86:"95ba6eac",301:"0dadd2c9",335:"1386e018",359:"7d451ae2",477:"0ab7ecaa",546:"beda7dd9",613:"5efc9d3d",649:"05a8eefa",721:"17636f9c",745:"a9095f31",784:"65298297",901:"d0bce024",904:"db6b77e4",944:"4196d231",1094:"e21cfb82",1182:"c88ce025",1186:"6240f8f6",1197:"b3431997",1331:"eb3cecd3",1334:"3e9f7a55",1397:"adf22360",1588:"15b83b43",1747:"f893c5dd",1761:"42958b8b",1864:"33ebebad",1971:"da6513d5",2005:"0325b8ee",2156:"4ef25f62",2307:"6759b17e",2319:"01fd0f6f",2360:"3bb20b2d",2367:"564f9324",2379:"a86de2e0",2414:"146c26a3",2512:"d07df43d",2513:"bdcc07f8",2534:"716f7b5d",2535:"814f3328",2564:"549efa88",2603:"7fdd55b0",2659:"346551de",2708:"5ee0e852",2790:"395e1d82",2852:"b1a5869c",2863:"e76695bb",3089:"a6aa9e1f",3148:"8bb94aa1",3209:"f4d04751",3232:"d24297d9",3272:"5c36a5d9",3354:"fdedcd38",3394:"90b73dd1",3440:"a50b183b",3511:"63969280",3587:"e8a005e7",3608:"9e4087bc",3687:"eab6d850",3821:"da23917a",3828:"c638a06a",3900:"8f5d5d9c",3907:"855a8af1",3922:"3eb12003",3927:"6b7febc5",3945:"1ea8ad02",3986:"19c944a1",4005:"67742e99",4013:"01a85c17",4059:"3aecf4c2",4071:"4579318a",4163:"1d3fbc77",4164:"61f849e1",4195:"c4f5d8e4",4322:"c06a55aa",4354:"298e1cbf",4397:"25784c72",4500:"03ba7948",4528:"28c41bf0",4687:"646279b0",4700:"b677bce5",4779:"c296e3c5",4851:"3af19306",4912:"3f7b75e6",5006:"846f6ecc",5038:"e7e087cc",5039:"de8c4134",5126:"d488fc75",5148:"c15e56d8",5155:"bb5ac14e",5243:"d40532d9",5378:"5bc9239c",5442:"d54cbf3a",5458:"a57cf0ed",5569:"5df169af",5750:"e439b792",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",6654:"4e19f401",6775:"86ddd18e",6825:"b6aa46a7",6844:"413826f2",6846:"319c539b",6880:"3a51032f",6930:"869a5281",6933:"dd1516db",6998:"57c790d7",7119:"e5a2396c",7131:"e83b0d30",7324:"f54f8efa",7327:"97a0946c",7338:"3488a21a",7356:"e6547a13",7395:"4d078e38",7467:"2fd2680c",7485:"c7d749c3",7615:"2419ec42",7652:"fd4f3ace",7658:"3123e6ae",7686:"f922e42a",7695:"653f7965",7755:"dfcae2ca",7836:"d67b5581",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",9052:"5bb609d6",9331:"106ac1de",9356:"99b9aebb",9360:"db7533df",9362:"69f212a1",9387:"9494ffc1",9459:"b349a70d",9514:"1be78505",9518:"b48fcc4a",9531:"1fcf426f",9561:"88be3a8b",9574:"891aea0a",9697:"73fe69d8",9747:"cab446d6",9817:"14eb3368",9913:"209e6c7d",9937:"183a8603",9971:"21cced07"}[e]||e)+"."+{42:"fbff67ad",47:"ae43aba8",53:"bd4b490f",86:"3ee4b59b",301:"17a126e3",335:"3a0a31c2",359:"2f067e38",477:"a64f9e2a",546:"495fd571",613:"44f16826",649:"f48c94c3",721:"79235548",745:"a380d383",784:"5a4ffbc4",901:"a7aad0a6",904:"a371f416",944:"de1a107e",1094:"4b9e5e5f",1182:"795b177b",1186:"b461ba1c",1197:"024dbc16",1331:"87bf7fdb",1334:"c757c091",1397:"ea49fd1b",1588:"f88b2dbf",1747:"10b2a0cc",1761:"33001d72",1864:"51d1c5f6",1971:"627a1c50",2005:"9da14336",2156:"af4b7e1d",2307:"086dea05",2319:"139eacb3",2360:"8abc1612",2367:"0fd214d9",2379:"25693e77",2414:"85af4ef8",2512:"d0da54d8",2513:"66a5e771",2534:"19682bd6",2535:"57222231",2564:"13237718",2603:"94fae475",2659:"4f9e9fa3",2708:"d896f8e6",2790:"260a6733",2852:"00246b69",2863:"bc8d8f32",3089:"6e015b54",3148:"b4d60c46",3209:"276e4a59",3232:"3310681a",3272:"51de6ebd",3354:"d3db97a5",3394:"8e4d407f",3440:"5833a2e2",3511:"6036368d",3587:"5633eb7b",3608:"ab666526",3687:"a6ccc4c8",3821:"8cf96b3d",3828:"8f5ab191",3900:"46160834",3907:"3f87eacd",3922:"f9f472e3",3927:"d322cb75",3945:"58336a8f",3986:"4559e83b",4005:"174b766c",4013:"3047ae62",4059:"f6e0718d",4071:"1624a1b6",4163:"293141d5",4164:"29edd593",4195:"831d7c1e",4322:"1287eeb9",4354:"0a887d40",4397:"45db5e6c",4500:"0d6e395f",4528:"43a95eec",4687:"ad356ca4",4700:"1bbdda8d",4779:"e0e146e3",4851:"a6e08ea7",4912:"45ab8639",4972:"64bad86f",5006:"b0e481b6",5038:"3fc68ee1",5039:"ff434d15",5126:"8a642bd5",5148:"a35fbfd4",5155:"3e8809d9",5243:"1f0ca1bb",5378:"381ac5e3",5442:"963d50bb",5458:"9dbcf3ff",5569:"eb06375c",5679:"98b860ec",5750:"7c5bee09",5857:"4b3cf04c",5862:"41dc994d",5956:"0031021f",5968:"479060cc",6013:"dc732e52",6031:"3c12278d",6048:"42e758df",6103:"31ba776a",6130:"ea8c5d1f",6223:"cf41a4b5",6316:"1ea06809",6320:"6bf8798f",6365:"6330b445",6369:"f58b1428",6379:"16d2fab9",6380:"cbd1c717",6430:"9ff0c386",6453:"b72adf52",6462:"b49d9a47",6654:"9e6cd92f",6775:"120a9319",6825:"81cb0e3b",6844:"b785abbe",6846:"02c2413d",6880:"5c14434e",6930:"76c41b1d",6933:"1ce93fc0",6998:"d284da4d",7119:"bf55f4c4",7131:"3ed93bd0",7324:"237e2c15",7327:"7a552ac6",7338:"8d61802c",7356:"3b75560b",7395:"5a11b696",7467:"abe371f9",7485:"ece2f88a",7615:"8da5c073",7652:"264939b9",7658:"f8386f1d",7686:"26ac6d6b",7695:"062dfe1b",7724:"8d7e887f",7755:"be779d54",7836:"68061cd9",7918:"5685dc41",8003:"b814f615",8051:"f3c6d589",8071:"b99a99c4",8139:"b251d58a",8159:"d138a00b",8189:"4b17cc5f",8222:"43cfeb42",8239:"9367e29e",8300:"8c01b9fa",8403:"ceb0ff6e",8587:"21f04352",8610:"d63cf4a1",8612:"88766538",8665:"bb5a3510",8834:"e29cd6ea",8858:"9ad2be58",8954:"338e5e24",8985:"0b2c9d90",9038:"64a4bcc7",9052:"6e17e2ed",9331:"cdaee5aa",9356:"fa1e5805",9360:"15b698c5",9362:"c35640c9",9387:"bdde79ff",9459:"16300fdf",9487:"3ab2aba4",9514:"2e2ef114",9518:"c31f48f4",9531:"d5b020ba",9561:"2a0fba2a",9574:"d8e8529c",9697:"f9812bca",9747:"3f3fcd0d",9817:"ca359394",9913:"993db7e3",9937:"e7f5de09",9971:"04a404f8"}[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),c={},f="mithril-doc:",r.l=(e,a,d,b)=>{if(c[e])c[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(d))),a)return a(d)},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",beda7dd9:"546","5efc9d3d":"613","05a8eefa":"649","17636f9c":"721",a9095f31:"745",d0bce024:"901",db6b77e4:"904","4196d231":"944",e21cfb82:"1094",c88ce025:"1182","6240f8f6":"1186",b3431997:"1197",eb3cecd3:"1331","3e9f7a55":"1334",adf22360:"1397","15b83b43":"1588",f893c5dd:"1747","42958b8b":"1761","33ebebad":"1864",da6513d5:"1971","0325b8ee":"2005","4ef25f62":"2156","6759b17e":"2307","01fd0f6f":"2319","3bb20b2d":"2360","564f9324":"2367",a86de2e0:"2379","146c26a3":"2414",d07df43d:"2512",bdcc07f8:"2513","716f7b5d":"2534","814f3328":"2535","549efa88":"2564","7fdd55b0":"2603","346551de":"2659","5ee0e852":"2708","395e1d82":"2790",b1a5869c:"2852",e76695bb:"2863",a6aa9e1f:"3089","8bb94aa1":"3148",f4d04751:"3209",d24297d9:"3232","5c36a5d9":"3272",fdedcd38:"3354","90b73dd1":"3394",a50b183b:"3440",e8a005e7:"3587","9e4087bc":"3608",eab6d850:"3687",da23917a:"3821",c638a06a:"3828","8f5d5d9c":"3900","855a8af1":"3907","3eb12003":"3922","6b7febc5":"3927","1ea8ad02":"3945","19c944a1":"3986","67742e99":"4005","01a85c17":"4013","3aecf4c2":"4059","4579318a":"4071","1d3fbc77":"4163","61f849e1":"4164",c4f5d8e4:"4195",c06a55aa:"4322","298e1cbf":"4354","25784c72":"4397","03ba7948":"4500","28c41bf0":"4528","646279b0":"4687",b677bce5:"4700",c296e3c5:"4779","3af19306":"4851","3f7b75e6":"4912","846f6ecc":"5006",e7e087cc:"5038",de8c4134:"5039",d488fc75:"5126",c15e56d8:"5148",bb5ac14e:"5155",d40532d9:"5243","5bc9239c":"5378",d54cbf3a:"5442",a57cf0ed:"5458","5df169af":"5569",e439b792:"5750",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","4e19f401":"6654","86ddd18e":"6775",b6aa46a7:"6825","413826f2":"6844","319c539b":"6846","3a51032f":"6880","869a5281":"6930",dd1516db:"6933","57c790d7":"6998",e5a2396c:"7119",e83b0d30:"7131",f54f8efa:"7324","97a0946c":"7327","3488a21a":"7338",e6547a13:"7356","4d078e38":"7395","2fd2680c":"7467",c7d749c3:"7485","2419ec42":"7615",fd4f3ace:"7652","3123e6ae":"7658",f922e42a:"7686","653f7965":"7695",dfcae2ca:"7755",d67b5581:"7836",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","5bb609d6":"9052","106ac1de":"9331","99b9aebb":"9356",db7533df:"9360","69f212a1":"9362","9494ffc1":"9387",b349a70d:"9459","1be78505":"9514",b48fcc4a:"9518","1fcf426f":"9531","88be3a8b":"9561","891aea0a":"9574","73fe69d8":"9697",cab446d6:"9747","14eb3368":"9817","209e6c7d":"9913","183a8603":"9937","21cced07":"9971"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,d)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)d.push(c[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((d,f)=>c=e[a]=[d,f]));d.push(c[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(d=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var f=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var c,f,b=d[0],t=d[1],o=d[2],n=0;if(b.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(d);n - + - + \ No newline at end of file diff --git a/doc/category/getting-started/index.html b/doc/category/getting-started/index.html index dd571ebe90a..313cd0c8ac1 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 1208e904518..7be0b37fd78 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 da793b30278..6377679b482 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 5d9ae018798..e4db0adbca9 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 fda164f01c7..e7eae8dc865 100644 --- a/doc/compiled-binaries/index.html +++ b/doc/compiled-binaries/index.html @@ -18,7 +18,7 @@ - + @@ -27,7 +27,7 @@ for linux¹.

    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.

    ¹ The Linux binaries target glibc, and have a minimum requirement of glibc 2.31 (compatible with Ubuntu 20.04 or Debian Bullseye).

    - + \ 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 57c601f3d1d..12e5d7214c6 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 90000a74aa5..f061e9206e4 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 a1b9a024b71..e27c68786cd 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 7498ec80f03..5f530aefb37 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 5b3f677cdc3..9320c7798fe 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 7719e24f11a..98a132906a1 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 e6dcbba1eb4..14579eb3f6c 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 173ea89ddcd..7f6cf959f91 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 these 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/2023/06/14/new-client-interface/index.html b/doc/dev-blog/2023/06/14/new-client-interface/index.html index f58d4472a20..6299204902b 100644 --- a/doc/dev-blog/2023/06/14/new-client-interface/index.html +++ b/doc/dev-blog/2023/06/14/new-client-interface/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@

    Mithril client has got a brand new interface

    · 2 min read

    Mithril client interface is evolving

    For the last few months, we have implemented the capability for the Mithril protocol to sign multiple types of data: on top of the already existing Cardano node database snapshots, the Mithril stake distribution is now also signed on its own. In order to make the client able to work on the different types of data that are certified, we have changed its command line API. For example:

    $> ./mithril-client list

    This command was previously used to list Cardano node snapshots. It has been abandoned in favor of a more explicit syntax:

    $> ./mithril-client snapshot list

    Furthermore, the old version had two different subcommands to 1. download and 2. verify a snapshot. These 2 commands have now be merged into one single download command:

    $> ./mithril-client snapshot download  5109c1eaa6619bc…

    This organization of the client opens the use of a new mithril-stake-distribution sub-command:

    $> ./mithril-client mithril-stake-distribution list

    Which can be aliased into a handy

    $> ./mithril-client msd list

    As for the Cardano snapshots, it is possible to download and verify the stake distribution involved in Mithril multi-signatures as a JSON file:

    $> ./mithril-client msd download 713e2803e998f…

    If the file certification can be verified, it is saved on the disk.

    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/2023/06/28/signer-deployment-models/index.html b/doc/dev-blog/2023/06/28/signer-deployment-models/index.html index d1d00360200..d9e2d23ab6a 100644 --- a/doc/dev-blog/2023/06/28/signer-deployment-models/index.html +++ b/doc/dev-blog/2023/06/28/signer-deployment-models/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@

    Mithril Signer Deployment Models

    · 2 min read

    The new Mithril Signer Deployment Models for SPOs will be introduced soon

    Epic: Prepare Mithril Signer deployment model for SPO #862

    ⚠️ The Mithril Signer Deployment Models 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.

    All these information will be available at the updated Run a Mithril Signer node (SPO) guide. In the mean time, a preview of the Mithril signer setup with the production deployment model is available here. In the new production deployment model, a new Mithril Relay has been introduced and requires an extra setup effort versus the naive deployment model that is currently ran by the pioneer SPOs on the Mithril test networks.

    info

    We strongly encourage the volunteer SPOs to test the production deployment (once it is available of the pre-release-preview network) and to give us their feedback on the setup (clarity of the documentation, if you needed some fixes to make it work, ...).

    Here is the schema of the production deployment for the mainnet: Production Mithril Signer Deployment Model

    and the schema of the naive deployment only for the testnet: Naive Mithril Signer Deployment Model

    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/2023/07/21/mainnet-beta-launch/index.html b/doc/dev-blog/2023/07/21/mainnet-beta-launch/index.html index 4d526837ce5..647c3535536 100644 --- a/doc/dev-blog/2023/07/21/mainnet-beta-launch/index.html +++ b/doc/dev-blog/2023/07/21/mainnet-beta-launch/index.html @@ -18,13 +18,13 @@ - +

    Mithril Protocol’s Mainnet Beta Launch

    · 2 min read

    Update 2023/07/25: The Genesis certificate of the release-mainnet has been successfully created.

    Mithril Protocol’s Mainnet Beta is launched 🚀

    The Mithril team is thrilled to announce that the Mithril Protocol’s Mainnet Beta is launched 🎉

    Here are the next steps that we will follow in order to get the release-mainnet network producing its first certificates:

    1. Open the first signers registrations on the release-mainnet network (1 epoch).
    2. Create the genesis certificate of the release-mainnet network (1 epoch).
    3. Wait for the first certificates to be produced by the release-mainnet network.

    Mainnet Beta Launch Timeline

    This is an expected timeline, in case of modification, we will amend this post with a new one.

    Also, the documentation has been updated with the configuration of the release-mainnet network. It is available here.

    danger

    As a Cardano SPO, before being able to setup a Mithril signer on the mainnet, it is required to complete the step 2 of the SPO onboarding guide

    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 9b833c70645..8c16c5ce469 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 0a02436f3b3..edf80095316 100644 --- a/doc/dev-blog/index.html +++ b/doc/dev-blog/index.html @@ -18,7 +18,7 @@ - + @@ -31,7 +31,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.

    - + \ No newline at end of file diff --git a/doc/dev-blog/page/2/index.html b/doc/dev-blog/page/2/index.html index a83c6f84fe9..a2089ba13dd 100644 --- a/doc/dev-blog/page/2/index.html +++ b/doc/dev-blog/page/2/index.html @@ -18,13 +18,13 @@ - +

    · 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/beta/index.html b/doc/dev-blog/tags/beta/index.html index 5722ceb9ea3..94386cffbec 100644 --- a/doc/dev-blog/tags/beta/index.html +++ b/doc/dev-blog/tags/beta/index.html @@ -18,13 +18,13 @@ - +

    One post tagged with "beta"

    View All Tags

    · 2 min read

    Update 2023/07/25: The Genesis certificate of the release-mainnet has been successfully created.

    Mithril Protocol’s Mainnet Beta is launched 🚀

    The Mithril team is thrilled to announce that the Mithril Protocol’s Mainnet Beta is launched 🎉

    Here are the next steps that we will follow in order to get the release-mainnet network producing its first certificates:

    1. Open the first signers registrations on the release-mainnet network (1 epoch).
    2. Create the genesis certificate of the release-mainnet network (1 epoch).
    3. Wait for the first certificates to be produced by the release-mainnet network.

    Mainnet Beta Launch Timeline

    This is an expected timeline, in case of modification, we will amend this post with a new one.

    Also, the documentation has been updated with the configuration of the release-mainnet network. It is available here.

    danger

    As a Cardano SPO, before being able to setup a Mithril signer on the mainnet, it is required to complete the step 2 of the SPO onboarding guide

    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 d0eefcad209..3d98c670150 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 4fb52c84657..29ce4915acd 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 f19458b9bd3..12043045d65 100644 --- a/doc/dev-blog/tags/certificate/index.html +++ b/doc/dev-blog/tags/certificate/index.html @@ -18,7 +18,7 @@ - + @@ -27,7 +27,7 @@ In order to make the client able to work on the different types of data that are certified, we have changed its command line API. For example:

    $> ./mithril-client list

    This command was previously used to list Cardano node snapshots. It has been abandoned in favor of a more explicit syntax:

    $> ./mithril-client snapshot list

    Furthermore, the old version had two different subcommands to 1. download and 2. verify a snapshot. These 2 commands have now be merged into one single download command:

    $> ./mithril-client snapshot download  5109c1eaa6619bc…

    This organization of the client opens the use of a new mithril-stake-distribution sub-command:

    $> ./mithril-client mithril-stake-distribution list

    Which can be aliased into a handy

    $> ./mithril-client msd list

    As for the Cardano snapshots, it is possible to download and verify the stake distribution involved in Mithril multi-signatures as a JSON file:

    $> ./mithril-client msd download 713e2803e998f…

    If the file certification can be verified, it is saved on the disk.

    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/client/index.html b/doc/dev-blog/tags/client/index.html index 2502493e78a..1de617d2ce8 100644 --- a/doc/dev-blog/tags/client/index.html +++ b/doc/dev-blog/tags/client/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@

    One post tagged with "client"

    View All Tags

    · 2 min read

    Mithril client interface is evolving

    For the last few months, we have implemented the capability for the Mithril protocol to sign multiple types of data: on top of the already existing Cardano node database snapshots, the Mithril stake distribution is now also signed on its own. In order to make the client able to work on the different types of data that are certified, we have changed its command line API. For example:

    $> ./mithril-client list

    This command was previously used to list Cardano node snapshots. It has been abandoned in favor of a more explicit syntax:

    $> ./mithril-client snapshot list

    Furthermore, the old version had two different subcommands to 1. download and 2. verify a snapshot. These 2 commands have now be merged into one single download command:

    $> ./mithril-client snapshot download  5109c1eaa6619bc…

    This organization of the client opens the use of a new mithril-stake-distribution sub-command:

    $> ./mithril-client mithril-stake-distribution list

    Which can be aliased into a handy

    $> ./mithril-client msd list

    As for the Cardano snapshots, it is possible to download and verify the stake distribution involved in Mithril multi-signatures as a JSON file:

    $> ./mithril-client msd download 713e2803e998f…

    If the file certification can be verified, it is saved on the disk.

    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/deployment-model/index.html b/doc/dev-blog/tags/deployment-model/index.html index ec2f4550e49..d3d65dc5f69 100644 --- a/doc/dev-blog/tags/deployment-model/index.html +++ b/doc/dev-blog/tags/deployment-model/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@

    One post tagged with "deployment model"

    View All Tags

    · 2 min read

    The new Mithril Signer Deployment Models for SPOs will be introduced soon

    Epic: Prepare Mithril Signer deployment model for SPO #862

    ⚠️ The Mithril Signer Deployment Models 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.

    All these information will be available at the updated Run a Mithril Signer node (SPO) guide. In the mean time, a preview of the Mithril signer setup with the production deployment model is available here. In the new production deployment model, a new Mithril Relay has been introduced and requires an extra setup effort versus the naive deployment model that is currently ran by the pioneer SPOs on the Mithril test networks.

    info

    We strongly encourage the volunteer SPOs to test the production deployment (once it is available of the pre-release-preview network) and to give us their feedback on the setup (clarity of the documentation, if you needed some fixes to make it work, ...).

    Here is the schema of the production deployment for the mainnet: Production Mithril Signer Deployment Model

    and the schema of the naive deployment only for the testnet: Naive Mithril Signer Deployment Model

    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 9480aa5a7c5..6c563ddaeaf 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 f21637caf26..d054caad899 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 these 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 5a3a0f3f623..b06b3713a59 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 these 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 f83b8d5f9de..5b4c2926bdb 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 these 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 f38ff16069b..4549aad9f5d 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 these 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 a82f969de77..e57b2998620 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 3a8c3c640b6..7afe34663c1 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 these 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 dff882550b9..7a9257733f6 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 e6c67265600..cd610d909a6 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 c88db715a68..239a547c315 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/mainnet/index.html b/doc/dev-blog/tags/mainnet/index.html index d6c0f5e35ea..92c8d9af8bb 100644 --- a/doc/dev-blog/tags/mainnet/index.html +++ b/doc/dev-blog/tags/mainnet/index.html @@ -18,13 +18,13 @@ - +

    One post tagged with "mainnet"

    View All Tags

    · 2 min read

    Update 2023/07/25: The Genesis certificate of the release-mainnet has been successfully created.

    Mithril Protocol’s Mainnet Beta is launched 🚀

    The Mithril team is thrilled to announce that the Mithril Protocol’s Mainnet Beta is launched 🎉

    Here are the next steps that we will follow in order to get the release-mainnet network producing its first certificates:

    1. Open the first signers registrations on the release-mainnet network (1 epoch).
    2. Create the genesis certificate of the release-mainnet network (1 epoch).
    3. Wait for the first certificates to be produced by the release-mainnet network.

    Mainnet Beta Launch Timeline

    This is an expected timeline, in case of modification, we will amend this post with a new one.

    Also, the documentation has been updated with the configuration of the release-mainnet network. It is available here.

    danger

    As a Cardano SPO, before being able to setup a Mithril signer on the mainnet, it is required to complete the step 2 of the SPO onboarding guide

    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 0c2ca33a653..001effe4e70 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/mithril-signer/index.html b/doc/dev-blog/tags/mithril-signer/index.html index 766a08f616d..bc4c99239d3 100644 --- a/doc/dev-blog/tags/mithril-signer/index.html +++ b/doc/dev-blog/tags/mithril-signer/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@

    2 posts tagged with "mithril signer"

    View All Tags

    · 2 min read

    Update 2023/07/25: The Genesis certificate of the release-mainnet has been successfully created.

    Mithril Protocol’s Mainnet Beta is launched 🚀

    The Mithril team is thrilled to announce that the Mithril Protocol’s Mainnet Beta is launched 🎉

    Here are the next steps that we will follow in order to get the release-mainnet network producing its first certificates:

    1. Open the first signers registrations on the release-mainnet network (1 epoch).
    2. Create the genesis certificate of the release-mainnet network (1 epoch).
    3. Wait for the first certificates to be produced by the release-mainnet network.

    Mainnet Beta Launch Timeline

    This is an expected timeline, in case of modification, we will amend this post with a new one.

    Also, the documentation has been updated with the configuration of the release-mainnet network. It is available here.

    danger

    As a Cardano SPO, before being able to setup a Mithril signer on the mainnet, it is required to complete the step 2 of the SPO onboarding guide

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

    · 2 min read

    The new Mithril Signer Deployment Models for SPOs will be introduced soon

    Epic: Prepare Mithril Signer deployment model for SPO #862

    ⚠️ The Mithril Signer Deployment Models 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.

    All these information will be available at the updated Run a Mithril Signer node (SPO) guide. In the mean time, a preview of the Mithril signer setup with the production deployment model is available here. In the new production deployment model, a new Mithril Relay has been introduced and requires an extra setup effort versus the naive deployment model that is currently ran by the pioneer SPOs on the Mithril test networks.

    info

    We strongly encourage the volunteer SPOs to test the production deployment (once it is available of the pre-release-preview network) and to give us their feedback on the setup (clarity of the documentation, if you needed some fixes to make it work, ...).

    Here is the schema of the production deployment for the mainnet: Production Mithril Signer Deployment Model

    and the schema of the naive deployment only for the testnet: Naive Mithril Signer Deployment Model

    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-stake-distribution/index.html b/doc/dev-blog/tags/mithril-stake-distribution/index.html index 14a05e29614..547d7f615ae 100644 --- a/doc/dev-blog/tags/mithril-stake-distribution/index.html +++ b/doc/dev-blog/tags/mithril-stake-distribution/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@

    One post tagged with "mithril-stake-distribution"

    View All Tags

    · 2 min read

    Mithril client interface is evolving

    For the last few months, we have implemented the capability for the Mithril protocol to sign multiple types of data: on top of the already existing Cardano node database snapshots, the Mithril stake distribution is now also signed on its own. In order to make the client able to work on the different types of data that are certified, we have changed its command line API. For example:

    $> ./mithril-client list

    This command was previously used to list Cardano node snapshots. It has been abandoned in favor of a more explicit syntax:

    $> ./mithril-client snapshot list

    Furthermore, the old version had two different subcommands to 1. download and 2. verify a snapshot. These 2 commands have now be merged into one single download command:

    $> ./mithril-client snapshot download  5109c1eaa6619bc…

    This organization of the client opens the use of a new mithril-stake-distribution sub-command:

    $> ./mithril-client mithril-stake-distribution list

    Which can be aliased into a handy

    $> ./mithril-client msd list

    As for the Cardano snapshots, it is possible to download and verify the stake distribution involved in Mithril multi-signatures as a JSON file:

    $> ./mithril-client msd download 713e2803e998f…

    If the file certification can be verified, it is saved on the disk.

    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 61ac54e77ef..fe2f2447716 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 a61bb1cf3e3..c745e1203f2 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 d68e21a3021..888ed29e854 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 f5352ccc9bd..8b2829176f7 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 589a88d9a79..142cfc7f145 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/production/index.html b/doc/dev-blog/tags/production/index.html index 06570acdd16..4ae4e7728a0 100644 --- a/doc/dev-blog/tags/production/index.html +++ b/doc/dev-blog/tags/production/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@

    2 posts tagged with "production"

    View All Tags

    · 2 min read

    Update 2023/07/25: The Genesis certificate of the release-mainnet has been successfully created.

    Mithril Protocol’s Mainnet Beta is launched 🚀

    The Mithril team is thrilled to announce that the Mithril Protocol’s Mainnet Beta is launched 🎉

    Here are the next steps that we will follow in order to get the release-mainnet network producing its first certificates:

    1. Open the first signers registrations on the release-mainnet network (1 epoch).
    2. Create the genesis certificate of the release-mainnet network (1 epoch).
    3. Wait for the first certificates to be produced by the release-mainnet network.

    Mainnet Beta Launch Timeline

    This is an expected timeline, in case of modification, we will amend this post with a new one.

    Also, the documentation has been updated with the configuration of the release-mainnet network. It is available here.

    danger

    As a Cardano SPO, before being able to setup a Mithril signer on the mainnet, it is required to complete the step 2 of the SPO onboarding guide

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

    · 2 min read

    The new Mithril Signer Deployment Models for SPOs will be introduced soon

    Epic: Prepare Mithril Signer deployment model for SPO #862

    ⚠️ The Mithril Signer Deployment Models 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.

    All these information will be available at the updated Run a Mithril Signer node (SPO) guide. In the mean time, a preview of the Mithril signer setup with the production deployment model is available here. In the new production deployment model, a new Mithril Relay has been introduced and requires an extra setup effort versus the naive deployment model that is currently ran by the pioneer SPOs on the Mithril test networks.

    info

    We strongly encourage the volunteer SPOs to test the production deployment (once it is available of the pre-release-preview network) and to give us their feedback on the setup (clarity of the documentation, if you needed some fixes to make it work, ...).

    Here is the schema of the production deployment for the mainnet: Production Mithril Signer Deployment Model

    and the schema of the naive deployment only for the testnet: Naive Mithril Signer Deployment Model

    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/re-spin/index.html b/doc/dev-blog/tags/re-spin/index.html index 9e89bff1ad2..07f41051dc6 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 a847f08783e..100fdc8d4c1 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/spo/index.html b/doc/dev-blog/tags/spo/index.html index f307dfcbc7f..491f5a1a4a0 100644 --- a/doc/dev-blog/tags/spo/index.html +++ b/doc/dev-blog/tags/spo/index.html @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@

    2 posts tagged with "spo"

    View All Tags

    · 2 min read

    Update 2023/07/25: The Genesis certificate of the release-mainnet has been successfully created.

    Mithril Protocol’s Mainnet Beta is launched 🚀

    The Mithril team is thrilled to announce that the Mithril Protocol’s Mainnet Beta is launched 🎉

    Here are the next steps that we will follow in order to get the release-mainnet network producing its first certificates:

    1. Open the first signers registrations on the release-mainnet network (1 epoch).
    2. Create the genesis certificate of the release-mainnet network (1 epoch).
    3. Wait for the first certificates to be produced by the release-mainnet network.

    Mainnet Beta Launch Timeline

    This is an expected timeline, in case of modification, we will amend this post with a new one.

    Also, the documentation has been updated with the configuration of the release-mainnet network. It is available here.

    danger

    As a Cardano SPO, before being able to setup a Mithril signer on the mainnet, it is required to complete the step 2 of the SPO onboarding guide

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

    · 2 min read

    The new Mithril Signer Deployment Models for SPOs will be introduced soon

    Epic: Prepare Mithril Signer deployment model for SPO #862

    ⚠️ The Mithril Signer Deployment Models 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.

    All these information will be available at the updated Run a Mithril Signer node (SPO) guide. In the mean time, a preview of the Mithril signer setup with the production deployment model is available here. In the new production deployment model, a new Mithril Relay has been introduced and requires an extra setup effort versus the naive deployment model that is currently ran by the pioneer SPOs on the Mithril test networks.

    info

    We strongly encourage the volunteer SPOs to test the production deployment (once it is available of the pre-release-preview network) and to give us their feedback on the setup (clarity of the documentation, if you needed some fixes to make it work, ...).

    Here is the schema of the production deployment for the mainnet: Production Mithril Signer Deployment Model

    and the schema of the naive deployment only for the testnet: Naive Mithril Signer Deployment Model

    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 89f4ed38d91..58040d71fb2 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 b2ec95245e2..874c1f4c9e4 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 ede5c07f4cc..483822ea10d 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 c88870fc64e..d218ada9f6b 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 c8f3a0a2209..5f6decb9571 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 12187f91aca..5037e567386 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 @@ - + @@ -31,7 +31,7 @@ for linux¹.

    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.

    ¹ The Linux binaries target glibc, and have a minimum requirement of glibc 2.31 (compatible with Ubuntu 20.04 or Debian Bullseye).

    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
    tools recompute-certificates-hashLoad all certificates in the database to recompute their hash and update all related entities

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

    tools recompute-certificates-hash command has no dedicated parameter

    - + \ 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 7707175ba2a..42dc797ab95 100644 --- a/doc/manual/developer-docs/nodes/mithril-client/index.html +++ b/doc/manual/developer-docs/nodes/mithril-client/index.html @@ -18,7 +18,7 @@ - + @@ -27,7 +27,7 @@ for linux¹.

    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.

    ¹ The Linux binaries target glibc, and have a minimum requirement of glibc 2.31 (compatible with Ubuntu 20.04 or Debian Bullseye).

    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 functions:

    # 1- Help
    mithril_client help

    # 2- List snapshots
    mithril_client snapshot list

    # 3- Show detailed informations about a snapshot
    mithril_client snapshot show $SNAPSHOT_DIGEST

    # 4- Download the given snapshot and verify the certificate
    mithril_client snapshot download $SNAPSHOT_DIGEST

    # 5- List Mithril Stake Distributions
    mithril_client mithril-stake-distribution list

    # 6- Download and verify the given Mithril Stake Distribution
    mithril_client mithril-stake-distribution download $MITHRIL_STAKE_DISTRIBUTION_ARTIFACT_HASH

    Local Image

    Build a local Docker image

    make docker-build

    Run a local Docker container

    make docker-run

    Subcommands

    Here are the subcommands available:

    Snapshot

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

    Mithril Stake Distribution

    SubcommandPerformed action
    downloadDownload and verify a Mithril Stake Distribution
    helpPrint this message or the help of the given subcommand(s)
    listList available Mithril Stake Distributions

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

    snapshot show command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    digest--digest-DIGESTSnapshot digest--✔️

    snapshot download command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    digest--digest-DIGESTSnapshot digest--✔️
    download_dir--download-dir--Directory where the snapshot will be downloaded.--

    mithril-stake-distribution download command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    artifact_hash--artifact-hash--Hash of the Mithril Stake Distribution artifact--✔️
    download_dir--download-dir--Directory where the Mithril Stake Distribution will be downloaded.--
    - + \ 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 955b78127ce..a75db162bf9 100644 --- a/doc/manual/developer-docs/nodes/mithril-signer/index.html +++ b/doc/manual/developer-docs/nodes/mithril-signer/index.html @@ -18,7 +18,7 @@ - + @@ -27,7 +27,7 @@ for linux¹.

    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.

    ¹ The Linux binaries target glibc, and have a minimum requirement of glibc 2.31 (compatible with Ubuntu 20.04 or Debian Bullseye).

    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 000c4a61a4e..a9b9b776e0d 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 updated list of all Mithril networks, including their configurations and current statuses:

    Last update: 07/21/2023

    release-mainnet

    Information-
    Mithril networkrelease-mainnet
    Cardano networkmainnet
    Cardano magic id-
    SupportedYes ✔️
    StatusBeta 🟢
    Aggregator endpointhttps://aggregator.release-mainnet.api.mithril.network/aggregator ↗️
    Genesis verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/genesis.vkey ↗️
    Era reader adapter typecardano-chain
    Era reader addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.addr ↗️
    Era reader verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.vkey ↗️
    Build fromLatest release ↗️
    caution

    In this documentation, we use the following generic identifiers:

    • **YOUR_CARDANO_NETWORK** You need to replace this with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** You need to replace this with the endpoint of an aggregator that runs on the Cardano network you are targeting (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** You need to replace this with the genesis verification key URL that runs on the Cardano network you are targeting (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** You need to replace this with the era reader adapter type used by the Mithril network you are targeting (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** You need to replace this with the era reader address URL used by the Mithril network you are targeting (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** You need to replace this with the era reader verification key URL used by the Mithril network you are targeting (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/SPO-on-boarding-guide/index.html b/doc/manual/getting-started/SPO-on-boarding-guide/index.html index 422bc926c8a..ad1594ce8bf 100644 --- a/doc/manual/getting-started/SPO-on-boarding-guide/index.html +++ b/doc/manual/getting-started/SPO-on-boarding-guide/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    SPO onboarding guide

    The journey with Mithril toward mainnet

    Welcome to Mithril! Here is a description of the journey you will need to follow as an SPO to prepare for running a Mithril Signer on the mainnet. We assume that you are already an active SPO on the Cardano mainnet and have experience on the pre-production testnet.

    SPO On-boarding Timeline

    Step 1: Participate in the Pioneer Program

    info

    This step is optional, but recommended as it helps us deliver quality software. We are actively looking for SPO candidates to test Mithril on the Cardano testnets. Contact us here if you are interested!

    To participate in the Pioneer Program, you will need to:

    • Register for the Mithril SPO Pioneer Program using this form.
    • Run an active SPO on the Cardano preview network for at least one epoch or one day.
    • Set up a Mithril Signer node on the pre-release-preview Mithril network by following the Run a Mithril Signer node (SPO) guide.
    • You can choose between the Naive (easier to set up) or the Production deployment models.
    • Wait for two epochs (or two days) before your Mithril Signer is eligible to contribute.
    • Verify that your Pool Id is listed in some of the produced certificates using the Mithril Explorer.
    • ⚠️ Follow our #moria Discord channel or our GitHub repository for new pre-releases to install.
    • If you have any technical issues or would like to provide feedback, feel free to ask questions on the #moria Discord channel.

    Each Mithril network has its own configuration, which can be found in the Configuration parameters section of this guide.

    Step 2: Get Mithril ready for mainnet

    danger

    This step is mandatory. You must complete it before moving forward to Step 3.

    To get ready for mainnet, you need to:

    • Be an active SPO on the Cardano preprod network for at least one epoch or five days.
    • Set up a Mithril Signer node on Mithril's release-preprod network by following the Run a Mithril Signer node (SPO) guide.
    • You must run the Production deployment model.
    • Wait for two epochs (or ten days) before your Mithril Signer is eligible to contribute.
    • Verify that your Pool Id is listed in some of the produced certificates using the Mithril Explorer.
    • ⚠️ Follow our #moria Discord channel or our GitHub repository for new releases to install.
    • If you have any technical issues or would like to provide feedback, feel free to ask questions on the #moria Discord channel.

    Each Mithril network has its own configuration, which can be found in the Configuration parameters section of this guide.

    Step 3: Run Mithril on mainnet

    danger

    This step is mandatory. You must have completed Step 2 before.

    To run Mithril on mainnet, you need to:

    • Be an active SPO on Cardano mainnet for at least one epoch or five days.
    • Set up a Mithril Signer node on Mithril's release-mainnet network by following the Run a Mithril Signer node (SPO) guide.
    • You must run the Production deployment model.
    • Wait for two epochs (or ten days) before your Mithril Signer is eligible to contribute.
    • Verify that your Pool Id is listed in some of the produced certificates using the Mithril Explorer.
    • ⚠️ Follow our #moria Discord channel or our GitHub repository for new releases to install.
    • If you have any technical issues or would like to provide feedback, feel free to ask questions on the #moria Discord channel.

    Each Mithril network has its own configuration, which can be found in the Configuration parameters section of this guide.

    Configuration parameters

    Mithril networks

    Here is an updated list of all Mithril networks, including their configurations and current statuses:

    Last update: 07/21/2023

    release-mainnet

    Information-
    Mithril networkrelease-mainnet
    Cardano networkmainnet
    Cardano magic id-
    SupportedYes ✔️
    StatusBeta 🟢
    Aggregator endpointhttps://aggregator.release-mainnet.api.mithril.network/aggregator ↗️
    Genesis verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/genesis.vkey ↗️
    Era reader adapter typecardano-chain
    Era reader addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.addr ↗️
    Era reader verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.vkey ↗️
    Build fromLatest release ↗️
    caution

    In this documentation, we use the following generic identifiers:

    • **YOUR_CARDANO_NETWORK** You need to replace this with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** You need to replace this with the endpoint of an aggregator that runs on the Cardano network you are targeting (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** You need to replace this with the genesis verification key URL that runs on the Cardano network you are targeting (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** You need to replace this with the era reader adapter type used by the Mithril network you are targeting (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** You need to replace this with the era reader address URL used by the Mithril network you are targeting (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** You need to replace this with the era reader verification key URL used by the Mithril network you are targeting (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/manual/getting-started/bootstrap-cardano-node/index.html b/doc/manual/getting-started/bootstrap-cardano-node/index.html index 09ad840f164..fbd26bb1a12 100644 --- a/doc/manual/getting-started/bootstrap-cardano-node/index.html +++ b/doc/manual/getting-started/bootstrap-cardano-node/index.html @@ -18,7 +18,7 @@ - + @@ -27,7 +27,7 @@ for linux¹.

    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.

    ¹ The Linux binaries target glibc, and have a minimum requirement of glibc 2.31 (compatible with Ubuntu 20.04 or Debian Bullseye).

    Run the 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 $@
    }

    You can now use the mithril_client function:

    # 1- Help
    mithril_client help

    # 2- List snapshots
    mithril_client snapshot list
    tip

    In the following part of the document, you will need to replace the ./mithril-client commands with mithril_client 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 snapshot list

    You will see a list of snapshots:

    +-------+-----------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | Epoch | Immutable | Digest | Size | Locations | Created |
    +-------+-----------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 72 | 1379 | a305aa11b0e2ccf737d4f5def8b0a9f2245eded2b4ec4be876f7bd64deddcbbf | 1259745182 | 1 | 2023-05-31T14:02:40.150189810Z |
    +-------+-----------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 72 | 1378 | 5c2214b0b3a00cccacc96b65f9741d4e818df0bc092bee30986e4d554396c6fd | 1258142105 | 1 | 2023-05-31T07:48:08.357263836Z |
    +-------+-----------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 72 | 1377 | 7cea14e5742387ca770a74f3e3cfdd93fc38573e2babbf05df292888a528ab15 | 1256695921 | 1 | 2023-05-31T01:56:38.178640636Z |
    +-------+-----------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 72 | 1376 | 4cb153b55f6cadf47bc48cc3112c16a037ee49416820190dc9e121d4aa49369f | 1255258102 | 1 | 2023-05-30T20:11:54.620669432Z |
    +-------+-----------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | | | | | | |

    Step 3: Show snapshot details

    To get more details from a specific snapshot (optional), run:

    ./mithril-client snapshot show $SNAPSHOT_DIGEST

    You will see more information about the snapshot:

    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Info | Value |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Epoch | 72 |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Immutable File Number | 1379 |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Digest | a305aa11b0e2ccf737d4f5def8b0a9f2245eded2b4ec4be876f7bd64deddcbbf |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Size | 1259745182 |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Location 1 | https://storage.googleapis.com/mithril-release-preprod-…aa11b0e2ccf737d4f5def8b0a9f2245eded2b4ec4be876f7bd64deddcbbf.tar.gz |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Created | 2023-05-31T14:02:40.150189810Z |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+

    Step 4: Download the selected snapshot

    To download the selected snapshot from the remote location to your remote location, run:

    ./mithril-client snapshot download $SNAPSHOT_DIGEST

    You will see that the selected snapshot archive has been downloaded locally, unpacked, and that the associated certificate is valid:

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

    Restore a Cardano node:

    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 5: Launch a Cardano node from the 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 ingested 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 network nodes and start adding blocks:

    [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 f19654a670f..c762c78de4e 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

    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')

    You can pick an online test aggregator directly from the Mithril explorer.

    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 snapshot list

    You will see a list of snapshots

    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | Epoch | Immutable | Network | Digest | Size | Locations | Created |
    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 219 | 4387 | preview | 83579cd3bd89438f86e626b102bab6132eef95d01b736ffa19e96d055ba6a596 | 2086080281 | 1 | 2023-06-01T12:43:23.782943645Z |
    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 219 | 4383 | preview | 7068029bee4996edf15b8f1e7120c3320ca50491ccbdc5841ac072e84bfe4c4d | 2084049995 | 1 | 2023-06-01T07:47:44.359699075Z |
    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 219 | 4382 | preview | da32d417c7fc6bbdbd780191c81f0264cea0af9dbb1bbd0fc7fdcf6e0976cb75 | 2084517087 | 1 | 2023-06-01T06:31:17.609437466Z |
    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 219 | 4381 | preview | a045b7b552c8412dbd0cfe4d418b7ac3a0cf39bfb5ad4d1a39a164217a394e40 | 2084235879 | 1 | 2023-06-01T05:10:52.039770378Z |
    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 219 | 4380 | preview | 9a88639bd59492c3cb67d9d1ac005998292e41faa7e116ff05c5de2d08a8374e | 2083904532 | 1 | 2023-06-01T03:56:43.834905913Z |
    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+

    Step 3: Show Snapshot Details

    Get some more details from a specific snapshot (Optional)

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client snapshot show $SNAPSHOT_DIGEST

    You will see more information about a snapshot

    +-----------------------+-----------------------------------------------------------------------------------------+
    | Info | Value |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Epoch | 218 |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Immutable File Number | 4367 |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Network | preview |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Digest | 5f6e925144d9f6f425b79a0b2db92040738505a0b645ab5f3277f45f8879d2ac |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Size | 2080819008 |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Location 1 | https://storage.googleapis.com/mithril-pre-release-preview-cs/preview-e2…879d2ac.tar.gz |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Created | 2023-05-31T12:50:45.978711344Z |
    +-----------------------+-----------------------------------------------------------------------------------------+

    Step 4: Download and verify selected Snapshot

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

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client snapshot download $SNAPSHOT_DIGEST

    You will see that the certificate chain is validated to ensure the issued certificate is genuine and then the selected snapshot archive is downloaded, unpacked and verified against the corresponding certificate.

    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
    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 c343d3347d7..fcbba000d28 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 @@ - + @@ -30,7 +30,7 @@ are targeting.

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

    ¹ The Linux binaries target glibc, and have a minimum requirement of glibc 2.31 (compatible with Ubuntu 20.04 or Debian Bullseye).

    Verifying the binary

    Verify the version of the binary

    You can 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

    ⚠️ Please verify that the displayed version matches the version described in the release/pre-release notes (refer to the Build from column in the Mithril networks table above).

    Verify the build

    Check that the Mithril Signer binary is working correctly by running the help function:

    ./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 wish to delve deeper, you can access logs at various levels 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)

    Installing the service

    Move the executable

    To move the executable to /opt/mithril, run:

    sudo mkdir -p /opt/mithril
    sudo mv mithril-signer /opt/mithril

    Set up 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 parameters 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}'
      • RELAY_ENDPOINT=http://192.168.1.50:3128 (optional): this is the endpoint of the Mithril relay, which is required for production deployment only. For naive deployment, do not set this variable in your environment file.

    First, create an environment file that will be used by the service:

    • for production deployment:
    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**
    RELAY_ENDPOINT=**YOUR_RELAY_ENDPOINT**
    EOF'
    • for naive deployment:
    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, create a /etc/systemd/system/mithril-signer.service description file for the 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

    Register the service to start on boot:

    sudo systemctl enable mithril-signer

    Monitor the status of the service:

    systemctl status mithril-signer.service

    Finally, monitor the logs of the service:

    tail /var/log/syslog

    Set up the Mithril relay node

    caution
    • For production deployment, the setup of the Mithril relay is performed on the Cardano relay machine.

    • For naive deployment: this step is not necessary.

    Configuring the Squid service

    info

    The Mithril relay node serves as a forward proxy, relaying traffic between the Mithril Signer and the Mithril Aggregator. When appropriately configured, it facilitates the security of the block-producing node. You can use squid to operate this forward proxy, and this section presents a recommended configuration.

    Verify that the service was correctly configured at installation:

    sudo systemctl status squid

    Make a copy of the original configuration:

    sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak

    Prepare the forward proxy configuration file:

    sudo bash -c 'cat > /etc/squid/squid.conf << EOF
    # Listening port (port 3128 is recommended)
    http_port **YOUR_RELAY_LISTENING_PORT**

    # ACL for internal IP of your block producer node
    acl relay_internal_ip src **YOUR_BLOCK_PRODUCER_INTERNAL_IP**

    # ACL for aggregator endpoint
    acl aggregator_domain dstdomain .mithril.network

    # ACL for SSL port only
    acl SSL_port port 443

    # Allowed traffic
    http_access allow relay_internal_ip aggregator_domain SSL_port

    # Do not disclose block producer internal IP
    forwarded_for delete

    # Turn off via header
    via off

    # Deny request for original source of a request
    follow_x_forwarded_for deny all

    # Anonymize request headers
    request_header_access Authorization allow all
    request_header_access Proxy-Authorization allow all
    request_header_access Cache-Control allow all
    request_header_access Content-Length allow all
    request_header_access Content-Type allow all
    request_header_access Date allow all
    request_header_access Host allow all
    request_header_access If-Modified-Since allow all
    request_header_access Pragma allow all
    request_header_access Accept allow all
    request_header_access Accept-Charset allow all
    request_header_access Accept-Encoding allow all
    request_header_access Accept-Language allow all
    request_header_access Connection allow all
    request_header_access All deny all

    # Disable cache
    cache deny all

    # Deny everything else
    http_access deny all
    EOF'

    With this configuration, the proxy will:

    • accept incoming traffic originating from the internal IP of the block-producing machine
    • accept incoming traffic directed to the listening port of the proxy
    • accept incoming HTTPS traffic proxied to mithril.network domain hosts
    • anonymize completely the traffic and avoid disclosing any information about the block-producing machine
    • deny all other traffic

    Restart the service:

    sudo systemctl restart squid

    Ensure it runs properly:

    sudo systemctl status squid

    Finally, monitor service logs:

    tail /var/log/syslog

    Firewall configuration

    info

    We assume that the Cardano relay machine is protected by a firewall. It is necessary to allow the proxied traffic, originating from the Cardano block producer, through this firewall.

    About the Cardano relay machine

    You need to allow incoming traffic on the listening port of the Mithril relay on the Cardano relay machine, originating from the Cardano block producer machine.

    Assuming you are using Uncomplicated Firewall (0.36+), the command to open that traffic is:

    sudo ufw allow from **YOUR_BLOCK_PRODUCER_INTERNAL_IP** to any port **YOUR_RELAY_LISTENING_PORT** proto tcp

    Assuming you are using Iptables (1.8.7+), the command to open that traffic is:

    sudo iptables -A INPUT -s **YOUR_BLOCK_PRODUCER_INTERNAL_IP** -p tcp --dport **YOUR_RELAY_LISTENING_PORT** -j ACCEPT
    sudo iptables -L -v
    sudo service netfilter-persistent save

    Verify the Mithril Signer deployment

    tip

    There is a delay of 2 epochs between the registration of the signer node and its ability to generate individual signatures. This delay is further explained in the Mithril certificate chain in depth documentation.

    Once this delay has passed, you should be able to observe your PoolId listed in some of the certificates accessible 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 ca98338ecf1..a8e95db0eb3 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 five minutes.

    Introduction

    A Mithril network consists of three main components:

    • Mithril Aggregator:

    This node coordinates the production of the Cardano snapshot archives, working alongside Mithril Signer and Cardano nodes to generate associated certificates using Mithril multi-signatures.

    • Mithril Signer:

    This node is responsible for producing individual signatures, which are then combined into a multi-signature by the Mithril Aggregator. It operates in conjunction with a Cardano node (run by a stake pool operator (SPO)) holding stake in the network.

    • Mithril Client:

    This node verifies and restores a snapshot, facilitating lightning-fast bootstrapping of a Cardano full node. It plays a crucial role in ensuring the efficiency of the network.

    tip

    For more information about the Mithril protocol, see the section About Mithril.

    Get started

    To get started with the setup, make sure you have the following components and tools:

    Having these requirements in place will enable you to proceed smoothly with the setup and configuration for your project.

    Read the user manual

    In the Getting started guide in the user manual, you will find tutorials for:

    In the Developer docs, you will find documentation for:

    tip

    If you need any assistance, don't hesitate to contact the Mithril team:

    - + \ No newline at end of file diff --git a/doc/mithril/intro/index.html b/doc/mithril/intro/index.html index 31132c57fe7..74ed8381662 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 56a548a89f8..6e0f2dd480d 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 68050f1ba17..43cd2a27c33 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 ef4884ffdfe..c145ecd4ac2 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 list, show or verify artifacts certified by Mithril certificates:

    1. Cardano full node snapshots
    2. Stake Distribution involved in Mithril signatures.
    tip

    Wallet restoration

    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.

    Certificate chain Verification

    The first thing the Mithril Client does is to 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 Artifacts Retrieval

    Once the certificate chain is verified, the Mithril Client will try to download a Full Cardano Node snapshot. The Mithril Aggregator is used as a provider for the Snapshots locations. The snapshots might be stored at several locations, the client will try the given locations until it founds one that responds OK.

    These artifacts are downloaded locally on a temporary directory and then uncompressed in the location given on the command line. The uncompressed files are used to compute the message that is then compared with the one that is signed by the Mithril Signers. If the verification fails, the uncompressed files are removed from the disk.

    Snapshot Restoration

    If the verification succeeds, the user can use these files to start a Cardano full node. At this point, the Cardano Node will take over and hopefully start adding new blocks to the ledger!

    Mithril Stake Distribution

    The client can be also used to verify and download the Stake Distribution used for signatures at the upcoming Cardano's Epoch. As of Snapshots, the certificate chain is validated, then the signers Verification Keys are checked. If valid, a fingerprint of the stake distribution is computed and tested against the one used by the certificate. If it is different, the verification stops, otherwise, the JSON representation of the stake distribution is saved on the disk for further use.

    - + \ 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 ef7f8680529..656f2424176 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 bf96e80b616..37113ecf336 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 e78a7680639..f32d1f9e5bf 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 33d70e59764..f52c214d87f 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 19ccad2a888..fb81e2536ef 100644 --- a/doc/networks-matrix/index.html +++ b/doc/networks-matrix/index.html @@ -18,13 +18,13 @@ - +
    Version: Current

    Here is an updated list of all Mithril networks, including their configurations and current statuses:

    Last update: 07/21/2023

    release-mainnet

    Information-
    Mithril networkrelease-mainnet
    Cardano networkmainnet
    Cardano magic id-
    SupportedYes ✔️
    StatusBeta 🟢
    Aggregator endpointhttps://aggregator.release-mainnet.api.mithril.network/aggregator ↗️
    Genesis verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/genesis.vkey ↗️
    Era reader adapter typecardano-chain
    Era reader addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.addr ↗️
    Era reader verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.vkey ↗️
    Build fromLatest release ↗️
    caution

    In this documentation, we use the following generic identifiers:

    • **YOUR_CARDANO_NETWORK** You need to replace this with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** You need to replace this with the endpoint of an aggregator that runs on the Cardano network you are targeting (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** You need to replace this with the genesis verification key URL that runs on the Cardano network you are targeting (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** You need to replace this with the era reader adapter type used by the Mithril network you are targeting (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** You need to replace this with the era reader address URL used by the Mithril network you are targeting (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** You need to replace this with the era reader verification key URL used by the Mithril network you are targeting (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 dabc5b67413..1aced00fad4 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 53f64c73958..3029afc0b28 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 9a5e59a79c4..059505722f2 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 b70b2f3fccc..7b255bbba16 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 3bc947ee839..c0d0af8a307 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 5de35bd3131..f2a10c8fe8b 100644 --- a/doc/next/compiled-binaries/index.html +++ b/doc/next/compiled-binaries/index.html @@ -18,7 +18,7 @@ - + @@ -27,7 +27,7 @@ for linux¹.

    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.

    ¹ The Linux binaries target glibc, and have a minimum requirement of glibc 2.31 (compatible with Ubuntu 20.04 or Debian Bullseye).

    - + \ No newline at end of file diff --git a/doc/next/glossary/index.html b/doc/next/glossary/index.html index 45099e59213..46297e4fa1c 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 183a8aa5d20..fad64eb022f 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 @@ - + @@ -32,7 +32,7 @@ for linux¹.

    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.

    ¹ The Linux binaries target glibc, and have a minimum requirement of glibc 2.31 (compatible with Ubuntu 20.04 or Debian Bullseye).

    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 signSign genesis payload 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
    tools recompute-certificates-hashLoad all certificates in the database to recompute their hash and update all related entities

    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 export command:

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

    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 sign command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    to_sign_payload_path--to-sign-payload-path--Path of the payload to sign.---
    target_signed_payload_path--target-signed-payload-path--Path of the signed payload to export.---
    genesis_secret_key_path--genesis-secret-key-path--Path of the Genesis secret key.---

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

    tools recompute-certificates-hash command has no dedicated parameter

    - + \ 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 3ecfa1b595f..7ab7880727e 100644 --- a/doc/next/manual/developer-docs/nodes/mithril-client/index.html +++ b/doc/next/manual/developer-docs/nodes/mithril-client/index.html @@ -18,7 +18,7 @@ - + @@ -27,7 +27,7 @@ for linux¹.

    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.

    ¹ The Linux binaries target glibc, and have a minimum requirement of glibc 2.31 (compatible with Ubuntu 20.04 or Debian Bullseye).

    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 functions:

    # 1- Help
    mithril_client help

    # 2- List snapshots
    mithril_client snapshot list

    # 3- Show detailed informations about a snapshot
    mithril_client snapshot show $SNAPSHOT_DIGEST

    # 4- Download the given snapshot and verify the certificate
    mithril_client snapshot download $SNAPSHOT_DIGEST

    # 5- List Mithril Stake Distributions
    mithril_client mithril-stake-distribution list

    # 6- Download and verify the given Mithril Stake Distribution
    mithril_client mithril-stake-distribution download $MITHRIL_STAKE_DISTRIBUTION_ARTIFACT_HASH

    Local Image

    Build a local Docker image

    make docker-build

    Run a local Docker container

    make docker-run

    Subcommands

    Here are the subcommands available:

    Snapshot

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

    Mithril Stake Distribution

    SubcommandPerformed action
    downloadDownload and verify a Mithril Stake Distribution
    helpPrint this message or the help of the given subcommand(s)
    listList available Mithril Stake Distributions

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

    snapshot show command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    digest--digest-DIGESTSnapshot digest--✔️

    snapshot download command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    digest--digest-DIGESTSnapshot digest--✔️
    download_dir--download-dir--Directory where the snapshot will be downloaded.--

    mithril-stake-distribution download command:

    ParameterCommand Line (long)Command Line (short)Environment VariableDescriptionDefault ValueExampleMandatory
    artifact_hash--artifact-hash--Hash of the Mithril Stake Distribution artifact--✔️
    download_dir--download-dir--Directory where the Mithril Stake Distribution will be downloaded.--
    - + \ 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 5fa8a327485..2833c46cedd 100644 --- a/doc/next/manual/developer-docs/nodes/mithril-signer/index.html +++ b/doc/next/manual/developer-docs/nodes/mithril-signer/index.html @@ -18,7 +18,7 @@ - + @@ -27,7 +27,7 @@ for linux¹.

    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.

    ¹ The Linux binaries target glibc, and have a minimum requirement of glibc 2.31 (compatible with Ubuntu 20.04 or Debian Bullseye).

    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 87f2e492354..079385c0678 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 updated list of all Mithril networks, including their configurations and current statuses:

    Last update: 07/21/2023

    release-mainnet

    Information-
    Mithril networkrelease-mainnet
    Cardano networkmainnet
    Cardano magic id-
    SupportedYes ✔️
    StatusBeta 🟢
    Aggregator endpointhttps://aggregator.release-mainnet.api.mithril.network/aggregator ↗️
    Genesis verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/genesis.vkey ↗️
    Era reader adapter typecardano-chain
    Era reader addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.addr ↗️
    Era reader verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.vkey ↗️
    Build fromLatest release ↗️
    caution

    In this documentation, we use the following generic identifiers:

    • **YOUR_CARDANO_NETWORK** You need to replace this with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** You need to replace this with the endpoint of an aggregator that runs on the Cardano network you are targeting (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** You need to replace this with the genesis verification key URL that runs on the Cardano network you are targeting (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** You need to replace this with the era reader adapter type used by the Mithril network you are targeting (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** You need to replace this with the era reader address URL used by the Mithril network you are targeting (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** You need to replace this with the era reader verification key URL used by the Mithril network you are targeting (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/SPO-on-boarding-guide/index.html b/doc/next/manual/getting-started/SPO-on-boarding-guide/index.html index 0a9e69fa6a3..2db5564f2c6 100644 --- a/doc/next/manual/getting-started/SPO-on-boarding-guide/index.html +++ b/doc/next/manual/getting-started/SPO-on-boarding-guide/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    SPO onboarding guide

    The journey with Mithril toward mainnet

    Welcome to Mithril! Here is a description of the journey you will need to follow as an SPO to prepare for running a Mithril Signer on the mainnet. We assume that you are already an active SPO on the Cardano mainnet and have experience on the pre-production testnet.

    SPO On-boarding Timeline

    Step 1: Participate in the Pioneer Program

    info

    This step is optional, but recommended as it helps us deliver quality software. We are actively looking for SPO candidates to test Mithril on the Cardano testnets. Contact us here if you are interested!

    To participate in the Pioneer Program, you will need to:

    • Register for the Mithril SPO Pioneer Program using this form.
    • Run an active SPO on the Cardano preview network for at least one epoch or one day.
    • Set up a Mithril Signer node on the pre-release-preview Mithril network by following the Run a Mithril Signer node (SPO) guide.
    • You can choose between the Naive (easier to set up) or the Production deployment models.
    • Wait for two epochs (or two days) before your Mithril Signer is eligible to contribute. Check that your Mithril Signer is registered by the Aggregator following Verify your signer is registered steps.
    • Verify that your Pool Id is listed in some of the produced certificates using the Mithril Explorer or following Verify your signer contributes with individual signatures steps.
    • ⚠️ Follow our #moria Discord channel or our GitHub repository for new pre-releases to install.
    • If you have any technical issues or would like to provide feedback, feel free to ask questions on the #moria Discord channel.

    Each Mithril network has its own configuration, which can be found in the Configuration parameters section of this guide.

    Step 2: Get Mithril ready for mainnet

    danger

    This step is mandatory. You must complete it before moving forward to Step 3.

    To get ready for mainnet, you need to:

    • Be an active SPO on the Cardano preprod network for at least one epoch or five days.
    • Set up a Mithril Signer node on Mithril's release-preprod network by following the Run a Mithril Signer node (SPO) guide.
    • You must run the Production deployment model.
    • Wait for two epochs (or ten days) before your Mithril Signer is eligible to contribute. Check that your Mithril Signer is registered by the Aggregator following Verify your signer is registered steps.
    • Verify that your Pool Id is listed in some of the produced certificates using the Mithril Explorer or following Verify your signer contributes with individual signatures steps.
    • ⚠️ Follow our #moria Discord channel or our GitHub repository for new releases to install.
    • If you have any technical issues or would like to provide feedback, feel free to ask questions on the #moria Discord channel.

    Each Mithril network has its own configuration, which can be found in the Configuration parameters section of this guide.

    Step 3: Run Mithril on mainnet

    danger

    This step is mandatory. You must have completed Step 2 before.

    To run Mithril on mainnet, you need to:

    • Be an active SPO on Cardano mainnet for at least one epoch or five days.
    • Set up a Mithril Signer node on Mithril's release-mainnet network by following the Run a Mithril Signer node (SPO) guide.
    • You must run the Production deployment model.
    • Wait for two epochs (or ten days) before your Mithril Signer is eligible to contribute. Check that your Mithril Signer is registered by the Aggregator following Verify your signer is registered steps.
    • Verify that your Pool Id is listed in some of the produced certificates using the Mithril Explorer or following Verify your signer contributes with individual signatures steps.
    • ⚠️ Follow our #moria Discord channel or our GitHub repository for new releases to install.
    • If you have any technical issues or would like to provide feedback, feel free to ask questions on the #moria Discord channel.

    Each Mithril network has its own configuration, which can be found in the Configuration parameters section of this guide.

    Configuration parameters

    Mithril networks

    Here is an updated list of all Mithril networks, including their configurations and current statuses:

    Last update: 07/21/2023

    release-mainnet

    Information-
    Mithril networkrelease-mainnet
    Cardano networkmainnet
    Cardano magic id-
    SupportedYes ✔️
    StatusBeta 🟢
    Aggregator endpointhttps://aggregator.release-mainnet.api.mithril.network/aggregator ↗️
    Genesis verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/genesis.vkey ↗️
    Era reader adapter typecardano-chain
    Era reader addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.addr ↗️
    Era reader verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.vkey ↗️
    Build fromLatest release ↗️
    caution

    In this documentation, we use the following generic identifiers:

    • **YOUR_CARDANO_NETWORK** You need to replace this with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** You need to replace this with the endpoint of an aggregator that runs on the Cardano network you are targeting (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** You need to replace this with the genesis verification key URL that runs on the Cardano network you are targeting (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** You need to replace this with the era reader adapter type used by the Mithril network you are targeting (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** You need to replace this with the era reader address URL used by the Mithril network you are targeting (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** You need to replace this with the era reader verification key URL used by the Mithril network you are targeting (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/manual/getting-started/bootstrap-cardano-node/index.html b/doc/next/manual/getting-started/bootstrap-cardano-node/index.html index 96ac13cc8e5..845ffe7931f 100644 --- a/doc/next/manual/getting-started/bootstrap-cardano-node/index.html +++ b/doc/next/manual/getting-started/bootstrap-cardano-node/index.html @@ -18,7 +18,7 @@ - + @@ -27,7 +27,7 @@ for linux¹.

    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.

    ¹ The Linux binaries target glibc, and have a minimum requirement of glibc 2.31 (compatible with Ubuntu 20.04 or Debian Bullseye).

    Run the 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 $@
    }

    You can now use the mithril_client function:

    # 1- Help
    mithril_client help

    # 2- List snapshots
    mithril_client snapshot list
    tip

    In the following part of the document, you will need to replace the ./mithril-client commands with mithril_client 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 snapshot list

    You will see a list of snapshots:

    +-------+-----------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | Epoch | Immutable | Digest | Size | Locations | Created |
    +-------+-----------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 72 | 1379 | a305aa11b0e2ccf737d4f5def8b0a9f2245eded2b4ec4be876f7bd64deddcbbf | 1259745182 | 1 | 2023-05-31T14:02:40.150189810Z |
    +-------+-----------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 72 | 1378 | 5c2214b0b3a00cccacc96b65f9741d4e818df0bc092bee30986e4d554396c6fd | 1258142105 | 1 | 2023-05-31T07:48:08.357263836Z |
    +-------+-----------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 72 | 1377 | 7cea14e5742387ca770a74f3e3cfdd93fc38573e2babbf05df292888a528ab15 | 1256695921 | 1 | 2023-05-31T01:56:38.178640636Z |
    +-------+-----------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 72 | 1376 | 4cb153b55f6cadf47bc48cc3112c16a037ee49416820190dc9e121d4aa49369f | 1255258102 | 1 | 2023-05-30T20:11:54.620669432Z |
    +-------+-----------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | | | | | | |

    Step 3: Show snapshot details

    To get more details from a specific snapshot (optional), run:

    ./mithril-client snapshot show $SNAPSHOT_DIGEST

    You will see more information about the snapshot:

    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Info | Value |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Epoch | 72 |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Immutable File Number | 1379 |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Digest | a305aa11b0e2ccf737d4f5def8b0a9f2245eded2b4ec4be876f7bd64deddcbbf |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Size | 1259745182 |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Location 1 | https://storage.googleapis.com/mithril-release-preprod-…aa11b0e2ccf737d4f5def8b0a9f2245eded2b4ec4be876f7bd64deddcbbf.tar.gz |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+
    | Created | 2023-05-31T14:02:40.150189810Z |
    +-----------------------+-------------------------------------------------------------------------------------------------------------------------------+

    Step 4: Download the selected snapshot

    To download the selected snapshot from the remote location to your remote location, run:

    ./mithril-client snapshot download $SNAPSHOT_DIGEST

    You will see that the selected snapshot archive has been downloaded locally, unpacked, and that the associated certificate is valid:

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

    Restore a Cardano node:

    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 5: Launch a Cardano node from the 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 ingested 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 network nodes and start adding blocks:

    [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 e49a3c92104..7e1d257df7f 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 Cardano devnet network. This network is completely autonomous and set up to produce Mithril snapshots every minute.

    You can launch a private Mithril network using the following topology:

    • 2 Cardano nodes configured as stake pool operators (SPOs) with a Mithril Signer on top
    • 1 Cardano node configured as a BFT node with a Mithril Aggregator on top

    Devnet Topology

    danger

    This demonstration works exclusively on Linux machines.

    tip

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

    Video demonstration

    Pre-requisites

    • Install the latest stable version of a correctly configured Rust toolchain.

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

    Download the source file

    Download the source file 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 the directory

    To change the directory, go to the devnet folder:

    cd mithril-test-lab/mithril-devnet

    Run a private Mithril/Cardano network (devnet) locally

    Step 1: Launch the devnet

    Open a terminal window. Run a devnet with one BTF and two SPO Cardano nodes.

    Option 1: Use remote Docker images

    The network setup will be quicker when using remote Docker images:

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

    Option 2: Use local Docker images

    Note that using local Docker images to build Mithril nodes may take more time:

    NUM_BFT_NODES=1 NUM_POOL_NODES=2 ./devnet-run.sh
    info

    Throughout the devnet launch process, you will encounter the following steps:

    • Bootstrapping the devnet: generate the artifacts of the devnet, depending on the configuration parameters (cryptographic keys, network topology, transactions to set up pool nodes, etc)
    • Starting the Cardano network: run the nodes of the Cardano network, wait for it to be ready, and activate the pool nodes.
    • Starting the Mithril network: run the nodes of the Mithril network, which will work 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 second and will display:

    • Certificate production information gathered from the Mithril network
    • UTXO, stake pools, and 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 the 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 devnet node:

    watch -n 1 LINES=5 ./devnet-log.sh

    The nodes will be queried every second and will display thus:

    =====================================================================
    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')

    You can pick an online test aggregator directly from the Mithril Explorer.

    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 snapshot list

    You will see a list of snapshots:

    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | Epoch | Immutable | Network | Digest | Size | Locations | Created |
    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 219 | 4387 | preview | 83579cd3bd89438f86e626b102bab6132eef95d01b736ffa19e96d055ba6a596 | 2086080281 | 1 | 2023-06-01T12:43:23.782943645Z |
    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 219 | 4383 | preview | 7068029bee4996edf15b8f1e7120c3320ca50491ccbdc5841ac072e84bfe4c4d | 2084049995 | 1 | 2023-06-01T07:47:44.359699075Z |
    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 219 | 4382 | preview | da32d417c7fc6bbdbd780191c81f0264cea0af9dbb1bbd0fc7fdcf6e0976cb75 | 2084517087 | 1 | 2023-06-01T06:31:17.609437466Z |
    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 219 | 4381 | preview | a045b7b552c8412dbd0cfe4d418b7ac3a0cf39bfb5ad4d1a39a164217a394e40 | 2084235879 | 1 | 2023-06-01T05:10:52.039770378Z |
    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+
    | 219 | 4380 | preview | 9a88639bd59492c3cb67d9d1ac005998292e41faa7e116ff05c5de2d08a8374e | 2083904532 | 1 | 2023-06-01T03:56:43.834905913Z |
    +-------+-----------+---------+------------------------------------------------------------------+------------+-----------+--------------------------------+

    Step 3: Show snapshot details

    To get more details from a specific snapshot (optional), run:

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client snapshot show $SNAPSHOT_DIGEST

    You will see more information about the snapshot:

    +-----------------------+-----------------------------------------------------------------------------------------+
    | Info | Value |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Epoch | 218 |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Immutable File Number | 4367 |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Network | preview |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Digest | 5f6e925144d9f6f425b79a0b2db92040738505a0b645ab5f3277f45f8879d2ac |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Size | 2080819008 |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Location 1 | https://storage.googleapis.com/mithril-pre-release-preview-cs/preview-e2…879d2ac.tar.gz |
    +-----------------------+-----------------------------------------------------------------------------------------+
    | Created | 2023-05-31T12:50:45.978711344Z |
    +-----------------------+-----------------------------------------------------------------------------------------+

    Step 4: Download and verify the selected snapshot

    To download the selected snapshot from the remote location to your remote location, run:

    NETWORK=$NETWORK AGGREGATOR_ENDPOINT=$AGGREGATOR_ENDPOINT ./mithril-client snapshot download $SNAPSHOT_DIGEST

    You will see that the certificate chain is validated to ensure the issued certificate is genuine and then the selected snapshot archive is downloaded, unpacked and verified against the corresponding certificate.

    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
    Unpacking snapshot...
    Unpack success 85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917
    to /home/mithril/data/devnet /85f09b39b0b5a13cec9d8fe7ffb82b5e5f236f02ae896f4e47b77e5cd1f2a917/db

    To restore a Cardano node, run:

    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 c0ab6c37de3..04e70dc3509 100644 --- a/doc/next/manual/getting-started/run-signer-node/index.html +++ b/doc/next/manual/getting-started/run-signer-node/index.html @@ -18,19 +18,19 @@ - +
    Version: Next 🚧

    Run a Mithril Signer as an SPO

    Mithril networks

    Here is an updated list of all Mithril networks, including their configurations and current statuses:

    Last update: 07/21/2023

    release-mainnet

    Information-
    Mithril networkrelease-mainnet
    Cardano networkmainnet
    Cardano magic id-
    SupportedYes ✔️
    StatusBeta 🟢
    Aggregator endpointhttps://aggregator.release-mainnet.api.mithril.network/aggregator ↗️
    Genesis verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/genesis.vkey ↗️
    Era reader adapter typecardano-chain
    Era reader addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.addr ↗️
    Era reader verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.vkey ↗️
    Build fromLatest release ↗️
    caution

    In this documentation, we use the following generic identifiers:

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

    For more information about the Mithril protocol, see the section About Mithril.

    Mithril Signer deployment model

    info

    In this guide, you will learn how to set up a Mithril Signer within the stake pool operator (SPO) infrastructure both on Cardano mainnet and testnet environments:

    • On mainnet, you must run the production deployment where the Mithril Signer runs on the Cardano block producer machine and the Mithril relay runs on the Cardano relay machine. Note that you can run the production deployment on testnet.
    • You can also run naive deployment, where the Mithril Signer runs on the Cardano relay machine. This is possible in the testnet environment only, and does not require setting up a Mithril relay.
    info

    In the current setup, you don't need to install a Mithril Aggregator.

    caution

    The production deployment model is currently in the beta version.

    Here is the schema of the production deployment on mainnet: Production Mithril Signer Deployment Model

    and the schema of the naive deployment specifically for testnets: -Naive Mithril Signer Deployment Model

    danger

    On mainnet, you must never copy the KES secret key from the Cardano block producer machine!

    Mithril keys certification

    The Mithril Signer uses your Cardano operational certificate and KES secret key files which enable:

    • Automatic computation of the PoolId
    • Verification of your PoolId ownership and the associated stake used by the Mithril protocol
    • Verification of your Mithril Signer secret key ownership, which allows you to participate in the multi-signature process for certificate production on the Mithril network

    Pre-requisites

    info

    Note that this guide works on a Linux machine only.

    • To operate a Cardano node as a stake pool, you need:

      • The pool's operational certificate
      • The pool's KES secret key
    • To access the file system of the Cardano block producer node for production deployment (or of the Cardano relay node for naive deployment), you will need the following permissions:

      • Read rights on the Database folder (specified by the --database-path setting of the Cardano node)
      • Read and write rights on the Inter Process Communication file (typically defined by the CARDANO_NODE_SOCKET_PATH environment variable used to launch the Cardano node)
    • Install a recent version of cardano-cli (version 8.1.1+).

    • Install a correctly configured Rust toolchain (latest stable version). You can follow the instructions provided here.

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

    • Install a recent version of jq (version 1.6+). You can install it by running apt install jq.

    • Only for the production deployment, install a recent version of squid-cache (version 5.2+). You can install it by running apt install squid.

    Set up the Mithril Signer node

    caution
    • For production deployment, the Mithril Signer setup is performed on the Cardano block producer machine.

    • For naive deployment, the Mithril Signer setup is performed on the Cardano relay machine.

    Building your own executable

    Download the source file

    To download the source from GitHub (HTTPS), run:

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

    Or (SSH):

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

    Build the Mithril Signer binary

    First, switch to build a 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**

    Then, change the directory:

    cd mithril/mithril-signer

    Run tests (optional):

    make test

    Finally, build the executable:

    make build

    Download the pre-built binary

    Each Release / Pre-Release distribution comes with pre compiled binaries ready to use or wrapped in a debian package +Naive Mithril Signer Deployment Model

    danger

    On mainnet, you must never copy the KES secret key from the Cardano block producer machine!

    Mithril keys certification

    The Mithril Signer uses your Cardano operational certificate and KES secret key files which enable:

    • Automatic computation of the PoolId
    • Verification of your PoolId ownership and the associated stake used by the Mithril protocol
    • Verification of your Mithril Signer secret key ownership, which allows you to participate in the multi-signature process for certificate production on the Mithril network

    Pre-requisites

    info

    Note that this guide works on a Linux machine only.

    • To operate a Cardano node as a stake pool, you need:

      • The pool's operational certificate
      • The pool's KES secret key
    • To access the file system of the Cardano block producer node for production deployment (or of the Cardano relay node for naive deployment), you will need the following permissions:

      • Read rights on the Database folder (specified by the --database-path setting of the Cardano node)
      • Read and write rights on the Inter Process Communication file (typically defined by the CARDANO_NODE_SOCKET_PATH environment variable used to launch the Cardano node)
    • Install a recent version of cardano-cli (version 8.1.2+).

    • Install a correctly configured Rust toolchain (latest stable version). You can follow the instructions provided here.

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

    • Install a recent version of jq (version 1.6+). You can install it by running apt install jq.

    • Only for the production deployment, install a recent version of squid-cache (version 5.2+). You can install it by running apt install squid.

    Set up the Mithril Signer node

    caution
    • For production deployment, the Mithril Signer setup is performed on the Cardano block producer machine.

    • For naive deployment, the Mithril Signer setup is performed on the Cardano relay machine.

    Building your own executable

    Download the source file

    To download the source from GitHub (HTTPS), run:

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

    Or (SSH):

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

    Build the Mithril Signer binary

    First, switch to build a 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**

    Then, change the directory:

    cd mithril/mithril-signer

    Run tests (optional):

    make test

    Finally, build the executable:

    make build

    Download the pre-built binary

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

    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.

    ¹ The Linux binaries target glibc, and have a minimum requirement of glibc 2.31 (compatible with Ubuntu 20.04 or Debian Bullseye).

    Verifying the binary

    Verify the version of the binary

    You can 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

    ⚠️ Please verify that the displayed version matches the version described in the release/pre-release notes (refer to the Build from column in the Mithril networks table above).

    Verify the build

    Check that the Mithril Signer binary is working correctly by running the help function:

    ./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 wish to delve deeper, you can access logs at various levels 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)

    Installing the service

    Move the executable

    To move the executable to /opt/mithril, run:

    sudo mkdir -p /opt/mithril
    sudo mv mithril-signer /opt/mithril

    Set up 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 parameters 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}'
      • RELAY_ENDPOINT=http://192.168.1.50:3128 (optional): this is the endpoint of the Mithril relay, which is required for production deployment only. For naive deployment, do not set this variable in your environment file.
    tip

    Here is an example set of values for release-preprod that will be used in this guide in the tip boxes to illustrate some commands:

    • **YOUR_KES_SECRET_KEY_PATH**: /cardano/keys/kes.skey
    • **YOUR_OPERATIONAL_CERTIFICATE_PATH**: /cardano/keys/node.cert
    • **YOUR_CARDANO_NETWORK**: preprod
    • **YOUR_AGGREGATOR_ENDPOINT**: https://aggregator.release-preprod.api.mithril.network/aggregator
    • **YOUR_ERA_READER_ADAPTER_TYPE**: cardano-chain
    • **YOUR_ERA_READER_ADAPTER_PARAMS**: {"address": "addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx", "verification_key": "5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}
    • **YOUR_RELAY_ENDPOINT**: 192.168.1.50
    • **YOUR_RELAY_LISTENING_PORT**: 3128
    • **YOUR_BLOCK_PRODUCER_INTERNAL_IP**: 192.168.1.75
    • **YOUR_SIGNER_LOGS_PATH**: /var/log/syslog
    • **YOUR_PARTY_ID**: pool1hp72sauk0g0yqm4dzllz0pz6j93gewhllkzphn4hykkfmne43y

    First, create an environment file that will be used by the service:

    • for production deployment:
    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**
    RELAY_ENDPOINT=**YOUR_RELAY_ENDPOINT**
    EOF'
    tip

    Here is an example of the aforementioned command created with the example set for release-preprod:

    sudo bash -c 'cat > /opt/mithril/mithril-signer.env << EOF
    KES_SECRET_KEY_PATH=/cardano/keys/kes.skey
    OPERATIONAL_CERTIFICATE_PATH=/cardano/keys/node.cert
    NETWORK=preprod
    AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator
    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=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address": "addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx", "verification_key": "5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}
    RELAY_ENDPOINT=http://192.168.1.50:3128
    EOF'
    • for naive deployment:
    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'
    tip

    Here is an example of the aforementioned command created with the example set for release-preprod:

    sudo bash -c 'cat > /opt/mithril/mithril-signer.env << EOF
    KES_SECRET_KEY_PATH=/cardano/keys/kes.skey
    OPERATIONAL_CERTIFICATE_PATH=/cardano/keys/node.cert
    NETWORK=preprod
    AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator
    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=cardano-chain
    ERA_READER_ADAPTER_PARAMS={"address": "addr_test1qpkyv2ws0deszm67t840sdnruqgr492n80g3y96xw3p2ksk6suj5musy6w8lsg3yjd09cnpgctc2qh386rtxphxt248qr0npnx", "verification_key": "5b35352c3232382c3134342c38372c3133382c3133362c34382c382c31342c3138372c38352c3134382c39372c3233322c3235352c3232392c33382c3234342c3234372c3230342c3139382c31332c33312c3232322c32352c3136342c35322c3130322c39312c3132302c3230382c3134375d"}
    EOF'

    Then, create a /etc/systemd/system/mithril-signer.service description file for the 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

    Register the service to start on boot:

    sudo systemctl enable mithril-signer

    Monitor the status of the service:

    systemctl status mithril-signer.service

    Finally, monitor the logs of the service:

    tail /var/log/syslog

    Set up the Mithril relay node

    caution
    • For production deployment, the setup of the Mithril relay is performed on the Cardano relay machine.

    • For naive deployment: this step is not necessary.

    Configuring the Squid service

    info

    The Mithril relay node serves as a forward proxy, relaying traffic between the Mithril Signer and the Mithril Aggregator. When appropriately configured, it facilitates the security of the block-producing node. You can use squid to operate this forward proxy, and this section presents a recommended configuration.

    Verify that the service was correctly configured at installation:

    sudo systemctl status squid

    Make a copy of the original configuration:

    sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak

    Prepare the forward proxy configuration file:

    sudo bash -c 'cat > /etc/squid/squid.conf << EOF
    # Listening port (port 3128 is recommended)
    http_port **YOUR_RELAY_LISTENING_PORT**

    # ACL for internal IP of your block producer node
    acl relay_internal_ip src **YOUR_BLOCK_PRODUCER_INTERNAL_IP**

    # ACL for aggregator endpoint
    acl aggregator_domain dstdomain .mithril.network

    # ACL for SSL port only
    acl SSL_port port 443

    # Allowed traffic
    http_access allow relay_internal_ip aggregator_domain SSL_port

    # Do not disclose block producer internal IP
    forwarded_for delete

    # Turn off via header
    via off

    # Deny request for original source of a request
    follow_x_forwarded_for deny all

    # Anonymize request headers
    request_header_access Authorization allow all
    request_header_access Proxy-Authorization allow all
    request_header_access Cache-Control allow all
    request_header_access Content-Length allow all
    request_header_access Content-Type allow all
    request_header_access Date allow all
    request_header_access Host allow all
    request_header_access If-Modified-Since allow all
    request_header_access Pragma allow all
    request_header_access Accept allow all
    request_header_access Accept-Charset allow all
    request_header_access Accept-Encoding allow all
    request_header_access Accept-Language allow all
    request_header_access Connection allow all
    request_header_access All deny all

    # Disable cache
    cache deny all

    # Deny everything else
    http_access deny all
    EOF'
    tip

    Here is an example of the aforementioned command created with the example set for release-preprod:

    sudo bash -c 'cat > /etc/squid/squid.conf << EOF
    # Listening port (port 3128 is recommended)
    http_port 3128

    # ACL for internal IP of your block producer node
    acl relay_internal_ip src 192.168.1.75

    # ACL for aggregator endpoint
    acl aggregator_domain dstdomain .mithril.network

    # ACL for SSL port only
    acl SSL_port port 443

    # Allowed traffic
    http_access allow relay_internal_ip aggregator_domain SSL_port

    # Do not disclose block producer internal IP
    forwarded_for delete

    # Turn off via header
    via off

    # Deny request for original source of a request
    follow_x_forwarded_for deny all

    # Anonymize request headers
    request_header_access Authorization allow all
    request_header_access Proxy-Authorization allow all
    request_header_access Cache-Control allow all
    request_header_access Content-Length allow all
    request_header_access Content-Type allow all
    request_header_access Date allow all
    request_header_access Host allow all
    request_header_access If-Modified-Since allow all
    request_header_access Pragma allow all
    request_header_access Accept allow all
    request_header_access Accept-Charset allow all
    request_header_access Accept-Encoding allow all
    request_header_access Accept-Language allow all
    request_header_access Connection allow all
    request_header_access All deny all

    # Disable cache
    cache deny all

    # Deny everything else
    http_access deny all
    EOF'

    With this configuration, the proxy will:

    • accept incoming traffic originating from the internal IP of the block-producing machine
    • accept incoming traffic directed to the listening port of the proxy
    • accept incoming HTTPS traffic proxied to mithril.network domain hosts
    • anonymize completely the traffic and avoid disclosing any information about the block-producing machine
    • deny all other traffic

    Restart the service:

    sudo systemctl restart squid

    Ensure it runs properly:

    sudo systemctl status squid

    Finally, monitor service logs:

    tail /var/log/syslog
    info

    Here is the command to see squid access logs:

    tail /var/log/squid/access.log

    Firewall configuration

    info

    We assume that the Cardano relay machine is protected by a firewall. It is necessary to allow the proxied traffic, originating from the Cardano block producer, through this firewall.

    About the Cardano relay machine

    You need to allow incoming traffic on the listening port of the Mithril relay on the Cardano relay machine, originating from the Cardano block producer machine.

    Assuming you are using Uncomplicated Firewall (0.36+), the command to open that traffic is:

    sudo ufw allow from **YOUR_BLOCK_PRODUCER_INTERNAL_IP** to any port **YOUR_RELAY_LISTENING_PORT** proto tcp
    tip

    Here is an example of the aforementioned command created with the example set for release-preprod:

    sudo ufw allow from 192.168.1.75 to any port 3128 proto tcp

    Assuming you are using Iptables (1.8.7+), the command to open that traffic is:

    sudo iptables -A INPUT -s **YOUR_BLOCK_PRODUCER_INTERNAL_IP** -p tcp --dport **YOUR_RELAY_LISTENING_PORT** -j ACCEPT
    sudo iptables -L -v
    sudo service netfilter-persistent save
    tip

    Here is an example of the aforementioned command created with the example set for release-preprod:

    sudo iptables -A INPUT -s 192.168.1.75 -p tcp --dport 3128 -j ACCEPT
    sudo iptables -L -v
    sudo service netfilter-persistent save

    Verify the Mithril Signer deployment

    tip

    There is a delay of 2 epochs between the registration of the signer node and its ability to generate individual signatures. This delay is further explained in the Mithril certificate chain in depth documentation.

    Once this delay has passed, you should be able to observe your PoolId listed in some of the certificates accessible on the Mithril Explorer.

    Verify your signer is registered

    After installing the Mithril Signer, you can verify that your node is registered by checking your Mithril Signer node logs.

    First, download the script into the desired directory:

    wget https://mithril.network/doc/scripts/verify_signer_registration.sh

    Make the script executable:

    chmod +x verify_signer_registration.sh

    Finally, execute the script:

    SIGNER_LOGS_PATH=**YOUR_SIGNER_LOGS_PATH** ./verify_signer_registration.sh
    tip

    Here is an example command:

    SIGNER_LOGS_PATH=/var/log/syslog ./verify_signer_registration.sh

    If your signer is registered, you should see this message:

    >> Congrats, your signer node is registered!

    Otherwise, you should see this error message:

    >> Oops, your signer node is not registered. Check your configuration.

    Verify your signer contributes with individual signatures

    After waiting for two epochs, you will be able to verify that your signer is contributing with individual signatures.

    First, download the script into the desired directory:

    wget https://mithril.network/doc/scripts/verify_signer_signature.sh

    Make the script executable:

    chmod +x verify_signer_signature.sh

    Finally, execute the script:

    PARTY_ID=**YOUR_PARTY_ID** AGGREGATOR_ENDPOINT=**YOUR_AGGREGATOR_ENDPOINT** ./verify_signer_signature.sh
    tip

    Here is an example of the aforementioned command created with the example set for release-preprod:

    PARTY_ID=pool1hp72sauk0g0yqm4dzllz0pz6j93gewhllkzphn4hykkfmne43y AGGREGATOR_ENDPOINT=https://aggregator.release-preprod.api.mithril.network/aggregator ./verify_signer_signature.sh

    If your signer is contributing, you should see this message:

    >> Congrats, you have signed this certificate: https://aggregator.release-preprod.api.mithril.network/aggregator/certificate/el3p289b03a223244285b2ls10839846ae7a69f1e8362824a383f376f93f723f !

    Otherwise, you should see this error message:

    >> Oops, your party id was not found in the last 20 certificates. Please try again later.
    - + \ No newline at end of file diff --git a/doc/next/manual/welcome/index.html b/doc/next/manual/welcome/index.html index aa8cd5c3472..0eaacacda6a 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 five minutes.

    Introduction

    A Mithril network consists of three main components:

    • Mithril Aggregator:

    This node coordinates the production of the Cardano snapshot archives, working alongside Mithril Signer and Cardano nodes to generate associated certificates using Mithril multi-signatures.

    • Mithril Signer:

    This node is responsible for producing individual signatures, which are then combined into a multi-signature by the Mithril Aggregator. It operates in conjunction with a Cardano node (run by a stake pool operator (SPO)) holding stake in the network.

    • Mithril Client:

    This node verifies and restores a snapshot, facilitating lightning-fast bootstrapping of a Cardano full node. It plays a crucial role in ensuring the efficiency of the network.

    tip

    For more information about the Mithril protocol, see the section About Mithril.

    Get started

    To get started with the setup, make sure you have the following components and tools:

    Having these requirements in place will enable you to proceed smoothly with the setup and configuration for your project.

    Read the user manual

    In the Getting started guide in the user manual, you will find tutorials for:

    In the Developer docs, you will find documentation for:

    tip

    If you need any assistance, don't hesitate to contact 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 d5697586cda..53a851d4972 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 61fa7a6b632..8a2099f3bfb 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 444d5ec8c01..d7486e3566d 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 89d629bced8..5345eab2ebd 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 list, show or verify artifacts certified by Mithril certificates:

    1. Cardano full node snapshots
    2. Stake Distribution involved in Mithril signatures.
    tip

    Wallet restoration

    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.

    Certificate chain Verification

    The first thing the Mithril Client does is to 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 Artifacts Retrieval

    Once the certificate chain is verified, the Mithril Client will try to download a Full Cardano Node snapshot. The Mithril Aggregator is used as a provider for the Snapshots locations. The snapshots might be stored at several locations, the client will try the given locations until it founds one that responds OK.

    These artifacts are downloaded locally on a temporary directory and then uncompressed in the location given on the command line. The uncompressed files are used to compute the message that is then compared with the one that is signed by the Mithril Signers. If the verification fails, the uncompressed files are removed from the disk.

    Snapshot Restoration

    If the verification succeeds, the user can use these files to start a Cardano full node. At this point, the Cardano Node will take over and hopefully start adding new blocks to the ledger!

    Mithril Stake Distribution

    The client can be also used to verify and download the Stake Distribution used for signatures at the upcoming Cardano's Epoch. As of Snapshots, the certificate chain is validated, then the signers Verification Keys are checked. If valid, a fingerprint of the stake distribution is computed and tested against the one used by the certificate. If it is different, the verification stops, otherwise, the JSON representation of the stake distribution is saved on the disk for further use.

    - + \ 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 72c75cb4fd0..f588d731221 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 c15689f0470..5145ecbc612 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 56151510ccb..db0edbc763a 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 b02bd95599a..15202740cc7 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 4cd04f0bc81..e9525aac9fc 100644 --- a/doc/next/networks-matrix/index.html +++ b/doc/next/networks-matrix/index.html @@ -18,13 +18,13 @@ - +
    Version: Next 🚧

    Here is an updated list of all Mithril networks, including their configurations and current statuses:

    Last update: 07/21/2023

    release-mainnet

    Information-
    Mithril networkrelease-mainnet
    Cardano networkmainnet
    Cardano magic id-
    SupportedYes ✔️
    StatusBeta 🟢
    Aggregator endpointhttps://aggregator.release-mainnet.api.mithril.network/aggregator ↗️
    Genesis verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/genesis.vkey ↗️
    Era reader adapter typecardano-chain
    Era reader addresshttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.addr ↗️
    Era reader verification keyhttps://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-mainnet/era.vkey ↗️
    Build fromLatest release ↗️
    caution

    In this documentation, we use the following generic identifiers:

    • **YOUR_CARDANO_NETWORK** You need to replace this with the name of the network that runs on your Cardano node (e.g. preprod)
    • **YOUR_AGGREGATOR_ENDPOINT** You need to replace this with the endpoint of an aggregator that runs on the Cardano network you are targeting (e.g. https://aggregator.release-preprod.api.mithril.network/aggregator)
    • **YOUR_GENESIS_VERIFICATION_KEY** You need to replace this with the genesis verification key URL that runs on the Cardano network you are targeting (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/mithril-infra/configuration/release-preprod/genesis.vkey)
    • **YOUR_ERA_READER_ADAPTER_TYPE** You need to replace this with the era reader adapter type used by the Mithril network you are targeting (e.g. cardano-chain)
    • **YOUR_ERA_READER_ADDRESS** You need to replace this with the era reader address URL used by the Mithril network you are targeting (e.g. https://raw.githubusercontent.com/input-output-hk/mithril/main/address.addr)
    • **YOUR_ERA_READER_VERIFICATION_KEY** You need to replace this with the era reader verification key URL used by the Mithril network you are targeting (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 c4e290b7dbb..1c3685020da 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/bIPp8y8JezzgaqFHUm3Eg/_buildManifest.js b/explorer/_next/static/eXZaJQ1LpX0UGpuY2DjcQ/_buildManifest.js similarity index 100% rename from explorer/_next/static/bIPp8y8JezzgaqFHUm3Eg/_buildManifest.js rename to explorer/_next/static/eXZaJQ1LpX0UGpuY2DjcQ/_buildManifest.js diff --git a/explorer/_next/static/bIPp8y8JezzgaqFHUm3Eg/_ssgManifest.js b/explorer/_next/static/eXZaJQ1LpX0UGpuY2DjcQ/_ssgManifest.js similarity index 100% rename from explorer/_next/static/bIPp8y8JezzgaqFHUm3Eg/_ssgManifest.js rename to explorer/_next/static/eXZaJQ1LpX0UGpuY2DjcQ/_ssgManifest.js diff --git a/explorer/index.html b/explorer/index.html index c6fa9ebbb6b..4e2be4ec43a 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 7d579c0fa4e..8a078440bba 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/implementors/clap_builder/derive/trait.Args.js b/rust-doc/implementors/clap_builder/derive/trait.Args.js index ab1a7e0f2b6..bbe3b4c3653 100644 --- a/rust-doc/implementors/clap_builder/derive/trait.Args.js +++ b/rust-doc/implementors/clap_builder/derive/trait.Args.js @@ -1,4 +1,4 @@ (function() {var implementors = { "mithril_aggregator":[["impl Args for MainOpts"]], -"mithril_client":[["impl Args for SnapshotDownloadCommand"],["impl Args for SnapshotListCommand"],["impl Args for MithrilStakeDistributionListCommand"],["impl Args for MithrilStakeDistributionDownloadCommand"],["impl Args for SnapshotShowCommand"]] +"mithril_client":[["impl Args for SnapshotDownloadCommand"],["impl Args for SnapshotListCommand"],["impl Args for MithrilStakeDistributionListCommand"],["impl Args for SnapshotShowCommand"],["impl Args for MithrilStakeDistributionDownloadCommand"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/clap_builder/derive/trait.CommandFactory.js b/rust-doc/implementors/clap_builder/derive/trait.CommandFactory.js index eb65b769a3b..3f79df7b0f7 100644 --- a/rust-doc/implementors/clap_builder/derive/trait.CommandFactory.js +++ b/rust-doc/implementors/clap_builder/derive/trait.CommandFactory.js @@ -1,4 +1,4 @@ (function() {var implementors = { "mithril_aggregator":[["impl CommandFactory for MainOpts"]], -"mithril_client":[["impl CommandFactory for SnapshotShowCommand"],["impl CommandFactory for MithrilStakeDistributionListCommand"],["impl CommandFactory for MithrilStakeDistributionDownloadCommand"],["impl CommandFactory for SnapshotDownloadCommand"],["impl CommandFactory for SnapshotListCommand"]] +"mithril_client":[["impl CommandFactory for MithrilStakeDistributionDownloadCommand"],["impl CommandFactory for SnapshotDownloadCommand"],["impl CommandFactory for SnapshotListCommand"],["impl CommandFactory for SnapshotShowCommand"],["impl CommandFactory for MithrilStakeDistributionListCommand"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/clap_builder/derive/trait.FromArgMatches.js b/rust-doc/implementors/clap_builder/derive/trait.FromArgMatches.js index 2d4ccab54d8..ab92cc059c5 100644 --- a/rust-doc/implementors/clap_builder/derive/trait.FromArgMatches.js +++ b/rust-doc/implementors/clap_builder/derive/trait.FromArgMatches.js @@ -1,4 +1,4 @@ (function() {var implementors = { "mithril_aggregator":[["impl FromArgMatches for MainOpts"]], -"mithril_client":[["impl FromArgMatches for SnapshotCommands"],["impl FromArgMatches for MithrilStakeDistributionListCommand"],["impl FromArgMatches for MithrilStakeDistributionDownloadCommand"],["impl FromArgMatches for SnapshotListCommand"],["impl FromArgMatches for MithrilStakeDistributionCommands"],["impl FromArgMatches for SnapshotShowCommand"],["impl FromArgMatches for SnapshotDownloadCommand"]] +"mithril_client":[["impl FromArgMatches for SnapshotCommands"],["impl FromArgMatches for SnapshotShowCommand"],["impl FromArgMatches for SnapshotListCommand"],["impl FromArgMatches for MithrilStakeDistributionDownloadCommand"],["impl FromArgMatches for MithrilStakeDistributionCommands"],["impl FromArgMatches for SnapshotDownloadCommand"],["impl FromArgMatches for MithrilStakeDistributionListCommand"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/clap_builder/derive/trait.Parser.js b/rust-doc/implementors/clap_builder/derive/trait.Parser.js index f99abe1fe75..7d68fec9672 100644 --- a/rust-doc/implementors/clap_builder/derive/trait.Parser.js +++ b/rust-doc/implementors/clap_builder/derive/trait.Parser.js @@ -1,4 +1,4 @@ (function() {var implementors = { "mithril_aggregator":[["impl Parser for MainOpts"]], -"mithril_client":[["impl Parser for SnapshotShowCommand"],["impl Parser for MithrilStakeDistributionDownloadCommand"],["impl Parser for MithrilStakeDistributionListCommand"],["impl Parser for SnapshotDownloadCommand"],["impl Parser for SnapshotListCommand"]] +"mithril_client":[["impl Parser for MithrilStakeDistributionDownloadCommand"],["impl Parser for SnapshotDownloadCommand"],["impl Parser for SnapshotShowCommand"],["impl Parser for MithrilStakeDistributionListCommand"],["impl Parser for SnapshotListCommand"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/cli_table/row/trait.Row.js b/rust-doc/implementors/cli_table/row/trait.Row.js index d4291eec0c2..7c45eebbe31 100644 --- a/rust-doc/implementors/cli_table/row/trait.Row.js +++ b/rust-doc/implementors/cli_table/row/trait.Row.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mithril_client":[["impl Row for &MithrilStakeDistributionListItem"],["impl Row for MithrilStakeDistributionListItem"],["impl Row for &SnapshotListItem"],["impl Row for SnapshotFieldItem"],["impl Row for &SnapshotFieldItem"],["impl Row for SnapshotListItem"]] +"mithril_client":[["impl Row for MithrilStakeDistributionListItem"],["impl Row for &SnapshotListItem"],["impl Row for SnapshotListItem"],["impl Row for &MithrilStakeDistributionListItem"],["impl Row for &SnapshotFieldItem"],["impl Row for SnapshotFieldItem"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/core/clone/trait.Clone.js b/rust-doc/implementors/core/clone/trait.Clone.js index 23e5f792279..8852f5bf63c 100644 --- a/rust-doc/implementors/core/clone/trait.Clone.js +++ b/rust-doc/implementors/core/clone/trait.Clone.js @@ -1,7 +1,7 @@ (function() {var implementors = { -"mithril_aggregator":[["impl Clone for OpenMessageRecord"],["impl Clone for SingleSignatureRecord"],["impl Clone for OpenMessageWithSingleSignaturesRecord"],["impl Clone for EventMessage"],["impl Clone for OpenMessage"],["impl Clone for ExecutionEnvironment"],["impl Clone for AggregatorConfig"],["impl Clone for SignerRegistrationRecord"],["impl Clone for CertificateRecord"],["impl Clone for SnapshotUploaderType"],["impl Clone for SignedEntityRecord"],["impl Clone for SignerRegistrationRound"],["impl Clone for SignerRecord"],["impl Clone for MainOpts"],["impl Clone for DefaultConfiguration"],["impl Clone for Configuration"]], -"mithril_client":[["impl Clone for MithrilStakeDistributionListItem"],["impl Clone for SnapshotListCommand"],["impl Clone for SnapshotShowCommand"],["impl Clone for SnapshotFieldItem"],["impl Clone for SnapshotDownloadCommand"],["impl Clone for SnapshotCommands"],["impl Clone for SnapshotListItem"],["impl Clone for MithrilStakeDistributionListCommand"],["impl Clone for MithrilStakeDistributionCommands"],["impl Clone for MithrilStakeDistributionDownloadCommand"]], +"mithril_aggregator":[["impl Clone for DefaultConfiguration"],["impl Clone for MainOpts"],["impl Clone for SignerRegistrationRecord"],["impl Clone for OpenMessageRecord"],["impl Clone for SignedEntityRecord"],["impl Clone for OpenMessage"],["impl Clone for AggregatorConfig"],["impl Clone for SignerRecord"],["impl Clone for SingleSignatureRecord"],["impl Clone for ExecutionEnvironment"],["impl Clone for OpenMessageWithSingleSignaturesRecord"],["impl Clone for SignerRegistrationRound"],["impl Clone for CertificateRecord"],["impl Clone for Configuration"],["impl Clone for SnapshotUploaderType"],["impl Clone for EventMessage"]], +"mithril_client":[["impl Clone for SnapshotDownloadCommand"],["impl Clone for SnapshotListCommand"],["impl Clone for SnapshotFieldItem"],["impl Clone for MithrilStakeDistributionListCommand"],["impl Clone for MithrilStakeDistributionCommands"],["impl Clone for MithrilStakeDistributionDownloadCommand"],["impl Clone for SnapshotCommands"],["impl Clone for SnapshotShowCommand"],["impl Clone for SnapshotListItem"],["impl Clone for MithrilStakeDistributionListItem"]], "mithril_common":[["impl Clone for SignedEntityTypeDiscriminants"],["impl Clone for CardanoNetwork"],["impl Clone for ProtocolParameters"],["impl Clone for ImmutableFile"],["impl Clone for SignerWithStakeMessagePart"],["impl Clone for ProtocolSignerVerificationKey"],["impl Clone for CertificateListItemMessageMetadata"],["impl Clone for Epoch"],["impl Clone for EraMarker"],["impl Clone for AdapterType"],["impl Clone for SignerMessage"],["impl Clone for SingleSignatures"],["impl Clone for MithrilFixture"],["impl Clone for CertificateMetadata"],["impl Clone for InternalServerError"],["impl Clone for MithrilStakeDistributionMessage"],["impl Clone for ProtocolGenesisVerifier"],["impl Clone for Beacon"],["impl Clone for EraEpochToken"],["impl Clone for EpochSettings"],["impl Clone for EpochSettingsMessage"],["impl Clone for CertificatePendingMessage"],["impl Clone for DatabaseVersion"],["impl Clone for CertificatePending"],["impl Clone for ClientError"],["impl Clone for Sum6KesBytes"],["impl Clone for OpCert"],["impl Clone for SupportedEra"],["impl Clone for TxDatumFieldTypeName"],["impl Clone for TxDatum"],["impl Clone for SupportedEraIter"],["impl Clone for RegisterSignatureMessage"],["impl<T> Clone for SignedEntity<T>where\n T: Artifact + Clone,"],["impl Clone for EraMarkersPayload"],["impl Clone for CertificateMetadataMessage"],["impl Clone for ProtocolSingleSignature"],["impl Clone for EraMarkersVerifier"],["impl Clone for MithrilStakeDistribution"],["impl Clone for SnapshotMessage"],["impl Clone for ApplicationNodeType"],["impl Clone for ProtocolMessagePartKey"],["impl Clone for CertificateListItemMessage"],["impl Clone for SignerWithStake"],["impl Clone for CardanoCliRunner"],["impl Clone for RegisterSignerMessage"],["impl Clone for Snapshot"],["impl Clone for SnapshotListItemMessage"],["impl Clone for SourceAlias"],["impl Clone for CertificateMessage"],["impl Clone for Certificate"],["impl Clone for SignerFixture"],["impl Clone for ProtocolMessage"],["impl Clone for APIVersionProvider"],["impl Clone for SignedEntityType"],["impl Clone for Signer"],["impl Clone for MithrilStakeDistributionListItemMessage"],["impl Clone for BeaconComparison"]], -"mithril_signer":[["impl Clone for Configuration"],["impl Clone for DefaultConfiguration"],["impl Clone for RunnerError"]], +"mithril_signer":[["impl Clone for DefaultConfiguration"],["impl Clone for RunnerError"],["impl Clone for Configuration"]], "mithril_stm":[["impl<D: Clone + Digest> Clone for ClosedKeyReg<D>"],["impl Clone for StmInitializer"],["impl Clone for KeyReg"],["impl<D: Clone + Digest> Clone for StmSigner<D>"],["impl Clone for StmSig"],["impl Clone for StmParameters"],["impl Clone for AggregationError"],["impl Clone for RegisterError"],["impl<D: Clone + Clone + Digest> Clone for StmClerk<D>"],["impl<D: Clone + Clone + Digest + FixedOutput> Clone for StmAggrSig<D>"],["impl<D: Clone + Clone + Digest + FixedOutput> Clone for StmAggrVerificationKey<D>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/core/cmp/trait.Eq.js b/rust-doc/implementors/core/cmp/trait.Eq.js index 5b6f537e057..1da73eb33be 100644 --- a/rust-doc/implementors/core/cmp/trait.Eq.js +++ b/rust-doc/implementors/core/cmp/trait.Eq.js @@ -1,7 +1,7 @@ (function() {var implementors = { -"mithril_aggregator":[["impl Eq for ExecutionEnvironment"],["impl Eq for OpenMessage"],["impl Eq for SignerRegistrationRound"],["impl Eq for SnapshotUploaderType"],["impl Eq for OpenMessageRecord"]], -"mithril_client":[["impl Eq for SnapshotListItem"],["impl Eq for MithrilStakeDistributionListItem"],["impl Eq for SnapshotFieldItem"]], +"mithril_aggregator":[["impl Eq for SignerRegistrationRound"],["impl Eq for SnapshotUploaderType"],["impl Eq for OpenMessage"],["impl Eq for ExecutionEnvironment"],["impl Eq for OpenMessageRecord"]], +"mithril_client":[["impl Eq for SnapshotFieldItem"],["impl Eq for MithrilStakeDistributionListItem"],["impl Eq for SnapshotListItem"]], "mithril_common":[["impl Eq for ApplicationNodeType"],["impl Eq for SupportedEra"],["impl Eq for EraEpochToken"],["impl Eq for SnapshotListItemMessage"],["impl Eq for SignedEntityTypeDiscriminants"],["impl Eq for SingleSignatures"],["impl Eq for RegisterSignerMessage"],["impl Eq for Epoch"],["impl Eq for Beacon"],["impl Eq for CardanoNetwork"],["impl Eq for ClientError"],["impl Eq for EraMarkersPayload"],["impl Eq for OpCert"],["impl Eq for TxDatumFieldTypeName"],["impl Eq for TxDatum"],["impl Eq for ImmutableFile"],["impl Eq for SignerWithStakeMessagePart"],["impl Eq for AdapterType"],["impl Eq for Snapshot"],["impl Eq for SqlMigration"],["impl Eq for SnapshotMessage"],["impl Eq for Signer"],["impl Eq for BeaconComparison"],["impl Eq for SignerMessage"],["impl Eq for EraMarker"],["impl Eq for MithrilStakeDistributionListItemMessage"],["impl Eq for SignerWithStake"],["impl Eq for ProtocolRegistrationErrorWrapper"],["impl Eq for ProtocolSignerVerificationKey"],["impl Eq for SignedEntityType"],["impl Eq for ProtocolMessagePartKey"],["impl Eq for InternalServerError"],["impl Eq for BeaconComparisonError"],["impl Eq for DatabaseVersion"],["impl Eq for RegisterSignatureMessage"],["impl Eq for ProtocolSingleSignature"],["impl Eq for ProtocolMessage"]], -"mithril_signer":[["impl Eq for SignerState"],["impl Eq for RunnerError"]], +"mithril_signer":[["impl Eq for RunnerError"],["impl Eq for SignerState"]], "mithril_stm":[["impl Eq for KeyReg"],["impl<D: Eq + Digest> Eq for ClosedKeyReg<D>"],["impl Eq for RegisterError"],["impl Eq for StmSig"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/core/cmp/trait.PartialEq.js b/rust-doc/implementors/core/cmp/trait.PartialEq.js index bced3a617ef..12ddc053ee6 100644 --- a/rust-doc/implementors/core/cmp/trait.PartialEq.js +++ b/rust-doc/implementors/core/cmp/trait.PartialEq.js @@ -1,7 +1,7 @@ (function() {var implementors = { -"mithril_aggregator":[["impl PartialEq<SingleSignatureRecord> for SingleSignatureRecord"],["impl PartialEq<CertificateRecord> for CertificateRecord"],["impl PartialEq<ExecutionEnvironment> for ExecutionEnvironment"],["impl PartialEq<EpochSettingRecord> for EpochSettingRecord"],["impl PartialEq<SignerRecord> for SignerRecord"],["impl PartialEq<OpenMessageRecord> for OpenMessageRecord"],["impl PartialEq<SignedEntityRecord> for SignedEntityRecord"],["impl PartialEq<SignerRegistrationRound> for SignerRegistrationRound"],["impl PartialEq<StakePool> for StakePool"],["impl PartialEq<SignerRegistrationRecord> for SignerRegistrationRecord"],["impl PartialEq<OpenMessage> for OpenMessage"],["impl PartialEq<SnapshotUploaderType> for SnapshotUploaderType"]], -"mithril_client":[["impl PartialEq<SnapshotFieldItem> for SnapshotFieldItem"],["impl PartialEq<SnapshotListItem> for SnapshotListItem"],["impl PartialEq<MithrilStakeDistributionListItem> for MithrilStakeDistributionListItem"]], +"mithril_aggregator":[["impl PartialEq<SignedEntityRecord> for SignedEntityRecord"],["impl PartialEq<SignerRegistrationRound> for SignerRegistrationRound"],["impl PartialEq<SingleSignatureRecord> for SingleSignatureRecord"],["impl PartialEq<ExecutionEnvironment> for ExecutionEnvironment"],["impl PartialEq<SignerRegistrationRecord> for SignerRegistrationRecord"],["impl PartialEq<SignerRecord> for SignerRecord"],["impl PartialEq<OpenMessageRecord> for OpenMessageRecord"],["impl PartialEq<EpochSettingRecord> for EpochSettingRecord"],["impl PartialEq<OpenMessage> for OpenMessage"],["impl PartialEq<SnapshotUploaderType> for SnapshotUploaderType"],["impl PartialEq<CertificateRecord> for CertificateRecord"],["impl PartialEq<StakePool> for StakePool"]], +"mithril_client":[["impl PartialEq<MithrilStakeDistributionListItem> for MithrilStakeDistributionListItem"],["impl PartialEq<SnapshotFieldItem> for SnapshotFieldItem"],["impl PartialEq<SnapshotListItem> for SnapshotListItem"]], "mithril_common":[["impl PartialEq<Snapshot> for Snapshot"],["impl PartialEq<CertificateMessage> for CertificateMessage"],["impl PartialEq<DatabaseVersion> for DatabaseVersion"],["impl PartialEq<CertificateListItemMessage> for CertificateListItemMessage"],["impl PartialEq<EpochSettingsMessage> for EpochSettingsMessage"],["impl PartialEq<CertificatePending> for CertificatePending"],["impl PartialEq<CardanoNetwork> for CardanoNetwork"],["impl PartialEq<ProtocolParameters> for ProtocolParameters"],["impl PartialEq<CertificateListItemMessageMetadata> for CertificateListItemMessageMetadata"],["impl PartialEq<SignedEntityType> for SignedEntityType"],["impl PartialEq<RegisterSignatureMessage> for RegisterSignatureMessage"],["impl PartialEq<Epoch> for u64"],["impl PartialEq<Epoch> for Epoch"],["impl PartialEq<AdapterType> for AdapterType"],["impl PartialEq<ImmutableFile> for ImmutableFile"],["impl PartialEq<ProtocolSingleSignature> for ProtocolSingleSignature"],["impl PartialEq<SignerWithStake> for SignerWithStake"],["impl PartialEq<Certificate> for Certificate"],["impl PartialEq<MithrilStakeDistribution> for MithrilStakeDistribution"],["impl PartialEq<InternalServerError> for InternalServerError"],["impl PartialEq<SnapshotMessage> for SnapshotMessage"],["impl PartialEq<u64> for Epoch"],["impl PartialEq<EraMarker> for EraMarker"],["impl PartialEq<EraMarkersPayload> for EraMarkersPayload"],["impl PartialEq<ApplicationNodeType> for ApplicationNodeType"],["impl PartialEq<CertificatePendingMessage> for CertificatePendingMessage"],["impl PartialEq<EraEpochToken> for EraEpochToken"],["impl PartialEq<u64> for &Epoch"],["impl PartialEq<ProtocolMessage> for ProtocolMessage"],["impl PartialEq<SingleSignatures> for SingleSignatures"],["impl PartialEq<TxDatumFieldTypeName> for TxDatumFieldTypeName"],["impl PartialEq<SupportedEra> for SupportedEra"],["impl PartialEq<MithrilStakeDistributionListItemMessage> for MithrilStakeDistributionListItemMessage"],["impl PartialEq<BeaconComparison> for BeaconComparison"],["impl PartialEq<ProtocolRegistrationErrorWrapper> for ProtocolRegistrationErrorWrapper"],["impl PartialEq<SignerWithStakeMessagePart> for SignerWithStakeMessagePart"],["impl PartialEq<EpochSettings> for EpochSettings"],["impl PartialEq<CertificateMetadata> for CertificateMetadata"],["impl PartialEq<SnapshotListItemMessage> for SnapshotListItemMessage"],["impl PartialEq<BeaconComparisonError> for BeaconComparisonError"],["impl PartialEq<ClientError> for ClientError"],["impl PartialEq<SqlMigration> for SqlMigration"],["impl PartialEq<OpCert> for OpCert"],["impl PartialEq<Beacon> for Beacon"],["impl PartialEq<SignerMessage> for SignerMessage"],["impl PartialEq<MithrilStakeDistributionMessage> for MithrilStakeDistributionMessage"],["impl PartialEq<ProtocolMessagePartKey> for ProtocolMessagePartKey"],["impl PartialEq<&Epoch> for u64"],["impl PartialEq<RegisterSignerMessage> for RegisterSignerMessage"],["impl PartialEq<TxDatum> for TxDatum"],["impl PartialEq<Signer> for Signer"],["impl PartialEq<ProtocolSignerVerificationKey> for ProtocolSignerVerificationKey"],["impl PartialEq<SignedEntityTypeDiscriminants> for SignedEntityTypeDiscriminants"],["impl PartialEq<CertificateMetadataMessage> for CertificateMetadataMessage"]], -"mithril_signer":[["impl PartialEq<SignerState> for SignerState"],["impl PartialEq<RunnerError> for RunnerError"]], +"mithril_signer":[["impl PartialEq<RunnerError> for RunnerError"],["impl PartialEq<SignerState> for SignerState"]], "mithril_stm":[["impl PartialEq<StmParameters> for StmParameters"],["impl<D: PartialEq + Digest> PartialEq<ClosedKeyReg<D>> for ClosedKeyReg<D>"],["impl PartialEq<RegisterError> for RegisterError"],["impl PartialEq<StmSig> for StmSig"],["impl PartialEq<KeyReg> for KeyReg"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/core/cmp/trait.PartialOrd.js b/rust-doc/implementors/core/cmp/trait.PartialOrd.js index a404d05dd2a..fd23d5e5c94 100644 --- a/rust-doc/implementors/core/cmp/trait.PartialOrd.js +++ b/rust-doc/implementors/core/cmp/trait.PartialOrd.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"mithril_client":[["impl PartialOrd<SnapshotFieldItem> for SnapshotFieldItem"],["impl PartialOrd<SnapshotListItem> for SnapshotListItem"],["impl PartialOrd<MithrilStakeDistributionListItem> for MithrilStakeDistributionListItem"]], +"mithril_client":[["impl PartialOrd<SnapshotFieldItem> for SnapshotFieldItem"],["impl PartialOrd<MithrilStakeDistributionListItem> for MithrilStakeDistributionListItem"],["impl PartialOrd<SnapshotListItem> for SnapshotListItem"]], "mithril_common":[["impl PartialOrd<SignerWithStake> for SignerWithStake"],["impl PartialOrd<DatabaseVersion> for DatabaseVersion"],["impl PartialOrd<CardanoNetwork> for CardanoNetwork"],["impl PartialOrd<ProtocolMessagePartKey> for ProtocolMessagePartKey"],["impl PartialOrd<SqlMigration> for SqlMigration"],["impl PartialOrd<Beacon> for Beacon"],["impl PartialOrd<Epoch> for Epoch"],["impl PartialOrd<ImmutableFile> for ImmutableFile"]], "mithril_stm":[["impl PartialOrd<StmSig> for StmSig"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/core/convert/trait.From.js b/rust-doc/implementors/core/convert/trait.From.js index afc727004a4..f1b26288ce3 100644 --- a/rust-doc/implementors/core/convert/trait.From.js +++ b/rust-doc/implementors/core/convert/trait.From.js @@ -1,7 +1,7 @@ (function() {var implementors = { -"mithril_aggregator":[["impl From<Box<dyn Error + Send + Sync + 'static, Global>> for RuntimeError"],["impl From<SignerRegistrationRecord> for Signer"],["impl From<StoreError> for ProtocolError"],["impl From<EpochError> for ProtocolError"],["impl From<OpenMessageRecord> for OpenMessage"],["impl From<SignerRegistrationRecord> for SignerWithStake"],["impl From<OpenMessageWithSingleSignaturesRecord> for OpenMessageRecord"],["impl From<ConfigError> for DependenciesBuilderError"],["impl From<OpenMessageWithSingleSignaturesRecord> for OpenMessage"],["impl From<StoreError> for SignerRegistrationError"],["impl From<ProtocolRegistrationErrorWrapper> for ProtocolError"],["impl From<ProtocolRegistrationErrorWrapper> for SignerRegistrationError"],["impl From<Certificate> for CertificateRecord"],["impl From<Box<dyn Error + Send + Sync + 'static, Global>> for DependenciesBuilderError"],["impl From<CertificateRecord> for Certificate"],["impl From<SignedEntityRecord> for Snapshot"],["impl From<ExecutionEnvironment> for ValueKind"],["impl From<Error> for SnapshotError"]], -"mithril_client":[["impl From<SnapshotListItemMessage> for SnapshotListItem"],["impl From<MithrilStakeDistributionListItemMessage> for MithrilStakeDistributionListItem"]], +"mithril_aggregator":[["impl From<ExecutionEnvironment> for ValueKind"],["impl From<Box<dyn Error + Send + Sync + 'static, Global>> for DependenciesBuilderError"],["impl From<OpenMessageRecord> for OpenMessage"],["impl From<SignedEntityRecord> for Snapshot"],["impl From<OpenMessageWithSingleSignaturesRecord> for OpenMessageRecord"],["impl From<Certificate> for CertificateRecord"],["impl From<SignerRegistrationRecord> for SignerWithStake"],["impl From<CertificateRecord> for Certificate"],["impl From<Box<dyn Error + Send + Sync + 'static, Global>> for RuntimeError"],["impl From<StoreError> for ProtocolError"],["impl From<ConfigError> for DependenciesBuilderError"],["impl From<SignerRegistrationRecord> for Signer"],["impl From<OpenMessageWithSingleSignaturesRecord> for OpenMessage"],["impl From<StoreError> for SignerRegistrationError"],["impl From<ProtocolRegistrationErrorWrapper> for SignerRegistrationError"],["impl From<EpochError> for ProtocolError"],["impl From<ProtocolRegistrationErrorWrapper> for ProtocolError"],["impl From<Error> for SnapshotError"]], +"mithril_client":[["impl From<SnapshotListItemMessage> for SnapshotListItem"],["impl From<MithrilStakeDistributionListItemMessage> for MithrilStakeDistributionListItem"]], "mithril_common":[["impl From<ProtocolSignerVerificationKey> for StmVerificationKeyPoP"],["impl From<SignerWithStake> for SignerWithStakeMessagePart"],["impl From<ImmutableFileCreationError> for ImmutableFileListingError"],["impl From<&SignerFixture> for SignerWithStake"],["impl From<ChainObserverError> for BeaconProviderError"],["impl From<Error> for APIVersionProviderError"],["impl From<SignerWithStake> for Signer"],["impl From<ImmutableFileListingError> for ImmutableFileObserverError"],["impl From<CertificateRetrieverError> for CertificateVerifierError"],["impl From<Error> for ImmutableDigesterError"],["impl From<SignerFixture> for SignerWithStake"],["impl From<AdapterError> for StoreError"],["impl From<&SignerWithStake> for (ProtocolPartyId, ProtocolStake)"],["impl From<ImmutableDigesterCacheGetError> for ImmutableDigesterCacheProviderError"],["impl From<Error> for ProtocolGenesisError"],["impl From<ImmutableDigesterCacheStoreError> for ImmutableDigesterCacheProviderError"],["impl From<Error> for EraMarkersVerifierError"],["impl From<Error> for ImmutableFileListingError"],["impl From<ProtocolGenesisError> for CertificateVerifierError"],["impl From<StmSig> for ProtocolSingleSignature"],["impl From<VerificationKeyPoP> for ProtocolSignerVerificationKey"],["impl From<Error> for ImmutableDigesterCacheStoreError"],["impl From<SignedEntityType> for SignedEntityTypeDiscriminants"],["impl<'_enum> From<&'_enum SignedEntityType> for SignedEntityTypeDiscriminants"],["impl From<Error> for APIVersionProviderError"],["impl From<Error> for ImmutableDigesterCacheGetError"],["impl<'_enum> From<&'_enum TxDatumFieldValue> for TxDatumFieldTypeName"],["impl From<ParseIntError> for ImmutableFileCreationError"],["impl From<ProtocolParameters> for ProtocolParameters"],["impl From<Error> for ImmutableDigesterCacheGetError"],["impl From<Error> for ImmutableDigesterCacheStoreError"],["impl From<ImmutableFileListingError> for ImmutableDigesterError"],["impl From<ProtocolSingleSignature> for StmSig"],["impl From<TxDatumFieldValue> for TxDatumFieldTypeName"],["impl From<ImmutableFileObserverError> for BeaconProviderError"],["impl From<StmParameters> for ProtocolParameters"],["impl From<RegisterError> for ProtocolRegistrationErrorWrapper"]], -"mithril_signer":[["impl From<RunnerError> for RuntimeError"],["impl From<EpochError> for RuntimeError"],["impl From<Error> for AggregatorClientError"]], +"mithril_signer":[["impl From<EpochError> for RuntimeError"],["impl From<Error> for AggregatorClientError"],["impl From<RunnerError> for RuntimeError"]], "mithril_stm":[["impl<D: Clone + Digest + FixedOutput> From<&ClosedKeyReg<D>> for StmAggrVerificationKey<D>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/core/convert/trait.TryFrom.js b/rust-doc/implementors/core/convert/trait.TryFrom.js index 24144bc3713..c9e8e08a96b 100644 --- a/rust-doc/implementors/core/convert/trait.TryFrom.js +++ b/rust-doc/implementors/core/convert/trait.TryFrom.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"mithril_aggregator":[["impl TryFrom<SingleSignatureRecord> for SingleSignatures"],["impl TryFrom<Box<dyn Error + Send + Sync + 'static, Global>> for StakePoolDistributionServiceError"],["impl<T> TryFrom<SignedEntityRecord> for SignedEntity<T>where\n for<'a> T: Artifact + Serialize + Deserialize<'a>,"]], +"mithril_aggregator":[["impl TryFrom<SingleSignatureRecord> for SingleSignatures"],["impl<T> TryFrom<SignedEntityRecord> for SignedEntity<T>where\n for<'a> T: Artifact + Serialize + Deserialize<'a>,"],["impl TryFrom<Box<dyn Error + Send + Sync + 'static, Global>> for StakePoolDistributionServiceError"]], "mithril_common":[["impl TryFrom<String> for ProtocolSingleSignature"],["impl<'a> TryFrom<&'a mut Sum6KesBytes> for Sum6Kes<'a>"],["impl TryFrom<&str> for SupportedEra"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/core/default/trait.Default.js b/rust-doc/implementors/core/default/trait.Default.js index 3d3b02fcab0..4edd02c65e2 100644 --- a/rust-doc/implementors/core/default/trait.Default.js +++ b/rust-doc/implementors/core/default/trait.Default.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"mithril_aggregator":[["impl Default for DumbSnapshotter"],["impl Default for DefaultConfiguration"],["impl Default for DumbSnapshotUploader"]], +"mithril_aggregator":[["impl Default for DefaultConfiguration"],["impl Default for DumbSnapshotUploader"],["impl Default for DumbSnapshotter"]], "mithril_client":[["impl Default for SnapshotUnpacker"]], "mithril_common":[["impl<K, R> Default for FailStoreAdapter<K, R>"],["impl Default for CertificateMetadata"],["impl Default for MithrilFixtureBuilder"],["impl Default for MockChainObserver"],["impl Default for SnapshotMessage"],["impl Default for FakeObserver"],["impl Default for SignerMessage"],["impl Default for SignerWithStakeMessagePart"],["impl Default for SourceAlias"],["impl Default for Projection"],["impl Default for InternalServerError"],["impl Default for Beacon"],["impl Default for CertificateListItemMessageMetadata"],["impl Default for SnapshotListItemMessage"],["impl Default for WhereCondition"],["impl Default for MithrilStakeDistributionSignableBuilder"],["impl Default for EpochSettingsMessage"],["impl Default for DummyAdapter"],["impl Default for Snapshot"],["impl Default for CertificateMetadataMessage"],["impl Default for MithrilStakeDistributionMessage"],["impl Default for MemoryImmutableFileDigestCacheProvider"],["impl Default for ClientError"],["impl Default for Certificate"],["impl Default for Epoch"],["impl Default for RegisterSignatureMessage"],["impl Default for ProtocolParameters"],["impl Default for DumbImmutableDigester"],["impl Default for DumbImmutableFileObserver"],["impl Default for ProtocolMessage"],["impl Default for EpochSettings"],["impl Default for CertificateMessage"],["impl<K, R> Default for DumbStoreAdapter<K, R>"],["impl Default for CertificateListItemMessage"],["impl Default for TxDatumBuilder"],["impl Default for MithrilStakeDistributionListItemMessage"]], "mithril_signer":[["impl Default for DefaultConfiguration"]], diff --git a/rust-doc/implementors/core/error/trait.Error.js b/rust-doc/implementors/core/error/trait.Error.js index 6277d420160..ea13e6372dd 100644 --- a/rust-doc/implementors/core/error/trait.Error.js +++ b/rust-doc/implementors/core/error/trait.Error.js @@ -1,7 +1,7 @@ (function() {var implementors = { -"mithril_aggregator":[["impl Error for SignerRegistrationError"],["impl Error for RuntimeError"],["impl Error for DependenciesBuilderError"],["impl Error for CertifierServiceError"],["impl Error for ProtocolError"],["impl Error for SnapshotError"],["impl Error for StakePoolDistributionServiceError"]], -"mithril_client":[["impl Error for SnapshotClientError"],["impl Error for SnapshotServiceError"],["impl Error for SnapshotUnpackerError"],["impl Error for AggregatorHTTPClientError"],["impl Error for MithrilStakeDistributionServiceError"]], +"mithril_aggregator":[["impl Error for StakePoolDistributionServiceError"],["impl Error for SignerRegistrationError"],["impl Error for ProtocolError"],["impl Error for DependenciesBuilderError"],["impl Error for CertifierServiceError"],["impl Error for SnapshotError"],["impl Error for RuntimeError"]], +"mithril_client":[["impl Error for AggregatorHTTPClientError"],["impl Error for SnapshotServiceError"],["impl Error for SnapshotClientError"],["impl Error for SnapshotUnpackerError"],["impl Error for MithrilStakeDistributionServiceError"]], "mithril_common":[["impl Error for EpochError"],["impl Error for StoreError"],["impl Error for ProtocolInitializerErrorWrapper"],["impl Error for ImmutableDigesterCacheProviderError"],["impl Error for ImmutableDigesterError"],["impl Error for ProtocolGenesisError"],["impl Error for EraReaderError"],["impl Error for CertificateVerifierError"],["impl Error for AdapterError"],["impl Error for ImmutableFileCreationError"],["impl Error for UnsupportedEraError"],["impl Error for CertificateGenesisProducerError"],["impl Error for ImmutableDigesterCacheGetError"],["impl Error for EraMarkersVerifierError"],["impl Error for ImmutableFileListingError"],["impl Error for BeaconProviderError"],["impl Error for ImmutableFileObserverError"],["impl Error for CertificateRetrieverError"],["impl Error for SignerBuilderError"],["impl Error for ProtocolRegistrationErrorWrapper"],["impl Error for TxDatumError"],["impl Error for APIVersionProviderError"],["impl Error for HydrationError"],["impl Error for ImmutableDigesterCacheStoreError"],["impl Error for ChainObserverError"],["impl Error for BeaconComparisonError"]], -"mithril_signer":[["impl Error for RuntimeError"],["impl Error for AggregatorClientError"],["impl Error for SingleSignerError"],["impl Error for RunnerError"]], +"mithril_signer":[["impl Error for SingleSignerError"],["impl Error for RuntimeError"],["impl Error for AggregatorClientError"],["impl Error for RunnerError"]], "mithril_stm":[["impl Error for AggregationError"],["impl Error for RegisterError"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/core/fmt/trait.Debug.js b/rust-doc/implementors/core/fmt/trait.Debug.js index 2383e85445e..336afc8f188 100644 --- a/rust-doc/implementors/core/fmt/trait.Debug.js +++ b/rust-doc/implementors/core/fmt/trait.Debug.js @@ -1,7 +1,7 @@ (function() {var implementors = { -"mithril_aggregator":[["impl Debug for Configuration"],["impl Debug for SnapshotUploaderType"],["impl Debug for ProtocolError"],["impl Debug for OpenMessageRecord"],["impl Debug for SingleSignatureRecord"],["impl Debug for SignerRegistrationRecord"],["impl Debug for SnapshotError"],["impl Debug for StakePool"],["impl Debug for OpenMessage"],["impl Debug for AggregatorConfig"],["impl Debug for EventMessage"],["impl Debug for ExecutionEnvironment"],["impl Debug for SignerRegistrationRound"],["impl Debug for EpochSettingRecord"],["impl Debug for SignerRegistrationError"],["impl Debug for SignerRecord"],["impl Debug for OpenMessageWithSingleSignaturesRecord"],["impl Debug for MainOpts"],["impl Debug for DependenciesBuilderError"],["impl Debug for RuntimeError"],["impl Debug for StakePoolDistributionServiceError"],["impl Debug for CertificateRecord"],["impl Debug for SignedEntityRecord"],["impl Debug for CertifierServiceError"],["impl Debug for DefaultConfiguration"]], -"mithril_client":[["impl Debug for SnapshotServiceError"],["impl Debug for MithrilStakeDistributionDownloadCommand"],["impl Debug for SnapshotUnpackerError"],["impl Debug for MithrilStakeDistributionCommands"],["impl Debug for SnapshotListItem"],["impl Debug for SnapshotFieldItem"],["impl Debug for SnapshotCommands"],["impl Debug for MithrilStakeDistributionServiceError"],["impl Debug for SnapshotListCommand"],["impl Debug for MithrilStakeDistributionListItem"],["impl Debug for SnapshotDownloadCommand"],["impl Debug for SnapshotShowCommand"],["impl Debug for MithrilStakeDistributionListCommand"],["impl Debug for AggregatorHTTPClientError"],["impl Debug for SnapshotClientError"]], +"mithril_aggregator":[["impl Debug for ExecutionEnvironment"],["impl Debug for SnapshotUploaderType"],["impl Debug for SnapshotError"],["impl Debug for SignerRecord"],["impl Debug for EpochSettingRecord"],["impl Debug for RuntimeError"],["impl Debug for Configuration"],["impl Debug for StakePool"],["impl Debug for SignerRegistrationRound"],["impl Debug for CertificateRecord"],["impl Debug for AggregatorConfig"],["impl Debug for SignerRegistrationRecord"],["impl Debug for MainOpts"],["impl Debug for EventMessage"],["impl Debug for DependenciesBuilderError"],["impl Debug for OpenMessageWithSingleSignaturesRecord"],["impl Debug for SingleSignatureRecord"],["impl Debug for OpenMessage"],["impl Debug for StakePoolDistributionServiceError"],["impl Debug for SignerRegistrationError"],["impl Debug for OpenMessageRecord"],["impl Debug for ProtocolError"],["impl Debug for SignedEntityRecord"],["impl Debug for CertifierServiceError"],["impl Debug for DefaultConfiguration"]], +"mithril_client":[["impl Debug for MithrilStakeDistributionListItem"],["impl Debug for SnapshotCommands"],["impl Debug for SnapshotClientError"],["impl Debug for SnapshotUnpackerError"],["impl Debug for SnapshotDownloadCommand"],["impl Debug for SnapshotShowCommand"],["impl Debug for MithrilStakeDistributionListCommand"],["impl Debug for SnapshotServiceError"],["impl Debug for MithrilStakeDistributionCommands"],["impl Debug for SnapshotListItem"],["impl Debug for MithrilStakeDistributionServiceError"],["impl Debug for SnapshotListCommand"],["impl Debug for SnapshotFieldItem"],["impl Debug for AggregatorHTTPClientError"],["impl Debug for MithrilStakeDistributionDownloadCommand"]], "mithril_common":[["impl Debug for TxDatumError"],["impl Debug for SnapshotMessage"],["impl Debug for ImmutableDigesterCacheGetError"],["impl Debug for EraMarkersSigner"],["impl Debug for AdapterError"],["impl Debug for SignerMessage"],["impl Debug for CertificateMetadataMessage"],["impl Debug for EpochSettingsMessage"],["impl Debug for CertificatePending"],["impl Debug for SignerWithStakeMessagePart"],["impl Debug for UnsupportedEraError"],["impl Debug for CertificateGenesisProducer"],["impl Debug for Epoch"],["impl Debug for ProtocolGenesisSigner"],["impl Debug for MithrilStakeDistribution"],["impl Debug for SignedEntityTypeDiscriminants"],["impl Debug for CertificateMetadata"],["impl Debug for Certificate"],["impl Debug for CertificatePendingMessage"],["impl Debug for SignedEntityType"],["impl Debug for RegisterSignerMessage"],["impl Debug for MithrilStakeDistributionListItemMessage"],["impl Debug for EraMarkersVerifierError"],["impl Debug for ProtocolGenesisError"],["impl Debug for Snapshot"],["impl Debug for MithrilStakeDistributionMessage"],["impl Debug for RegisterSignatureMessage"],["impl Debug for CardanoCliRunner"],["impl Debug for SignerWithStake"],["impl Debug for ProtocolSingleSignature"],["impl<T> Debug for SignedEntity<T>where\n T: Artifact + Debug,"],["impl Debug for CertificateRetrieverError"],["impl Debug for ProtocolGenesisVerifier"],["impl Debug for SignerBuilderError"],["impl Debug for ImmutableFileListingError"],["impl Debug for ImmutableFile"],["impl Debug for BeaconProviderError"],["impl Debug for MithrilFixture"],["impl Debug for APIVersionProviderError"],["impl Debug for ImmutableDigesterCacheProviderError"],["impl Debug for AdapterType"],["impl Debug for InternalServerError"],["impl Debug for SourceAlias"],["impl Debug for EraMarkersPayload"],["impl Debug for EraEpochToken"],["impl Debug for ProtocolSignerVerificationKey"],["impl Debug for EpochSettings"],["impl Debug for MockChainObserver"],["impl Debug for SingleSignatures"],["impl Debug for SupportedEra"],["impl Debug for OpCert"],["impl Debug for TxDatumFieldTypeName"],["impl Debug for SignerFixture"],["impl Debug for TxDatumBuilder"],["impl Debug for CertificateListItemMessageMetadata"],["impl Debug for EraMarkersVerifier"],["impl Debug for ProtocolMessage"],["impl Debug for ProtocolInitializerErrorWrapper"],["impl Debug for ImmutableDigesterError"],["impl Debug for CertificateListItemMessage"],["impl Debug for SignerBuilder"],["impl Debug for ImmutableFileCreationError"],["impl Debug for ChainObserverError"],["impl Debug for SupportedEraIter"],["impl Debug for CertificateGenesisProducerError"],["impl Debug for Beacon"],["impl Debug for BeaconComparisonError"],["impl Debug for ProtocolParameters"],["impl Debug for BeaconComparison"],["impl Debug for ClientError"],["impl Debug for Signer"],["impl Debug for ImmutableDigesterCacheStoreError"],["impl Debug for TxDatumFieldValue"],["impl Debug for ImmutableFileObserverError"],["impl Debug for ProtocolRegistrationErrorWrapper"],["impl Debug for HydrationError"],["impl Debug for EraReaderError"],["impl Debug for ProtocolMessagePartKey"],["impl Debug for SnapshotListItemMessage"],["impl Debug for CertificateVerifierError"],["impl Debug for ColdKeyGenerator"],["impl Debug for ApplicationNodeType"],["impl Debug for CardanoNetwork"],["impl Debug for StoreError"],["impl Debug for SqlMigration"],["impl Debug for EpochError"],["impl Debug for DatabaseVersion"],["impl Debug for TxDatum"],["impl Debug for EraMarker"],["impl Debug for CertificateMessage"]], -"mithril_signer":[["impl Debug for DefaultConfiguration"],["impl Debug for AggregatorClientError"],["impl Debug for SingleSignerError"],["impl Debug for RunnerError"],["impl Debug for Configuration"],["impl Debug for RuntimeError"],["impl Debug for SignerState"]], +"mithril_signer":[["impl Debug for AggregatorClientError"],["impl Debug for RuntimeError"],["impl Debug for Configuration"],["impl Debug for SingleSignerError"],["impl Debug for RunnerError"],["impl Debug for SignerState"],["impl Debug for DefaultConfiguration"]], "mithril_stm":[["impl<D: Debug + Clone + Digest + FixedOutput> Debug for StmAggrVerificationKey<D>"],["impl Debug for AggregationError"],["impl Debug for StmParameters"],["impl Debug for StmInitializer"],["impl<D: Debug + Digest> Debug for ClosedKeyReg<D>"],["impl<D: Debug + Clone + Digest> Debug for StmClerk<D>"],["impl Debug for KeyReg"],["impl Debug for RegisterError"],["impl Debug for StmSig"],["impl<D: Debug + Digest> Debug for StmSigner<D>"],["impl<D: Debug + Clone + Digest + FixedOutput> Debug for StmAggrSig<D>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/core/fmt/trait.Display.js b/rust-doc/implementors/core/fmt/trait.Display.js index 364293b465e..ce58e040bf3 100644 --- a/rust-doc/implementors/core/fmt/trait.Display.js +++ b/rust-doc/implementors/core/fmt/trait.Display.js @@ -1,7 +1,7 @@ (function() {var implementors = { -"mithril_aggregator":[["impl Display for RuntimeError"],["impl Display for DependenciesBuilderError"],["impl Display for StakePoolDistributionServiceError"],["impl Display for ProtocolError"],["impl Display for CertifierServiceError"],["impl Display for SignerRegistrationError"],["impl Display for SnapshotError"]], -"mithril_client":[["impl Display for MithrilStakeDistributionServiceError"],["impl Display for SnapshotClientError"],["impl Display for SnapshotUnpackerError"],["impl Display for SnapshotServiceError"],["impl Display for AggregatorHTTPClientError"]], +"mithril_aggregator":[["impl Display for CertifierServiceError"],["impl Display for DependenciesBuilderError"],["impl Display for SignerRegistrationError"],["impl Display for ProtocolError"],["impl Display for RuntimeError"],["impl Display for SnapshotError"],["impl Display for StakePoolDistributionServiceError"]], +"mithril_client":[["impl Display for SnapshotServiceError"],["impl Display for SnapshotUnpackerError"],["impl Display for AggregatorHTTPClientError"],["impl Display for MithrilStakeDistributionServiceError"],["impl Display for SnapshotClientError"]], "mithril_common":[["impl Display for HydrationError"],["impl Display for ImmutableFileObserverError"],["impl Display for ImmutableFileListingError"],["impl Display for ImmutableFileCreationError"],["impl Display for TxDatumFieldValue"],["impl Display for SupportedEra"],["impl Display for ImmutableDigesterError"],["impl Display for ApplicationNodeType"],["impl Display for ProtocolMessagePartKey"],["impl Display for ProtocolGenesisError"],["impl Display for TxDatumFieldTypeName"],["impl Display for AdapterError"],["impl Display for EraReaderError"],["impl Display for BeaconProviderError"],["impl Display for ProtocolInitializerErrorWrapper"],["impl Display for EraMarkersVerifierError"],["impl Display for APIVersionProviderError"],["impl Display for ImmutableDigesterCacheGetError"],["impl Display for ChainObserverError"],["impl Display for StoreError"],["impl Display for SignedEntityType"],["impl Display for SignerBuilderError"],["impl Display for UnsupportedEraError"],["impl Display for Epoch"],["impl Display for CertificateGenesisProducerError"],["impl Display for Beacon"],["impl Display for CertificateRetrieverError"],["impl Display for CardanoNetwork"],["impl Display for ImmutableDigesterCacheProviderError"],["impl Display for EpochError"],["impl Display for ImmutableDigesterCacheStoreError"],["impl Display for ProtocolRegistrationErrorWrapper"],["impl Display for CertificateVerifierError"],["impl Display for BeaconComparisonError"],["impl Display for TxDatumError"]], -"mithril_signer":[["impl Display for RunnerError"],["impl Display for SingleSignerError"],["impl Display for RuntimeError"],["impl Display for SignerState"],["impl Display for AggregatorClientError"]], +"mithril_signer":[["impl Display for RuntimeError"],["impl Display for SignerState"],["impl Display for AggregatorClientError"],["impl Display for RunnerError"],["impl Display for SingleSignerError"]], "mithril_stm":[["impl Display for RegisterError"],["impl Display for AggregationError"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/core/marker/trait.StructuralEq.js b/rust-doc/implementors/core/marker/trait.StructuralEq.js index 5a80fb063f4..b7b521d3463 100644 --- a/rust-doc/implementors/core/marker/trait.StructuralEq.js +++ b/rust-doc/implementors/core/marker/trait.StructuralEq.js @@ -1,6 +1,6 @@ (function() {var implementors = { -"mithril_aggregator":[["impl StructuralEq for SnapshotUploaderType"],["impl StructuralEq for OpenMessage"],["impl StructuralEq for SignerRegistrationRound"],["impl StructuralEq for OpenMessageRecord"],["impl StructuralEq for ExecutionEnvironment"]], -"mithril_client":[["impl StructuralEq for SnapshotListItem"],["impl StructuralEq for SnapshotFieldItem"],["impl StructuralEq for MithrilStakeDistributionListItem"]], +"mithril_aggregator":[["impl StructuralEq for OpenMessage"],["impl StructuralEq for ExecutionEnvironment"],["impl StructuralEq for SnapshotUploaderType"],["impl StructuralEq for SignerRegistrationRound"],["impl StructuralEq for OpenMessageRecord"]], +"mithril_client":[["impl StructuralEq for SnapshotFieldItem"],["impl StructuralEq for MithrilStakeDistributionListItem"],["impl StructuralEq for SnapshotListItem"]], "mithril_common":[["impl StructuralEq for SnapshotListItemMessage"],["impl StructuralEq for EraMarkersPayload"],["impl StructuralEq for ProtocolSignerVerificationKey"],["impl StructuralEq for MithrilStakeDistributionListItemMessage"],["impl StructuralEq for RegisterSignerMessage"],["impl StructuralEq for Signer"],["impl StructuralEq for SignedEntityTypeDiscriminants"],["impl StructuralEq for Epoch"],["impl StructuralEq for ProtocolRegistrationErrorWrapper"],["impl StructuralEq for ProtocolMessage"],["impl StructuralEq for TxDatum"],["impl StructuralEq for SignerWithStakeMessagePart"],["impl StructuralEq for InternalServerError"],["impl StructuralEq for SupportedEra"],["impl StructuralEq for Snapshot"],["impl StructuralEq for SingleSignatures"],["impl StructuralEq for ApplicationNodeType"],["impl StructuralEq for RegisterSignatureMessage"],["impl StructuralEq for BeaconComparison"],["impl StructuralEq for ProtocolSingleSignature"],["impl StructuralEq for ProtocolMessagePartKey"],["impl StructuralEq for ImmutableFile"],["impl StructuralEq for Beacon"],["impl StructuralEq for BeaconComparisonError"],["impl StructuralEq for CardanoNetwork"],["impl StructuralEq for SignerWithStake"],["impl StructuralEq for EraMarker"],["impl StructuralEq for DatabaseVersion"],["impl StructuralEq for TxDatumFieldTypeName"],["impl StructuralEq for SignerMessage"],["impl StructuralEq for ClientError"],["impl StructuralEq for SnapshotMessage"],["impl StructuralEq for AdapterType"],["impl StructuralEq for OpCert"],["impl StructuralEq for EraEpochToken"],["impl StructuralEq for SignedEntityType"]], "mithril_signer":[["impl StructuralEq for SignerState"],["impl StructuralEq for RunnerError"]], "mithril_stm":[["impl StructuralEq for KeyReg"],["impl StructuralEq for RegisterError"],["impl<D: Digest> StructuralEq for ClosedKeyReg<D>"]] diff --git a/rust-doc/implementors/core/marker/trait.StructuralPartialEq.js b/rust-doc/implementors/core/marker/trait.StructuralPartialEq.js index 6bff19e030c..f62d884dc5d 100644 --- a/rust-doc/implementors/core/marker/trait.StructuralPartialEq.js +++ b/rust-doc/implementors/core/marker/trait.StructuralPartialEq.js @@ -1,6 +1,6 @@ (function() {var implementors = { -"mithril_aggregator":[["impl StructuralPartialEq for SignerRegistrationRecord"],["impl StructuralPartialEq for SingleSignatureRecord"],["impl StructuralPartialEq for ExecutionEnvironment"],["impl StructuralPartialEq for SnapshotUploaderType"],["impl StructuralPartialEq for OpenMessageRecord"],["impl StructuralPartialEq for SignerRecord"],["impl StructuralPartialEq for EpochSettingRecord"],["impl StructuralPartialEq for OpenMessage"],["impl StructuralPartialEq for SignerRegistrationRound"],["impl StructuralPartialEq for CertificateRecord"],["impl StructuralPartialEq for StakePool"],["impl StructuralPartialEq for SignedEntityRecord"]], -"mithril_client":[["impl StructuralPartialEq for SnapshotListItem"],["impl StructuralPartialEq for MithrilStakeDistributionListItem"],["impl StructuralPartialEq for SnapshotFieldItem"]], +"mithril_aggregator":[["impl StructuralPartialEq for SignerRecord"],["impl StructuralPartialEq for OpenMessageRecord"],["impl StructuralPartialEq for SignerRegistrationRound"],["impl StructuralPartialEq for SnapshotUploaderType"],["impl StructuralPartialEq for StakePool"],["impl StructuralPartialEq for ExecutionEnvironment"],["impl StructuralPartialEq for EpochSettingRecord"],["impl StructuralPartialEq for OpenMessage"],["impl StructuralPartialEq for SignerRegistrationRecord"],["impl StructuralPartialEq for CertificateRecord"],["impl StructuralPartialEq for SingleSignatureRecord"],["impl StructuralPartialEq for SignedEntityRecord"]], +"mithril_client":[["impl StructuralPartialEq for SnapshotListItem"],["impl StructuralPartialEq for SnapshotFieldItem"],["impl StructuralPartialEq for MithrilStakeDistributionListItem"]], "mithril_common":[["impl StructuralPartialEq for ProtocolMessage"],["impl StructuralPartialEq for AdapterType"],["impl StructuralPartialEq for EraEpochToken"],["impl StructuralPartialEq for SingleSignatures"],["impl StructuralPartialEq for SupportedEra"],["impl StructuralPartialEq for ApplicationNodeType"],["impl StructuralPartialEq for ClientError"],["impl StructuralPartialEq for ProtocolSignerVerificationKey"],["impl StructuralPartialEq for CertificateMetadata"],["impl StructuralPartialEq for CardanoNetwork"],["impl StructuralPartialEq for InternalServerError"],["impl StructuralPartialEq for RegisterSignatureMessage"],["impl StructuralPartialEq for Beacon"],["impl StructuralPartialEq for TxDatum"],["impl StructuralPartialEq for MithrilStakeDistributionListItemMessage"],["impl StructuralPartialEq for DatabaseVersion"],["impl StructuralPartialEq for CertificateMetadataMessage"],["impl StructuralPartialEq for EpochSettings"],["impl StructuralPartialEq for CertificatePending"],["impl StructuralPartialEq for CertificateListItemMessageMetadata"],["impl StructuralPartialEq for Snapshot"],["impl StructuralPartialEq for Certificate"],["impl StructuralPartialEq for EraMarkersPayload"],["impl StructuralPartialEq for EpochSettingsMessage"],["impl StructuralPartialEq for RegisterSignerMessage"],["impl StructuralPartialEq for BeaconComparison"],["impl StructuralPartialEq for CertificateMessage"],["impl StructuralPartialEq for SnapshotMessage"],["impl StructuralPartialEq for SignerWithStakeMessagePart"],["impl StructuralPartialEq for TxDatumFieldTypeName"],["impl StructuralPartialEq for MithrilStakeDistribution"],["impl StructuralPartialEq for CertificateListItemMessage"],["impl StructuralPartialEq for BeaconComparisonError"],["impl StructuralPartialEq for CertificatePendingMessage"],["impl StructuralPartialEq for ProtocolMessagePartKey"],["impl StructuralPartialEq for SignedEntityType"],["impl StructuralPartialEq for EraMarker"],["impl StructuralPartialEq for Epoch"],["impl StructuralPartialEq for OpCert"],["impl StructuralPartialEq for ImmutableFile"],["impl StructuralPartialEq for SnapshotListItemMessage"],["impl StructuralPartialEq for SignerMessage"],["impl StructuralPartialEq for ProtocolRegistrationErrorWrapper"],["impl StructuralPartialEq for SignedEntityTypeDiscriminants"],["impl StructuralPartialEq for MithrilStakeDistributionMessage"]], "mithril_signer":[["impl StructuralPartialEq for RunnerError"],["impl StructuralPartialEq for SignerState"]], "mithril_stm":[["impl StructuralPartialEq for StmParameters"],["impl StructuralPartialEq for KeyReg"],["impl StructuralPartialEq for RegisterError"],["impl<D: Digest> StructuralPartialEq for ClosedKeyReg<D>"]] diff --git a/rust-doc/implementors/mithril_common/certificate_chain/certificate_retriever/trait.CertificateRetriever.js b/rust-doc/implementors/mithril_common/certificate_chain/certificate_retriever/trait.CertificateRetriever.js index 024144be667..6ff16d2ee71 100644 --- a/rust-doc/implementors/mithril_common/certificate_chain/certificate_retriever/trait.CertificateRetriever.js +++ b/rust-doc/implementors/mithril_common/certificate_chain/certificate_retriever/trait.CertificateRetriever.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"mithril_aggregator":[["impl CertificateRetriever for CertificateRepository"]], -"mithril_client":[["impl CertificateRetriever for CertificateClient"]] +"mithril_aggregator":[["impl CertificateRetriever for CertificateRepository"]], +"mithril_client":[["impl CertificateRetriever for CertificateClient"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/mithril_common/messages/interface/trait.FromMessageAdapter.js b/rust-doc/implementors/mithril_common/messages/interface/trait.FromMessageAdapter.js index 0c826cff86b..54f6f7169bb 100644 --- a/rust-doc/implementors/mithril_common/messages/interface/trait.FromMessageAdapter.js +++ b/rust-doc/implementors/mithril_common/messages/interface/trait.FromMessageAdapter.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"mithril_client":[["impl FromMessageAdapter<SnapshotMessage, SignedEntity<Snapshot>> for FromSnapshotMessageAdapter"]], -"mithril_signer":[["impl FromMessageAdapter<EpochSettingsMessage, EpochSettings> for FromEpochSettingsAdapter"]] +"mithril_client":[["impl FromMessageAdapter<SnapshotMessage, SignedEntity<Snapshot>> for FromSnapshotMessageAdapter"]], +"mithril_signer":[["impl FromMessageAdapter<EpochSettingsMessage, EpochSettings> for FromEpochSettingsAdapter"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/mithril_common/messages/interface/trait.ToMessageAdapter.js b/rust-doc/implementors/mithril_common/messages/interface/trait.ToMessageAdapter.js index a5192af5952..48b7e7c4360 100644 --- a/rust-doc/implementors/mithril_common/messages/interface/trait.ToMessageAdapter.js +++ b/rust-doc/implementors/mithril_common/messages/interface/trait.ToMessageAdapter.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"mithril_aggregator":[["impl ToMessageAdapter<EpochSettings, EpochSettingsMessage> for ToEpochSettingsMessageAdapter"],["impl ToMessageAdapter<CertificatePending, CertificatePendingMessage> for ToCertificatePendingMessageAdapter"]], -"mithril_signer":[["impl ToMessageAdapter<(Epoch, Signer), RegisterSignerMessage> for ToRegisterSignerMessageAdapter"]] +"mithril_aggregator":[["impl ToMessageAdapter<CertificatePending, CertificatePendingMessage> for ToCertificatePendingMessageAdapter"],["impl ToMessageAdapter<EpochSettings, EpochSettingsMessage> for ToEpochSettingsMessageAdapter"]], +"mithril_signer":[["impl ToMessageAdapter<(Epoch, Signer), RegisterSignerMessage> for ToRegisterSignerMessageAdapter"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/mithril_common/messages/interface/trait.TryFromMessageAdapter.js b/rust-doc/implementors/mithril_common/messages/interface/trait.TryFromMessageAdapter.js index 91e4f3b4667..a7c89ce1e41 100644 --- a/rust-doc/implementors/mithril_common/messages/interface/trait.TryFromMessageAdapter.js +++ b/rust-doc/implementors/mithril_common/messages/interface/trait.TryFromMessageAdapter.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"mithril_aggregator":[["impl TryFromMessageAdapter<RegisterSignerMessage, Signer> for FromRegisterSignerAdapter"]], -"mithril_client":[["impl TryFromMessageAdapter<CertificateMessage, Certificate> for FromCertificateMessageAdapter"]], -"mithril_signer":[["impl TryFromMessageAdapter<CertificatePendingMessage, CertificatePending> for FromPendingCertificateMessageAdapter"]] +"mithril_aggregator":[["impl TryFromMessageAdapter<RegisterSignerMessage, Signer> for FromRegisterSignerAdapter"]], +"mithril_client":[["impl TryFromMessageAdapter<CertificateMessage, Certificate> for FromCertificateMessageAdapter"]], +"mithril_signer":[["impl TryFromMessageAdapter<CertificatePendingMessage, CertificatePending> for FromPendingCertificateMessageAdapter"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/mithril_common/sqlite/entity/trait.SqLiteEntity.js b/rust-doc/implementors/mithril_common/sqlite/entity/trait.SqLiteEntity.js index 0efa3226df9..f43b29fdad5 100644 --- a/rust-doc/implementors/mithril_common/sqlite/entity/trait.SqLiteEntity.js +++ b/rust-doc/implementors/mithril_common/sqlite/entity/trait.SqLiteEntity.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"mithril_aggregator":[["impl SqLiteEntity for StakePool"],["impl SqLiteEntity for Event"],["impl SqLiteEntity for SingleSignatureRecord"],["impl SqLiteEntity for OpenMessageWithSingleSignaturesRecord"],["impl SqLiteEntity for SignerRecord"],["impl SqLiteEntity for CertificateRecord"],["impl SqLiteEntity for SignedEntityRecord"],["impl SqLiteEntity for SignerRegistrationRecord"],["impl SqLiteEntity for OpenMessageRecord"],["impl SqLiteEntity for EpochSettingRecord"]], +"mithril_aggregator":[["impl SqLiteEntity for SingleSignatureRecord"],["impl SqLiteEntity for SignedEntityRecord"],["impl SqLiteEntity for OpenMessageRecord"],["impl SqLiteEntity for EpochSettingRecord"],["impl SqLiteEntity for SignerRecord"],["impl SqLiteEntity for OpenMessageWithSingleSignaturesRecord"],["impl SqLiteEntity for SignerRegistrationRecord"],["impl SqLiteEntity for Event"],["impl SqLiteEntity for StakePool"],["impl SqLiteEntity for CertificateRecord"]], "mithril_common":[] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/mithril_common/sqlite/provider/trait.Provider.js b/rust-doc/implementors/mithril_common/sqlite/provider/trait.Provider.js index 72015bf5734..52989758bca 100644 --- a/rust-doc/implementors/mithril_common/sqlite/provider/trait.Provider.js +++ b/rust-doc/implementors/mithril_common/sqlite/provider/trait.Provider.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"mithril_aggregator":[["impl<'conn> Provider<'conn> for InsertOrReplaceSignerRegistrationRecordProvider<'conn>"],["impl<'conn> Provider<'conn> for DeleteStakePoolProvider<'conn>"],["impl<'client> Provider<'client> for EpochSettingProvider<'client>"],["impl<'conn> Provider<'conn> for InsertSignerRecordProvider<'conn>"],["impl<'client> Provider<'client> for SignerRegistrationRecordProvider<'client>"],["impl<'conn> Provider<'conn> for DeleteSignerRegistrationRecordProvider<'conn>"],["impl<'client> Provider<'client> for StakePoolProvider<'client>"],["impl<'conn> Provider<'conn> for DeleteEpochSettingProvider<'conn>"],["impl<'client> Provider<'client> for SignedEntityRecordProvider<'client>"],["impl<'conn> Provider<'conn> for UpdateSignerRecordProvider<'conn>"],["impl<'client> Provider<'client> for CertificateRecordProvider<'client>"],["impl<'conn> Provider<'conn> for InsertCertificateRecordProvider<'conn>"],["impl<'conn> Provider<'conn> for InsertSignedEntityRecordProvider<'conn>"],["impl<'conn> Provider<'conn> for DeleteCertificateProvider<'conn>"],["impl<'conn> Provider<'conn> for UpdateSingleSignatureRecordProvider<'conn>"],["impl<'client> Provider<'client> for SingleSignatureRecordProvider<'client>"],["impl<'conn> Provider<'conn> for UpdateEpochSettingProvider<'conn>"],["impl<'conn> Provider<'conn> for InsertOrReplaceStakePoolProvider<'conn>"],["impl<'client> Provider<'client> for SignerRecordProvider<'client>"]], +"mithril_aggregator":[["impl<'conn> Provider<'conn> for DeleteSignerRegistrationRecordProvider<'conn>"],["impl<'conn> Provider<'conn> for DeleteEpochSettingProvider<'conn>"],["impl<'conn> Provider<'conn> for UpdateSignerRecordProvider<'conn>"],["impl<'conn> Provider<'conn> for DeleteCertificateProvider<'conn>"],["impl<'client> Provider<'client> for SingleSignatureRecordProvider<'client>"],["impl<'conn> Provider<'conn> for InsertSignedEntityRecordProvider<'conn>"],["impl<'client> Provider<'client> for EpochSettingProvider<'client>"],["impl<'client> Provider<'client> for CertificateRecordProvider<'client>"],["impl<'conn> Provider<'conn> for InsertSignerRecordProvider<'conn>"],["impl<'client> Provider<'client> for SignerRecordProvider<'client>"],["impl<'conn> Provider<'conn> for InsertOrReplaceStakePoolProvider<'conn>"],["impl<'conn> Provider<'conn> for DeleteStakePoolProvider<'conn>"],["impl<'conn> Provider<'conn> for UpdateSingleSignatureRecordProvider<'conn>"],["impl<'client> Provider<'client> for SignerRegistrationRecordProvider<'client>"],["impl<'client> Provider<'client> for SignedEntityRecordProvider<'client>"],["impl<'conn> Provider<'conn> for UpdateEpochSettingProvider<'conn>"],["impl<'conn> Provider<'conn> for InsertCertificateRecordProvider<'conn>"],["impl<'client> Provider<'client> for StakePoolProvider<'client>"],["impl<'conn> Provider<'conn> for InsertOrReplaceSignerRegistrationRecordProvider<'conn>"]], "mithril_common":[] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/mithril_common/store/stake_store/trait.StakeStorer.js b/rust-doc/implementors/mithril_common/store/stake_store/trait.StakeStorer.js index 682a1e7cc4e..843b57fdc8c 100644 --- a/rust-doc/implementors/mithril_common/store/stake_store/trait.StakeStorer.js +++ b/rust-doc/implementors/mithril_common/store/stake_store/trait.StakeStorer.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"mithril_aggregator":[["impl StakeStorer for StakePoolStore"]], +"mithril_aggregator":[["impl StakeStorer for StakePoolStore"]], "mithril_common":[] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/mithril_common/store/store_pruner/trait.StorePruner.js b/rust-doc/implementors/mithril_common/store/store_pruner/trait.StorePruner.js index f4234b014d2..8e96782d272 100644 --- a/rust-doc/implementors/mithril_common/store/store_pruner/trait.StorePruner.js +++ b/rust-doc/implementors/mithril_common/store/store_pruner/trait.StorePruner.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"mithril_aggregator":[["impl StorePruner for ProtocolParametersStore"]], +"mithril_aggregator":[["impl StorePruner for ProtocolParametersStore"]], "mithril_common":[], -"mithril_signer":[["impl StorePruner for ProtocolInitializerStore"]] +"mithril_signer":[["impl StorePruner for ProtocolInitializerStore"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rust-doc/implementors/serde/de/trait.Deserialize.js b/rust-doc/implementors/serde/de/trait.Deserialize.js index be72b7848b1..daa633296ac 100644 --- a/rust-doc/implementors/serde/de/trait.Deserialize.js +++ b/rust-doc/implementors/serde/de/trait.Deserialize.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"mithril_aggregator":[["impl<'de> Deserialize<'de> for ExecutionEnvironment"],["impl<'de> Deserialize<'de> for Configuration"],["impl<'de> Deserialize<'de> for SnapshotUploaderType"]], +"mithril_aggregator":[["impl<'de> Deserialize<'de> for Configuration"],["impl<'de> Deserialize<'de> for ExecutionEnvironment"],["impl<'de> Deserialize<'de> for SnapshotUploaderType"]], "mithril_common":[["impl<'de> Deserialize<'de> for Box<dyn Artifact + Send + Sync>"],["impl<'de> Deserialize<'de> for ProtocolGenesisSigner"],["impl<'de> Deserialize<'de> for EpochSettingsMessage"],["impl<'de> Deserialize<'de> for CertificateMessage"],["impl<'de> Deserialize<'de> for Box<dyn Artifact + Sync>"],["impl<'de> Deserialize<'de> for Box<dyn Artifact>"],["impl<'de> Deserialize<'de> for Sum6KesBytes"],["impl<'de> Deserialize<'de> for SupportedEra"],["impl<'de> Deserialize<'de> for ProtocolParameters"],["impl<'de> Deserialize<'de> for EraMarkersPayload"],["impl<'de> Deserialize<'de> for CardanoNetwork"],["impl<'de> Deserialize<'de> for SignerWithStakeMessagePart"],["impl<'de> Deserialize<'de> for EraMarkersVerifier"],["impl<'de> Deserialize<'de> for Box<dyn Artifact + Send>"],["impl<'de> Deserialize<'de> for SignerWithStake"],["impl<'de> Deserialize<'de> for MithrilStakeDistribution"],["impl<'de> Deserialize<'de> for MithrilStakeDistributionListItemMessage"],["impl<'de> Deserialize<'de> for CertificateListItemMessage"],["impl<'de> Deserialize<'de> for ProtocolGenesisVerifier"],["impl<'de> Deserialize<'de> for ProtocolSingleSignature"],["impl<'de> Deserialize<'de> for InternalServerError"],["impl<'de> Deserialize<'de> for SnapshotListItemMessage"],["impl<'de> Deserialize<'de> for SignedEntityType"],["impl<'de> Deserialize<'de> for CertificatePending"],["impl<'de> Deserialize<'de> for RegisterSignerMessage"],["impl<'de> Deserialize<'de> for RegisterSignatureMessage"],["impl<'de> Deserialize<'de> for Epoch"],["impl<'de> Deserialize<'de> for CertificatePendingMessage"],["impl<'de> Deserialize<'de> for SingleSignatures"],["impl<'de> Deserialize<'de> for CertificateMetadataMessage"],["impl<'de> Deserialize<'de> for Snapshot"],["impl<'de> Deserialize<'de> for ProtocolSignerVerificationKey"],["impl<'de> Deserialize<'de> for ProtocolMessagePartKey"],["impl<'de> Deserialize<'de> for AdapterType"],["impl<'de> Deserialize<'de> for Signer"],["impl<'de> Deserialize<'de> for EraMarker"],["impl<'de> Deserialize<'de> for SnapshotMessage"],["impl<'de> Deserialize<'de> for ClientError"],["impl<'de> Deserialize<'de> for SignerMessage"],["impl<'de> Deserialize<'de> for OpCert"],["impl<'de> Deserialize<'de> for Beacon"],["impl<'de> Deserialize<'de> for ProtocolMessage"],["impl<'de> Deserialize<'de> for CertificateListItemMessageMetadata"],["impl<'de> Deserialize<'de> for EraMarkersSigner"],["impl<'de> Deserialize<'de> for MithrilStakeDistributionMessage"]], "mithril_signer":[["impl<'de> Deserialize<'de> for Configuration"]], "mithril_stm":[["impl<'de, D: Clone + Digest + FixedOutput> Deserialize<'de> for StmAggrVerificationKey<D>where\n BatchPath<D>: Deserialize<'de>,"],["impl<'de, D: Clone + Digest + FixedOutput> Deserialize<'de> for StmAggrSig<D>where\n BatchPath<D>: Deserialize<'de>,"],["impl<'de> Deserialize<'de> for StmSig"],["impl<'de> Deserialize<'de> for StmInitializer"],["impl<'de> Deserialize<'de> for StmParameters"]] diff --git a/rust-doc/implementors/serde/ser/trait.Serialize.js b/rust-doc/implementors/serde/ser/trait.Serialize.js index d232c3141d5..6329b9bb8f6 100644 --- a/rust-doc/implementors/serde/ser/trait.Serialize.js +++ b/rust-doc/implementors/serde/ser/trait.Serialize.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"mithril_aggregator":[["impl Serialize for ExecutionEnvironment"],["impl Serialize for Configuration"],["impl Serialize for SnapshotUploaderType"]], +"mithril_aggregator":[["impl Serialize for Configuration"],["impl Serialize for ExecutionEnvironment"],["impl Serialize for SnapshotUploaderType"]], "mithril_client":[["impl Serialize for SnapshotListItem"],["impl Serialize for MithrilStakeDistributionListItem"]], "mithril_common":[["impl Serialize for InternalServerError"],["impl Serialize for SnapshotListItemMessage"],["impl Serialize for MithrilStakeDistributionMessage"],["impl Serialize for ProtocolMessagePartKey"],["impl Serialize for EpochSettingsMessage"],["impl Serialize for EraMarkersVerifier"],["impl Serialize for AdapterType"],["impl Serialize for SignedEntityType"],["impl Serialize for TxDatumFieldTypeName"],["impl Serialize for ProtocolMessage"],["impl Serialize for EraMarkersSigner"],["impl<'typetag> Serialize for dyn Artifact + Send + Sync + 'typetag"],["impl Serialize for ProtocolGenesisSigner"],["impl Serialize for CertificateListItemMessage"],["impl Serialize for Signer"],["impl Serialize for ProtocolSignerVerificationKey"],["impl Serialize for RegisterSignatureMessage"],["impl Serialize for EraMarkersPayload"],["impl Serialize for CardanoNetwork"],["impl Serialize for ProtocolParameters"],["impl Serialize for ProtocolSingleSignature"],["impl Serialize for OpCert"],["impl Serialize for Snapshot"],["impl Serialize for SupportedEra"],["impl Serialize for RegisterSignerMessage"],["impl Serialize for TxDatumBuilder"],["impl Serialize for MithrilStakeDistribution"],["impl Serialize for CertificatePending"],["impl Serialize for EraMarker"],["impl Serialize for ProtocolGenesisVerifier"],["impl Serialize for CertificatePendingMessage"],["impl Serialize for CertificateListItemMessageMetadata"],["impl<'typetag> Serialize for dyn Artifact + Send + 'typetag"],["impl Serialize for CertificateMessage"],["impl Serialize for SignerWithStakeMessagePart"],["impl<'typetag> Serialize for dyn Artifact + Sync + 'typetag"],["impl Serialize for Beacon"],["impl Serialize for Epoch"],["impl Serialize for SignerMessage"],["impl Serialize for SnapshotMessage"],["impl Serialize for ClientError"],["impl Serialize for SingleSignatures"],["impl Serialize for CertificateMetadataMessage"],["impl<'typetag> Serialize for dyn Artifact + 'typetag"],["impl Serialize for Sum6KesBytes"],["impl Serialize for MithrilStakeDistributionListItemMessage"],["impl Serialize for TxDatumFieldValue"],["impl Serialize for SignerWithStake"]], "mithril_signer":[["impl Serialize for Configuration"]], diff --git a/rust-doc/mithril_aggregator/database/migration/fn.get_migrations.html b/rust-doc/mithril_aggregator/database/migration/fn.get_migrations.html index 3b0946c93b2..2818288546a 100644 --- a/rust-doc/mithril_aggregator/database/migration/fn.get_migrations.html +++ b/rust-doc/mithril_aggregator/database/migration/fn.get_migrations.html @@ -1,4 +1,4 @@ -get_migrations in mithril_aggregator::database::migration - Rust
    pub fn get_migrations() -> Vec<SqlMigration>
    Expand description

    Get all the migrations required by this version of the software. +get_migrations in mithril_aggregator::database::migration - Rust

    pub fn get_migrations() -> Vec<SqlMigration>
    Expand description

    Get all the migrations required by this version of the software. There shall be one migration per database version. There could be several statements per migration.

    \ No newline at end of file diff --git a/rust-doc/mithril_aggregator/database/provider/struct.CertificateRecord.html b/rust-doc/mithril_aggregator/database/provider/struct.CertificateRecord.html index e0143905d8d..6a8977a2226 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.CertificateRecord.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.CertificateRecord.html @@ -2,38 +2,38 @@ pub certificate_id: String, pub parent_certificate_id: Option<String>, pub message: String, - pub signature: HexEncodedKey, - pub aggregate_verification_key: HexEncodedAgregateVerificationKey, - pub epoch: Epoch, - pub beacon: Beacon, - pub protocol_version: ProtocolVersion, - pub protocol_parameters: ProtocolParameters, - pub protocol_message: ProtocolMessage, - pub signers: Vec<SignerWithStake>, + pub signature: HexEncodedKey, + pub aggregate_verification_key: HexEncodedAgregateVerificationKey, + pub epoch: Epoch, + pub beacon: Beacon, + pub protocol_version: ProtocolVersion, + pub protocol_parameters: ProtocolParameters, + pub protocol_message: ProtocolMessage, + pub signers: Vec<SignerWithStake>, pub initiated_at: DateTime<Utc>, pub sealed_at: DateTime<Utc>,
    }
    Expand description

    Certificate record is the representation of a stored certificate.

    Fields§

    §certificate_id: String

    Certificate id.

    §parent_certificate_id: Option<String>

    Parent Certificate id.

    §message: String

    Message that is signed.

    -
    §signature: HexEncodedKey

    Signature of the certificate. +

    §signature: HexEncodedKey

    Signature of the certificate. Note: multi-signature if parent certificate id is set, genesis signature otherwise.

    -
    §aggregate_verification_key: HexEncodedAgregateVerificationKey

    Aggregate verification key +

    §aggregate_verification_key: HexEncodedAgregateVerificationKey

    Aggregate verification key Note: used only if signature is a multi-signature

    -
    §epoch: Epoch

    Epoch of creation of the certificate.

    -
    §beacon: Beacon

    Beacon used to produce the signed message

    -
    §protocol_version: ProtocolVersion

    Protocol Version (semver)

    -
    §protocol_parameters: ProtocolParameters

    Protocol parameters.

    -
    §protocol_message: ProtocolMessage

    Structured message that is used to create the signed message

    -
    §signers: Vec<SignerWithStake>

    The list of the active signers with their stakes and verification keys

    +
    §epoch: Epoch

    Epoch of creation of the certificate.

    +
    §beacon: Beacon

    Beacon used to produce the signed message

    +
    §protocol_version: ProtocolVersion

    Protocol Version (semver)

    +
    §protocol_parameters: ProtocolParameters

    Protocol parameters.

    +
    §protocol_message: ProtocolMessage

    Structured message that is used to create the signed message

    +
    §signers: Vec<SignerWithStake>

    The list of the active signers with their stakes and verification keys

    §initiated_at: DateTime<Utc>

    Date and time when the certificate was initiated

    §sealed_at: DateTime<Utc>

    Date and time when the certificate was sealed

    -

    Trait Implementations§

    source§

    impl Clone for CertificateRecord

    source§

    fn clone(&self) -> CertificateRecord

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for CertificateRecord

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<Certificate> for CertificateRecord

    source§

    fn from(other: Certificate) -> Self

    Converts to this type from the input type.
    source§

    impl From<CertificateRecord> for Certificate

    source§

    fn from(other: CertificateRecord) -> Certificate

    Converts to this type from the input type.
    source§

    impl PartialEq<CertificateRecord> for CertificateRecord

    source§

    fn eq(&self, other: &CertificateRecord) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Clone for CertificateRecord

    source§

    fn clone(&self) -> CertificateRecord

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for CertificateRecord

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<Certificate> for CertificateRecord

    source§

    fn from(other: Certificate) -> Self

    Converts to this type from the input type.
    source§

    impl From<CertificateRecord> for Certificate

    source§

    fn from(other: CertificateRecord) -> Certificate

    Converts to this type from the input type.
    source§

    impl PartialEq<CertificateRecord> for CertificateRecord

    source§

    fn eq(&self, other: &CertificateRecord) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl SqLiteEntity for CertificateRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where +sufficient, and should not be overridden without very good reason.

    source§

    impl SqLiteEntity for CertificateRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where Self: Sized,

    This method is intended to be used when creating new instances from SQL result rows. This is the place to grab data, check consistency and types -and return the entity if possible.
    source§

    fn get_projection() -> Projection

    Construct a Projection that will allow to hydrate this SqLiteEntity.
    source§

    impl StructuralPartialEq for CertificateRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +and return the entity if possible.

    source§

    fn get_projection() -> Projection

    Construct a [Projection] that will allow to hydrate this SqLiteEntity.
    source§

    impl StructuralPartialEq for CertificateRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.CertificateRecordProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.CertificateRecordProvider.html index 98f5255f6da..e64744dcb8e 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.CertificateRecordProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.CertificateRecordProvider.html @@ -3,17 +3,17 @@

    source

    pub fn get_by_certificate_id( &self, certificate_id: &str -) -> StdResult<EntityCursor<'_, CertificateRecord>>

    Get CertificateRecords for a given certificate id.

    +) -> StdResult<EntityCursor<'_, CertificateRecord>>

    Get CertificateRecords for a given certificate id.

    source

    pub fn get_by_epoch( &self, - epoch: &Epoch -) -> StdResult<EntityCursor<'_, CertificateRecord>>

    Get CertificateRecords for a given Epoch.

    -
    source

    pub fn get_all(&self) -> StdResult<EntityCursor<'_, CertificateRecord>>

    Get all CertificateRecords.

    -

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for CertificateRecordProvider<'client>

    §

    type Entity = CertificateRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( + epoch: &Epoch +) -> StdResult<EntityCursor<'_, CertificateRecord>>

    Get CertificateRecords for a given Epoch.

    +
    source

    pub fn get_all(&self) -> StdResult<EntityCursor<'_, CertificateRecord>>

    Get all CertificateRecords.

    +

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for CertificateRecordProvider<'client>

    §

    type Entity = CertificateRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for CertificateRecordProvider<'client>

    §

    impl<'client> !Send for CertificateRecordProvider<'client>

    §

    impl<'client> !Sync for CertificateRecordProvider<'client>

    §

    impl<'client> Unpin for CertificateRecordProvider<'client>

    §

    impl<'client> !UnwindSafe for CertificateRecordProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for CertificateRecordProvider<'client>

    §

    impl<'client> !Send for CertificateRecordProvider<'client>

    §

    impl<'client> !Sync for CertificateRecordProvider<'client>

    §

    impl<'client> Unpin for CertificateRecordProvider<'client>

    §

    impl<'client> !UnwindSafe for CertificateRecordProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.CertificateRepository.html b/rust-doc/mithril_aggregator/database/provider/struct.CertificateRepository.html index c03dbc7457f..547b0c3a0ed 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.CertificateRepository.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.CertificateRepository.html @@ -3,36 +3,36 @@

    source

    pub async fn get_certificate( &self, hash: &str -) -> StdResult<Option<Certificate>>

    Return the certificate corresponding to the given hash if any.

    +) -> StdResult<Option<Certificate>>

    Return the certificate corresponding to the given hash if any.

    source

    pub async fn get_latest_certificates( &self, last_n: usize -) -> StdResult<Vec<Certificate>>

    Return the latest certificates.

    +) -> StdResult<Vec<Certificate>>

    Return the latest certificates.

    source

    pub async fn get_master_certificate_for_epoch( &self, - epoch: Epoch -) -> StdResult<Option<Certificate>>

    Return the first certificate signed per epoch as the reference + epoch: Epoch +) -> StdResult<Option<Certificate>>

    Return the first certificate signed per epoch as the reference certificate for this Epoch. This will be the parent certificate for all other certificates issued within this Epoch.

    source

    pub async fn create_certificate( &self, - certificate: Certificate -) -> StdResult<Certificate>

    Create a new certificate in the database.

    + certificate: Certificate +) -> StdResult<Certificate>

    Create a new certificate in the database.

    source

    pub async fn create_many_certificates( &self, - certificates: Vec<Certificate> -) -> StdResult<Vec<Certificate>>

    Create many certificates at once in the database.

    + certificates: Vec<Certificate> +) -> StdResult<Vec<Certificate>>

    Create many certificates at once in the database.

    source

    pub async fn delete_certificates( &self, - certificates: &[&Certificate] -) -> StdResult<()>

    Delete all the given certificates from the database

    -

    Trait Implementations§

    source§

    impl CertificateRetriever for CertificateRepository

    source§

    fn get_certificate_details<'life0, 'life1, 'async_trait>( + certificates: &[&Certificate] +) -> StdResult<()>

    Delete all the given certificates from the database

    +

    Trait Implementations§

    source§

    impl CertificateRetriever for CertificateRepository

    source§

    fn get_certificate_details<'life0, 'life1, 'async_trait>( &'life0 self, certificate_hash: &'life1 str -) -> Pin<Box<dyn Future<Output = Result<Certificate, CertificateRetrieverError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Certificate, CertificateRetrieverError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, - 'life1: 'async_trait,

    Get Certificate details

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + 'life1: 'async_trait,

    Get [Certificate] details

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.DeleteCertificateProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.DeleteCertificateProvider.html index f25ae3665be..fc62583b24c 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.DeleteCertificateProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.DeleteCertificateProvider.html @@ -3,12 +3,12 @@

    source

    pub fn delete_by_ids( &self, ids: &[&str] -) -> StdResult<EntityCursor<'_, CertificateRecord>>

    Delete the certificates with with the given ids.

    -

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for DeleteCertificateProvider<'conn>

    §

    type Entity = CertificateRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( +) -> StdResult<EntityCursor<'_, CertificateRecord>>

    Delete the certificates with with the given ids.

    +

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for DeleteCertificateProvider<'conn>

    §

    type Entity = CertificateRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'conn> !RefUnwindSafe for DeleteCertificateProvider<'conn>

    §

    impl<'conn> !Send for DeleteCertificateProvider<'conn>

    §

    impl<'conn> !Sync for DeleteCertificateProvider<'conn>

    §

    impl<'conn> Unpin for DeleteCertificateProvider<'conn>

    §

    impl<'conn> !UnwindSafe for DeleteCertificateProvider<'conn>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'conn> !RefUnwindSafe for DeleteCertificateProvider<'conn>

    §

    impl<'conn> !Send for DeleteCertificateProvider<'conn>

    §

    impl<'conn> !Sync for DeleteCertificateProvider<'conn>

    §

    impl<'conn> Unpin for DeleteCertificateProvider<'conn>

    §

    impl<'conn> !UnwindSafe for DeleteCertificateProvider<'conn>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.DeleteEpochSettingProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.DeleteEpochSettingProvider.html index 0c54239004e..11e771097a5 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.DeleteEpochSettingProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.DeleteEpochSettingProvider.html @@ -2,17 +2,17 @@

    Implementations§

    source§

    impl<'conn> DeleteEpochSettingProvider<'conn>

    source

    pub fn new(connection: &'conn Connection) -> Self

    Create a new instance

    source

    pub fn delete( &self, - epoch: Epoch -) -> Result<EntityCursor<'_, EpochSettingRecord>, StdError>

    Delete the epoch setting data given the Epoch

    + epoch: Epoch +) -> Result<EntityCursor<'_, EpochSettingRecord>, StdError>

    Delete the epoch setting data given the Epoch

    source

    pub fn prune( &self, - epoch_threshold: Epoch -) -> Result<EntityCursor<'_, EpochSettingRecord>, StdError>

    Prune the epoch setting data older than the given epoch.

    -

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for DeleteEpochSettingProvider<'conn>

    §

    type Entity = EpochSettingRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( + epoch_threshold: Epoch +) -> Result<EntityCursor<'_, EpochSettingRecord>, StdError>

    Prune the epoch setting data older than the given epoch.

    +

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for DeleteEpochSettingProvider<'conn>

    §

    type Entity = EpochSettingRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'conn> !RefUnwindSafe for DeleteEpochSettingProvider<'conn>

    §

    impl<'conn> !Send for DeleteEpochSettingProvider<'conn>

    §

    impl<'conn> !Sync for DeleteEpochSettingProvider<'conn>

    §

    impl<'conn> Unpin for DeleteEpochSettingProvider<'conn>

    §

    impl<'conn> !UnwindSafe for DeleteEpochSettingProvider<'conn>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'conn> !RefUnwindSafe for DeleteEpochSettingProvider<'conn>

    §

    impl<'conn> !Send for DeleteEpochSettingProvider<'conn>

    §

    impl<'conn> !Sync for DeleteEpochSettingProvider<'conn>

    §

    impl<'conn> Unpin for DeleteEpochSettingProvider<'conn>

    §

    impl<'conn> !UnwindSafe for DeleteEpochSettingProvider<'conn>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.DeleteSignerRegistrationRecordProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.DeleteSignerRegistrationRecordProvider.html index 88fddc4f509..8f6ea01bec0 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.DeleteSignerRegistrationRecordProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.DeleteSignerRegistrationRecordProvider.html @@ -2,17 +2,17 @@

    Implementations§

    source§

    impl<'conn> DeleteSignerRegistrationRecordProvider<'conn>

    source

    pub fn new(connection: &'conn Connection) -> Self

    Create a new instance

    source

    pub fn delete( &self, - epoch: Epoch -) -> Result<EntityCursor<'_, SignerRegistrationRecord>, StdError>

    Delete the epoch setting data given the Epoch

    + epoch: Epoch +) -> Result<EntityCursor<'_, SignerRegistrationRecord>, StdError>

    Delete the epoch setting data given the Epoch

    source

    pub fn prune( &self, - epoch_threshold: Epoch -) -> Result<EntityCursor<'_, SignerRegistrationRecord>, StdError>

    Prune the epoch setting data older than the given epoch.

    -

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for DeleteSignerRegistrationRecordProvider<'conn>

    §

    type Entity = SignerRegistrationRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( + epoch_threshold: Epoch +) -> Result<EntityCursor<'_, SignerRegistrationRecord>, StdError>

    Prune the epoch setting data older than the given epoch.

    +

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for DeleteSignerRegistrationRecordProvider<'conn>

    §

    type Entity = SignerRegistrationRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.DeleteStakePoolProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.DeleteStakePoolProvider.html index 43233b29ac9..8d1d2f6ff4a 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.DeleteStakePoolProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.DeleteStakePoolProvider.html @@ -2,13 +2,13 @@

    Implementations§

    source§

    impl<'conn> DeleteStakePoolProvider<'conn>

    source

    pub fn new(connection: &'conn Connection) -> Self

    Create a new instance

    source

    pub fn prune( &self, - epoch_threshold: Epoch -) -> Result<EntityCursor<'_, StakePool>, StdError>

    Prune the stake pools data older than the given epoch.

    -

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for DeleteStakePoolProvider<'conn>

    §

    type Entity = StakePool

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( + epoch_threshold: Epoch +) -> Result<EntityCursor<'_, StakePool>, StdError>

    Prune the stake pools data older than the given epoch.

    +

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for DeleteStakePoolProvider<'conn>

    §

    type Entity = StakePool

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'conn> !RefUnwindSafe for DeleteStakePoolProvider<'conn>

    §

    impl<'conn> !Send for DeleteStakePoolProvider<'conn>

    §

    impl<'conn> !Sync for DeleteStakePoolProvider<'conn>

    §

    impl<'conn> Unpin for DeleteStakePoolProvider<'conn>

    §

    impl<'conn> !UnwindSafe for DeleteStakePoolProvider<'conn>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'conn> !RefUnwindSafe for DeleteStakePoolProvider<'conn>

    §

    impl<'conn> !Send for DeleteStakePoolProvider<'conn>

    §

    impl<'conn> !Sync for DeleteStakePoolProvider<'conn>

    §

    impl<'conn> Unpin for DeleteStakePoolProvider<'conn>

    §

    impl<'conn> !UnwindSafe for DeleteStakePoolProvider<'conn>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.EpochSettingProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.EpochSettingProvider.html index 7bf33ffc0c3..6683f21286d 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.EpochSettingProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.EpochSettingProvider.html @@ -2,14 +2,14 @@

    Implementations§

    source§

    impl<'client> EpochSettingProvider<'client>

    source

    pub fn new(client: &'client Connection) -> Self

    Create a new provider

    source

    pub fn get_by_epoch( &self, - epoch: &Epoch -) -> Result<EntityCursor<'_, EpochSettingRecord>, StdError>

    Get EpochSettingRecords for a given Epoch for given pool_ids.

    -
    source

    pub fn get_all(&self) -> Result<EntityCursor<'_, EpochSettingRecord>, StdError>

    Get all EpochSettingRecords.

    -

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for EpochSettingProvider<'client>

    §

    type Entity = EpochSettingRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( + epoch: &Epoch +) -> Result<EntityCursor<'_, EpochSettingRecord>, StdError>

    Get EpochSettingRecords for a given Epoch for given pool_ids.

    +
    source

    pub fn get_all(&self) -> Result<EntityCursor<'_, EpochSettingRecord>, StdError>

    Get all EpochSettingRecords.

    +

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for EpochSettingProvider<'client>

    §

    type Entity = EpochSettingRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for EpochSettingProvider<'client>

    §

    impl<'client> !Send for EpochSettingProvider<'client>

    §

    impl<'client> !Sync for EpochSettingProvider<'client>

    §

    impl<'client> Unpin for EpochSettingProvider<'client>

    §

    impl<'client> !UnwindSafe for EpochSettingProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for EpochSettingProvider<'client>

    §

    impl<'client> !Send for EpochSettingProvider<'client>

    §

    impl<'client> !Sync for EpochSettingProvider<'client>

    §

    impl<'client> Unpin for EpochSettingProvider<'client>

    §

    impl<'client> !UnwindSafe for EpochSettingProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.EpochSettingRecord.html b/rust-doc/mithril_aggregator/database/provider/struct.EpochSettingRecord.html index 47e487c4607..2165641ebe3 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.EpochSettingRecord.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.EpochSettingRecord.html @@ -1,10 +1,10 @@ EpochSettingRecord in mithril_aggregator::database::provider - Rust
    pub struct EpochSettingRecord { /* private fields */ }
    Expand description

    Settings for an epoch, including the protocol parameters.

    Trait Implementations§

    source§

    impl Debug for EpochSettingRecord

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<EpochSettingRecord> for EpochSettingRecord

    source§

    fn eq(&self, other: &EpochSettingRecord) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl SqLiteEntity for EpochSettingRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where +sufficient, and should not be overridden without very good reason.

    source§

    impl SqLiteEntity for EpochSettingRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where Self: Sized,

    This method is intended to be used when creating new instances from SQL result rows. This is the place to grab data, check consistency and types -and return the entity if possible.
    source§

    fn get_projection() -> Projection

    Construct a Projection that will allow to hydrate this SqLiteEntity.
    source§

    impl StructuralPartialEq for EpochSettingRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +and return the entity if possible.

    source§

    fn get_projection() -> Projection

    Construct a [Projection] that will allow to hydrate this SqLiteEntity.
    source§

    impl StructuralPartialEq for EpochSettingRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.EpochSettingStore.html b/rust-doc/mithril_aggregator/database/provider/struct.EpochSettingStore.html index 07a3df2e13f..dc99052000a 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.EpochSettingStore.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.EpochSettingStore.html @@ -5,16 +5,16 @@ ) -> Self

    Create a new EpochSetting service

    Trait Implementations§

    source§

    impl ProtocolParametersStorer for EpochSettingStore

    source§

    fn save_protocol_parameters<'life0, 'async_trait>( &'life0 self, - epoch: Epoch, - protocol_parameters: ProtocolParameters -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch, + protocol_parameters: ProtocolParameters +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Save the given ProtocolParameter for the given Epoch.
    source§

    fn get_protocol_parameters<'life0, 'async_trait>( + 'life0: 'async_trait,

    Save the given ProtocolParameter for the given [Epoch].
    source§

    fn get_protocol_parameters<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Get the saved ProtocolParameter for the given Epoch if any.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + 'life0: 'async_trait,

    Get the saved ProtocolParameter for the given [Epoch] if any.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.InsertCertificateRecordProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.InsertCertificateRecordProvider.html index 650720649b5..9a76967befc 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.InsertCertificateRecordProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.InsertCertificateRecordProvider.html @@ -1,10 +1,10 @@ InsertCertificateRecordProvider in mithril_aggregator::database::provider - Rust
    pub struct InsertCertificateRecordProvider<'conn> { /* private fields */ }
    Expand description

    Query to insert the certificate record

    Implementations§

    source§

    impl<'conn> InsertCertificateRecordProvider<'conn>

    source

    pub fn new(connection: &'conn Connection) -> Self

    Create a new instance

    -

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for InsertCertificateRecordProvider<'conn>

    §

    type Entity = CertificateRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( +

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for InsertCertificateRecordProvider<'conn>

    §

    type Entity = CertificateRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.InsertOrReplaceSignerRegistrationRecordProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.InsertOrReplaceSignerRegistrationRecordProvider.html index 83925eff6e2..d20fe819a06 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.InsertOrReplaceSignerRegistrationRecordProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.InsertOrReplaceSignerRegistrationRecordProvider.html @@ -1,10 +1,10 @@ InsertOrReplaceSignerRegistrationRecordProvider in mithril_aggregator::database::provider - Rust
    pub struct InsertOrReplaceSignerRegistrationRecordProvider<'conn> { /* private fields */ }
    Expand description

    Query to insert or replace a signer_registration record

    Implementations§

    source§

    impl<'conn> InsertOrReplaceSignerRegistrationRecordProvider<'conn>

    source

    pub fn new(connection: &'conn Connection) -> Self

    Create a new instance

    -

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for InsertOrReplaceSignerRegistrationRecordProvider<'conn>

    §

    type Entity = SignerRegistrationRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( +

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for InsertOrReplaceSignerRegistrationRecordProvider<'conn>

    §

    type Entity = SignerRegistrationRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.InsertOrReplaceStakePoolProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.InsertOrReplaceStakePoolProvider.html index 34de92c082c..b8da8a83795 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.InsertOrReplaceStakePoolProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.InsertOrReplaceStakePoolProvider.html @@ -1,10 +1,10 @@ InsertOrReplaceStakePoolProvider in mithril_aggregator::database::provider - Rust
    pub struct InsertOrReplaceStakePoolProvider<'conn> { /* private fields */ }
    Expand description

    Query to update the stake distribution

    Implementations§

    source§

    impl<'conn> InsertOrReplaceStakePoolProvider<'conn>

    source

    pub fn new(connection: &'conn Connection) -> Self

    Create a new instance

    -

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for InsertOrReplaceStakePoolProvider<'conn>

    §

    type Entity = StakePool

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( +

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for InsertOrReplaceStakePoolProvider<'conn>

    §

    type Entity = StakePool

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.InsertSignedEntityRecordProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.InsertSignedEntityRecordProvider.html index c4238a6714c..683640cdec4 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.InsertSignedEntityRecordProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.InsertSignedEntityRecordProvider.html @@ -1,10 +1,10 @@ InsertSignedEntityRecordProvider in mithril_aggregator::database::provider - Rust
    pub struct InsertSignedEntityRecordProvider<'conn> { /* private fields */ }
    Expand description

    Query to insert the signed_entity record

    Implementations§

    source§

    impl<'conn> InsertSignedEntityRecordProvider<'conn>

    source

    pub fn new(connection: &'conn Connection) -> Self

    Create a new instance

    -

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for InsertSignedEntityRecordProvider<'conn>

    §

    type Entity = SignedEntityRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( +

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for InsertSignedEntityRecordProvider<'conn>

    §

    type Entity = SignedEntityRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.InsertSignerRecordProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.InsertSignerRecordProvider.html index 2b11d9dc985..222bfbeb792 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.InsertSignerRecordProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.InsertSignerRecordProvider.html @@ -1,10 +1,10 @@ InsertSignerRecordProvider in mithril_aggregator::database::provider - Rust
    pub struct InsertSignerRecordProvider<'conn> { /* private fields */ }
    Expand description

    Query to insert the signer record

    Implementations§

    source§

    impl<'conn> InsertSignerRecordProvider<'conn>

    source

    pub fn new(connection: &'conn Connection) -> Self

    Create a new instance

    -

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for InsertSignerRecordProvider<'conn>

    §

    type Entity = SignerRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( +

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for InsertSignerRecordProvider<'conn>

    §

    type Entity = SignerRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'conn> !RefUnwindSafe for InsertSignerRecordProvider<'conn>

    §

    impl<'conn> !Send for InsertSignerRecordProvider<'conn>

    §

    impl<'conn> !Sync for InsertSignerRecordProvider<'conn>

    §

    impl<'conn> Unpin for InsertSignerRecordProvider<'conn>

    §

    impl<'conn> !UnwindSafe for InsertSignerRecordProvider<'conn>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'conn> !RefUnwindSafe for InsertSignerRecordProvider<'conn>

    §

    impl<'conn> !Send for InsertSignerRecordProvider<'conn>

    §

    impl<'conn> !Sync for InsertSignerRecordProvider<'conn>

    §

    impl<'conn> Unpin for InsertSignerRecordProvider<'conn>

    §

    impl<'conn> !UnwindSafe for InsertSignerRecordProvider<'conn>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.OpenMessageRecord.html b/rust-doc/mithril_aggregator/database/provider/struct.OpenMessageRecord.html index c5cc29dce77..489906126e7 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.OpenMessageRecord.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.OpenMessageRecord.html @@ -1,8 +1,8 @@ OpenMessageRecord in mithril_aggregator::database::provider - Rust
    pub struct OpenMessageRecord {
         pub open_message_id: Uuid,
    -    pub epoch: Epoch,
    -    pub signed_entity_type: SignedEntityType,
    -    pub protocol_message: ProtocolMessage,
    +    pub epoch: Epoch,
    +    pub signed_entity_type: SignedEntityType,
    +    pub protocol_message: ProtocolMessage,
         pub is_certified: bool,
         pub created_at: DateTime<Utc>,
     }
    Expand description

    OpenMessage

    @@ -10,17 +10,17 @@ single signature for this message from which a multi signature will be generated if possible.

    Fields§

    §open_message_id: Uuid

    OpenMessage unique identifier

    -
    §epoch: Epoch

    Epoch

    -
    §signed_entity_type: SignedEntityType

    Type of message

    -
    §protocol_message: ProtocolMessage

    Message used by the Mithril Protocol

    +
    §epoch: Epoch

    Epoch

    +
    §signed_entity_type: SignedEntityType

    Type of message

    +
    §protocol_message: ProtocolMessage

    Message used by the Mithril Protocol

    §is_certified: bool

    Has this open message been converted into a certificate?

    §created_at: DateTime<Utc>

    Message creation datetime, it is set by the database.

    Trait Implementations§

    source§

    impl Clone for OpenMessageRecord

    source§

    fn clone(&self) -> OpenMessageRecord

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for OpenMessageRecord

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<OpenMessageRecord> for OpenMessage

    source§

    fn from(record: OpenMessageRecord) -> Self

    Converts to this type from the input type.
    source§

    impl From<OpenMessageWithSingleSignaturesRecord> for OpenMessageRecord

    source§

    fn from(value: OpenMessageWithSingleSignaturesRecord) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq<OpenMessageRecord> for OpenMessageRecord

    source§

    fn eq(&self, other: &OpenMessageRecord) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl SqLiteEntity for OpenMessageRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where +sufficient, and should not be overridden without very good reason.

    source§

    impl SqLiteEntity for OpenMessageRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where Self: Sized,

    This method is intended to be used when creating new instances from SQL result rows. This is the place to grab data, check consistency and types -and return the entity if possible.
    source§

    fn get_projection() -> Projection

    Construct a Projection that will allow to hydrate this SqLiteEntity.
    source§

    impl Eq for OpenMessageRecord

    source§

    impl StructuralEq for OpenMessageRecord

    source§

    impl StructuralPartialEq for OpenMessageRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +and return the entity if possible.

    source§

    fn get_projection() -> Projection

    Construct a [Projection] that will allow to hydrate this SqLiteEntity.
    source§

    impl Eq for OpenMessageRecord

    source§

    impl StructuralEq for OpenMessageRecord

    source§

    impl StructuralPartialEq for OpenMessageRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.OpenMessageRepository.html b/rust-doc/mithril_aggregator/database/provider/struct.OpenMessageRepository.html index 26a00dd2cc0..0f0f08def2e 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.OpenMessageRepository.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.OpenMessageRepository.html @@ -4,23 +4,23 @@

    Implementations§

    source§

    impl OpenMessageRepository

    source

    pub fn new(connection: Arc<Mutex<Connection>>) -> Self

    Instanciate service

    source

    pub async fn get_open_message( &self, - signed_entity_type: &SignedEntityType -) -> StdResult<Option<OpenMessageRecord>>

    Return the latest OpenMessageRecord for the given Epoch and SignedEntityType.

    + signed_entity_type: &SignedEntityType +) -> StdResult<Option<OpenMessageRecord>>

    Return the latest OpenMessageRecord for the given Epoch and [SignedEntityType].

    source

    pub async fn get_open_message_with_single_signatures( &self, - signed_entity_type: &SignedEntityType -) -> StdResult<Option<OpenMessageWithSingleSignaturesRecord>>

    Return an open message with its associated single signatures for the given Epoch and SignedEntityType.

    + signed_entity_type: &SignedEntityType +) -> StdResult<Option<OpenMessageWithSingleSignaturesRecord>>

    Return an open message with its associated single signatures for the given Epoch and [SignedEntityType].

    source

    pub async fn create_open_message( &self, - epoch: Epoch, - signed_entity_type: &SignedEntityType, - protocol_message: &ProtocolMessage -) -> StdResult<OpenMessageRecord>

    Create a new OpenMessageRecord in the database.

    + epoch: Epoch, + signed_entity_type: &SignedEntityType, + protocol_message: &ProtocolMessage +) -> StdResult<OpenMessageRecord>

    Create a new OpenMessageRecord in the database.

    source

    pub async fn update_open_message( &self, open_message: &OpenMessageRecord -) -> StdResult<OpenMessageRecord>

    Updates an OpenMessageRecord in the database.

    -
    source

    pub async fn clean_epoch(&self, epoch: Epoch) -> StdResult<usize>

    Remove all the OpenMessageRecord for the strictly previous epochs of the given epoch in the database. +) -> StdResult<OpenMessageRecord>

    Updates an OpenMessageRecord in the database.

    +
    source

    pub async fn clean_epoch(&self, epoch: Epoch) -> StdResult<usize>

    Remove all the OpenMessageRecord for the strictly previous epochs of the given epoch in the database. It returns the number of messages removed.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.OpenMessageWithSingleSignaturesRecord.html b/rust-doc/mithril_aggregator/database/provider/struct.OpenMessageWithSingleSignaturesRecord.html index df3c158ff31..e72e4a79bc8 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.OpenMessageWithSingleSignaturesRecord.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.OpenMessageWithSingleSignaturesRecord.html @@ -1,23 +1,23 @@ OpenMessageWithSingleSignaturesRecord in mithril_aggregator::database::provider - Rust
    pub struct OpenMessageWithSingleSignaturesRecord {
         pub open_message_id: Uuid,
    -    pub epoch: Epoch,
    -    pub signed_entity_type: SignedEntityType,
    -    pub protocol_message: ProtocolMessage,
    +    pub epoch: Epoch,
    +    pub signed_entity_type: SignedEntityType,
    +    pub protocol_message: ProtocolMessage,
         pub is_certified: bool,
    -    pub single_signatures: Vec<SingleSignatures>,
    +    pub single_signatures: Vec<SingleSignatures>,
         pub created_at: DateTime<Utc>,
     }
    Expand description

    Open Message with associated single signatures if any.

    Fields§

    §open_message_id: Uuid

    OpenMessage unique identifier

    -
    §epoch: Epoch

    Epoch

    -
    §signed_entity_type: SignedEntityType

    Type of message

    -
    §protocol_message: ProtocolMessage

    Message used by the Mithril Protocol

    +
    §epoch: Epoch

    Epoch

    +
    §signed_entity_type: SignedEntityType

    Type of message

    +
    §protocol_message: ProtocolMessage

    Message used by the Mithril Protocol

    §is_certified: bool

    Has this message been converted into a Certificate?

    -
    §single_signatures: Vec<SingleSignatures>

    associated single signatures

    +
    §single_signatures: Vec<SingleSignatures>

    associated single signatures

    §created_at: DateTime<Utc>

    Message creation datetime, it is set by the database.

    -

    Trait Implementations§

    source§

    impl Clone for OpenMessageWithSingleSignaturesRecord

    source§

    fn clone(&self) -> OpenMessageWithSingleSignaturesRecord

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for OpenMessageWithSingleSignaturesRecord

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<OpenMessageWithSingleSignaturesRecord> for OpenMessage

    source§

    fn from(record: OpenMessageWithSingleSignaturesRecord) -> Self

    Converts to this type from the input type.
    source§

    impl From<OpenMessageWithSingleSignaturesRecord> for OpenMessageRecord

    source§

    fn from(value: OpenMessageWithSingleSignaturesRecord) -> Self

    Converts to this type from the input type.
    source§

    impl SqLiteEntity for OpenMessageWithSingleSignaturesRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where +

    Trait Implementations§

    source§

    impl Clone for OpenMessageWithSingleSignaturesRecord

    source§

    fn clone(&self) -> OpenMessageWithSingleSignaturesRecord

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for OpenMessageWithSingleSignaturesRecord

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<OpenMessageWithSingleSignaturesRecord> for OpenMessage

    source§

    fn from(record: OpenMessageWithSingleSignaturesRecord) -> Self

    Converts to this type from the input type.
    source§

    impl From<OpenMessageWithSingleSignaturesRecord> for OpenMessageRecord

    source§

    fn from(value: OpenMessageWithSingleSignaturesRecord) -> Self

    Converts to this type from the input type.
    source§

    impl SqLiteEntity for OpenMessageWithSingleSignaturesRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where Self: Sized,

    This method is intended to be used when creating new instances from SQL result rows. This is the place to grab data, check consistency and types -and return the entity if possible.
    source§

    fn get_projection() -> Projection

    Construct a Projection that will allow to hydrate this SqLiteEntity.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +and return the entity if possible.

    source§

    fn get_projection() -> Projection

    Construct a [Projection] that will allow to hydrate this SqLiteEntity.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.SignedEntityRecord.html b/rust-doc/mithril_aggregator/database/provider/struct.SignedEntityRecord.html index 724e66c2f9e..2f9df126d1d 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.SignedEntityRecord.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.SignedEntityRecord.html @@ -1,22 +1,22 @@ SignedEntityRecord in mithril_aggregator::database::provider - Rust
    pub struct SignedEntityRecord {
         pub signed_entity_id: String,
    -    pub signed_entity_type: SignedEntityType,
    +    pub signed_entity_type: SignedEntityType,
         pub certificate_id: String,
         pub artifact: String,
         pub created_at: DateTime<Utc>,
     }
    Expand description

    SignedEntity record is the representation of a stored signed_entity.

    Fields§

    §signed_entity_id: String

    Signed entity id.

    -
    §signed_entity_type: SignedEntityType

    Signed entity type.

    +
    §signed_entity_type: SignedEntityType

    Signed entity type.

    §certificate_id: String

    Certificate id for this signed entity.

    §artifact: String

    Raw artifact (in JSON format).

    §created_at: DateTime<Utc>

    Date and time when the signed_entity was created

    -

    Trait Implementations§

    source§

    impl Clone for SignedEntityRecord

    source§

    fn clone(&self) -> SignedEntityRecord

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SignedEntityRecord

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<SignedEntityRecord> for Snapshot

    source§

    fn from(other: SignedEntityRecord) -> Snapshot

    Converts to this type from the input type.
    source§

    impl PartialEq<SignedEntityRecord> for SignedEntityRecord

    source§

    fn eq(&self, other: &SignedEntityRecord) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Clone for SignedEntityRecord

    source§

    fn clone(&self) -> SignedEntityRecord

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SignedEntityRecord

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<SignedEntityRecord> for Snapshot

    source§

    fn from(other: SignedEntityRecord) -> Snapshot

    Converts to this type from the input type.
    source§

    impl PartialEq<SignedEntityRecord> for SignedEntityRecord

    source§

    fn eq(&self, other: &SignedEntityRecord) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl SqLiteEntity for SignedEntityRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where +sufficient, and should not be overridden without very good reason.

    source§

    impl SqLiteEntity for SignedEntityRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where Self: Sized,

    This method is intended to be used when creating new instances from SQL result rows. This is the place to grab data, check consistency and types -and return the entity if possible.
    source§

    fn get_projection() -> Projection

    Construct a Projection that will allow to hydrate this SqLiteEntity.
    source§

    impl<T> TryFrom<SignedEntityRecord> for SignedEntity<T>where - for<'a> T: Artifact + Serialize + Deserialize<'a>,

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_from(other: SignedEntityRecord) -> Result<SignedEntity<T>, Self::Error>

    Performs the conversion.
    source§

    impl StructuralPartialEq for SignedEntityRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +and return the entity if possible.

    source§

    fn get_projection() -> Projection

    Construct a [Projection] that will allow to hydrate this SqLiteEntity.

    source§

    impl<T> TryFrom<SignedEntityRecord> for SignedEntity<T>where + for<'a> T: Artifact + Serialize + Deserialize<'a>,

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_from(other: SignedEntityRecord) -> Result<SignedEntity<T>, Self::Error>

    Performs the conversion.
    source§

    impl StructuralPartialEq for SignedEntityRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.SignedEntityRecordProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.SignedEntityRecordProvider.html index 3cffc5c6596..c7070085e6a 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.SignedEntityRecordProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.SignedEntityRecordProvider.html @@ -3,25 +3,25 @@

    source

    pub fn get_by_signed_entity_id( &self, signed_entity_id: &str -) -> Result<EntityCursor<'_, SignedEntityRecord>, StdError>

    Get SignedEntityRecords for a given signed_entity id.

    +) -> Result<EntityCursor<'_, SignedEntityRecord>, StdError>

    Get SignedEntityRecords for a given signed_entity id.

    source

    pub fn get_by_certificate_id( &self, certificate_id: &str -) -> Result<EntityCursor<'_, SignedEntityRecord>, StdError>

    Get record for a given certificate_id.

    +) -> Result<EntityCursor<'_, SignedEntityRecord>, StdError>

    Get record for a given certificate_id.

    source

    pub fn get_by_certificates_ids( &self, certificates_ids: &[&str] -) -> Result<EntityCursor<'_, SignedEntityRecord>, StdError>

    Get records for a list of given certificates_ids.

    +) -> Result<EntityCursor<'_, SignedEntityRecord>, StdError>

    Get records for a list of given certificates_ids.

    source

    pub fn get_by_signed_entity_type( &self, - signed_entity_type: &SignedEntityTypeDiscriminants -) -> Result<EntityCursor<'_, SignedEntityRecord>, StdError>

    Get SignedEntityRecords for a given signed entity type.

    -
    source

    pub fn get_all(&self) -> Result<EntityCursor<'_, SignedEntityRecord>, StdError>

    Get all SignedEntityRecords.

    -

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for SignedEntityRecordProvider<'client>

    §

    type Entity = SignedEntityRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( + signed_entity_type: &SignedEntityTypeDiscriminants +) -> Result<EntityCursor<'_, SignedEntityRecord>, StdError>

    Get SignedEntityRecords for a given signed entity type.

    +
    source

    pub fn get_all(&self) -> Result<EntityCursor<'_, SignedEntityRecord>, StdError>

    Get all SignedEntityRecords.

    +

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for SignedEntityRecordProvider<'client>

    §

    type Entity = SignedEntityRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for SignedEntityRecordProvider<'client>

    §

    impl<'client> !Send for SignedEntityRecordProvider<'client>

    §

    impl<'client> !Sync for SignedEntityRecordProvider<'client>

    §

    impl<'client> Unpin for SignedEntityRecordProvider<'client>

    §

    impl<'client> !UnwindSafe for SignedEntityRecordProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for SignedEntityRecordProvider<'client>

    §

    impl<'client> !Send for SignedEntityRecordProvider<'client>

    §

    impl<'client> !Sync for SignedEntityRecordProvider<'client>

    §

    impl<'client> Unpin for SignedEntityRecordProvider<'client>

    §

    impl<'client> !UnwindSafe for SignedEntityRecordProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.SignedEntityStoreAdapter.html b/rust-doc/mithril_aggregator/database/provider/struct.SignedEntityStoreAdapter.html index 1339c74aa23..5a40e593444 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.SignedEntityStoreAdapter.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.SignedEntityStoreAdapter.html @@ -3,39 +3,39 @@

    Trait Implementations§

    source§

    impl SignedEntityStorer for SignedEntityStoreAdapter

    source§

    fn store_signed_entity<'life0, 'life1, 'async_trait>( &'life0 self, signed_entity: &'life1 SignedEntityRecord -) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Store a signed entity
    source§

    fn get_signed_entity<'life0, 'life1, 'async_trait>( &'life0 self, signed_entity_id: &'life1 str -) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntityRecord>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntityRecord>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Get signed entity type
    source§

    fn get_signed_entity_by_certificate_id<'life0, 'life1, 'async_trait>( &'life0 self, certificate_id: &'life1 str -) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntityRecord>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntityRecord>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Get signed entity type by certificate id
    source§

    fn get_signed_entity_by_certificates_ids<'a, 'life0, 'life1, 'async_trait>( &'life0 self, certificates_ids: &'life1 [&'a str] -) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>>where Self: 'async_trait, 'a: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Get signed entities type by certificates ids
    source§

    fn get_last_signed_entities_by_type<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type_id: &'life1 SignedEntityTypeDiscriminants, + signed_entity_type_id: &'life1 SignedEntityTypeDiscriminants, total: usize -) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Get last signed entities by signed entity type
    source§

    fn update_signed_entities<'life0, 'async_trait>( &'life0 self, signed_entities: Vec<SignedEntityRecord> -) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Perform an update for all the given signed entities.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.SignerRecord.html b/rust-doc/mithril_aggregator/database/provider/struct.SignerRecord.html index e9d8958bb0b..e301ef717ea 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.SignerRecord.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.SignerRecord.html @@ -1,10 +1,10 @@ SignerRecord in mithril_aggregator::database::provider - Rust
    pub struct SignerRecord { /* private fields */ }
    Expand description

    Signer record is the representation of a stored signer.

    Trait Implementations§

    source§

    impl Clone for SignerRecord

    source§

    fn clone(&self) -> SignerRecord

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SignerRecord

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<SignerRecord> for SignerRecord

    source§

    fn eq(&self, other: &SignerRecord) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl SqLiteEntity for SignerRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where +sufficient, and should not be overridden without very good reason.

    source§

    impl SqLiteEntity for SignerRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where Self: Sized,

    This method is intended to be used when creating new instances from SQL result rows. This is the place to grab data, check consistency and types -and return the entity if possible.
    source§

    fn get_projection() -> Projection

    Construct a Projection that will allow to hydrate this SqLiteEntity.
    source§

    impl StructuralPartialEq for SignerRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +and return the entity if possible.

    source§

    fn get_projection() -> Projection

    Construct a [Projection] that will allow to hydrate this SqLiteEntity.
    source§

    impl StructuralPartialEq for SignerRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.SignerRecordProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.SignerRecordProvider.html index 972dbf8873c..420ee705763 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.SignerRecordProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.SignerRecordProvider.html @@ -3,13 +3,13 @@

    source

    pub fn get_by_signer_id( &self, signer_id: String -) -> Result<EntityCursor<'_, SignerRecord>, StdError>

    Get SignerRecords for a given signer id.

    -
    source

    pub fn get_all(&self) -> Result<EntityCursor<'_, SignerRecord>, StdError>

    Get all SignerRecords.

    -

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for SignerRecordProvider<'client>

    §

    type Entity = SignerRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( +) -> Result<EntityCursor<'_, SignerRecord>, StdError>

    Get SignerRecords for a given signer id.

    +
    source

    pub fn get_all(&self) -> Result<EntityCursor<'_, SignerRecord>, StdError>

    Get all SignerRecords.

    +

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for SignerRecordProvider<'client>

    §

    type Entity = SignerRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for SignerRecordProvider<'client>

    §

    impl<'client> !Send for SignerRecordProvider<'client>

    §

    impl<'client> !Sync for SignerRecordProvider<'client>

    §

    impl<'client> Unpin for SignerRecordProvider<'client>

    §

    impl<'client> !UnwindSafe for SignerRecordProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for SignerRecordProvider<'client>

    §

    impl<'client> !Send for SignerRecordProvider<'client>

    §

    impl<'client> !Sync for SignerRecordProvider<'client>

    §

    impl<'client> Unpin for SignerRecordProvider<'client>

    §

    impl<'client> !UnwindSafe for SignerRecordProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.SignerRegistrationRecord.html b/rust-doc/mithril_aggregator/database/provider/struct.SignerRegistrationRecord.html index 4723260e3c4..e06284be8b5 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.SignerRegistrationRecord.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.SignerRegistrationRecord.html @@ -1,10 +1,10 @@ SignerRegistrationRecord in mithril_aggregator::database::provider - Rust
    pub struct SignerRegistrationRecord { /* private fields */ }
    Expand description

    SignerRegistration record is the representation of a stored signer_registration.

    -

    Trait Implementations§

    source§

    impl Clone for SignerRegistrationRecord

    source§

    fn clone(&self) -> SignerRegistrationRecord

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SignerRegistrationRecord

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<SignerRegistrationRecord> for Signer

    source§

    fn from(other: SignerRegistrationRecord) -> Self

    Converts to this type from the input type.
    source§

    impl From<SignerRegistrationRecord> for SignerWithStake

    source§

    fn from(other: SignerRegistrationRecord) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq<SignerRegistrationRecord> for SignerRegistrationRecord

    source§

    fn eq(&self, other: &SignerRegistrationRecord) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Clone for SignerRegistrationRecord

    source§

    fn clone(&self) -> SignerRegistrationRecord

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SignerRegistrationRecord

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<SignerRegistrationRecord> for Signer

    source§

    fn from(other: SignerRegistrationRecord) -> Self

    Converts to this type from the input type.
    source§

    impl From<SignerRegistrationRecord> for SignerWithStake

    source§

    fn from(other: SignerRegistrationRecord) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq<SignerRegistrationRecord> for SignerRegistrationRecord

    source§

    fn eq(&self, other: &SignerRegistrationRecord) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl SqLiteEntity for SignerRegistrationRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where +sufficient, and should not be overridden without very good reason.

    source§

    impl SqLiteEntity for SignerRegistrationRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where Self: Sized,

    This method is intended to be used when creating new instances from SQL result rows. This is the place to grab data, check consistency and types -and return the entity if possible.
    source§

    fn get_projection() -> Projection

    Construct a Projection that will allow to hydrate this SqLiteEntity.
    source§

    impl StructuralPartialEq for SignerRegistrationRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +and return the entity if possible.

    source§

    fn get_projection() -> Projection

    Construct a [Projection] that will allow to hydrate this SqLiteEntity.
    source§

    impl StructuralPartialEq for SignerRegistrationRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.SignerRegistrationRecordProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.SignerRegistrationRecordProvider.html index dc6f096aaf7..72194e500b5 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.SignerRegistrationRecordProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.SignerRegistrationRecordProvider.html @@ -3,20 +3,20 @@

    source

    pub fn get_by_signer_id_and_epoch( &self, signer_id: String, - epoch: &Epoch -) -> Result<EntityCursor<'_, SignerRegistrationRecord>, StdError>

    Get SignerRegistrationRecords for given signer id and epoch.

    + epoch: &Epoch +) -> Result<EntityCursor<'_, SignerRegistrationRecord>, StdError>

    Get SignerRegistrationRecords for given signer id and epoch.

    source

    pub fn get_by_epoch( &self, - epoch: &Epoch -) -> Result<EntityCursor<'_, SignerRegistrationRecord>, StdError>

    Get SignerRegistrationRecords for a given Epoch.

    + epoch: &Epoch +) -> Result<EntityCursor<'_, SignerRegistrationRecord>, StdError>

    Get SignerRegistrationRecords for a given Epoch.

    source

    pub fn get_all( &self -) -> Result<EntityCursor<'_, SignerRegistrationRecord>, StdError>

    Get all SignerRegistrationRecords.

    -

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for SignerRegistrationRecordProvider<'client>

    §

    type Entity = SignerRegistrationRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( +) -> Result<EntityCursor<'_, SignerRegistrationRecord>, StdError>

    Get all SignerRegistrationRecords.

    +

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for SignerRegistrationRecordProvider<'client>

    §

    type Entity = SignerRegistrationRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for SignerRegistrationRecordProvider<'client>

    §

    impl<'client> !Send for SignerRegistrationRecordProvider<'client>

    §

    impl<'client> !Sync for SignerRegistrationRecordProvider<'client>

    §

    impl<'client> Unpin for SignerRegistrationRecordProvider<'client>

    §

    impl<'client> !UnwindSafe for SignerRegistrationRecordProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for SignerRegistrationRecordProvider<'client>

    §

    impl<'client> !Send for SignerRegistrationRecordProvider<'client>

    §

    impl<'client> !Sync for SignerRegistrationRecordProvider<'client>

    §

    impl<'client> Unpin for SignerRegistrationRecordProvider<'client>

    §

    impl<'client> !UnwindSafe for SignerRegistrationRecordProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.SignerRegistrationStore.html b/rust-doc/mithril_aggregator/database/provider/struct.SignerRegistrationStore.html index 52fe0711e97..95e7e66c68d 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.SignerRegistrationStore.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.SignerRegistrationStore.html @@ -2,20 +2,20 @@

    Implementations§

    source§

    impl SignerRegistrationStore

    source

    pub fn new(connection: Arc<Mutex<Connection>>) -> Self

    Create a new SignerRegistrationStore service

    Trait Implementations§

    source§

    impl VerificationKeyStorer for SignerRegistrationStore

    source§

    fn save_verification_key<'life0, 'async_trait>( &'life0 self, - epoch: Epoch, - signer: SignerWithStake -) -> Pin<Box<dyn Future<Output = Result<Option<SignerWithStake>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch, + signer: SignerWithStake +) -> Pin<Box<dyn Future<Output = Result<Option<SignerWithStake>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Save the verification key, for the given Signer for the given Epoch, returns the + 'life0: 'async_trait,
    Save the verification key, for the given [Signer] for the given [Epoch], returns the previous values if one already existed.
    source§

    fn get_verification_keys<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = Result<Option<HashMap<PartyId, Signer>>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = Result<Option<HashMap<PartyId, Signer>>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Returns a HashMap of Signer indexed by PartyId for the given Beacon.
    source§

    fn prune_verification_keys<'life0, 'async_trait>( + 'life0: 'async_trait,

    Returns a HashMap of [Signer] indexed by [PartyId] for the given Beacon.
    source§

    fn prune_verification_keys<'life0, 'async_trait>( &'life0 self, - max_epoch_to_prune: Epoch -) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where + max_epoch_to_prune: Epoch +) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Prune all verification keys that are at or below the given epoch.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.SignerStore.html b/rust-doc/mithril_aggregator/database/provider/struct.SignerStore.html index 53ff6d1bbf1..6dd3d1c6d43 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.SignerStore.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.SignerStore.html @@ -3,13 +3,13 @@

    Trait Implementations§

    source§

    impl SignerRecorder for SignerStore

    source§

    fn record_signer_id<'life0, 'async_trait>( &'life0 self, signer_id: String -) -> Pin<Box<dyn Future<Output = Result<(), StdError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<(), StdError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Record signer_id
    source§

    fn record_signer_pool_ticker<'life0, 'async_trait>( &'life0 self, signer_id: String, pool_ticker: Option<String> -) -> Pin<Box<dyn Future<Output = Result<(), StdError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<(), StdError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Record pool ticker by id

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.SingleSignatureRecord.html b/rust-doc/mithril_aggregator/database/provider/struct.SingleSignatureRecord.html index b176a6c4f03..086946b96e5 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.SingleSignatureRecord.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.SingleSignatureRecord.html @@ -1,23 +1,23 @@ SingleSignatureRecord in mithril_aggregator::database::provider - Rust
    pub struct SingleSignatureRecord {
         pub open_message_id: Uuid,
         pub signer_id: String,
    -    pub registration_epoch_setting_id: Epoch,
    -    pub lottery_indexes: Vec<LotteryIndex>,
    -    pub signature: HexEncodedSingleSignature,
    +    pub registration_epoch_setting_id: Epoch,
    +    pub lottery_indexes: Vec<LotteryIndex>,
    +    pub signature: HexEncodedSingleSignature,
         pub created_at: DateTime<Utc>,
     }
    Expand description

    SingleSignature record is the representation of a stored single_signature.

    Fields§

    §open_message_id: Uuid

    Open message id.

    §signer_id: String

    Signer id.

    -
    §registration_epoch_setting_id: Epoch

    Registration epoch setting id

    -
    §lottery_indexes: Vec<LotteryIndex>

    Lottery indexes

    -
    §signature: HexEncodedSingleSignature

    The STM single signature of the message

    +
    §registration_epoch_setting_id: Epoch

    Registration epoch setting id

    +
    §lottery_indexes: Vec<LotteryIndex>

    Lottery indexes

    +
    §signature: HexEncodedSingleSignature

    The STM single signature of the message

    §created_at: DateTime<Utc>

    Date and time when the single_signature was created

    Trait Implementations§

    source§

    impl Clone for SingleSignatureRecord

    source§

    fn clone(&self) -> SingleSignatureRecord

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SingleSignatureRecord

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<SingleSignatureRecord> for SingleSignatureRecord

    source§

    fn eq(&self, other: &SingleSignatureRecord) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl SqLiteEntity for SingleSignatureRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where +sufficient, and should not be overridden without very good reason.

    source§

    impl SqLiteEntity for SingleSignatureRecord

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where Self: Sized,

    This method is intended to be used when creating new instances from SQL result rows. This is the place to grab data, check consistency and types -and return the entity if possible.
    source§

    fn get_projection() -> Projection

    Construct a Projection that will allow to hydrate this SqLiteEntity.
    source§

    impl TryFrom<SingleSignatureRecord> for SingleSignatures

    §

    type Error = Box<dyn Error + Send + Sync + 'static, Global>

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: SingleSignatureRecord) -> Result<Self, Self::Error>

    Performs the conversion.
    source§

    impl StructuralPartialEq for SingleSignatureRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +and return the entity if possible.

    source§

    fn get_projection() -> Projection

    Construct a [Projection] that will allow to hydrate this SqLiteEntity.
    source§

    impl TryFrom<SingleSignatureRecord> for SingleSignatures

    §

    type Error = Box<dyn Error + Send + Sync + 'static, Global>

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: SingleSignatureRecord) -> Result<Self, Self::Error>

    Performs the conversion.
    source§

    impl StructuralPartialEq for SingleSignatureRecord

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.SingleSignatureRecordProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.SingleSignatureRecordProvider.html index 7a7dd0fb0fe..55772a57a6f 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.SingleSignatureRecordProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.SingleSignatureRecordProvider.html @@ -3,15 +3,15 @@

    source

    pub fn get_by_open_message_id( &self, open_message_id: &Uuid -) -> Result<EntityCursor<'_, SingleSignatureRecord>, StdError>

    Get SingleSignatureRecords for a given Open Message id.

    +) -> Result<EntityCursor<'_, SingleSignatureRecord>, StdError>

    Get SingleSignatureRecords for a given Open Message id.

    source

    pub fn get_all( &self -) -> Result<EntityCursor<'_, SingleSignatureRecord>, StdError>

    Get all SingleSignatureRecords.

    -

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for SingleSignatureRecordProvider<'client>

    §

    type Entity = SingleSignatureRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( +) -> Result<EntityCursor<'_, SingleSignatureRecord>, StdError>

    Get all SingleSignatureRecords.

    +

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for SingleSignatureRecordProvider<'client>

    §

    type Entity = SingleSignatureRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for SingleSignatureRecordProvider<'client>

    §

    impl<'client> !Send for SingleSignatureRecordProvider<'client>

    §

    impl<'client> !Sync for SingleSignatureRecordProvider<'client>

    §

    impl<'client> Unpin for SingleSignatureRecordProvider<'client>

    §

    impl<'client> !UnwindSafe for SingleSignatureRecordProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for SingleSignatureRecordProvider<'client>

    §

    impl<'client> !Send for SingleSignatureRecordProvider<'client>

    §

    impl<'client> !Sync for SingleSignatureRecordProvider<'client>

    §

    impl<'client> Unpin for SingleSignatureRecordProvider<'client>

    §

    impl<'client> !UnwindSafe for SingleSignatureRecordProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.SingleSignatureRepository.html b/rust-doc/mithril_aggregator/database/provider/struct.SingleSignatureRepository.html index 630f821c4bc..33c2091b851 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.SingleSignatureRepository.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.SingleSignatureRepository.html @@ -2,9 +2,9 @@

    Implementations§

    source§

    impl SingleSignatureRepository

    source

    pub fn new(connection: Arc<Mutex<Connection>>) -> Self

    Create a new SingleSignatureStoreAdapter service

    source

    pub async fn create_single_signature( &self, - single_signature: &SingleSignatures, + single_signature: &SingleSignatures, open_message: &OpenMessageRecord -) -> Result<SingleSignatureRecord, StdError>

    Create a new Single Signature in database

    +) -> Result<SingleSignatureRecord, StdError>

    Create a new Single Signature in database

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.StakePool.html b/rust-doc/mithril_aggregator/database/provider/struct.StakePool.html index 37ca8b7501a..503e32ceb51 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.StakePool.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.StakePool.html @@ -1,10 +1,10 @@ StakePool in mithril_aggregator::database::provider - Rust
    pub struct StakePool { /* private fields */ }
    Expand description

    Stake pool as read from Chain.

    Trait Implementations§

    source§

    impl Debug for StakePool

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<StakePool> for StakePool

    source§

    fn eq(&self, other: &StakePool) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl SqLiteEntity for StakePool

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where +sufficient, and should not be overridden without very good reason.

    source§

    impl SqLiteEntity for StakePool

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where Self: Sized,

    This method is intended to be used when creating new instances from SQL result rows. This is the place to grab data, check consistency and types -and return the entity if possible.
    source§

    fn get_projection() -> Projection

    Construct a Projection that will allow to hydrate this SqLiteEntity.
    source§

    impl StructuralPartialEq for StakePool

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +and return the entity if possible.

    source§

    fn get_projection() -> Projection

    Construct a [Projection] that will allow to hydrate this SqLiteEntity.
    source§

    impl StructuralPartialEq for StakePool

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.StakePoolProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.StakePoolProvider.html index 10f1c12f610..4b89ea45f76 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.StakePoolProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.StakePoolProvider.html @@ -2,13 +2,13 @@

    Implementations§

    source§

    impl<'client> StakePoolProvider<'client>

    source

    pub fn new(client: &'client Connection) -> Self

    Create a new provider

    source

    pub fn get_by_epoch( &self, - epoch: &Epoch -) -> Result<EntityCursor<'_, StakePool>, StdError>

    Get StakePools for a given Epoch for given pool_ids.

    -

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for StakePoolProvider<'client>

    §

    type Entity = StakePool

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( + epoch: &Epoch +) -> Result<EntityCursor<'_, StakePool>, StdError>

    Get StakePools for a given Epoch for given pool_ids.

    +

    Trait Implementations§

    source§

    impl<'client> Provider<'client> for StakePoolProvider<'client>

    §

    type Entity = StakePool

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'client self) -> &'client Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for StakePoolProvider<'client>

    §

    impl<'client> !Send for StakePoolProvider<'client>

    §

    impl<'client> !Sync for StakePoolProvider<'client>

    §

    impl<'client> Unpin for StakePoolProvider<'client>

    §

    impl<'client> !UnwindSafe for StakePoolProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'client> !RefUnwindSafe for StakePoolProvider<'client>

    §

    impl<'client> !Send for StakePoolProvider<'client>

    §

    impl<'client> !Sync for StakePoolProvider<'client>

    §

    impl<'client> Unpin for StakePoolProvider<'client>

    §

    impl<'client> !UnwindSafe for StakePoolProvider<'client>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.StakePoolStore.html b/rust-doc/mithril_aggregator/database/provider/struct.StakePoolStore.html index 368ad9449b9..ef4336f75cf 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.StakePoolStore.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.StakePoolStore.html @@ -3,16 +3,16 @@ connection: Arc<Mutex<Connection>>, retention_limit: Option<u64> ) -> Self

    Create a new StakePool service

    -

    Trait Implementations§

    source§

    impl StakeStorer for StakePoolStore

    source§

    fn save_stakes<'life0, 'async_trait>( +

    Trait Implementations§

    source§

    impl StakeStorer for StakePoolStore

    source§

    fn save_stakes<'life0, 'async_trait>( &'life0 self, - epoch: Epoch, - stakes: StakeDistribution -) -> Pin<Box<dyn Future<Output = Result<Option<StakeDistribution>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch, + stakes: StakeDistribution +) -> Pin<Box<dyn Future<Output = Result<Option<StakeDistribution>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Save the stakes in the store for a given epoch.
    source§

    fn get_stakes<'life0, 'async_trait>( + 'life0: 'async_trait,

    Save the stakes in the store for a given epoch.
    source§

    fn get_stakes<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = Result<Option<StakeDistribution>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = Result<Option<StakeDistribution>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get the stakes of all party at a given epoch.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.UpdateEpochSettingProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.UpdateEpochSettingProvider.html index e2c8141314a..f0af4417585 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.UpdateEpochSettingProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.UpdateEpochSettingProvider.html @@ -1,10 +1,10 @@ UpdateEpochSettingProvider in mithril_aggregator::database::provider - Rust
    pub struct UpdateEpochSettingProvider<'conn> { /* private fields */ }
    Expand description

    Query to update the epoch setting

    Implementations§

    source§

    impl<'conn> UpdateEpochSettingProvider<'conn>

    source

    pub fn new(connection: &'conn Connection) -> Self

    Create a new instance

    -

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for UpdateEpochSettingProvider<'conn>

    §

    type Entity = EpochSettingRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( +

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for UpdateEpochSettingProvider<'conn>

    §

    type Entity = EpochSettingRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'conn> !RefUnwindSafe for UpdateEpochSettingProvider<'conn>

    §

    impl<'conn> !Send for UpdateEpochSettingProvider<'conn>

    §

    impl<'conn> !Sync for UpdateEpochSettingProvider<'conn>

    §

    impl<'conn> Unpin for UpdateEpochSettingProvider<'conn>

    §

    impl<'conn> !UnwindSafe for UpdateEpochSettingProvider<'conn>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'conn> !RefUnwindSafe for UpdateEpochSettingProvider<'conn>

    §

    impl<'conn> !Send for UpdateEpochSettingProvider<'conn>

    §

    impl<'conn> !Sync for UpdateEpochSettingProvider<'conn>

    §

    impl<'conn> Unpin for UpdateEpochSettingProvider<'conn>

    §

    impl<'conn> !UnwindSafe for UpdateEpochSettingProvider<'conn>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.UpdateSignerRecordProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.UpdateSignerRecordProvider.html index be95576c220..e6ff428a42c 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.UpdateSignerRecordProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.UpdateSignerRecordProvider.html @@ -1,10 +1,10 @@ UpdateSignerRecordProvider in mithril_aggregator::database::provider - Rust
    pub struct UpdateSignerRecordProvider<'conn> { /* private fields */ }
    Expand description

    Query to update the signer record

    Implementations§

    source§

    impl<'conn> UpdateSignerRecordProvider<'conn>

    source

    pub fn new(connection: &'conn Connection) -> Self

    Create a new instance

    -

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for UpdateSignerRecordProvider<'conn>

    §

    type Entity = SignerRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( +

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for UpdateSignerRecordProvider<'conn>

    §

    type Entity = SignerRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'conn> !RefUnwindSafe for UpdateSignerRecordProvider<'conn>

    §

    impl<'conn> !Send for UpdateSignerRecordProvider<'conn>

    §

    impl<'conn> !Sync for UpdateSignerRecordProvider<'conn>

    §

    impl<'conn> Unpin for UpdateSignerRecordProvider<'conn>

    §

    impl<'conn> !UnwindSafe for UpdateSignerRecordProvider<'conn>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    §

    impl<'conn> !RefUnwindSafe for UpdateSignerRecordProvider<'conn>

    §

    impl<'conn> !Send for UpdateSignerRecordProvider<'conn>

    §

    impl<'conn> !Sync for UpdateSignerRecordProvider<'conn>

    §

    impl<'conn> Unpin for UpdateSignerRecordProvider<'conn>

    §

    impl<'conn> !UnwindSafe for UpdateSignerRecordProvider<'conn>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/struct.UpdateSingleSignatureRecordProvider.html b/rust-doc/mithril_aggregator/database/provider/struct.UpdateSingleSignatureRecordProvider.html index 351b40730b4..a69cbba125f 100644 --- a/rust-doc/mithril_aggregator/database/provider/struct.UpdateSingleSignatureRecordProvider.html +++ b/rust-doc/mithril_aggregator/database/provider/struct.UpdateSingleSignatureRecordProvider.html @@ -1,10 +1,10 @@ UpdateSingleSignatureRecordProvider in mithril_aggregator::database::provider - Rust
    pub struct UpdateSingleSignatureRecordProvider<'conn> { /* private fields */ }
    Expand description

    Query to update the single_signature record

    Implementations§

    source§

    impl<'conn> UpdateSingleSignatureRecordProvider<'conn>

    source

    pub fn new(connection: &'conn Connection) -> Self

    Create a new instance

    -

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for UpdateSingleSignatureRecordProvider<'conn>

    §

    type Entity = SingleSignatureRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this -provider performs.
    source§

    fn find( +

    Trait Implementations§

    source§

    impl<'conn> Provider<'conn> for UpdateSingleSignatureRecordProvider<'conn>

    §

    type Entity = SingleSignatureRecord

    Entity type returned by the result cursor.
    source§

    fn get_connection(&'conn self) -> &'conn Connection

    Share the connection.
    source§

    fn get_definition(&self, condition: &str) -> String

    Return the definition of this provider, ie the actual SQL query this +provider performs.
    §

    fn find( &'conn self, - filters: WhereCondition -) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + filters: WhereCondition +) -> Result<EntityCursor<'conn, Self::Entity>, Box<dyn Error + Send + Sync + 'static, Global>>

    Perform the parametrized definition query.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

    Casts the value.
    source§

    impl<T> Borrow<T> for Twhere diff --git a/rust-doc/mithril_aggregator/database/provider/trait.SignedEntityStorer.html b/rust-doc/mithril_aggregator/database/provider/trait.SignedEntityStorer.html index 0030502f982..a7478cf0003 100644 --- a/rust-doc/mithril_aggregator/database/provider/trait.SignedEntityStorer.html +++ b/rust-doc/mithril_aggregator/database/provider/trait.SignedEntityStorer.html @@ -3,88 +3,88 @@ fn store_signed_entity<'life0, 'life1, 'async_trait>( &'life0 self, signed_entity: &'life1 SignedEntityRecord - ) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_signed_entity<'life0, 'life1, 'async_trait>( &'life0 self, signed_entity_id: &'life1 str - ) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntityRecord>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntityRecord>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_signed_entity_by_certificate_id<'life0, 'life1, 'async_trait>( &'life0 self, certificate_hash: &'life1 str - ) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntityRecord>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntityRecord>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_signed_entity_by_certificates_ids<'a, 'life0, 'life1, 'async_trait>( &'life0 self, certificates_ids: &'life1 [&'a str] - ) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>> where Self: 'async_trait, 'a: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_last_signed_entities_by_type<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type_id: &'life1 SignedEntityTypeDiscriminants, + signed_entity_type_id: &'life1 SignedEntityTypeDiscriminants, total: usize - ) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn update_signed_entities<'life0, 'async_trait>( &'life0 self, signed_entities: Vec<SignedEntityRecord> - ) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; }
    Expand description

    Signed entity storer trait

    Required Methods§

    source

    fn store_signed_entity<'life0, 'life1, 'async_trait>( &'life0 self, signed_entity: &'life1 SignedEntityRecord -) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Store a signed entity

    source

    fn get_signed_entity<'life0, 'life1, 'async_trait>( &'life0 self, signed_entity_id: &'life1 str -) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntityRecord>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntityRecord>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Get signed entity type

    source

    fn get_signed_entity_by_certificate_id<'life0, 'life1, 'async_trait>( &'life0 self, certificate_hash: &'life1 str -) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntityRecord>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntityRecord>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Get signed entity type by certificate id

    source

    fn get_signed_entity_by_certificates_ids<'a, 'life0, 'life1, 'async_trait>( &'life0 self, certificates_ids: &'life1 [&'a str] -) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>>where Self: 'async_trait, 'a: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Get signed entities type by certificates ids

    source

    fn get_last_signed_entities_by_type<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type_id: &'life1 SignedEntityTypeDiscriminants, + signed_entity_type_id: &'life1 SignedEntityTypeDiscriminants, total: usize -) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Get last signed entities by signed entity type

    source

    fn update_signed_entities<'life0, 'async_trait>( &'life0 self, signed_entities: Vec<SignedEntityRecord> -) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntityRecord>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Perform an update for all the given signed entities.

    Implementors§

    \ No newline at end of file diff --git a/rust-doc/mithril_aggregator/dependency_injection/enum.DependenciesBuilderError.html b/rust-doc/mithril_aggregator/dependency_injection/enum.DependenciesBuilderError.html index ab9ed2b1121..733884be48d 100644 --- a/rust-doc/mithril_aggregator/dependency_injection/enum.DependenciesBuilderError.html +++ b/rust-doc/mithril_aggregator/dependency_injection/enum.DependenciesBuilderError.html @@ -1,18 +1,18 @@ DependenciesBuilderError in mithril_aggregator::dependency_injection - Rust
    pub enum DependenciesBuilderError {
         Initialization {
             message: String,
    -        error: Option<StdError>,
    +        error: Option<StdError>,
         },
         MissingConfiguration(String),
         InconsistentState(String),
     }
    Expand description

    Error that can occure during dependencies initialization process.

    Variants§

    §

    Initialization

    Fields

    §message: String

    Error context message

    -
    §error: Option<StdError>

    Eventual nested error

    +
    §error: Option<StdError>

    Eventual nested error

    Unrecoverable system initialization failure

    §

    MissingConfiguration(String)

    Configuration parameter missing for initialization.

    §

    InconsistentState(String)

    The dependency has reached a state where dependencies are not consistent anymore. Shall be critical.

    -

    Trait Implementations§

    source§

    impl Debug for DependenciesBuilderError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for DependenciesBuilderError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for DependenciesBuilderError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Box<dyn Error + Send + Sync + 'static, Global>> for DependenciesBuilderError

    source§

    fn from(value: StdError) -> Self

    Converts to this type from the input type.
    source§

    impl From<ConfigError> for DependenciesBuilderError

    source§

    fn from(value: ConfigError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Debug for DependenciesBuilderError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for DependenciesBuilderError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for DependenciesBuilderError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Box<dyn Error + Send + Sync + 'static, Global>> for DependenciesBuilderError

    source§

    fn from(value: StdError) -> Self

    Converts to this type from the input type.
    source§

    impl From<ConfigError> for DependenciesBuilderError

    source§

    fn from(value: ConfigError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/dependency_injection/struct.DependenciesBuilder.html b/rust-doc/mithril_aggregator/dependency_injection/struct.DependenciesBuilder.html index 75e14c37fb3..08932d2bc45 100644 --- a/rust-doc/mithril_aggregator/dependency_injection/struct.DependenciesBuilder.html +++ b/rust-doc/mithril_aggregator/dependency_injection/struct.DependenciesBuilder.html @@ -8,27 +8,27 @@ pub certificate_repository: Option<Arc<CertificateRepository>>, pub verification_key_store: Option<Arc<dyn VerificationKeyStorer>>, pub protocol_parameters_store: Option<Arc<dyn ProtocolParametersStorer>>, - pub cardano_cli_runner: Option<Box<CardanoCliRunner>>, - pub chain_observer: Option<Arc<dyn ChainObserver>>, - pub beacon_provider: Option<Arc<dyn BeaconProvider>>, - pub immutable_digester: Option<Arc<dyn ImmutableDigester>>, - pub immutable_file_observer: Option<Arc<dyn ImmutableFileObserver>>, - pub immutable_cache_provider: Option<Arc<dyn ImmutableFileDigestCacheProvider>>, - pub digester: Option<Arc<dyn ImmutableDigester>>, + pub cardano_cli_runner: Option<Box<CardanoCliRunner>>, + pub chain_observer: Option<Arc<dyn ChainObserver>>, + pub beacon_provider: Option<Arc<dyn BeaconProvider>>, + pub immutable_digester: Option<Arc<dyn ImmutableDigester>>, + pub immutable_file_observer: Option<Arc<dyn ImmutableFileObserver>>, + pub immutable_cache_provider: Option<Arc<dyn ImmutableFileDigestCacheProvider>>, + pub digester: Option<Arc<dyn ImmutableDigester>>, pub snapshotter: Option<Arc<dyn Snapshotter>>, - pub certificate_verifier: Option<Arc<dyn CertificateVerifier>>, - pub genesis_verifier: Option<Arc<ProtocolGenesisVerifier>>, + pub certificate_verifier: Option<Arc<dyn CertificateVerifier>>, + pub genesis_verifier: Option<Arc<ProtocolGenesisVerifier>>, pub mithril_registerer: Option<Arc<MithrilSignerRegisterer>>, - pub era_checker: Option<Arc<EraChecker>>, - pub era_reader_adapter: Option<Arc<dyn EraReaderAdapter>>, - pub era_reader: Option<Arc<EraReader>>, + pub era_checker: Option<Arc<EraChecker>>, + pub era_reader_adapter: Option<Arc<dyn EraReaderAdapter>>, + pub era_reader: Option<Arc<EraReader>>, pub event_transmitter: Option<Arc<TransmitterService<EventMessage>>>, pub event_transmitter_channel: (Option<UnboundedReceiver<EventMessage>>, Option<UnboundedSender<EventMessage>>), - pub api_version_provider: Option<Arc<APIVersionProvider>>, + pub api_version_provider: Option<Arc<APIVersionProvider>>, pub stake_distribution_service: Option<Arc<dyn StakeDistributionService>>, pub ticker_service: Option<Arc<dyn TickerService>>, pub signer_recorder: Option<Arc<dyn SignerRecorder>>, - pub signable_builder_service: Option<Arc<dyn SignableBuilderService>>, + pub signable_builder_service: Option<Arc<dyn SignableBuilderService>>, pub signed_entity_service: Option<Arc<dyn SignedEntityService>>, pub certifier_service: Option<Arc<dyn CertifierService>>, pub signed_entity_storer: Option<Arc<dyn SignedEntityStorer>>, @@ -51,27 +51,27 @@

    §certificate_repository: Option<Arc<CertificateRepository>>

    Certificate repository.

    §verification_key_store: Option<Arc<dyn VerificationKeyStorer>>

    Verification key store.

    §protocol_parameters_store: Option<Arc<dyn ProtocolParametersStorer>>

    Protocol parameter store.

    -
    §cardano_cli_runner: Option<Box<CardanoCliRunner>>

    Cardano CLI Runner for the ChainObserver

    -
    §chain_observer: Option<Arc<dyn ChainObserver>>

    Chain observer service.

    -
    §beacon_provider: Option<Arc<dyn BeaconProvider>>

    Beacon provider service.

    -
    §immutable_digester: Option<Arc<dyn ImmutableDigester>>

    Immutable file digester service.

    -
    §immutable_file_observer: Option<Arc<dyn ImmutableFileObserver>>

    Immutable file observer service.

    -
    §immutable_cache_provider: Option<Arc<dyn ImmutableFileDigestCacheProvider>>

    Immutable cache provider service.

    -
    §digester: Option<Arc<dyn ImmutableDigester>>

    Digester service.

    +
    §cardano_cli_runner: Option<Box<CardanoCliRunner>>

    Cardano CLI Runner for the [ChainObserver]

    +
    §chain_observer: Option<Arc<dyn ChainObserver>>

    Chain observer service.

    +
    §beacon_provider: Option<Arc<dyn BeaconProvider>>

    Beacon provider service.

    +
    §immutable_digester: Option<Arc<dyn ImmutableDigester>>

    Immutable file digester service.

    +
    §immutable_file_observer: Option<Arc<dyn ImmutableFileObserver>>

    Immutable file observer service.

    +
    §immutable_cache_provider: Option<Arc<dyn ImmutableFileDigestCacheProvider>>

    Immutable cache provider service.

    +
    §digester: Option<Arc<dyn ImmutableDigester>>

    Digester service.

    §snapshotter: Option<Arc<dyn Snapshotter>>

    Snapshotter service.

    -
    §certificate_verifier: Option<Arc<dyn CertificateVerifier>>

    Certificate verifier service.

    -
    §genesis_verifier: Option<Arc<ProtocolGenesisVerifier>>

    Genesis signature verifier service.

    +
    §certificate_verifier: Option<Arc<dyn CertificateVerifier>>

    Certificate verifier service.

    +
    §genesis_verifier: Option<Arc<ProtocolGenesisVerifier>>

    Genesis signature verifier service.

    §mithril_registerer: Option<Arc<MithrilSignerRegisterer>>

    Signer registerer service

    -
    §era_checker: Option<Arc<EraChecker>>

    Era checker service

    -
    §era_reader_adapter: Option<Arc<dyn EraReaderAdapter>>

    Adapter for EraReader

    -
    §era_reader: Option<Arc<EraReader>>

    Era reader service

    +
    §era_checker: Option<Arc<EraChecker>>

    Era checker service

    +
    §era_reader_adapter: Option<Arc<dyn EraReaderAdapter>>

    Adapter for [EraReader]

    +
    §era_reader: Option<Arc<EraReader>>

    Era reader service

    §event_transmitter: Option<Arc<TransmitterService<EventMessage>>>

    Event Transmitter Service

    §event_transmitter_channel: (Option<UnboundedReceiver<EventMessage>>, Option<UnboundedSender<EventMessage>>)

    Event transmitter Channel Sender endpoint

    -
    §api_version_provider: Option<Arc<APIVersionProvider>>

    API Version provider

    +
    §api_version_provider: Option<Arc<APIVersionProvider>>

    API Version provider

    §stake_distribution_service: Option<Arc<dyn StakeDistributionService>>

    Stake Distribution Service

    §ticker_service: Option<Arc<dyn TickerService>>

    Ticker Service (TODO: remove BeaconProvider)

    §signer_recorder: Option<Arc<dyn SignerRecorder>>

    Signer Recorder

    -
    §signable_builder_service: Option<Arc<dyn SignableBuilderService>>

    Signable Builder Service

    +
    §signable_builder_service: Option<Arc<dyn SignableBuilderService>>

    Signable Builder Service

    §signed_entity_service: Option<Arc<dyn SignedEntityService>>

    Signed Entity Service

    §certifier_service: Option<Arc<dyn CertifierService>>

    Certifier service

    §signed_entity_storer: Option<Arc<dyn SignedEntityStorer>>

    Signed Entity storer

    @@ -94,32 +94,32 @@
    source

    pub async fn get_protocol_parameters_store( &mut self ) -> Result<Arc<dyn ProtocolParametersStorer>>

    Get a configured ProtocolParametersStorer.

    -
    source

    pub async fn get_chain_observer(&mut self) -> Result<Arc<dyn ChainObserver>>

    Return a ChainObserver

    -
    source

    pub async fn get_cardano_cli_runner(&mut self) -> Result<Box<CardanoCliRunner>>

    Return a CardanoCliRunner

    -
    source

    pub async fn get_beacon_provider(&mut self) -> Result<Arc<dyn BeaconProvider>>

    Return a BeaconProvider instance.

    +
    source

    pub async fn get_chain_observer(&mut self) -> Result<Arc<dyn ChainObserver>>

    Return a [ChainObserver]

    +
    source

    pub async fn get_cardano_cli_runner(&mut self) -> Result<Box<CardanoCliRunner>>

    Return a [CardanoCliRunner]

    +
    source

    pub async fn get_beacon_provider(&mut self) -> Result<Arc<dyn BeaconProvider>>

    Return a [BeaconProvider] instance.

    source

    pub async fn get_immutable_file_observer( &mut self -) -> Result<Arc<dyn ImmutableFileObserver>>

    Return a ImmutableFileObserver instance.

    +) -> Result<Arc<dyn ImmutableFileObserver>>

    Return a [ImmutableFileObserver] instance.

    source

    pub async fn get_immutable_cache_provider( &mut self -) -> Result<Arc<dyn ImmutableFileDigestCacheProvider>>

    Get an ImmutableFileDigestCacheProvider

    +) -> Result<Arc<dyn ImmutableFileDigestCacheProvider>>

    Get an [ImmutableFileDigestCacheProvider]

    source

    pub async fn get_logger(&self) -> Result<Logger>

    This method does not cache the logger since it is managed internally by its own crate.

    source

    pub async fn get_immutable_digester( &mut self -) -> Result<Arc<dyn ImmutableDigester>>

    Immutable digester.

    +) -> Result<Arc<dyn ImmutableDigester>>

    Immutable digester.

    source

    pub async fn get_snapshotter(&mut self) -> Result<Arc<dyn Snapshotter>>

    Snapshotter service.

    source

    pub async fn get_certificate_verifier( &mut self -) -> Result<Arc<dyn CertificateVerifier>>

    CertificateVerifier service.

    +) -> Result<Arc<dyn CertificateVerifier>>

    [CertificateVerifier] service.

    source

    pub async fn get_genesis_verifier( &mut self -) -> Result<Arc<ProtocolGenesisVerifier>>

    Return a ProtocolGenesisVerifier

    +) -> Result<Arc<ProtocolGenesisVerifier>>

    Return a [ProtocolGenesisVerifier]

    source

    pub async fn get_mithril_registerer( &mut self ) -> Result<Arc<MithrilSignerRegisterer>>

    source

    pub async fn get_era_reader(&mut self) -> Result<Arc<EraReader>>

    EraReader service

    -
    source

    pub async fn get_era_checker(&mut self) -> Result<Arc<EraChecker>>

    EraReader service

    +
    source

    pub async fn get_era_reader(&mut self) -> Result<Arc<EraReader>>

    [EraReader] service

    +
    source

    pub async fn get_era_checker(&mut self) -> Result<Arc<EraChecker>>

    [EraReader] service

    source

    pub async fn get_event_transmitter_sender( &mut self ) -> Result<UnboundedSender<EventMessage>>

    Return the EventMessage channel sender.

    @@ -132,14 +132,14 @@ ) -> Result<Arc<TransmitterService<EventMessage>>>
    source

    pub async fn get_api_version_provider( &mut self -) -> Result<Arc<APIVersionProvider>>

    APIVersionProvider service

    +) -> Result<Arc<APIVersionProvider>>

    [APIVersionProvider] service

    source

    pub async fn get_stake_distribution_service( &mut self ) -> Result<Arc<dyn StakeDistributionService>>

    source

    pub async fn get_signer_recorder(&mut self) -> Result<Arc<dyn SignerRecorder>>

    source

    pub async fn get_signable_builder_service( &mut self -) -> Result<Arc<dyn SignableBuilderService>>

    SignableBuilderService service

    +) -> Result<Arc<dyn SignableBuilderService>>

    [SignableBuilderService] service

    source

    pub async fn get_signed_entity_service( &mut self ) -> Result<Arc<dyn SignedEntityService>>

    SignedEntityService service

    diff --git a/rust-doc/mithril_aggregator/dependency_injection/struct.DependencyContainer.html b/rust-doc/mithril_aggregator/dependency_injection/struct.DependencyContainer.html index 5e8ef1d572e..ed66dc51d06 100644 --- a/rust-doc/mithril_aggregator/dependency_injection/struct.DependencyContainer.html +++ b/rust-doc/mithril_aggregator/dependency_injection/struct.DependencyContainer.html @@ -8,22 +8,22 @@ pub certificate_repository: Arc<CertificateRepository>, pub verification_key_store: Arc<dyn VerificationKeyStorer>, pub protocol_parameters_store: Arc<dyn ProtocolParametersStorer>, - pub chain_observer: Arc<dyn ChainObserver>, - pub beacon_provider: Arc<dyn BeaconProvider>, - pub immutable_file_observer: Arc<dyn ImmutableFileObserver>, - pub digester: Arc<dyn ImmutableDigester>, + pub chain_observer: Arc<dyn ChainObserver>, + pub beacon_provider: Arc<dyn BeaconProvider>, + pub immutable_file_observer: Arc<dyn ImmutableFileObserver>, + pub digester: Arc<dyn ImmutableDigester>, pub snapshotter: Arc<dyn Snapshotter>, - pub certificate_verifier: Arc<dyn CertificateVerifier>, - pub genesis_verifier: Arc<ProtocolGenesisVerifier>, + pub certificate_verifier: Arc<dyn CertificateVerifier>, + pub genesis_verifier: Arc<ProtocolGenesisVerifier>, pub signer_registerer: Arc<dyn SignerRegisterer>, pub signer_registration_round_opener: Arc<dyn SignerRegistrationRoundOpener>, - pub era_checker: Arc<EraChecker>, - pub era_reader: Arc<EraReader>, + pub era_checker: Arc<EraChecker>, + pub era_reader: Arc<EraReader>, pub event_transmitter: Arc<TransmitterService<EventMessage>>, - pub api_version_provider: Arc<APIVersionProvider>, + pub api_version_provider: Arc<APIVersionProvider>, pub stake_distribution_service: Arc<dyn StakeDistributionService>, pub signer_recorder: Arc<dyn SignerRecorder>, - pub signable_builder_service: Arc<dyn SignableBuilderService>, + pub signable_builder_service: Arc<dyn SignableBuilderService>, pub signed_entity_service: Arc<dyn SignedEntityService>, pub certifier_service: Arc<dyn CertifierService>, pub ticker_service: Arc<dyn TickerService>, @@ -41,22 +41,22 @@
    §certificate_repository: Arc<CertificateRepository>

    Certificate store.

    §verification_key_store: Arc<dyn VerificationKeyStorer>

    Verification key store.

    §protocol_parameters_store: Arc<dyn ProtocolParametersStorer>

    Protocol parameter store.

    -
    §chain_observer: Arc<dyn ChainObserver>

    Chain observer service.

    -
    §beacon_provider: Arc<dyn BeaconProvider>

    Beacon provider service.

    -
    §immutable_file_observer: Arc<dyn ImmutableFileObserver>

    Immutable file observer service.

    -
    §digester: Arc<dyn ImmutableDigester>

    Digester service.

    +
    §chain_observer: Arc<dyn ChainObserver>

    Chain observer service.

    +
    §beacon_provider: Arc<dyn BeaconProvider>

    Beacon provider service.

    +
    §immutable_file_observer: Arc<dyn ImmutableFileObserver>

    Immutable file observer service.

    +
    §digester: Arc<dyn ImmutableDigester>

    Digester service.

    §snapshotter: Arc<dyn Snapshotter>

    Snapshotter service.

    -
    §certificate_verifier: Arc<dyn CertificateVerifier>

    Certificate verifier service.

    -
    §genesis_verifier: Arc<ProtocolGenesisVerifier>

    Genesis signature verifier service.

    +
    §certificate_verifier: Arc<dyn CertificateVerifier>

    Certificate verifier service.

    +
    §genesis_verifier: Arc<ProtocolGenesisVerifier>

    Genesis signature verifier service.

    §signer_registerer: Arc<dyn SignerRegisterer>

    Signer registerer service

    §signer_registration_round_opener: Arc<dyn SignerRegistrationRoundOpener>

    Signer registration round opener service

    -
    §era_checker: Arc<EraChecker>

    Era checker service

    -
    §era_reader: Arc<EraReader>

    Era reader service

    +
    §era_checker: Arc<EraChecker>

    Era checker service

    +
    §era_reader: Arc<EraReader>

    Era reader service

    §event_transmitter: Arc<TransmitterService<EventMessage>>

    Event Transmitter Service

    -
    §api_version_provider: Arc<APIVersionProvider>

    API Version provider

    +
    §api_version_provider: Arc<APIVersionProvider>

    API Version provider

    §stake_distribution_service: Arc<dyn StakeDistributionService>

    Stake Distribution Service

    §signer_recorder: Arc<dyn SignerRecorder>

    Signer Recorder

    -
    §signable_builder_service: Arc<dyn SignableBuilderService>

    Signable Builder Service

    +
    §signable_builder_service: Arc<dyn SignableBuilderService>

    Signable Builder Service

    §signed_entity_service: Arc<dyn SignedEntityService>

    Signed Entity Service

    §certifier_service: Arc<dyn CertifierService>

    Certifier Service

    §ticker_service: Arc<dyn TickerService>

    Ticker Service

    diff --git a/rust-doc/mithril_aggregator/entities/struct.OpenMessage.html b/rust-doc/mithril_aggregator/entities/struct.OpenMessage.html index 804e00b41e9..127d361ee74 100644 --- a/rust-doc/mithril_aggregator/entities/struct.OpenMessage.html +++ b/rust-doc/mithril_aggregator/entities/struct.OpenMessage.html @@ -1,21 +1,21 @@ OpenMessage in mithril_aggregator::entities - Rust
    pub struct OpenMessage {
    -    pub epoch: Epoch,
    -    pub signed_entity_type: SignedEntityType,
    -    pub protocol_message: ProtocolMessage,
    +    pub epoch: Epoch,
    +    pub signed_entity_type: SignedEntityType,
    +    pub protocol_message: ProtocolMessage,
         pub is_certified: bool,
    -    pub single_signatures: Vec<SingleSignatures>,
    +    pub single_signatures: Vec<SingleSignatures>,
         pub created_at: DateTime<Utc>,
     }
    Expand description

    OpenMessage

    An open message is a message open for signatures. Every signer may send a single signature for this message from which a multi signature will be generated if possible.

    -

    Fields§

    §epoch: Epoch

    Epoch

    -
    §signed_entity_type: SignedEntityType

    Type of message

    -
    §protocol_message: ProtocolMessage

    Message used by the Mithril Protocol

    +

    Fields§

    §epoch: Epoch

    Epoch

    +
    §signed_entity_type: SignedEntityType

    Type of message

    +
    §protocol_message: ProtocolMessage

    Message used by the Mithril Protocol

    §is_certified: bool

    Has this message been converted into a Certificate?

    -
    §single_signatures: Vec<SingleSignatures>

    associated single signatures

    +
    §single_signatures: Vec<SingleSignatures>

    associated single signatures

    §created_at: DateTime<Utc>

    Message creation datetime

    -

    Implementations§

    source§

    impl OpenMessage

    source

    pub fn get_signers_id(&self) -> Vec<PartyId>

    Gather all signers party_id for this open message

    +

    Implementations§

    source§

    impl OpenMessage

    source

    pub fn get_signers_id(&self) -> Vec<PartyId>

    Gather all signers party_id for this open message

    Trait Implementations§

    source§

    impl Clone for OpenMessage

    source§

    fn clone(&self) -> OpenMessage

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for OpenMessage

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<OpenMessageRecord> for OpenMessage

    source§

    fn from(record: OpenMessageRecord) -> Self

    Converts to this type from the input type.
    source§

    impl From<OpenMessageWithSingleSignaturesRecord> for OpenMessage

    source§

    fn from(record: OpenMessageWithSingleSignaturesRecord) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq<OpenMessage> for OpenMessage

    source§

    fn eq(&self, other: &OpenMessage) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for OpenMessage

    source§

    impl StructuralEq for OpenMessage

    source§

    impl StructuralPartialEq for OpenMessage

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_aggregator/enum.ProtocolError.html b/rust-doc/mithril_aggregator/enum.ProtocolError.html index 7e44348592d..aaf8656bfdb 100644 --- a/rust-doc/mithril_aggregator/enum.ProtocolError.html +++ b/rust-doc/mithril_aggregator/enum.ProtocolError.html @@ -1,30 +1,30 @@ ProtocolError in mithril_aggregator - Rust
    pub enum ProtocolError {
         ExistingSigner(),
         UnregisteredParty(),
    -    FailedSignerRegistration(ProtocolRegistrationError),
    -    ExistingSingleSignature(PartyId),
    +    FailedSignerRegistration(ProtocolRegistrationError),
    +    ExistingSingleSignature(PartyId),
         Codec(String),
         Core(String),
         UnavailableMessage(),
         UnavailableProtocolParameters(),
         UnavailableClerk(),
         UnavailableBeacon(),
    -    StoreError(StoreError),
    -    Beacon(EpochError),
    +    StoreError(StoreError),
    +    Beacon(EpochError),
     }
    Expand description

    Error type for multi signer service.

    Variants§

    §

    ExistingSigner()

    Signer is already registered.

    §

    UnregisteredParty()

    Signer was not registered.

    -
    §

    FailedSignerRegistration(ProtocolRegistrationError)

    Signer registration failed.

    -
    §

    ExistingSingleSignature(PartyId)

    Single signature already recorded.

    +
    §

    FailedSignerRegistration(ProtocolRegistrationError)

    Signer registration failed.

    +
    §

    ExistingSingleSignature(PartyId)

    Single signature already recorded.

    §

    Codec(String)

    Codec error.

    §

    Core(String)

    Mithril STM library returned an error.

    §

    UnavailableMessage()

    No message available.

    §

    UnavailableProtocolParameters()

    No protocol parameters available.

    §

    UnavailableClerk()

    No clerk available.

    §

    UnavailableBeacon()

    No beacon available.

    -
    §

    StoreError(StoreError)

    Store error.

    -
    §

    Beacon(EpochError)

    Beacon error.

    -

    Trait Implementations§

    source§

    impl Debug for ProtocolError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for ProtocolError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for ProtocolError

    source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<EpochError> for ProtocolError

    source§

    fn from(source: EpochError) -> Self

    Converts to this type from the input type.
    source§

    impl From<ProtocolRegistrationErrorWrapper> for ProtocolError

    source§

    fn from(source: ProtocolRegistrationError) -> Self

    Converts to this type from the input type.
    source§

    impl From<StoreError> for ProtocolError

    source§

    fn from(source: StoreError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    §

    StoreError(StoreError)

    Store error.

    +
    §

    Beacon(EpochError)

    Beacon error.

    +

    Trait Implementations§

    source§

    impl Debug for ProtocolError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for ProtocolError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for ProtocolError

    source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<EpochError> for ProtocolError

    source§

    fn from(source: EpochError) -> Self

    Converts to this type from the input type.
    source§

    impl From<ProtocolRegistrationErrorWrapper> for ProtocolError

    source§

    fn from(source: ProtocolRegistrationError) -> Self

    Converts to this type from the input type.
    source§

    impl From<StoreError> for ProtocolError

    source§

    fn from(source: StoreError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/enum.RuntimeError.html b/rust-doc/mithril_aggregator/enum.RuntimeError.html index 7e547295e81..a9215536c13 100644 --- a/rust-doc/mithril_aggregator/enum.RuntimeError.html +++ b/rust-doc/mithril_aggregator/enum.RuntimeError.html @@ -1,32 +1,32 @@ RuntimeError in mithril_aggregator - Rust
    pub enum RuntimeError {
         KeepState {
             message: String,
    -        nested_error: Option<StdError>,
    +        nested_error: Option<StdError>,
         },
         Critical {
             message: String,
    -        nested_error: Option<StdError>,
    +        nested_error: Option<StdError>,
         },
         ReInit {
             message: String,
    -        nested_error: Option<StdError>,
    +        nested_error: Option<StdError>,
         },
     }
    Expand description

    Error encountered or produced by the Runtime. This enum represents the faith of the errors produced during the state transitions.

    Variants§

    §

    KeepState

    Fields

    §message: String

    error message

    -
    §nested_error: Option<StdError>

    Eventual caught error

    +
    §nested_error: Option<StdError>

    Eventual caught error

    Errors that need the runtime to try again without changing its state.

    §

    Critical

    Fields

    §message: String

    error message

    -
    §nested_error: Option<StdError>

    Eventual caught error

    +
    §nested_error: Option<StdError>

    Eventual caught error

    A Critical error means the Runtime stops and the software exits with an error code.

    §

    ReInit

    Fields

    §message: String

    error message

    -
    §nested_error: Option<StdError>

    Eventual caught error

    +
    §nested_error: Option<StdError>

    Eventual caught error

    An error that needs to re-initialize the state machine.

    -

    Implementations§

    source§

    impl RuntimeError

    source

    pub fn keep_state(message: &str, error: Option<StdError>) -> Self

    Create a new KeepState error

    -
    source

    pub fn critical(message: &str, error: Option<StdError>) -> Self

    Create a new Critical error

    -

    Trait Implementations§

    source§

    impl Debug for RuntimeError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for RuntimeError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for RuntimeError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Box<dyn Error + Send + Sync + 'static, Global>> for RuntimeError

    source§

    fn from(value: StdError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Implementations§

    source§

    impl RuntimeError

    source

    pub fn keep_state(message: &str, error: Option<StdError>) -> Self

    Create a new KeepState error

    +
    source

    pub fn critical(message: &str, error: Option<StdError>) -> Self

    Create a new Critical error

    +

    Trait Implementations§

    source§

    impl Debug for RuntimeError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for RuntimeError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for RuntimeError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Box<dyn Error + Send + Sync + 'static, Global>> for RuntimeError

    source§

    fn from(value: StdError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/enum.SignerRegistrationError.html b/rust-doc/mithril_aggregator/enum.SignerRegistrationError.html index ac40f2a8bfb..4d23991e8d9 100644 --- a/rust-doc/mithril_aggregator/enum.SignerRegistrationError.html +++ b/rust-doc/mithril_aggregator/enum.SignerRegistrationError.html @@ -1,27 +1,27 @@ SignerRegistrationError in mithril_aggregator - Rust
    pub enum SignerRegistrationError {
         RegistrationRoundNotYetOpened,
         RegistrationRoundUnexpectedEpoch {
    -        current_round_epoch: Epoch,
    -        received_epoch: Epoch,
    +        current_round_epoch: Epoch,
    +        received_epoch: Epoch,
         },
         Codec(String),
         ChainObserver(String),
    -    ExistingSigner(Box<SignerWithStake>),
    -    StoreError(StoreError),
    -    FailedSignerRegistration(ProtocolRegistrationError),
    +    ExistingSigner(Box<SignerWithStake>),
    +    StoreError(StoreError),
    +    FailedSignerRegistration(ProtocolRegistrationError),
         FailedSignerRecorder(String),
     }
    Expand description

    Error type for signer registerer service.

    Variants§

    §

    RegistrationRoundNotYetOpened

    No signer registration round opened yet

    -
    §

    RegistrationRoundUnexpectedEpoch

    Fields

    §current_round_epoch: Epoch

    Epoch of the current round

    -
    §received_epoch: Epoch

    Epoch of the received signer registration

    +
    §

    RegistrationRoundUnexpectedEpoch

    Fields

    §current_round_epoch: Epoch

    Epoch of the current round

    +
    §received_epoch: Epoch

    Epoch of the received signer registration

    Registration round for unexpected epoch

    §

    Codec(String)

    Codec error.

    §

    ChainObserver(String)

    Chain observer error.

    -
    §

    ExistingSigner(Box<SignerWithStake>)

    Signer is already registered.

    -
    §

    StoreError(StoreError)

    Store error.

    -
    §

    FailedSignerRegistration(ProtocolRegistrationError)

    Signer registration failed.

    +
    §

    ExistingSigner(Box<SignerWithStake>)

    Signer is already registered.

    +
    §

    StoreError(StoreError)

    Store error.

    +
    §

    FailedSignerRegistration(ProtocolRegistrationError)

    Signer registration failed.

    §

    FailedSignerRecorder(String)

    Signer recorder failed.

    -

    Trait Implementations§

    source§

    impl Debug for SignerRegistrationError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for SignerRegistrationError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for SignerRegistrationError

    source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<ProtocolRegistrationErrorWrapper> for SignerRegistrationError

    source§

    fn from(source: ProtocolRegistrationError) -> Self

    Converts to this type from the input type.
    source§

    impl From<StoreError> for SignerRegistrationError

    source§

    fn from(source: StoreError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Debug for SignerRegistrationError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for SignerRegistrationError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for SignerRegistrationError

    source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<ProtocolRegistrationErrorWrapper> for SignerRegistrationError

    source§

    fn from(source: ProtocolRegistrationError) -> Self

    Converts to this type from the input type.
    source§

    impl From<StoreError> for SignerRegistrationError

    source§

    fn from(source: StoreError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/event_store/struct.Event.html b/rust-doc/mithril_aggregator/event_store/struct.Event.html index 4d573081e2f..a670e621e49 100644 --- a/rust-doc/mithril_aggregator/event_store/struct.Event.html +++ b/rust-doc/mithril_aggregator/event_store/struct.Event.html @@ -10,10 +10,10 @@

    §source: String

    the source of the original EventMessage this Event originates from.

    §action: String

    the action of the original EventMessage this Event originates from.

    §content: String

    the content of the original EventMessage this Event originates from.

    -

    Trait Implementations§

    source§

    impl SqLiteEntity for Event

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where +

    Trait Implementations§

    source§

    impl SqLiteEntity for Event

    source§

    fn hydrate(row: Row) -> Result<Self, HydrationError>where Self: Sized,

    This method is intended to be used when creating new instances from SQL result rows. This is the place to grab data, check consistency and types -and return the entity if possible.
    source§

    fn get_projection() -> Projection

    Construct a Projection that will allow to hydrate this SqLiteEntity.

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Event

    §

    impl Send for Event

    §

    impl Sync for Event

    §

    impl Unpin for Event

    §

    impl UnwindSafe for Event

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +and return the entity if possible.

    source§

    fn get_projection() -> Projection

    Construct a [Projection] that will allow to hydrate this SqLiteEntity.

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Event

    §

    impl Send for Event

    §

    impl Sync for Event

    §

    impl Unpin for Event

    §

    impl UnwindSafe for Event

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/event_store/struct.EventPersister.html b/rust-doc/mithril_aggregator/event_store/struct.EventPersister.html index eb8635c7ed7..ba962263c24 100644 --- a/rust-doc/mithril_aggregator/event_store/struct.EventPersister.html +++ b/rust-doc/mithril_aggregator/event_store/struct.EventPersister.html @@ -1,7 +1,7 @@ EventPersister in mithril_aggregator::event_store - Rust
    pub struct EventPersister { /* private fields */ }
    Expand description

    The EventPersister is the adapter to persist EventMessage turning them into Event.

    Implementations§

    source§

    impl EventPersister

    source

    pub fn new(connection: Arc<Mutex<Connection>>) -> Self

    Instanciate an EventPersister

    -
    source

    pub fn persist(&self, message: EventMessage) -> Result<Event, StdError>

    Save an EventMessage in the database.

    +
    source

    pub fn persist(&self, message: EventMessage) -> Result<Event, StdError>

    Save an EventMessage in the database.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_aggregator/index.html b/rust-doc/mithril_aggregator/index.html index fd4ede39613..08dfa6c44fa 100644 --- a/rust-doc/mithril_aggregator/index.html +++ b/rust-doc/mithril_aggregator/index.html @@ -1,4 +1,4 @@ -mithril_aggregator - Rust
    Expand description

    Mithril aggregator +mithril_aggregator - Rust

    Expand description

    Mithril aggregator The Aggregator is responsible for:

    • registering signers
    • @@ -21,7 +21,7 @@ all actions required by the process of getting multi-signatures. See the documentation -for more explanations about the Aggregator state machine.
  • Aggregator configuration
  • Default configuration with all the default values for configurations.
  • Dummy uploader for test purposes.
  • Snapshotter that does nothing. It is mainly used for test purposes.
  • Adapter to convert RegisterSignerMessage to Signer instances.
  • Gzip Snapshotter create a compressed file.
  • LocalSnapshotUploader is a snapshot uploader working using local files
  • Mithril Aggregator Node
  • Implementation of a SignerRegisterer
  • MultiSignerImpl is an implementation of the MultiSigner
  • ProtocolParameter store.
  • GCPSnapshotUploader is a snapshot uploader working using Google Cloud Platform services
  • Represents the information needed to handle a signer registration round
  • Adapter to turn CertificatePending instances into CertificatePendingMessage.
  • Adapter to spawn EpochSettingsMessage from EpochSettings instances.
  • Store for the VerificationKey.
  • Enums

    Enums

    Traits

    \ No newline at end of file +It exposes all the methods needed by the state machine.
  • ArtifactBuilder is trait for building an artifact
  • MultiSigner is the cryptographic engine in charge of producing multi signatures from individual signatures
  • Store and get [protocol parameters][ProtocolParameters] for given epoch.
  • Signer recorder trait
  • Trait to register a signer
  • Trait to open a signer registration round
  • SnapshotUploader represents a snapshot uploader interactor
  • Define the ability to create snapshots.
  • Store and get signers verification keys for given epoch.
  • \ No newline at end of file diff --git a/rust-doc/mithril_aggregator/services/enum.CertifierServiceError.html b/rust-doc/mithril_aggregator/services/enum.CertifierServiceError.html index b3ddea86e99..372343e8705 100644 --- a/rust-doc/mithril_aggregator/services/enum.CertifierServiceError.html +++ b/rust-doc/mithril_aggregator/services/enum.CertifierServiceError.html @@ -1,25 +1,25 @@ CertifierServiceError in mithril_aggregator::services - Rust
    pub enum CertifierServiceError {
    -    NotFound(SignedEntityType),
    -    AlreadyCertified(SignedEntityType),
    -    BeaconTooOld(SignedEntityType),
    -    OpenMessageAlreadyExists(SignedEntityType),
    +    NotFound(SignedEntityType),
    +    AlreadyCertified(SignedEntityType),
    +    BeaconTooOld(SignedEntityType),
    +    OpenMessageAlreadyExists(SignedEntityType),
         NoParentCertificateFound,
         Codec(String),
         CertificateEpochGap {
    -        certificate_epoch: Epoch,
    -        current_epoch: Epoch,
    +        certificate_epoch: Epoch,
    +        current_epoch: Epoch,
         },
         CouldNotFindLastCertificate,
     }
    Expand description

    Errors dedicated to the CertifierService.

    -

    Variants§

    §

    NotFound(SignedEntityType)

    OpenMessage not found.

    -
    §

    AlreadyCertified(SignedEntityType)

    The open message is already certified, no more single signatures may be +

    Variants§

    §

    NotFound(SignedEntityType)

    OpenMessage not found.

    +
    §

    AlreadyCertified(SignedEntityType)

    The open message is already certified, no more single signatures may be attached to it nor be certified again.

    -
    §

    BeaconTooOld(SignedEntityType)

    The given beacon is older than the current open message for this type.

    -
    §

    OpenMessageAlreadyExists(SignedEntityType)

    The given OpenMessage already exists

    +
    §

    BeaconTooOld(SignedEntityType)

    The given beacon is older than the current open message for this type.

    +
    §

    OpenMessageAlreadyExists(SignedEntityType)

    The given OpenMessage already exists

    §

    NoParentCertificateFound

    No parent certificate could be found, this certifier cannot create genesis certificates.

    §

    Codec(String)

    Codec error.

    -
    §

    CertificateEpochGap

    Fields

    §certificate_epoch: Epoch

    Epoch of the last issued certificate

    -
    §current_epoch: Epoch

    Given current epoch

    +
    §

    CertificateEpochGap

    Fields

    §certificate_epoch: Epoch

    Epoch of the last issued certificate

    +
    §current_epoch: Epoch

    Given current epoch

    No certificate for this epoch

    §

    CouldNotFindLastCertificate

    Could not verify certificate chain because could not find last certificate.

    Trait Implementations§

    source§

    impl Debug for CertifierServiceError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for CertifierServiceError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for CertifierServiceError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_aggregator/services/enum.StakePoolDistributionServiceError.html b/rust-doc/mithril_aggregator/services/enum.StakePoolDistributionServiceError.html index 03b5c8487c8..88453532fae 100644 --- a/rust-doc/mithril_aggregator/services/enum.StakePoolDistributionServiceError.html +++ b/rust-doc/mithril_aggregator/services/enum.StakePoolDistributionServiceError.html @@ -1,18 +1,18 @@ StakePoolDistributionServiceError in mithril_aggregator::services - Rust
    pub enum StakePoolDistributionServiceError {
         Technical {
             message: String,
    -        error: Option<StdError>,
    +        error: Option<StdError>,
         },
    -    Unavailable(Epoch),
    -    Busy(Epoch),
    +    Unavailable(Epoch),
    +    Busy(Epoch),
     }
    Expand description

    Errors related to the StakeDistributionService.

    Variants§

    §

    Technical

    Fields

    §message: String

    Error message

    -
    §error: Option<StdError>

    Eventual nested error

    +
    §error: Option<StdError>

    Eventual nested error

    Critical errors cannot be recovered.

    -
    §

    Unavailable(Epoch)

    The stake distribution for the given Epoch is not available.

    -
    §

    Busy(Epoch)

    The stake distribution compute is in progress for this Epoch.

    -

    Implementations§

    source§

    impl StakePoolDistributionServiceError

    source

    pub fn technical_subsystem(error: StdError) -> Box<Self>

    Simple way to nest technical errors

    -

    Trait Implementations§

    source§

    impl Debug for StakePoolDistributionServiceError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for StakePoolDistributionServiceError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for StakePoolDistributionServiceError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl TryFrom<Box<dyn Error + Send + Sync + 'static, Global>> for StakePoolDistributionServiceError

    §

    type Error = Box<StakePoolDistributionServiceError, Global>

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: StdError) -> Result<Self, Self::Error>

    Performs the conversion.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    §

    Unavailable(Epoch)

    The stake distribution for the given Epoch is not available.

    +
    §

    Busy(Epoch)

    The stake distribution compute is in progress for this Epoch.

    +

    Implementations§

    source§

    impl StakePoolDistributionServiceError

    source

    pub fn technical_subsystem(error: StdError) -> Box<Self>

    Simple way to nest technical errors

    +

    Trait Implementations§

    source§

    impl Debug for StakePoolDistributionServiceError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for StakePoolDistributionServiceError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for StakePoolDistributionServiceError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl TryFrom<Box<dyn Error + Send + Sync + 'static, Global>> for StakePoolDistributionServiceError

    §

    type Error = Box<StakePoolDistributionServiceError, Global>

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: StdError) -> Result<Self, Self::Error>

    Performs the conversion.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/services/struct.MithrilCertifierService.html b/rust-doc/mithril_aggregator/services/struct.MithrilCertifierService.html index f3d157658a8..1852bf6d762 100644 --- a/rust-doc/mithril_aggregator/services/struct.MithrilCertifierService.html +++ b/rust-doc/mithril_aggregator/services/struct.MithrilCertifierService.html @@ -3,23 +3,23 @@ open_message_repository: Arc<OpenMessageRepository>, single_signature_repository: Arc<SingleSignatureRepository>, certificate_repository: Arc<CertificateRepository>, - certificate_verifier: Arc<dyn CertificateVerifier>, - genesis_verifier: Arc<ProtocolGenesisVerifier>, + certificate_verifier: Arc<dyn CertificateVerifier>, + genesis_verifier: Arc<ProtocolGenesisVerifier>, multi_signer: Arc<RwLock<dyn MultiSigner>>, logger: Logger ) -> Self

    instantiate the service

    Trait Implementations§

    source§

    impl CertifierService for MithrilCertifierService

    source§

    fn inform_epoch<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Inform the certifier I have detected a new epoch, it may clear its state and prepare the new signature round. If the given Epoch is equal or less than the previous informed Epoch, nothing is done.
    source§

    fn register_single_signature<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - signature: &'life2 SingleSignatures -) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType, + signature: &'life2 SingleSignatures +) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, @@ -27,9 +27,9 @@ the open message does not exist or the open message has been certified since then, an error is returned.

    source§

    fn create_open_message<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - protocol_message: &'life2 ProtocolMessage -) -> Pin<Box<dyn Future<Output = StdResult<OpenMessage>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType, + protocol_message: &'life2 ProtocolMessage +) -> Pin<Box<dyn Future<Output = StdResult<OpenMessage>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, @@ -38,15 +38,15 @@ along with their associated single signatures and the new open message is created. If the message already exists, an error is returned.

    source§

    fn get_open_message<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType -) -> Pin<Box<dyn Future<Output = StdResult<Option<OpenMessage>>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType +) -> Pin<Box<dyn Future<Output = StdResult<Option<OpenMessage>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Return the open message at the given Beacon. If the message does not exist, None is returned.
    source§

    fn create_certificate<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType -) -> Pin<Box<dyn Future<Output = StdResult<Option<Certificate>>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType +) -> Pin<Box<dyn Future<Output = StdResult<Option<Certificate>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Create a certificate if possible. If the pointed open message does @@ -59,18 +59,18 @@ list of the registered signers for the given epoch is used.
    source§

    fn get_certificate_by_hash<'life0, 'life1, 'async_trait>( &'life0 self, hash: &'life1 str -) -> Pin<Box<dyn Future<Output = StdResult<Option<Certificate>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Option<Certificate>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Returns a certificate from its hash.
    source§

    fn get_latest_certificates<'life0, 'async_trait>( &'life0 self, last_n: usize -) -> Pin<Box<dyn Future<Output = StdResult<Vec<Certificate>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<Certificate>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Returns the list of the latest created certificates.
    source§

    fn verify_certificate_chain<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Verify the certificate chain and epoch gap. This will return an error if there is at least an epoch between the given epoch and the most recent diff --git a/rust-doc/mithril_aggregator/services/struct.MithrilSignedEntityService.html b/rust-doc/mithril_aggregator/services/struct.MithrilSignedEntityService.html index 00efbe7e9e9..b39bc7c9a31 100644 --- a/rust-doc/mithril_aggregator/services/struct.MithrilSignedEntityService.html +++ b/rust-doc/mithril_aggregator/services/struct.MithrilSignedEntityService.html @@ -1,37 +1,37 @@ MithrilSignedEntityService in mithril_aggregator::services - Rust
    pub struct MithrilSignedEntityService { /* private fields */ }
    Expand description

    Mithril ArtifactBuilder Service

    Implementations§

    source§

    impl MithrilSignedEntityService

    source

    pub fn new( signed_entity_storer: Arc<dyn SignedEntityStorer>, - mithril_stake_distribution_artifact_builder: Arc<dyn ArtifactBuilder<Epoch, MithrilStakeDistribution>>, - cardano_immutable_files_full_artifact_builder: Arc<dyn ArtifactBuilder<Beacon, Snapshot>> + mithril_stake_distribution_artifact_builder: Arc<dyn ArtifactBuilder<Epoch, MithrilStakeDistribution>>, + cardano_immutable_files_full_artifact_builder: Arc<dyn ArtifactBuilder<Beacon, Snapshot>> ) -> Self

    MithrilSignedEntityService factory

    Trait Implementations§

    source§

    impl SignedEntityService for MithrilSignedEntityService

    source§

    fn create_artifact<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: SignedEntityType, - certificate: &'life1 Certificate -) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where + signed_entity_type: SignedEntityType, + certificate: &'life1 Certificate +) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Create artifact for a signed entity type and a certificate
    source§

    fn get_last_signed_snapshots<'life0, 'async_trait>( &'life0 self, total: usize -) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntity<Snapshot>>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntity<Snapshot>>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return a list of signed snapshots order by creation date descending.
    source§

    fn get_last_signed_mithril_stake_distributions<'life0, 'async_trait>( &'life0 self, total: usize -) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntity<MithrilStakeDistribution>>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntity<MithrilStakeDistribution>>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return a list of signed Mithril stake distribution order by creation date descending.
    source§

    fn get_signed_snapshot_by_id<'life0, 'life1, 'async_trait>( &'life0 self, signed_entity_id: &'life1 str -) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntity<Snapshot>>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntity<Snapshot>>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Return a signed snapshot
    source§

    fn get_signed_mithril_stake_distribution_by_id<'life0, 'life1, 'async_trait>( &'life0 self, signed_entity_id: &'life1 str -) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntity<MithrilStakeDistribution>>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntity<MithrilStakeDistribution>>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Return a signed Mithril stake distribution

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_aggregator/services/struct.MithrilStakeDistributionService.html b/rust-doc/mithril_aggregator/services/struct.MithrilStakeDistributionService.html index 815d40437c3..424bb366784 100644 --- a/rust-doc/mithril_aggregator/services/struct.MithrilStakeDistributionService.html +++ b/rust-doc/mithril_aggregator/services/struct.MithrilStakeDistributionService.html @@ -1,12 +1,12 @@ MithrilStakeDistributionService in mithril_aggregator::services - Rust
    pub struct MithrilStakeDistributionService { /* private fields */ }
    Expand description

    Implementation of the stake distribution service.

    Implementations§

    source§

    impl MithrilStakeDistributionService

    source

    pub fn new( stake_store: Arc<StakePoolStore>, - chain_observer: Arc<dyn ChainObserver> + chain_observer: Arc<dyn ChainObserver> ) -> Self

    Create a new service instance

    Trait Implementations§

    source§

    impl StakeDistributionService for MithrilStakeDistributionService

    source§

    fn get_stake_distribution<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = Result<StakeDistribution, Box<StakePoolDistributionServiceError>>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = Result<StakeDistribution, Box<StakePoolDistributionServiceError>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return the stake distribution fot the given epoch.
    source§

    fn update_stake_distribution<'life0, 'async_trait>( &'life0 self diff --git a/rust-doc/mithril_aggregator/services/struct.MithrilTickerService.html b/rust-doc/mithril_aggregator/services/struct.MithrilTickerService.html index 397977c62c0..3b92a2050e0 100644 --- a/rust-doc/mithril_aggregator/services/struct.MithrilTickerService.html +++ b/rust-doc/mithril_aggregator/services/struct.MithrilTickerService.html @@ -3,17 +3,17 @@ services. It reads data either from the Chain or the filesystem to create beacons for each message type.

    Implementations§

    source§

    impl MithrilTickerService

    source

    pub fn new( - chain_observer: Arc<dyn ChainObserver>, - immutable_observer: Arc<dyn ImmutableFileObserver>, - network: CardanoNetwork + chain_observer: Arc<dyn ChainObserver>, + immutable_observer: Arc<dyn ImmutableFileObserver>, + network: CardanoNetwork ) -> Self

    Instantiate a new service

    Trait Implementations§

    source§

    impl TickerService for MithrilTickerService

    source§

    fn get_current_epoch<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Epoch, StdError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Epoch, StdError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return the current Epoch as read from the chain.
    source§

    fn get_current_immutable_beacon<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Beacon, StdError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Beacon, StdError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return the current Beacon used for CardanoImmutableFileDigest message type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_aggregator/services/trait.CertifierService.html b/rust-doc/mithril_aggregator/services/trait.CertifierService.html index 951f9bcb5f1..f3179f31aa9 100644 --- a/rust-doc/mithril_aggregator/services/trait.CertifierService.html +++ b/rust-doc/mithril_aggregator/services/trait.CertifierService.html @@ -2,59 +2,59 @@ // Required methods fn inform_epoch<'life0, 'async_trait>( &'life0 self, - epoch: Epoch - ) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>> + epoch: Epoch + ) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn register_single_signature<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - signature: &'life2 SingleSignatures - ) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>> + signed_entity_type: &'life1 SignedEntityType, + signature: &'life2 SingleSignatures + ) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn create_open_message<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - protocol_message: &'life2 ProtocolMessage - ) -> Pin<Box<dyn Future<Output = StdResult<OpenMessage>> + Send + 'async_trait>> + signed_entity_type: &'life1 SignedEntityType, + protocol_message: &'life2 ProtocolMessage + ) -> Pin<Box<dyn Future<Output = StdResult<OpenMessage>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn get_open_message<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType - ) -> Pin<Box<dyn Future<Output = StdResult<Option<OpenMessage>>> + Send + 'async_trait>> + signed_entity_type: &'life1 SignedEntityType + ) -> Pin<Box<dyn Future<Output = StdResult<Option<OpenMessage>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn create_certificate<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType - ) -> Pin<Box<dyn Future<Output = StdResult<Option<Certificate>>> + Send + 'async_trait>> + signed_entity_type: &'life1 SignedEntityType + ) -> Pin<Box<dyn Future<Output = StdResult<Option<Certificate>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_certificate_by_hash<'life0, 'life1, 'async_trait>( &'life0 self, hash: &'life1 str - ) -> Pin<Box<dyn Future<Output = StdResult<Option<Certificate>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Option<Certificate>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_latest_certificates<'life0, 'async_trait>( &'life0 self, last_n: usize - ) -> Pin<Box<dyn Future<Output = StdResult<Vec<Certificate>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Vec<Certificate>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn verify_certificate_chain<'life0, 'async_trait>( &'life0 self, - epoch: Epoch - ) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>> + epoch: Epoch + ) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; }
    Expand description

    CertifierService

    @@ -62,17 +62,17 @@ ultimately transform open messages into certificates.

    Required Methods§

    source

    fn inform_epoch<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Inform the certifier I have detected a new epoch, it may clear its state and prepare the new signature round. If the given Epoch is equal or less than the previous informed Epoch, nothing is done.

    source

    fn register_single_signature<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - signature: &'life2 SingleSignatures -) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType, + signature: &'life2 SingleSignatures +) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, @@ -81,9 +81,9 @@ since then, an error is returned.

    source

    fn create_open_message<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - protocol_message: &'life2 ProtocolMessage -) -> Pin<Box<dyn Future<Output = StdResult<OpenMessage>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType, + protocol_message: &'life2 ProtocolMessage +) -> Pin<Box<dyn Future<Output = StdResult<OpenMessage>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, @@ -93,16 +93,16 @@ is created. If the message already exists, an error is returned.

    source

    fn get_open_message<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType -) -> Pin<Box<dyn Future<Output = StdResult<Option<OpenMessage>>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType +) -> Pin<Box<dyn Future<Output = StdResult<Option<OpenMessage>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Return the open message at the given Beacon. If the message does not exist, None is returned.

    source

    fn create_certificate<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType -) -> Pin<Box<dyn Future<Output = StdResult<Option<Certificate>>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType +) -> Pin<Box<dyn Future<Output = StdResult<Option<Certificate>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Create a certificate if possible. If the pointed open message does @@ -116,20 +116,20 @@

    source

    fn get_certificate_by_hash<'life0, 'life1, 'async_trait>( &'life0 self, hash: &'life1 str -) -> Pin<Box<dyn Future<Output = StdResult<Option<Certificate>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Option<Certificate>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Returns a certificate from its hash.

    source

    fn get_latest_certificates<'life0, 'async_trait>( &'life0 self, last_n: usize -) -> Pin<Box<dyn Future<Output = StdResult<Vec<Certificate>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<Certificate>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Returns the list of the latest created certificates.

    source

    fn verify_certificate_chain<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Verify the certificate chain and epoch gap. This will return an error if there is at least an epoch between the given epoch and the most recent diff --git a/rust-doc/mithril_aggregator/services/trait.SignedEntityService.html b/rust-doc/mithril_aggregator/services/trait.SignedEntityService.html index 7be0bc15e2a..897b926f795 100644 --- a/rust-doc/mithril_aggregator/services/trait.SignedEntityService.html +++ b/rust-doc/mithril_aggregator/services/trait.SignedEntityService.html @@ -2,71 +2,71 @@ // Required methods fn create_artifact<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: SignedEntityType, - certificate: &'life1 Certificate - ) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>> + signed_entity_type: SignedEntityType, + certificate: &'life1 Certificate + ) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_last_signed_snapshots<'life0, 'async_trait>( &'life0 self, total: usize - ) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntity<Snapshot>>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntity<Snapshot>>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_last_signed_mithril_stake_distributions<'life0, 'async_trait>( &'life0 self, total: usize - ) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntity<MithrilStakeDistribution>>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntity<MithrilStakeDistribution>>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_signed_snapshot_by_id<'life0, 'life1, 'async_trait>( &'life0 self, signed_entity_id: &'life1 str - ) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntity<Snapshot>>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntity<Snapshot>>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_signed_mithril_stake_distribution_by_id<'life0, 'life1, 'async_trait>( &'life0 self, signed_entity_id: &'life1 str - ) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntity<MithrilStakeDistribution>>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntity<MithrilStakeDistribution>>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; }

    Expand description

    ArtifactBuilder Service trait

    Required Methods§

    source

    fn create_artifact<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: SignedEntityType, - certificate: &'life1 Certificate -) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where + signed_entity_type: SignedEntityType, + certificate: &'life1 Certificate +) -> Pin<Box<dyn Future<Output = StdResult<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Create artifact for a signed entity type and a certificate

    source

    fn get_last_signed_snapshots<'life0, 'async_trait>( &'life0 self, total: usize -) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntity<Snapshot>>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntity<Snapshot>>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return a list of signed snapshots order by creation date descending.

    source

    fn get_last_signed_mithril_stake_distributions<'life0, 'async_trait>( &'life0 self, total: usize -) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntity<MithrilStakeDistribution>>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<SignedEntity<MithrilStakeDistribution>>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return a list of signed Mithril stake distribution order by creation date descending.

    source

    fn get_signed_snapshot_by_id<'life0, 'life1, 'async_trait>( &'life0 self, signed_entity_id: &'life1 str -) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntity<Snapshot>>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntity<Snapshot>>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Return a signed snapshot

    source

    fn get_signed_mithril_stake_distribution_by_id<'life0, 'life1, 'async_trait>( &'life0 self, signed_entity_id: &'life1 str -) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntity<MithrilStakeDistribution>>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Option<SignedEntity<MithrilStakeDistribution>>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Return a signed Mithril stake distribution

    diff --git a/rust-doc/mithril_aggregator/services/trait.StakeDistributionService.html b/rust-doc/mithril_aggregator/services/trait.StakeDistributionService.html index 833851adacc..ed10f8ac4f6 100644 --- a/rust-doc/mithril_aggregator/services/trait.StakeDistributionService.html +++ b/rust-doc/mithril_aggregator/services/trait.StakeDistributionService.html @@ -2,8 +2,8 @@ // Required methods fn get_stake_distribution<'life0, 'async_trait>( &'life0 self, - epoch: Epoch - ) -> Pin<Box<dyn Future<Output = Result<StakeDistribution, Box<StakePoolDistributionServiceError>>> + Send + 'async_trait>> + epoch: Epoch + ) -> Pin<Box<dyn Future<Output = Result<StakeDistribution, Box<StakePoolDistributionServiceError>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn update_stake_distribution<'life0, 'async_trait>( @@ -14,8 +14,8 @@ }
    Expand description

    Responsible of synchronizing with Cardano stake distribution.

    Required Methods§

    source

    fn get_stake_distribution<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = Result<StakeDistribution, Box<StakePoolDistributionServiceError>>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = Result<StakeDistribution, Box<StakePoolDistributionServiceError>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return the stake distribution fot the given epoch.

    source

    fn update_stake_distribution<'life0, 'async_trait>( diff --git a/rust-doc/mithril_aggregator/services/trait.TickerService.html b/rust-doc/mithril_aggregator/services/trait.TickerService.html index 8ed3111a101..b2ef299c7fd 100644 --- a/rust-doc/mithril_aggregator/services/trait.TickerService.html +++ b/rust-doc/mithril_aggregator/services/trait.TickerService.html @@ -2,23 +2,23 @@ // Required methods fn get_current_epoch<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Epoch, StdError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Epoch, StdError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_current_immutable_beacon<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Beacon, StdError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Beacon, StdError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; }
    Expand description

    Service trait with consistent business oriented API.

    Required Methods§

    source

    fn get_current_epoch<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Epoch, StdError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Epoch, StdError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return the current Epoch as read from the chain.

    source

    fn get_current_immutable_beacon<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Beacon, StdError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Beacon, StdError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return the current Beacon used for CardanoImmutableFileDigest message type.

    Implementors§

    \ No newline at end of file diff --git a/rust-doc/mithril_aggregator/struct.AggregatorConfig.html b/rust-doc/mithril_aggregator/struct.AggregatorConfig.html index 11f08350fb0..7f09cf76b6d 100644 --- a/rust-doc/mithril_aggregator/struct.AggregatorConfig.html +++ b/rust-doc/mithril_aggregator/struct.AggregatorConfig.html @@ -1,12 +1,12 @@ AggregatorConfig in mithril_aggregator - Rust
    pub struct AggregatorConfig {
         pub interval: u64,
    -    pub network: CardanoNetwork,
    +    pub network: CardanoNetwork,
         pub db_directory: PathBuf,
     }
    Expand description

    Configuration structure dedicated to the AggregatorRuntime.

    Fields§

    §interval: u64

    Interval between each snapshot, in ms

    -
    §network: CardanoNetwork

    Cardano network

    +
    §network: CardanoNetwork

    Cardano network

    §db_directory: PathBuf

    DB directory to snapshot

    -

    Implementations§

    source§

    impl AggregatorConfig

    source

    pub fn new(interval: u64, network: CardanoNetwork, db_directory: &Path) -> Self

    Create a new instance of AggregatorConfig.

    +

    Implementations§

    source§

    impl AggregatorConfig

    source

    pub fn new(interval: u64, network: CardanoNetwork, db_directory: &Path) -> Self

    Create a new instance of AggregatorConfig.

    Trait Implementations§

    source§

    impl Clone for AggregatorConfig

    source§

    fn clone(&self) -> AggregatorConfig

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AggregatorConfig

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_aggregator/struct.AggregatorRunner.html b/rust-doc/mithril_aggregator/struct.AggregatorRunner.html index e8ed1c18d25..7c4e524a587 100644 --- a/rust-doc/mithril_aggregator/struct.AggregatorRunner.html +++ b/rust-doc/mithril_aggregator/struct.AggregatorRunner.html @@ -3,12 +3,12 @@

    Implementations§

    source§

    impl AggregatorRunner

    source

    pub fn new(dependencies: Arc<DependencyContainer>) -> Self

    Create a new instance of the Aggrergator Runner.

    Trait Implementations§

    source§

    impl AggregatorRunnerTrait for AggregatorRunner

    source§

    fn get_beacon_from_chain<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Beacon, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Beacon, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return the current beacon from the chain

    source§

    fn get_current_non_certified_open_message_for_signed_entity_type<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType + signed_entity_type: &'life1 SignedEntityType ) -> Pin<Box<dyn Future<Output = Result<Option<OpenMessage>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, @@ -18,25 +18,25 @@ Self: 'async_trait, 'life0: 'async_trait,

    Retrieves the current non certified open message.
    source§

    fn is_certificate_chain_valid<'life0, 'life1, 'async_trait>( &'life0 self, - beacon: &'life1 Beacon + beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Check if a certificate chain is valid.
    source§

    fn update_beacon<'life0, 'life1, 'async_trait>( &'life0 self, - new_beacon: &'life1 Beacon + new_beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Update the multisigner with the given beacon.
    source§

    fn update_stake_distribution<'life0, 'life1, 'async_trait>( &'life0 self, - new_beacon: &'life1 Beacon + new_beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Read the stake distribution from the blockchain and store it.
    source§

    fn open_signer_registration_round<'life0, 'life1, 'async_trait>( &'life0 self, - new_beacon: &'life1 Beacon + new_beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, @@ -46,62 +46,62 @@ Self: 'async_trait, 'life0: 'async_trait,

    Close the signer registration round of an epoch.
    source§

    fn update_protocol_parameters_in_multisigner<'life0, 'life1, 'async_trait>( &'life0 self, - new_beacon: &'life1 Beacon + new_beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Update the multisigner with the protocol parameters from configuration.
    source§

    fn compute_protocol_message<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType -) -> Pin<Box<dyn Future<Output = Result<ProtocolMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType +) -> Pin<Box<dyn Future<Output = Result<ProtocolMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Compute the protocol message
    source§

    fn create_new_pending_certificate_from_multisigner<'life0, 'life1, 'async_trait>( &'life0 self, - beacon: Beacon, - signed_entity_type: &'life1 SignedEntityType -) -> Pin<Box<dyn Future<Output = Result<CertificatePending, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where + beacon: Beacon, + signed_entity_type: &'life1 SignedEntityType +) -> Pin<Box<dyn Future<Output = Result<CertificatePending, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Return the actual pending certificate from the multisigner.
    source§

    fn save_pending_certificate<'life0, 'async_trait>( &'life0 self, - pending_certificate: CertificatePending + pending_certificate: CertificatePending ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Store the given pending certificate.
    source§

    fn drop_pending_certificate<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Drop the multisigner’s actual pending certificate.
    source§

    fn create_certificate<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType -) -> Pin<Box<dyn Future<Output = Result<Option<Certificate>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType +) -> Pin<Box<dyn Future<Output = Result<Option<Certificate>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Create multi-signature.
    source§

    fn create_artifact<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - certificate: &'life2 Certificate + signed_entity_type: &'life1 SignedEntityType, + certificate: &'life2 Certificate ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

    Create an artifact and persist it.
    source§

    fn update_era_checker<'life0, 'life1, 'async_trait>( &'life0 self, - beacon: &'life1 Beacon + beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Update the EraChecker with EraReader information.
    source§

    fn certifier_inform_new_epoch<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: &'life1 Epoch + epoch: &'life1 Epoch ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Certifier inform new epoch
    source§

    fn create_open_message<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - protocol_message: &'life2 ProtocolMessage + signed_entity_type: &'life1 SignedEntityType, + protocol_message: &'life2 ProtocolMessage ) -> Pin<Box<dyn Future<Output = Result<OpenMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, diff --git a/rust-doc/mithril_aggregator/struct.CertificatePendingStore.html b/rust-doc/mithril_aggregator/struct.CertificatePendingStore.html index 2c00621a5c0..e578b34051b 100644 --- a/rust-doc/mithril_aggregator/struct.CertificatePendingStore.html +++ b/rust-doc/mithril_aggregator/struct.CertificatePendingStore.html @@ -1,13 +1,13 @@ -CertificatePendingStore in mithril_aggregator - Rust
    pub struct CertificatePendingStore { /* private fields */ }
    Expand description

    Store for CertificatePending.

    +CertificatePendingStore in mithril_aggregator - Rust
    pub struct CertificatePendingStore { /* private fields */ }
    Expand description

    Store for [CertificatePending].

    Implementations§

    source§

    impl CertificatePendingStore

    source

    pub fn new( - adapter: Box<dyn StoreAdapter<Key = String, Record = CertificatePending>> + adapter: Box<dyn StoreAdapter<Key = String, Record = CertificatePending>> ) -> Self

    Create a new instance.

    -
    source

    pub async fn get(&self) -> Result<Option<CertificatePending>, StoreError>

    Fetch the current CertificatePending if any.

    +
    source

    pub async fn get(&self) -> Result<Option<CertificatePending>, StoreError>

    Fetch the current [CertificatePending] if any.

    source

    pub async fn save( &self, - certificate: CertificatePending -) -> Result<(), StoreError>

    Save the given CertificatePending.

    -
    source

    pub async fn remove(&self) -> Result<Option<CertificatePending>, StoreError>

    Remove and return the current CertificatePending if any.

    + certificate: CertificatePending +) -> Result<(), StoreError>

    Save the given [CertificatePending].

    +
    source

    pub async fn remove(&self) -> Result<Option<CertificatePending>, StoreError>

    Remove and return the current [CertificatePending] if any.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_aggregator/struct.Configuration.html b/rust-doc/mithril_aggregator/struct.Configuration.html index 7872547d0b1..9a0017b8475 100644 --- a/rust-doc/mithril_aggregator/struct.Configuration.html +++ b/rust-doc/mithril_aggregator/struct.Configuration.html @@ -4,7 +4,7 @@ pub cardano_node_socket_path: PathBuf, pub network_magic: Option<u64>, pub network: String, - pub protocol_parameters: ProtocolParameters, + pub protocol_parameters: ProtocolParameters, pub snapshot_uploader_type: SnapshotUploaderType, pub snapshot_bucket_name: Option<String>, pub server_ip: String, @@ -13,11 +13,11 @@ pub db_directory: PathBuf, pub snapshot_directory: PathBuf, pub data_stores_directory: PathBuf, - pub genesis_verification_key: HexEncodedGenesisVerificationKey, + pub genesis_verification_key: HexEncodedGenesisVerificationKey, pub reset_digests_cache: bool, pub disable_digests_cache: bool, pub store_retention_limit: Option<usize>, - pub era_reader_adapter_type: EraReaderAdapterType, + pub era_reader_adapter_type: EraReaderAdapterType, pub era_reader_adapter_params: Option<String>,

    }
    Expand description

    Aggregator configuration

    Fields§

    §environment: ExecutionEnvironment

    What kind of runtime environment the configuration is meant to.

    @@ -27,7 +27,7 @@
    §network_magic: Option<u64>

    Cardano Network Magic number

    useful for TestNet & DevNet

    §network: String

    Cardano network

    -
    §protocol_parameters: ProtocolParameters

    Protocol parameters

    +
    §protocol_parameters: ProtocolParameters

    Protocol parameters

    §snapshot_uploader_type: SnapshotUploaderType

    Type of snapshot uploader to use

    §snapshot_bucket_name: Option<String>

    Bucket name where the snapshots are stored if snapshot_uploader_type is Gcp

    §server_ip: String

    Server listening IP

    @@ -36,21 +36,21 @@
    §db_directory: PathBuf

    Directory of the Cardano node store.

    §snapshot_directory: PathBuf

    Directory to store snapshot

    §data_stores_directory: PathBuf

    Directory to store aggregator data (Certificates, Snapshots, Protocol Parameters, …)

    -
    §genesis_verification_key: HexEncodedGenesisVerificationKey

    Genesis verification key

    +
    §genesis_verification_key: HexEncodedGenesisVerificationKey

    Genesis verification key

    §reset_digests_cache: bool

    Should the immutable cache be reset or not

    §disable_digests_cache: bool

    Use the digest caching strategy

    §store_retention_limit: Option<usize>

    Max number of records in stores. When new records are added, oldest records are automatically deleted so there can always be at max the number of records specified by this setting.

    -
    §era_reader_adapter_type: EraReaderAdapterType

    Era reader adapter type

    +
    §era_reader_adapter_type: EraReaderAdapterType

    Era reader adapter type

    §era_reader_adapter_params: Option<String>

    Era reader adapter parameters

    Implementations§

    source§

    impl Configuration

    source

    pub fn new_sample() -> Self

    Create a sample configuration mainly for tests

    source

    pub fn get_server_url(&self) -> String

    Build the server URL from configuration.

    source

    pub fn build_snapshot_uploader( &self ) -> Result<Arc<dyn SnapshotUploader>, Box<dyn Error>>

    Create a snapshot uploader from configuration settings.

    -
    source

    pub fn get_network(&self) -> Result<CardanoNetwork, ConfigError>

    Check configuration and return a representation of the Cardano network.

    +
    source

    pub fn get_network(&self) -> Result<CardanoNetwork, ConfigError>

    Check configuration and return a representation of the Cardano network.

    source

    pub fn get_sqlite_dir(&self) -> PathBuf

    Return the file of the SQLite stores. If the directory does not exist, it is created.

    source

    pub fn safe_epoch_retention_limit(&self) -> Option<u64>

    Same as the store retention limit but will never yield a value lower than 3.

    diff --git a/rust-doc/mithril_aggregator/struct.FromRegisterSignerAdapter.html b/rust-doc/mithril_aggregator/struct.FromRegisterSignerAdapter.html index 3584a6fa1dc..b3a874837bd 100644 --- a/rust-doc/mithril_aggregator/struct.FromRegisterSignerAdapter.html +++ b/rust-doc/mithril_aggregator/struct.FromRegisterSignerAdapter.html @@ -1,7 +1,7 @@ -FromRegisterSignerAdapter in mithril_aggregator - Rust
    pub struct FromRegisterSignerAdapter;
    Expand description

    Adapter to convert RegisterSignerMessage to Signer instances.

    -

    Trait Implementations§

    source§

    impl TryFromMessageAdapter<RegisterSignerMessage, Signer> for FromRegisterSignerAdapter

    source§

    fn try_adapt( - register_signer_message: RegisterSignerMessage -) -> StdResult<Signer>

    Method to trigger the conversion.

    +FromRegisterSignerAdapter in mithril_aggregator - Rust
    pub struct FromRegisterSignerAdapter;
    Expand description

    Adapter to convert [RegisterSignerMessage] to [Signer] instances.

    +

    Trait Implementations§

    source§

    impl TryFromMessageAdapter<RegisterSignerMessage, Signer> for FromRegisterSignerAdapter

    source§

    fn try_adapt( + register_signer_message: RegisterSignerMessage +) -> StdResult<Signer>

    Method to trigger the conversion.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_aggregator/struct.GzipSnapshotter.html b/rust-doc/mithril_aggregator/struct.GzipSnapshotter.html index 8264e8451a2..c1927037daa 100644 --- a/rust-doc/mithril_aggregator/struct.GzipSnapshotter.html +++ b/rust-doc/mithril_aggregator/struct.GzipSnapshotter.html @@ -2,7 +2,7 @@

    Implementations§

    source§

    impl GzipSnapshotter

    source

    pub fn new( db_directory: PathBuf, ongoing_snapshot_directory: PathBuf -) -> StdResult<GzipSnapshotter>

    Snapshotter factory

    +) -> StdResult<GzipSnapshotter>

    Snapshotter factory

    Trait Implementations§

    source§

    impl Snapshotter for GzipSnapshotter

    source§

    fn snapshot(&self, archive_name: &str) -> Result<OngoingSnapshot, SnapshotError>

    Create a new snapshot with the given archive name.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_aggregator/struct.MithrilSignerRegisterer.html b/rust-doc/mithril_aggregator/struct.MithrilSignerRegisterer.html index 2452db06f60..31f2885f37e 100644 --- a/rust-doc/mithril_aggregator/struct.MithrilSignerRegisterer.html +++ b/rust-doc/mithril_aggregator/struct.MithrilSignerRegisterer.html @@ -1,15 +1,15 @@ MithrilSignerRegisterer in mithril_aggregator - Rust
    pub struct MithrilSignerRegisterer { /* private fields */ }
    Expand description

    Implementation of a SignerRegisterer

    Implementations§

    source§

    impl MithrilSignerRegisterer

    source

    pub fn new( - chain_observer: Arc<dyn ChainObserver>, + chain_observer: Arc<dyn ChainObserver>, verification_key_store: Arc<dyn VerificationKeyStorer>, signer_recorder: Arc<dyn SignerRecorder>, verification_key_epoch_retention_limit: Option<u64> ) -> Self

    MithrilSignerRegisterer factory

    Trait Implementations§

    source§

    impl SignerRegisterer for MithrilSignerRegisterer

    source§

    fn register_signer<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: Epoch, - signer: &'life1 Signer -) -> Pin<Box<dyn Future<Output = Result<SignerWithStake, SignerRegistrationError>> + Send + 'async_trait>>where + epoch: Epoch, + signer: &'life1 Signer +) -> Pin<Box<dyn Future<Output = Result<SignerWithStake, SignerRegistrationError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Register a signer
    source§

    fn get_current_round<'life0, 'async_trait>( @@ -18,8 +18,8 @@ Self: 'async_trait, 'life0: 'async_trait,

    Get current open round if exists
    source§

    impl SignerRegistrationRoundOpener for MithrilSignerRegisterer

    source§

    fn open_registration_round<'life0, 'async_trait>( &'life0 self, - registration_epoch: Epoch, - stake_distribution: StakeDistribution + registration_epoch: Epoch, + stake_distribution: StakeDistribution ) -> Pin<Box<dyn Future<Output = Result<(), SignerRegistrationError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Open a signer registration round
    source§

    fn close_registration_round<'life0, 'async_trait>( diff --git a/rust-doc/mithril_aggregator/struct.MultiSignerImpl.html b/rust-doc/mithril_aggregator/struct.MultiSignerImpl.html index fb0cd167339..2689a6be62d 100644 --- a/rust-doc/mithril_aggregator/struct.MultiSignerImpl.html +++ b/rust-doc/mithril_aggregator/struct.MultiSignerImpl.html @@ -1,61 +1,61 @@ MultiSignerImpl in mithril_aggregator - Rust
    pub struct MultiSignerImpl { /* private fields */ }
    Expand description

    MultiSignerImpl is an implementation of the MultiSigner

    Implementations§

    source§

    impl MultiSignerImpl

    source

    pub fn new( verification_key_store: Arc<dyn VerificationKeyStorer>, - stake_store: Arc<dyn StakeStorer>, + stake_store: Arc<dyn StakeStorer>, protocol_parameters_store: Arc<dyn ProtocolParametersStorer> ) -> Self

    MultiSignerImpl factory

    source

    pub fn create_protocol_multi_signer( &self, - signers_with_stake: &[SignerWithStake], - protocol_parameters: &ProtocolParameters -) -> Result<ProtocolMultiSigner, ProtocolError>

    Creates a protocol multi signer

    + signers_with_stake: &[SignerWithStake], + protocol_parameters: &ProtocolParameters +) -> Result<ProtocolMultiSigner, ProtocolError>

    Creates a protocol multi signer

    Trait Implementations§

    source§

    impl MultiSigner for MultiSignerImpl

    source§

    fn get_protocol_parameters<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get protocol parameters

    source§

    fn update_protocol_parameters<'life0, 'life1, 'async_trait>( &'life0 mut self, - protocol_parameters: &'life1 ProtocolParameters + protocol_parameters: &'life1 ProtocolParameters ) -> Pin<Box<dyn Future<Output = Result<(), ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Update protocol parameters

    source§

    fn get_next_protocol_parameters<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get next protocol parameters

    source§

    fn get_stake_distribution<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<ProtocolStakeDistribution, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<ProtocolStakeDistribution, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get stake distribution

    source§

    fn get_next_stake_distribution<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<ProtocolStakeDistribution, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<ProtocolStakeDistribution, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get next stake distribution

    source§

    fn update_stake_distribution<'life0, 'life1, 'async_trait>( &'life0 mut self, - stakes: &'life1 ProtocolStakeDistribution + stakes: &'life1 ProtocolStakeDistribution ) -> Pin<Box<dyn Future<Output = Result<(), ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Update stake distribution

    source§

    fn compute_aggregate_verification_key<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signers_with_stakes: &'life1 [SignerWithStake], - protocol_parameters: &'life2 ProtocolParameters -) -> Pin<Box<dyn Future<Output = Result<ProtocolAggregateVerificationKey, ProtocolError>> + Send + 'async_trait>>where + signers_with_stakes: &'life1 [SignerWithStake], + protocol_parameters: &'life2 ProtocolParameters +) -> Pin<Box<dyn Future<Output = Result<ProtocolAggregateVerificationKey, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

    Compute aggregate verification key from stake distribution

    source§

    fn verify_single_signature<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - message: &'life1 ProtocolMessage, - single_signature: &'life2 SingleSignatures + message: &'life1 ProtocolMessage, + single_signature: &'life2 SingleSignatures ) -> Pin<Box<dyn Future<Output = Result<(), ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, @@ -64,26 +64,26 @@

    source§

    fn create_multi_signature<'life0, 'life1, 'async_trait>( &'life0 self, open_message: &'life1 OpenMessage -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolMultiSignature>, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolMultiSignature>, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Creates a multi signature from single signatures

    source§

    fn get_current_beacon<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Option<Beacon>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Option<Beacon>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get current beacon
    source§

    fn update_current_beacon<'life0, 'async_trait>( &'life0 mut self, - beacon: Beacon + beacon: Beacon ) -> Pin<Box<dyn Future<Output = Result<(), ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Update current beacon
    source§

    fn get_signers_with_stake<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get signers with stake
    source§

    fn get_next_signers_with_stake<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get signers for the next epoch with their stake
    source§

    fn compute_stake_distribution_aggregate_verification_key<'life0, 'async_trait>( &'life0 self @@ -95,7 +95,7 @@ Self: 'async_trait, 'life0: 'async_trait,

    Compute next stake distribution aggregate verification key
    source§

    fn get_signers<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Vec<Signer>, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Vec<Signer>, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get signers

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_aggregator/struct.ProtocolParametersStore.html b/rust-doc/mithril_aggregator/struct.ProtocolParametersStore.html index 71e219acb25..0653a4b837a 100644 --- a/rust-doc/mithril_aggregator/struct.ProtocolParametersStore.html +++ b/rust-doc/mithril_aggregator/struct.ProtocolParametersStore.html @@ -1,27 +1,27 @@ ProtocolParametersStore in mithril_aggregator - Rust
    pub struct ProtocolParametersStore { /* private fields */ }
    Expand description

    ProtocolParameter store.

    Implementations§

    source§

    impl ProtocolParametersStore

    source

    pub fn new( - adapter: Box<dyn StoreAdapter<Key = Epoch, Record = ProtocolParameters>>, + adapter: Box<dyn StoreAdapter<Key = Epoch, Record = ProtocolParameters>>, retention_len: Option<usize> ) -> Self

    Create an instance of ProtocolParameterStore.

    Trait Implementations§

    source§

    impl ProtocolParametersStorer for ProtocolParametersStore

    source§

    fn save_protocol_parameters<'life0, 'async_trait>( &'life0 self, - epoch: Epoch, - protocol_parameters: ProtocolParameters -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch, + protocol_parameters: ProtocolParameters +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Save the given ProtocolParameter for the given Epoch.
    source§

    fn get_protocol_parameters<'life0, 'async_trait>( + 'life0: 'async_trait,

    Save the given ProtocolParameter for the given [Epoch].
    source§

    fn get_protocol_parameters<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Get the saved ProtocolParameter for the given Epoch if any.
    source§

    impl StorePruner for ProtocolParametersStore

    source§

    fn prune<'life0, 'async_trait>( + 'life0: 'async_trait,

    Get the saved ProtocolParameter for the given [Epoch] if any.
    source§

    impl StorePruner for ProtocolParametersStore

    source§

    fn prune<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Pruning is deactivated on this store.

    -
    §

    type Key = Epoch

    The key type
    §

    type Record = ProtocolParameters

    The record type
    source§

    fn get_adapter( +

    §

    type Key = Epoch

    The key type
    §

    type Record = ProtocolParameters

    The record type
    source§

    fn get_adapter( &self -) -> &RwLock<Box<dyn StoreAdapter<Key = Self::Key, Record = Self::Record>>>

    This trait requires a way to get the internal adapter.
    source§

    fn get_max_records(&self) -> Option<usize>

    Return the maximum number of elements that can exist in this store. If None, there is no limit.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +) -> &RwLock<Box<dyn StoreAdapter<Key = Self::Key, Record = Self::Record>>>

    This trait requires a way to get the internal adapter.
    source§

    fn get_max_records(&self) -> Option<usize>

    Return the maximum number of elements that can exist in this store. If None, there is no limit.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_aggregator/struct.SignerRegistrationRound.html b/rust-doc/mithril_aggregator/struct.SignerRegistrationRound.html index 51017f4fd43..0a274a223ab 100644 --- a/rust-doc/mithril_aggregator/struct.SignerRegistrationRound.html +++ b/rust-doc/mithril_aggregator/struct.SignerRegistrationRound.html @@ -1,8 +1,8 @@ SignerRegistrationRound in mithril_aggregator - Rust
    pub struct SignerRegistrationRound {
    -    pub epoch: Epoch,
    +    pub epoch: Epoch,
         /* private fields */
     }
    Expand description

    Represents the information needed to handle a signer registration round

    -

    Fields§

    §epoch: Epoch

    Registration round epoch

    +

    Fields§

    §epoch: Epoch

    Registration round epoch

    Trait Implementations§

    source§

    impl Clone for SignerRegistrationRound

    source§

    fn clone(&self) -> SignerRegistrationRound

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SignerRegistrationRound

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<SignerRegistrationRound> for SignerRegistrationRound

    source§

    fn eq(&self, other: &SignerRegistrationRound) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for SignerRegistrationRound

    source§

    impl StructuralEq for SignerRegistrationRound

    source§

    impl StructuralPartialEq for SignerRegistrationRound

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_aggregator/struct.ToCertificatePendingMessageAdapter.html b/rust-doc/mithril_aggregator/struct.ToCertificatePendingMessageAdapter.html index 9c4f21f23c0..dfdae2044f3 100644 --- a/rust-doc/mithril_aggregator/struct.ToCertificatePendingMessageAdapter.html +++ b/rust-doc/mithril_aggregator/struct.ToCertificatePendingMessageAdapter.html @@ -1,5 +1,5 @@ -ToCertificatePendingMessageAdapter in mithril_aggregator - Rust
    pub struct ToCertificatePendingMessageAdapter;
    Expand description

    Adapter to turn CertificatePending instances into CertificatePendingMessage.

    -

    Trait Implementations§

    source§

    impl ToMessageAdapter<CertificatePending, CertificatePendingMessage> for ToCertificatePendingMessageAdapter

    source§

    fn adapt(certificate_pending: CertificatePending) -> CertificatePendingMessage

    Method to trigger the conversion

    +ToCertificatePendingMessageAdapter in mithril_aggregator - Rust
    pub struct ToCertificatePendingMessageAdapter;
    Expand description

    Adapter to turn [CertificatePending] instances into [CertificatePendingMessage].

    +

    Trait Implementations§

    source§

    impl ToMessageAdapter<CertificatePending, CertificatePendingMessage> for ToCertificatePendingMessageAdapter

    source§

    fn adapt(certificate_pending: CertificatePending) -> CertificatePendingMessage

    Method to trigger the conversion

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_aggregator/struct.ToEpochSettingsMessageAdapter.html b/rust-doc/mithril_aggregator/struct.ToEpochSettingsMessageAdapter.html index 13f26dfc941..1ba1a382851 100644 --- a/rust-doc/mithril_aggregator/struct.ToEpochSettingsMessageAdapter.html +++ b/rust-doc/mithril_aggregator/struct.ToEpochSettingsMessageAdapter.html @@ -1,5 +1,5 @@ -ToEpochSettingsMessageAdapter in mithril_aggregator - Rust
    pub struct ToEpochSettingsMessageAdapter;
    Expand description

    Adapter to spawn EpochSettingsMessage from EpochSettings instances.

    -

    Trait Implementations§

    source§

    impl ToMessageAdapter<EpochSettings, EpochSettingsMessage> for ToEpochSettingsMessageAdapter

    source§

    fn adapt(epoch_settings: EpochSettings) -> EpochSettingsMessage

    Turn an entity instance into message.

    +ToEpochSettingsMessageAdapter in mithril_aggregator - Rust
    pub struct ToEpochSettingsMessageAdapter;
    Expand description

    Adapter to spawn [EpochSettingsMessage] from [EpochSettings] instances.

    +

    Trait Implementations§

    source§

    impl ToMessageAdapter<EpochSettings, EpochSettingsMessage> for ToEpochSettingsMessageAdapter

    source§

    fn adapt(epoch_settings: EpochSettings) -> EpochSettingsMessage

    Turn an entity instance into message.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_aggregator/struct.VerificationKeyStore.html b/rust-doc/mithril_aggregator/struct.VerificationKeyStore.html index 3232123dcfa..8141f5d14f3 100644 --- a/rust-doc/mithril_aggregator/struct.VerificationKeyStore.html +++ b/rust-doc/mithril_aggregator/struct.VerificationKeyStore.html @@ -1,23 +1,23 @@ VerificationKeyStore in mithril_aggregator - Rust
    pub struct VerificationKeyStore { /* private fields */ }
    Expand description

    Store for the VerificationKey.

    Implementations§

    source§

    impl VerificationKeyStore

    source

    pub fn new( - adapter: Box<dyn StoreAdapter<Key = Epoch, Record = HashMap<PartyId, SignerWithStake>>> + adapter: Box<dyn StoreAdapter<Key = Epoch, Record = HashMap<PartyId, SignerWithStake>>> ) -> Self

    Create a new instance.

    Trait Implementations§

    source§

    impl VerificationKeyStorer for VerificationKeyStore

    source§

    fn save_verification_key<'life0, 'async_trait>( &'life0 self, - epoch: Epoch, - signer: SignerWithStake -) -> Pin<Box<dyn Future<Output = Result<Option<SignerWithStake>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch, + signer: SignerWithStake +) -> Pin<Box<dyn Future<Output = Result<Option<SignerWithStake>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Save the verification key, for the given Signer for the given Epoch, returns the + 'life0: 'async_trait,

    Save the verification key, for the given [Signer] for the given [Epoch], returns the previous values if one already existed.
    source§

    fn get_verification_keys<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = Result<Option<HashMap<PartyId, Signer>>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = Result<Option<HashMap<PartyId, Signer>>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Returns a HashMap of Signer indexed by PartyId for the given Beacon.
    source§

    fn prune_verification_keys<'life0, 'async_trait>( + 'life0: 'async_trait,

    Returns a HashMap of [Signer] indexed by [PartyId] for the given Beacon.
    source§

    fn prune_verification_keys<'life0, 'async_trait>( &'life0 self, - max_epoch_to_prune: Epoch -) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where + max_epoch_to_prune: Epoch +) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Prune all verification keys that are at or below the given epoch.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_aggregator/trait.AggregatorRunnerTrait.html b/rust-doc/mithril_aggregator/trait.AggregatorRunnerTrait.html index acfb8392d4d..ffc8c0cd710 100644 --- a/rust-doc/mithril_aggregator/trait.AggregatorRunnerTrait.html +++ b/rust-doc/mithril_aggregator/trait.AggregatorRunnerTrait.html @@ -2,12 +2,12 @@
    Show 18 methods // Required methods fn get_beacon_from_chain<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Beacon, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Beacon, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_current_non_certified_open_message_for_signed_entity_type<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType + signed_entity_type: &'life1 SignedEntityType ) -> Pin<Box<dyn Future<Output = Result<Option<OpenMessage>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, @@ -19,28 +19,28 @@ 'life0: 'async_trait; fn is_certificate_chain_valid<'life0, 'life1, 'async_trait>( &'life0 self, - beacon: &'life1 Beacon + beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn update_beacon<'life0, 'life1, 'async_trait>( &'life0 self, - new_beacon: &'life1 Beacon + new_beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn update_stake_distribution<'life0, 'life1, 'async_trait>( &'life0 self, - new_beacon: &'life1 Beacon + new_beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn open_signer_registration_round<'life0, 'life1, 'async_trait>( &'life0 self, - new_beacon: &'life1 Beacon + new_beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, @@ -52,48 +52,48 @@ 'life0: 'async_trait; fn update_protocol_parameters_in_multisigner<'life0, 'life1, 'async_trait>( &'life0 self, - new_beacon: &'life1 Beacon + new_beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn compute_protocol_message<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType - ) -> Pin<Box<dyn Future<Output = Result<ProtocolMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> + signed_entity_type: &'life1 SignedEntityType + ) -> Pin<Box<dyn Future<Output = Result<ProtocolMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn create_new_pending_certificate_from_multisigner<'life0, 'life1, 'async_trait>( &'life0 self, - beacon: Beacon, - signed_entity_type: &'life1 SignedEntityType - ) -> Pin<Box<dyn Future<Output = Result<CertificatePending, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> + beacon: Beacon, + signed_entity_type: &'life1 SignedEntityType + ) -> Pin<Box<dyn Future<Output = Result<CertificatePending, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn save_pending_certificate<'life0, 'async_trait>( &'life0 self, - pending_certificate: CertificatePending + pending_certificate: CertificatePending ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn drop_pending_certificate<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn create_certificate<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType - ) -> Pin<Box<dyn Future<Output = Result<Option<Certificate>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> + signed_entity_type: &'life1 SignedEntityType + ) -> Pin<Box<dyn Future<Output = Result<Option<Certificate>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn create_artifact<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - certificate: &'life2 Certificate + signed_entity_type: &'life1 SignedEntityType, + certificate: &'life2 Certificate ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, @@ -101,22 +101,22 @@ 'life2: 'async_trait; fn update_era_checker<'life0, 'life1, 'async_trait>( &'life0 self, - beacon: &'life1 Beacon + beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn certifier_inform_new_epoch<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: &'life1 Epoch + epoch: &'life1 Epoch ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn create_open_message<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - protocol_message: &'life2 ProtocolMessage + signed_entity_type: &'life1 SignedEntityType, + protocol_message: &'life2 ProtocolMessage ) -> Pin<Box<dyn Future<Output = Result<OpenMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, @@ -126,12 +126,12 @@ It exposes all the methods needed by the state machine.

    Required Methods§

    source

    fn get_beacon_from_chain<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Beacon, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Beacon, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return the current beacon from the chain

    source

    fn get_current_non_certified_open_message_for_signed_entity_type<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType + signed_entity_type: &'life1 SignedEntityType ) -> Pin<Box<dyn Future<Output = Result<Option<OpenMessage>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, @@ -143,28 +143,28 @@ 'life0: 'async_trait,

    Retrieves the current non certified open message.

    source

    fn is_certificate_chain_valid<'life0, 'life1, 'async_trait>( &'life0 self, - beacon: &'life1 Beacon + beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Check if a certificate chain is valid.

    source

    fn update_beacon<'life0, 'life1, 'async_trait>( &'life0 self, - new_beacon: &'life1 Beacon + new_beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Update the multisigner with the given beacon.

    source

    fn update_stake_distribution<'life0, 'life1, 'async_trait>( &'life0 self, - new_beacon: &'life1 Beacon + new_beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Read the stake distribution from the blockchain and store it.

    source

    fn open_signer_registration_round<'life0, 'life1, 'async_trait>( &'life0 self, - new_beacon: &'life1 Beacon + new_beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, @@ -176,48 +176,48 @@ 'life0: 'async_trait,

    Close the signer registration round of an epoch.

    source

    fn update_protocol_parameters_in_multisigner<'life0, 'life1, 'async_trait>( &'life0 self, - new_beacon: &'life1 Beacon + new_beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Update the multisigner with the protocol parameters from configuration.

    source

    fn compute_protocol_message<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType -) -> Pin<Box<dyn Future<Output = Result<ProtocolMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType +) -> Pin<Box<dyn Future<Output = Result<ProtocolMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Compute the protocol message

    source

    fn create_new_pending_certificate_from_multisigner<'life0, 'life1, 'async_trait>( &'life0 self, - beacon: Beacon, - signed_entity_type: &'life1 SignedEntityType -) -> Pin<Box<dyn Future<Output = Result<CertificatePending, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where + beacon: Beacon, + signed_entity_type: &'life1 SignedEntityType +) -> Pin<Box<dyn Future<Output = Result<CertificatePending, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Return the actual pending certificate from the multisigner.

    source

    fn save_pending_certificate<'life0, 'async_trait>( &'life0 self, - pending_certificate: CertificatePending + pending_certificate: CertificatePending ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Store the given pending certificate.

    source

    fn drop_pending_certificate<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Drop the multisigner’s actual pending certificate.

    source

    fn create_certificate<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType -) -> Pin<Box<dyn Future<Output = Result<Option<Certificate>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType +) -> Pin<Box<dyn Future<Output = Result<Option<Certificate>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Create multi-signature.

    source

    fn create_artifact<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - certificate: &'life2 Certificate + signed_entity_type: &'life1 SignedEntityType, + certificate: &'life2 Certificate ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, @@ -225,22 +225,22 @@ 'life2: 'async_trait,

    Create an artifact and persist it.

    source

    fn update_era_checker<'life0, 'life1, 'async_trait>( &'life0 self, - beacon: &'life1 Beacon + beacon: &'life1 Beacon ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Update the EraChecker with EraReader information.

    source

    fn certifier_inform_new_epoch<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: &'life1 Epoch + epoch: &'life1 Epoch ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Certifier inform new epoch

    source

    fn create_open_message<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - protocol_message: &'life2 ProtocolMessage + signed_entity_type: &'life1 SignedEntityType, + protocol_message: &'life2 ProtocolMessage ) -> Pin<Box<dyn Future<Output = Result<OpenMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, diff --git a/rust-doc/mithril_aggregator/trait.ArtifactBuilder.html b/rust-doc/mithril_aggregator/trait.ArtifactBuilder.html index 684ee2d2238..fb137ccc4fe 100644 --- a/rust-doc/mithril_aggregator/trait.ArtifactBuilder.html +++ b/rust-doc/mithril_aggregator/trait.ArtifactBuilder.html @@ -1,12 +1,12 @@ ArtifactBuilder in mithril_aggregator - Rust
    pub trait ArtifactBuilder<U, W>: Send + Syncwhere
    -    U: Beacon,
    -    W: Artifact,{
    +    U: Beacon,
    +    W: Artifact,{
         // Required method
         fn compute_artifact<'life0, 'life1, 'async_trait>(
             &'life0 self,
             beacon: U,
    -        certificate: &'life1 Certificate
    -    ) -> Pin<Box<dyn Future<Output = StdResult<W>> + Send + 'async_trait>>
    +        certificate: &'life1 Certificate
    +    ) -> Pin<Box<dyn Future<Output = StdResult<W>> + Send + 'async_trait>>
            where Self: 'async_trait,
                  'life0: 'async_trait,
                  'life1: 'async_trait;
    @@ -14,8 +14,8 @@
     

    Required Methods§

    source

    fn compute_artifact<'life0, 'life1, 'async_trait>( &'life0 self, beacon: U, - certificate: &'life1 Certificate -) -> Pin<Box<dyn Future<Output = StdResult<W>> + Send + 'async_trait>>where + certificate: &'life1 Certificate +) -> Pin<Box<dyn Future<Output = StdResult<W>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Compute an artifact

    diff --git a/rust-doc/mithril_aggregator/trait.MultiSigner.html b/rust-doc/mithril_aggregator/trait.MultiSigner.html index 12ced985193..e51a84455b8 100644 --- a/rust-doc/mithril_aggregator/trait.MultiSigner.html +++ b/rust-doc/mithril_aggregator/trait.MultiSigner.html @@ -2,72 +2,72 @@
    Show 16 methods // Required methods fn get_current_beacon<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Option<Beacon>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Option<Beacon>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn update_current_beacon<'life0, 'async_trait>( &'life0 mut self, - beacon: Beacon + beacon: Beacon ) -> Pin<Box<dyn Future<Output = Result<(), ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_protocol_parameters<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, ProtocolError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn update_protocol_parameters<'life0, 'life1, 'async_trait>( &'life0 mut self, - protocol_parameters: &'life1 ProtocolParameters + protocol_parameters: &'life1 ProtocolParameters ) -> Pin<Box<dyn Future<Output = Result<(), ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_next_protocol_parameters<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, ProtocolError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_stake_distribution<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<ProtocolStakeDistribution, ProtocolError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<ProtocolStakeDistribution, ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_next_stake_distribution<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<ProtocolStakeDistribution, ProtocolError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<ProtocolStakeDistribution, ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn update_stake_distribution<'life0, 'life1, 'async_trait>( &'life0 mut self, - stakes: &'life1 ProtocolStakeDistribution + stakes: &'life1 ProtocolStakeDistribution ) -> Pin<Box<dyn Future<Output = Result<(), ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn compute_aggregate_verification_key<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signers_with_stakes: &'life1 [SignerWithStake], - protocol_parameters: &'life2 ProtocolParameters - ) -> Pin<Box<dyn Future<Output = Result<ProtocolAggregateVerificationKey, ProtocolError>> + Send + 'async_trait>> + signers_with_stakes: &'life1 [SignerWithStake], + protocol_parameters: &'life2 ProtocolParameters + ) -> Pin<Box<dyn Future<Output = Result<ProtocolAggregateVerificationKey, ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn get_signers_with_stake<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, ProtocolError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_next_signers_with_stake<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, ProtocolError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn verify_single_signature<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - message: &'life1 ProtocolMessage, - signatures: &'life2 SingleSignatures + message: &'life1 ProtocolMessage, + signatures: &'life2 SingleSignatures ) -> Pin<Box<dyn Future<Output = Result<(), ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, @@ -76,7 +76,7 @@ fn create_multi_signature<'life0, 'life1, 'async_trait>( &'life0 self, open_message: &'life1 OpenMessage - ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolMultiSignature>, ProtocolError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolMultiSignature>, ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; @@ -94,79 +94,79 @@ 'life0: 'async_trait { ... } fn get_signers<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Vec<Signer>, ProtocolError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Vec<Signer>, ProtocolError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait { ... }
    }
    Expand description

    MultiSigner is the cryptographic engine in charge of producing multi signatures from individual signatures

    Required Methods§

    source

    fn get_current_beacon<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Option<Beacon>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Option<Beacon>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get current beacon

    source

    fn update_current_beacon<'life0, 'async_trait>( &'life0 mut self, - beacon: Beacon + beacon: Beacon ) -> Pin<Box<dyn Future<Output = Result<(), ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Update current beacon

    source

    fn get_protocol_parameters<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get protocol parameters

    source

    fn update_protocol_parameters<'life0, 'life1, 'async_trait>( &'life0 mut self, - protocol_parameters: &'life1 ProtocolParameters + protocol_parameters: &'life1 ProtocolParameters ) -> Pin<Box<dyn Future<Output = Result<(), ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Update protocol parameters

    source

    fn get_next_protocol_parameters<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get next protocol parameters

    source

    fn get_stake_distribution<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<ProtocolStakeDistribution, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<ProtocolStakeDistribution, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get stake distribution

    source

    fn get_next_stake_distribution<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<ProtocolStakeDistribution, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<ProtocolStakeDistribution, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get next stake distribution i.e. the stake distribution that will be used at the next epoch

    source

    fn update_stake_distribution<'life0, 'life1, 'async_trait>( &'life0 mut self, - stakes: &'life1 ProtocolStakeDistribution + stakes: &'life1 ProtocolStakeDistribution ) -> Pin<Box<dyn Future<Output = Result<(), ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Update stake distribution

    source

    fn compute_aggregate_verification_key<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signers_with_stakes: &'life1 [SignerWithStake], - protocol_parameters: &'life2 ProtocolParameters -) -> Pin<Box<dyn Future<Output = Result<ProtocolAggregateVerificationKey, ProtocolError>> + Send + 'async_trait>>where + signers_with_stakes: &'life1 [SignerWithStake], + protocol_parameters: &'life2 ProtocolParameters +) -> Pin<Box<dyn Future<Output = Result<ProtocolAggregateVerificationKey, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

    Compute aggregate verification key from stake distribution

    source

    fn get_signers_with_stake<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get signers with stake

    source

    fn get_next_signers_with_stake<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get signers for the next epoch with their stake

    source

    fn verify_single_signature<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - message: &'life1 ProtocolMessage, - signatures: &'life2 SingleSignatures + message: &'life1 ProtocolMessage, + signatures: &'life2 SingleSignatures ) -> Pin<Box<dyn Future<Output = Result<(), ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, @@ -175,7 +175,7 @@

    source

    fn create_multi_signature<'life0, 'life1, 'async_trait>( &'life0 self, open_message: &'life1 OpenMessage -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolMultiSignature>, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolMultiSignature>, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Creates a multi signature from single signatures

    @@ -191,7 +191,7 @@ 'life0: 'async_trait,

    Compute next stake distribution aggregate verification key

    source

    fn get_signers<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Vec<Signer>, ProtocolError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Vec<Signer>, ProtocolError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Get signers

    Implementors§

    \ No newline at end of file diff --git a/rust-doc/mithril_aggregator/trait.ProtocolParametersStorer.html b/rust-doc/mithril_aggregator/trait.ProtocolParametersStorer.html index 424aaa81f8a..874d11c1f10 100644 --- a/rust-doc/mithril_aggregator/trait.ProtocolParametersStorer.html +++ b/rust-doc/mithril_aggregator/trait.ProtocolParametersStorer.html @@ -2,29 +2,29 @@ // Required methods fn save_protocol_parameters<'life0, 'async_trait>( &'life0 self, - epoch: Epoch, - protocol_parameters: ProtocolParameters - ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>> + epoch: Epoch, + protocol_parameters: ProtocolParameters + ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_protocol_parameters<'life0, 'async_trait>( &'life0 self, - epoch: Epoch - ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>> + epoch: Epoch + ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; -}
    Expand description

    Store and get protocol parameters for given epoch.

    +}
    Expand description

    Store and get [protocol parameters][ProtocolParameters] for given epoch.

    Required Methods§

    source

    fn save_protocol_parameters<'life0, 'async_trait>( &'life0 self, - epoch: Epoch, - protocol_parameters: ProtocolParameters -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch, + protocol_parameters: ProtocolParameters +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Save the given ProtocolParameter for the given Epoch.

    + 'life0: 'async_trait,

    Save the given ProtocolParameter for the given [Epoch].

    source

    fn get_protocol_parameters<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolParameters>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Get the saved ProtocolParameter for the given Epoch if any.

    + 'life0: 'async_trait,

    Get the saved ProtocolParameter for the given [Epoch] if any.

    Implementors§

    \ No newline at end of file diff --git a/rust-doc/mithril_aggregator/trait.SignerRecorder.html b/rust-doc/mithril_aggregator/trait.SignerRecorder.html index ed1d1fd8647..0f37dd6bcb6 100644 --- a/rust-doc/mithril_aggregator/trait.SignerRecorder.html +++ b/rust-doc/mithril_aggregator/trait.SignerRecorder.html @@ -3,28 +3,28 @@ fn record_signer_id<'life0, 'async_trait>( &'life0 self, signer_id: String - ) -> Pin<Box<dyn Future<Output = Result<(), StdError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<(), StdError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn record_signer_pool_ticker<'life0, 'async_trait>( &'life0 self, signer_id: String, pool_ticker: Option<String> - ) -> Pin<Box<dyn Future<Output = Result<(), StdError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<(), StdError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; }
    Expand description

    Signer recorder trait

    Required Methods§

    source

    fn record_signer_id<'life0, 'async_trait>( &'life0 self, signer_id: String -) -> Pin<Box<dyn Future<Output = Result<(), StdError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<(), StdError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Record signer_id

    source

    fn record_signer_pool_ticker<'life0, 'async_trait>( &'life0 self, signer_id: String, pool_ticker: Option<String> -) -> Pin<Box<dyn Future<Output = Result<(), StdError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<(), StdError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Record pool ticker by id

    Implementors§

    \ No newline at end of file diff --git a/rust-doc/mithril_aggregator/trait.SignerRegisterer.html b/rust-doc/mithril_aggregator/trait.SignerRegisterer.html index a1b64d1f675..02c7f1fc205 100644 --- a/rust-doc/mithril_aggregator/trait.SignerRegisterer.html +++ b/rust-doc/mithril_aggregator/trait.SignerRegisterer.html @@ -2,9 +2,9 @@ // Required methods fn register_signer<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: Epoch, - signer: &'life1 Signer - ) -> Pin<Box<dyn Future<Output = Result<SignerWithStake, SignerRegistrationError>> + Send + 'async_trait>> + epoch: Epoch, + signer: &'life1 Signer + ) -> Pin<Box<dyn Future<Output = Result<SignerWithStake, SignerRegistrationError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; @@ -16,9 +16,9 @@ }
    Expand description

    Trait to register a signer

    Required Methods§

    source

    fn register_signer<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: Epoch, - signer: &'life1 Signer -) -> Pin<Box<dyn Future<Output = Result<SignerWithStake, SignerRegistrationError>> + Send + 'async_trait>>where + epoch: Epoch, + signer: &'life1 Signer +) -> Pin<Box<dyn Future<Output = Result<SignerWithStake, SignerRegistrationError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Register a signer

    diff --git a/rust-doc/mithril_aggregator/trait.SignerRegistrationRoundOpener.html b/rust-doc/mithril_aggregator/trait.SignerRegistrationRoundOpener.html index 72ea9e4a22b..fef5977d50f 100644 --- a/rust-doc/mithril_aggregator/trait.SignerRegistrationRoundOpener.html +++ b/rust-doc/mithril_aggregator/trait.SignerRegistrationRoundOpener.html @@ -2,8 +2,8 @@ // Required methods fn open_registration_round<'life0, 'async_trait>( &'life0 self, - registration_epoch: Epoch, - stake_distribution: StakeDistribution + registration_epoch: Epoch, + stake_distribution: StakeDistribution ) -> Pin<Box<dyn Future<Output = Result<(), SignerRegistrationError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; @@ -15,8 +15,8 @@ }
    Expand description

    Trait to open a signer registration round

    Required Methods§

    source

    fn open_registration_round<'life0, 'async_trait>( &'life0 self, - registration_epoch: Epoch, - stake_distribution: StakeDistribution + registration_epoch: Epoch, + stake_distribution: StakeDistribution ) -> Pin<Box<dyn Future<Output = Result<(), SignerRegistrationError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Open a signer registration round

    diff --git a/rust-doc/mithril_aggregator/trait.VerificationKeyStorer.html b/rust-doc/mithril_aggregator/trait.VerificationKeyStorer.html index ebb8197748a..3e35469153c 100644 --- a/rust-doc/mithril_aggregator/trait.VerificationKeyStorer.html +++ b/rust-doc/mithril_aggregator/trait.VerificationKeyStorer.html @@ -2,42 +2,42 @@ // Required methods fn save_verification_key<'life0, 'async_trait>( &'life0 self, - epoch: Epoch, - signer: SignerWithStake - ) -> Pin<Box<dyn Future<Output = Result<Option<SignerWithStake>, StoreError>> + Send + 'async_trait>> + epoch: Epoch, + signer: SignerWithStake + ) -> Pin<Box<dyn Future<Output = Result<Option<SignerWithStake>, StoreError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_verification_keys<'life0, 'async_trait>( &'life0 self, - epoch: Epoch - ) -> Pin<Box<dyn Future<Output = Result<Option<HashMap<PartyId, Signer>>, StoreError>> + Send + 'async_trait>> + epoch: Epoch + ) -> Pin<Box<dyn Future<Output = Result<Option<HashMap<PartyId, Signer>>, StoreError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn prune_verification_keys<'life0, 'async_trait>( &'life0 self, - max_epoch_to_prune: Epoch - ) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>> + max_epoch_to_prune: Epoch + ) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; }
    Expand description

    Store and get signers verification keys for given epoch.

    Required Methods§

    source

    fn save_verification_key<'life0, 'async_trait>( &'life0 self, - epoch: Epoch, - signer: SignerWithStake -) -> Pin<Box<dyn Future<Output = Result<Option<SignerWithStake>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch, + signer: SignerWithStake +) -> Pin<Box<dyn Future<Output = Result<Option<SignerWithStake>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Save the verification key, for the given Signer for the given Epoch, returns the + 'life0: 'async_trait,

    Save the verification key, for the given [Signer] for the given [Epoch], returns the previous values if one already existed.

    source

    fn get_verification_keys<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = Result<Option<HashMap<PartyId, Signer>>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = Result<Option<HashMap<PartyId, Signer>>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Returns a HashMap of Signer indexed by PartyId for the given Beacon.

    + 'life0: 'async_trait,

    Returns a HashMap of [Signer] indexed by [PartyId] for the given Beacon.

    source

    fn prune_verification_keys<'life0, 'async_trait>( &'life0 self, - max_epoch_to_prune: Epoch -) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where + max_epoch_to_prune: Epoch +) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Prune all verification keys that are at or below the given epoch.

    Implementors§

    \ No newline at end of file diff --git a/rust-doc/mithril_client/aggregator_client/enum.AggregatorHTTPClientError.html b/rust-doc/mithril_client/aggregator_client/enum.AggregatorHTTPClientError.html index 84498cf83c1..e33b96c8086 100644 --- a/rust-doc/mithril_client/aggregator_client/enum.AggregatorHTTPClientError.html +++ b/rust-doc/mithril_client/aggregator_client/enum.AggregatorHTTPClientError.html @@ -5,7 +5,7 @@ ApiVersionMismatch(String), SubsystemError { message: String, - error: StdError, + error: StdError, }, }
    Expand description

    Error tied with the Aggregator client

    Variants§

    §

    RemoteServerTechnical(String)

    Error raised when querying the aggregator returned a 5XX error.

    @@ -13,9 +13,9 @@
    §

    RemoteServerUnreachable(String)

    Error raised when the aggregator can’t be reached.

    §

    ApiVersionMismatch(String)

    Error raised when the server API version mismatch the client API version.

    §

    SubsystemError

    Fields

    §message: String

    Error context

    -
    §error: StdError

    Nested error

    +
    §error: StdError

    Nested error

    HTTP subsystem error

    -

    Trait Implementations§

    source§

    impl Debug for AggregatorHTTPClientError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AggregatorHTTPClientError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for AggregatorHTTPClientError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Debug for AggregatorHTTPClientError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AggregatorHTTPClientError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for AggregatorHTTPClientError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_client/aggregator_client/enum.SnapshotClientError.html b/rust-doc/mithril_client/aggregator_client/enum.SnapshotClientError.html index cee2a3fe16f..40fad665f2d 100644 --- a/rust-doc/mithril_client/aggregator_client/enum.SnapshotClientError.html +++ b/rust-doc/mithril_client/aggregator_client/enum.SnapshotClientError.html @@ -7,7 +7,7 @@

    Variants§

    §

    NoWorkingLocation

    Fields

    §digest: String

    given digest

    §locations: String

    list of locations tried

    Download location does not work

    -

    Trait Implementations§

    source§

    impl Debug for SnapshotClientError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for SnapshotClientError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for SnapshotClientError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Debug for SnapshotClientError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for SnapshotClientError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for SnapshotClientError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_client/aggregator_client/struct.CertificateClient.html b/rust-doc/mithril_client/aggregator_client/struct.CertificateClient.html index fdadddb71fd..91c66bb57ea 100644 --- a/rust-doc/mithril_client/aggregator_client/struct.CertificateClient.html +++ b/rust-doc/mithril_client/aggregator_client/struct.CertificateClient.html @@ -3,14 +3,14 @@

    source

    pub async fn get( &self, certificate_hash: &str -) -> StdResult<Option<Certificate>>

    Get a single certificate full information from the aggregator.

    -

    Trait Implementations§

    source§

    impl CertificateRetriever for CertificateClient

    source§

    fn get_certificate_details<'life0, 'life1, 'async_trait>( +) -> StdResult<Option<Certificate>>

    Get a single certificate full information from the aggregator.

    +

    Trait Implementations§

    source§

    impl CertificateRetriever for CertificateClient

    source§

    fn get_certificate_details<'life0, 'life1, 'async_trait>( &'life0 self, certificate_hash: &'life1 str -) -> Pin<Box<dyn Future<Output = Result<Certificate, CertificateRetrieverError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Certificate, CertificateRetrieverError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, - 'life1: 'async_trait,

    Get Certificate details

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + 'life1: 'async_trait,

    Get [Certificate] details

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_client/aggregator_client/struct.MithrilStakeDistributionClient.html b/rust-doc/mithril_client/aggregator_client/struct.MithrilStakeDistributionClient.html index 1c20dec0120..1c51c1101c7 100644 --- a/rust-doc/mithril_client/aggregator_client/struct.MithrilStakeDistributionClient.html +++ b/rust-doc/mithril_client/aggregator_client/struct.MithrilStakeDistributionClient.html @@ -2,11 +2,11 @@

    Implementations§

    source§

    impl MithrilStakeDistributionClient

    source

    pub fn new(http_client: Arc<dyn AggregatorClient>) -> Self

    Constructor

    source

    pub async fn list( &self -) -> StdResult<Vec<MithrilStakeDistributionListItemMessage>>

    Fetch a list of signed MithrilStakeDistribution

    +) -> StdResult<Vec<MithrilStakeDistributionListItemMessage>>

    Fetch a list of signed MithrilStakeDistribution

    source

    pub async fn get( &self, hash: &str -) -> StdResult<Option<SignedEntity<MithrilStakeDistribution>>>

    Download the given stake distribution. If it cannot be found, a None is returned.

    +) -> StdResult<Option<SignedEntity<MithrilStakeDistribution>>>

    Download the given stake distribution. If it cannot be found, a None is returned.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_client/aggregator_client/struct.SnapshotClient.html b/rust-doc/mithril_client/aggregator_client/struct.SnapshotClient.html index ca3f1b2eb48..b40de2063c3 100644 --- a/rust-doc/mithril_client/aggregator_client/struct.SnapshotClient.html +++ b/rust-doc/mithril_client/aggregator_client/struct.SnapshotClient.html @@ -1,13 +1,13 @@ SnapshotClient in mithril_client::aggregator_client - Rust
    pub struct SnapshotClient { /* private fields */ }
    Expand description

    Aggregator client for the snapshot artifact

    Implementations§

    source§

    impl SnapshotClient

    source

    pub fn new(http_client: Arc<dyn AggregatorClient>) -> Self

    constructor

    -
    source

    pub async fn list(&self) -> StdResult<Vec<SnapshotListItemMessage>>

    Return a list of available snapshots

    -
    source

    pub async fn show(&self, digest: &str) -> StdResult<SnapshotMessage>

    Return a snapshot based on the given digest (list to get the digests)

    +
    source

    pub async fn list(&self) -> StdResult<Vec<SnapshotListItemMessage>>

    Return a list of available snapshots

    +
    source

    pub async fn show(&self, digest: &str) -> StdResult<SnapshotMessage>

    Return a snapshot based on the given digest (list to get the digests)

    source

    pub async fn download( &self, - snapshot: &Snapshot, + snapshot: &Snapshot, download_dir: &Path, progress_bar: ProgressBar -) -> StdResult<PathBuf>

    Download the snapshot identified by the given snapshot in the given directory

    +) -> StdResult<PathBuf>

    Download the snapshot identified by the given snapshot in the given directory

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_client/commands/mithril_stake_distribution/enum.MithrilStakeDistributionCommands.html b/rust-doc/mithril_client/commands/mithril_stake_distribution/enum.MithrilStakeDistributionCommands.html index ab556cef337..b5208d4ab90 100644 --- a/rust-doc/mithril_client/commands/mithril_stake_distribution/enum.MithrilStakeDistributionCommands.html +++ b/rust-doc/mithril_client/commands/mithril_stake_distribution/enum.MithrilStakeDistributionCommands.html @@ -7,7 +7,7 @@

    Implementations§

    source§

    impl MithrilStakeDistributionCommands

    source

    pub async fn execute( &self, config_builder: ConfigBuilder<DefaultState> -) -> Result<(), StdError>

    Execute Mithril stake distribution command

    +) -> Result<(), StdError>

    Execute Mithril stake distribution command

    Trait Implementations§

    source§

    impl Clone for MithrilStakeDistributionCommands

    source§

    fn clone(&self) -> MithrilStakeDistributionCommands

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MithrilStakeDistributionCommands

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromArgMatches for MithrilStakeDistributionCommands

    source§

    fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches ) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn update_from_arg_matches( diff --git a/rust-doc/mithril_client/commands/mithril_stake_distribution/struct.MithrilStakeDistributionDownloadCommand.html b/rust-doc/mithril_client/commands/mithril_stake_distribution/struct.MithrilStakeDistributionDownloadCommand.html index ca292ec0a6c..0ebd58e5685 100644 --- a/rust-doc/mithril_client/commands/mithril_stake_distribution/struct.MithrilStakeDistributionDownloadCommand.html +++ b/rust-doc/mithril_client/commands/mithril_stake_distribution/struct.MithrilStakeDistributionDownloadCommand.html @@ -3,7 +3,7 @@

    Implementations§

    source§

    impl MithrilStakeDistributionDownloadCommand

    source

    pub async fn execute( &self, config_builder: ConfigBuilder<DefaultState> -) -> StdResult<()>

    Main command execution

    +) -> StdResult<()>

    Main command execution

    Trait Implementations§

    source§

    impl Args for MithrilStakeDistributionDownloadCommand

    source§

    fn group_id() -> Option<Id>

    Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
    source§

    fn augment_args<'b>(__clap_app: Command) -> Command

    Append to [Command] so it can instantiate Self. Read more
    source§

    fn augment_args_for_update<'b>(__clap_app: Command) -> Command

    Append to [Command] so it can update self. Read more
    source§

    impl Clone for MithrilStakeDistributionDownloadCommand

    source§

    fn clone(&self) -> MithrilStakeDistributionDownloadCommand

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl CommandFactory for MithrilStakeDistributionDownloadCommand

    source§

    fn command<'b>() -> Command

    Build a [Command] that can instantiate Self. Read more
    source§

    fn command_for_update<'b>() -> Command

    Build a [Command] that can update self. Read more
    source§

    impl Debug for MithrilStakeDistributionDownloadCommand

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromArgMatches for MithrilStakeDistributionDownloadCommand

    source§

    fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches ) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn update_from_arg_matches( diff --git a/rust-doc/mithril_client/commands/mithril_stake_distribution/struct.MithrilStakeDistributionListCommand.html b/rust-doc/mithril_client/commands/mithril_stake_distribution/struct.MithrilStakeDistributionListCommand.html index 5a886e6b165..c5dcd8ce0d5 100644 --- a/rust-doc/mithril_client/commands/mithril_stake_distribution/struct.MithrilStakeDistributionListCommand.html +++ b/rust-doc/mithril_client/commands/mithril_stake_distribution/struct.MithrilStakeDistributionListCommand.html @@ -2,7 +2,7 @@

    Implementations§

    source§

    impl MithrilStakeDistributionListCommand

    source

    pub async fn execute( &self, config_builder: ConfigBuilder<DefaultState> -) -> StdResult<()>

    Main command execution

    +) -> StdResult<()>

    Main command execution

    Trait Implementations§

    source§

    impl Args for MithrilStakeDistributionListCommand

    source§

    fn group_id() -> Option<Id>

    Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
    source§

    fn augment_args<'b>(__clap_app: Command) -> Command

    Append to [Command] so it can instantiate Self. Read more
    source§

    fn augment_args_for_update<'b>(__clap_app: Command) -> Command

    Append to [Command] so it can update self. Read more
    source§

    impl Clone for MithrilStakeDistributionListCommand

    source§

    fn clone(&self) -> MithrilStakeDistributionListCommand

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl CommandFactory for MithrilStakeDistributionListCommand

    source§

    fn command<'b>() -> Command

    Build a [Command] that can instantiate Self. Read more
    source§

    fn command_for_update<'b>() -> Command

    Build a [Command] that can update self. Read more
    source§

    impl Debug for MithrilStakeDistributionListCommand

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromArgMatches for MithrilStakeDistributionListCommand

    source§

    fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches ) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn update_from_arg_matches( diff --git a/rust-doc/mithril_client/commands/snapshot/enum.SnapshotCommands.html b/rust-doc/mithril_client/commands/snapshot/enum.SnapshotCommands.html index e24bbca70f3..0a9ce400682 100644 --- a/rust-doc/mithril_client/commands/snapshot/enum.SnapshotCommands.html +++ b/rust-doc/mithril_client/commands/snapshot/enum.SnapshotCommands.html @@ -9,7 +9,7 @@

    Implementations§

    source§

    impl SnapshotCommands

    source

    pub async fn execute( &self, config_builder: ConfigBuilder<DefaultState> -) -> Result<(), StdError>

    Execute snapshot command

    +) -> Result<(), StdError>

    Execute snapshot command

    Trait Implementations§

    source§

    impl Clone for SnapshotCommands

    source§

    fn clone(&self) -> SnapshotCommands

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SnapshotCommands

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromArgMatches for SnapshotCommands

    source§

    fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches ) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn update_from_arg_matches( diff --git a/rust-doc/mithril_client/commands/snapshot/struct.SnapshotDownloadCommand.html b/rust-doc/mithril_client/commands/snapshot/struct.SnapshotDownloadCommand.html index 0b9c210ca6d..15371a92801 100644 --- a/rust-doc/mithril_client/commands/snapshot/struct.SnapshotDownloadCommand.html +++ b/rust-doc/mithril_client/commands/snapshot/struct.SnapshotDownloadCommand.html @@ -2,7 +2,7 @@

    Implementations§

    source§

    impl SnapshotDownloadCommand

    source

    pub async fn execute( &self, config_builder: ConfigBuilder<DefaultState> -) -> StdResult<()>

    Command execution

    +) -> StdResult<()>

    Command execution

    Trait Implementations§

    source§

    impl Args for SnapshotDownloadCommand

    source§

    fn group_id() -> Option<Id>

    Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
    source§

    fn augment_args<'b>(__clap_app: Command) -> Command

    Append to [Command] so it can instantiate Self. Read more
    source§

    fn augment_args_for_update<'b>(__clap_app: Command) -> Command

    Append to [Command] so it can update self. Read more
    source§

    impl Clone for SnapshotDownloadCommand

    source§

    fn clone(&self) -> SnapshotDownloadCommand

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl CommandFactory for SnapshotDownloadCommand

    source§

    fn command<'b>() -> Command

    Build a [Command] that can instantiate Self. Read more
    source§

    fn command_for_update<'b>() -> Command

    Build a [Command] that can update self. Read more
    source§

    impl Debug for SnapshotDownloadCommand

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromArgMatches for SnapshotDownloadCommand

    source§

    fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches ) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn update_from_arg_matches( diff --git a/rust-doc/mithril_client/commands/snapshot/struct.SnapshotListCommand.html b/rust-doc/mithril_client/commands/snapshot/struct.SnapshotListCommand.html index ff2524226ec..0cbc68be8a6 100644 --- a/rust-doc/mithril_client/commands/snapshot/struct.SnapshotListCommand.html +++ b/rust-doc/mithril_client/commands/snapshot/struct.SnapshotListCommand.html @@ -2,7 +2,7 @@

    Implementations§

    source§

    impl SnapshotListCommand

    source

    pub async fn execute( &self, config_builder: ConfigBuilder<DefaultState> -) -> StdResult<()>

    Main command execution

    +) -> StdResult<()>

    Main command execution

    Trait Implementations§

    source§

    impl Args for SnapshotListCommand

    source§

    fn group_id() -> Option<Id>

    Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
    source§

    fn augment_args<'b>(__clap_app: Command) -> Command

    Append to [Command] so it can instantiate Self. Read more
    source§

    fn augment_args_for_update<'b>(__clap_app: Command) -> Command

    Append to [Command] so it can update self. Read more
    source§

    impl Clone for SnapshotListCommand

    source§

    fn clone(&self) -> SnapshotListCommand

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl CommandFactory for SnapshotListCommand

    source§

    fn command<'b>() -> Command

    Build a [Command] that can instantiate Self. Read more
    source§

    fn command_for_update<'b>() -> Command

    Build a [Command] that can update self. Read more
    source§

    impl Debug for SnapshotListCommand

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromArgMatches for SnapshotListCommand

    source§

    fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches ) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn update_from_arg_matches( diff --git a/rust-doc/mithril_client/commands/snapshot/struct.SnapshotShowCommand.html b/rust-doc/mithril_client/commands/snapshot/struct.SnapshotShowCommand.html index 6d38fbd94a0..cba56489e34 100644 --- a/rust-doc/mithril_client/commands/snapshot/struct.SnapshotShowCommand.html +++ b/rust-doc/mithril_client/commands/snapshot/struct.SnapshotShowCommand.html @@ -2,7 +2,7 @@

    Implementations§

    source§

    impl SnapshotShowCommand

    source

    pub async fn execute( &self, config_builder: ConfigBuilder<DefaultState> -) -> Result<(), StdError>

    Snapshot Show command

    +) -> Result<(), StdError>

    Snapshot Show command

    Trait Implementations§

    source§

    impl Args for SnapshotShowCommand

    source§

    fn group_id() -> Option<Id>

    Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
    source§

    fn augment_args<'b>(__clap_app: Command) -> Command

    Append to [Command] so it can instantiate Self. Read more
    source§

    fn augment_args_for_update<'b>(__clap_app: Command) -> Command

    Append to [Command] so it can update self. Read more
    source§

    impl Clone for SnapshotShowCommand

    source§

    fn clone(&self) -> SnapshotShowCommand

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl CommandFactory for SnapshotShowCommand

    source§

    fn command<'b>() -> Command

    Build a [Command] that can instantiate Self. Read more
    source§

    fn command_for_update<'b>() -> Command

    Build a [Command] that can update self. Read more
    source§

    impl Debug for SnapshotShowCommand

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromArgMatches for SnapshotShowCommand

    source§

    fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches ) -> Result<Self, Error>

    Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
    source§

    fn update_from_arg_matches( diff --git a/rust-doc/mithril_client/dependencies/struct.DependenciesBuilder.html b/rust-doc/mithril_client/dependencies/struct.DependenciesBuilder.html index 4552dfb9ad2..38cbedfaa1a 100644 --- a/rust-doc/mithril_client/dependencies/struct.DependenciesBuilder.html +++ b/rust-doc/mithril_client/dependencies/struct.DependenciesBuilder.html @@ -4,8 +4,8 @@ pub snapshot_client: Option<Arc<SnapshotClient>>, pub mithril_stake_distribution_client: Option<Arc<MithrilStakeDistributionClient>>, pub certificate_client: Option<Arc<CertificateClient>>, - pub certificate_verifier: Option<Arc<dyn CertificateVerifier>>, - pub immutable_digester: Option<Arc<dyn ImmutableDigester>>, + pub certificate_verifier: Option<Arc<dyn CertificateVerifier>>, + pub immutable_digester: Option<Arc<dyn ImmutableDigester>>, pub snapshot_service: Option<Arc<dyn SnapshotService>>, pub mithril_stake_distribution_service: Option<Arc<dyn MithrilStakeDistributionService>>, }
    Expand description

    Dependencies builder

    @@ -14,35 +14,35 @@
    §snapshot_client: Option<Arc<SnapshotClient>>

    SnapshotClient

    §mithril_stake_distribution_client: Option<Arc<MithrilStakeDistributionClient>>

    MithrilStakeDistributionClient

    §certificate_client: Option<Arc<CertificateClient>>

    CertificateClient

    -
    §certificate_verifier: Option<Arc<dyn CertificateVerifier>>

    CertificateVerifier

    -
    §immutable_digester: Option<Arc<dyn ImmutableDigester>>

    ImmutableDigester

    +
    §certificate_verifier: Option<Arc<dyn CertificateVerifier>>

    CertificateVerifier

    +
    §immutable_digester: Option<Arc<dyn ImmutableDigester>>

    ImmutableDigester

    §snapshot_service: Option<Arc<dyn SnapshotService>>§mithril_stake_distribution_service: Option<Arc<dyn MithrilStakeDistributionService>>

    Implementations§

    source§

    impl DependenciesBuilder

    source

    pub fn new(config: Arc<Config>) -> Self

    Constructor

    -
    source

    pub async fn get_logger(&mut self) -> StdResult<Logger>

    Return an instance of the logger. Since the logger is a singleton it is +

    source

    pub async fn get_logger(&mut self) -> StdResult<Logger>

    Return an instance of the logger. Since the logger is a singleton it is provider directly by its own library.

    source

    pub async fn get_aggregator_client( &mut self -) -> StdResult<Arc<dyn AggregatorClient>>

    Get a clone of the AggregatorClient dependency

    -
    source

    pub async fn get_snapshot_client(&mut self) -> StdResult<Arc<SnapshotClient>>

    Get a clone of the SnapshotClient dependency

    +) -> StdResult<Arc<dyn AggregatorClient>>

    Get a clone of the AggregatorClient dependency

    +
    source

    pub async fn get_snapshot_client(&mut self) -> StdResult<Arc<SnapshotClient>>

    Get a clone of the SnapshotClient dependency

    source

    pub async fn get_mithril_stake_distribution_client( &mut self -) -> StdResult<Arc<MithrilStakeDistributionClient>>

    Get a clone of the SnapshotClient dependency

    +) -> StdResult<Arc<MithrilStakeDistributionClient>>

    Get a clone of the SnapshotClient dependency

    source

    pub async fn get_certificate_client( &mut self -) -> StdResult<Arc<CertificateClient>>

    Get a clone of the CertificateClient dependency

    +) -> StdResult<Arc<CertificateClient>>

    Get a clone of the CertificateClient dependency

    source

    pub async fn get_certificate_verifier( &mut self -) -> StdResult<Arc<dyn CertificateVerifier>>

    Get a clone of the CertificateVerifier dependency

    +) -> StdResult<Arc<dyn CertificateVerifier>>

    Get a clone of the [CertificateVerifier] dependency

    source

    pub async fn get_immutable_digester( &mut self -) -> StdResult<Arc<dyn ImmutableDigester>>

    Get a clone of the ImmutableDigester dependency

    +) -> StdResult<Arc<dyn ImmutableDigester>>

    Get a clone of the [ImmutableDigester] dependency

    source

    pub async fn get_snapshot_service( &mut self -) -> StdResult<Arc<dyn SnapshotService>>

    Get a clone of the SnapshotService dependency

    +) -> StdResult<Arc<dyn SnapshotService>>

    Get a clone of the SnapshotService dependency

    source

    pub async fn get_mithril_stake_distribution_service( &mut self -) -> StdResult<Arc<dyn MithrilStakeDistributionService>>

    Get a clone of the MithrilStakeDistributionService dependency

    +) -> StdResult<Arc<dyn MithrilStakeDistributionService>>

    Get a clone of the MithrilStakeDistributionService dependency

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_client/index.html b/rust-doc/mithril_client/index.html index 93a92daa3b9..a414ce66c9c 100644 --- a/rust-doc/mithril_client/index.html +++ b/rust-doc/mithril_client/index.html @@ -1,9 +1,9 @@ -mithril_client - Rust

    Crate mithril_client

    source ·
    Expand description

    Define everything necessary to list, download, and validate snapshots from a +mithril_client - Rust

    Crate mithril_client

    source ·
    Expand description

    Define everything necessary to list, download, and validate snapshots from a Mithril Aggregator.

    To query an aggregator for snapshots & certificate use the services::SnapshotService.

    Modules

    • Transport layers to the Aggregator nodes
    • Command module This module holds the subcommands that can be used from the CLI.
    • Dependency manager for the client
    • Services This module contains the different services tied with their bounded context.
    • Utilities module -This module contains tools needed mostly in services layers.

    Structs

    Structs

    \ No newline at end of file diff --git a/rust-doc/mithril_client/services/enum.MithrilStakeDistributionServiceError.html b/rust-doc/mithril_client/services/enum.MithrilStakeDistributionServiceError.html index 5a71001583a..171daec9bde 100644 --- a/rust-doc/mithril_client/services/enum.MithrilStakeDistributionServiceError.html +++ b/rust-doc/mithril_client/services/enum.MithrilStakeDistributionServiceError.html @@ -7,7 +7,7 @@ CertificateNotFound(String), InvalidParameters { context: String, - error: StdError, + error: StdError, }, CouldNotFindStakeDistribution(String), }
    Expand description

    Errors related to the StakeDistributionService

    @@ -17,7 +17,7 @@

    When certificate cannot be verified

    §

    CertificateNotFound(String)

    Associated certificate not found

    §

    InvalidParameters

    Fields

    §context: String

    Error context

    -
    §error: StdError

    Eventual nested error

    +
    §error: StdError

    Eventual nested error

    The configuration has invalid or missing parameters

    §

    CouldNotFindStakeDistribution(String)

    Could not find the given stake distribution

    Trait Implementations§

    source§

    impl Debug for MithrilStakeDistributionServiceError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for MithrilStakeDistributionServiceError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for MithrilStakeDistributionServiceError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_client/services/enum.SnapshotServiceError.html b/rust-doc/mithril_client/services/enum.SnapshotServiceError.html index c76c709213f..6b7895150c0 100644 --- a/rust-doc/mithril_client/services/enum.SnapshotServiceError.html +++ b/rust-doc/mithril_client/services/enum.SnapshotServiceError.html @@ -7,7 +7,7 @@ CouldNotFindCertificate(String), InvalidParameters { context: String, - error: StdError, + error: StdError, }, }
    Expand description

    SnapshotService related errors.

    Variants§

    §

    SnapshotNotFound(String)

    The given identifier does not link to an existing snapshot.

    @@ -17,9 +17,9 @@ archive.

    §

    CouldNotFindCertificate(String)

    The given certificate could not be found, contains the certificate hash

    §

    InvalidParameters

    Fields

    §context: String

    Error context

    -
    §error: StdError

    Eventual nested error

    +
    §error: StdError

    Eventual nested error

    The configuration has invalid or missing parameters

    -

    Trait Implementations§

    source§

    impl Debug for SnapshotServiceError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for SnapshotServiceError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for SnapshotServiceError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Debug for SnapshotServiceError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for SnapshotServiceError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for SnapshotServiceError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_client/services/struct.AppMithrilStakeDistributionService.html b/rust-doc/mithril_client/services/struct.AppMithrilStakeDistributionService.html index 5343f82c306..5567d25eb55 100644 --- a/rust-doc/mithril_client/services/struct.AppMithrilStakeDistributionService.html +++ b/rust-doc/mithril_client/services/struct.AppMithrilStakeDistributionService.html @@ -2,18 +2,18 @@

    Implementations§

    source§

    impl AppMithrilStakeDistributionService

    source

    pub fn new( stake_distribution_client: Arc<MithrilStakeDistributionClient>, certificate_client: Arc<CertificateClient>, - certificate_verifier: Arc<dyn CertificateVerifier> + certificate_verifier: Arc<dyn CertificateVerifier> ) -> Self

    Constructor

    Trait Implementations§

    source§

    impl MithrilStakeDistributionService for AppMithrilStakeDistributionService

    source§

    fn list<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = StdResult<Vec<MithrilStakeDistributionListItemMessage>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<MithrilStakeDistributionListItemMessage>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return a list of the certified Mithril stake distributions
    source§

    fn download<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, hash: &'life1 str, dirpath: &'life2 Path, genesis_verification_key: &'life3 str -) -> Pin<Box<dyn Future<Output = StdResult<PathBuf>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<PathBuf>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, diff --git a/rust-doc/mithril_client/services/struct.MithrilClientSnapshotService.html b/rust-doc/mithril_client/services/struct.MithrilClientSnapshotService.html index ca0311c0350..017f32a176b 100644 --- a/rust-doc/mithril_client/services/struct.MithrilClientSnapshotService.html +++ b/rust-doc/mithril_client/services/struct.MithrilClientSnapshotService.html @@ -2,26 +2,26 @@

    Implementations§

    source§

    impl MithrilClientSnapshotService

    source

    pub fn new( snapshot_client: Arc<SnapshotClient>, certificate_client: Arc<CertificateClient>, - certificate_verifier: Arc<dyn CertificateVerifier>, - immutable_digester: Arc<dyn ImmutableDigester> + certificate_verifier: Arc<dyn CertificateVerifier>, + immutable_digester: Arc<dyn ImmutableDigester> ) -> Self

    Create a new instance of the service.

    Trait Implementations§

    source§

    impl SnapshotService for MithrilClientSnapshotService

    source§

    fn list<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = StdResult<Vec<SnapshotListItemMessage>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<SnapshotListItemMessage>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return the list of the snapshots stored by the Aggregator.
    source§

    fn show<'life0, 'life1, 'async_trait>( &'life0 self, digest: &'life1 str -) -> Pin<Box<dyn Future<Output = StdResult<SnapshotMessage>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<SnapshotMessage>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Show details of the snapshot identified by the given digest.
    source§

    fn download<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, - snapshot_entity: &'life1 SignedEntity<Snapshot>, + snapshot_entity: &'life1 SignedEntity<Snapshot>, pathdir: &'life2 Path, genesis_verification_key: &'life3 str, progress_target: ProgressDrawTarget -) -> Pin<Box<dyn Future<Output = StdResult<PathBuf>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<PathBuf>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, diff --git a/rust-doc/mithril_client/services/trait.MithrilStakeDistributionService.html b/rust-doc/mithril_client/services/trait.MithrilStakeDistributionService.html index 1ff33bbce21..51e532fed16 100644 --- a/rust-doc/mithril_client/services/trait.MithrilStakeDistributionService.html +++ b/rust-doc/mithril_client/services/trait.MithrilStakeDistributionService.html @@ -2,7 +2,7 @@ // Required methods fn list<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = StdResult<Vec<MithrilStakeDistributionListItemMessage>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Vec<MithrilStakeDistributionListItemMessage>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn download<'life0, 'life1, 'life2, 'life3, 'async_trait>( @@ -10,7 +10,7 @@ hash: &'life1 str, dirpath: &'life2 Path, genesis_verification_key: &'life3 str - ) -> Pin<Box<dyn Future<Output = StdResult<PathBuf>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<PathBuf>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, @@ -19,7 +19,7 @@ }
    Expand description

    Definition of the service responsible of Mithril Stake Distribution.

    Required Methods§

    source

    fn list<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = StdResult<Vec<MithrilStakeDistributionListItemMessage>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<MithrilStakeDistributionListItemMessage>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return a list of the certified Mithril stake distributions

    source

    fn download<'life0, 'life1, 'life2, 'life3, 'async_trait>( @@ -27,7 +27,7 @@ hash: &'life1 str, dirpath: &'life2 Path, genesis_verification_key: &'life3 str -) -> Pin<Box<dyn Future<Output = StdResult<PathBuf>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<PathBuf>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, diff --git a/rust-doc/mithril_client/services/trait.SnapshotService.html b/rust-doc/mithril_client/services/trait.SnapshotService.html index f9a94f01998..f2b159c39af 100644 --- a/rust-doc/mithril_client/services/trait.SnapshotService.html +++ b/rust-doc/mithril_client/services/trait.SnapshotService.html @@ -2,23 +2,23 @@ // Required methods fn list<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = StdResult<Vec<SnapshotListItemMessage>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<Vec<SnapshotListItemMessage>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn show<'life0, 'life1, 'async_trait>( &'life0 self, digest: &'life1 str - ) -> Pin<Box<dyn Future<Output = StdResult<SnapshotMessage>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<SnapshotMessage>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn download<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, - snapshot_entity: &'life1 SignedEntity<Snapshot>, + snapshot_entity: &'life1 SignedEntity<Snapshot>, pathdir: &'life2 Path, genesis_verification_key: &'life3 str, progress_target: ProgressDrawTarget - ) -> Pin<Box<dyn Future<Output = StdResult<PathBuf>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<PathBuf>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, @@ -28,23 +28,23 @@

    This trait is the interface for the Snapshot service used in the main commands.

    Required Methods§

    source

    fn list<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = StdResult<Vec<SnapshotListItemMessage>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<Vec<SnapshotListItemMessage>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return the list of the snapshots stored by the Aggregator.

    source

    fn show<'life0, 'life1, 'async_trait>( &'life0 self, digest: &'life1 str -) -> Pin<Box<dyn Future<Output = StdResult<SnapshotMessage>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<SnapshotMessage>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Show details of the snapshot identified by the given digest.

    source

    fn download<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, - snapshot_entity: &'life1 SignedEntity<Snapshot>, + snapshot_entity: &'life1 SignedEntity<Snapshot>, pathdir: &'life2 Path, genesis_verification_key: &'life3 str, progress_target: ProgressDrawTarget -) -> Pin<Box<dyn Future<Output = StdResult<PathBuf>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<PathBuf>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, diff --git a/rust-doc/mithril_client/struct.FromCertificateMessageAdapter.html b/rust-doc/mithril_client/struct.FromCertificateMessageAdapter.html index 5c236c40cc4..7f4fc96f478 100644 --- a/rust-doc/mithril_client/struct.FromCertificateMessageAdapter.html +++ b/rust-doc/mithril_client/struct.FromCertificateMessageAdapter.html @@ -1,5 +1,5 @@ -FromCertificateMessageAdapter in mithril_client - Rust
    pub struct FromCertificateMessageAdapter;
    Expand description

    Adapter to convert CertificateMessage to Certificate instances

    -

    Trait Implementations§

    source§

    impl TryFromMessageAdapter<CertificateMessage, Certificate> for FromCertificateMessageAdapter

    source§

    fn try_adapt(certificate_message: CertificateMessage) -> StdResult<Certificate>

    Method to trigger the conversion

    +FromCertificateMessageAdapter in mithril_client - Rust
    pub struct FromCertificateMessageAdapter;
    Expand description

    Adapter to convert [CertificateMessage] to [Certificate] instances

    +

    Trait Implementations§

    source§

    impl TryFromMessageAdapter<CertificateMessage, Certificate> for FromCertificateMessageAdapter

    source§

    fn try_adapt(certificate_message: CertificateMessage) -> StdResult<Certificate>

    Method to trigger the conversion

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_client/struct.FromSnapshotMessageAdapter.html b/rust-doc/mithril_client/struct.FromSnapshotMessageAdapter.html index c0992e15c88..31909697c15 100644 --- a/rust-doc/mithril_client/struct.FromSnapshotMessageAdapter.html +++ b/rust-doc/mithril_client/struct.FromSnapshotMessageAdapter.html @@ -1,5 +1,5 @@ -FromSnapshotMessageAdapter in mithril_client - Rust
    pub struct FromSnapshotMessageAdapter;
    Expand description

    Adapter to convert SnapshotMessage to SignedEntity<Snapshot> instances

    -

    Trait Implementations§

    source§

    impl FromMessageAdapter<SnapshotMessage, SignedEntity<Snapshot>> for FromSnapshotMessageAdapter

    source§

    fn adapt(snapshot_message: SnapshotMessage) -> SignedEntity<Snapshot>

    Method to trigger the conversion

    +FromSnapshotMessageAdapter in mithril_client - Rust
    pub struct FromSnapshotMessageAdapter;
    Expand description

    Adapter to convert [SnapshotMessage] to [SignedEntity<Snapshot>] instances

    +

    Trait Implementations§

    source§

    impl FromMessageAdapter<SnapshotMessage, SignedEntity<Snapshot>> for FromSnapshotMessageAdapter

    source§

    fn adapt(snapshot_message: SnapshotMessage) -> SignedEntity<Snapshot>

    Method to trigger the conversion

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_client/struct.MithrilStakeDistributionListItem.html b/rust-doc/mithril_client/struct.MithrilStakeDistributionListItem.html index d664b3d0293..0236a94f16d 100644 --- a/rust-doc/mithril_client/struct.MithrilStakeDistributionListItem.html +++ b/rust-doc/mithril_client/struct.MithrilStakeDistributionListItem.html @@ -1,21 +1,21 @@ MithrilStakeDistributionListItem in mithril_client - Rust
    pub struct MithrilStakeDistributionListItem {
    -    pub epoch: Epoch,
    +    pub epoch: Epoch,
         pub hash: String,
         pub certificate_hash: String,
         pub created_at: DateTime<Utc>,
     }
    Expand description

    Item to display Mithril Stake Distribution lines in a table.

    -

    Fields§

    §epoch: Epoch

    Epoch at which the Mithril Stake Distribution is created

    +

    Fields§

    §epoch: Epoch

    Epoch at which the Mithril Stake Distribution is created

    §hash: String

    Hash of the Mithril Stake Distribution (different from the AVK).

    §certificate_hash: String

    Hash of the associated certificate

    §created_at: DateTime<Utc>

    Date and time at which the Mithril Stake Distribution was created

    -

    Trait Implementations§

    source§

    impl Clone for MithrilStakeDistributionListItem

    source§

    fn clone(&self) -> MithrilStakeDistributionListItem

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MithrilStakeDistributionListItem

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<MithrilStakeDistributionListItemMessage> for MithrilStakeDistributionListItem

    source§

    fn from(value: MithrilStakeDistributionListItemMessage) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq<MithrilStakeDistributionListItem> for MithrilStakeDistributionListItem

    source§

    fn eq(&self, other: &MithrilStakeDistributionListItem) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Clone for MithrilStakeDistributionListItem

    source§

    fn clone(&self) -> MithrilStakeDistributionListItem

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MithrilStakeDistributionListItem

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<MithrilStakeDistributionListItemMessage> for MithrilStakeDistributionListItem

    source§

    fn from(value: MithrilStakeDistributionListItemMessage) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq<MithrilStakeDistributionListItem> for MithrilStakeDistributionListItem

    source§

    fn eq(&self, other: &MithrilStakeDistributionListItem) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<MithrilStakeDistributionListItem> for MithrilStakeDistributionListItem

    source§

    fn partial_cmp( &self, other: &MithrilStakeDistributionListItem ) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Row for &MithrilStakeDistributionListItem

    source§

    fn row(self) -> RowStruct

    Converts raw type to rows of a table
    source§

    impl Row for MithrilStakeDistributionListItem

    source§

    fn row(self) -> RowStruct

    Converts raw type to rows of a table
    source§

    impl Serialize for MithrilStakeDistributionListItem

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where +operator. Read more

    source§

    impl Row for &MithrilStakeDistributionListItem

    source§

    fn row(self) -> RowStruct

    Converts raw type to rows of a table
    source§

    impl Row for MithrilStakeDistributionListItem

    source§

    fn row(self) -> RowStruct

    Converts raw type to rows of a table
    source§

    impl Serialize for MithrilStakeDistributionListItem

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Title for MithrilStakeDistributionListItem

    source§

    fn title() -> RowStruct

    Returns title row of a struct
    source§

    impl Eq for MithrilStakeDistributionListItem

    source§

    impl StructuralEq for MithrilStakeDistributionListItem

    source§

    impl StructuralPartialEq for MithrilStakeDistributionListItem

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_client/struct.SnapshotFieldItem.html b/rust-doc/mithril_client/struct.SnapshotFieldItem.html index 2aa7485eefc..82d1372667a 100644 --- a/rust-doc/mithril_client/struct.SnapshotFieldItem.html +++ b/rust-doc/mithril_client/struct.SnapshotFieldItem.html @@ -10,7 +10,7 @@ by ==.

    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<SnapshotFieldItem> for SnapshotFieldItem

    source§

    fn partial_cmp(&self, other: &SnapshotFieldItem) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Row for &SnapshotFieldItem

    source§

    fn row(self) -> RowStruct

    Converts raw type to rows of a table
    source§

    impl Row for SnapshotFieldItem

    source§

    fn row(self) -> RowStruct

    Converts raw type to rows of a table
    source§

    impl Title for SnapshotFieldItem

    source§

    fn title() -> RowStruct

    Returns title row of a struct
    source§

    impl Eq for SnapshotFieldItem

    source§

    impl StructuralEq for SnapshotFieldItem

    source§

    impl StructuralPartialEq for SnapshotFieldItem

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +operator. Read more

    source§

    impl Row for &SnapshotFieldItem

    source§

    fn row(self) -> RowStruct

    Converts raw type to rows of a table
    source§

    impl Row for SnapshotFieldItem

    source§

    fn row(self) -> RowStruct

    Converts raw type to rows of a table
    source§

    impl Title for SnapshotFieldItem

    source§

    fn title() -> RowStruct

    Returns title row of a struct
    source§

    impl Eq for SnapshotFieldItem

    source§

    impl StructuralEq for SnapshotFieldItem

    source§

    impl StructuralPartialEq for SnapshotFieldItem

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_client/struct.SnapshotListItem.html b/rust-doc/mithril_client/struct.SnapshotListItem.html index 4c7b2d0bfca..568076f24b6 100644 --- a/rust-doc/mithril_client/struct.SnapshotListItem.html +++ b/rust-doc/mithril_client/struct.SnapshotListItem.html @@ -1,5 +1,5 @@ SnapshotListItem in mithril_client - Rust
    pub struct SnapshotListItem {
    -    pub epoch: Epoch,
    +    pub epoch: Epoch,
         pub immutable_file_number: u64,
         pub network: String,
         pub digest: String,
    @@ -8,7 +8,7 @@
         pub created_at: DateTime<Utc>,
     }
    Expand description

    SnapshotListItem represents a snapshot list item from an aggregator for the purpose of tabular display

    -

    Fields§

    §epoch: Epoch

    Cardano epoch

    +

    Fields§

    §epoch: Epoch

    Cardano epoch

    §immutable_file_number: u64

    Cardano immutable file number

    §network: String

    Cardano Network name

    §digest: String

    Digest that is signed by the signer participants

    @@ -16,7 +16,7 @@
    §total_locations: u16

    Number of locations where the binary content of the snapshot can be retrieved

    §created_at: DateTime<Utc>

    Date and time at which the snapshot was created

    Implementations§

    source§

    impl SnapshotListItem

    source

    pub fn new( - epoch: Epoch, + epoch: Epoch, immutable_file_number: u64, network: String, digest: String, @@ -24,7 +24,7 @@ total_locations: u16, created_at: DateTime<Utc> ) -> SnapshotListItem

    SnapshotListItem factory

    -

    Trait Implementations§

    source§

    impl Clone for SnapshotListItem

    source§

    fn clone(&self) -> SnapshotListItem

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SnapshotListItem

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<SnapshotListItemMessage> for SnapshotListItem

    source§

    fn from(value: SnapshotListItemMessage) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq<SnapshotListItem> for SnapshotListItem

    source§

    fn eq(&self, other: &SnapshotListItem) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Clone for SnapshotListItem

    source§

    fn clone(&self) -> SnapshotListItem

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SnapshotListItem

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<SnapshotListItemMessage> for SnapshotListItem

    source§

    fn from(value: SnapshotListItemMessage) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq<SnapshotListItem> for SnapshotListItem

    source§

    fn eq(&self, other: &SnapshotListItem) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<SnapshotListItem> for SnapshotListItem

    source§

    fn partial_cmp(&self, other: &SnapshotListItem) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= diff --git a/rust-doc/mithril_client/utils/enum.SnapshotUnpackerError.html b/rust-doc/mithril_client/utils/enum.SnapshotUnpackerError.html index 923732e87e9..292dbce38d5 100644 --- a/rust-doc/mithril_client/utils/enum.SnapshotUnpackerError.html +++ b/rust-doc/mithril_client/utils/enum.SnapshotUnpackerError.html @@ -5,11 +5,11 @@ archive_size: f64, }, UnpackDirectoryAlreadyExists(PathBuf), - UnpackDirectoryIsNotWritable(PathBuf, StdError), + UnpackDirectoryIsNotWritable(PathBuf, StdError), UnpackFailed { filepath: PathBuf, dirpath: PathBuf, - error: StdError, + error: StdError, }, }
    Expand description

    Errors tied with the SnapshotUnpacker.

    Variants§

    §

    NotEnoughSpace

    Fields

    §left_space: f64

    Left space on device

    @@ -20,10 +20,10 @@
    §

    UnpackDirectoryAlreadyExists(PathBuf)

    The directory where the files from snapshot are expanded already exists. An error is raised because it lets the user a chance to preserve a previous work.

    -
    §

    UnpackDirectoryIsNotWritable(PathBuf, StdError)

    Cannot write in the given directory.

    +
    §

    UnpackDirectoryIsNotWritable(PathBuf, StdError)

    Cannot write in the given directory.

    §

    UnpackFailed

    Fields

    §filepath: PathBuf

    Location of the packed archive.

    §dirpath: PathBuf

    Location where the archive is to be extracted.

    -
    §error: StdError

    Subsystem error

    +
    §error: StdError

    Subsystem error

    Unpacking error

    Trait Implementations§

    source§

    impl Debug for SnapshotUnpackerError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for SnapshotUnpackerError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for SnapshotUnpackerError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_client/utils/struct.SnapshotUnpacker.html b/rust-doc/mithril_client/utils/struct.SnapshotUnpacker.html index 2cb40f0eec6..e33854faf8f 100644 --- a/rust-doc/mithril_client/utils/struct.SnapshotUnpacker.html +++ b/rust-doc/mithril_client/utils/struct.SnapshotUnpacker.html @@ -1,11 +1,11 @@ SnapshotUnpacker in mithril_client::utils - Rust
    pub struct SnapshotUnpacker;
    Expand description

    Check and unpack a downloaded archive in a given directory.

    -

    Implementations§

    source§

    impl SnapshotUnpacker

    source

    pub fn check_prerequisites(&self, pathdir: &Path, size: u64) -> StdResult<()>

    Check all prerequisites are met before starting to download and unpack +

    Implementations§

    source§

    impl SnapshotUnpacker

    source

    pub fn check_prerequisites(&self, pathdir: &Path, size: u64) -> StdResult<()>

    Check all prerequisites are met before starting to download and unpack big snapshot archive.

    source

    pub async fn unpack_snapshot( &self, filepath: &Path, unpack_dir: &Path -) -> StdResult<()>

    Unpack the snapshot pointed at the given filepath into the given directory.

    +) -> StdResult<()>

    Unpack the snapshot pointed at the given filepath into the given directory.

    Trait Implementations§

    source§

    impl Default for SnapshotUnpacker

    source§

    fn default() -> SnapshotUnpacker

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_signer/database/migration/fn.get_migrations.html b/rust-doc/mithril_signer/database/migration/fn.get_migrations.html index 815fd07e6a0..017ade22203 100644 --- a/rust-doc/mithril_signer/database/migration/fn.get_migrations.html +++ b/rust-doc/mithril_signer/database/migration/fn.get_migrations.html @@ -1,4 +1,4 @@ -get_migrations in mithril_signer::database::migration - Rust
    pub fn get_migrations() -> Vec<SqlMigration>
    Expand description

    Get all the migrations required by this version of the software. +get_migrations in mithril_signer::database::migration - Rust

    pub fn get_migrations() -> Vec<SqlMigration>
    Expand description

    Get all the migrations required by this version of the software. There shall be one migration per database version. There could be several statements per migration.

    \ No newline at end of file diff --git a/rust-doc/mithril_signer/enum.RunnerError.html b/rust-doc/mithril_signer/enum.RunnerError.html index 0d28c072a2d..4ed0a5d7fbe 100644 --- a/rust-doc/mithril_signer/enum.RunnerError.html +++ b/rust-doc/mithril_signer/enum.RunnerError.html @@ -1,14 +1,14 @@ RunnerError in mithril_signer - Rust
    pub enum RunnerError {
         NoValueError(String),
         NoStakeForSelf(),
    -    NoStakeForSigner(PartyId),
    +    NoStakeForSigner(PartyId),
         FileParse(String),
     }
    Expand description

    This type represents the errors thrown from the Runner.

    Variants§

    §

    NoValueError(String)

    Value was expected from a subsystem but None was returned.

    §

    NoStakeForSelf()

    Could not associate my node with a stake.

    -
    §

    NoStakeForSigner(PartyId)

    Could not find the stake for one of the signers.

    +
    §

    NoStakeForSigner(PartyId)

    Could not find the stake for one of the signers.

    §

    FileParse(String)

    Parse file error

    -

    Trait Implementations§

    source§

    impl Clone for RunnerError

    source§

    fn clone(&self) -> RunnerError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for RunnerError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for RunnerError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for RunnerError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<RunnerError> for RuntimeError

    source§

    fn from(value: RunnerError) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq<RunnerError> for RunnerError

    source§

    fn eq(&self, other: &RunnerError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Clone for RunnerError

    source§

    fn clone(&self) -> RunnerError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for RunnerError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for RunnerError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for RunnerError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<RunnerError> for RuntimeError

    source§

    fn from(value: RunnerError) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq<RunnerError> for RunnerError

    source§

    fn eq(&self, other: &RunnerError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for RunnerError

    source§

    impl StructuralEq for RunnerError

    source§

    impl StructuralPartialEq for RunnerError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_signer/enum.RuntimeError.html b/rust-doc/mithril_signer/enum.RuntimeError.html index 3df9407c3a4..cf23b764d75 100644 --- a/rust-doc/mithril_signer/enum.RuntimeError.html +++ b/rust-doc/mithril_signer/enum.RuntimeError.html @@ -18,7 +18,7 @@

    Critical error means the runtime will exit and the software will return an error code.

    Implementations§

    source§

    impl RuntimeError

    source

    pub fn is_critical(&self) -> bool

    Easy matching Critical errors.

    -

    Trait Implementations§

    source§

    impl Debug for RuntimeError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for RuntimeError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for RuntimeError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<EpochError> for RuntimeError

    source§

    fn from(value: EpochError) -> Self

    Converts to this type from the input type.
    source§

    impl From<RunnerError> for RuntimeError

    source§

    fn from(value: RunnerError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Debug for RuntimeError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for RuntimeError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for RuntimeError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<EpochError> for RuntimeError

    source§

    fn from(value: EpochError) -> Self

    Converts to this type from the input type.
    source§

    impl From<RunnerError> for RuntimeError

    source§

    fn from(value: RunnerError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_signer/enum.SignerState.html b/rust-doc/mithril_signer/enum.SignerState.html index c554e8888fa..70a42c6fb9d 100644 --- a/rust-doc/mithril_signer/enum.SignerState.html +++ b/rust-doc/mithril_signer/enum.SignerState.html @@ -1,25 +1,25 @@ SignerState in mithril_signer - Rust
    pub enum SignerState {
         Init,
         Unregistered {
    -        epoch: Epoch,
    +        epoch: Epoch,
         },
         Registered {
    -        epoch: Epoch,
    +        epoch: Epoch,
         },
         Signed {
    -        epoch: Epoch,
    -        signed_entity_type: SignedEntityType,
    +        epoch: Epoch,
    +        signed_entity_type: SignedEntityType,
         },
     }
    Expand description

    Different possible states of the state machine.

    Variants§

    §

    Init

    Starting state

    -
    §

    Unregistered

    Fields

    §epoch: Epoch

    Current Epoch

    +
    §

    Unregistered

    Fields

    §epoch: Epoch

    Current Epoch

    Hold the latest known epoch in order to help synchronisation with the aggregator

    -
    §

    Registered

    Fields

    §epoch: Epoch

    Epoch when Signer may sign.

    +
    §

    Registered

    Fields

    §epoch: Epoch

    Epoch when Signer may sign.

    Registered state. The Signer has successfuly registered against the Aggregator for this Epoch, it is now able to sign.

    -
    §

    Signed

    Fields

    §epoch: Epoch

    Epoch when Signer signed.

    -
    §signed_entity_type: SignedEntityType

    Entity type that is signed

    +
    §

    Signed

    Fields

    §epoch: Epoch

    Epoch when Signer signed.

    +
    §signed_entity_type: SignedEntityType

    Entity type that is signed

    Signed state. The Signer has signed the message for the current pending certificate.

    Implementations§

    source§

    impl SignerState

    source

    pub fn is_init(&self) -> bool

    Returns true if the state in Init

    diff --git a/rust-doc/mithril_signer/enum.SingleSignerError.html b/rust-doc/mithril_signer/enum.SingleSignerError.html index 4678eabd310..102751ad24f 100644 --- a/rust-doc/mithril_signer/enum.SingleSignerError.html +++ b/rust-doc/mithril_signer/enum.SingleSignerError.html @@ -1,14 +1,14 @@ SingleSignerError in mithril_signer - Rust
    pub enum SingleSignerError {
         ProtocolSignerCreationFailure(String),
         Codec(String),
    -    SignatureFailed(StdError),
    -    AggregateVerificationKeyComputationFailed(StdError),
    +    SignatureFailed(StdError),
    +    AggregateVerificationKeyComputationFailed(StdError),
     }
    Expand description

    SingleSigner error structure.

    Variants§

    §

    ProtocolSignerCreationFailure(String)

    Cryptographic Signer creation error.

    §

    Codec(String)

    Encoding / Decoding error.

    -
    §

    SignatureFailed(StdError)

    Signature Error

    -
    §

    AggregateVerificationKeyComputationFailed(StdError)

    Avk computation Error

    -

    Trait Implementations§

    source§

    impl Debug for SingleSignerError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for SingleSignerError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for SingleSignerError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    §

    SignatureFailed(StdError)

    Signature Error

    +
    §

    AggregateVerificationKeyComputationFailed(StdError)

    Avk computation Error

    +

    Trait Implementations§

    source§

    impl Debug for SingleSignerError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for SingleSignerError

    source§

    fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for SingleSignerError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, demand: &mut Demand<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_signer/index.html b/rust-doc/mithril_signer/index.html index 8fcea1519a4..7e54f24977a 100644 --- a/rust-doc/mithril_signer/index.html +++ b/rust-doc/mithril_signer/index.html @@ -1,11 +1,11 @@ -mithril_signer - Rust

    Crate mithril_signer

    source ·
    Expand description

    Mithril Signer crate documentation

    +mithril_signer - Rust

    Crate mithril_signer

    source ·
    Expand description

    Mithril Signer crate documentation

    This crate is used by Cardano nodes to participate to Mithril signatures. It proposes tools to communicate with Mithril aggregators and to issue Single Signatures. See the Mithril documentation for more information on how it works.

    Modules

    • database module. This module contains the entities definition tied with database -representation with their associated providers.

    Structs

    Enums

    Structs

    Enums

    Traits

    • Trait for mocking and testing a AggregatorClient
    • Store the ProtocolInitializer used for each Epoch. This is useful because protocol parameters and stake distribution change over time.
    • This trait is mainly intended for mocking.
    • The ServiceBuilder is intended to manage Services instance creation. The goal of this is to put all this code out of the way of business code.
    • The SingleSigner is the structure responsible of issuing SingleSignatures.
    \ No newline at end of file diff --git a/rust-doc/mithril_signer/struct.AggregatorHTTPClient.html b/rust-doc/mithril_signer/struct.AggregatorHTTPClient.html index fea7f34a35b..3b452b1af58 100644 --- a/rust-doc/mithril_signer/struct.AggregatorHTTPClient.html +++ b/rust-doc/mithril_signer/struct.AggregatorHTTPClient.html @@ -2,7 +2,7 @@

    Implementations§

    source§

    impl AggregatorHTTPClient

    source

    pub fn new( aggregator_endpoint: String, relay_endpoint: Option<String>, - api_version_provider: Arc<APIVersionProvider> + api_version_provider: Arc<APIVersionProvider> ) -> Self

    AggregatorHTTPClient factory

    source

    pub fn prepare_request_builder( &self, @@ -10,23 +10,23 @@ ) -> RequestBuilder

    Forge a client request adding protocol version in the headers.

    Trait Implementations§

    source§

    impl AggregatorClient for AggregatorHTTPClient

    source§

    fn retrieve_epoch_settings<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<EpochSettings>, AggregatorClientError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<EpochSettings>, AggregatorClientError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Retrieves epoch settings from the aggregator
    source§

    fn retrieve_pending_certificate<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, AggregatorClientError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, AggregatorClientError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Retrieves a pending certificate from the aggregator
    source§

    fn register_signer<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: Epoch, - signer: &'life1 Signer + epoch: Epoch, + signer: &'life1 Signer ) -> Pin<Box<dyn Future<Output = Result<(), AggregatorClientError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Registers signer with the aggregator.
    source§

    fn register_signatures<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - signatures: &'life2 SingleSignatures + signed_entity_type: &'life1 SignedEntityType, + signatures: &'life2 SingleSignatures ) -> Pin<Box<dyn Future<Output = Result<(), AggregatorClientError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, diff --git a/rust-doc/mithril_signer/struct.Configuration.html b/rust-doc/mithril_signer/struct.Configuration.html index 58db1a65033..0c901183934 100644 --- a/rust-doc/mithril_signer/struct.Configuration.html +++ b/rust-doc/mithril_signer/struct.Configuration.html @@ -5,7 +5,7 @@ pub network: String, pub aggregator_endpoint: String, pub relay_endpoint: Option<String>, - pub party_id: Option<PartyId>, + pub party_id: Option<PartyId>, pub run_interval: u64, pub db_directory: PathBuf, pub data_stores_directory: PathBuf, @@ -14,7 +14,7 @@ pub operational_certificate_path: Option<PathBuf>, pub disable_digests_cache: bool, pub reset_digests_cache: bool, - pub era_reader_adapter_type: EraReaderAdapterType, + pub era_reader_adapter_type: EraReaderAdapterType, pub era_reader_adapter_params: Option<String>,

    }
    Expand description

    Client configuration

    Fields§

    §cardano_cli_path: PathBuf

    Cardano CLI tool path

    @@ -25,7 +25,7 @@
    §network: String

    Cardano network

    §aggregator_endpoint: String

    Aggregator endpoint

    §relay_endpoint: Option<String>

    Relay endpoint

    -
    §party_id: Option<PartyId>

    Party Id

    +
    §party_id: Option<PartyId>

    Party Id

    §run_interval: u64

    Run Interval

    §db_directory: PathBuf

    Directory to snapshot

    §data_stores_directory: PathBuf

    Directory to store signer data (Stakes, Protocol initializers, …)

    @@ -35,15 +35,15 @@
    §disable_digests_cache: bool

    Disable immutables digests cache.

    §reset_digests_cache: bool

    If set the existing immutables digests cache will be reset.

    Will be ignored if set in conjunction with disable_digests_cache.

    -
    §era_reader_adapter_type: EraReaderAdapterType

    Era reader adapter type

    +
    §era_reader_adapter_type: EraReaderAdapterType

    Era reader adapter type

    §era_reader_adapter_params: Option<String>

    Era reader adapter parameters

    -

    Implementations§

    source§

    impl Configuration

    source

    pub fn get_network(&self) -> Result<CardanoNetwork, ConfigError>

    Return the CardanoNetwork value from the configuration.

    +

    Implementations§

    source§

    impl Configuration

    source

    pub fn get_network(&self) -> Result<CardanoNetwork, ConfigError>

    Return the CardanoNetwork value from the configuration.

    source

    pub fn get_sqlite_file(&self) -> PathBuf

    Create the SQL store directory if not exist and return the path of the SQLite3 file.

    source

    pub fn build_era_reader_adapter( &self, - chain_observer: Arc<dyn ChainObserver> -) -> Result<Arc<dyn EraReaderAdapter>, StdError>

    Create era reader adapter from configuration settings.

    + chain_observer: Arc<dyn ChainObserver> +) -> Result<Arc<dyn EraReaderAdapter>, StdError>

    Create era reader adapter from configuration settings.

    Trait Implementations§

    source§

    impl Clone for Configuration

    source§

    fn clone(&self) -> Configuration

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Configuration

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for Configuration

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Serialize for Configuration

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

    Serialize this value into the given Serde serializer. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_signer/struct.FromEpochSettingsAdapter.html b/rust-doc/mithril_signer/struct.FromEpochSettingsAdapter.html index b2cc648f785..fa585a93a78 100644 --- a/rust-doc/mithril_signer/struct.FromEpochSettingsAdapter.html +++ b/rust-doc/mithril_signer/struct.FromEpochSettingsAdapter.html @@ -1,5 +1,5 @@ -FromEpochSettingsAdapter in mithril_signer - Rust
    pub struct FromEpochSettingsAdapter;
    Expand description

    Adapter to convert EpochSettingsMessage to EpochSettings.

    -

    Trait Implementations§

    source§

    impl FromMessageAdapter<EpochSettingsMessage, EpochSettings> for FromEpochSettingsAdapter

    source§

    fn adapt(message: EpochSettingsMessage) -> EpochSettings

    Method to convert.

    +FromEpochSettingsAdapter in mithril_signer - Rust
    pub struct FromEpochSettingsAdapter;
    Expand description

    Adapter to convert [EpochSettingsMessage] to [EpochSettings].

    +

    Trait Implementations§

    source§

    impl FromMessageAdapter<EpochSettingsMessage, EpochSettings> for FromEpochSettingsAdapter

    source§

    fn adapt(message: EpochSettingsMessage) -> EpochSettings

    Method to convert.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_signer/struct.FromPendingCertificateMessageAdapter.html b/rust-doc/mithril_signer/struct.FromPendingCertificateMessageAdapter.html index b27bcb07860..9db663e678e 100644 --- a/rust-doc/mithril_signer/struct.FromPendingCertificateMessageAdapter.html +++ b/rust-doc/mithril_signer/struct.FromPendingCertificateMessageAdapter.html @@ -1,7 +1,7 @@ -FromPendingCertificateMessageAdapter in mithril_signer - Rust
    pub struct FromPendingCertificateMessageAdapter;
    Expand description

    Adapter to turn CertificatePendingMessage instances into CertificatePending.

    -

    Trait Implementations§

    source§

    impl TryFromMessageAdapter<CertificatePendingMessage, CertificatePending> for FromPendingCertificateMessageAdapter

    source§

    fn try_adapt( - message: CertificatePendingMessage -) -> StdResult<CertificatePending>

    Adapter method

    +FromPendingCertificateMessageAdapter in mithril_signer - Rust
    pub struct FromPendingCertificateMessageAdapter;
    Expand description

    Adapter to turn [CertificatePendingMessage] instances into [CertificatePending].

    +

    Trait Implementations§

    source§

    impl TryFromMessageAdapter<CertificatePendingMessage, CertificatePending> for FromPendingCertificateMessageAdapter

    source§

    fn try_adapt( + message: CertificatePendingMessage +) -> StdResult<CertificatePending>

    Adapter method

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_signer/struct.MithrilProtocolInitializerBuilder.html b/rust-doc/mithril_signer/struct.MithrilProtocolInitializerBuilder.html index 0ae6e1fbe65..b0478d433a7 100644 --- a/rust-doc/mithril_signer/struct.MithrilProtocolInitializerBuilder.html +++ b/rust-doc/mithril_signer/struct.MithrilProtocolInitializerBuilder.html @@ -1,10 +1,10 @@ MithrilProtocolInitializerBuilder in mithril_signer - Rust
    pub struct MithrilProtocolInitializerBuilder {}
    Expand description

    This is responsible of creating new instances of ProtocolInitializer.

    Implementations§

    source§

    impl MithrilProtocolInitializerBuilder

    source

    pub fn build( - stake: &Stake, - protocol_parameters: &ProtocolParameters, + stake: &Stake, + protocol_parameters: &ProtocolParameters, kes_secret_key_path: Option<PathBuf>, - kes_period: Option<KESPeriod> -) -> Result<ProtocolInitializer, ProtocolInitializerError>

    Create a ProtocolInitializer instance.

    + kes_period: Option<KESPeriod> +) -> Result<ProtocolInitializer, ProtocolInitializerError>

    Create a ProtocolInitializer instance.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_signer/struct.MithrilSingleSigner.html b/rust-doc/mithril_signer/struct.MithrilSingleSigner.html index e72624e9f3b..a9a5e1e04e4 100644 --- a/rust-doc/mithril_signer/struct.MithrilSingleSigner.html +++ b/rust-doc/mithril_signer/struct.MithrilSingleSigner.html @@ -1,17 +1,17 @@ MithrilSingleSigner in mithril_signer - Rust
    pub struct MithrilSingleSigner { /* private fields */ }
    Expand description

    Implementation of the SingleSigner.

    -

    Implementations§

    source§

    impl MithrilSingleSigner

    source

    pub fn new(party_id: PartyId) -> Self

    Create a new instance of the MithrilSingleSigner.

    +

    Implementations§

    source§

    impl MithrilSingleSigner

    source

    pub fn new(party_id: PartyId) -> Self

    Create a new instance of the MithrilSingleSigner.

    Trait Implementations§

    source§

    impl SingleSigner for MithrilSingleSigner

    source§

    fn compute_aggregate_verification_key( &self, - signers_with_stake: &[SignerWithStake], - protocol_initializer: &ProtocolInitializer + signers_with_stake: &[SignerWithStake], + protocol_initializer: &ProtocolInitializer ) -> Result<Option<String>, SingleSignerError>

    Compute aggregate verification key from stake distribution

    -
    source§

    fn get_party_id(&self) -> PartyId

    Get party id

    +
    source§

    fn get_party_id(&self) -> PartyId

    Get party id

    source§

    fn compute_single_signatures( &self, - protocol_message: &ProtocolMessage, - signers_with_stake: &[SignerWithStake], - protocol_initializer: &ProtocolInitializer -) -> Result<Option<SingleSignatures>, SingleSignerError>

    Computes single signatures

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + protocol_message: &ProtocolMessage, + signers_with_stake: &[SignerWithStake], + protocol_initializer: &ProtocolInitializer +) -> Result<Option<SingleSignatures>, SingleSignerError>

    Computes single signatures

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere T: Any + Send + Sync,

    §

    fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

    source§

    impl<T> Az for T

    source§

    fn az<Dst>(self) -> Dstwhere diff --git a/rust-doc/mithril_signer/struct.ProductionServiceBuilder.html b/rust-doc/mithril_signer/struct.ProductionServiceBuilder.html index 51f10ca9f35..62dd06ff416 100644 --- a/rust-doc/mithril_signer/struct.ProductionServiceBuilder.html +++ b/rust-doc/mithril_signer/struct.ProductionServiceBuilder.html @@ -2,15 +2,15 @@

    Implementations§

    source§

    impl<'a> ProductionServiceBuilder<'a>

    source

    pub fn new(config: &'a Configuration) -> Self

    Create a new production service builder.

    source

    pub fn override_immutable_file_observer_builder( &mut self, - builder: fn(_: &Configuration) -> StdResult<Arc<dyn ImmutableFileObserver>> + builder: fn(_: &Configuration) -> StdResult<Arc<dyn ImmutableFileObserver>> ) -> &mut Self

    Override immutable file observer builder.

    source

    pub fn override_chain_observer_builder( &mut self, - builder: fn(_: &Configuration) -> StdResult<Arc<dyn ChainObserver>> + builder: fn(_: &Configuration) -> StdResult<Arc<dyn ChainObserver>> ) -> &mut Self

    Override default chain observer builder.

    Trait Implementations§

    source§

    impl<'a> ServiceBuilder for ProductionServiceBuilder<'a>

    source§

    fn build<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = StdResult<SignerServices>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<SignerServices>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Build a Services for the Production environment.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_signer/struct.ProtocolInitializerStore.html b/rust-doc/mithril_signer/struct.ProtocolInitializerStore.html index bcae1ad5795..1ae436e622c 100644 --- a/rust-doc/mithril_signer/struct.ProtocolInitializerStore.html +++ b/rust-doc/mithril_signer/struct.ProtocolInitializerStore.html @@ -1,29 +1,29 @@ ProtocolInitializerStore in mithril_signer - Rust
    pub struct ProtocolInitializerStore { /* private fields */ }
    Expand description

    Implementation of the ProtocolInitializerStorer

    Implementations§

    source§

    impl ProtocolInitializerStore

    source

    pub fn new( - adapter: Box<dyn StoreAdapter<Key = Epoch, Record = ProtocolInitializer>>, + adapter: Box<dyn StoreAdapter<Key = Epoch, Record = ProtocolInitializer>>, retention_limit: Option<usize> ) -> Self

    Create a new ProtocolInitializerStore.

    Trait Implementations§

    source§

    impl ProtocolInitializerStorer for ProtocolInitializerStore

    source§

    fn save_protocol_initializer<'life0, 'async_trait>( &'life0 self, - epoch: Epoch, - protocol_initializer: ProtocolInitializer -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolInitializer>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch, + protocol_initializer: ProtocolInitializer +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolInitializer>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Save a protocol initializer for the given Epoch.
    source§

    fn get_protocol_initializer<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolInitializer>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolInitializer>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Fetch a protocol initializer if any saved for the given Epoch.
    source§

    fn get_last_protocol_initializer<'life0, 'async_trait>( &'life0 self, last: usize -) -> Pin<Box<dyn Future<Output = Result<Vec<(Epoch, ProtocolInitializer)>, StoreError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Vec<(Epoch, ProtocolInitializer)>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

    Return the list of the N last saved protocol initializers if any.
    source§

    impl StorePruner for ProtocolInitializerStore

    §

    type Key = Epoch

    The key type
    §

    type Record = StmInitializerWrapper

    The record type
    source§

    fn get_adapter( + 'life0: 'async_trait,

    Return the list of the N last saved protocol initializers if any.
    source§

    impl StorePruner for ProtocolInitializerStore

    §

    type Key = Epoch

    The key type
    §

    type Record = StmInitializerWrapper

    The record type
    source§

    fn get_adapter( &self -) -> &RwLock<Box<dyn StoreAdapter<Key = Self::Key, Record = Self::Record>>>

    This trait requires a way to get the internal adapter.
    source§

    fn get_max_records(&self) -> Option<usize>

    Return the maximum number of elements that can exist in this store. If None, there is no limit.
    source§

    fn prune<'life0, 'async_trait>( +) -> &RwLock<Box<dyn StoreAdapter<Key = Self::Key, Record = Self::Record>>>

    This trait requires a way to get the internal adapter.
    source§

    fn get_max_records(&self) -> Option<usize>

    Return the maximum number of elements that can exist in this store. If None, there is no limit.
    §

    fn prune<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait, Global>>where +) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait, Global>>where 'life0: 'async_trait, Self: Sync + 'async_trait,

    Prune elements exceeding the specified limit.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_signer/struct.SignerRunner.html b/rust-doc/mithril_signer/struct.SignerRunner.html index 2be5371a1a5..626512087cf 100644 --- a/rust-doc/mithril_signer/struct.SignerRunner.html +++ b/rust-doc/mithril_signer/struct.SignerRunner.html @@ -2,69 +2,69 @@

    Implementations§

    source§

    impl SignerRunner

    source

    pub fn new(config: Configuration, services: SignerServices) -> Self

    Create a new Runner instance.

    Trait Implementations§

    source§

    impl Runner for SignerRunner

    source§

    fn get_epoch_settings<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<EpochSettings>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<EpochSettings>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Fetch the current epoch settings if any.
    source§

    fn get_pending_certificate<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Fetch the current pending certificate if any.
    source§

    fn get_current_beacon<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Beacon, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Beacon, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Fetch the current beacon from the Cardano node.
    source§

    fn register_signer_to_aggregator<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: Epoch, - protocol_parameters: &'life1 ProtocolParameters + epoch: Epoch, + protocol_parameters: &'life1 ProtocolParameters ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Register the signer verification key to the aggregator.
    source§

    fn update_stake_distribution<'life0, 'async_trait>( &'life0 self, - epoch: Epoch + epoch: Epoch ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Read the stake distribution and store it.
    source§

    fn can_i_sign<'life0, 'life1, 'async_trait>( &'life0 self, - pending_certificate: &'life1 CertificatePending + pending_certificate: &'life1 CertificatePending ) -> Pin<Box<dyn Future<Output = Result<bool, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Check if all prerequisites for signing are met.
    source§

    fn associate_signers_with_stake<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: Epoch, - signers: &'life1 [Signer] -) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where + epoch: Epoch, + signers: &'life1 [Signer] +) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    From a list of signers, associate them with the stake read on the Cardano node.
    source§

    fn compute_message<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - next_signers: &'life2 [SignerWithStake] -) -> Pin<Box<dyn Future<Output = Result<ProtocolMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType, + next_signers: &'life2 [SignerWithStake] +) -> Pin<Box<dyn Future<Output = Result<ProtocolMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

    Create the message to be signed with the single signature.
    source§

    fn compute_single_signature<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - epoch: Epoch, - message: &'life1 ProtocolMessage, - signers: &'life2 [SignerWithStake] -) -> Pin<Box<dyn Future<Output = Result<Option<SingleSignatures>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where + epoch: Epoch, + message: &'life1 ProtocolMessage, + signers: &'life2 [SignerWithStake] +) -> Pin<Box<dyn Future<Output = Result<Option<SingleSignatures>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

    Create the single signature.
    source§

    fn send_single_signature<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - maybe_signature: Option<SingleSignatures> + signed_entity_type: &'life1 SignedEntityType, + maybe_signature: Option<SingleSignatures> ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Send the single signature to the aggregator in order to be aggregated.
    source§

    fn update_era_checker<'life0, 'async_trait>( &'life0 self, - epoch: Epoch + epoch: Epoch ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Read the current era and update the EraChecker.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere diff --git a/rust-doc/mithril_signer/struct.SignerServices.html b/rust-doc/mithril_signer/struct.SignerServices.html index db06e8488a4..f77f8ec2352 100644 --- a/rust-doc/mithril_signer/struct.SignerServices.html +++ b/rust-doc/mithril_signer/struct.SignerServices.html @@ -1,27 +1,27 @@ SignerServices in mithril_signer - Rust
    pub struct SignerServices {
    -    pub beacon_provider: Arc<dyn BeaconProvider>,
    -    pub stake_store: Arc<StakeStore>,
    +    pub beacon_provider: Arc<dyn BeaconProvider>,
    +    pub stake_store: Arc<StakeStore>,
         pub certificate_handler: Arc<dyn AggregatorClient>,
    -    pub chain_observer: Arc<dyn ChainObserver>,
    -    pub digester: Arc<dyn ImmutableDigester>,
    +    pub chain_observer: Arc<dyn ChainObserver>,
    +    pub digester: Arc<dyn ImmutableDigester>,
         pub single_signer: Arc<dyn SingleSigner>,
         pub protocol_initializer_store: Arc<dyn ProtocolInitializerStorer>,
    -    pub era_checker: Arc<EraChecker>,
    -    pub era_reader: Arc<EraReader>,
    -    pub api_version_provider: Arc<APIVersionProvider>,
    -    pub signable_builder_service: Arc<dyn SignableBuilderService>,
    +    pub era_checker: Arc<EraChecker>,
    +    pub era_reader: Arc<EraReader>,
    +    pub api_version_provider: Arc<APIVersionProvider>,
    +    pub signable_builder_service: Arc<dyn SignableBuilderService>,
     }
    Expand description

    This structure groups all the services required by the state machine.

    -

    Fields§

    §beacon_provider: Arc<dyn BeaconProvider>

    Beacon provider service

    -
    §stake_store: Arc<StakeStore>

    Stake store service

    +

    Fields§

    §beacon_provider: Arc<dyn BeaconProvider>

    Beacon provider service

    +
    §stake_store: Arc<StakeStore>

    Stake store service

    §certificate_handler: Arc<dyn AggregatorClient>

    Certificate handler service

    -
    §chain_observer: Arc<dyn ChainObserver>

    Chain Observer service

    -
    §digester: Arc<dyn ImmutableDigester>

    Digester service

    +
    §chain_observer: Arc<dyn ChainObserver>

    Chain Observer service

    +
    §digester: Arc<dyn ImmutableDigester>

    Digester service

    §single_signer: Arc<dyn SingleSigner>

    SingleSigner service

    §protocol_initializer_store: Arc<dyn ProtocolInitializerStorer>

    ProtocolInitializer store

    -
    §era_checker: Arc<EraChecker>

    Era checker service

    -
    §era_reader: Arc<EraReader>

    Era reader service

    -
    §api_version_provider: Arc<APIVersionProvider>

    API version provider

    -
    §signable_builder_service: Arc<dyn SignableBuilderService>

    Signable Builder Service

    +
    §era_checker: Arc<EraChecker>

    Era checker service

    +
    §era_reader: Arc<EraReader>

    Era reader service

    +
    §api_version_provider: Arc<APIVersionProvider>

    API version provider

    +
    §signable_builder_service: Arc<dyn SignableBuilderService>

    Signable Builder Service

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_signer/struct.ToRegisterSignerMessageAdapter.html b/rust-doc/mithril_signer/struct.ToRegisterSignerMessageAdapter.html index 491f62665a0..b30d1b6171e 100644 --- a/rust-doc/mithril_signer/struct.ToRegisterSignerMessageAdapter.html +++ b/rust-doc/mithril_signer/struct.ToRegisterSignerMessageAdapter.html @@ -1,5 +1,5 @@ -ToRegisterSignerMessageAdapter in mithril_signer - Rust
    pub struct ToRegisterSignerMessageAdapter;
    Expand description

    Adapter to create RegisterSignerMessage from Signer instance.

    -

    Trait Implementations§

    source§

    impl ToMessageAdapter<(Epoch, Signer), RegisterSignerMessage> for ToRegisterSignerMessageAdapter

    source§

    fn adapt((epoch, signer): (Epoch, Signer)) -> RegisterSignerMessage

    Method to trigger the conversion.

    +ToRegisterSignerMessageAdapter in mithril_signer - Rust
    pub struct ToRegisterSignerMessageAdapter;
    Expand description

    Adapter to create [RegisterSignerMessage] from [Signer] instance.

    +

    Trait Implementations§

    source§

    impl ToMessageAdapter<(Epoch, Signer), RegisterSignerMessage> for ToRegisterSignerMessageAdapter

    source§

    fn adapt((epoch, signer): (Epoch, Signer)) -> RegisterSignerMessage

    Method to trigger the conversion.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T> Any for Twhere T: Any,

    §

    fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

    §

    fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

    §

    fn type_name(&self) -> &'static str

    §

    impl<T> AnySync for Twhere diff --git a/rust-doc/mithril_signer/trait.AggregatorClient.html b/rust-doc/mithril_signer/trait.AggregatorClient.html index cbe8c76b717..d502e49f102 100644 --- a/rust-doc/mithril_signer/trait.AggregatorClient.html +++ b/rust-doc/mithril_signer/trait.AggregatorClient.html @@ -2,26 +2,26 @@ // Required methods fn retrieve_epoch_settings<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Option<EpochSettings>, AggregatorClientError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Option<EpochSettings>, AggregatorClientError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn retrieve_pending_certificate<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, AggregatorClientError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, AggregatorClientError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn register_signer<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: Epoch, - signer: &'life1 Signer + epoch: Epoch, + signer: &'life1 Signer ) -> Pin<Box<dyn Future<Output = Result<(), AggregatorClientError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn register_signatures<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - signatures: &'life2 SingleSignatures + signed_entity_type: &'life1 SignedEntityType, + signatures: &'life2 SingleSignatures ) -> Pin<Box<dyn Future<Output = Result<(), AggregatorClientError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, @@ -30,26 +30,26 @@ }
    Expand description

    Trait for mocking and testing a AggregatorClient

    Required Methods§

    source

    fn retrieve_epoch_settings<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<EpochSettings>, AggregatorClientError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<EpochSettings>, AggregatorClientError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Retrieves epoch settings from the aggregator

    source

    fn retrieve_pending_certificate<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, AggregatorClientError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, AggregatorClientError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Retrieves a pending certificate from the aggregator

    source

    fn register_signer<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: Epoch, - signer: &'life1 Signer + epoch: Epoch, + signer: &'life1 Signer ) -> Pin<Box<dyn Future<Output = Result<(), AggregatorClientError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Registers signer with the aggregator.

    source

    fn register_signatures<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - signatures: &'life2 SingleSignatures + signed_entity_type: &'life1 SignedEntityType, + signatures: &'life2 SingleSignatures ) -> Pin<Box<dyn Future<Output = Result<(), AggregatorClientError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, diff --git a/rust-doc/mithril_signer/trait.ProtocolInitializerStorer.html b/rust-doc/mithril_signer/trait.ProtocolInitializerStorer.html index 9fb822c9903..f72fadbab4c 100644 --- a/rust-doc/mithril_signer/trait.ProtocolInitializerStorer.html +++ b/rust-doc/mithril_signer/trait.ProtocolInitializerStorer.html @@ -2,42 +2,42 @@ // Required methods fn save_protocol_initializer<'life0, 'async_trait>( &'life0 self, - epoch: Epoch, - protocol_initializer: ProtocolInitializer - ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolInitializer>, StoreError>> + Send + 'async_trait>> + epoch: Epoch, + protocol_initializer: ProtocolInitializer + ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolInitializer>, StoreError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_protocol_initializer<'life0, 'async_trait>( &'life0 self, - epoch: Epoch - ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolInitializer>, StoreError>> + Send + 'async_trait>> + epoch: Epoch + ) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolInitializer>, StoreError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_last_protocol_initializer<'life0, 'async_trait>( &'life0 self, last: usize - ) -> Pin<Box<dyn Future<Output = Result<Vec<(Epoch, ProtocolInitializer)>, StoreError>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Vec<(Epoch, ProtocolInitializer)>, StoreError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; }
    Expand description

    Store the ProtocolInitializer used for each Epoch. This is useful because protocol parameters and stake distribution change over time.

    Required Methods§

    source

    fn save_protocol_initializer<'life0, 'async_trait>( &'life0 self, - epoch: Epoch, - protocol_initializer: ProtocolInitializer -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolInitializer>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch, + protocol_initializer: ProtocolInitializer +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolInitializer>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Save a protocol initializer for the given Epoch.

    source

    fn get_protocol_initializer<'life0, 'async_trait>( &'life0 self, - epoch: Epoch -) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolInitializer>, StoreError>> + Send + 'async_trait>>where + epoch: Epoch +) -> Pin<Box<dyn Future<Output = Result<Option<ProtocolInitializer>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Fetch a protocol initializer if any saved for the given Epoch.

    source

    fn get_last_protocol_initializer<'life0, 'async_trait>( &'life0 self, last: usize -) -> Pin<Box<dyn Future<Output = Result<Vec<(Epoch, ProtocolInitializer)>, StoreError>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Vec<(Epoch, ProtocolInitializer)>, StoreError>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Return the list of the N last saved protocol initializers if any.

    Implementors§

    \ No newline at end of file diff --git a/rust-doc/mithril_signer/trait.Runner.html b/rust-doc/mithril_signer/trait.Runner.html index 2f5b631ed76..8f3a0cc91e2 100644 --- a/rust-doc/mithril_signer/trait.Runner.html +++ b/rust-doc/mithril_signer/trait.Runner.html @@ -2,157 +2,157 @@ // Required methods fn get_epoch_settings<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Option<EpochSettings>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Option<EpochSettings>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_pending_certificate<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_current_beacon<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = Result<Beacon, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<Beacon, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn register_signer_to_aggregator<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: Epoch, - protocol_parameters: &'life1 ProtocolParameters + epoch: Epoch, + protocol_parameters: &'life1 ProtocolParameters ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn update_stake_distribution<'life0, 'async_trait>( &'life0 self, - epoch: Epoch + epoch: Epoch ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn can_i_sign<'life0, 'life1, 'async_trait>( &'life0 self, - pending_certificate: &'life1 CertificatePending + pending_certificate: &'life1 CertificatePending ) -> Pin<Box<dyn Future<Output = Result<bool, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn associate_signers_with_stake<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: Epoch, - signers: &'life1 [Signer] - ) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> + epoch: Epoch, + signers: &'life1 [Signer] + ) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn compute_message<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - next_signers: &'life2 [SignerWithStake] - ) -> Pin<Box<dyn Future<Output = Result<ProtocolMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> + signed_entity_type: &'life1 SignedEntityType, + next_signers: &'life2 [SignerWithStake] + ) -> Pin<Box<dyn Future<Output = Result<ProtocolMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn compute_single_signature<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - epoch: Epoch, - message: &'life1 ProtocolMessage, - signers: &'life2 [SignerWithStake] - ) -> Pin<Box<dyn Future<Output = Result<Option<SingleSignatures>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> + epoch: Epoch, + message: &'life1 ProtocolMessage, + signers: &'life2 [SignerWithStake] + ) -> Pin<Box<dyn Future<Output = Result<Option<SingleSignatures>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn send_single_signature<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - maybe_signature: Option<SingleSignatures> + signed_entity_type: &'life1 SignedEntityType, + maybe_signature: Option<SingleSignatures> ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn update_era_checker<'life0, 'async_trait>( &'life0 self, - epoch: Epoch + epoch: Epoch ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; }
    Expand description

    This trait is mainly intended for mocking.

    Required Methods§

    source

    fn get_epoch_settings<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<EpochSettings>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<EpochSettings>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Fetch the current epoch settings if any.

    source

    fn get_pending_certificate<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Option<CertificatePending>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Fetch the current pending certificate if any.

    source

    fn get_current_beacon<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = Result<Beacon, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = Result<Beacon, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Fetch the current beacon from the Cardano node.

    source

    fn register_signer_to_aggregator<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: Epoch, - protocol_parameters: &'life1 ProtocolParameters + epoch: Epoch, + protocol_parameters: &'life1 ProtocolParameters ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Register the signer verification key to the aggregator.

    source

    fn update_stake_distribution<'life0, 'async_trait>( &'life0 self, - epoch: Epoch + epoch: Epoch ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Read the stake distribution and store it.

    source

    fn can_i_sign<'life0, 'life1, 'async_trait>( &'life0 self, - pending_certificate: &'life1 CertificatePending + pending_certificate: &'life1 CertificatePending ) -> Pin<Box<dyn Future<Output = Result<bool, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Check if all prerequisites for signing are met.

    source

    fn associate_signers_with_stake<'life0, 'life1, 'async_trait>( &'life0 self, - epoch: Epoch, - signers: &'life1 [Signer] -) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where + epoch: Epoch, + signers: &'life1 [Signer] +) -> Pin<Box<dyn Future<Output = Result<Vec<SignerWithStake>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    From a list of signers, associate them with the stake read on the Cardano node.

    source

    fn compute_message<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - next_signers: &'life2 [SignerWithStake] -) -> Pin<Box<dyn Future<Output = Result<ProtocolMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where + signed_entity_type: &'life1 SignedEntityType, + next_signers: &'life2 [SignerWithStake] +) -> Pin<Box<dyn Future<Output = Result<ProtocolMessage, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

    Create the message to be signed with the single signature.

    source

    fn compute_single_signature<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, - epoch: Epoch, - message: &'life1 ProtocolMessage, - signers: &'life2 [SignerWithStake] -) -> Pin<Box<dyn Future<Output = Result<Option<SingleSignatures>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where + epoch: Epoch, + message: &'life1 ProtocolMessage, + signers: &'life2 [SignerWithStake] +) -> Pin<Box<dyn Future<Output = Result<Option<SingleSignatures>, Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

    Create the single signature.

    source

    fn send_single_signature<'life0, 'life1, 'async_trait>( &'life0 self, - signed_entity_type: &'life1 SignedEntityType, - maybe_signature: Option<SingleSignatures> + signed_entity_type: &'life1 SignedEntityType, + maybe_signature: Option<SingleSignatures> ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

    Send the single signature to the aggregator in order to be aggregated.

    source

    fn update_era_checker<'life0, 'async_trait>( &'life0 self, - epoch: Epoch + epoch: Epoch ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn StdError + Sync + Send>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Read the current era and update the EraChecker.

    diff --git a/rust-doc/mithril_signer/trait.ServiceBuilder.html b/rust-doc/mithril_signer/trait.ServiceBuilder.html index 09d84c6f510..32a9b1330b6 100644 --- a/rust-doc/mithril_signer/trait.ServiceBuilder.html +++ b/rust-doc/mithril_signer/trait.ServiceBuilder.html @@ -2,14 +2,14 @@ // Required method fn build<'life0, 'async_trait>( &'life0 self - ) -> Pin<Box<dyn Future<Output = StdResult<SignerServices>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = StdResult<SignerServices>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; }
    Expand description

    The ServiceBuilder is intended to manage Services instance creation. The goal of this is to put all this code out of the way of business code.

    Required Methods§

    source

    fn build<'life0, 'async_trait>( &'life0 self -) -> Pin<Box<dyn Future<Output = StdResult<SignerServices>> + Send + 'async_trait>>where +) -> Pin<Box<dyn Future<Output = StdResult<SignerServices>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

    Create a SignerService instance.

    Implementors§

    \ No newline at end of file diff --git a/rust-doc/mithril_signer/trait.SingleSigner.html b/rust-doc/mithril_signer/trait.SingleSigner.html index a1067c072ca..860340270a0 100644 --- a/rust-doc/mithril_signer/trait.SingleSigner.html +++ b/rust-doc/mithril_signer/trait.SingleSigner.html @@ -2,27 +2,27 @@ // Required methods fn compute_single_signatures( &self, - protocol_message: &ProtocolMessage, - signers_with_stake: &[SignerWithStake], - protocol_initializer: &ProtocolInitializer - ) -> Result<Option<SingleSignatures>, SingleSignerError>; + protocol_message: &ProtocolMessage, + signers_with_stake: &[SignerWithStake], + protocol_initializer: &ProtocolInitializer + ) -> Result<Option<SingleSignatures>, SingleSignerError>; fn compute_aggregate_verification_key( &self, - signers_with_stake: &[SignerWithStake], - protocol_initializer: &ProtocolInitializer + signers_with_stake: &[SignerWithStake], + protocol_initializer: &ProtocolInitializer ) -> Result<Option<String>, SingleSignerError>; - fn get_party_id(&self) -> PartyId; + fn get_party_id(&self) -> PartyId; }
    Expand description

    The SingleSigner is the structure responsible of issuing SingleSignatures.

    Required Methods§

    source

    fn compute_single_signatures( &self, - protocol_message: &ProtocolMessage, - signers_with_stake: &[SignerWithStake], - protocol_initializer: &ProtocolInitializer -) -> Result<Option<SingleSignatures>, SingleSignerError>

    Computes single signatures

    + protocol_message: &ProtocolMessage, + signers_with_stake: &[SignerWithStake], + protocol_initializer: &ProtocolInitializer +) -> Result<Option<SingleSignatures>, SingleSignerError>

    Computes single signatures

    source

    fn compute_aggregate_verification_key( &self, - signers_with_stake: &[SignerWithStake], - protocol_initializer: &ProtocolInitializer + signers_with_stake: &[SignerWithStake], + protocol_initializer: &ProtocolInitializer ) -> Result<Option<String>, SingleSignerError>

    Compute aggregate verification key from stake distribution

    -
    source

    fn get_party_id(&self) -> PartyId

    Get party id

    +
    source

    fn get_party_id(&self) -> PartyId

    Get party id

    Implementors§

    \ No newline at end of file diff --git a/rust-doc/search-index.js b/rust-doc/search-index.js index 055dcc235a3..12ca1f6a22b 100644 --- a/rust-doc/search-index.js +++ b/rust-doc/search-index.js @@ -1,8 +1,8 @@ var searchIndex = JSON.parse('{\ -"mithril_aggregator":{"doc":"Mithril aggregator The Aggregator is responsible for:","t":"DDIDINDNNNDNNNDCDDENNNNNNDNNDNNDDDIDNEDINNNDEIIEDIEIEINNNDDNNNNNNDILLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLLLLMLKLKLLKLLLMKLKLKLKLKLLLLMAMMMMLLLALLLMMKLAMMMLLLLLLLLLLLLLLLMMMLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLKLKLKLKLKLLLLLKLKLKLKKLLLLLKLLKLLKLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLKLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLKLKKKLLMMLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLKLLLLMMMMAKLLMMMMMMLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLKLLLKLKLKKLLKLLLMKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMAAFDDDDDDDDDDDDDDDDDDDDDIDDDDDDDDDDDDDDDMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLKLKLKLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDEDNNNGGMMLLLMMLLLLLLLLLMLLLMMMMMMMMMMLLLLLLMMLLLLMMMMMMMMMMLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLMMMLLLLLLLMMLLLLLLLMMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLMMDLLLLLLLLMMLLLLLLLLLLLLLLMLLLLMLLMMLLLLLLLLLLDDDDDMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNIENNDDDDNNNIIENINLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLKLLLLLLLLLLLKLKLKLKLKLKLKLKLKLKLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLLLLLLLLLLLLLLLLLLLMMMM","n":["AggregatorConfig","AggregatorRunner","AggregatorRunnerTrait","AggregatorRuntime","ArtifactBuilder","Beacon","CertificatePendingStore","ChainObserver","Codec","Codec","Configuration","Core","CreateArchiveError","Critical","DefaultConfiguration","DependencyContainer","DumbSnapshotUploader","DumbSnapshotter","ExecutionEnvironment","ExistingSigner","ExistingSigner","ExistingSingleSignature","FailedSignerRecorder","FailedSignerRegistration","FailedSignerRegistration","FromRegisterSignerAdapter","Gcp","GeneralError","GzipSnapshotter","KeepState","Local","LocalSnapshotUploader","MainOpts","MithrilSignerRegisterer","MultiSigner","MultiSignerImpl","Production","ProtocolError","ProtocolParametersStore","ProtocolParametersStorer","ReInit","RegistrationRoundNotYetOpened","RegistrationRoundUnexpectedEpoch","RemoteSnapshotUploader","RuntimeError","SignerRecorder","SignerRegisterer","SignerRegistrationError","SignerRegistrationRound","SignerRegistrationRoundOpener","SnapshotError","SnapshotUploader","SnapshotUploaderType","Snapshotter","StoreError","StoreError","Test","ToCertificatePendingMessageAdapter","ToEpochSettingsMessageAdapter","UnavailableBeacon","UnavailableClerk","UnavailableMessage","UnavailableProtocolParameters","UnregisteredParty","UploadFileError","VerificationKeyStore","VerificationKeyStorer","adapt","adapt","augment_args","augment_args_for_update","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_snapshot_uploader","cardano_cli_path","cardano_node_socket_path","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","certifier_inform_new_epoch","certifier_inform_new_epoch","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into_box","clone_into_box","close_registration_round","close_registration_round","close_signer_registration_round","close_signer_registration_round","collect","collect","command","command","command_for_update","compute_aggregate_verification_key","compute_aggregate_verification_key","compute_artifact","compute_next_stake_distribution_aggregate_verification_key","compute_next_stake_distribution_aggregate_verification_key","compute_protocol_message","compute_protocol_message","compute_stake_distribution_aggregate_verification_key","compute_stake_distribution_aggregate_verification_key","config_directory","create_artifact","create_artifact","create_certificate","create_certificate","create_multi_signature","create_multi_signature","create_new_pending_certificate_from_multisigner","create_new_pending_certificate_from_multisigner","create_open_message","create_open_message","create_protocol_multi_signer","critical","cycle","data_stores_directory","database","db_directory","db_directory","db_directory","db_directory","default","default","default","dependency_injection","deserialize","deserialize","deserialize","disable_digests_cache","disable_digests_cache","drop_pending_certificate","drop_pending_certificate","entities","environment","environment","epoch","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","era_reader_adapter_params","era_reader_adapter_type","era_reader_adapter_type","erased_serialize","erased_serialize","erased_serialize","event_store","execute","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_arg_matches","from_arg_matches_mut","from_str","genesis_verification_key","get","get_adapter","get_beacon_from_chain","get_beacon_from_chain","get_current_beacon","get_current_beacon","get_current_non_certified_open_message","get_current_non_certified_open_message","get_current_non_certified_open_message_for_signed_entity_type","get_current_non_certified_open_message_for_signed_entity_type","get_current_round","get_current_round","get_last_snapshot","get_last_upload","get_max_records","get_network","get_next_protocol_parameters","get_next_protocol_parameters","get_next_signers_with_stake","get_next_signers_with_stake","get_next_stake_distribution","get_next_stake_distribution","get_protocol_parameters","get_protocol_parameters","get_protocol_parameters","get_protocol_parameters","get_server_url","get_signers","get_signers","get_signers_with_stake","get_signers_with_stake","get_sqlite_dir","get_stake_distribution","get_stake_distribution","get_state","get_verification_keys","get_verification_keys","group_id","interval","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is_certificate_chain_valid","is_certificate_chain_valid","keep_state","log_level","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","network","network","network_magic","new","new","new","new","new","new","new","new","new","new","new","new","new_sample","open_registration_round","open_registration_round","open_signer_registration_round","open_signer_registration_round","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","protocol_parameters","provide","provide","provide","provide","prune","prune_verification_keys","prune_verification_keys","record_signer_id","record_signer_pool_ticker","register_signer","register_signer","remove","reset_digests_cache","reset_digests_cache","run","run_interval","run_mode","safe_epoch_retention_limit","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","save","save_pending_certificate","save_pending_certificate","save_protocol_parameters","save_protocol_parameters","save_verification_key","save_verification_key","serialize","serialize","serialize","server_ip","server_ip","server_port","server_port","services","snapshot","snapshot","snapshot","snapshot_bucket_name","snapshot_directory","snapshot_directory","snapshot_store_type","snapshot_uploader_type","snapshot_uploader_type","source","source","source","store_retention_limit","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","try_adapt","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_beacon","update_beacon","update_current_beacon","update_current_beacon","update_era_checker","update_era_checker","update_from_arg_matches","update_from_arg_matches_mut","update_protocol_parameters","update_protocol_parameters","update_protocol_parameters_in_multisigner","update_protocol_parameters_in_multisigner","update_stake_distribution","update_stake_distribution","update_stake_distribution","update_stake_distribution","upload_snapshot","upload_snapshot","upload_snapshot","upload_snapshot","verbose","verify_single_signature","verify_single_signature","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","message","message","message","nested_error","nested_error","nested_error","current_round_epoch","received_epoch","migration","provider","get_migrations","CertificateRecord","CertificateRecordProvider","CertificateRepository","DeleteCertificateProvider","DeleteEpochSettingProvider","DeleteSignerRegistrationRecordProvider","DeleteStakePoolProvider","EpochSettingProvider","EpochSettingRecord","EpochSettingStore","InsertCertificateRecordProvider","InsertOrReplaceSignerRegistrationRecordProvider","InsertOrReplaceStakePoolProvider","InsertSignedEntityRecordProvider","InsertSignerRecordProvider","OpenMessageRecord","OpenMessageRepository","OpenMessageWithSingleSignaturesRecord","SignedEntityRecord","SignedEntityRecordProvider","SignedEntityStoreAdapter","SignedEntityStorer","SignerRecord","SignerRecordProvider","SignerRegistrationRecord","SignerRegistrationRecordProvider","SignerRegistrationStore","SignerStore","SingleSignatureRecord","SingleSignatureRecordProvider","SingleSignatureRepository","StakePool","StakePoolProvider","StakePoolStore","UpdateEpochSettingProvider","UpdateSignerRecordProvider","UpdateSingleSignatureRecordProvider","aggregate_verification_key","artifact","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","beacon","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","certificate_id","certificate_id","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clean_epoch","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","create_certificate","create_many_certificates","create_open_message","create_single_signature","created_at","created_at","created_at","created_at","delete","delete","delete_by_ids","delete_certificates","epoch","epoch","epoch","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_all","get_all","get_all","get_all","get_all","get_all","get_by_certificate_id","get_by_certificate_id","get_by_certificates_ids","get_by_epoch","get_by_epoch","get_by_epoch","get_by_epoch","get_by_open_message_id","get_by_signed_entity_id","get_by_signed_entity_type","get_by_signer_id","get_by_signer_id_and_epoch","get_certificate","get_certificate_details","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_last_signed_entities_by_type","get_last_signed_entities_by_type","get_latest_certificates","get_master_certificate_for_epoch","get_open_message","get_open_message_with_single_signatures","get_projection","get_projection","get_projection","get_projection","get_projection","get_projection","get_projection","get_projection","get_projection","get_protocol_parameters","get_signed_entity","get_signed_entity","get_signed_entity_by_certificate_id","get_signed_entity_by_certificate_id","get_signed_entity_by_certificates_ids","get_signed_entity_by_certificates_ids","get_stakes","get_verification_keys","hydrate","hydrate","hydrate","hydrate","hydrate","hydrate","hydrate","hydrate","hydrate","initiated_at","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is_certified","is_certified","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lottery_indexes","message","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","open_message_id","open_message_id","open_message_id","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","parent_certificate_id","protocol_message","protocol_message","protocol_message","protocol_parameters","protocol_version","prune","prune","prune","prune_verification_keys","record_signer_id","record_signer_pool_ticker","registration_epoch_setting_id","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","save_protocol_parameters","save_stakes","save_verification_key","sealed_at","signature","signature","signed_entity_id","signed_entity_type","signed_entity_type","signed_entity_type","signer_id","signers","single_signatures","store_signed_entity","store_signed_entity","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_open_message","update_signed_entities","update_signed_entities","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","DependenciesBuilder","DependenciesBuilderError","DependencyContainer","InconsistentState","Initialization","MissingConfiguration","MultiSignerWrapper","Result","api_version_provider","api_version_provider","az","az","az","beacon_provider","beacon_provider","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","build_certifier_service","build_dependency_container","build_ticker_service","cardano_cli_runner","cast_from","cast_from","cast_from","certificate_pending_store","certificate_pending_store","certificate_repository","certificate_repository","certificate_verifier","certificate_verifier","certifier_service","certifier_service","chain_observer","chain_observer","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","config","configuration","create_aggregator_runner","create_event_store","create_genesis_container","create_http_routes","digester","digester","era_checker","era_checker","era_reader","era_reader","era_reader_adapter","event_transmitter","event_transmitter","event_transmitter_channel","fmt","fmt","from","from","from","from","from","genesis_verifier","genesis_verifier","get_api_version_provider","get_beacon_provider","get_cardano_cli_runner","get_certificate_pending_store","get_certificate_repository","get_certificate_verifier","get_certifier_service","get_chain_observer","get_era_checker","get_era_reader","get_event_transmitter","get_event_transmitter_receiver","get_event_transmitter_sender","get_genesis_verifier","get_immutable_cache_provider","get_immutable_digester","get_immutable_file_observer","get_logger","get_mithril_registerer","get_multi_signer","get_protocol_parameters_store","get_signable_builder_service","get_signed_entity_service","get_signed_entity_storer","get_signer_recorder","get_snapshot_uploader","get_snapshotter","get_sqlite_connection","get_stake_distribution_service","get_stake_store","get_ticker_service","get_verification_key_store","immutable_cache_provider","immutable_digester","immutable_file_observer","immutable_file_observer","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","mithril_registerer","multi_signer","multi_signer","new","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","protocol_parameters_store","protocol_parameters_store","provide","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","signable_builder_service","signable_builder_service","signed_entity_service","signed_entity_service","signed_entity_storer","signed_entity_storer","signer_recorder","signer_recorder","signer_registerer","signer_registration_round_opener","snapshot_uploader","snapshot_uploader","snapshotter","snapshotter","sqlite_connection","sqlite_connection","stake_distribution_service","stake_distribution_service","stake_store","stake_store","ticker_service","ticker_service","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vanish","verification_key_store","verification_key_store","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","error","message","OpenMessage","az","borrow","borrow_mut","cast_from","checked_as","checked_cast_from","clone","clone_into","created_at","epoch","eq","equivalent","equivalent","equivalent","equivalent","fmt","from","from","from","get_signers_id","into","into_any","into_any_arc","into_any_rc","is_certified","lossless_try_into","lossy_into","overflowing_as","overflowing_cast_from","protocol_message","saturating_as","saturating_cast_from","signed_entity_type","single_signatures","to_owned","try_from","try_into","type_id","type_name","unwrapped_as","unwrapped_cast_from","vzip","wrapping_as","wrapping_cast_from","Event","EventMessage","EventPersister","EventStore","TransmitterService","action","action","add_header","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone_into","content","content","created_at","event_id","fmt","from","from","from","from","from","get_projection","get_transmitter","headers","hydrate","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","persist","run","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","send_event_message","source","source","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","AlreadyCertified","BeaconTooOld","Busy","CertificateEpochGap","CertifierService","CertifierServiceError","Codec","CouldNotFindLastCertificate","MithrilCertifierService","MithrilSignedEntityService","MithrilStakeDistributionService","MithrilTickerService","NoParentCertificateFound","NotFound","OpenMessageAlreadyExists","SignedEntityService","StakeDistributionService","StakePoolDistributionServiceError","Technical","TickerService","Unavailable","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","create_artifact","create_artifact","create_certificate","create_certificate","create_open_message","create_open_message","fmt","fmt","fmt","fmt","from","from","from","from","from","from","get_certificate_by_hash","get_certificate_by_hash","get_current_epoch","get_current_epoch","get_current_immutable_beacon","get_current_immutable_beacon","get_last_signed_mithril_stake_distributions","get_last_signed_mithril_stake_distributions","get_last_signed_snapshots","get_last_signed_snapshots","get_latest_certificates","get_latest_certificates","get_open_message","get_open_message","get_signed_mithril_stake_distribution_by_id","get_signed_mithril_stake_distribution_by_id","get_signed_snapshot_by_id","get_signed_snapshot_by_id","get_stake_distribution","get_stake_distribution","inform_epoch","inform_epoch","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","provide","provide","register_single_signature","register_single_signature","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","technical_subsystem","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_stake_distribution","update_stake_distribution","verify_certificate_chain","verify_certificate_chain","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","certificate_epoch","current_epoch","error","message"],"q":[[0,"mithril_aggregator"],[1015,"mithril_aggregator::RuntimeError"],[1021,"mithril_aggregator::SignerRegistrationError"],[1023,"mithril_aggregator::database"],[1025,"mithril_aggregator::database::migration"],[1026,"mithril_aggregator::database::provider"],[2202,"mithril_aggregator::dependency_injection"],[2397,"mithril_aggregator::dependency_injection::DependenciesBuilderError"],[2399,"mithril_aggregator::entities"],[2444,"mithril_aggregator::event_store"],[2603,"mithril_aggregator::services"],[2828,"mithril_aggregator::services::CertifierServiceError"],[2830,"mithril_aggregator::services::StakePoolDistributionServiceError"]],"d":["Configuration structure dedicated to the AggregatorRuntime.","The runner responsibility is to expose a code API for the …","This trait is intended to allow mocking the …","The AggregatorRuntime responsibility is to create a state …","ArtifactBuilder is trait for building an artifact","Beacon error.","Store for CertificatePending.","Chain observer error.","Codec error.","Codec error.","Aggregator configuration","Mithril STM library returned an error.","Set when the snapshotter fails at creating a snapshot.","A Critical error means the Runtime stops and the software …","Default configuration with all the default values for …","","Dummy uploader for test purposes.","Snapshotter that does nothing. It is mainly used for test …","Different kinds of execution environments","Signer is already registered.","Signer is already registered.","Single signature already recorded.","Signer recorder failed.","Signer registration failed.","Signer registration failed.","Adapter to convert RegisterSignerMessage to Signer …","Uploader to GCP storage.","General error.","Gzip Snapshotter create a compressed file.","Errors that need the runtime to try again without changing …","Uploader to local storage.","LocalSnapshotUploader is a snapshot uploader working using …","Mithril Aggregator Node","Implementation of a SignerRegisterer","MultiSigner is the cryptographic engine in charge of …","MultiSignerImpl is an implementation of the MultiSigner","Production environment, minimum logging, maximum …","Error type for multi signer service.","ProtocolParameter store.","Store and get protocol parameters for given epoch.","An error that needs to re-initialize the state machine.","No signer registration round opened yet","Registration round for unexpected epoch","GCPSnapshotUploader is a snapshot uploader working using …","Error encountered or produced by the Runtime. This enum …","Signer recorder trait","Trait to register a signer","Error type for signer registerer service.","Represents the information needed to handle a signer …","Trait to open a signer registration round","Snapshotter error type.","SnapshotUploader represents a snapshot uploader interactor","Uploader needed to copy the snapshot once computed.","Define the ability to create snapshots.","Store error.","Store error.","Test environment, maximum logging, memory stores etc.","Adapter to turn CertificatePending instances into …","Adapter to spawn EpochSettingsMessage from EpochSettings …","No beacon available.","No clerk available.","No message available.","No protocol parameters available.","Signer was not registered.","Set when the snapshotter fails at uploading the snapshot.","Store for the VerificationKey.","Store and get signers verification keys for given epoch.","Method to trigger the conversion","Turn an entity instance into message.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a snapshot uploader from configuration settings.","Cardano CLI tool path","Path of the socket used by the Cardano CLI tool to …","","","","","","","","","","","","","","","","","","","","","","","","","","","Certifier inform new epoch","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Close a signer registration round","","Close the signer registration round of an epoch.","","","","","application main command","","Compute aggregate verification key from stake distribution","Compute aggregate verification key from stake distribution","Compute an artifact","Compute next stake distribution aggregate verification key","Compute next stake distribution aggregate verification key","Compute the protocol message","","Compute stake distribution aggregate verification key","Compute stake distribution aggregate verification key","Directory where configuration file is located","Create an artifact and persist it.","","Create multi-signature.","","Creates a multi signature from single signatures","Creates a multi signature from single signatures","Return the actual pending certificate from the multisigner.","","Create new open message","","Creates a protocol multi signer","Create a new Critical error","Perform one tick of the state machine.","Directory to store aggregator data (Certificates, …","database module. This module contains the entities …","Directory of the Cardano node files","Directory of the Cardano node store.","Directory of the Cardano node database","DB directory to snapshot","","","","Dependency injection module. This module provides tools to …","","","","Use the digest caching strategy","ImmutableDigesterCacheProvider default setting","Drop the multisigner’s actual pending certificate.","","Entities module","What kind of runtime environment the configuration is …","Execution environment","Registration round epoch","","","","","","","","","","","","","","","","Era reader adapter parameters","Era reader adapter type","Era reader adapter type","","","","Event Store module This module proposes tools to send …","execute command","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","Genesis verification key","Fetch the current CertificatePending if any.","","Return the current beacon from the chain","Return the current beacon from the chain","Get current beacon","","Retrieves the current non certified open message.","","Retrieves the current non certified open message for a …","","Get current open round if exists","","Return the last fake snapshot produced.","Return the last upload that was triggered.","","Check configuration and return a representation of the …","Get next protocol parameters","Get next protocol parameters","Get signers for the next epoch with their stake","","Get next stake distribution i.e. the stake distribution …","Get next stake distribution","Get protocol parameters","Get the saved ProtocolParameter for the given Epoch if any.","Get protocol parameters","","Build the server URL from configuration.","Get signers","Get signers","Get signers with stake","","Return the file of the SQLite stores. If the directory …","Get stake distribution","Get stake distribution","Return the actual state of the state machine.","Returns a HashMap of Signer indexed by PartyId for the …","","","Interval between each snapshot, in ms","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Check if a certificate chain is valid.","","Create a new KeepState error","get log level from parameters","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Cardano network","Cardano network","Cardano Network Magic number","MultiSignerImpl factory","Create a new instance of the Aggrergator Runner.","Create a new instance of the state machine.","MithrilSignerRegisterer factory","Create a new instance.","GCPSnapshotUploader factory","Snapshotter factory","Create a new instance of DumbSnapshotter.","Create a new instance.","Create an instance of ProtocolParameterStore.","Create a new instance.","Create a new instance of AggregatorConfig.","Create a sample configuration mainly for tests","Open a signer registration round","","Open the signer registration round of an epoch.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Protocol parameters","","","","","Pruning is deactivated on this store.","Prune all verification keys that are at or below the given …","","Record signer_id","Record pool ticker by id","Register a signer","","Remove and return the current CertificatePending if any.","Should the immutable cache be reset or not","ImmutableDigesterCacheProvider default setting","Launches an infinite loop ticking the state machine.","Run Interval is the interval between two runtime cycles in …","Run Mode","Same as the store retention limit but will never yield a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Save the given CertificatePending.","Store the given pending certificate.","","Save the given ProtocolParameter for the given Epoch.","","Save the verification key, for the given Signer for the …","","","","","Server listening IP","Server listening IP","Server listening port","Server listening port","Services","Create a new snapshot with the given archive name.","","","Bucket name where the snapshots are stored if …","Directory to store snapshot","Directory to store snapshot","Type of snapshot store to use","Type of snapshot uploader to use","Type of snapshot uploader to use","","","","Max number of records in stores. When new records are …","","","","","","","","","","","","Method to trigger the conversion.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Update the multisigner with the given beacon.","","Update current beacon","","Update the EraChecker with EraReader information.","","","","Update protocol parameters","Update protocol parameters","Update the multisigner with the protocol parameters from …","","Update stake distribution","Read the stake distribution from the blockchain and store …","Update stake distribution","","Upload a snapshot","Upload a snapshot","","","Verbosity level","Verify a single signature","Verify a single signature","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","error message","error message","error message","Eventual caught error","Eventual caught error","Eventual caught error","Epoch of the current round","Epoch of the received signer registration","Migration module","Aggregator related database providers","Get all the migrations required by this version of the …","Certificate record is the representation of a stored …","Simple CertificateRecord provider.","Database frontend API for Certificate queries.","Provider to remove old data from the certificate table","Provider to remove old data from the epoch_setting table","Provider to remove old data from the signer_registration …","Provider to remove old data from the stake_pool table","Simple EpochSettingRecord provider.","Settings for an epoch, including the protocol parameters.","Service to deal with epoch settings (read & write).","Query to insert the certificate record","Query to insert or replace a signer_registration record","Query to update the stake distribution","Query to insert the signed_entity record","Query to insert the signer record","OpenMessage","Open message repository","Open Message with associated single signatures if any.","SignedEntity record is the representation of a stored …","Simple SignedEntityRecord provider.","Service to deal with signed_entity (read & write).","Signed entity storer trait","Signer record is the representation of a stored signer.","Simple SignerRecord provider.","SignerRegistration record is the representation of a …","Simple SignerRegistrationRecord provider.","Service to deal with signer_registration (read & write).","Service to deal with signer (read & write).","SingleSignature record is the representation of a stored …","Simple SingleSignatureRecord provider.","Service to deal with single_signature (read & write).","Stake pool as read from Chain.","Simple StakePool provider.","Service to deal with stake pools (read & write).","Query to update the epoch setting","Query to update the signer record","Query to update the single_signature record","Aggregate verification key Note: used only if signature is …","Raw artifact (in JSON format).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Beacon used to produce the signed message","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Certificate id.","Certificate id for this signed entity.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Remove all the OpenMessageRecord for the strictly previous …","","","","","","","","","","","","","","","Create a new certificate in the database.","Create many certificates at once in the database.","Create a new OpenMessageRecord in the database.","Create a new Single Signature in database","Message creation datetime, it is set by the database.","Message creation datetime, it is set by the database.","Date and time when the signed_entity was created","Date and time when the single_signature was created","Delete the epoch setting data given the Epoch","Delete the epoch setting data given the Epoch","Delete the certificates with with the given ids.","Delete all the given certificates from the database","Epoch of creation of the certificate.","Epoch","Epoch","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get all CertificateRecords.","Get all EpochSettingRecords.","Get all SignedEntityRecords.","Get all SignerRecords.","Get all SignerRegistrationRecords.","Get all SingleSignatureRecords.","Get CertificateRecords for a given certificate id.","Get record for a given certificate_id.","Get records for a list of given certificates_ids.","Get CertificateRecords for a given Epoch.","Get EpochSettingRecords for a given Epoch for given …","Get SignerRegistrationRecords for a given Epoch.","Get StakePools for a given Epoch for given pool_ids.","Get SingleSignatureRecords for a given Open Message id.","Get SignedEntityRecords for a given signed_entity id.","Get SignedEntityRecords for a given signed entity type.","Get SignerRecords for a given signer id.","Get SignerRegistrationRecords for given signer id and …","Return the certificate corresponding to the given hash if …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get last signed entities by signed entity type","","Return the latest certificates.","Return the first certificate signed per epoch as the …","Return the latest OpenMessageRecord for the given Epoch …","Return an open message with its associated single …","","","","","","","","","","","Get signed entity type","","Get signed entity type by certificate id","","Get signed entities type by certificates ids","","","","","","","","","","","","","Date and time when the certificate was initiated","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Has this open message been converted into a certificate?","Has this message been converted into a Certificate?","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Lottery indexes","Message that is signed.","Create a new provider","Create a new instance","Create a new instance","Instantiate a new repository","Create a new provider","Create a new instance","Create a new instance","Create a new EpochSetting service","Instanciate service","Create a new provider","Create a new instance","Create a new SignedEntityStoreAdapter service","Create a new provider","Create a new instance","Create a new instance","Create a new SignerStore service","Create a new provider","Create a new instance","Create a new instance","Create a new SignerRegistrationStore service","Create a new provider","Create a new instance","Create a new SingleSignatureStoreAdapter service","Create a new provider","Create a new instance","Create a new instance","Create a new StakePool service","OpenMessage unique identifier","OpenMessage unique identifier","Open message id.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Parent Certificate id.","Structured message that is used to create the signed …","Message used by the Mithril Protocol","Message used by the Mithril Protocol","Protocol parameters.","Protocol Version (semver)","Prune the epoch setting data older than the given epoch.","Prune the epoch setting data older than the given epoch.","Prune the stake pools data older than the given epoch.","","","","Registration epoch setting id","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Date and time when the certificate was sealed","Signature of the certificate. Note: multi-signature if …","The STM single signature of the message","Signed entity id.","Type of message","Type of message","Signed entity type.","Signer id.","The list of the active signers with their stakes and …","associated single signatures","Store a signed entity","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Updates an OpenMessageRecord in the database.","Perform an update for all the given signed entities.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Dependencies container builder","Error that can occure during dependencies initialization …","DependencyManager handles the dependencies","The dependency has reached a state where dependencies are …","Unrecoverable system initialization failure","Configuration parameter missing for initialization.","MultiSignerWrapper wraps a MultiSigner","Result with the DependenciesBuilderError error.","API Version provider","API Version provider","","","","Beacon provider service.","Beacon provider service.","","","","","","","Create CertifierService service","Return an unconfigured DependencyContainer","Create TickerService instance.","Cardano CLI Runner for the ChainObserver","","","","Certificate pending store.","Certificate pending store.","Certificate repository.","Certificate store.","Certificate verifier service.","Certificate verifier service.","Certifier service","Certifier Service","Chain observer service.","Chain observer service.","","","","","","","Configuration structure.","Configuration parameters","Create the AggregatorRunner","Create dependencies for the EventStore task.","Create dependencies for genesis commands","Create the HTTP route instance","Digester service.","Digester service.","Era checker service","Era checker service","Era reader service","Era reader service","Adapter for EraReader","Event Transmitter Service","Event Transmitter Service","Event transmitter Channel Sender endpoint","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Genesis signature verifier service.","Genesis signature verifier service.","APIVersionProvider service","Return a BeaconProvider instance.","Return a CardanoCliRunner","Get a configured CertificatePendingStore.","Get a configured CertificateRepository.","CertificateVerifier service.","CertifierService service","Return a ChainObserver","EraReader service","EraReader service","TransmitterService service","Return the channel receiver setup for the EventStore. …","Return the EventMessage channel sender.","Return a ProtocolGenesisVerifier","Get an ImmutableFileDigestCacheProvider","Immutable digester.","Return a ImmutableFileObserver instance.","This method does not cache the logger since it is managed …","MithrilSignerRegisterer service","Get a configured multi signer","Get a configured ProtocolParametersStorer.","SignableBuilderService service","SignedEntityService service","SignedEntityStorer service","SignerRecorder service","Get a SnapshotUploader","Snapshotter service.","Get SQLite connection","StakeDistributionService service","Return a StakePoolStore","StakeDistributionService service","Get a configured VerificationKeyStorer.","Immutable cache provider service.","Immutable file digester service.","Immutable file observer service.","Immutable file observer service.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","Signer registerer service","Multisigner service.","Multisigner service.","Create a new clean dependency builder","","","","","","","Protocol parameter store.","Protocol parameter store.","","","","","","","","Signable Builder Service","Signable Builder Service","Signed Entity Service","Signed Entity Service","Signed Entity storer","Signed Entity storer","Signer Recorder","Signer Recorder","Signer registerer service","Signer registration round opener service","Snapshot uploader service.","Snapshot uploader service.","Snapshotter service.","Snapshotter service.","SQLite database connection","SQLite database connection This is not a real service but …","Stake Distribution Service","Stake Distribution Service","Stake Store used by the StakeDistributionService It shall …","Stake Store used by the StakeDistributionService It shall …","Ticker Service (TODO: remove BeaconProvider)","Ticker Service","","","","","","","","","","","","","","","","","","","","Remove the dependencies builder from memory to release Arc.","Verification key store.","Verification key store.","","","","","","","","","","Eventual nested error","Error context message","OpenMessage","","","","","","","","","Message creation datetime","Epoch","","","","","","","","Returns the argument unchanged.","","Gather all signers party_id for this open message","Calls U::from(self).","","","","Has this message been converted into a Certificate?","","","","","Message used by the Mithril Protocol","","","Type of message","associated single signatures","","","","","","","","","","","Event persisted in the Event Store.","Event that is sent from a thread to be persisted.","The EventPersister is the adapter to persist EventMessage …","EventMessage receiver service.","The transmitter service is used to allow inter process …","the action of the original EventMessage this Event …","The action represent the action that is going to be …","forge a new instance adding the given header","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","the content of the original EventMessage this Event …","JSON content of the message, its type is declared in the …","timestamp of event creation in the database.","Sequential number of the event, this is set by the …","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Clone the internal transmitter and return it.","Headers","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","Instanciate an EventPersister","Instanciate the EventMessage receiver service.","Instanciate a new Service by passing a MPSC transmitter.","Instanciate a new EventMessage.","","","","","","","","","","","Save an EventMessage in the database.","Launch the service. It runs until all the transmitters are …","","","","","","","","","","","Craft and send an EventMessage given the serializable data.","the source of the original EventMessage this Event …","The source of the message shall be composed of the name of …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The open message is already certified, no more single …","The given beacon is older than the current open message …","The stake distribution compute is in progress for this …","No certificate for this epoch","CertifierService","Errors dedicated to the CertifierService.","Codec error.","Could not verify certificate chain because could not find …","Mithril CertifierService implementation","Mithril ArtifactBuilder Service","Implementation of the stake distribution service.","MithrilTickerService","No parent certificate could be found, this certifier …","OpenMessage not found.","The given OpenMessage already exists","ArtifactBuilder Service trait","Responsible of synchronizing with Cardano stake …","Errors related to the StakeDistributionService.","Critical errors cannot be recovered.","Service trait with consistent business oriented API.","The stake distribution for the given Epoch is not …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create artifact for a signed entity type and a certificate","","Create a certificate if possible. If the pointed open …","","Create an open message at the given beacon. If the open …","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns a certificate from its hash.","","Return the current Epoch as read from the chain.","","Return the current Beacon used for …","","Return a list of signed Mithril stake distribution order …","","Return a list of signed snapshots order by creation date …","","Returns the list of the latest created certificates.","","Return the open message at the given Beacon. If the …","","Return a signed Mithril stake distribution","","Return a signed snapshot","","Return the stake distribution fot the given epoch.","","Inform the certifier I have detected a new epoch, it may …","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","instantiate the service","MithrilSignedEntityService factory","Create a new service instance","Instantiate a new service","","","","","","","","","","","","","","","Add a new single signature for the open message at the …","","","","","","","","","","","","","","Simple way to nest technical errors","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","This launches the stake distribution computation if not …","","Verify the certificate chain and epoch gap. This will …","","","","","","","","","","","","","","","","","","","","Epoch of the last issued certificate","Given current epoch","Eventual nested error","Error message"],"i":[0,0,0,0,0,39,0,53,39,53,0,39,54,42,0,0,0,0,0,39,53,39,53,39,53,0,19,54,0,42,19,0,0,0,0,0,18,0,0,0,42,53,53,0,0,0,0,0,0,0,0,0,0,0,39,53,18,0,0,39,39,39,39,39,54,0,0,187,188,17,17,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,6,6,6,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,79,15,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,17,18,6,19,20,21,22,17,18,6,19,20,21,22,17,20,190,24,79,15,17,20,17,17,17,166,32,186,166,166,79,15,166,166,17,79,15,79,15,166,32,79,15,79,15,32,42,43,6,0,17,6,20,21,44,45,20,0,18,6,19,6,20,79,15,0,6,20,22,18,19,22,18,18,18,18,19,19,19,19,22,22,22,22,6,6,20,18,6,19,0,17,17,18,6,19,20,39,39,42,42,21,53,53,22,54,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,39,39,39,42,42,21,53,53,53,22,54,54,17,17,18,6,61,62,79,15,166,32,79,15,79,15,191,24,45,44,62,6,166,32,166,32,166,32,166,76,32,62,6,166,166,166,32,6,166,32,43,74,68,17,21,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,79,15,42,17,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,6,21,6,32,15,43,24,44,83,84,45,61,62,68,21,6,190,24,79,15,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,6,39,42,53,54,62,74,68,81,81,191,24,61,6,20,43,6,17,6,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,61,79,15,76,62,74,68,18,6,19,6,20,6,20,0,170,84,45,6,6,20,20,6,20,39,53,54,6,17,18,6,19,20,21,22,39,42,53,54,189,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,79,15,166,32,79,15,17,17,166,32,79,15,166,79,32,15,7,44,95,83,17,166,32,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,192,193,194,192,193,194,195,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,103,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,100,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,100,103,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,99,100,101,102,103,104,105,106,100,101,102,103,104,105,106,107,107,99,108,101,102,103,106,109,112,113,107,100,101,102,100,110,101,103,104,105,106,114,101,101,101,101,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,100,110,101,101,102,103,104,105,106,114,115,116,117,118,119,120,115,117,117,115,116,119,121,120,117,117,118,119,107,107,115,125,113,116,126,109,117,127,118,128,129,119,130,112,120,131,121,132,133,115,125,113,116,126,109,117,127,118,128,129,119,130,112,120,131,121,132,133,169,134,107,107,99,99,100,110,101,102,103,104,105,106,114,136,169,134,169,134,169,134,137,138,100,110,101,102,103,104,105,106,114,100,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,107,136,99,134,142,138,108,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,101,102,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,106,100,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,101,102,106,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,100,100,101,102,100,100,109,112,133,138,142,142,106,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,136,137,138,100,100,106,103,101,102,103,106,100,102,169,134,100,101,102,103,104,105,106,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,99,169,134,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,0,0,0,150,150,150,0,0,143,77,143,77,150,143,77,143,77,150,143,77,150,143,143,143,143,143,77,150,143,77,143,77,143,77,143,77,143,77,143,77,150,143,77,150,77,143,143,143,143,143,143,77,143,77,143,77,143,143,77,143,150,150,143,77,150,150,150,143,77,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,77,143,77,150,143,77,150,143,77,150,143,77,150,143,77,150,143,77,150,143,143,77,143,143,77,150,143,77,150,143,77,150,143,77,150,143,77,150,143,77,143,77,143,77,143,77,77,77,143,77,143,77,143,77,143,77,143,77,143,77,150,143,77,150,143,77,150,143,77,150,143,77,150,143,77,150,143,77,150,143,143,77,143,77,150,143,77,150,143,77,150,196,196,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,176,157,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,157,157,176,157,176,176,157,176,178,147,158,157,176,158,157,176,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,178,147,158,157,176,178,147,158,157,176,178,147,158,157,178,147,176,178,147,158,157,176,178,147,158,157,158,176,157,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,182,182,183,182,0,0,182,182,0,0,0,0,182,182,182,0,0,0,183,0,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,168,180,144,181,144,181,182,182,183,183,181,180,185,184,182,183,144,181,146,184,146,184,168,180,168,180,144,181,144,181,168,180,168,180,171,185,144,181,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,181,180,185,184,182,183,181,180,185,184,182,183,182,183,144,181,181,180,185,184,182,183,181,180,185,184,182,183,183,182,183,181,180,185,184,182,183,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,171,185,144,181,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,197,197,198,198],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,2],[3,4],[5,5],[5,5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[6,[[11,[[8,[7]],[10,[9]]]]]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[12,[[14,[[10,[13]]]]]],[[15,12],[[14,[[10,[13]]]]]],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[17,17],[18,18],[6,6],[19,19],[20,20],[21,21],[22,22],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[17,[[10,[23]]]],[20,[[10,[23]]]],[[],[[14,[[10,[13]]]]]],[24,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[15,[[14,[[10,[13]]]]]],[17,[[11,[[27,[25,26]],28]]]],[20,[[11,[[27,[25,26]],28]]]],[[],5],0,[[],5],[[[30,[29]],31],[[14,[[10,[13]]]]]],[[32,[30,[29]],31],[[14,[[10,[13]]]]]],[33,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[34,[[14,[[10,[13]]]]]],[[15,34],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],0,[[34,33],[[14,[[10,[13]]]]]],[[15,34,33],[[14,[[10,[13]]]]]],[34,[[14,[[10,[13]]]]]],[[15,34],[[14,[[10,[13]]]]]],[35,[[14,[[10,[13]]]]]],[[32,35],[[14,[[10,[13]]]]]],[[36,34],[[14,[[10,[13]]]]]],[[15,36,34],[[14,[[10,[13]]]]]],[[34,37],[[14,[[10,[13]]]]]],[[15,34,37],[[14,[[10,[13]]]]]],[[32,[30,[29]],31],[[11,[38,39]]]],[[40,[16,[41]]],42],[43,[[11,[42]]]],0,0,0,0,0,0,[[],44],[[],45],[[],20],0,[46,[[11,[18]]]],[46,[[11,[6]]]],[46,[[11,[19]]]],0,0,[[],[[14,[[10,[13]]]]]],[15,[[14,[[10,[13]]]]]],0,0,0,0,[[18,18],47],[[19,19],47],[[22,22],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],0,0,0,[48,[[11,[49,50]]]],[48,[[11,[49,50]]]],[48,[[11,[49,50]]]],0,[17,[[11,[[10,[9]]]]]],[[17,51],52],[[18,51],52],[[6,51],52],[[19,51],52],[[20,51],52],[[39,51],52],[[39,51],52],[[42,51],52],[[42,51],52],[[21,51],52],[[53,51],52],[[53,51],52],[[22,51],52],[[54,51],52],[[54,51],52],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[55,39],[56,39],[57,39],[[]],[41,42],[[]],[56,53],[57,53],[[]],[[]],[[]],[58,54],[59,[[11,[17,60]]]],[59,[[11,[17,60]]]],[40,[[11,[18]]]],0,[61,[[11,[[16,[1]],57]]]],[62,[[64,[[10,[63]]]]]],[[],[[14,[[10,[13]]]]]],[15,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[15,[[14,[[10,[13]]]]]],[34,[[14,[[10,[13]]]]]],[[15,34],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[24,[[14,[[10,[13]]]]]],[45,[[11,[[16,[0]],[10,[9]]]]]],[44,[[11,[[16,[25]],[10,[9]]]]]],[62,[[16,[65]]]],[6,[[11,[66,28]]]],[[],[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[12,[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[[62,12],[[14,[[10,[13]]]]]],[6,25],[[],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[6,67],[[],[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[43,25],[12,[[14,[[10,[13]]]]]],[[68,12],[[14,[[10,[13]]]]]],[[],[[16,[69]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[36,[[14,[[10,[13]]]]]],[[15,36],[[14,[[10,[13]]]]]],[[40,[16,[41]]],42],[17,73],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[[8,[74]],[8,[75]],[8,[76]]],32],[[[8,[77]]],15],[[78,[16,[0]],[8,[79]]],[[11,[43,42]]]],[[[8,[80]],[8,[74]],[8,[81]],[16,[82]]],24],[[],44],[[[10,[0]],25],83],[[67,67],[[85,[84]]]],[[],45],[[[10,[63]]],61],[[[10,[63]],[16,[65]]],62],[[[10,[63]]],68],[[82,66,86],21],[[],6],[[12,87],[[14,[[10,[13]]]]]],[[24,12,87],[[14,[[10,[13]]]]]],[36,[[14,[[10,[13]]]]]],[[15,36],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[88],[88],[88],[88],[62,[[14,[[10,[13]]]]]],[12,[[14,[[10,[13]]]]]],[[68,12],[[14,[[10,[13]]]]]],[25,[[14,[[10,[13]]]]]],[[25,[16,[25]]],[[14,[[10,[13]]]]]],[[12,89],[[14,[[10,[13]]]]]],[[24,12,89],[[14,[[10,[13]]]]]],[61,[[11,[[16,[1]],57]]]],0,0,[43,[[11,[42]]]],0,0,[6,[[16,[82]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[61,1],[[11,[57]]]],[1,[[14,[[10,[13]]]]]],[[15,1],[[14,[[10,[13]]]]]],[[12,90],[[14,[[10,[13]]]]]],[[62,12,90],[[14,[[10,[13]]]]]],[[12,29],[[14,[[10,[13]]]]]],[[68,12,29],[[14,[[10,[13]]]]]],[[18,91],11],[[6,91],11],[[19,91],11],0,0,0,0,0,[40,[[11,[0,54]]]],[[84,40],[[11,[0,54]]]],[[45,40],[[11,[0,54]]]],0,0,0,0,0,0,[39,[[16,[9]]]],[53,[[16,[9]]]],[54,[[16,[9]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],25],[[],25],[[],25],[[],25],[92,[[85,[89]]]],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[36,[[14,[[10,[13]]]]]],[[15,36],[[14,[[10,[13]]]]]],[36,[[14,[[10,[13]]]]]],[[32,36],[[14,[[10,[13]]]]]],[36,[[14,[[10,[13]]]]]],[[15,36],[[14,[[10,[13]]]]]],[[17,59],[[11,[60]]]],[[17,59],[[11,[60]]]],[31,[[14,[[10,[13]]]]]],[[32,31],[[14,[[10,[13]]]]]],[36,[[14,[[10,[13]]]]]],[[15,36],[[14,[[10,[13]]]]]],[94,[[14,[[10,[13]]]]]],[36,[[14,[[10,[13]]]]]],[[32,94],[[14,[[10,[13]]]]]],[[15,36],[[14,[[10,[13]]]]]],[86,[[14,[[10,[13]]]]]],[[44,86],[[14,[[10,[13]]]]]],[[95,86],[[14,[[10,[13]]]]]],[[83,86],[[14,[[10,[13]]]]]],0,[[37,96],[[14,[[10,[13]]]]]],[[32,37,96],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,[[],[[98,[97]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[99,12],[[85,[65]]]],[100,100],[101,101],[102,102],[103,103],[104,104],[105,105],[106,106],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[107,33],[[85,[33]]]],[[107,[98,[33]]],[[85,[[98,[33]]]]]],[[99,12,34,37],[[85,[101]]]],[[108,96,101],[[11,[106,41]]]],0,0,0,0,[[109,12],[[11,[[111,[110]],41]]]],[[112,12],[[11,[[111,[105]],41]]]],[[113,[30,[40]]],[[85,[[111,[100]]]]]],[[107,[30,[33]]],85],0,0,0,[[100,100],47],[[110,110],47],[[101,101],47],[[103,103],47],[[104,104],47],[[105,105],47],[[106,106],47],[[114,114],47],[[],47],[[],47],[[],47],[[],47],[[100,51],52],[[110,51],52],[[101,51],52],[[102,51],52],[[103,51],52],[[104,51],52],[[105,51],52],[[106,51],52],[[114,51],52],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[33,100],[[]],[[]],[[]],[102,101],[[]],[[]],[[]],[[]],[[]],[[]],[115,[[85,[[111,[100]]]]]],[116,[[11,[[111,[110]],41]]]],[117,[[11,[[111,[103]],41]]]],[118,[[11,[[111,[104]],41]]]],[119,[[11,[[111,[105]],41]]]],[120,[[11,[[111,[106]],41]]]],[[115,40],[[85,[[111,[100]]]]]],[[117,40],[[11,[[111,[103]],41]]]],[[117,[30,[40]]],[[11,[[111,[103]],41]]]],[[115,12],[[85,[[111,[100]]]]]],[[116,12],[[11,[[111,[110]],41]]]],[[119,12],[[11,[[111,[105]],41]]]],[[121,12],[[11,[[111,[114]],41]]]],[[120,122],[[11,[[111,[106]],41]]]],[[117,40],[[11,[[111,[103]],41]]]],[[117,123],[[11,[[111,[103]],41]]]],[[118,25],[[11,[[111,[104]],41]]]],[[119,25,12],[[11,[[111,[105]],41]]]],[[107,40],[[85,[[16,[33]]]]]],[[107,40],[[14,[[10,[13]]]]]],[115,124],[125,124],[113,124],[116,124],[126,124],[109,124],[117,124],[127,124],[118,124],[128,124],[129,124],[119,124],[130,124],[112,124],[120,124],[131,124],[121,124],[132,124],[133,124],[[115,40],25],[[125,40],25],[[113,40],25],[[116,40],25],[[126,40],25],[[109,40],25],[[117,40],25],[[127,40],25],[[118,40],25],[[128,40],25],[[129,40],25],[[119,40],25],[[130,40],25],[[112,40],25],[[120,40],25],[[131,40],25],[[121,40],25],[[132,40],25],[[133,40],25],[[123,65],[[14,[[10,[13]]]]]],[[134,123,65],[[14,[[10,[13]]]]]],[[107,65],[[85,[[98,[33]]]]]],[[107,12],[[85,[[16,[33]]]]]],[[99,34],[[85,[[16,[101]]]]]],[[99,34],[[85,[[16,[102]]]]]],[[],135],[[],135],[[],135],[[],135],[[],135],[[],135],[[],135],[[],135],[[],135],[[136,12],[[14,[[10,[13]]]]]],[40,[[14,[[10,[13]]]]]],[[134,40],[[14,[[10,[13]]]]]],[40,[[14,[[10,[13]]]]]],[[134,40],[[14,[[10,[13]]]]]],[[[30,[40]]],[[14,[[10,[13]]]]]],[[134,[30,[40]]],[[14,[[10,[13]]]]]],[[137,12],[[14,[[10,[13]]]]]],[[138,12],[[14,[[10,[13]]]]]],[139,[[11,[100,140]]]],[139,[[11,[110,140]]]],[139,[[11,[101,140]]]],[139,[[11,[102,140]]]],[139,[[11,[103,140]]]],[139,[[11,[104,140]]]],[139,[[11,[105,140]]]],[139,[[11,[106,140]]]],[139,[[11,[114,140]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],0,0,[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[124,115],[124,125],[124,113],[[[8,[[141,[124]]]]],107],[124,116],[124,126],[124,109],[[[8,[[141,[124]]]],[16,[82]]],136],[[[8,[[141,[124]]]]],99],[124,117],[124,127],[[[8,[[141,[124]]]]],134],[124,118],[124,128],[124,129],[[[8,[[141,[124]]]]],142],[124,119],[124,130],[124,112],[[[8,[[141,[124]]]]],138],[124,120],[124,131],[[[8,[[141,[124]]]]],108],[124,121],[124,132],[124,133],[[[8,[[141,[124]]]],[16,[82]]],137],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,[[109,12],[[11,[[111,[110]],41]]]],[[112,12],[[11,[[111,[105]],41]]]],[[133,12],[[11,[[111,[114]],41]]]],[[138,12],[[14,[[10,[13]]]]]],[[142,25],[[14,[[10,[13]]]]]],[[142,25,[16,[25]]],[[14,[[10,[13]]]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[136,12,90],[[14,[[10,[13]]]]]],[[137,12,87],[[14,[[10,[13]]]]]],[[138,12,29],[[14,[[10,[13]]]]]],0,0,0,0,0,0,0,0,0,0,[103,[[14,[[10,[13]]]]]],[[134,103],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[99,101],[[85,[101]]]],[[[98,[103]]],[[14,[[10,[13]]]]]],[[134,[98,[103]]],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[143,[[145,[[8,[144]]]]]],[143,[[145,[77]]]],[143,[[145,[[8,[146]]]]]],0,[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],0,0,[143,[[145,[43]]]],[143,[[145,[147]]]],[143,[[145,[0]]]],[143,[[145,[[0,[148,149]]]]]],0,0,0,0,0,0,0,0,0,0,[[150,51],52],[[150,51],52],[[]],[[]],[28,150],[41,150],[[]],0,0,[143,[[145,[[8,[151]]]]]],[143,[[145,[[8,[152]]]]]],[143,[[145,[[10,[153]]]]]],[143,[[145,[[8,[61]]]]]],[143,[[145,[[8,[107]]]]]],[143,[[145,[[8,[154]]]]]],[143,[[145,[[8,[144]]]]]],[143,[[145,[[8,[80]]]]]],[143,[[145,[[8,[155]]]]]],[143,[[145,[[8,[156]]]]]],[143,[[145,[[8,[[158,[157]]]]]]]],[143,[[145,[[159,[157]]]]]],[143,[[145,[[160,[157]]]]]],[143,[[145,[[8,[161]]]]]],[143,[[145,[[8,[162]]]]]],[143,[[145,[[8,[163]]]]]],[143,[[145,[[8,[164]]]]]],[143,[[145,[165]]]],[143,[[145,[[8,[24]]]]]],[143,[[145,[[8,[[64,[166]]]]]]]],[143,[[145,[[8,[76]]]]]],[143,[[145,[[8,[167]]]]]],[143,[[145,[[8,[168]]]]]],[143,[[145,[[8,[169]]]]]],[143,[[145,[[8,[81]]]]]],[143,[[145,[[8,[7]]]]]],[143,[[145,[[8,[170]]]]]],[143,[[145,[[8,[[141,[124]]]]]]]],[143,[[145,[[8,[171]]]]]],[143,[[145,[[8,[137]]]]]],[143,[[145,[[8,[146]]]]]],[143,[[145,[[8,[74]]]]]],0,0,0,0,[[]],[[]],[[]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[[],16],[[],16],[[],16],[[]],[[]],[[]],0,0,0,[6,143],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[88],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],25],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],93],[[],93],[[],93],[[],40],[[],40],[[],40],[[]],[[]],[[]],[[]],[[]],[[]],[143],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[]],[[]],[[]],[[]],[[],16],[[],16],[35,35],[[]],0,0,[[35,35],47],[[],47],[[],47],[[],47],[[],47],[[35,51],52],[101,35],[[]],[102,35],[35,[[98,[172]]]],[[]],[[[10,[70]]],[[10,[71,70]]]],[8,[[8,[71]]]],[72,[[72,[71]]]],0,[[],16],[[]],[[]],[[]],0,[[]],[[]],0,0,[[]],[[],11],[[],11],[[],93],[[],40],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,[[157,40,40],157],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[157,157],[[]],0,0,0,0,[[157,51],52],[[]],[[]],[[]],[[]],[[]],[[],135],[[[158,[[0,[173,174,175]]]]],[[160,[[0,[173,174,175]]]]]],0,[139,[[11,[176,140]]]],[[]],[[]],[[]],[[]],[[]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[[],16],[[],16],[[],16],[[],16],[[],16],[[]],[[]],[[]],[[]],[[]],[[[8,[[177,[124]]]]],178],[[[159,[157]]],147],[[[160,[[0,[173,174,175]]]]],[[158,[[0,[173,174,175]]]]]],[[40,40,40],157],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[178,157],[[11,[176,41]]]],[[147,[16,[67]]],[[11,[[10,[9]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[158,[157]],40,40,179,98],[[11,[25]]]],0,0,[[]],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],93],[[],93],[[],93],[[],93],[[],93],[[],40],[[],40],[[],40],[[],40],[[],40],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[34,33],[[14,[[10,[13]]]]]],[[180,34,33],[[14,[[10,[13]]]]]],[34,[[14,[[10,[13]]]]]],[[181,34],[[14,[[10,[13]]]]]],[[34,37],[[14,[[10,[13]]]]]],[[181,34,37],[[14,[[10,[13]]]]]],[[182,51],52],[[182,51],52],[[183,51],52],[[183,51],52],[[]],[[]],[[]],[[]],[[]],[[]],[40,[[14,[[10,[13]]]]]],[[181,40],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[184,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[184,[[14,[[10,[13]]]]]],[65,[[14,[[10,[13]]]]]],[[180,65],[[14,[[10,[13]]]]]],[65,[[14,[[10,[13]]]]]],[[180,65],[[14,[[10,[13]]]]]],[65,[[14,[[10,[13]]]]]],[[181,65],[[14,[[10,[13]]]]]],[34,[[14,[[10,[13]]]]]],[[181,34],[[14,[[10,[13]]]]]],[40,[[14,[[10,[13]]]]]],[[180,40],[[14,[[10,[13]]]]]],[40,[[14,[[10,[13]]]]]],[[180,40],[[14,[[10,[13]]]]]],[12,[[14,[[10,[13]]]]]],[[185,12],[[14,[[10,[13]]]]]],[12,[[14,[[10,[13]]]]]],[[181,12],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[99]],[8,[108]],[8,[107]],[8,[154]],[8,[161]],[8,[[64,[166]]]],165],181],[[[8,[169]],[8,[186]],[8,[186]]],180],[[[8,[137]],[8,[80]]],185],[[[8,[80]],[8,[164]],66],184],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[88],[88],[[34,96],[[14,[[10,[13]]]]]],[[181,34,96],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[41,[[10,[183]]]],[[],25],[[],25],[[],11],[[],11],[[],11],[[],11],[[],11],[41,[[11,[183]]]],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[[14,[[10,[13]]]]]],[185,[[14,[[10,[13]]]]]],[12,[[14,[[10,[13]]]]]],[[181,12],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0],"c":[],"p":[[3,"CertificatePending"],[3,"CertificatePendingMessage"],[3,"EpochSettings"],[3,"EpochSettingsMessage"],[3,"Command"],[3,"Configuration"],[8,"SnapshotUploader"],[3,"Arc"],[8,"Error"],[3,"Box"],[4,"Result"],[3,"Epoch"],[8,"Future"],[3,"Pin"],[3,"AggregatorRunner"],[4,"Option"],[3,"MainOpts"],[4,"ExecutionEnvironment"],[4,"SnapshotUploaderType"],[3,"DefaultConfiguration"],[3,"AggregatorConfig"],[3,"SignerRegistrationRound"],[8,"Source"],[3,"MithrilSignerRegisterer"],[3,"String"],[3,"Value"],[6,"Map"],[4,"ConfigError"],[3,"SignerWithStake"],[15,"slice"],[6,"ProtocolParameters"],[3,"MultiSignerImpl"],[3,"Certificate"],[4,"SignedEntityType"],[3,"OpenMessage"],[3,"Beacon"],[3,"ProtocolMessage"],[3,"MultiSigner"],[4,"ProtocolError"],[15,"str"],[6,"StdError"],[4,"RuntimeError"],[3,"AggregatorRuntime"],[3,"DumbSnapshotUploader"],[3,"DumbSnapshotter"],[8,"Deserializer"],[15,"bool"],[8,"Serializer"],[3,"Ok"],[3,"Error"],[3,"Formatter"],[6,"Result"],[4,"SignerRegistrationError"],[4,"SnapshotError"],[4,"EpochError"],[6,"ProtocolRegistrationError"],[4,"StoreError"],[3,"Error"],[3,"ArgMatches"],[6,"Error"],[3,"CertificatePendingStore"],[3,"ProtocolParametersStore"],[8,"StoreAdapter"],[3,"RwLock"],[15,"usize"],[4,"CardanoNetwork"],[3,"PathBuf"],[3,"VerificationKeyStore"],[3,"Id"],[3,"Global"],[8,"Any"],[3,"Rc"],[4,"Level"],[8,"VerificationKeyStorer"],[8,"StakeStorer"],[8,"ProtocolParametersStorer"],[3,"DependencyContainer"],[3,"Duration"],[8,"AggregatorRunnerTrait"],[8,"ChainObserver"],[8,"SignerRecorder"],[15,"u64"],[3,"RemoteSnapshotUploader"],[3,"GzipSnapshotter"],[6,"StdResult"],[3,"Path"],[6,"StakeDistribution"],[3,"Demand"],[3,"Signer"],[3,"ProtocolParameters"],[8,"Serializer"],[3,"RegisterSignerMessage"],[3,"TypeId"],[6,"ProtocolStakeDistribution"],[3,"LocalSnapshotUploader"],[3,"SingleSignatures"],[3,"SqlMigration"],[3,"Vec"],[3,"OpenMessageRepository"],[3,"CertificateRecord"],[3,"OpenMessageRecord"],[3,"OpenMessageWithSingleSignaturesRecord"],[3,"SignedEntityRecord"],[3,"SignerRecord"],[3,"SignerRegistrationRecord"],[3,"SingleSignatureRecord"],[3,"CertificateRepository"],[3,"SingleSignatureRepository"],[3,"DeleteEpochSettingProvider"],[3,"EpochSettingRecord"],[3,"EntityCursor"],[3,"DeleteSignerRegistrationRecordProvider"],[3,"DeleteCertificateProvider"],[3,"StakePool"],[3,"CertificateRecordProvider"],[3,"EpochSettingProvider"],[3,"SignedEntityRecordProvider"],[3,"SignerRecordProvider"],[3,"SignerRegistrationRecordProvider"],[3,"SingleSignatureRecordProvider"],[3,"StakePoolProvider"],[3,"Uuid"],[4,"SignedEntityTypeDiscriminants"],[3,"Connection"],[3,"InsertCertificateRecordProvider"],[3,"UpdateEpochSettingProvider"],[3,"InsertSignedEntityRecordProvider"],[3,"InsertSignerRecordProvider"],[3,"UpdateSignerRecordProvider"],[3,"InsertOrReplaceSignerRegistrationRecordProvider"],[3,"UpdateSingleSignatureRecordProvider"],[3,"InsertOrReplaceStakePoolProvider"],[3,"DeleteStakePoolProvider"],[3,"SignedEntityStoreAdapter"],[3,"Projection"],[3,"EpochSettingStore"],[3,"StakePoolStore"],[3,"SignerRegistrationStore"],[3,"Row"],[4,"HydrationError"],[3,"Mutex"],[3,"SignerStore"],[3,"DependenciesBuilder"],[8,"CertifierService"],[6,"Result"],[8,"TickerService"],[3,"EventStore"],[8,"Filter"],[8,"Clone"],[4,"DependenciesBuilderError"],[3,"APIVersionProvider"],[8,"BeaconProvider"],[3,"CardanoCliRunner"],[8,"CertificateVerifier"],[3,"EraChecker"],[3,"EraReader"],[3,"EventMessage"],[3,"TransmitterService"],[3,"UnboundedReceiver"],[3,"UnboundedSender"],[3,"ProtocolGenesisVerifier"],[8,"ImmutableFileDigestCacheProvider"],[8,"ImmutableDigester"],[8,"ImmutableFileObserver"],[3,"Logger"],[8,"MultiSigner"],[8,"SignableBuilderService"],[8,"SignedEntityService"],[8,"SignedEntityStorer"],[8,"Snapshotter"],[8,"StakeDistributionService"],[6,"PartyId"],[8,"Debug"],[8,"Sync"],[8,"Send"],[3,"Event"],[3,"Mutex"],[3,"EventPersister"],[8,"Serialize"],[3,"MithrilSignedEntityService"],[3,"MithrilCertifierService"],[4,"CertifierServiceError"],[4,"StakePoolDistributionServiceError"],[3,"MithrilTickerService"],[3,"MithrilStakeDistributionService"],[8,"ArtifactBuilder"],[3,"ToCertificatePendingMessageAdapter"],[3,"ToEpochSettingsMessageAdapter"],[3,"FromRegisterSignerAdapter"],[8,"SignerRegistrationRoundOpener"],[8,"SignerRegisterer"],[13,"KeepState"],[13,"Critical"],[13,"ReInit"],[13,"RegistrationRoundUnexpectedEpoch"],[13,"Initialization"],[13,"CertificateEpochGap"],[13,"Technical"]]},\ -"mithril_client":{"doc":"Define everything necessary to list, download, and …","t":"DDDDDLALLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLAMMAMMMLLLLLLLLLLLLLLLLLMMLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLAMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLIDENDDNNNNDENLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMAANNEDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNEDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDMLLLLMMLLMLLLLLLLLLLMLLLLLMMLLLLLMMLLLLLLLLLDNNNNNNNDIENIELLLLLLLLLLLLLLLLLLLLLLLLLLKKLLLLLLLLLLLLLLLLLLLLLLLLLLKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMNDENNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMM","n":["FromCertificateMessageAdapter","FromSnapshotMessageAdapter","MithrilStakeDistributionListItem","SnapshotFieldItem","SnapshotListItem","adapt","aggregator_client","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","certificate_hash","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone_into","clone_into","clone_into","commands","created_at","created_at","dependencies","digest","epoch","epoch","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","erased_serialize","erased_serialize","field_name","field_value","fmt","fmt","fmt","from","from","from","from","from","from","from","hash","immutable_file_number","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","network","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","partial_cmp","partial_cmp","partial_cmp","row","row","row","row","row","row","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","serialize","serialize","services","size","title","title","title","to_owned","to_owned","to_owned","total_locations","try_adapt","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","utils","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","AggregatorClient","AggregatorHTTPClient","AggregatorHTTPClientError","ApiVersionMismatch","CertificateClient","MithrilStakeDistributionClient","NoWorkingLocation","RemoteServerLogical","RemoteServerTechnical","RemoteServerUnreachable","SnapshotClient","SnapshotClientError","SubsystemError","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cell","cell","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","download","download","download","fmt","fmt","fmt","fmt","from","from","from","from","from","from","get","get","get_certificate_details","get_content","get_content","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","list","list","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","probe","probe","provide","provide","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","show","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","error","message","digest","locations","mithril_stake_distribution","snapshot","Download","List","MithrilStakeDistributionCommands","MithrilStakeDistributionDownloadCommand","MithrilStakeDistributionListCommand","augment_args","augment_args","augment_args_for_update","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","az","az","az","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone_into","clone_into","clone_into","command","command","command_for_update","command_for_update","execute","execute","execute","fmt","fmt","fmt","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","group_id","group_id","has_subcommand","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","Download","List","Show","SnapshotCommands","SnapshotDownloadCommand","SnapshotListCommand","SnapshotShowCommand","augment_args","augment_args","augment_args","augment_args_for_update","augment_args_for_update","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","az","az","az","az","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","command","command","command","command_for_update","command_for_update","command_for_update","execute","execute","execute","execute","fmt","fmt","fmt","fmt","from","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","group_id","group_id","group_id","has_subcommand","into","into","into","into","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","DependenciesBuilder","aggregator_client","az","borrow","borrow_mut","cast_from","certificate_client","certificate_verifier","checked_as","checked_cast_from","config","from","get_aggregator_client","get_certificate_client","get_certificate_verifier","get_immutable_digester","get_logger","get_mithril_stake_distribution_client","get_mithril_stake_distribution_service","get_snapshot_client","get_snapshot_service","immutable_digester","into","into_any","into_any_rc","lossless_try_into","lossy_into","mithril_stake_distribution_client","mithril_stake_distribution_service","new","overflowing_as","overflowing_cast_from","saturating_as","saturating_cast_from","snapshot_client","snapshot_service","try_from","try_into","type_id","type_name","unwrapped_as","unwrapped_cast_from","vzip","wrapping_as","wrapping_cast_from","AppMithrilStakeDistributionService","CertificateNotFound","CouldNotFindCertificate","CouldNotFindStakeDistribution","CouldNotVerifySnapshot","CouldNotVerifyStakeDistribution","InvalidParameters","InvalidParameters","MithrilClientSnapshotService","MithrilStakeDistributionService","MithrilStakeDistributionServiceError","SnapshotNotFound","SnapshotService","SnapshotServiceError","az","az","az","az","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cell","cell","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","download","download","download","download","fmt","fmt","fmt","fmt","from","from","from","from","into","into","into","into","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","list","list","list","list","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","provide","provide","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","show","show","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","certificate_hash","context","context","error","hash","context","digest","error","path","NotEnoughSpace","SnapshotUnpacker","SnapshotUnpackerError","UnpackDirectoryAlreadyExists","UnpackDirectoryIsNotWritable","UnpackFailed","az","az","borrow","borrow","borrow_mut","borrow_mut","cast_from","cast_from","cell","check_prerequisites","checked_as","checked_as","checked_cast_from","checked_cast_from","default","fmt","fmt","from","from","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossy_into","lossy_into","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","provide","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","to_string","try_from","try_from","try_into","try_into","type_id","type_id","type_name","type_name","unpack_snapshot","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","archive_size","dirpath","error","filepath","left_space","pathdir"],"q":[[0,"mithril_client"],[202,"mithril_client::aggregator_client"],[398,"mithril_client::aggregator_client::AggregatorHTTPClientError"],[400,"mithril_client::aggregator_client::SnapshotClientError"],[402,"mithril_client::commands"],[404,"mithril_client::commands::mithril_stake_distribution"],[527,"mithril_client::commands::snapshot"],[692,"mithril_client::dependencies"],[737,"mithril_client::services"],[877,"mithril_client::services::MithrilStakeDistributionServiceError"],[882,"mithril_client::services::SnapshotServiceError"],[886,"mithril_client::utils"],[952,"mithril_client::utils::SnapshotUnpackerError"]],"d":["Adapter to convert CertificateMessage to Certificate …","Adapter to convert SnapshotMessage to …","Item to display Mithril Stake Distribution lines in a …","SnapshotFieldItem represents a field of a snapshot item …","SnapshotListItem represents a snapshot list item from an …","Method to trigger the conversion","Transport layers to the Aggregator nodes","","","","","","","","","","","","","","","","","","","","","Hash of the associated certificate","","","","","","","","","","","","","","","","","Command module This module holds the subcommands that can …","Date and time at which the snapshot was created","Date and time at which the Mithril Stake Distribution was …","Dependency manager for the client","Digest that is signed by the signer participants","Cardano epoch","Epoch at which the Mithril Stake Distribution is created","","","","","","","","","","","","","","","","","","Field name","Field value","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","Hash of the Mithril Stake Distribution (different from the …","Cardano immutable file number","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","Cardano Network name","SnapshotListItem factory","SnapshotFieldItem factory","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Services This module contains the different services tied …","Size of the snapshot file in Bytes","","","","","","","Number of locations where the binary content of the …","Method to trigger the conversion","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Utilities module This module contains tools needed mostly …","","","","","","","","","","","","","","","","API that defines a client for the Aggregator","Responsible of HTTP transport and API version check.","Error tied with the Aggregator client","Error raised when the server API version mismatch the …","Aggregator client for the Certificate","HTTP client for MithrilStakeDistribution API from the …","Download location does not work","Error raised when querying the aggregator returned a 4XX …","Error raised when querying the aggregator returned a 5XX …","Error raised when the aggregator can’t be reached.","Aggregator client for the snapshot artifact","Error for the Snapshot client","HTTP subsystem error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Download large files on the disk","","Download the snapshot identified by the given snapshot in …","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a single certificate full information from the …","Download the given stake distribution. If it cannot be …","","Get the content back from the Aggregator, the URL is a …","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","Fetch a list of signed MithrilStakeDistribution","Return a list of available snapshots","","","","","","","","","","","","","Constructor","AggregatorHTTPClient factory","Constructor","constructor","","","","","","","","","","","","","Test if the given URL points to a valid location & …","","","","","","","","","","","","","","","","Return a snapshot based on the given digest (list to get …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Nested error","Error context","given digest","list of locations tried","Commands for the Mithril Stake Distribution artifact","Commands for the snapshot artifact","Download and verify the given Mithril Stake Distribution","List certified stake distributions","Mithril Stake Distribution management (alias: msd)","Download and verify a Mithril Stake Distribution …","Mithril stake distribution LIST command","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Main command execution","Main command execution","Execute Mithril stake distribution command","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Download the snapshot and verify the certificate","List available snapshots","Show detailed informations about a snapshot","Snapshot management","Clap command to download the snapshot and verify the …","Clap command to list existing snapshots","Clap command to show a given snapshot","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Command execution","Main command execution","Snapshot Show command","Execute snapshot command","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Dependencies builder","HTTP Aggregator client","","","","","CertificateClient","CertificateVerifier","","","Configuration","Returns the argument unchanged.","Get a clone of the AggregatorClient dependency","Get a clone of the CertificateClient dependency","Get a clone of the CertificateVerifier dependency","Get a clone of the ImmutableDigester dependency","Return an instance of the logger. Since the logger is a …","Get a clone of the SnapshotClient dependency","Get a clone of the MithrilStakeDistributionService …","Get a clone of the SnapshotClient dependency","Get a clone of the SnapshotService dependency","ImmutableDigester","Calls U::from(self).","","","","","MithrilStakeDistributionClient","MithrilStakeDistributionService","Constructor","","","","","SnapshotClient","SnapshotService","","","","","","","","","","Service responsible of the MithrilStakeDistribution …","Associated certificate not found","The given certificate could not be found, contains the …","Could not find the given stake distribution","Error raised when the certificate verification failed for …","When certificate cannot be verified","The configuration has invalid or missing parameters","The configuration has invalid or missing parameters","Service used by the Command to perform business oriented …","Definition of the service responsible of Mithril Stake …","Errors related to the StakeDistributionService","The given identifier does not link to an existing snapshot.","SnapshotService","SnapshotService related errors.","","","","","","","","","","","","","","","","","","","","","","","","","","","Download and verify the specified stake distribution","Download and verify the snapshot identified by the given …","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","Return a list of the certified Mithril stake distributions","Return the list of the snapshots stored by the Aggregator.","","","","","","","","","","","Constructor","Create a new instance of the service.","","","","","","","","","","","","","","","","","","","Show details of the snapshot identified by the given …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Associated certificate","Context","Error context","Eventual nested error","StakeDistribution identifier","Error context","snapshot digest","Eventual nested error","The path of the downloaded archive","Not enough space on the disk. There should be at least 3.5 …","Check and unpack a downloaded archive in a given directory.","Errors tied with the SnapshotUnpacker.","The directory where the files from snapshot are expanded …","Cannot write in the given directory.","Unpacking error","","","","","","","","","","Check all prerequisites are met before starting to …","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Unpack the snapshot pointed at the given filepath into the …","","","","","","","","","","","Packed snapshot size","Location where the archive is to be extracted.","Subsystem error","Location of the packed archive.","Left space on device","Speficied location"],"i":[0,0,0,0,0,81,0,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,7,82,81,5,6,7,82,81,5,6,7,5,6,7,5,6,7,0,5,7,0,5,5,7,5,6,7,5,5,5,5,6,6,6,6,7,7,7,7,5,7,6,6,5,6,7,82,81,5,5,6,7,7,7,5,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,5,5,6,82,81,5,6,7,82,81,5,6,7,5,6,7,5,5,6,6,7,7,82,81,5,6,7,82,81,5,6,7,5,7,0,5,5,6,7,5,6,7,5,82,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,0,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,0,0,0,44,0,0,45,44,44,44,0,0,44,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,44,45,46,41,47,42,44,45,46,41,47,42,44,45,50,41,42,44,44,45,45,46,41,47,42,44,45,46,47,46,50,41,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,47,42,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,46,41,47,42,44,45,46,41,47,42,44,45,50,41,44,45,46,41,47,42,44,45,46,41,47,42,44,45,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,83,83,84,84,0,0,56,56,0,0,0,54,55,54,55,56,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,54,55,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,66,66,66,0,0,0,0,63,64,65,63,64,65,66,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,63,64,65,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,0,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,77,78,77,78,77,77,78,0,0,0,78,0,0,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,77,78,75,76,77,78,75,76,77,78,71,72,75,76,77,77,78,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,71,72,75,76,75,76,77,78,75,76,77,78,75,76,75,76,77,78,75,76,77,78,77,78,75,76,77,78,75,76,77,78,72,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,85,85,86,86,85,87,88,87,88,80,0,0,80,80,80,79,80,79,80,79,80,79,80,80,79,79,80,79,80,79,80,80,79,80,79,80,79,80,79,80,79,80,79,80,79,80,79,80,79,80,80,79,80,79,80,80,79,80,79,80,79,80,79,80,79,79,80,79,80,79,80,79,80,79,80,89,90,90,90,89,89],"f":[0,0,0,0,0,[1,[[3,[2]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[5,5],[6,6],[7,7],[[]],[[]],[[]],0,0,0,0,0,0,0,[[5,5],8],[[6,6],8],[[7,7],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[9,[[12,[10,11]]]],[9,[[12,[10,11]]]],0,0,[[5,13],14],[[6,13],14],[[7,13],14],[[]],[[]],[[]],[15,5],[[]],[[]],[16,7],0,0,[[]],[[]],[[]],[[]],[[]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[[],4],[[],4],[[],4],[[],4],[[],4],[[]],[[]],[[]],[[]],[[]],0,[[22,23,24,24,23,25,[27,[26]]],5],[[24,24],6],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[5,5],[[4,[28]]]],[[6,6],[[4,[28]]]],[[7,7],[[4,[28]]]],[5,29],[5,29],[6,29],[6,29],[7,29],[7,29],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[5,30],12],[[7,30],12],0,0,[[],29],[[],29],[[],29],[[]],[[]],[[]],0,[31,[[33,[32]]]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],34],[[],34],[[],34],[[],34],[[],34],[[],35],[[],35],[[],35],[[],35],[[],35],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],36],[[],36],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[35,37,38],[[40,[[18,[39]]]]]],[[41,35,37,38],[[40,[[18,[39]]]]]],[[42,2,37,38],[[33,[43]]]],[[44,13],14],[[44,13],14],[[45,13],14],[[45,13],14],[[]],[[]],[[]],[[]],[[]],[[]],[[46,35],[[33,[[4,[32]]]]]],[[47,35],[[33,[[4,[[3,[48]]]]]]]],[[46,35],[[40,[[18,[39]]]]]],[35,[[40,[[18,[39]]]]]],[[41,35],[[40,[[18,[39]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[47,[[33,[[49,[16]]]]]],[42,[[33,[[49,[15]]]]]],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[]],[[]],[[]],[[]],[[]],[[]],[[[20,[50]]],46],[[35,[49,[51]]],41],[[[20,[50]]],47],[[[20,[50]]],42],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[35,[[40,[[18,[39]]]]]],[[41,35],[[40,[[18,[39]]]]]],[52],[52],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[42,35],[[33,[1]]]],[[],24],[[],24],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,[53,53],[53,53],[53,53],[53,53],[53,53],[53,53],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[54,54],[55,55],[56,56],[[]],[[]],[[]],[[],53],[[],53],[[],53],[[],53],[[54,[58,[57]]],33],[[55,[58,[57]]],33],[[56,[58,[57]]],[[12,[59]]]],[[54,13],14],[[55,13],14],[[56,13],14],[[]],[[]],[[]],[60,[[12,[54,61]]]],[60,[[12,[55,61]]]],[60,[[12,[56,61]]]],[60,[[12,[54,61]]]],[60,[[12,[55,61]]]],[60,[[12,[56,61]]]],[[],[[4,[62]]]],[[],[[4,[62]]]],[35,8],[[]],[[]],[[]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[[],4],[[],4],[[],4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],34],[[],34],[[],34],[[],35],[[],35],[[],35],[[]],[[]],[[]],[[]],[[]],[[]],[[54,60],[[12,[61]]]],[[55,60],[[12,[61]]]],[[56,60],[[12,[61]]]],[[54,60],[[12,[61]]]],[[55,60],[[12,[61]]]],[[56,60],[[12,[61]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,[53,53],[53,53],[53,53],[53,53],[53,53],[53,53],[53,53],[53,53],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[63,63],[64,64],[65,65],[66,66],[[]],[[]],[[]],[[]],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[63,[58,[57]]],33],[[64,[58,[57]]],33],[[65,[58,[57]]],[[12,[59]]]],[[66,[58,[57]]],[[12,[59]]]],[[63,13],14],[[64,13],14],[[65,13],14],[[66,13],14],[[]],[[]],[[]],[[]],[60,[[12,[63,61]]]],[60,[[12,[64,61]]]],[60,[[12,[65,61]]]],[60,[[12,[66,61]]]],[60,[[12,[63,61]]]],[60,[[12,[64,61]]]],[60,[[12,[65,61]]]],[60,[[12,[66,61]]]],[[],[[4,[62]]]],[[],[[4,[62]]]],[[],[[4,[62]]]],[35,8],[[]],[[]],[[]],[[]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[[],4],[[],4],[[],4],[[],4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],34],[[],34],[[],34],[[],34],[[],35],[[],35],[[],35],[[],35],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[63,60],[[12,[61]]]],[[64,60],[[12,[61]]]],[[65,60],[[12,[61]]]],[[66,60],[[12,[61]]]],[[63,60],[[12,[61]]]],[[64,60],[[12,[61]]]],[[65,60],[[12,[61]]]],[[66,60],[[12,[61]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[]],[[]],[[]],[[]],0,0,[[],4],[[],4],0,[[]],[67,[[33,[[20,[50]]]]]],[67,[[33,[[20,[46]]]]]],[67,[[33,[[20,[68]]]]]],[67,[[33,[[20,[69]]]]]],[67,[[33,[70]]]],[67,[[33,[[20,[47]]]]]],[67,[[33,[[20,[71]]]]]],[67,[[33,[[20,[42]]]]]],[67,[[33,[[20,[72]]]]]],0,[[]],[[[18,[17]]],[[18,[19,17]]]],[21,[[21,[19]]]],[[],4],[[]],0,0,[[[20,[73]]],67],[[]],[[]],[[]],[[]],0,0,[[],12],[[],12],[[],34],[[],35],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],36],[[],36],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[35,37,35],[[40,[[18,[39]]]]]],[[[3,[2]],37,35,74],[[40,[[18,[39]]]]]],[[75,35,37,35],[[40,[[18,[39]]]]]],[[76,[3,[2]],37,35,74],[[40,[[18,[39]]]]]],[[77,13],14],[[77,13],14],[[78,13],14],[[78,13],14],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[[],[[40,[[18,[39]]]]]],[[],[[40,[[18,[39]]]]]],[75,[[40,[[18,[39]]]]]],[76,[[40,[[18,[39]]]]]],[[],4],[[],4],[[],4],[[],4],[[]],[[]],[[]],[[]],[[[20,[47]],[20,[46]],[20,[68]]],75],[[[20,[42]],[20,[46]],[20,[68]],[20,[69]]],76],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[52],[52],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[35,[[40,[[18,[39]]]]]],[[76,35],[[40,[[18,[39]]]]]],[[],24],[[],24],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],34],[[],34],[[],34],[[],34],[[],35],[[],35],[[],35],[[],35],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],36],[[79,37,23],33],[[],4],[[],4],[[],4],[[],4],[[],79],[[80,13],14],[[80,13],14],[[]],[[]],[[]],[[]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[[],4],[[],4],[[]],[[]],[[]],[[]],[[]],[[]],[52],[[]],[[]],[[]],[[]],[[],24],[[],12],[[],12],[[],12],[[],12],[[],34],[[],34],[[],35],[[],35],[[79,37,37],33],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0],"c":[],"p":[[3,"SnapshotMessage"],[3,"Snapshot"],[3,"SignedEntity"],[4,"Option"],[3,"SnapshotListItem"],[3,"SnapshotFieldItem"],[3,"MithrilStakeDistributionListItem"],[15,"bool"],[8,"Serializer"],[3,"Ok"],[3,"Error"],[4,"Result"],[3,"Formatter"],[6,"Result"],[3,"SnapshotListItemMessage"],[3,"MithrilStakeDistributionListItemMessage"],[3,"Global"],[3,"Box"],[8,"Any"],[3,"Arc"],[3,"Rc"],[3,"Epoch"],[15,"u64"],[3,"String"],[15,"u16"],[3,"Utc"],[3,"DateTime"],[4,"Ordering"],[3,"RowStruct"],[8,"Serializer"],[3,"CertificateMessage"],[3,"Certificate"],[6,"StdResult"],[3,"TypeId"],[15,"str"],[3,"CellStruct"],[3,"Path"],[3,"ProgressBar"],[8,"Future"],[3,"Pin"],[3,"AggregatorHTTPClient"],[3,"SnapshotClient"],[3,"PathBuf"],[4,"AggregatorHTTPClientError"],[4,"SnapshotClientError"],[3,"CertificateClient"],[3,"MithrilStakeDistributionClient"],[3,"MithrilStakeDistribution"],[3,"Vec"],[8,"AggregatorClient"],[3,"Version"],[3,"Demand"],[3,"Command"],[3,"MithrilStakeDistributionDownloadCommand"],[3,"MithrilStakeDistributionListCommand"],[4,"MithrilStakeDistributionCommands"],[3,"DefaultState"],[3,"ConfigBuilder"],[6,"StdError"],[3,"ArgMatches"],[6,"Error"],[3,"Id"],[3,"SnapshotDownloadCommand"],[3,"SnapshotListCommand"],[3,"SnapshotShowCommand"],[4,"SnapshotCommands"],[3,"DependenciesBuilder"],[8,"CertificateVerifier"],[8,"ImmutableDigester"],[3,"Logger"],[8,"MithrilStakeDistributionService"],[8,"SnapshotService"],[3,"Config"],[3,"ProgressDrawTarget"],[3,"AppMithrilStakeDistributionService"],[3,"MithrilClientSnapshotService"],[4,"MithrilStakeDistributionServiceError"],[4,"SnapshotServiceError"],[3,"SnapshotUnpacker"],[4,"SnapshotUnpackerError"],[3,"FromSnapshotMessageAdapter"],[3,"FromCertificateMessageAdapter"],[13,"SubsystemError"],[13,"NoWorkingLocation"],[13,"CouldNotVerifyStakeDistribution"],[13,"InvalidParameters"],[13,"InvalidParameters"],[13,"CouldNotVerifySnapshot"],[13,"NotEnoughSpace"],[13,"UnpackFailed"]]},\ +"mithril_aggregator":{"doc":"Mithril aggregator The Aggregator is responsible for:","t":"DDIDINDNNNDNNNDCDDENNNNNNDNNDNNDDDIDNEDINNNDEIIEDIEIEINNNDDNNNNNNDILLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLLLLMLKLKLLKLLLMKLKLKLKLKLLLLMAMMMMLLLALLLMMKLAMMMLLLLLLLLLLLLLLLMMMLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLKLKLKLKLKLLLLLKLKLKLKKLLLLLKLLKLLKLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLKLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLKLKKKLLMMLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLKLLLLMMMMAKLLMMMMMMLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLKLLLKLKLKKLLKLLLMKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMAAFDDDDDDDDDDDDDDDDDDDDDIDDDDDDDDDDDDDDDMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLKLKLKLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDEDNNNGGMMLLLMMLLLLLLLLLMLLLMMMMMMMMMMLLLLLLMMLLLLMMMMMMMMMMLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLMMMLLLLLLLMMLLLLLLLMMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLMMDLLLLLLLLMMLLLLLLLLLLLLLLMLLLLMLLMMLLLLLLLLLLDDDDDMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNIENNDDDDNNNIIENINLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLKLLLLLLLLLLLKLKLKLKLKLKLKLKLKLKLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLLLLLLLLLLLLLLLLLLLMMMM","n":["AggregatorConfig","AggregatorRunner","AggregatorRunnerTrait","AggregatorRuntime","ArtifactBuilder","Beacon","CertificatePendingStore","ChainObserver","Codec","Codec","Configuration","Core","CreateArchiveError","Critical","DefaultConfiguration","DependencyContainer","DumbSnapshotUploader","DumbSnapshotter","ExecutionEnvironment","ExistingSigner","ExistingSigner","ExistingSingleSignature","FailedSignerRecorder","FailedSignerRegistration","FailedSignerRegistration","FromRegisterSignerAdapter","Gcp","GeneralError","GzipSnapshotter","KeepState","Local","LocalSnapshotUploader","MainOpts","MithrilSignerRegisterer","MultiSigner","MultiSignerImpl","Production","ProtocolError","ProtocolParametersStore","ProtocolParametersStorer","ReInit","RegistrationRoundNotYetOpened","RegistrationRoundUnexpectedEpoch","RemoteSnapshotUploader","RuntimeError","SignerRecorder","SignerRegisterer","SignerRegistrationError","SignerRegistrationRound","SignerRegistrationRoundOpener","SnapshotError","SnapshotUploader","SnapshotUploaderType","Snapshotter","StoreError","StoreError","Test","ToCertificatePendingMessageAdapter","ToEpochSettingsMessageAdapter","UnavailableBeacon","UnavailableClerk","UnavailableMessage","UnavailableProtocolParameters","UnregisteredParty","UploadFileError","VerificationKeyStore","VerificationKeyStorer","adapt","adapt","augment_args","augment_args_for_update","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_snapshot_uploader","cardano_cli_path","cardano_node_socket_path","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","certifier_inform_new_epoch","certifier_inform_new_epoch","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into_box","clone_into_box","close_registration_round","close_registration_round","close_signer_registration_round","close_signer_registration_round","collect","collect","command","command","command_for_update","compute_aggregate_verification_key","compute_aggregate_verification_key","compute_artifact","compute_next_stake_distribution_aggregate_verification_key","compute_next_stake_distribution_aggregate_verification_key","compute_protocol_message","compute_protocol_message","compute_stake_distribution_aggregate_verification_key","compute_stake_distribution_aggregate_verification_key","config_directory","create_artifact","create_artifact","create_certificate","create_certificate","create_multi_signature","create_multi_signature","create_new_pending_certificate_from_multisigner","create_new_pending_certificate_from_multisigner","create_open_message","create_open_message","create_protocol_multi_signer","critical","cycle","data_stores_directory","database","db_directory","db_directory","db_directory","db_directory","default","default","default","dependency_injection","deserialize","deserialize","deserialize","disable_digests_cache","disable_digests_cache","drop_pending_certificate","drop_pending_certificate","entities","environment","environment","epoch","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","era_reader_adapter_params","era_reader_adapter_type","era_reader_adapter_type","erased_serialize","erased_serialize","erased_serialize","event_store","execute","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_arg_matches","from_arg_matches_mut","from_str","genesis_verification_key","get","get_adapter","get_beacon_from_chain","get_beacon_from_chain","get_current_beacon","get_current_beacon","get_current_non_certified_open_message","get_current_non_certified_open_message","get_current_non_certified_open_message_for_signed_entity_type","get_current_non_certified_open_message_for_signed_entity_type","get_current_round","get_current_round","get_last_snapshot","get_last_upload","get_max_records","get_network","get_next_protocol_parameters","get_next_protocol_parameters","get_next_signers_with_stake","get_next_signers_with_stake","get_next_stake_distribution","get_next_stake_distribution","get_protocol_parameters","get_protocol_parameters","get_protocol_parameters","get_protocol_parameters","get_server_url","get_signers","get_signers","get_signers_with_stake","get_signers_with_stake","get_sqlite_dir","get_stake_distribution","get_stake_distribution","get_state","get_verification_keys","get_verification_keys","group_id","interval","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is_certificate_chain_valid","is_certificate_chain_valid","keep_state","log_level","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","network","network","network_magic","new","new","new","new","new","new","new","new","new","new","new","new","new_sample","open_registration_round","open_registration_round","open_signer_registration_round","open_signer_registration_round","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","protocol_parameters","provide","provide","provide","provide","prune","prune_verification_keys","prune_verification_keys","record_signer_id","record_signer_pool_ticker","register_signer","register_signer","remove","reset_digests_cache","reset_digests_cache","run","run_interval","run_mode","safe_epoch_retention_limit","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","save","save_pending_certificate","save_pending_certificate","save_protocol_parameters","save_protocol_parameters","save_verification_key","save_verification_key","serialize","serialize","serialize","server_ip","server_ip","server_port","server_port","services","snapshot","snapshot","snapshot","snapshot_bucket_name","snapshot_directory","snapshot_directory","snapshot_store_type","snapshot_uploader_type","snapshot_uploader_type","source","source","source","store_retention_limit","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","try_adapt","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_beacon","update_beacon","update_current_beacon","update_current_beacon","update_era_checker","update_era_checker","update_from_arg_matches","update_from_arg_matches_mut","update_protocol_parameters","update_protocol_parameters","update_protocol_parameters_in_multisigner","update_protocol_parameters_in_multisigner","update_stake_distribution","update_stake_distribution","update_stake_distribution","update_stake_distribution","upload_snapshot","upload_snapshot","upload_snapshot","upload_snapshot","verbose","verify_single_signature","verify_single_signature","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","message","message","message","nested_error","nested_error","nested_error","current_round_epoch","received_epoch","migration","provider","get_migrations","CertificateRecord","CertificateRecordProvider","CertificateRepository","DeleteCertificateProvider","DeleteEpochSettingProvider","DeleteSignerRegistrationRecordProvider","DeleteStakePoolProvider","EpochSettingProvider","EpochSettingRecord","EpochSettingStore","InsertCertificateRecordProvider","InsertOrReplaceSignerRegistrationRecordProvider","InsertOrReplaceStakePoolProvider","InsertSignedEntityRecordProvider","InsertSignerRecordProvider","OpenMessageRecord","OpenMessageRepository","OpenMessageWithSingleSignaturesRecord","SignedEntityRecord","SignedEntityRecordProvider","SignedEntityStoreAdapter","SignedEntityStorer","SignerRecord","SignerRecordProvider","SignerRegistrationRecord","SignerRegistrationRecordProvider","SignerRegistrationStore","SignerStore","SingleSignatureRecord","SingleSignatureRecordProvider","SingleSignatureRepository","StakePool","StakePoolProvider","StakePoolStore","UpdateEpochSettingProvider","UpdateSignerRecordProvider","UpdateSingleSignatureRecordProvider","aggregate_verification_key","artifact","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","beacon","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","certificate_id","certificate_id","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clean_epoch","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","create_certificate","create_many_certificates","create_open_message","create_single_signature","created_at","created_at","created_at","created_at","delete","delete","delete_by_ids","delete_certificates","epoch","epoch","epoch","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_all","get_all","get_all","get_all","get_all","get_all","get_by_certificate_id","get_by_certificate_id","get_by_certificates_ids","get_by_epoch","get_by_epoch","get_by_epoch","get_by_epoch","get_by_open_message_id","get_by_signed_entity_id","get_by_signed_entity_type","get_by_signer_id","get_by_signer_id_and_epoch","get_certificate","get_certificate_details","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_connection","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_definition","get_last_signed_entities_by_type","get_last_signed_entities_by_type","get_latest_certificates","get_master_certificate_for_epoch","get_open_message","get_open_message_with_single_signatures","get_projection","get_projection","get_projection","get_projection","get_projection","get_projection","get_projection","get_projection","get_projection","get_protocol_parameters","get_signed_entity","get_signed_entity","get_signed_entity_by_certificate_id","get_signed_entity_by_certificate_id","get_signed_entity_by_certificates_ids","get_signed_entity_by_certificates_ids","get_stakes","get_verification_keys","hydrate","hydrate","hydrate","hydrate","hydrate","hydrate","hydrate","hydrate","hydrate","initiated_at","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is_certified","is_certified","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lottery_indexes","message","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","open_message_id","open_message_id","open_message_id","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","parent_certificate_id","protocol_message","protocol_message","protocol_message","protocol_parameters","protocol_version","prune","prune","prune","prune_verification_keys","record_signer_id","record_signer_pool_ticker","registration_epoch_setting_id","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","save_protocol_parameters","save_stakes","save_verification_key","sealed_at","signature","signature","signed_entity_id","signed_entity_type","signed_entity_type","signed_entity_type","signer_id","signers","single_signatures","store_signed_entity","store_signed_entity","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_open_message","update_signed_entities","update_signed_entities","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","DependenciesBuilder","DependenciesBuilderError","DependencyContainer","InconsistentState","Initialization","MissingConfiguration","MultiSignerWrapper","Result","api_version_provider","api_version_provider","az","az","az","beacon_provider","beacon_provider","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","build_certifier_service","build_dependency_container","build_ticker_service","cardano_cli_runner","cast_from","cast_from","cast_from","certificate_pending_store","certificate_pending_store","certificate_repository","certificate_repository","certificate_verifier","certificate_verifier","certifier_service","certifier_service","chain_observer","chain_observer","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","config","configuration","create_aggregator_runner","create_event_store","create_genesis_container","create_http_routes","digester","digester","era_checker","era_checker","era_reader","era_reader","era_reader_adapter","event_transmitter","event_transmitter","event_transmitter_channel","fmt","fmt","from","from","from","from","from","genesis_verifier","genesis_verifier","get_api_version_provider","get_beacon_provider","get_cardano_cli_runner","get_certificate_pending_store","get_certificate_repository","get_certificate_verifier","get_certifier_service","get_chain_observer","get_era_checker","get_era_reader","get_event_transmitter","get_event_transmitter_receiver","get_event_transmitter_sender","get_genesis_verifier","get_immutable_cache_provider","get_immutable_digester","get_immutable_file_observer","get_logger","get_mithril_registerer","get_multi_signer","get_protocol_parameters_store","get_signable_builder_service","get_signed_entity_service","get_signed_entity_storer","get_signer_recorder","get_snapshot_uploader","get_snapshotter","get_sqlite_connection","get_stake_distribution_service","get_stake_store","get_ticker_service","get_verification_key_store","immutable_cache_provider","immutable_digester","immutable_file_observer","immutable_file_observer","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","mithril_registerer","multi_signer","multi_signer","new","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","protocol_parameters_store","protocol_parameters_store","provide","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","signable_builder_service","signable_builder_service","signed_entity_service","signed_entity_service","signed_entity_storer","signed_entity_storer","signer_recorder","signer_recorder","signer_registerer","signer_registration_round_opener","snapshot_uploader","snapshot_uploader","snapshotter","snapshotter","sqlite_connection","sqlite_connection","stake_distribution_service","stake_distribution_service","stake_store","stake_store","ticker_service","ticker_service","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vanish","verification_key_store","verification_key_store","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","error","message","OpenMessage","az","borrow","borrow_mut","cast_from","checked_as","checked_cast_from","clone","clone_into","created_at","epoch","eq","equivalent","equivalent","equivalent","equivalent","fmt","from","from","from","get_signers_id","into","into_any","into_any_arc","into_any_rc","is_certified","lossless_try_into","lossy_into","overflowing_as","overflowing_cast_from","protocol_message","saturating_as","saturating_cast_from","signed_entity_type","single_signatures","to_owned","try_from","try_into","type_id","type_name","unwrapped_as","unwrapped_cast_from","vzip","wrapping_as","wrapping_cast_from","Event","EventMessage","EventPersister","EventStore","TransmitterService","action","action","add_header","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone_into","content","content","created_at","event_id","fmt","from","from","from","from","from","get_projection","get_transmitter","headers","hydrate","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","persist","run","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","send_event_message","source","source","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","AlreadyCertified","BeaconTooOld","Busy","CertificateEpochGap","CertifierService","CertifierServiceError","Codec","CouldNotFindLastCertificate","MithrilCertifierService","MithrilSignedEntityService","MithrilStakeDistributionService","MithrilTickerService","NoParentCertificateFound","NotFound","OpenMessageAlreadyExists","SignedEntityService","StakeDistributionService","StakePoolDistributionServiceError","Technical","TickerService","Unavailable","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","create_artifact","create_artifact","create_certificate","create_certificate","create_open_message","create_open_message","fmt","fmt","fmt","fmt","from","from","from","from","from","from","get_certificate_by_hash","get_certificate_by_hash","get_current_epoch","get_current_epoch","get_current_immutable_beacon","get_current_immutable_beacon","get_last_signed_mithril_stake_distributions","get_last_signed_mithril_stake_distributions","get_last_signed_snapshots","get_last_signed_snapshots","get_latest_certificates","get_latest_certificates","get_open_message","get_open_message","get_signed_mithril_stake_distribution_by_id","get_signed_mithril_stake_distribution_by_id","get_signed_snapshot_by_id","get_signed_snapshot_by_id","get_stake_distribution","get_stake_distribution","inform_epoch","inform_epoch","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","provide","provide","register_single_signature","register_single_signature","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","technical_subsystem","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_stake_distribution","update_stake_distribution","verify_certificate_chain","verify_certificate_chain","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","certificate_epoch","current_epoch","error","message"],"q":[[0,"mithril_aggregator"],[1015,"mithril_aggregator::RuntimeError"],[1021,"mithril_aggregator::SignerRegistrationError"],[1023,"mithril_aggregator::database"],[1025,"mithril_aggregator::database::migration"],[1026,"mithril_aggregator::database::provider"],[2202,"mithril_aggregator::dependency_injection"],[2397,"mithril_aggregator::dependency_injection::DependenciesBuilderError"],[2399,"mithril_aggregator::entities"],[2444,"mithril_aggregator::event_store"],[2603,"mithril_aggregator::services"],[2828,"mithril_aggregator::services::CertifierServiceError"],[2830,"mithril_aggregator::services::StakePoolDistributionServiceError"]],"d":["Configuration structure dedicated to the AggregatorRuntime.","The runner responsibility is to expose a code API for the …","This trait is intended to allow mocking the …","The AggregatorRuntime responsibility is to create a state …","ArtifactBuilder is trait for building an artifact","Beacon error.","Store for CertificatePending.","Chain observer error.","Codec error.","Codec error.","Aggregator configuration","Mithril STM library returned an error.","Set when the snapshotter fails at creating a snapshot.","A Critical error means the Runtime stops and the software …","Default configuration with all the default values for …","","Dummy uploader for test purposes.","Snapshotter that does nothing. It is mainly used for test …","Different kinds of execution environments","Signer is already registered.","Signer is already registered.","Single signature already recorded.","Signer recorder failed.","Signer registration failed.","Signer registration failed.","Adapter to convert RegisterSignerMessage to Signer …","Uploader to GCP storage.","General error.","Gzip Snapshotter create a compressed file.","Errors that need the runtime to try again without changing …","Uploader to local storage.","LocalSnapshotUploader is a snapshot uploader working using …","Mithril Aggregator Node","Implementation of a SignerRegisterer","MultiSigner is the cryptographic engine in charge of …","MultiSignerImpl is an implementation of the MultiSigner","Production environment, minimum logging, maximum …","Error type for multi signer service.","ProtocolParameter store.","Store and get protocol parameters for given epoch.","An error that needs to re-initialize the state machine.","No signer registration round opened yet","Registration round for unexpected epoch","GCPSnapshotUploader is a snapshot uploader working using …","Error encountered or produced by the Runtime. This enum …","Signer recorder trait","Trait to register a signer","Error type for signer registerer service.","Represents the information needed to handle a signer …","Trait to open a signer registration round","Snapshotter error type.","SnapshotUploader represents a snapshot uploader interactor","Uploader needed to copy the snapshot once computed.","Define the ability to create snapshots.","Store error.","Store error.","Test environment, maximum logging, memory stores etc.","Adapter to turn CertificatePending instances into …","Adapter to spawn EpochSettingsMessage from EpochSettings …","No beacon available.","No clerk available.","No message available.","No protocol parameters available.","Signer was not registered.","Set when the snapshotter fails at uploading the snapshot.","Store for the VerificationKey.","Store and get signers verification keys for given epoch.","Method to trigger the conversion","Turn an entity instance into message.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a snapshot uploader from configuration settings.","Cardano CLI tool path","Path of the socket used by the Cardano CLI tool to …","","","","","","","","","","","","","","","","","","","","","","","","","","","Certifier inform new epoch","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Close a signer registration round","","Close the signer registration round of an epoch.","","","","","application main command","","Compute aggregate verification key from stake distribution","Compute aggregate verification key from stake distribution","Compute an artifact","Compute next stake distribution aggregate verification key","Compute next stake distribution aggregate verification key","Compute the protocol message","","Compute stake distribution aggregate verification key","Compute stake distribution aggregate verification key","Directory where configuration file is located","Create an artifact and persist it.","","Create multi-signature.","","Creates a multi signature from single signatures","Creates a multi signature from single signatures","Return the actual pending certificate from the multisigner.","","Create new open message","","Creates a protocol multi signer","Create a new Critical error","Perform one tick of the state machine.","Directory to store aggregator data (Certificates, …","database module. This module contains the entities …","Directory of the Cardano node files","Directory of the Cardano node store.","Directory of the Cardano node database","DB directory to snapshot","","","","Dependency injection module. This module provides tools to …","","","","Use the digest caching strategy","ImmutableDigesterCacheProvider default setting","Drop the multisigner’s actual pending certificate.","","Entities module","What kind of runtime environment the configuration is …","Execution environment","Registration round epoch","","","","","","","","","","","","","","","","Era reader adapter parameters","Era reader adapter type","Era reader adapter type","","","","Event Store module This module proposes tools to send …","execute command","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","","Returns the argument unchanged.","","","","Genesis verification key","Fetch the current CertificatePending if any.","","Return the current beacon from the chain","Return the current beacon from the chain","Get current beacon","","Retrieves the current non certified open message.","","Retrieves the current non certified open message for a …","","Get current open round if exists","","Return the last fake snapshot produced.","Return the last upload that was triggered.","","Check configuration and return a representation of the …","Get next protocol parameters","Get next protocol parameters","Get signers for the next epoch with their stake","","Get next stake distribution i.e. the stake distribution …","Get next stake distribution","Get protocol parameters","Get the saved ProtocolParameter for the given Epoch if any.","Get protocol parameters","","Build the server URL from configuration.","Get signers","Get signers","Get signers with stake","","Return the file of the SQLite stores. If the directory …","Get stake distribution","Get stake distribution","Return the actual state of the state machine.","Returns a HashMap of Signer indexed by PartyId for the …","","","Interval between each snapshot, in ms","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Check if a certificate chain is valid.","","Create a new KeepState error","get log level from parameters","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Cardano network","Cardano network","Cardano Network Magic number","MultiSignerImpl factory","Create a new instance of the Aggrergator Runner.","Create a new instance of the state machine.","MithrilSignerRegisterer factory","Create a new instance.","GCPSnapshotUploader factory","Snapshotter factory","Create a new instance of DumbSnapshotter.","Create a new instance.","Create an instance of ProtocolParameterStore.","Create a new instance.","Create a new instance of AggregatorConfig.","Create a sample configuration mainly for tests","Open a signer registration round","","Open the signer registration round of an epoch.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Protocol parameters","","","","","Pruning is deactivated on this store.","Prune all verification keys that are at or below the given …","","Record signer_id","Record pool ticker by id","Register a signer","","Remove and return the current CertificatePending if any.","Should the immutable cache be reset or not","ImmutableDigesterCacheProvider default setting","Launches an infinite loop ticking the state machine.","Run Interval is the interval between two runtime cycles in …","Run Mode","Same as the store retention limit but will never yield a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Save the given CertificatePending.","Store the given pending certificate.","","Save the given ProtocolParameter for the given Epoch.","","Save the verification key, for the given Signer for the …","","","","","Server listening IP","Server listening IP","Server listening port","Server listening port","Services","Create a new snapshot with the given archive name.","","","Bucket name where the snapshots are stored if …","Directory to store snapshot","Directory to store snapshot","Type of snapshot store to use","Type of snapshot uploader to use","Type of snapshot uploader to use","","","","Max number of records in stores. When new records are …","","","","","","","","","","","","Method to trigger the conversion.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Update the multisigner with the given beacon.","","Update current beacon","","Update the EraChecker with EraReader information.","","","","Update protocol parameters","Update protocol parameters","Update the multisigner with the protocol parameters from …","","Update stake distribution","Read the stake distribution from the blockchain and store …","Update stake distribution","","Upload a snapshot","Upload a snapshot","","","Verbosity level","Verify a single signature","Verify a single signature","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","error message","error message","error message","Eventual caught error","Eventual caught error","Eventual caught error","Epoch of the current round","Epoch of the received signer registration","Migration module","Aggregator related database providers","Get all the migrations required by this version of the …","Certificate record is the representation of a stored …","Simple CertificateRecord provider.","Database frontend API for Certificate queries.","Provider to remove old data from the certificate table","Provider to remove old data from the epoch_setting table","Provider to remove old data from the signer_registration …","Provider to remove old data from the stake_pool table","Simple EpochSettingRecord provider.","Settings for an epoch, including the protocol parameters.","Service to deal with epoch settings (read & write).","Query to insert the certificate record","Query to insert or replace a signer_registration record","Query to update the stake distribution","Query to insert the signed_entity record","Query to insert the signer record","OpenMessage","Open message repository","Open Message with associated single signatures if any.","SignedEntity record is the representation of a stored …","Simple SignedEntityRecord provider.","Service to deal with signed_entity (read & write).","Signed entity storer trait","Signer record is the representation of a stored signer.","Simple SignerRecord provider.","SignerRegistration record is the representation of a …","Simple SignerRegistrationRecord provider.","Service to deal with signer_registration (read & write).","Service to deal with signer (read & write).","SingleSignature record is the representation of a stored …","Simple SingleSignatureRecord provider.","Service to deal with single_signature (read & write).","Stake pool as read from Chain.","Simple StakePool provider.","Service to deal with stake pools (read & write).","Query to update the epoch setting","Query to update the signer record","Query to update the single_signature record","Aggregate verification key Note: used only if signature is …","Raw artifact (in JSON format).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Beacon used to produce the signed message","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Certificate id.","Certificate id for this signed entity.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Remove all the OpenMessageRecord for the strictly previous …","","","","","","","","","","","","","","","Create a new certificate in the database.","Create many certificates at once in the database.","Create a new OpenMessageRecord in the database.","Create a new Single Signature in database","Message creation datetime, it is set by the database.","Message creation datetime, it is set by the database.","Date and time when the signed_entity was created","Date and time when the single_signature was created","Delete the epoch setting data given the Epoch","Delete the epoch setting data given the Epoch","Delete the certificates with with the given ids.","Delete all the given certificates from the database","Epoch of creation of the certificate.","Epoch","Epoch","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get all CertificateRecords.","Get all EpochSettingRecords.","Get all SignedEntityRecords.","Get all SignerRecords.","Get all SignerRegistrationRecords.","Get all SingleSignatureRecords.","Get CertificateRecords for a given certificate id.","Get record for a given certificate_id.","Get records for a list of given certificates_ids.","Get CertificateRecords for a given Epoch.","Get EpochSettingRecords for a given Epoch for given …","Get SignerRegistrationRecords for a given Epoch.","Get StakePools for a given Epoch for given pool_ids.","Get SingleSignatureRecords for a given Open Message id.","Get SignedEntityRecords for a given signed_entity id.","Get SignedEntityRecords for a given signed entity type.","Get SignerRecords for a given signer id.","Get SignerRegistrationRecords for given signer id and …","Return the certificate corresponding to the given hash if …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get last signed entities by signed entity type","","Return the latest certificates.","Return the first certificate signed per epoch as the …","Return the latest OpenMessageRecord for the given Epoch …","Return an open message with its associated single …","","","","","","","","","","","Get signed entity type","","Get signed entity type by certificate id","","Get signed entities type by certificates ids","","","","","","","","","","","","","Date and time when the certificate was initiated","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Has this open message been converted into a certificate?","Has this message been converted into a Certificate?","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Lottery indexes","Message that is signed.","Create a new provider","Create a new instance","Create a new instance","Instantiate a new repository","Create a new provider","Create a new instance","Create a new instance","Create a new EpochSetting service","Instanciate service","Create a new provider","Create a new instance","Create a new SignedEntityStoreAdapter service","Create a new provider","Create a new instance","Create a new instance","Create a new SignerStore service","Create a new provider","Create a new instance","Create a new instance","Create a new SignerRegistrationStore service","Create a new provider","Create a new instance","Create a new SingleSignatureStoreAdapter service","Create a new provider","Create a new instance","Create a new instance","Create a new StakePool service","OpenMessage unique identifier","OpenMessage unique identifier","Open message id.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Parent Certificate id.","Structured message that is used to create the signed …","Message used by the Mithril Protocol","Message used by the Mithril Protocol","Protocol parameters.","Protocol Version (semver)","Prune the epoch setting data older than the given epoch.","Prune the epoch setting data older than the given epoch.","Prune the stake pools data older than the given epoch.","","","","Registration epoch setting id","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Date and time when the certificate was sealed","Signature of the certificate. Note: multi-signature if …","The STM single signature of the message","Signed entity id.","Type of message","Type of message","Signed entity type.","Signer id.","The list of the active signers with their stakes and …","associated single signatures","Store a signed entity","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Updates an OpenMessageRecord in the database.","Perform an update for all the given signed entities.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Dependencies container builder","Error that can occure during dependencies initialization …","DependencyManager handles the dependencies","The dependency has reached a state where dependencies are …","Unrecoverable system initialization failure","Configuration parameter missing for initialization.","MultiSignerWrapper wraps a MultiSigner","Result with the DependenciesBuilderError error.","API Version provider","API Version provider","","","","Beacon provider service.","Beacon provider service.","","","","","","","Create CertifierService service","Return an unconfigured DependencyContainer","Create TickerService instance.","Cardano CLI Runner for the ChainObserver","","","","Certificate pending store.","Certificate pending store.","Certificate repository.","Certificate store.","Certificate verifier service.","Certificate verifier service.","Certifier service","Certifier Service","Chain observer service.","Chain observer service.","","","","","","","Configuration structure.","Configuration parameters","Create the AggregatorRunner","Create dependencies for the EventStore task.","Create dependencies for genesis commands","Create the HTTP route instance","Digester service.","Digester service.","Era checker service","Era checker service","Era reader service","Era reader service","Adapter for EraReader","Event Transmitter Service","Event Transmitter Service","Event transmitter Channel Sender endpoint","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Genesis signature verifier service.","Genesis signature verifier service.","APIVersionProvider service","Return a BeaconProvider instance.","Return a CardanoCliRunner","Get a configured CertificatePendingStore.","Get a configured CertificateRepository.","CertificateVerifier service.","CertifierService service","Return a ChainObserver","EraReader service","EraReader service","TransmitterService service","Return the channel receiver setup for the EventStore. …","Return the EventMessage channel sender.","Return a ProtocolGenesisVerifier","Get an ImmutableFileDigestCacheProvider","Immutable digester.","Return a ImmutableFileObserver instance.","This method does not cache the logger since it is managed …","MithrilSignerRegisterer service","Get a configured multi signer","Get a configured ProtocolParametersStorer.","SignableBuilderService service","SignedEntityService service","SignedEntityStorer service","SignerRecorder service","Get a SnapshotUploader","Snapshotter service.","Get SQLite connection","StakeDistributionService service","Return a StakePoolStore","StakeDistributionService service","Get a configured VerificationKeyStorer.","Immutable cache provider service.","Immutable file digester service.","Immutable file observer service.","Immutable file observer service.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","Signer registerer service","Multisigner service.","Multisigner service.","Create a new clean dependency builder","","","","","","","Protocol parameter store.","Protocol parameter store.","","","","","","","","Signable Builder Service","Signable Builder Service","Signed Entity Service","Signed Entity Service","Signed Entity storer","Signed Entity storer","Signer Recorder","Signer Recorder","Signer registerer service","Signer registration round opener service","Snapshot uploader service.","Snapshot uploader service.","Snapshotter service.","Snapshotter service.","SQLite database connection","SQLite database connection This is not a real service but …","Stake Distribution Service","Stake Distribution Service","Stake Store used by the StakeDistributionService It shall …","Stake Store used by the StakeDistributionService It shall …","Ticker Service (TODO: remove BeaconProvider)","Ticker Service","","","","","","","","","","","","","","","","","","","","Remove the dependencies builder from memory to release Arc.","Verification key store.","Verification key store.","","","","","","","","","","Eventual nested error","Error context message","OpenMessage","","","","","","","","","Message creation datetime","Epoch","","","","","","","","Returns the argument unchanged.","","Gather all signers party_id for this open message","Calls U::from(self).","","","","Has this message been converted into a Certificate?","","","","","Message used by the Mithril Protocol","","","Type of message","associated single signatures","","","","","","","","","","","Event persisted in the Event Store.","Event that is sent from a thread to be persisted.","The EventPersister is the adapter to persist EventMessage …","EventMessage receiver service.","The transmitter service is used to allow inter process …","the action of the original EventMessage this Event …","The action represent the action that is going to be …","forge a new instance adding the given header","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","the content of the original EventMessage this Event …","JSON content of the message, its type is declared in the …","timestamp of event creation in the database.","Sequential number of the event, this is set by the …","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Clone the internal transmitter and return it.","Headers","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","Instanciate an EventPersister","Instanciate the EventMessage receiver service.","Instanciate a new Service by passing a MPSC transmitter.","Instanciate a new EventMessage.","","","","","","","","","","","Save an EventMessage in the database.","Launch the service. It runs until all the transmitters are …","","","","","","","","","","","Craft and send an EventMessage given the serializable data.","the source of the original EventMessage this Event …","The source of the message shall be composed of the name of …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The open message is already certified, no more single …","The given beacon is older than the current open message …","The stake distribution compute is in progress for this …","No certificate for this epoch","CertifierService","Errors dedicated to the CertifierService.","Codec error.","Could not verify certificate chain because could not find …","Mithril CertifierService implementation","Mithril ArtifactBuilder Service","Implementation of the stake distribution service.","MithrilTickerService","No parent certificate could be found, this certifier …","OpenMessage not found.","The given OpenMessage already exists","ArtifactBuilder Service trait","Responsible of synchronizing with Cardano stake …","Errors related to the StakeDistributionService.","Critical errors cannot be recovered.","Service trait with consistent business oriented API.","The stake distribution for the given Epoch is not …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create artifact for a signed entity type and a certificate","","Create a certificate if possible. If the pointed open …","","Create an open message at the given beacon. If the open …","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns a certificate from its hash.","","Return the current Epoch as read from the chain.","","Return the current Beacon used for …","","Return a list of signed Mithril stake distribution order …","","Return a list of signed snapshots order by creation date …","","Returns the list of the latest created certificates.","","Return the open message at the given Beacon. If the …","","Return a signed Mithril stake distribution","","Return a signed snapshot","","Return the stake distribution fot the given epoch.","","Inform the certifier I have detected a new epoch, it may …","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","instantiate the service","MithrilSignedEntityService factory","Create a new service instance","Instantiate a new service","","","","","","","","","","","","","","","Add a new single signature for the open message at the …","","","","","","","","","","","","","","Simple way to nest technical errors","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","This launches the stake distribution computation if not …","","Verify the certificate chain and epoch gap. This will …","","","","","","","","","","","","","","","","","","","","Epoch of the last issued certificate","Given current epoch","Eventual nested error","Error message"],"i":[0,0,0,0,0,39,0,53,39,53,0,39,54,42,0,0,0,0,0,39,53,39,53,39,53,0,19,54,0,42,19,0,0,0,0,0,18,0,0,0,42,53,53,0,0,0,0,0,0,0,0,0,0,0,39,53,18,0,0,39,39,39,39,39,54,0,0,187,188,17,17,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,6,6,6,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,79,15,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,17,18,6,19,20,21,22,17,18,6,19,20,21,22,17,20,190,24,79,15,17,20,17,17,17,166,32,186,166,166,79,15,166,166,17,79,15,79,15,166,32,79,15,79,15,32,42,43,6,0,17,6,20,21,44,45,20,0,18,6,19,6,20,79,15,0,6,20,22,18,19,22,18,18,18,18,19,19,19,19,22,22,22,22,6,6,20,18,6,19,0,17,17,18,6,19,20,39,39,42,42,21,53,53,22,54,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,39,39,39,42,42,21,53,53,53,22,54,54,17,17,18,6,61,62,79,15,166,32,79,15,79,15,191,24,45,44,62,6,166,32,166,32,166,32,166,76,32,62,6,166,166,166,32,6,166,32,43,74,68,17,21,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,79,15,42,17,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,6,21,6,32,15,43,24,44,83,84,45,61,62,68,21,6,190,24,79,15,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,6,39,42,53,54,62,74,68,81,81,191,24,61,6,20,43,6,17,6,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,61,79,15,76,62,74,68,18,6,19,6,20,6,20,0,170,84,45,6,6,20,20,6,20,39,53,54,6,17,18,6,19,20,21,22,39,42,53,54,189,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,79,15,166,32,79,15,17,17,166,32,79,15,166,79,32,15,7,44,95,83,17,166,32,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,189,187,188,32,15,43,24,44,95,83,84,45,61,62,68,17,18,6,19,20,39,42,21,53,22,54,192,193,194,192,193,194,195,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,103,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,100,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,100,103,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,99,100,101,102,103,104,105,106,100,101,102,103,104,105,106,107,107,99,108,101,102,103,106,109,112,113,107,100,101,102,100,110,101,103,104,105,106,114,101,101,101,101,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,100,110,101,101,102,103,104,105,106,114,115,116,117,118,119,120,115,117,117,115,116,119,121,120,117,117,118,119,107,107,115,125,113,116,126,109,117,127,118,128,129,119,130,112,120,131,121,132,133,115,125,113,116,126,109,117,127,118,128,129,119,130,112,120,131,121,132,133,169,134,107,107,99,99,100,110,101,102,103,104,105,106,114,136,169,134,169,134,169,134,137,138,100,110,101,102,103,104,105,106,114,100,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,107,136,99,134,142,138,108,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,101,102,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,106,100,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,101,102,106,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,100,100,101,102,100,100,109,112,133,138,142,142,106,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,136,137,138,100,100,106,103,101,102,103,106,100,102,169,134,100,101,102,103,104,105,106,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,99,169,134,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,115,125,113,107,116,126,109,136,99,117,127,134,118,128,129,142,119,130,112,138,120,131,108,121,132,133,137,100,110,101,102,103,104,105,106,114,0,0,0,150,150,150,0,0,143,77,143,77,150,143,77,143,77,150,143,77,150,143,143,143,143,143,77,150,143,77,143,77,143,77,143,77,143,77,143,77,150,143,77,150,77,143,143,143,143,143,143,77,143,77,143,77,143,143,77,143,150,150,143,77,150,150,150,143,77,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,77,143,77,150,143,77,150,143,77,150,143,77,150,143,77,150,143,77,150,143,143,77,143,143,77,150,143,77,150,143,77,150,143,77,150,143,77,150,143,77,143,77,143,77,143,77,77,77,143,77,143,77,143,77,143,77,143,77,143,77,150,143,77,150,143,77,150,143,77,150,143,77,150,143,77,150,143,77,150,143,143,77,143,77,150,143,77,150,143,77,150,196,196,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,176,157,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,157,157,176,157,176,176,157,176,178,147,158,157,176,158,157,176,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,178,147,158,157,176,178,147,158,157,176,178,147,158,157,178,147,176,178,147,158,157,176,178,147,158,157,158,176,157,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,176,178,147,158,157,182,182,183,182,0,0,182,182,0,0,0,0,182,182,182,0,0,0,183,0,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,168,180,144,181,144,181,182,182,183,183,181,180,185,184,182,183,144,181,146,184,146,184,168,180,168,180,144,181,144,181,168,180,168,180,171,185,144,181,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,181,180,185,184,182,183,181,180,185,184,182,183,182,183,144,181,181,180,185,184,182,183,181,180,185,184,182,183,183,182,183,181,180,185,184,182,183,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,171,185,144,181,181,180,185,184,182,183,181,180,185,184,182,183,181,180,185,184,182,183,197,197,198,198],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,2],[3,4],[5,5],[5,5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[6,[[11,[[8,[7]],[10,[9]]]]]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[12,[[14,[[10,[13]]]]]],[[15,12],[[14,[[10,[13]]]]]],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[17,17],[18,18],[6,6],[19,19],[20,20],[21,21],[22,22],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[17,[[10,[23]]]],[20,[[10,[23]]]],[[],[[14,[[10,[13]]]]]],[24,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[15,[[14,[[10,[13]]]]]],[17,[[11,[[27,[25,26]],28]]]],[20,[[11,[[27,[25,26]],28]]]],[[],5],0,[[],5],[[[30,[29]],31],[[14,[[10,[13]]]]]],[[32,[30,[29]],31],[[14,[[10,[13]]]]]],[33,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[34,[[14,[[10,[13]]]]]],[[15,34],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],0,[[34,33],[[14,[[10,[13]]]]]],[[15,34,33],[[14,[[10,[13]]]]]],[34,[[14,[[10,[13]]]]]],[[15,34],[[14,[[10,[13]]]]]],[35,[[14,[[10,[13]]]]]],[[32,35],[[14,[[10,[13]]]]]],[[36,34],[[14,[[10,[13]]]]]],[[15,36,34],[[14,[[10,[13]]]]]],[[34,37],[[14,[[10,[13]]]]]],[[15,34,37],[[14,[[10,[13]]]]]],[[32,[30,[29]],31],[[11,[38,39]]]],[[40,[16,[41]]],42],[43,[[11,[42]]]],0,0,0,0,0,0,[[],44],[[],45],[[],20],0,[46,[[11,[18]]]],[46,[[11,[6]]]],[46,[[11,[19]]]],0,0,[[],[[14,[[10,[13]]]]]],[15,[[14,[[10,[13]]]]]],0,0,0,0,[[18,18],47],[[19,19],47],[[22,22],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],[[],47],0,0,0,[48,[[11,[49,50]]]],[48,[[11,[49,50]]]],[48,[[11,[49,50]]]],0,[17,[[11,[[10,[9]]]]]],[[17,51],52],[[18,51],52],[[6,51],52],[[19,51],52],[[20,51],52],[[39,51],52],[[39,51],52],[[42,51],52],[[42,51],52],[[21,51],52],[[53,51],52],[[53,51],52],[[22,51],52],[[54,51],52],[[54,51],52],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[55,39],[56,39],[57,39],[[]],[[]],[41,42],[[]],[[]],[56,53],[55,53],[[]],[58,54],[[]],[59,[[11,[17,60]]]],[59,[[11,[17,60]]]],[40,[[11,[18]]]],0,[61,[[11,[[16,[1]],55]]]],[62,[[64,[[10,[63]]]]]],[[],[[14,[[10,[13]]]]]],[15,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[15,[[14,[[10,[13]]]]]],[34,[[14,[[10,[13]]]]]],[[15,34],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[24,[[14,[[10,[13]]]]]],[45,[[11,[[16,[0]],[10,[9]]]]]],[44,[[11,[[16,[25]],[10,[9]]]]]],[62,[[16,[65]]]],[6,[[11,[66,28]]]],[[],[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[12,[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[[62,12],[[14,[[10,[13]]]]]],[6,25],[[],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[6,67],[[],[[14,[[10,[13]]]]]],[32,[[14,[[10,[13]]]]]],[43,25],[12,[[14,[[10,[13]]]]]],[[68,12],[[14,[[10,[13]]]]]],[[],[[16,[69]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[36,[[14,[[10,[13]]]]]],[[15,36],[[14,[[10,[13]]]]]],[[40,[16,[41]]],42],[17,73],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[[8,[74]],[8,[75]],[8,[76]]],32],[[[8,[77]]],15],[[78,[16,[0]],[8,[79]]],[[11,[43,42]]]],[[[8,[80]],[8,[74]],[8,[81]],[16,[82]]],24],[[],44],[[[10,[0]],25],83],[[67,67],[[85,[84]]]],[[],45],[[[10,[63]]],61],[[[10,[63]],[16,[65]]],62],[[[10,[63]]],68],[[82,66,86],21],[[],6],[[12,87],[[14,[[10,[13]]]]]],[[24,12,87],[[14,[[10,[13]]]]]],[36,[[14,[[10,[13]]]]]],[[15,36],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[88],[88],[88],[88],[62,[[14,[[10,[13]]]]]],[12,[[14,[[10,[13]]]]]],[[68,12],[[14,[[10,[13]]]]]],[25,[[14,[[10,[13]]]]]],[[25,[16,[25]]],[[14,[[10,[13]]]]]],[[12,89],[[14,[[10,[13]]]]]],[[24,12,89],[[14,[[10,[13]]]]]],[61,[[11,[[16,[1]],55]]]],0,0,[43,[[11,[42]]]],0,0,[6,[[16,[82]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[61,1],[[11,[55]]]],[1,[[14,[[10,[13]]]]]],[[15,1],[[14,[[10,[13]]]]]],[[12,90],[[14,[[10,[13]]]]]],[[62,12,90],[[14,[[10,[13]]]]]],[[12,29],[[14,[[10,[13]]]]]],[[68,12,29],[[14,[[10,[13]]]]]],[[18,91],11],[[6,91],11],[[19,91],11],0,0,0,0,0,[40,[[11,[0,54]]]],[[84,40],[[11,[0,54]]]],[[45,40],[[11,[0,54]]]],0,0,0,0,0,0,[39,[[16,[9]]]],[53,[[16,[9]]]],[54,[[16,[9]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],25],[[],25],[[],25],[[],25],[92,[[85,[89]]]],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[36,[[14,[[10,[13]]]]]],[[15,36],[[14,[[10,[13]]]]]],[36,[[14,[[10,[13]]]]]],[[32,36],[[14,[[10,[13]]]]]],[36,[[14,[[10,[13]]]]]],[[15,36],[[14,[[10,[13]]]]]],[[17,59],[[11,[60]]]],[[17,59],[[11,[60]]]],[31,[[14,[[10,[13]]]]]],[[32,31],[[14,[[10,[13]]]]]],[36,[[14,[[10,[13]]]]]],[[15,36],[[14,[[10,[13]]]]]],[94,[[14,[[10,[13]]]]]],[36,[[14,[[10,[13]]]]]],[[32,94],[[14,[[10,[13]]]]]],[[15,36],[[14,[[10,[13]]]]]],[86,[[14,[[10,[13]]]]]],[[44,86],[[14,[[10,[13]]]]]],[[95,86],[[14,[[10,[13]]]]]],[[83,86],[[14,[[10,[13]]]]]],0,[[37,96],[[14,[[10,[13]]]]]],[[32,37,96],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,[[],[[98,[97]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[99,12],[[85,[65]]]],[100,100],[101,101],[102,102],[103,103],[104,104],[105,105],[106,106],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[107,33],[[85,[33]]]],[[107,[98,[33]]],[[85,[[98,[33]]]]]],[[99,12,34,37],[[85,[101]]]],[[108,96,101],[[11,[106,41]]]],0,0,0,0,[[109,12],[[11,[[111,[110]],41]]]],[[112,12],[[11,[[111,[105]],41]]]],[[113,[30,[40]]],[[85,[[111,[100]]]]]],[[107,[30,[33]]],85],0,0,0,[[100,100],47],[[110,110],47],[[101,101],47],[[103,103],47],[[104,104],47],[[105,105],47],[[106,106],47],[[114,114],47],[[],47],[[],47],[[],47],[[],47],[[100,51],52],[[110,51],52],[[101,51],52],[[102,51],52],[[103,51],52],[[104,51],52],[[105,51],52],[[106,51],52],[[114,51],52],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[33,100],[[]],[102,101],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[115,[[85,[[111,[100]]]]]],[116,[[11,[[111,[110]],41]]]],[117,[[11,[[111,[103]],41]]]],[118,[[11,[[111,[104]],41]]]],[119,[[11,[[111,[105]],41]]]],[120,[[11,[[111,[106]],41]]]],[[115,40],[[85,[[111,[100]]]]]],[[117,40],[[11,[[111,[103]],41]]]],[[117,[30,[40]]],[[11,[[111,[103]],41]]]],[[115,12],[[85,[[111,[100]]]]]],[[116,12],[[11,[[111,[110]],41]]]],[[119,12],[[11,[[111,[105]],41]]]],[[121,12],[[11,[[111,[114]],41]]]],[[120,122],[[11,[[111,[106]],41]]]],[[117,40],[[11,[[111,[103]],41]]]],[[117,123],[[11,[[111,[103]],41]]]],[[118,25],[[11,[[111,[104]],41]]]],[[119,25,12],[[11,[[111,[105]],41]]]],[[107,40],[[85,[[16,[33]]]]]],[[107,40],[[14,[[10,[13]]]]]],[115,124],[125,124],[113,124],[116,124],[126,124],[109,124],[117,124],[127,124],[118,124],[128,124],[129,124],[119,124],[130,124],[112,124],[120,124],[131,124],[121,124],[132,124],[133,124],[[115,40],25],[[125,40],25],[[113,40],25],[[116,40],25],[[126,40],25],[[109,40],25],[[117,40],25],[[127,40],25],[[118,40],25],[[128,40],25],[[129,40],25],[[119,40],25],[[130,40],25],[[112,40],25],[[120,40],25],[[131,40],25],[[121,40],25],[[132,40],25],[[133,40],25],[[123,65],[[14,[[10,[13]]]]]],[[134,123,65],[[14,[[10,[13]]]]]],[[107,65],[[85,[[98,[33]]]]]],[[107,12],[[85,[[16,[33]]]]]],[[99,34],[[85,[[16,[101]]]]]],[[99,34],[[85,[[16,[102]]]]]],[[],135],[[],135],[[],135],[[],135],[[],135],[[],135],[[],135],[[],135],[[],135],[[136,12],[[14,[[10,[13]]]]]],[40,[[14,[[10,[13]]]]]],[[134,40],[[14,[[10,[13]]]]]],[40,[[14,[[10,[13]]]]]],[[134,40],[[14,[[10,[13]]]]]],[[[30,[40]]],[[14,[[10,[13]]]]]],[[134,[30,[40]]],[[14,[[10,[13]]]]]],[[137,12],[[14,[[10,[13]]]]]],[[138,12],[[14,[[10,[13]]]]]],[139,[[11,[100,140]]]],[139,[[11,[110,140]]]],[139,[[11,[101,140]]]],[139,[[11,[102,140]]]],[139,[[11,[103,140]]]],[139,[[11,[104,140]]]],[139,[[11,[105,140]]]],[139,[[11,[106,140]]]],[139,[[11,[114,140]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],0,0,[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[124,115],[124,125],[124,113],[[[8,[[141,[124]]]]],107],[124,116],[124,126],[124,109],[[[8,[[141,[124]]]],[16,[82]]],136],[[[8,[[141,[124]]]]],99],[124,117],[124,127],[[[8,[[141,[124]]]]],134],[124,118],[124,128],[124,129],[[[8,[[141,[124]]]]],142],[124,119],[124,130],[124,112],[[[8,[[141,[124]]]]],138],[124,120],[124,131],[[[8,[[141,[124]]]]],108],[124,121],[124,132],[124,133],[[[8,[[141,[124]]]],[16,[82]]],137],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,[[109,12],[[11,[[111,[110]],41]]]],[[112,12],[[11,[[111,[105]],41]]]],[[133,12],[[11,[[111,[114]],41]]]],[[138,12],[[14,[[10,[13]]]]]],[[142,25],[[14,[[10,[13]]]]]],[[142,25,[16,[25]]],[[14,[[10,[13]]]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[136,12,90],[[14,[[10,[13]]]]]],[[137,12,87],[[14,[[10,[13]]]]]],[[138,12,29],[[14,[[10,[13]]]]]],0,0,0,0,0,0,0,0,0,0,[103,[[14,[[10,[13]]]]]],[[134,103],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[99,101],[[85,[101]]]],[[[98,[103]]],[[14,[[10,[13]]]]]],[[134,[98,[103]]],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[143,[[145,[[8,[144]]]]]],[143,[[145,[77]]]],[143,[[145,[[8,[146]]]]]],0,[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],0,0,[143,[[145,[43]]]],[143,[[145,[147]]]],[143,[[145,[0]]]],[143,[[145,[[0,[148,149]]]]]],0,0,0,0,0,0,0,0,0,0,[[150,51],52],[[150,51],52],[[]],[[]],[[]],[41,150],[28,150],0,0,[143,[[145,[[8,[151]]]]]],[143,[[145,[[8,[152]]]]]],[143,[[145,[[10,[153]]]]]],[143,[[145,[[8,[61]]]]]],[143,[[145,[[8,[107]]]]]],[143,[[145,[[8,[154]]]]]],[143,[[145,[[8,[144]]]]]],[143,[[145,[[8,[80]]]]]],[143,[[145,[[8,[155]]]]]],[143,[[145,[[8,[156]]]]]],[143,[[145,[[8,[[158,[157]]]]]]]],[143,[[145,[[159,[157]]]]]],[143,[[145,[[160,[157]]]]]],[143,[[145,[[8,[161]]]]]],[143,[[145,[[8,[162]]]]]],[143,[[145,[[8,[163]]]]]],[143,[[145,[[8,[164]]]]]],[143,[[145,[165]]]],[143,[[145,[[8,[24]]]]]],[143,[[145,[[8,[[64,[166]]]]]]]],[143,[[145,[[8,[76]]]]]],[143,[[145,[[8,[167]]]]]],[143,[[145,[[8,[168]]]]]],[143,[[145,[[8,[169]]]]]],[143,[[145,[[8,[81]]]]]],[143,[[145,[[8,[7]]]]]],[143,[[145,[[8,[170]]]]]],[143,[[145,[[8,[[141,[124]]]]]]]],[143,[[145,[[8,[171]]]]]],[143,[[145,[[8,[137]]]]]],[143,[[145,[[8,[146]]]]]],[143,[[145,[[8,[74]]]]]],0,0,0,0,[[]],[[]],[[]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[[],16],[[],16],[[],16],[[]],[[]],[[]],0,0,0,[6,143],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[88],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],25],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],93],[[],93],[[],93],[[],40],[[],40],[[],40],[[]],[[]],[[]],[[]],[[]],[[]],[143],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[]],[[]],[[]],[[]],[[],16],[[],16],[35,35],[[]],0,0,[[35,35],47],[[],47],[[],47],[[],47],[[],47],[[35,51],52],[102,35],[[]],[101,35],[35,[[98,[172]]]],[[]],[[[10,[70]]],[[10,[71,70]]]],[8,[[8,[71]]]],[72,[[72,[71]]]],0,[[],16],[[]],[[]],[[]],0,[[]],[[]],0,0,[[]],[[],11],[[],11],[[],93],[[],40],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,[[157,40,40],157],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[157,157],[[]],0,0,0,0,[[157,51],52],[[]],[[]],[[]],[[]],[[]],[[],135],[[[158,[[0,[173,174,175]]]]],[[160,[[0,[173,174,175]]]]]],0,[139,[[11,[176,140]]]],[[]],[[]],[[]],[[]],[[]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[[],16],[[],16],[[],16],[[],16],[[],16],[[]],[[]],[[]],[[]],[[]],[[[8,[[177,[124]]]]],178],[[[159,[157]]],147],[[[160,[[0,[173,174,175]]]]],[[158,[[0,[173,174,175]]]]]],[[40,40,40],157],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[178,157],[[11,[176,41]]]],[[147,[16,[67]]],[[11,[[10,[9]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[158,[157]],40,40,179,98],[[11,[25]]]],0,0,[[]],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],93],[[],93],[[],93],[[],93],[[],93],[[],40],[[],40],[[],40],[[],40],[[],40],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[34,33],[[14,[[10,[13]]]]]],[[180,34,33],[[14,[[10,[13]]]]]],[34,[[14,[[10,[13]]]]]],[[181,34],[[14,[[10,[13]]]]]],[[34,37],[[14,[[10,[13]]]]]],[[181,34,37],[[14,[[10,[13]]]]]],[[182,51],52],[[182,51],52],[[183,51],52],[[183,51],52],[[]],[[]],[[]],[[]],[[]],[[]],[40,[[14,[[10,[13]]]]]],[[181,40],[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[184,[[14,[[10,[13]]]]]],[[],[[14,[[10,[13]]]]]],[184,[[14,[[10,[13]]]]]],[65,[[14,[[10,[13]]]]]],[[180,65],[[14,[[10,[13]]]]]],[65,[[14,[[10,[13]]]]]],[[180,65],[[14,[[10,[13]]]]]],[65,[[14,[[10,[13]]]]]],[[181,65],[[14,[[10,[13]]]]]],[34,[[14,[[10,[13]]]]]],[[181,34],[[14,[[10,[13]]]]]],[40,[[14,[[10,[13]]]]]],[[180,40],[[14,[[10,[13]]]]]],[40,[[14,[[10,[13]]]]]],[[180,40],[[14,[[10,[13]]]]]],[12,[[14,[[10,[13]]]]]],[[185,12],[[14,[[10,[13]]]]]],[12,[[14,[[10,[13]]]]]],[[181,12],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[[[10,[70]]],[[10,[71,70]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[8,[[8,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[72,[[72,[71]]]],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[99]],[8,[108]],[8,[107]],[8,[154]],[8,[161]],[8,[[64,[166]]]],165],181],[[[8,[169]],[8,[186]],[8,[186]]],180],[[[8,[137]],[8,[80]]],185],[[[8,[80]],[8,[164]],66],184],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[88],[88],[[34,96],[[14,[[10,[13]]]]]],[[181,34,96],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[41,[[10,[183]]]],[[],25],[[],25],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[41,[[11,[183]]]],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],93],[[],93],[[],93],[[],93],[[],93],[[],93],[[],40],[[],40],[[],40],[[],40],[[],40],[[],40],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[[14,[[10,[13]]]]]],[185,[[14,[[10,[13]]]]]],[12,[[14,[[10,[13]]]]]],[[181,12],[[14,[[10,[13]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0],"c":[],"p":[[3,"CertificatePending"],[3,"CertificatePendingMessage"],[3,"EpochSettings"],[3,"EpochSettingsMessage"],[3,"Command"],[3,"Configuration"],[8,"SnapshotUploader"],[3,"Arc"],[8,"Error"],[3,"Box"],[4,"Result"],[3,"Epoch"],[8,"Future"],[3,"Pin"],[3,"AggregatorRunner"],[4,"Option"],[3,"MainOpts"],[4,"ExecutionEnvironment"],[4,"SnapshotUploaderType"],[3,"DefaultConfiguration"],[3,"AggregatorConfig"],[3,"SignerRegistrationRound"],[8,"Source"],[3,"MithrilSignerRegisterer"],[3,"String"],[3,"Value"],[6,"Map"],[4,"ConfigError"],[3,"SignerWithStake"],[15,"slice"],[6,"ProtocolParameters"],[3,"MultiSignerImpl"],[3,"Certificate"],[4,"SignedEntityType"],[3,"OpenMessage"],[3,"Beacon"],[3,"ProtocolMessage"],[3,"MultiSigner"],[4,"ProtocolError"],[15,"str"],[6,"StdError"],[4,"RuntimeError"],[3,"AggregatorRuntime"],[3,"DumbSnapshotUploader"],[3,"DumbSnapshotter"],[8,"Deserializer"],[15,"bool"],[8,"Serializer"],[3,"Ok"],[3,"Error"],[3,"Formatter"],[6,"Result"],[4,"SignerRegistrationError"],[4,"SnapshotError"],[4,"StoreError"],[6,"ProtocolRegistrationError"],[4,"EpochError"],[3,"Error"],[3,"ArgMatches"],[6,"Error"],[3,"CertificatePendingStore"],[3,"ProtocolParametersStore"],[8,"StoreAdapter"],[3,"RwLock"],[15,"usize"],[4,"CardanoNetwork"],[3,"PathBuf"],[3,"VerificationKeyStore"],[3,"Id"],[3,"Global"],[8,"Any"],[3,"Rc"],[4,"Level"],[8,"VerificationKeyStorer"],[8,"StakeStorer"],[8,"ProtocolParametersStorer"],[3,"DependencyContainer"],[3,"Duration"],[8,"AggregatorRunnerTrait"],[8,"ChainObserver"],[8,"SignerRecorder"],[15,"u64"],[3,"RemoteSnapshotUploader"],[3,"GzipSnapshotter"],[6,"StdResult"],[3,"Path"],[6,"StakeDistribution"],[3,"Demand"],[3,"Signer"],[3,"ProtocolParameters"],[8,"Serializer"],[3,"RegisterSignerMessage"],[3,"TypeId"],[6,"ProtocolStakeDistribution"],[3,"LocalSnapshotUploader"],[3,"SingleSignatures"],[3,"SqlMigration"],[3,"Vec"],[3,"OpenMessageRepository"],[3,"CertificateRecord"],[3,"OpenMessageRecord"],[3,"OpenMessageWithSingleSignaturesRecord"],[3,"SignedEntityRecord"],[3,"SignerRecord"],[3,"SignerRegistrationRecord"],[3,"SingleSignatureRecord"],[3,"CertificateRepository"],[3,"SingleSignatureRepository"],[3,"DeleteEpochSettingProvider"],[3,"EpochSettingRecord"],[3,"EntityCursor"],[3,"DeleteSignerRegistrationRecordProvider"],[3,"DeleteCertificateProvider"],[3,"StakePool"],[3,"CertificateRecordProvider"],[3,"EpochSettingProvider"],[3,"SignedEntityRecordProvider"],[3,"SignerRecordProvider"],[3,"SignerRegistrationRecordProvider"],[3,"SingleSignatureRecordProvider"],[3,"StakePoolProvider"],[3,"Uuid"],[4,"SignedEntityTypeDiscriminants"],[3,"Connection"],[3,"InsertCertificateRecordProvider"],[3,"UpdateEpochSettingProvider"],[3,"InsertSignedEntityRecordProvider"],[3,"InsertSignerRecordProvider"],[3,"UpdateSignerRecordProvider"],[3,"InsertOrReplaceSignerRegistrationRecordProvider"],[3,"UpdateSingleSignatureRecordProvider"],[3,"InsertOrReplaceStakePoolProvider"],[3,"DeleteStakePoolProvider"],[3,"SignedEntityStoreAdapter"],[3,"Projection"],[3,"EpochSettingStore"],[3,"StakePoolStore"],[3,"SignerRegistrationStore"],[3,"Row"],[4,"HydrationError"],[3,"Mutex"],[3,"SignerStore"],[3,"DependenciesBuilder"],[8,"CertifierService"],[6,"Result"],[8,"TickerService"],[3,"EventStore"],[8,"Filter"],[8,"Clone"],[4,"DependenciesBuilderError"],[3,"APIVersionProvider"],[8,"BeaconProvider"],[3,"CardanoCliRunner"],[8,"CertificateVerifier"],[3,"EraChecker"],[3,"EraReader"],[3,"EventMessage"],[3,"TransmitterService"],[3,"UnboundedReceiver"],[3,"UnboundedSender"],[3,"ProtocolGenesisVerifier"],[8,"ImmutableFileDigestCacheProvider"],[8,"ImmutableDigester"],[8,"ImmutableFileObserver"],[3,"Logger"],[8,"MultiSigner"],[8,"SignableBuilderService"],[8,"SignedEntityService"],[8,"SignedEntityStorer"],[8,"Snapshotter"],[8,"StakeDistributionService"],[6,"PartyId"],[8,"Debug"],[8,"Sync"],[8,"Send"],[3,"Event"],[3,"Mutex"],[3,"EventPersister"],[8,"Serialize"],[3,"MithrilSignedEntityService"],[3,"MithrilCertifierService"],[4,"CertifierServiceError"],[4,"StakePoolDistributionServiceError"],[3,"MithrilTickerService"],[3,"MithrilStakeDistributionService"],[8,"ArtifactBuilder"],[3,"ToCertificatePendingMessageAdapter"],[3,"ToEpochSettingsMessageAdapter"],[3,"FromRegisterSignerAdapter"],[8,"SignerRegistrationRoundOpener"],[8,"SignerRegisterer"],[13,"KeepState"],[13,"Critical"],[13,"ReInit"],[13,"RegistrationRoundUnexpectedEpoch"],[13,"Initialization"],[13,"CertificateEpochGap"],[13,"Technical"]]},\ +"mithril_client":{"doc":"Define everything necessary to list, download, and …","t":"DDDDDLALLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLAMMAMMMLLLLLLLLLLLLLLLLLMMLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLAMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLIDENDDNNNNDENLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMAANNEDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNEDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDMLLLLMMLLMLLLLLLLLLLMLLLLLMMLLLLLMMLLLLLLLLLDNNNNNNNDIENIELLLLLLLLLLLLLLLLLLLLLLLLLLKKLLLLLLLLLLLLLLLLLLLLLLLLLLKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMNDENNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMM","n":["FromCertificateMessageAdapter","FromSnapshotMessageAdapter","MithrilStakeDistributionListItem","SnapshotFieldItem","SnapshotListItem","adapt","aggregator_client","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","certificate_hash","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone_into","clone_into","clone_into","commands","created_at","created_at","dependencies","digest","epoch","epoch","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","erased_serialize","erased_serialize","field_name","field_value","fmt","fmt","fmt","from","from","from","from","from","from","from","hash","immutable_file_number","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","network","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","partial_cmp","partial_cmp","partial_cmp","row","row","row","row","row","row","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","serialize","serialize","services","size","title","title","title","to_owned","to_owned","to_owned","total_locations","try_adapt","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","utils","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","AggregatorClient","AggregatorHTTPClient","AggregatorHTTPClientError","ApiVersionMismatch","CertificateClient","MithrilStakeDistributionClient","NoWorkingLocation","RemoteServerLogical","RemoteServerTechnical","RemoteServerUnreachable","SnapshotClient","SnapshotClientError","SubsystemError","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cell","cell","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","download","download","download","fmt","fmt","fmt","fmt","from","from","from","from","from","from","get","get","get_certificate_details","get_content","get_content","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","list","list","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","probe","probe","provide","provide","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","show","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","error","message","digest","locations","mithril_stake_distribution","snapshot","Download","List","MithrilStakeDistributionCommands","MithrilStakeDistributionDownloadCommand","MithrilStakeDistributionListCommand","augment_args","augment_args","augment_args_for_update","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","az","az","az","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone_into","clone_into","clone_into","command","command","command_for_update","command_for_update","execute","execute","execute","fmt","fmt","fmt","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","group_id","group_id","has_subcommand","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","Download","List","Show","SnapshotCommands","SnapshotDownloadCommand","SnapshotListCommand","SnapshotShowCommand","augment_args","augment_args","augment_args","augment_args_for_update","augment_args_for_update","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","az","az","az","az","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","command","command","command","command_for_update","command_for_update","command_for_update","execute","execute","execute","execute","fmt","fmt","fmt","fmt","from","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","group_id","group_id","group_id","has_subcommand","into","into","into","into","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","DependenciesBuilder","aggregator_client","az","borrow","borrow_mut","cast_from","certificate_client","certificate_verifier","checked_as","checked_cast_from","config","from","get_aggregator_client","get_certificate_client","get_certificate_verifier","get_immutable_digester","get_logger","get_mithril_stake_distribution_client","get_mithril_stake_distribution_service","get_snapshot_client","get_snapshot_service","immutable_digester","into","into_any","into_any_rc","lossless_try_into","lossy_into","mithril_stake_distribution_client","mithril_stake_distribution_service","new","overflowing_as","overflowing_cast_from","saturating_as","saturating_cast_from","snapshot_client","snapshot_service","try_from","try_into","type_id","type_name","unwrapped_as","unwrapped_cast_from","vzip","wrapping_as","wrapping_cast_from","AppMithrilStakeDistributionService","CertificateNotFound","CouldNotFindCertificate","CouldNotFindStakeDistribution","CouldNotVerifySnapshot","CouldNotVerifyStakeDistribution","InvalidParameters","InvalidParameters","MithrilClientSnapshotService","MithrilStakeDistributionService","MithrilStakeDistributionServiceError","SnapshotNotFound","SnapshotService","SnapshotServiceError","az","az","az","az","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cell","cell","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","download","download","download","download","fmt","fmt","fmt","fmt","from","from","from","from","into","into","into","into","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","list","list","list","list","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","provide","provide","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","show","show","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","certificate_hash","context","context","error","hash","context","digest","error","path","NotEnoughSpace","SnapshotUnpacker","SnapshotUnpackerError","UnpackDirectoryAlreadyExists","UnpackDirectoryIsNotWritable","UnpackFailed","az","az","borrow","borrow","borrow_mut","borrow_mut","cast_from","cast_from","cell","check_prerequisites","checked_as","checked_as","checked_cast_from","checked_cast_from","default","fmt","fmt","from","from","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossy_into","lossy_into","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","provide","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","to_string","try_from","try_from","try_into","try_into","type_id","type_id","type_name","type_name","unpack_snapshot","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","archive_size","dirpath","error","filepath","left_space","pathdir"],"q":[[0,"mithril_client"],[202,"mithril_client::aggregator_client"],[398,"mithril_client::aggregator_client::AggregatorHTTPClientError"],[400,"mithril_client::aggregator_client::SnapshotClientError"],[402,"mithril_client::commands"],[404,"mithril_client::commands::mithril_stake_distribution"],[527,"mithril_client::commands::snapshot"],[692,"mithril_client::dependencies"],[737,"mithril_client::services"],[877,"mithril_client::services::MithrilStakeDistributionServiceError"],[882,"mithril_client::services::SnapshotServiceError"],[886,"mithril_client::utils"],[952,"mithril_client::utils::SnapshotUnpackerError"]],"d":["Adapter to convert CertificateMessage to Certificate …","Adapter to convert SnapshotMessage to …","Item to display Mithril Stake Distribution lines in a …","SnapshotFieldItem represents a field of a snapshot item …","SnapshotListItem represents a snapshot list item from an …","Method to trigger the conversion","Transport layers to the Aggregator nodes","","","","","","","","","","","","","","","","","","","","","Hash of the associated certificate","","","","","","","","","","","","","","","","","Command module This module holds the subcommands that can …","Date and time at which the snapshot was created","Date and time at which the Mithril Stake Distribution was …","Dependency manager for the client","Digest that is signed by the signer participants","Cardano epoch","Epoch at which the Mithril Stake Distribution is created","","","","","","","","","","","","","","","","","","Field name","Field value","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Hash of the Mithril Stake Distribution (different from the …","Cardano immutable file number","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","Cardano Network name","SnapshotListItem factory","SnapshotFieldItem factory","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Services This module contains the different services tied …","Size of the snapshot file in Bytes","","","","","","","Number of locations where the binary content of the …","Method to trigger the conversion","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Utilities module This module contains tools needed mostly …","","","","","","","","","","","","","","","","API that defines a client for the Aggregator","Responsible of HTTP transport and API version check.","Error tied with the Aggregator client","Error raised when the server API version mismatch the …","Aggregator client for the Certificate","HTTP client for MithrilStakeDistribution API from the …","Download location does not work","Error raised when querying the aggregator returned a 4XX …","Error raised when querying the aggregator returned a 5XX …","Error raised when the aggregator can’t be reached.","Aggregator client for the snapshot artifact","Error for the Snapshot client","HTTP subsystem error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Download large files on the disk","","Download the snapshot identified by the given snapshot in …","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a single certificate full information from the …","Download the given stake distribution. If it cannot be …","","Get the content back from the Aggregator, the URL is a …","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","Fetch a list of signed MithrilStakeDistribution","Return a list of available snapshots","","","","","","","","","","","","","Constructor","AggregatorHTTPClient factory","Constructor","constructor","","","","","","","","","","","","","Test if the given URL points to a valid location & …","","","","","","","","","","","","","","","","Return a snapshot based on the given digest (list to get …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Nested error","Error context","given digest","list of locations tried","Commands for the Mithril Stake Distribution artifact","Commands for the snapshot artifact","Download and verify the given Mithril Stake Distribution","List certified stake distributions","Mithril Stake Distribution management (alias: msd)","Download and verify a Mithril Stake Distribution …","Mithril stake distribution LIST command","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Main command execution","Main command execution","Execute Mithril stake distribution command","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Download the snapshot and verify the certificate","List available snapshots","Show detailed informations about a snapshot","Snapshot management","Clap command to download the snapshot and verify the …","Clap command to list existing snapshots","Clap command to show a given snapshot","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Command execution","Main command execution","Snapshot Show command","Execute snapshot command","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Dependencies builder","HTTP Aggregator client","","","","","CertificateClient","CertificateVerifier","","","Configuration","Returns the argument unchanged.","Get a clone of the AggregatorClient dependency","Get a clone of the CertificateClient dependency","Get a clone of the CertificateVerifier dependency","Get a clone of the ImmutableDigester dependency","Return an instance of the logger. Since the logger is a …","Get a clone of the SnapshotClient dependency","Get a clone of the MithrilStakeDistributionService …","Get a clone of the SnapshotClient dependency","Get a clone of the SnapshotService dependency","ImmutableDigester","Calls U::from(self).","","","","","MithrilStakeDistributionClient","MithrilStakeDistributionService","Constructor","","","","","SnapshotClient","SnapshotService","","","","","","","","","","Service responsible of the MithrilStakeDistribution …","Associated certificate not found","The given certificate could not be found, contains the …","Could not find the given stake distribution","Error raised when the certificate verification failed for …","When certificate cannot be verified","The configuration has invalid or missing parameters","The configuration has invalid or missing parameters","Service used by the Command to perform business oriented …","Definition of the service responsible of Mithril Stake …","Errors related to the StakeDistributionService","The given identifier does not link to an existing snapshot.","SnapshotService","SnapshotService related errors.","","","","","","","","","","","","","","","","","","","","","","","","","","","Download and verify the specified stake distribution","Download and verify the snapshot identified by the given …","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","Return a list of the certified Mithril stake distributions","Return the list of the snapshots stored by the Aggregator.","","","","","","","","","","","Constructor","Create a new instance of the service.","","","","","","","","","","","","","","","","","","","Show details of the snapshot identified by the given …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Associated certificate","Context","Error context","Eventual nested error","StakeDistribution identifier","Error context","snapshot digest","Eventual nested error","The path of the downloaded archive","Not enough space on the disk. There should be at least 3.5 …","Check and unpack a downloaded archive in a given directory.","Errors tied with the SnapshotUnpacker.","The directory where the files from snapshot are expanded …","Cannot write in the given directory.","Unpacking error","","","","","","","","","","Check all prerequisites are met before starting to …","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Unpack the snapshot pointed at the given filepath into the …","","","","","","","","","","","Packed snapshot size","Location where the archive is to be extracted.","Subsystem error","Location of the packed archive.","Left space on device","Speficied location"],"i":[0,0,0,0,0,81,0,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,7,82,81,5,6,7,82,81,5,6,7,5,6,7,5,6,7,0,5,7,0,5,5,7,5,6,7,5,5,5,5,6,6,6,6,7,7,7,7,5,7,6,6,5,6,7,82,81,5,5,6,7,7,7,5,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,5,5,6,82,81,5,6,7,82,81,5,6,7,5,6,7,5,5,6,6,7,7,82,81,5,6,7,82,81,5,6,7,5,7,0,5,5,6,7,5,6,7,5,82,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,0,82,81,5,6,7,82,81,5,6,7,82,81,5,6,7,0,0,0,44,0,0,45,44,44,44,0,0,44,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,44,45,46,41,47,42,44,45,46,41,47,42,44,45,50,41,42,44,44,45,45,46,41,47,42,44,45,46,47,46,50,41,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,47,42,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,46,41,47,42,44,45,46,41,47,42,44,45,50,41,44,45,46,41,47,42,44,45,46,41,47,42,44,45,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,46,41,47,42,44,45,83,83,84,84,0,0,56,56,0,0,0,54,55,54,55,56,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,54,55,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,54,55,56,66,66,66,0,0,0,0,63,64,65,63,64,65,66,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,63,64,65,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,63,64,65,66,0,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,77,78,77,78,77,77,78,0,0,0,78,0,0,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,77,78,75,76,77,78,75,76,77,78,71,72,75,76,77,77,78,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,71,72,75,76,75,76,77,78,75,76,77,78,75,76,75,76,77,78,75,76,77,78,77,78,75,76,77,78,75,76,77,78,72,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,75,76,77,78,85,85,86,86,85,87,88,87,88,80,0,0,80,80,80,79,80,79,80,79,80,79,80,80,79,79,80,79,80,79,80,80,79,80,79,80,79,80,79,80,79,80,79,80,79,80,79,80,79,80,80,79,80,79,80,80,79,80,79,80,79,80,79,80,79,79,80,79,80,79,80,79,80,79,80,89,90,90,90,89,89],"f":[0,0,0,0,0,[1,[[3,[2]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[5,5],[6,6],[7,7],[[]],[[]],[[]],0,0,0,0,0,0,0,[[5,5],8],[[6,6],8],[[7,7],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[9,[[12,[10,11]]]],[9,[[12,[10,11]]]],0,0,[[5,13],14],[[6,13],14],[[7,13],14],[[]],[[]],[15,5],[[]],[[]],[16,7],[[]],0,0,[[]],[[]],[[]],[[]],[[]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[[],4],[[],4],[[],4],[[],4],[[],4],[[]],[[]],[[]],[[]],[[]],0,[[22,23,24,24,23,25,[27,[26]]],5],[[24,24],6],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[5,5],[[4,[28]]]],[[6,6],[[4,[28]]]],[[7,7],[[4,[28]]]],[5,29],[5,29],[6,29],[6,29],[7,29],[7,29],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[5,30],12],[[7,30],12],0,0,[[],29],[[],29],[[],29],[[]],[[]],[[]],0,[31,[[33,[32]]]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],34],[[],34],[[],34],[[],34],[[],34],[[],35],[[],35],[[],35],[[],35],[[],35],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],36],[[],36],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[35,37,38],[[40,[[18,[39]]]]]],[[41,35,37,38],[[40,[[18,[39]]]]]],[[42,2,37,38],[[33,[43]]]],[[44,13],14],[[44,13],14],[[45,13],14],[[45,13],14],[[]],[[]],[[]],[[]],[[]],[[]],[[46,35],[[33,[[4,[32]]]]]],[[47,35],[[33,[[4,[[3,[48]]]]]]]],[[46,35],[[40,[[18,[39]]]]]],[35,[[40,[[18,[39]]]]]],[[41,35],[[40,[[18,[39]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[47,[[33,[[49,[16]]]]]],[42,[[33,[[49,[15]]]]]],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[]],[[]],[[]],[[]],[[]],[[]],[[[20,[50]]],46],[[35,[49,[51]]],41],[[[20,[50]]],47],[[[20,[50]]],42],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[35,[[40,[[18,[39]]]]]],[[41,35],[[40,[[18,[39]]]]]],[52],[52],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[42,35],[[33,[1]]]],[[],24],[[],24],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,[53,53],[53,53],[53,53],[53,53],[53,53],[53,53],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[54,54],[55,55],[56,56],[[]],[[]],[[]],[[],53],[[],53],[[],53],[[],53],[[54,[58,[57]]],33],[[55,[58,[57]]],33],[[56,[58,[57]]],[[12,[59]]]],[[54,13],14],[[55,13],14],[[56,13],14],[[]],[[]],[[]],[60,[[12,[54,61]]]],[60,[[12,[55,61]]]],[60,[[12,[56,61]]]],[60,[[12,[54,61]]]],[60,[[12,[55,61]]]],[60,[[12,[56,61]]]],[[],[[4,[62]]]],[[],[[4,[62]]]],[35,8],[[]],[[]],[[]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[[],4],[[],4],[[],4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],34],[[],34],[[],34],[[],35],[[],35],[[],35],[[]],[[]],[[]],[[]],[[]],[[]],[[54,60],[[12,[61]]]],[[55,60],[[12,[61]]]],[[56,60],[[12,[61]]]],[[54,60],[[12,[61]]]],[[55,60],[[12,[61]]]],[[56,60],[[12,[61]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,[53,53],[53,53],[53,53],[53,53],[53,53],[53,53],[53,53],[53,53],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[63,63],[64,64],[65,65],[66,66],[[]],[[]],[[]],[[]],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[63,[58,[57]]],33],[[64,[58,[57]]],33],[[65,[58,[57]]],[[12,[59]]]],[[66,[58,[57]]],[[12,[59]]]],[[63,13],14],[[64,13],14],[[65,13],14],[[66,13],14],[[]],[[]],[[]],[[]],[60,[[12,[63,61]]]],[60,[[12,[64,61]]]],[60,[[12,[65,61]]]],[60,[[12,[66,61]]]],[60,[[12,[63,61]]]],[60,[[12,[64,61]]]],[60,[[12,[65,61]]]],[60,[[12,[66,61]]]],[[],[[4,[62]]]],[[],[[4,[62]]]],[[],[[4,[62]]]],[35,8],[[]],[[]],[[]],[[]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[[],4],[[],4],[[],4],[[],4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],34],[[],34],[[],34],[[],34],[[],35],[[],35],[[],35],[[],35],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[63,60],[[12,[61]]]],[[64,60],[[12,[61]]]],[[65,60],[[12,[61]]]],[[66,60],[[12,[61]]]],[[63,60],[[12,[61]]]],[[64,60],[[12,[61]]]],[[65,60],[[12,[61]]]],[[66,60],[[12,[61]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[]],[[]],[[]],[[]],0,0,[[],4],[[],4],0,[[]],[67,[[33,[[20,[50]]]]]],[67,[[33,[[20,[46]]]]]],[67,[[33,[[20,[68]]]]]],[67,[[33,[[20,[69]]]]]],[67,[[33,[70]]]],[67,[[33,[[20,[47]]]]]],[67,[[33,[[20,[71]]]]]],[67,[[33,[[20,[42]]]]]],[67,[[33,[[20,[72]]]]]],0,[[]],[[[18,[17]]],[[18,[19,17]]]],[21,[[21,[19]]]],[[],4],[[]],0,0,[[[20,[73]]],67],[[]],[[]],[[]],[[]],0,0,[[],12],[[],12],[[],34],[[],35],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],36],[[],36],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[35,37,35],[[40,[[18,[39]]]]]],[[[3,[2]],37,35,74],[[40,[[18,[39]]]]]],[[75,35,37,35],[[40,[[18,[39]]]]]],[[76,[3,[2]],37,35,74],[[40,[[18,[39]]]]]],[[77,13],14],[[77,13],14],[[78,13],14],[[78,13],14],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[[],[[40,[[18,[39]]]]]],[[],[[40,[[18,[39]]]]]],[75,[[40,[[18,[39]]]]]],[76,[[40,[[18,[39]]]]]],[[],4],[[],4],[[],4],[[],4],[[]],[[]],[[]],[[]],[[[20,[47]],[20,[46]],[20,[68]]],75],[[[20,[42]],[20,[46]],[20,[68]],[20,[69]]],76],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[52],[52],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[35,[[40,[[18,[39]]]]]],[[76,35],[[40,[[18,[39]]]]]],[[],24],[[],24],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],34],[[],34],[[],34],[[],34],[[],35],[[],35],[[],35],[[],35],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],36],[[79,37,23],33],[[],4],[[],4],[[],4],[[],4],[[],79],[[80,13],14],[[80,13],14],[[]],[[]],[[]],[[]],[[[18,[17]]],[[18,[19,17]]]],[[[18,[17]]],[[18,[19,17]]]],[20,[[20,[19]]]],[20,[[20,[19]]]],[21,[[21,[19]]]],[21,[[21,[19]]]],[[],4],[[],4],[[]],[[]],[[]],[[]],[[]],[[]],[52],[[]],[[]],[[]],[[]],[[],24],[[],12],[[],12],[[],12],[[],12],[[],34],[[],34],[[],35],[[],35],[[79,37,37],33],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0],"c":[],"p":[[3,"SnapshotMessage"],[3,"Snapshot"],[3,"SignedEntity"],[4,"Option"],[3,"SnapshotListItem"],[3,"SnapshotFieldItem"],[3,"MithrilStakeDistributionListItem"],[15,"bool"],[8,"Serializer"],[3,"Ok"],[3,"Error"],[4,"Result"],[3,"Formatter"],[6,"Result"],[3,"SnapshotListItemMessage"],[3,"MithrilStakeDistributionListItemMessage"],[3,"Global"],[3,"Box"],[8,"Any"],[3,"Arc"],[3,"Rc"],[3,"Epoch"],[15,"u64"],[3,"String"],[15,"u16"],[3,"Utc"],[3,"DateTime"],[4,"Ordering"],[3,"RowStruct"],[8,"Serializer"],[3,"CertificateMessage"],[3,"Certificate"],[6,"StdResult"],[3,"TypeId"],[15,"str"],[3,"CellStruct"],[3,"Path"],[3,"ProgressBar"],[8,"Future"],[3,"Pin"],[3,"AggregatorHTTPClient"],[3,"SnapshotClient"],[3,"PathBuf"],[4,"AggregatorHTTPClientError"],[4,"SnapshotClientError"],[3,"CertificateClient"],[3,"MithrilStakeDistributionClient"],[3,"MithrilStakeDistribution"],[3,"Vec"],[8,"AggregatorClient"],[3,"Version"],[3,"Demand"],[3,"Command"],[3,"MithrilStakeDistributionDownloadCommand"],[3,"MithrilStakeDistributionListCommand"],[4,"MithrilStakeDistributionCommands"],[3,"DefaultState"],[3,"ConfigBuilder"],[6,"StdError"],[3,"ArgMatches"],[6,"Error"],[3,"Id"],[3,"SnapshotDownloadCommand"],[3,"SnapshotListCommand"],[3,"SnapshotShowCommand"],[4,"SnapshotCommands"],[3,"DependenciesBuilder"],[8,"CertificateVerifier"],[8,"ImmutableDigester"],[3,"Logger"],[8,"MithrilStakeDistributionService"],[8,"SnapshotService"],[3,"Config"],[3,"ProgressDrawTarget"],[3,"AppMithrilStakeDistributionService"],[3,"MithrilClientSnapshotService"],[4,"MithrilStakeDistributionServiceError"],[4,"SnapshotServiceError"],[3,"SnapshotUnpacker"],[4,"SnapshotUnpackerError"],[3,"FromSnapshotMessageAdapter"],[3,"FromCertificateMessageAdapter"],[13,"SubsystemError"],[13,"NoWorkingLocation"],[13,"CouldNotVerifyStakeDistribution"],[13,"InvalidParameters"],[13,"InvalidParameters"],[13,"CouldNotVerifySnapshot"],[13,"NotEnoughSpace"],[13,"UnpackFailed"]]},\ "mithril_common":{"doc":"Shared datatypes and traits used by Mithril rust projects","t":"IEDCNNRRCNGGALLLLLLLLAALLLLAAAAAOLLLLLLKLLLLLLLLLLLLLALLLLLALLLLLALAAALLLLLLLLLLLLLLLLLLLDENGGNNNLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNDENINEIENNNNNDNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLKLKLLLKLLLLLLLLLLLLLLLLNNNDDGIEDNNNNNDDDEEELLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLKLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNDNSDDEGGGGNNNNNDNNRNNNGGGGEGGDGDGGEGGGGGGEGDGDGGGINNDSLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFFFFFNEDDDDGNDLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLDNDDDDNNNIEDNENEIEDNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLMLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLKLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMGNEEEINNNDDNDNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDEENNNNENNDDDDNDENDNNNGGGGGGGGGGGGGGGGDGGNDNNSNNSGDEGDGSSDEEDDDDNGGNLLLLMMLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLMLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLMMLMLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMLLLLLLLLLLLLLLMMMLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNDDDDIEEDNDALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMNNNDDEDDDDNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDGDDDDIDGDDDDDDGDIIKKMMLLLLLLLLLLLLLLMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLMMMMMMMMMMMLLLLLLLLLLLLLLMKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLNDDEDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLIIDDDIILLLLLLLLLLLLLLLLLLKKLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLQDENNNDDIDIDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLKKLLKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLNQQDIEIALLLLLLLLLLLLLLLLLKLKLKLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLEDDNNQDNNNNQDDINLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLKLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLKLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNDDNDENALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLMLMLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFFFFFFFFFFF","n":["BeaconProvider","BeaconProviderError","BeaconProviderImpl","CardanoNetwork","ChainObserver","ImmutableFileObserver","MITHRIL_API_VERSION_HEADER","MITHRIL_SIGNER_VERSION_HEADER","MagicId","NoEpoch","StdError","StdResult","api_version","az","az","borrow","borrow","borrow_mut","borrow_mut","cast_from","cast_from","certificate_chain","chain_observer","checked_as","checked_as","checked_cast_from","checked_cast_from","crypto_helper","database","digesters","entities","era","era_deprecate","fmt","fmt","from","from","from","from","get_current_beacon","get_current_beacon","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossy_into","lossy_into","messages","new","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","protocol","provide","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","signable_builder","source","sqlite","store","test_utils","to_string","try_from","try_from","try_into","try_into","type_id","type_id","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","APIVersionProvider","APIVersionProviderError","MissingDefault","OpenAPIFileName","OpenAPIVersionRaw","SemverParse","SpecFileIO","SpecParse","az","az","borrow","borrow","borrow_mut","borrow_mut","cast_from","cast_from","checked_as","checked_as","checked_cast_from","checked_cast_from","clone","clone_into","compute_all_versions_sorted","compute_current_version","compute_current_version_requirement","fmt","fmt","from","from","from","from","get_open_api_versions_mapping","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossy_into","lossy_into","new","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","provide","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","source","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","update_open_api_versions","vzip","vzip","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","CertificateChainAVKUnmatch","CertificateChainInfiniteLoop","CertificateChainPreviousHashUnmatch","CertificateGenesis","CertificateGenesisProducer","CertificateGenesisProducerError","CertificateHashUnmatch","CertificateRetriever","CertificateRetriever","CertificateRetrieverError","CertificateVerifier","CertificateVerifierError","Codec","Codec","CodecGenesis","General","MissingGenesisSigner","MithrilCertificateVerifier","VerifyMultiSignature","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","create_genesis_certificate","create_genesis_protocol_message","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","get_certificate_details","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","provide","provide","provide","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","sign_genesis_protocol_message","source","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","verify_certificate","verify_certificate","verify_certificate_chain","verify_certificate_chain","verify_genesis_certificate","verify_genesis_certificate","verify_multi_signature","verify_multi_signature","verify_protocol_message","verify_protocol_message","verify_standard_certificate","verify_standard_certificate","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","Build","Bytes","Bytes","CardanoCliChainObserver","CardanoCliRunner","ChainAddress","ChainObserver","ChainObserverError","FakeObserver","General","Int","Int","InvalidContent","InvalidContent","MockChainObserver","TxDatum","TxDatumBuilder","TxDatumError","TxDatumFieldTypeName","TxDatumFieldValue","add_field","az","az","az","az","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checkpoint","clone","clone","clone","clone_into","clone_into","clone_into","current_beacon","datums","default","default","default","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","erased_serialize","erased_serialize","erased_serialize","expect_get_current_datums","expect_get_current_epoch","expect_get_current_kes_period","expect_get_current_stake_distribution","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","get_current_datums","get_current_datums","get_current_datums","get_current_datums","get_current_epoch","get_current_epoch","get_current_epoch","get_current_epoch","get_current_kes_period","get_current_kes_period","get_current_kes_period","get_current_kes_period","get_current_kes_period","get_current_stake_distribution","get_current_stake_distribution","get_current_stake_distribution","get_current_stake_distribution","get_fields_by_type","get_hash","get_nth_field_by_type","hash","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","new","new","new","next_epoch","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","provide","provide","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","serialize","serialize","serialize","set_datums","set_signers","signers","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","Codec","ColdKeyGenerator","CoreRegister","DESCRIPTION","EraMarkersSigner","EraMarkersVerifier","EraMarkersVerifierError","EraMarkersVerifierSecretKey","EraMarkersVerifierSignature","EraMarkersVerifierVerificationKey","KESPeriod","KesMismatch","KesPeriodMissing","KesSignatureInvalid","KesSignatureMissing","KesUpdate","OpCert","OpCertInvalid","OpCertMissing","PROTOCOL_VERSION","PartyIdMissing","PartyIdNonExisting","PoolAddressEncoding","ProtocolAggregateVerificationKey","ProtocolAggregationError","ProtocolClerk","ProtocolClosedKeyRegistration","ProtocolGenesisError","ProtocolGenesisSecretKey","ProtocolGenesisSignature","ProtocolGenesisSigner","ProtocolGenesisVerificationKey","ProtocolGenesisVerifier","ProtocolInitializer","ProtocolInitializerError","ProtocolInitializerErrorWrapper","ProtocolKeyRegistration","ProtocolLotteryIndex","ProtocolMultiSignature","ProtocolParameters","ProtocolPartyId","ProtocolRegistrationError","ProtocolRegistrationErrorWrapper","ProtocolSigner","ProtocolSignerVerificationKey","ProtocolSignerVerificationKeySignature","ProtocolSingleSignature","ProtocolStake","ProtocolStakeDistribution","ProtocolVersion","SerDeShelleyFileFormat","SignatureVerification","SignatureVerification","Sum6KesBytes","TYPE","az","az","az","az","az","az","az","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","compute_hash","compute_protocol_party_id","create_deterministic_genesis_signer","create_deterministic_signer","create_genesis_verifier","create_non_deterministic_genesis_signer","create_non_deterministic_signer","create_test_genesis_signer","create_test_signer","create_verifier","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_file","from_file","from_file","from_json_hex","from_json_hex","from_secret_key","from_secret_key","from_verification_key","from_verification_key","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","key_decode_hex","key_encode_hex","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","provide","provide","provide","provide","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","sign","sign","source","source","source","source","start_kes_period","tests_setup","to_bytes","to_file","to_file","to_json_hex","to_json_hex","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_verification_key","to_verification_key","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","validate","verify","verify","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","setup_certificate_chain","setup_genesis","setup_message","setup_protocol_parameters","setup_signers_from_stake_distribution","setup_temp_directory_for_signer","Aggregator","ApplicationNodeType","DatabaseVersion","DatabaseVersionChecker","DatabaseVersionProvider","DatabaseVersionUpdater","DbVersion","Signer","SqlMigration","add_migration","alterations","application_type","apply","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone_into","clone_into","cmp","compare","create_table_if_not_exists","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from","get_application_version","get_connection","get_connection","get_definition","get_definition","get_projection","hydrate","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","new","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","partial_cmp","partial_cmp","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","save","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","updated_at","version","version","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","CardanoImmutableDigester","DigestComputationError","DumbImmutableDigester","DumbImmutableFileObserver","DummyImmutableDb","DummyImmutablesDbBuilder","FileNameExtraction","FileNumberParsing","FileStemExtraction","ImmutableDigester","ImmutableDigesterError","ImmutableFile","ImmutableFileCreation","ImmutableFileCreationError","ImmutableFileListing","ImmutableFileListingError","ImmutableFileObserver","ImmutableFileObserverError","ImmutableFileSystemObserver","ListImmutablesError","MetadataParsing","Missing","NotEnoughImmutable","append_immutable_trio","az","az","az","az","az","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","cache","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone_into","cmp","compare","compute_digest","compute_digest","compute_digest","compute_raw_hash","default","default","dir","eq","equivalent","equivalent","equivalent","equivalent","filename","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_last_immutable_number","get_last_immutable_number","get_last_immutable_number","immutables_files","increase","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","list_completed_in_dir","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","new","new","new","new","non_immutables_files","number","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","partial_cmp","path","provide","provide","provide","provide","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","set_file_size","shall_return","shall_return","source","source","source","source","to_owned","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_digest","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","with_immutables","with_non_immutables","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","db_dir","expected_number","found_number","path","path","CacheProviderResult","Get","ImmutableDigesterCacheGetError","ImmutableDigesterCacheProviderError","ImmutableDigesterCacheStoreError","ImmutableFileDigestCacheProvider","Io","Io","JsonDeserialization","JsonImmutableFileDigestCacheProvider","JsonImmutableFileDigestCacheProviderBuilder","JsonSerialization","MemoryImmutableFileDigestCacheProvider","Store","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","default","ensure_dir_exist","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","get","get","get","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","provide","provide","provide","reset","reset","reset","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","should_reset_digests_cache","source","source","source","store","store","store","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","Beacon","BeaconComparison","BeaconComparisonError","BeaconOlderThanPreviousBeacon","BothGreater","CardanoImmutableFilesFull","CardanoImmutableFilesFull","CardanoNetwork","CardanoStakeDistribution","CardanoStakeDistribution","Certificate","CertificateMetadata","CertificatePending","ClientError","DevNet","Epoch","EpochError","EpochOffset","EpochSettings","Equal","GreaterEpoch","GreaterImmutableFileNumber","HexEncodedAgregateVerificationKey","HexEncodedDigest","HexEncodedEraMarkersSecretKey","HexEncodedEraMarkersSignature","HexEncodedEraMarkersVerificationKey","HexEncodedGenesisSecretKey","HexEncodedGenesisSignature","HexEncodedGenesisVerificationKey","HexEncodedKey","HexEncodedMultiSignature","HexEncodedOpCert","HexEncodedSingleSignature","HexEncodedVerificationKey","HexEncodedVerificationKeySignature","ImmutableFileName","ImmutableFileNumber","InternalServerError","LotteryIndex","MagicId","MainNet","MithrilStakeDistribution","MithrilStakeDistribution","MithrilStakeDistribution","NEXT_SIGNER_RETRIEVAL_OFFSET","NetworkNotMatch","NextAggregateVerificationKey","PROTOCOL_PARAMETERS_RECORDING_OFFSET","PartyId","ProtocolMessage","ProtocolMessagePartKey","ProtocolMessagePartValue","ProtocolParameters","ProtocolVersion","SIGNER_RECORDING_OFFSET","SIGNER_RETRIEVAL_OFFSET","SignedEntity","SignedEntityType","SignedEntityTypeDiscriminants","Signer","SignerWithStake","SingleSignatures","Snapshot","SnapshotDigest","Stake","StakeDistribution","TestNet","add","add","add_assign","add_assign","aggregate_verification_key","artifact","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","beacon","beacon","beacon","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","certificate_id","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","compare","compare","compare","compare_to_older","compute_hash","compute_hash","compute_hash","compute_hash","compute_hash","compute_hash","compute_hash","created_at","default","default","default","default","default","default","default","default","default","default","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","digest","dummy","epoch","epoch","epoch","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_code","from_signer","genesis_signature","get_epoch","get_hash","get_hash","get_hash","get_id","get_id","get_json_beacon","get_message_part","get_signer","get_stake_distribution","has_gap_with","hash","hash","hash","hash","hash","hydrate","immutable_file_number","index","index","initiated_at","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is_genesis","is_new_beacon","is_new_epoch","k","kes_period","kes_period","label","locations","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","m","message","message","message_parts","metadata","multi_signature","network","new","new","new","new","new","new","new","new","new","new","new","new","new","next","next_protocol_parameters","next_protocol_parameters","next_signers","offset_by","offset_to_next_signer_retrieval_epoch","offset_to_protocol_parameters_recording_epoch","offset_to_recording_epoch","offset_to_signer_retrieval_epoch","operational_certificate","operational_certificate","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","party_id","party_id","party_id","phi_f","phi_f_fixed","previous","previous_hash","protocol_message","protocol_parameters","protocol_parameters","protocol_parameters","protocol_parameters","protocol_version","provide","provide","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","sealed_at","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","set_message_part","signature","signed_entity_id","signed_entity_type","signed_entity_type","signed_message","signers","signers","signers_with_stake","size","stake","sub","sub","sub_assign","sub_assign","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_protocol_signature","to_string","to_string","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","verification_key","verification_key","verification_key_signature","verification_key_signature","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","won_indexes","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","AdapterFailure","CurrentEraNotFound","EraChecker","EraEpochToken","EraMarker","EraReader","EraReaderAdapter","EraReaderError","SupportedEra","SupportedEraIter","Thales","UnsupportedEraError","adapters","az","az","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","change_era","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","current_epoch","current_era","deserialize","deserialize","dummy","epoch","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","eras","erased_serialize","erased_serialize","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_str","get_current_epoch","get_current_era_marker","get_current_supported_era","get_next_era_marker","get_next_supported_era","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_iter","is_era_active","iter","len","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","name","new","new","new","new","new","next","next_back","nth","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","provide","provide","read","read_era_epoch_token","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","serialize","serialize","size_hint","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","epoch","eras","error","message","Bootstrap","CardanoChain","Dummy","EraMarkersPayloadCardanoChain","EraReaderAdapterBuilder","EraReaderAdapterType","EraReaderBootstrapAdapter","EraReaderCardanoChainAdapter","EraReaderDummyAdapter","EraReaderFileAdapter","File","az","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone_into","clone_into","default","deserialize","deserialize","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","erased_serialize","erased_serialize","fmt","fmt","from","from","from","from","from","from","from","from_markers","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","markers","new","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","read","read","read","read","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","serialize","serialize","set_markers","sign","signature","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","verify_signature","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","CertificateListItemMessage","CertificateListItemMessageMetadata","CertificateListMessage","CertificateMessage","CertificateMetadataMessage","CertificatePendingMessage","EpochSettingsMessage","FromMessageAdapter","MithrilStakeDistributionListItemMessage","MithrilStakeDistributionListMessage","MithrilStakeDistributionMessage","RegisterSignatureMessage","RegisterSignerMessage","SignerMessage","SignerWithStakeMessagePart","SnapshotListItemMessage","SnapshotListMessage","SnapshotMessage","ToMessageAdapter","TryFromMessageAdapter","adapt","adapt","aggregate_verification_key","aggregate_verification_key","az","az","az","az","az","az","az","az","az","az","az","az","az","az","beacon","beacon","beacon","beacon","beacon","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","certificate_hash","certificate_hash","certificate_hash","certificate_hash","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","created_at","created_at","created_at","created_at","default","default","default","default","default","default","default","default","default","default","default","default","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","digest","digest","dummy","dummy","dummy","dummy","dummy","dummy","dummy","dummy","dummy","dummy","dummy","dummy","dummy","epoch","epoch","epoch","epoch","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","erased_serialize","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_signers","genesis_signature","hash","hash","hash","hash","initiated_at","initiated_at","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","kes_period","kes_period","kes_period","locations","locations","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","metadata","metadata","multi_signature","next_protocol_parameters","next_protocol_parameters","next_signers","operational_certificate","operational_certificate","operational_certificate","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","party_id","party_id","party_id","party_id","previous_hash","previous_hash","protocol_message","protocol_message","protocol_parameters","protocol_parameters","protocol_parameters","protocol_parameters","protocol_parameters","protocol_version","protocol_version","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","sealed_at","sealed_at","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","signature","signed_entity_type","signed_entity_type","signed_message","signed_message","signers","signers","signers_with_stake","size","size","stake","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","total_signers","try_adapt","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into_signers","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","verification_key","verification_key","verification_key","verification_key_signature","verification_key_signature","verification_key_signature","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","won_indexes","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","EmptySigners","MultiSigner","SignerBuilder","SignerBuilderError","SingleSigner","aggregate_single_signatures","az","az","az","az","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_multi_signer","build_single_signer","build_test_single_signer","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","compute_aggregate_verification_key","compute_aggregate_verification_key","fmt","fmt","fmt","from","from","from","from","get_party_id","into","into","into","into","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","new","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","provide","restore_signer_from_initializer","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","sign","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","verify_single_signature","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","Artifact","Beacon","CardanoImmutableFilesFullSignableBuilder","MithrilSignableBuilderService","MithrilStakeDistributionSignableBuilder","SignableBuilder","SignableBuilderService","az","az","az","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","compute_protocol_message","compute_protocol_message","compute_protocol_message","compute_protocol_message","compute_protocol_message","default","from","from","from","get_id","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","new","new","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","serialize","serialize","serialize","serialize","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","Entity","EntityCursor","HydrationError","InconsistentType","InvalidData","MissingData","Projection","ProjectionField","Provider","SourceAlias","SqLiteEntity","WhereCondition","add_field","and_where","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone_into","default","default","default","definition","expand","expand","find","find","fmt","fmt","fmt","from","from","from","from","from","from","from","get_connection","get_definition","get_fields","get_iterator","get_projection","hydrate","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_iter","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","name","new","new","new","new","new","next","or_where","output_type","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","provide","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vacuum_database","vzip","vzip","vzip","vzip","vzip","vzip","where_in","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","AdapterError","Key","Record","StakeStore","StakeStorer","StoreError","StorePruner","adapter","az","az","borrow","borrow","borrow_mut","borrow_mut","cast_from","cast_from","checked_as","checked_as","checked_cast_from","checked_cast_from","fmt","fmt","from","from","from","get_adapter","get_adapter","get_max_records","get_max_records","get_stakes","get_stakes","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","lossless_try_into","lossless_try_into","lossy_into","lossy_into","new","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","provide","prune","prune","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","save_stakes","save_stakes","source","to_string","try_from","try_from","try_into","try_into","type_id","type_id","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","AdapterError","DumbStoreAdapter","FailStoreAdapter","GeneralError","InitializationError","Key","MemoryAdapter","MutationError","OpeningStreamError","ParsingDataError","QueryError","Record","SQLiteAdapter","SQLiteResultIterator","StoreAdapter","TypeError","az","az","az","az","az","az","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","cjk_compat_variants","default","default","fmt","fmt","from","from","from","from","from","from","get_iter","get_iter","get_iter","get_iter","get_iter","get_last_n_records","get_last_n_records","get_last_n_records","get_last_n_records","get_last_n_records","get_record","get_record","get_record","get_record","get_record","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_iter","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","multiunzip","multiunzip","multiunzip","multiunzip","multiunzip","multiunzip","multiunzip","multiunzip","multiunzip","multiunzip","multiunzip","multiunzip","multiunzip","new","new","new","new","new","next","nfc","nfd","nfkc","nfkd","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","provide","record_exists","record_exists","record_exists","record_exists","record_exists","remove","remove","remove","remove","remove","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","store_record","store_record","store_record","store_record","store_record","stream_safe","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","Custom","MithrilFixture","MithrilFixtureBuilder","RandomDistribution","SignerFixture","StakeDistributionGenerationMethod","Uniform","apispec","az","az","az","az","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone_into","clone_into","compute_and_encode_avk","compute_avk","create_genesis_certificate","default","disable_signers_certification","fake_data","fmt","fmt","from","from","from","from","into","into","into","into","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","kes_secret_key_path","kes_secret_key_path","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","new","operational_certificate","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","party_id","protocol_initializer","protocol_parameters","protocol_signer","protocol_stake_distribution","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","sign","signer_with_stake","signers","signers_fixture","signers_with_stake","stake_distribution","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","verification_key_signature","vzip","vzip","vzip","vzip","with_party_id_seed","with_protocol_parameters","with_signers","with_stake_distribution","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","seed","APISpec","az","borrow","borrow_mut","cast_from","checked_as","checked_cast_from","content_type","from","from_file","get_all_spec_files","get_defaut_spec_file","get_era_spec_file","into","into_any","into_any_arc","into_any_rc","lossless_try_into","lossy_into","method","overflowing_as","overflowing_cast_from","path","saturating_as","saturating_cast_from","try_from","try_into","type_id","type_name","unwrapped_as","unwrapped_cast_from","validate_conformity","validate_request","validate_response","verify_conformity","vzip","wrapping_as","wrapping_cast_from","beacon","certificate","certificate_pending","digest","epoch_settings","genesis_certificate","mithril_stake_distributions","protocol_parameters","signers","signers_with_stakes","single_signatures","snapshots"],"q":[[0,"mithril_common"],[89,"mithril_common::api_version"],[165,"mithril_common::certificate_chain"],[348,"mithril_common::chain_observer"],[715,"mithril_common::crypto_helper"],[1243,"mithril_common::crypto_helper::tests_setup"],[1249,"mithril_common::database"],[1463,"mithril_common::digesters"],[1842,"mithril_common::digesters::ImmutableDigesterError"],[1845,"mithril_common::digesters::ImmutableFileCreationError"],[1847,"mithril_common::digesters::cache"],[2054,"mithril_common::entities"],[3099,"mithril_common::era"],[3396,"mithril_common::era::EraReaderError"],[3400,"mithril_common::era::adapters"],[3632,"mithril_common::messages"],[4265,"mithril_common::protocol"],[4390,"mithril_common::signable_builder"],[4488,"mithril_common::sqlite"],[4692,"mithril_common::store"],[4769,"mithril_common::store::adapter"],[5003,"mithril_common::test_utils"],[5150,"mithril_common::test_utils::StakeDistributionGenerationMethod"],[5151,"mithril_common::test_utils::apispec"],[5189,"mithril_common::test_utils::fake_data"]],"d":["Provide the current Beacon of a cardano node.","BeaconProvider related errors.","A BeaconProvider using a ChainObserver and a …","","Raised when reading the current epoch with a ChainObserver …","Raised when getting the last immutable file number fails.","Mithril API protocol version header name","Mithril Signer node version header name","","Raised reading the current epoch succeeded but yield no …","Generic error type","Generic result type","API Version provider service","","","","","","","","","Tools to retrieve, validate the Certificate Chain created …","Tools to request metadata, like the current epoch or the …","","","","","Tools and types to abstract the use of the Mithril STM …","database module. This module contains providers and …","Tools to compute mithril digest from a Cardano node …","The entities used by, and exchanged between, the …","The module used for handling eras","Macro used to mark the code that should be cleaned up when …","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Get the current Beacon of the cardano node.","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","Messages module This module aims at providing shared …","BeaconProviderImpl factory.","","","","","Protocol module","","","","","","The module used for building signables","","SQLite module. This module provides a minimal yet useful …","Define a generic way to store data with the Store Adapters…","Test utilities","","","","","","","","","","","","","","","","","","","","API Version provider","API Version provider error","Missing default api version","Open API file name","Open PAI raw version","Semver parse error","Spec file io error","Yaml parse error","","","","","","","","","","","","","","","Compute all the sorted list of all versions","Compute the current api version","Compute the current api version requirement","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Build Open API versions mapping","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","Version provider factory","","","","","","","","","","","","","","","","","","","","","","","","","Update open api versions. Test only","","","","","","","Error raised when validating the certificate chain if the …","Error raised when validating the certificate chain if the …","Error raised when validating the certificate chain if a …","Error raised when the Genesis Signature stored in a …","CertificateGenesisProducer is in charge of producing a …","CertificateGenesisProducer related errors.","Error raised when the hash stored in a Certificate doesn’…","CertificateRetriever is in charge of retrieving a …","Error raised when a CertificateRetriever tries to retrieve …","CertificateRetriever related errors.","CertificateVerifier is the cryptographic engine in charge …","CertificateVerifier related errors.","Error raised when a Codec error occurs","Error raised when encoding or decoding of data to hex …","Error raised when encoding or decoding of data to genesis …","Error raised when a CertificateRetriever tries to retrieve …","Error raised when there is no genesis signer available","MithrilCertificateVerifier is an implementation of the …","Error raised when the multi signatures verification fails.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a Genesis Certificate","Create the Genesis protocol message","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Get Certificate details","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","MithrilCertificateVerifier factory","CertificateGenesisProducer factory","","","","","","","","","","","","","","","","","","","","","","","","Sign the Genesis protocol message (test only)","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Verify if a Certificate is valid and returns the previous …","Verify a certificate","Verify that the Certificate Chain associated to a …","Verify that the Certificate Chain associated to a …","Verify Genesis certificate","Verify Genesis certificate","Verify a multi signature","Verify a multi signature","still a dirty hack to mock the protocol message verify …","still a dirty hack to mock the protocol message verify …","Verify Standard certificate","Verify Standard certificate","","","","","","","","","","","","","","","","Error raised when building the tx datum failed.","Bytes datum field value.","Bytes datum field value.","A ChainObserver pulling it’s data using a …","A runner able to request data from a Cardano node using the","ChainAddress represents an on chain address.","Retrieve data from the cardano network","ChainObserver related errors.","A Fake ChainObserver for testing purpose using fixed data.","Generic ChainObserver error.","Integer datum field value","Integer datum field value","Error raised when the content could not be parsed.","Error raised when the content could not be parsed.","Retrieve data from the cardano network","TxDatum represents transaction Datum.","TxDatumBuilder is a TxDatum builder utility.","TxDatum related errors.","Auto-generated discriminant enum variants","TxDatumFieldValue represents a fiel value of TxDatum.","Add a field to the builder","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Build a TxDatum","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Validate that all current expectations for all methods have","","","","","","","A Beacon, used by get_current_epoch","A list of TxDatum, used by get_current_datums","","","","","","","","","","","","","","","","","Create an Expectation for mocking the get_current_datums …","Create an Expectation for mocking the get_current_epoch …","Create an Expectation for mocking the …","Create an Expectation for mocking the …","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Retrieve the datums associated to and address","","","Retrieve the datums associated to and address","Retrieve the current epoch of the Cardano network","","","Retrieve the current epoch of the Cardano network","","","Retrieve the KES period of an operational certificate","Retrieve the KES period of an operational certificate","Retrieve the KES period of an operational certificate","Retrieve the current stake distribution of the Cardano …","","","Retrieve the current stake distribution of the Cardano …","Retrieves the fields of the datum with given type","","Retrieves the nth field of the datum with given type","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","CardanoCliChainObserver factory","FakeObserver factory","CardanoCliRunner factory","Create a new mock object with no expectations.","TxDatumBuilder factory","Increase by one the epoch of the current_beacon.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Set the datums that will used to compute the result of …","Set the signers that will used to compute the result of …","A list of SignerWithStake, used for …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Error raised when a codec parse error occurs","A cold key generator / test only","Error raised when a core registration error occurs","The description of the Cardano key","A cryptographic signer that is responsible for signing the …","An era markers verifier that checks the authenticity of …","EraMarkersSigner and EraMarkersVerifier related errors.","Alias of Ed25519:SecretKey.","Alias of Ed25519:Signature.","Alias of Ed25519:PublicKey.","The KES period that is used to check if the KES keys is …","Period of key file does not match with period provided by …","Error raised when a KES Period is needed but not provided","Error raised when a KES Signature verification fails","Error raised when a KES Signature is needed but not …","Error raised when a KES update error occurs","Parsed Operational Certificate","Error raised when an operational certificate is invalid","Error raised when the operational certificate is missing","The current protocol version","Error raised when a party id is needed but not provided","Error raised when a party id is not available in the …","Error raised when a pool address encoding fails","Alias of MithrilStm:StmAggrVerificationKey.","Alias of MithrilStm:AggregationError.","Alias of MithrilStm:StmClerk.","Alias of a wrapper of MithrilStm:ClosedKeyReg.","ProtocolGenesisSigner and ProtocolGenesisVerifier related …","Alias of Ed25519:SecretKey.","Alias of Ed25519:Signature.","A protocol Genesis Signer that is responsible for signing …","Alias of Ed25519:PublicKey.","A protocol Genesis Verifier that is responsible for …","Alias of a wrapper of MithrilStm:StmInitializer.","Alias of a wrapper of …","New initializer error","Alias of a wrapper of MithrilStm:KeyReg.","Alias of MithrilStm::Index.","Alias of MithrilStm:StmAggrSig.","Alias of MithrilStm::StmParameters.","The id of a mithril party.","Alias of a wrapper of …","New registration error","Alias of MithrilStm:StmSigner.","Wrapper of MithrilStm:StmVerificationKeyPoP to add …","Alias of KES:Sum6KesSig.","Single Signature","Alias of MithrilStm:Stake.","A list of Party Id associated with its Stake.","A protocol version","Trait that allows any structure that implements Serialize …","Error raised when a Signature verification fail","Error raised when a Genesis Signature verification fail","We need to create this struct because the design of …","The type of Cardano key","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Compute the hash of an OpCert","Compute protocol party id as pool id bech 32","ProtocolGenesisSigner deterministic","EraMarkersSigner deterministic","Create a ProtocolGenesisVerifier","ProtocolGenesisSigner non deterministic","EraMarkersSigner non deterministic","ProtocolGenesisSigner factory","EraMarkersSigner factory","Create a EraMarkersVerifier","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","Deserialize a type T: Serialize + DeserializeOwned from …","Deserialize a type T: Serialize + DeserializeOwned from …","Deserialize a Cardano key from file. Cardano KES key …","Create a signature from a JSON Hex representation","create an instance from a JSON hex representation","EraMarkersSigner from EraMarkersVerifierSecretKey","ProtocolGenesisSigner from ProtocolGenesisSecretKey","EraMarkersVerifier from EraMarkersVerifierVerificationKey","ProtocolGenesisVerifier from ProtocolGenesisVerificationKey","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Decode key from hex helper","Encode key to hex helper","","","","","","","","","","","","","","","","","","","","","","","","","","","OpCert factory / test only","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Signs a message and returns a EraMarkersVerifierSignature","Signs a message and returns a ProtocolGenesisSignature","","","","","KES period at which KES key is initalized","Test data builders for Mithril STM types, for testing …","Output the key’s bytes in memory","Serialize a type T: Serialize + DeserializeOwned to file …","Serialize a type T: Serialize + DeserializeOwned to file …","Dump a JSON Hex representation of the signature","create a JSON hash representation of the verificationkey","","","","","","","","","","","EraMarkersVerifier to EraMarkersVerifierVerificationKey","ProtocolGenesisVerifier to ProtocolGenesisVerificationKey","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Validate a certificate","Verifies the signature of a message","Verifies the signature of a message","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Instantiate a certificate chain, use this for tests only.","Instantiate a Genesis Signer and its associated Verifier","Instantiate a ProtocolMessage using fake data, use this …","Instantiate a ProtocolParameters, use this for tests only.","Instantiate a list of protocol signers based on the given …","Create or retrieve a temporary directory for storing …","Aggregator node type","Application using a database","Entity related to the db_version database table.","Struct to perform application version check in the …","Provider for the DatabaseVersion entities using the …","Write Provider for the DatabaseVersion entities. This will …","Database version.","Signer node type","Represent a file containing SQL structure or data …","Register a migration.","SQL statements to alter the database.","Name of the application.","Apply migrations","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Method to create the table at the beginning of the …","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Read the application version from the database.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","DatabaseVersionProvider constructor.","DatabaseVersionUpdater constructor.","constructor","ApplicationNodeType constructor.","Create a new SQL migration instance.","","","","","","","","","","","","","","","","","","","","","","","","","","","Persist the given entity and return the projection of the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Date of the last version upgrade","Version of the database structure.","The semver version this migration targets.","","","","","","","","","","","","","","","","","","","A digester working directly on a Cardano DB immutables …","Error raised when the digest computation failed.","A ImmutableDigester returning configurable result for …","An ImmutableFileObserver yielding fixed results for tests …","A dummy cardano immutable db.","A DummyImmutableDb builder.","Raised when the immutable file filename extraction fails.","Raised when the immutable file number parsing, from the …","Raised when the immutable file stem extraction fails.","A digester than can compute the digest used for mithril …","ImmutableDigester related Errors.","Represent an immutable file in a Cardano node database …","Raised when ImmutableFile::new fails.","ImmutableFile::new related errors.","Raised when immutable file listing fails.","ImmutableFile::list_completed_in_dir related errors.","Retrieve data on ImmutableFile from a cardano database.","ImmutableFileObserver related errors.","An ImmutableFileObserver using the filesystem.","Error raised when the files listing failed.","Raised when the metadata of a file could not be read.","Raised when the no immutables files were available.","Error raised when there’s less than the required number …","Makes build add another trio of immutables file, that won…","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Build a DummyImmutableDb.","Cache provider to accelerate …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Compute the digest","","","Compute the hash of this immutable file.","","","The dummy cardano db directory path.","","","","","","The filename","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Get the ImmutableFileNumber of the last immutable file in …","","","The immutables files in the dummy cardano db.","Increase by one the stored immutable file number.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","List all ImmutableFile in a given directory.","","","","","","","","","","","","","","","","","","","","","","","ImmutableDigester factory","DumbDigester factory","DummyImmutablesDbBuilder factory, will create a folder …","ImmutableFileSystemObserver factory.","DumbImmutableFileObserver factory.","ImmutableFile factory","Files that doesn’t follow the immutable file name scheme …","The immutable file number","","","","","","","","","","","","","","","","","","","","","","","","The path to the immutable file","","","","","","","","","","","","","","","","","","","","","","","","","","","Set the size of all files written by build to the given …","Update the stored immutable file number.","The ImmutableFileNumber that shall be returned by …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Update digest returned by compute_digest","","","","","","","","","","","","Set the immutables file number that will be used to …","Set filenames to write to the db that doesn’t follow the …","","","","","","","","","","","","","","","","","","","","","","","A cardano node DB directory","Expected last ImmutableFileNumber.","Last ImmutableFileNumber found when listing ImmutableFiles.","Path for which file stem extraction failed.","Path for which filename extraction failed.","A specialized result type for …","Error raised by ImmutableFileDigestCacheProvider::get.","ImmutableFileDigestCacheProvider::get related errors.","ImmutableFileDigestCacheProvider related errors.","ImmutableFileDigestCacheProvider::store related errors.","A cache provider that store individual ImmutableFile …","Raised when an IO error is raised when storing a cache.","Raised when an IO error is raised when getting a cache.","Raised when json cache deserialization fails.","A in memory ImmutableFileDigestCacheProvider.","A JsonImmutableFileDigestCacheProvider builder.","Raised when json cache serialization fails.","A in memory ImmutableFileDigestCacheProvider.","Error raised by ImmutableFileDigestCacheProvider::store.","","","","","","","","","","","","","","","","","","","Build a JsonImmutableFileDigestCacheProvider based on the …","","","","","","","","","","","","","","","","","","","","If set will create the cache directory if it doesn’t …","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Build a new MemoryImmutableFileDigestCacheProvider that …","","Returns the argument unchanged.","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Associate each given immutable files with a cached value …","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","JsonImmutableFileDigestCacheProvider factory","JsonImmutableFileDigestCacheProviderBuilder factory.","","","","","","","","","","","","","","","","Reset the stored values","","","","","","","","","","","","","","","Set if existing cached values in the provider must be …","","","","Store the given digests","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Beacon represents a point in the Cardano chain at which a …","A BeaconComparison is the result of the comparison between …","Beacon::compare_to_older related errors.","Error raised the newest beacon has oldest data than the “…","The current beacon has both a newer epoch and newer …","Full Cardano Immutable Files","Full Cardano Immutable Files","The Cardano Network that is being targeted","Cardano Stake Distribution","Cardano Stake Distribution","Certificate represents a Mithril certificate embedding a …","CertificateMetadata represents the metadata associated to …","CertificatePending represents a pending certificate in the …","Representation of a Client Error raised by an http server","A Cardano private devnet","Epoch represents a Cardano epoch","EpochError is an error triggerred by an Epoch","Error raised when the computation of an epoch using an …","EpochSettings represents the settings of an epoch","The current beacon has an equal epoch and immutable file …","The current beacon has a newer epoch than the older beacon.","The current beacon has a newer immutable file number than …","Hex encoded Aggregate Verification Key","Hex encoded Sha256 Digest","Hex encoded Era Markers Secret Key","Hex encoded Era Markers Signature","Hex encoded Era Markers Verification Key","Hex encoded Genesis Secret Key","Hex encoded Genesis Signature","Hex encoded Genesis Verification Key","Hex encoded key","Hex encoded Multi Signature","Hex encoded Operational Certificate","Hex encoded Single Signature","Hex encoded Verification Key","Hex encoded Verification Key Signature","ImmutableFileName represents the filename, with extension, …","ImmutableFileNumber represents the id of immutable files …","Representation of a Internal Server Error raised by an …","LotteryIndex represents the index of a Mithril single …","Cardano Network magic identifier","The Cardano mainnet network","Mithril Stake Distribution","Mithril stake distribution","Mithril stake distribution","The epoch offset used to retrieve the signers stake …","Error raised when a comparison between beacons from …","The ProtocolMessage part key associated to the Next epoch …","The epoch offset used for aggregator protocol parameters …","PartyId represents a signing party in Mithril protocol","ProtocolMessage represents a message that is signed (or …","The key of a ProtocolMessage","The value of a ProtocolMessage","Protocol cryptographic parameters","Protocol version","The epoch offset used for signers stake distribution and …","The epoch offset used for signers stake distribution and …","Aggregate for signed entity","The signed entity type that represents a type of data …","Auto-generated discriminant enum variants","Signer represents a signing participant in the network","Signer represents a signing party in the network …","SingleSignatures represent single signatures originating …","Snapshot represents a snapshot file and its metadata","The ProtocolMessage part key associated to the Snapshot …","Stake represents the stakes of a participant in the …","StakeDistribution represents the stakes of multiple …","A Cardano test network (testnet, preview, or preprod)","","","","","Aggregate verification key The AVK used to sign during the …","Artifact","","","","","","","","","","","","","","","","","","","","","","","","Mithril beacon on the Cardano chain aka BEACON(p,n)","Current Beacon","Mithril beacon on the Cardano chain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Certificate id for this signed entity.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","This method returns a BeaconOrdering between self and the …","Computes the hash of a Beacon","Computes the hash of a Certificate","Computes the hash of the certificate metadata","Computes the hash of the protocol message","Computes the hash of ProtocolParameters","Computes the hash of Signer","Computes the hash of SignerWithStake","Date and time when the signed_entity was created","","","","","","","","","","","","","","","","","","","","","","","","","","Digest that is signed by the signer participants","Retrieve a dummy enty (for test only)","Cardano chain epoch number","Current Epoch","Epoch at which the Mithril Stake Distribution is created","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Instantiates a CardanoNetwork from its code and magic id","Turn a Signer into a SignerWithStake.","Genesis signature created from the original stake …","Return the epoch from the intern beacon.","","","","","","Return a JSON serialized value of the internal beacon","Get the message part associated with a key","get a signer from the certificate pending if it has …","Deduce the stake distribution from the metadata signers","Check if there is a gap with another Epoch.","","","","Hash of the current certificate Computed from the other …","Hash of the Mithril Stake Distribution (different from the …","Create an instance from data coming from the database","Number of the last included immutable files for the digest …","Get the database value from enum’s instance","Get the database value from enum’s instance","Date and time when the certificate was initiated …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Tell if the certificate is a genesis certificate","Returns true if this comparison result isn’t equal.","Returns true if this comparison have a greater epoch but …","Quorum parameter","The kes period used to compute the verification key …","The kes period used to compute the verification key …","error label","Locations where the binary content of the snapshot can be …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Security parameter (number of lotteries)","error message","error message","Map of the messages combined into the digest aka MSG(p,n)","Certificate metadata aka METADATA(p,n)","STM multi signature created from a quorum of single …","Cardano network","Beacon factory","Certificate factory","CertificateMetadata factory","CertificatePending factory","InternalServerError factory","ClientError factory","MithrilStakeDistribution artifact factory","ProtocolMessage factory","ProtocolParameters factory","Signer factory","SignerWithStake factory","SingleSignature factory","Snapshot factory","Computes the next Epoch","Next Protocol parameters","Next Protocol parameters","Signers that will be able to sign on the next epoch","Computes a new Epoch by applying an epoch offset.","Apply the next signer retrieval offset to this epoch","Apply the protocol parameters recording offset to this …","Apply the recording offset to this epoch","Apply the retrieval offset to this epoch","The encoded operational certificate of stake pool operator …","The encoded operational certificate of stake pool operator …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The unique identifier of the signer","The unique identifier of the signer","The unique identifier of the signer","f in phi(w) = 1 - (1 - f)^w, where w is the stake of a …","phi_f_fixed is a fixed decimal representatio of phi_f used …","Computes the previous Epoch","Hash of the previous certificate in the chain This is …","Structured message that is used to created the signed …","Protocol parameters part of METADATA(p,n)","Current Protocol parameters","Current Protocol parameters","Protocol parameters used to sign this stake distribution","Protocol Version (semver) Useful to achieve backward …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Date and time when the certificate was sealed Represents …","","","","","","","","","","","","","","","","Set the message part associated with a key Returns …","The single signature of the digest","Signed entity id.","Signed entity type","Signed entity type.","Message that is signed by the signers aka H(MSG(p,n) || …","The list of the active signers with their stakes and …","Current Signers","List of signers with stakes of the Mithril Stake …","Size of the snapshot file in Bytes","The signer stake","","","","","","","","","","","","","","","","","","","","","","","","","","Convert this SingleSignatures to its corresponding …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The public key used to authenticate signer signature","The public key used to authenticate signer signature","The encoded signer ‘Mithril verification key’ …","The encoded signer ‘Mithril verification key’ …","","","","","","","","","","","","","","","","","","","","","","","","The indexes of the won lotteries that lead to the single …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Underlying adapter fails to return data.","Data returned from the adapter are inconsistent or …","EraChecker allows the verification of the current era","This is a response from the EraReader. It contains …","Value object that represents a tag of Era change.","The EraReader is responsible of giving the current Era and …","Adapters are responsible of technically reading the …","Error type when EraReader fails to return a EraEpochToken.","The era that the software is running or will run","An iterator over the variants of SupportedEra","Thales era","Error related to SupportedEra String parsing …","Module dedicated to EraReaderAdapter implementations.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Change the current era","","","","","","","","","","","","","","","","","","","","","","","","","Retrieve the Epoch the checker was the last updated.","Retrieve the current era","","","Retrieve a dummy era (for test only)","Eventual information that advertises the Epoch of …","","","","","","","","","","","","","","","","Retrieve the list of supported eras","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Return the epoch the Token has been created at","Return the EraMarker of the current Era.","Try to cast the current EraMarker to a SupportedEra. If it …","Return the EraMarker for the coming Era if any.","Try to cast the next EraMarker to a SupportedEra. If it …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","Check if an era is active","","","","","","","","","","","","","","","","","","","Era name","Era checker factory","Instantiate the EraReader injecting the adapter.","instantiate a new EraMarker.","Instanciate a new EraMarker.","Create a new Era Error","","","","","","","","","","","","","","","","","","","","","","Read era markers from the underlying adapter.","This methods triggers the adapter to read the markers from …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Current Epoch","Eras given by the adapter","nested underlying adapter error","context message","Bootstrap adapter.","Cardano chain adapter.","Dummy adapter.","Era markers payload","Era adapter builder","Type of era reader adapaters available","The goal of the bootstrap adapter is to advertise for the …","Cardano Chain adapter retrieves era markers on chain","Dummy adapter is intended to be used in a test environment …","File adapter is intended to be used in a test environment …","File adapter.","","","","","","","","","","","","","","","","","","","","","","Create era reader adapter from configuration settings.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create a new instance directly from markers","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","List of Era markers","Era reader adapter builder factory","CardanoChainAdapter factory","File adapter factory","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Tells what markers should be sent back by the adapter.","Sign an era markers payload","Era markers signature","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Verify the signature an era markers payload","","","","","","","","","","","","","","","","","","","","","","Message structure of a certificate list item","CertificateListItemMessage represents the metadata …","Message structure of a certificate list","Message structure of a certificate","CertificateMetadata represents the metadata associated to …","Structure to transport crate::entities::CertificatePending …","EpochSettings represents the settings of an epoch","From message adapter trait","Message structure of a Mithril Stake Distribution list item","Message structure of a Mithril Stake Distribution list","Message structure of a Mitrhil Stake Distribution","Message structure to register single signature.","Register Signer Message","Signer Message","Signer Message","Message structure of a snapshot list item","Message structure of a snapshot list","Message structure of a snapshot","To message adapter trait","TryFrom message adapter trait","Adapt entity to message","Adapt message to entity","Aggregate verification key The AVK used to sign during the …","Aggregate verification key The AVK used to sign during the …","","","","","","","","","","","","","","","Mithril beacon on the Cardano chain aka BEACON(p,n)","Mithril beacon on the Cardano chain aka BEACON(p,n)","Current Beacon","Mithril beacon on the Cardano chain","Mithril beacon on the Cardano chain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Hash of the associated certificate","Hash of the associated certificate","Hash of the associated certificate","Hash of the associated certificate","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","DateTime of creation","Date and time at which the Mithril Stake Distribution was …","Date and time at which the snapshot was created","Date and time at which the snapshot was created","","","","","","","","","","","","","","","","","","","","","","","","","","","Digest that is signed by the signer participants","Digest that is signed by the signer participants","Return a dummy test entity (test-only).","Return a dummy test entity (test-only).","CertificateMetadata factory","Provide a dummy instance for test.","Return a dummy test entity (test-only).","Dummy instance for test purposes.","Return a dummy test entity (test-only).","Return a dummy test entity (test-only).","Return a dummy test entity (test-only).","Return a dummy test entity (test-only).","Return a dummy test entity (test-only).","Return a dummy test entity (test-only).","Return a dummy test entity (test-only).","Current Epoch","Epoch at which the Mithril Stake Distribution is created","Epoch at which the Mithril Stake Distribution is created","Epoch at which registration is sent #[…","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert a set of signers into message parts","Genesis signature created from the original stake …","Hash of the current certificate Computed from the other …","Hash of the current certificate Computed from the other …","Hash of the Mithril Stake Distribution (different from the …","Hash of the Mithril Stake Distribution (different from the …","Date and time when the certificate was initiated …","Date and time when the certificate was initiated …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The KES period used to compute the verification key …","The KES period used to compute the verification key …","The KES period used to compute the verification key …","Locations where the binary content of the snapshot can be …","Locations where the binary content of the snapshot can be …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Certificate metadata aka METADATA(p,n)","Certificate metadata aka METADATA(p,n)","STM multi signature created from a quorum of single …","Next Protocol parameters","Next Protocol parameters","Signers that will be able to sign on the next epoch","The encoded operational certificate of stake pool operator …","The encoded operational certificate of stake pool operator …","The encoded operational certificate of stake pool operator …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The unique identifier of the signer","The unique identifier of the signer","The unique identifier of the signer","The unique identifier of the signer","Hash of the previous certificate in the chain This is …","Hash of the previous certificate in the chain This is …","Structured message that is used to created the signed …","Structured message that is used to created the signed …","Protocol parameters part of METADATA(p,n)","Protocol parameters part of METADATA(p,n)","Current Protocol parameters","Current Protocol parameters","Protocol parameters used to compute AVK","Protocol Version (semver) Useful to achieve backward …","Protocol Version (semver) Useful to achieve backward …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Date and time when the certificate was sealed Represents …","Date and time when the certificate was sealed Represents …","","","","","","","","","","","","","","","The single signature of the digest","Signed entity type","Signed entity type","Message that is signed by the signers aka H(MSG(p,n) || …","Message that is signed by the signers aka H(MSG(p,n) || …","The list of the active signers with their stakes and …","Current Signers","List of signers with stakes of the Mithril Stake …","Size of the snapshot file in Bytes","Size of the snapshot file in Bytes","The signer stake","","","","","","","","","","","","","","","The number of signers that contributed to the certificate …","Adapt entity to message","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Convert a set of signer message parts into a set of …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The public key used to authenticate signer signature","The public key used to authenticate signer signature","The public key used to authenticate signer signature","The encoded signer ‘Mithril verification key’ …","The encoded signer ‘Mithril verification key’ …","The encoded signer ‘Mithril verification key’ …","","","","","","","","","","","","","","","The indexes of the won lotteries that lead to the single …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Error raised when the list of signers given to the builder …","MultiSigner is the cryptographic engine in charge of …","Allow to build Single Or Multi signers to generate a …","SignerBuilder specific errors","The SingleSigner is the structure responsible for issuing …","Aggregate the given single signatures into a …","","","","","","","","","","","","","Build a MultiSigner based on the registered parties","Build non deterministic SingleSigner and …","Build deterministic SingleSigner and ProtocolInitializer …","","","","","","","","","","","","","Compute aggregate verification key from stake distribution","Compute aggregate verification key from stake distribution","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Return the partyId associated with this Signer.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","SignerBuilder constructor.","","","","","","","","","","Restore a SingleSigner based on the registered parties and …","","","","","","","","","Issue a single signature for the given message.","","","","","","","","","","","","","","","","","","","","","","","","","","Verify a single signature","","","","","","","","","","","","","Artifact is a trait for types that represent signed …","Beacon trait","This structure is responsible of calculating the message …","Mithril Signable Builder Service","A MithrilStakeDistributionSignableBuilder builder","SignableBuilder is trait for building a protocol message …","ArtifactBuilder Service trait","","","","","","","","","","","","","","","","","","","Compute a protocol message","Compute signable from signed entity type","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get artifact identifier","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","Constructor","MithrilSignableBuilderService factory","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Entity type returned by the result cursor.","Database query result Iterator wrapper. This wrapper …","SqLite hydration error","inconsistent data","data do not conform to expectations","data are missing","Projection is a definition of field mapping during a query.","Each projection field is defined by","A Provider is able to performe queries on a database and …","Handful tool to store SQL source aliases.","How to hydrate an entity from a SQLite result row","Where condition builder.","Add a new field to the definition. This is one of the …","Add a new parameter using a AND operator","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Field definition. Some field definitions can be fairly …","Turn the condition into a SQL string representation.","Turn the Projection into a string suitable for use in SQL …","Perform the parametrized definition query.","Perform the parametrized definition query.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create a Projection from a list of tuples …","Returns the argument unchanged.","Returns the argument unchanged.","Share the connection.","Return the definition of this provider, ie the actual SQL …","Returns the list of the ProjectionFields of this …","get an iterator from the current alias map","Construct a Projection that will allow to hydrate this …","This method is intended to be used when creating new …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Field name alias, this is the output name of the field.","Instanciate a new condition from an expression.","EntityCursor constructor.","ProjectionField constructor","Instanciate a new Projection","Create a new alias from a &[(name, alias)] list","Spawning entities from Result iterator. This iterator will …","Add a new condition with a OR operator","This indicates the SQL type of the output data.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Do a vacuum on the given connection, this will reconstruct …","","","","","","","Instanciate a condition with a IN statement.","","","","","","","","","","","","","Error raised when the underlying adapter fails.","The key type","The record type","A StakeStorer that use a StoreAdapter to store data.","Represent a way to store the stake of mithril party …","Generic error type for stores.","Implementing this trait will make store able to limit the …","Define a generic way to store data with the Store Adapter, …","","","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","This trait requires a way to get the internal adapter.","","Return the maximum number of elements that can exist in …","","Get the stakes of all party at a given epoch.","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","StakeStore factory","","","","","","Prune elements exceeding the specified limit.","Prune elements exceeding the specified limit.","","","","","Save the stakes in the store for a given epoch.","","","","","","","","","","","","","","","","","","","","","","StoreAdapter related errors","A StoreAdapter that store one fixed data record, for …","A StoreAdapter which always fails, for testing purpose.","Generic StoreAdapter error.","Error raised when the store initialization fails.","The key type","A StoreAdapter that store data in memory.","Error raised if a writting operation fails.","Error raised when the opening of a IO stream fails.","Error raised when the parsing of a IO stream fails.","Error while querying the subsystem.","The record type","Store adapter for SQLite3","Iterator over SQLite adapter results.","Represent a way to store Key/Value pair data.","Type conversion cannot be performed by this adapter.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get an iterator over the stored values, from the latest to …","","","","","Get the last n records in the store","","","","","Get the record stored using the given key.","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","MemoryAdapter factory","Create a new SQLiteAdapter instance.","Create a new instance of the iterator.","DumbStoreAdapter factory","FailStoreAdapter factory","","","","","","","","","","","","","","","","","","","Check if a record exist for the given key.","","","","","remove values from store","","","","","","","","","","","","","","","","","Store the given record.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Use a custom stake distribution","A fixture of Mithril data types.","A builder of mithril types.","Each party will have a random stake.","A signer fixture, containing a signer entity with its …","Methods that can be used to generate the stake …","Make a stake distribution where all parties will have the …","Tools to helps validate conformity to an OpenAPI …","","","","","","","","","","","","","Transform the specified parameters to a MithrilFixture.","","","","","","","","","","","","","","","","","Compute the Aggregate Verification Key for this fixture …","Compute the Aggregate Verification Key for this fixture.","Create a genesis certificate using the fixture signers for …","","If set the generated signers won’t be certified (meaning …","Fake data builders for testing.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","Get the path to this signer kes secret key","The path to this signer kes secret key file","","","","","","","","","MithrilFixture factory.","Decode this signer operational certificate if any","","","","","","","","","Shortcut to get the party id from the inner signer with …","A ProtocolSigner.","Get the fixture protocol parameters.","A ProtocolSigner.","Get the fixture protocol stake distribution.","","","","","","","","","Sign the given protocol message.","A SignerWithStake.","Get the fixture signers.","Get the fixture signers.","Get the fixture signers with stake.","Get the fixture stake distribution.","","","","","","","","","","","","","","","","","","","","","","","","","","","Decode this signer verification key signature certificate …","","","","","Set the seed used to generated the party ids","Set the protocol_parameters.","Set the number of signers that will be generated.","Set the generation method used to compute the stake …","","","","","","","","","The randomizer seed","APISpec helps validate conformity to an OpenAPI …","","","","","","","Sets the content type to specify/check, note that it …","Returns the argument unchanged.","APISpec factory from spec","Get all spec files","Get default spec file","Get spec file for era","Calls U::from(self).","","","","","","Sets the method to specify/check.","","","Sets the path to specify/check.","","","","","","","","","Validates conformity of a value against a schema","Validates if a request is valid","Validates if a response is valid","Verify conformity helper of API Specs","","","","Fake Beacon","Fake Certificate","Fake CertificatePending","Fake Digest","Fake EpochSettings","Fake Genesis Certificate","Fake Mithril Stake Distribution","Fake ProtocolParameters","Fake Signers","Fake SignersWithStake","Fake SingleSignatures","Fake Snapshots"],"i":[0,0,0,0,2,2,0,0,0,2,0,0,0,10,2,10,2,10,2,10,2,0,0,10,2,10,2,0,0,0,0,0,0,2,2,10,2,2,2,265,10,10,2,10,2,10,2,10,2,10,2,10,2,0,10,10,2,10,2,0,2,10,2,10,2,0,2,0,0,0,2,10,2,10,2,10,2,10,2,10,2,10,2,10,2,10,2,10,2,0,0,27,0,0,27,27,27,27,24,27,24,27,24,27,24,27,24,27,24,24,24,24,24,24,27,27,27,27,27,24,0,27,24,27,24,27,24,27,24,27,24,27,24,24,27,24,27,24,27,27,24,27,24,27,24,27,27,24,27,24,27,24,27,24,27,24,27,24,24,27,24,27,24,27,24,44,44,44,44,0,0,44,0,44,0,0,0,40,44,44,43,40,0,44,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,42,42,40,40,42,43,43,44,44,47,40,42,43,44,44,44,49,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,47,42,47,40,42,43,44,47,40,42,43,44,40,43,44,47,40,42,43,44,47,40,42,43,44,42,44,40,43,44,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,266,47,266,266,266,47,266,47,266,266,266,47,47,40,42,43,44,47,40,42,43,44,47,40,42,43,44,57,60,55,0,0,0,0,0,0,6,60,55,6,57,0,0,0,0,0,0,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,58,59,56,60,59,56,60,61,61,61,58,54,56,60,56,56,56,56,60,60,60,60,60,55,54,58,58,58,58,59,6,6,58,57,57,56,60,60,55,55,54,67,61,59,6,58,57,56,60,60,60,55,54,15,67,61,58,15,67,61,58,67,61,58,15,15,15,67,61,58,56,60,56,60,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,58,54,61,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,6,57,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,60,55,54,61,61,61,59,56,60,6,57,60,55,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,67,61,59,6,58,57,56,60,55,54,91,0,89,267,0,0,0,0,0,0,0,91,89,89,89,91,0,89,89,0,89,89,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,92,45,0,267,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,80,68,81,50,82,83,80,68,81,50,82,83,68,68,48,85,48,48,85,48,85,85,80,68,85,81,48,50,82,83,89,68,82,83,89,89,89,89,68,68,68,68,82,82,82,82,83,83,83,83,80,68,85,81,48,50,82,83,90,89,89,91,91,68,92,92,85,81,45,45,48,50,82,83,93,80,90,89,89,91,68,92,92,85,81,45,45,48,50,82,82,83,83,267,267,80,82,83,85,48,81,50,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,0,0,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,68,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,89,91,92,45,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,80,68,85,81,48,50,82,83,85,48,89,91,92,45,68,0,83,267,267,82,83,80,68,81,50,82,83,89,91,92,45,81,50,80,90,89,91,68,92,85,81,45,48,50,82,82,83,80,90,89,91,68,92,85,81,45,48,50,82,82,83,83,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,68,81,50,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,80,90,89,91,68,92,85,81,45,48,50,82,83,0,0,0,0,0,0,117,0,0,0,0,0,0,117,0,114,115,118,114,120,122,114,117,118,115,120,122,114,117,118,115,120,122,114,117,118,115,120,122,114,117,118,115,120,122,114,117,118,115,120,122,114,117,118,115,117,118,117,118,115,115,120,117,118,115,117,117,117,117,118,118,118,118,115,115,115,115,117,117,118,115,120,122,114,117,118,115,120,120,122,120,122,118,118,120,122,114,117,118,115,120,122,114,117,118,115,114,117,118,115,120,122,114,117,118,115,120,122,114,117,118,115,120,122,114,117,118,115,120,122,114,117,115,120,122,114,117,118,115,120,122,114,117,118,115,118,115,120,122,114,117,118,115,120,122,114,117,118,115,122,117,118,117,120,122,114,117,118,115,120,122,114,117,118,115,120,122,114,117,118,115,120,122,114,117,118,115,120,122,114,117,118,115,120,122,114,117,118,115,118,118,115,120,122,114,117,118,115,120,122,114,117,118,115,120,122,114,117,118,115,0,138,0,0,0,0,139,139,139,0,0,0,140,0,5,0,0,0,0,138,140,5,138,128,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,128,0,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,130,130,130,130,230,131,132,130,132,137,129,130,130,130,130,130,130,138,138,130,139,139,140,140,5,5,131,132,128,129,142,137,138,138,138,130,139,139,140,140,140,5,5,16,142,137,129,137,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,130,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,131,132,128,142,137,130,129,130,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,130,130,138,139,140,5,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,128,137,137,138,139,140,5,130,138,139,140,5,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,132,131,132,128,129,142,137,138,130,139,140,5,128,128,131,132,128,129,142,137,138,130,139,140,5,131,132,128,129,142,137,138,130,139,140,5,268,268,268,269,270,0,148,0,0,0,0,149,150,150,0,0,149,0,148,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,145,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,147,145,148,148,149,149,150,150,146,145,147,147,148,148,148,149,149,149,150,150,150,143,146,147,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,146,145,146,145,147,148,149,150,146,145,147,148,149,150,148,149,150,143,146,147,146,145,147,148,149,150,146,145,147,148,149,150,145,148,149,150,143,146,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,146,145,147,148,149,150,0,0,0,170,154,165,166,0,165,166,0,0,0,0,17,0,0,171,0,154,154,154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,165,166,77,170,161,77,0,0,0,0,0,0,77,77,0,0,0,0,0,0,0,161,0,0,17,77,77,77,77,39,164,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,39,156,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,164,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,17,39,155,156,77,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,17,39,155,156,77,157,158,159,160,161,41,35,164,165,166,167,79,168,169,77,161,79,77,161,79,36,36,39,155,41,35,167,79,164,36,39,155,77,157,158,159,41,35,169,36,17,156,77,158,159,160,161,41,35,166,167,79,168,169,169,166,36,157,160,36,154,170,17,39,155,156,77,77,77,157,158,159,160,161,41,35,165,166,167,79,168,169,36,36,36,36,154,154,154,154,170,170,170,170,17,17,17,17,77,77,77,77,158,158,158,158,159,159,159,159,161,161,161,161,41,41,41,41,165,165,165,165,166,166,166,166,167,167,167,167,79,79,79,79,168,168,168,168,169,169,169,169,36,17,156,77,158,159,160,161,41,35,166,167,79,168,169,36,36,154,170,170,17,17,39,155,156,77,77,171,171,157,158,159,160,161,161,41,35,164,165,166,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,35,164,165,165,165,166,167,167,79,79,79,168,169,17,79,39,166,36,17,77,160,169,166,41,156,155,77,36,17,77,39,160,166,36,165,166,155,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,39,154,154,35,167,79,159,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,35,158,159,41,39,39,36,36,39,155,156,158,159,160,41,35,167,79,168,169,77,156,157,156,77,77,77,77,77,167,79,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,17,77,161,79,167,79,168,35,35,77,39,39,155,156,157,160,155,170,171,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,155,36,17,156,77,158,159,160,161,41,35,166,167,79,168,169,41,168,164,156,164,39,155,156,160,169,79,77,77,77,77,36,154,17,39,155,156,77,157,158,159,160,161,41,35,164,165,166,167,79,168,169,168,36,170,17,77,171,161,166,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,167,79,167,79,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,168,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,36,154,170,17,39,155,156,77,171,157,158,159,160,161,41,35,164,165,166,167,79,168,169,194,194,0,0,0,0,0,0,0,0,190,0,0,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,34,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,191,192,193,190,191,192,193,190,34,34,191,190,190,191,191,192,190,191,191,191,191,192,192,192,192,190,190,190,190,190,191,190,191,192,194,194,195,195,193,190,190,34,197,191,192,194,195,193,190,190,192,192,192,192,192,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,193,34,190,193,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,191,34,197,191,192,195,193,193,193,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,194,195,196,197,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,191,190,193,191,192,193,190,194,195,190,34,197,191,192,194,195,193,190,190,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,34,197,191,192,194,195,193,190,271,271,272,272,199,199,199,0,0,0,0,0,0,0,199,204,198,202,203,199,200,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,198,204,198,202,203,199,200,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,199,200,199,200,201,199,200,199,200,199,199,199,199,200,200,200,200,199,200,199,200,204,198,202,203,199,200,201,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,200,198,202,203,204,198,202,203,199,200,201,204,198,202,203,199,200,201,204,202,203,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,199,200,201,200,200,199,200,204,198,202,203,199,200,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,200,204,198,202,203,199,200,201,204,198,202,203,199,200,201,204,198,202,203,199,200,201,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,273,274,205,207,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,207,209,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,213,214,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,213,214,217,218,205,206,207,208,210,211,212,213,214,215,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,217,218,205,207,208,209,210,211,212,213,214,215,216,217,218,211,213,214,216,205,206,207,208,209,210,211,212,213,214,215,216,217,218,210,210,210,210,212,212,212,212,214,214,214,214,215,215,215,215,216,216,216,216,217,217,217,217,218,218,218,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,212,213,214,215,216,217,218,212,205,205,207,213,214,206,208,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,210,212,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,207,205,209,211,209,210,212,216,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,210,212,215,216,205,207,205,207,206,208,209,211,213,206,208,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,206,208,205,206,207,208,209,210,211,212,213,214,215,216,217,218,215,209,215,205,207,208,209,213,217,218,212,205,206,207,208,209,210,211,212,213,214,215,216,217,218,206,275,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,212,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,210,212,216,210,212,216,205,206,207,208,209,210,211,212,213,214,215,216,217,218,215,205,206,207,208,209,210,211,212,213,214,215,216,217,218,205,206,207,208,209,210,211,212,213,214,215,216,217,218,224,0,0,0,0,220,220,225,223,224,220,225,223,224,220,225,223,224,223,223,223,220,225,223,224,220,225,223,224,220,225,223,224,220,223,223,224,224,220,225,223,224,225,220,225,223,224,220,225,223,224,220,225,223,224,220,225,223,224,220,225,223,224,220,225,223,224,223,220,225,223,224,220,225,223,224,224,223,220,225,223,224,220,225,223,224,225,224,220,225,223,224,220,225,223,224,220,225,223,224,220,225,223,224,220,225,223,224,220,225,223,224,220,220,225,223,224,220,225,223,224,220,225,223,224,0,0,0,0,0,0,0,227,228,229,227,228,229,227,228,229,227,228,229,227,228,229,227,228,229,231,276,227,228,229,229,227,228,229,162,227,228,229,227,228,229,227,228,229,227,228,229,227,228,229,227,228,229,227,228,227,228,229,227,228,229,227,228,229,227,228,229,162,162,162,162,227,228,229,227,228,229,227,228,229,227,228,229,227,228,229,227,228,229,227,228,229,227,228,229,227,228,229,277,0,0,125,125,125,0,0,0,0,0,0,123,232,232,234,235,123,125,233,232,234,235,123,125,233,232,234,235,123,125,233,232,234,235,123,125,233,232,234,235,123,125,233,232,234,235,123,125,233,233,233,232,123,233,235,232,123,277,277,125,125,233,232,234,235,123,123,125,233,277,277,123,233,239,239,232,234,235,123,125,233,232,234,235,123,125,233,232,235,123,125,233,232,234,235,123,125,233,234,232,234,235,123,125,233,232,234,235,123,125,233,235,232,234,235,123,233,234,232,235,232,234,235,123,125,233,232,234,235,123,125,233,125,232,234,235,123,125,233,232,234,235,123,125,233,233,125,232,234,235,123,125,233,232,234,235,123,125,233,232,234,235,123,125,233,232,234,235,123,125,233,232,234,235,123,125,233,232,234,235,123,125,233,0,232,234,235,123,125,233,232,232,234,235,123,125,233,232,234,235,123,125,233,240,278,278,0,0,0,0,0,244,240,244,240,244,240,244,240,244,240,244,240,240,240,244,240,240,278,244,278,244,279,244,244,240,244,240,244,240,244,240,244,240,244,240,244,244,240,244,240,240,278,278,244,240,244,240,279,244,240,240,244,240,244,240,244,240,244,240,244,240,244,240,244,240,244,240,244,240,0,0,0,241,241,242,0,241,241,241,241,242,0,0,0,241,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,254,247,248,241,241,251,252,254,247,248,241,242,251,252,247,248,242,251,252,247,248,242,251,252,247,248,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,254,251,252,254,247,248,241,251,252,254,247,248,241,254,254,254,254,254,254,254,254,254,254,254,254,254,251,252,254,247,248,254,254,254,254,254,251,252,254,247,248,241,251,252,254,247,248,241,241,242,251,252,247,248,242,251,252,247,248,251,252,254,247,248,241,251,252,254,247,248,241,242,251,252,247,248,254,241,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,251,252,254,247,248,241,261,0,0,261,0,0,261,0,258,261,259,113,258,261,259,113,258,261,259,113,258,258,261,259,113,258,261,259,113,258,261,259,113,259,113,259,113,259,259,259,258,258,0,259,113,258,261,259,113,258,261,259,113,258,261,259,113,258,261,259,113,258,261,259,113,113,113,258,261,259,113,258,261,259,113,259,113,258,261,259,113,258,261,259,113,113,113,259,113,259,258,261,259,113,258,261,259,113,113,113,259,259,259,259,259,113,258,261,259,113,258,261,259,113,258,261,259,113,258,261,259,113,258,261,259,113,258,261,259,113,113,258,261,259,113,258,258,258,258,258,261,259,113,258,261,259,113,280,0,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,0,0,0,0,0,0,0,0,0,0,0,0],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],1],[[],1],[[],1],[[],1],0,0,0,0,0,0,[[2,3],4],[[2,3],4],[[]],[5,2],[6,2],[[]],[[],[[9,[[8,[7]]]]]],[10,[[9,[[8,[7]]]]]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[],1],[[],1],[[]],[[]],0,[[[13,[15]],[13,[16]],17],10],[[]],[[]],[[]],[[]],0,[18],[[]],[[]],[[]],[[]],0,[2,[[1,[19]]]],0,0,0,[[],20],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[24,24],[[]],[[],[[21,[[26,[25]],27]]]],[24,[[21,[25,27]]]],[24,[[21,[28,27]]]],[[27,3],4],[[27,3],4],[29,27],[[]],[30,27],[[]],[[],[[33,[31,32]]]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[],1],[[],1],[[]],[[]],[[[13,[34]]],24],[[]],[[]],[[]],[[]],[18],[[]],[[]],[[]],[[]],[27,[[1,[19]]]],[[]],[[],20],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],23],[[],23],[[]],[[]],[[]],[[]],[[24,[33,[31,32]]]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[35,36,37,38],[[21,[39,40]]]],[37,[[21,[41,40]]]],[[40,3],4],[[40,3],4],[[42,3],4],[[43,3],4],[[43,3],4],[[44,3],4],[[44,3],4],[[]],[[]],[[]],[[]],[[]],[45,44],[43,44],[23,[[9,[[8,[7]]]]]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[46,47],[[[1,[[13,[48]]]]],42],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[18],[18],[18],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[42,41],[[21,[38,40]]]],[44,[[1,[19]]]],[[],20],[[],20],[[],20],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[39,[13,[49]],50],[[9,[[8,[7]]]]]],[[47,39,[13,[49]],50],[[9,[[8,[7]]]]]],[[39,[13,[49]],50],[[9,[[8,[7]]]]]],[[39,[13,[49]],50],[[9,[[8,[7]]]]]],[[39,50],[[9,[[8,[7]]]]]],[[47,39,50],[[9,[[8,[7]]]]]],[[[52,[51]],23,23,35],[[21,[44]]]],[[47,[52,[51]],23,23,35],[[21,[44]]]],[[41,39],53],[[41,39],53],[[39,[13,[49]]],[[9,[[8,[7]]]]]],[[47,39,[13,[49]]],[[9,[[8,[7]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[54,55],54],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[54,[[21,[56,57]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[58],[59,59],[56,56],[60,60],[[]],[[]],[[]],0,0,[[],61],[[],58],[[],54],[[56,56],53],[[60,60],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],0,0,0,0,[[59,3],4],[[6,3],4],[[6,3],4],[[58,3],[[21,[65]]]],[[57,3],4],[[57,3],4],[[56,3],4],[[60,3],[[21,[65]]]],[[60,3],4],[[55,3],4],[[55,3],[[21,[65]]]],[[54,3],4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[55,60],[55,60],[[]],[[]],[[]],[66,[[9,[[8,[7]]]]]],[[67,66],[[9,[[8,[7]]]]]],[[61,66],[[9,[[8,[7]]]]]],[[58,66],[[9,[[8,[7]]]]]],[[],[[9,[[8,[7]]]]]],[67,[[9,[[8,[7]]]]]],[61,[[9,[[8,[7]]]]]],[58,[[9,[[8,[7]]]]]],[[67,68],[[9,[[8,[7]]]]]],[[61,68],[[9,[[8,[7]]]]]],[[58,68],[[9,[[8,[7]]]]]],[68,[[9,[[8,[7]]]]]],[68,[[9,[[8,[7]]]]]],[[],[[9,[[8,[7]]]]]],[67,[[9,[[8,[7]]]]]],[61,[[9,[[8,[7]]]]]],[58,[[9,[[8,[7]]]]]],[[56,60],[[21,[[26,[69]],[8,[19]]]]]],[[[0,[70,71]],72],73],[[56,60,74],[[21,[69,[8,[19]]]]]],[[60,75]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[0]]],67],[[[1,[36]]],61],[[76,76,17],59],[[],58],[[],54],[61,[[1,[77]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[18],[18],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[60,78],21],[[55,78],21],[[54,78],21],[[61,[26,[56]]]],[[61,[26,[79]]]],0,[[]],[[]],[[]],[[],20],[[],20],[[],20],[[],20],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[80,80],[68,68],[81,81],[50,50],[82,82],[83,83],[[]],[[]],[[]],[[]],[[]],[[]],[68,20],[68,[[21,[84,0]]]],[[],48],[[],85],[48,50],[[],48],[[],85],[[[0,[86,87]]],48],[[[0,[86,87]]],85],[85,81],[88,[[21,[80]]]],[88,[[21,[68]]]],[88,[[21,[85]]]],[88,[[21,[81]]]],[88,[[21,[48]]]],[88,[[21,[50]]]],[88,[[21,[82]]]],[88,[[21,[83]]]],[[89,89],53],[[68,68],53],[[82,82],53],[[83,83],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[[90,3],4],[[89,3],4],[[89,3],4],[[91,3],4],[[91,3],4],[[68,3],4],[[92,3],4],[[92,3],4],[[85,3],4],[[81,3],4],[[45,3],4],[[45,3],4],[[48,3],4],[[50,3],4],[[82,3],4],[[83,3],4],[35,93],[[]],[[]],[94,89],[[]],[[]],[[]],[[]],[95,92],[[]],[[]],[95,45],[[]],[[]],[[]],[96,82],[[]],[[]],[97,83],[[[99,[98]]],[[21,[0]]]],[[[99,[98]]],[[21,[0]]]],[[[99,[98]]],[[21,[80,0]]]],[23,[[100,[82]]]],[23,[[100,[83]]]],[101,85],[102,48],[103,81],[104,50],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[105,[[21,[106,20]]]],[107,[[21,[105,20]]]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[108,73,73,109],68],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[18],[18],[18],[18],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[80,78],21],[[68,78],21],[[85,78],21],[[81,78],21],[[48,78],21],[[50,78],21],[[82,78],21],[[83,78],21],[[85,[52,[51]]],110],[[48,[52,[51]]],38],[89,[[1,[19]]]],[91,[[1,[19]]]],[92,[[1,[19]]]],[45,[[1,[19]]]],0,0,[83,[[111,[51]]]],[[[99,[98]]],[[21,[0]]]],[[[99,[98]]],[[21,[0]]]],[82,[[100,[20]]]],[83,[[100,[20]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[],20],[[],20],[[],20],[[],20],[81,103],[50,104],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[20,[[21,[82]]]],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[82,[[21,[20]]]],[[],21],[[],21],[83,[[21,[20]]]],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[68,[[21,[89]]]],[[81,[52,[51]],110],[[21,[92]]]],[[50,[52,[51]],38],[[21,[45]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[73,73]],[[]],[[],41],[[],93],[[112,93],[[26,[113]]]],[[84,53],[[1,[76]]]],0,0,0,0,0,0,0,0,0,[[114,115],114],0,0,[114,[[21,[116]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[117,117],[118,118],[[]],[[]],[[115,115],119],[[],119],[[120,117],[[21,[116]]]],[[117,117],53],[[118,118],53],[[115,115],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[117,3],4],[[117,3],4],[[118,3],4],[[115,3],4],[[]],[[]],[[]],[[]],[[]],[[]],[[120,117],[[21,[[1,[118]],116]]]],[120,121],[122,121],[[120,23],20],[[122,23],20],[[],123],[124,[[21,[118,125]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[121,120],[121,122],[[46,117,[13,[[126,[121]]]]],114],[23,[[21,[117,116]]]],[[127,23],115],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[118,118],[[1,[119]]]],[[115,115],[[1,[119]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[122,118],[[21,[118,116]]]],[[]],[[]],[[],20],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[128,128],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[128,129],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[130,130],[[]],[[130,130],119],[[],119],[[98,36],[[9,[[8,[7]]]]]],[[131,98,36],[[9,[[8,[7]]]]]],[[132,98,36],[[9,[[8,[7]]]]]],[130,[[21,[[135,[[0,[133,134]]]],136]]]],[[],132],[[],137],0,[[130,130],53],[[],53],[[],53],[[],53],[[],53],0,[[138,3],4],[[138,3],4],[[130,3],4],[[139,3],4],[[139,3],4],[[140,3],4],[[140,3],4],[[5,3],4],[[5,3],4],[[]],[[]],[[]],[[]],[[]],[[]],[140,138],[136,138],[[]],[[]],[[]],[141,139],[136,140],[139,140],[[]],[[]],[140,5],[[],[[9,[[8,[7]]]]]],[142,[[9,[[8,[7]]]]]],[137,[[9,[[8,[7]]]]]],0,[137,[[21,[73,[8,[19]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[98,[[21,[[26,[130]],140]]]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[1,[[13,[143]]]],46],131],[[23,53],132],[23,128],[76,142],[[],137],[76,[[21,[130,139]]]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[130,130],[[1,[119]]]],0,[18],[18],[18],[18],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[128,73],128],[[137,[1,[73]]],137],0,[138,[[1,[19]]]],[139,[[1,[19]]]],[140,[[1,[19]]]],[5,[[1,[19]]]],[[]],[[],20],[[],20],[[],20],[[],20],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[132,20]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[128,[52,[144]]],128],[[128,[52,[23]]],128],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[145,[[21,[146,116]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],147],[145,145],[[148,3],4],[[148,3],4],[[149,3],4],[[149,3],4],[[150,3],4],[[150,3],4],[[]],[[]],[[]],[[[33,[151,152]]],147],[149,148],[[]],[150,148],[136,149],[153,149],[[]],[[]],[136,150],[153,150],[[[26,[130]]],[[9,[[8,[7]]]]]],[[146,[26,[130]]],[[9,[[8,[7]]]]]],[[147,[26,[130]]],[[9,[[8,[7]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[98,146],[[98,23],145],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[18],[18],[18],[[],[[9,[[8,[7]]]]]],[146,[[9,[[8,[7]]]]]],[147,[[9,[[8,[7]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[145,53],145],[148,[[1,[19]]]],[149,[[1,[19]]]],[150,[[1,[19]]]],[26,[[9,[[8,[7]]]]]],[[146,26],[[9,[[8,[7]]]]]],[[147,26],[[9,[[8,[7]]]]]],[[],20],[[],20],[[],20],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[77,73]],[[77,77]],[[77,73]],[[77,77]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[36,36],[154,154],[17,17],[39,39],[155,155],[156,156],[77,77],[157,157],[158,158],[159,159],[160,160],[161,161],[41,41],[35,35],[[[164,[[0,[162,163]]]]],[[164,[[0,[162,163]]]]]],[165,165],[166,166],[167,167],[79,79],[168,168],[169,169],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[77,77],119],[[161,161],119],[[79,79],119],[[],119],[[],119],[[],119],[[36,36],[[21,[154,170]]]],[36,20],[39,20],[155,20],[41,20],[35,20],[167,20],[79,20],0,[[],36],[[],39],[[],155],[[],77],[[],157],[[],158],[[],159],[[],41],[[],35],[[],169],[88,[[21,[36]]]],[88,[[21,[17]]]],[88,[[21,[156]]]],[88,[[21,[77]]]],[88,[[21,[158]]]],[88,[[21,[159]]]],[88,[[21,[160]]]],[88,[[21,[161]]]],[88,[[21,[41]]]],[88,[[21,[35]]]],[88,[[21,[166]]]],[88,[[21,[167]]]],[88,[[21,[79]]]],[88,[[21,[168]]]],[88,[[21,[169]]]],0,[[],166],0,0,0,[[36,36],53],[[154,154],53],[[170,170],53],[[17,17],53],[[39,39],53],[[155,155],53],[[156,156],53],[[77,73],53],[[77,77],53],[[77,73],53],[[157,157],53],[[158,158],53],[[159,159],53],[[160,160],53],[[161,161],53],[[41,41],53],[[35,35],53],[[165,165],53],[[166,166],53],[[167,167],53],[[79,79],53],[[168,168],53],[[169,169],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[[36,3],4],[[36,3],4],[[154,3],4],[[170,3],4],[[170,3],4],[[17,3],4],[[17,3],4],[[39,3],4],[[155,3],4],[[156,3],4],[[77,3],4],[[77,3],4],[[171,3],4],[[171,3],4],[[157,3],4],[[158,3],4],[[159,3],4],[[160,3],4],[[161,3],4],[[161,3],4],[[41,3],4],[[35,3],4],[[[164,[[0,[162,172]]]],3],4],[[165,3],4],[[166,3],4],[[166,3],[[21,[65]]]],[[167,3],4],[[79,3],4],[[168,3],4],[[169,3],4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[93,35],[[]],[166,165],[[]],[166,165],[[]],[[]],[79,167],[113,79],[[]],[113,79],[[]],[[]],[[20,[1,[73]]],[[21,[17,0]]]],[[167,173],79],0,[166,77],[[[0,[70,71]],72],73],[[[0,[70,71]],72],73],[[[0,[70,71]],72],73],[160,20],[169,20],[166,[[21,[20,116]]]],[[41,161],[[1,[174]]]],[[156,175],[[1,[167]]]],[155,176],[[77,77],53],[[36,75]],[[17,75]],[[77,75]],0,0,[[74,23],[[21,[166,125]]]],0,[165,74],[166,74],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[39,53],[154,53],[154,53],0,0,0,0,0,[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,[[20,73,144],36],[[20,36,155,41,177,178,179],39],[[180,35,[182,[181]],[182,[181]],[26,[79]]],155],[[36,166,35,35,[26,[167]],[26,[167]]],156],[20,158],[[20,20],159],[[77,[26,[79]],35],160],[[],41],[[73,73,183],35],[[175,83,[1,[184]],[1,[185]],[1,[186]]],167],[[175,83,[1,[184]],[1,[185]],[1,[186]],173],79],[[175,82,[26,[187]]],168],[[20,36,73,[26,[20]]],169],[77,77],0,0,0,[[77,188],[[21,[77,171]]]],[77,77],[77,77],[77,77],[77,[[21,[77,171]]]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[36,36],[[1,[119]]]],[[17,17],[[1,[119]]]],[[77,77],[[1,[119]]]],[[161,161],[[1,[119]]]],[[79,79],[[1,[119]]]],0,0,0,0,[35,189],[77,[[21,[77,171]]]],0,0,0,0,0,0,0,[18],[18],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[36,78],21],[[17,78],21],[[156,78],21],[[77,78],21],[[158,78],21],[[159,78],21],[[160,78],21],[[161,78],21],[[41,78],21],[[35,78],21],[[166,78],21],[[167,78],21],[[79,78],21],[[168,78],21],[[169,78],21],[[41,161,174],[[1,[174]]]],0,0,0,0,0,0,0,0,0,0,[[77,73]],[[77,77]],[[77,77]],[[77,73]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[168,96],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[34,190,77]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[191,191],[192,192],[193,193],[190,190],[[]],[[]],[[]],[[]],[34,77],[34,190],[88,[[21,[191]]]],[88,[[21,[190]]]],[[],190],0,[[191,191],53],[[192,192],53],[[190,190],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],[[26,[190]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[[191,3],4],[[192,3],4],[[194,3],4],[[194,3],4],[[195,3],4],[[195,3],4],[[193,3],4],[[190,3],4],[[190,3],[[21,[65]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[23,[[21,[190]]]],[192,77],[192,191],[192,[[21,[190,195]]]],[192,[[1,[191]]]],[192,[[21,[[1,[190]],195]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[]],[[34,190],53],[[],193],[193,74],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[190,77],34],[[[13,[196]]],197],[[23,[1,[77]]],191],[[77,191,[1,[191]]],192],[23,195],[193,1],[193,1],[[193,74],1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[18],[18],[[],[[9,[[8,[7]]]]]],[[197,77],[[21,[192,194]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[191,78],21],[[190,78],21],[193],[[]],[[]],[[]],[[]],[[],20],[[],20],[[],20],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[23,[[21,[190]]]],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[198,[13,[15]]],[[21,[[13,[196]],0]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[199,199],[200,200],[[]],[[]],[[],201],[88,[[21,[199]]]],[88,[[21,[200]]]],[[199,199],53],[[200,200],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[[199,3],4],[[200,3],4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[26,[191]]],201],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[199,[1,[20]]],198],[[66,[13,[15]],103],202],[76,203],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[204,[[9,[[8,[7]]]]]],[202,[[9,[[8,[7]]]]]],[203,[[9,[[8,[7]]]]]],[201,[[9,[[8,[7]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[199,78],21],[[200,78],21],[[201,[26,[191]]]],[[200,85],[[21,[200,0]]]],0,[[]],[[]],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[200,103],[[21,[0]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[205,205],[206,206],[207,207],[208,208],[209,209],[210,210],[211,211],[212,212],[213,213],[214,214],[215,215],[216,216],[217,217],[218,218],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,[[],205],[[],206],[[],207],[[],208],[[],210],[[],211],[[],212],[[],213],[[],214],[[],215],[[],217],[[],218],[88,[[21,[205]]]],[88,[[21,[206]]]],[88,[[21,[207]]]],[88,[[21,[208]]]],[88,[[21,[209]]]],[88,[[21,[210]]]],[88,[[21,[211]]]],[88,[[21,[212]]]],[88,[[21,[213]]]],[88,[[21,[214]]]],[88,[[21,[215]]]],[88,[[21,[216]]]],[88,[[21,[217]]]],[88,[[21,[218]]]],0,0,[[],205],[[],207],[[],208],[[],209],[[],210],[[],211],[[],212],[[],213],[[],214],[[],215],[[],216],[[],217],[[],218],0,0,0,0,[[205,205],53],[[206,206],53],[[207,207],53],[[208,208],53],[[209,209],53],[[210,210],53],[[211,211],53],[[212,212],53],[[213,213],53],[[214,214],53],[[215,215],53],[[216,216],53],[[217,217],53],[[218,218],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[[],53],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[62,[[21,[63,64]]]],[[205,3],4],[[206,3],4],[[207,3],4],[[208,3],4],[[209,3],4],[[210,3],4],[[211,3],4],[[212,3],4],[[213,3],4],[[214,3],4],[[215,3],4],[[216,3],4],[[217,3],4],[[218,3],4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[79,212],[[]],[[]],[[]],[[]],[[]],[[]],[[[26,[79]]],[[26,[212]]]],0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],0,0,0,0,0,[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[205,78],21],[[206,78],21],[[207,78],21],[[208,78],21],[[209,78],21],[[210,78],21],[[211,78],21],[[212,78],21],[[213,78],21],[[214,78],21],[[215,78],21],[[216,78],21],[[217,78],21],[[218,78],21],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],219],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[[26,[212]]],[[219,[[26,[79]]]]]],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,[[220,[52,[168]],41],[[100,[221,222]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[223,220],[[223,79,[1,[98]]],100],[[223,79,[1,[98]]],100],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[220,37],[223,37],[[223,3],4],[[224,3],4],[[224,3],4],[[]],[[]],[[]],[[]],[225,175],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[[52,[79]],35],[[100,[223]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[18],[[223,175,226],[[100,[225]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[225,41],[[100,[[1,[168]]]]]],[[],20],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[220,41,168],100],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],[[9,[[8,[7]]]]]],[166,[[9,[[8,[7]]]]]],[[227,36],[[9,[[8,[7]]]]]],[[228,166],[[9,[[8,[7]]]]]],[[229,77],[[9,[[8,[7]]]]]],[[],229],[[]],[[]],[[]],[[],20],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[[13,[230]],98,46],227],[[[13,[231]],[13,[231]]],228],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[162,78],21],[[162,78],21],[[162,78],21],[[162,78],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,[[123,23,23,23]],[[232,232],232],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[233,233],[[]],[[],232],[[],123],[[],233],0,[232],[[123,233],20],[232,[[21,[234,116]]]],[232,[[21,[234,116]]]],[[125,3],4],[[125,3],4],[[233,3],4],[[]],[[]],[[]],[[]],[52,123],[[]],[[]],[[],121],[23,20],[123,[[26,[235]]]],[233,[[236,[20,20]]]],[[],123],[124,[[21,[71,125]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],0,[[23,[26,[237]]],232],[238,234],[[23,23,23],235],[[[26,[235]]],123],[52,233],[[[234,[239]]],[[1,[239]]]],[[232,232],232],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[18],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],20],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[13,[[126,[121]]]]],219],[[]],[[]],[[]],[[]],[[]],[[]],[[23,[26,[237]]],232],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[240,3],4],[[240,3],4],[[]],[241,240],[[]],[[],[[243,[[8,[242]]]]]],[244,[[243,[[8,[242]]]]]],[[],[[1,[74]]]],[244,[[1,[74]]]],[77,[[9,[[8,[7]]]]]],[[244,77],[[9,[[8,[7]]]]]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[],1],[[],1],[[]],[[]],[[[8,[242]],[1,[74]]],244],[[]],[[]],[[]],[[]],[18],[245,[[9,[[8,[7]]]]]],[245,[[9,[[8,[7]]]]]],[[]],[[]],[[]],[[]],[[77,176],[[9,[[8,[7]]]]]],[[244,77,176],[[9,[[8,[7]]]]]],[240,[[1,[19]]]],[[],20],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],246],[[],247],[[],248],[[241,3],4],[[241,3],4],[[]],[[]],[[]],[[]],[[]],[[]],[[],[[9,[[8,[7]]]]]],[[[251,[[0,[70,249,250,245,163]],[0,[250,245,163]]]]],[[9,[[8,[7]]]]]],[[[252,[[0,[250,245,107,106]],[0,[250,245,107,106]]]]],[[9,[[8,[7]]]]]],[[[247,[[0,[253,163,250,245]],[0,[163,250,245]]]]],[[9,[[8,[7]]]]]],[[[248,[[0,[253,163,250,245]],[0,[163,250,245]]]]],[[9,[[8,[7]]]]]],[74,[[9,[[8,[7]]]]]],[[[251,[[0,[70,249,250,245,163]],[0,[250,245,163]]]],74],[[9,[[8,[7]]]]]],[[[252,[[0,[250,245,107,106]],[0,[250,245,107,106]]]],74],[[9,[[8,[7]]]]]],[[[247,[[0,[253,163,250,245]],[0,[163,250,245]]]],74],[[9,[[8,[7]]]]]],[[[248,[[0,[253,163,250,245]],[0,[163,250,245]]]],74],[[9,[[8,[7]]]]]],[[],[[9,[[8,[7]]]]]],[[[251,[[0,[70,249,250,245,163]],[0,[250,245,163]]]]],[[9,[[8,[7]]]]]],[[[252,[[0,[250,245,107,106]],[0,[250,245,107,106]]]]],[[9,[[8,[7]]]]]],[[[247,[[0,[253,163,250,245]],[0,[163,250,245]]]]],[[9,[[8,[7]]]]]],[[[248,[[0,[253,163,250,245]],[0,[163,250,245]]]]],[[9,[[8,[7]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[1,[26]]],[[21,[[251,[[0,[70,249,250,245,163]],[0,[250,245,163]]]],241]]]],[[23,[13,[[126,[121]]]]],[[21,[[252,[107,106]],241]]]],[[121,23],[[21,[[254,[106]],241]]]],[[],247],[[],248],[254,1],[[],255],[[],256],[[],255],[[],256],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[18],[[],[[9,[[8,[7]]]]]],[[[251,[[0,[70,249,250,245,163]],[0,[250,245,163]]]]],[[9,[[8,[7]]]]]],[[[252,[[0,[250,245,107,106]],[0,[250,245,107,106]]]]],[[9,[[8,[7]]]]]],[[[247,[[0,[253,163,250,245]],[0,[163,250,245]]]]],[[9,[[8,[7]]]]]],[[[248,[[0,[253,163,250,245]],[0,[163,250,245]]]]],[[9,[[8,[7]]]]]],[[],[[9,[[8,[7]]]]]],[[[251,[[0,[70,249,250,245,163]],[0,[250,245,163]]]]],[[9,[[8,[7]]]]]],[[[252,[[0,[250,245,107,106]],[0,[250,245,107,106]]]]],[[9,[[8,[7]]]]]],[[[247,[[0,[253,163,250,245]],[0,[163,250,245]]]]],[[9,[[8,[7]]]]]],[[[248,[[0,[253,163,250,245]],[0,[163,250,245]]]]],[[9,[[8,[7]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[[9,[[8,[7]]]]]],[[[251,[[0,[70,249,250,245,163]],[0,[250,245,163]]]]],[[9,[[8,[7]]]]]],[[[252,[[0,[250,245,107,106]],[0,[250,245,107,106]]]]],[[9,[[8,[7]]]]]],[[[247,[[0,[253,163,250,245]],[0,[163,250,245]]]]],[[9,[[8,[7]]]]]],[[[248,[[0,[253,163,250,245]],[0,[163,250,245]]]]],[[9,[[8,[7]]]]]],[[],257],[[],20],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[258,259],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[259,259],[113,113],[[]],[[]],[259,177],[259,37],[[259,36],39],[[],258],[258,258],0,[[259,3],4],[[113,3],4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[14,[[14,[12]]]],[113,[[1,[98]]]],0,[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[35,[26,[113]],112],259],[113,[[1,[68]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[113,175],0,[259,35],0,[259,112],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[113,41],[[1,[168]]]],0,[259,[[26,[167]]]],[259,[[26,[113]]]],[259,[[26,[79]]]],[259,176],[[]],[[]],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],23],[[],23],[[],23],[[],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[113,[[1,[260]]]],[[]],[[]],[[]],[[]],[[258,[111,[51]]],258],[[258,35],258],[[258,74],258],[[258,261],258],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[]],[[]],[[]],[[]],[[],1],[[],1],[[262,23],262],[[]],[23,262],[[],[[26,[20]]]],[[],20],[190,20],[[]],[[[8,[11]]],[[8,[12,11]]]],[13,[[13,[12]]]],[14,[[14,[12]]]],[[],1],[[]],[[262,23],262],[[]],[[]],[[262,23],262],[[]],[[]],[[],21],[[],21],[[],22],[[],23],[[]],[[]],[[262,69,69],[[21,[262,20]]]],[[262,107],[[21,[262,20]]]],[[262,[264,[263]]],[[21,[262,20]]]],[[[26,[20]],23,23,23,107,[264,[263]]]],[[]],[[]],[[]],[[],36],[20,39],[[],156],[36,[[26,[51]]]],[[],157],[23,39],[73,[[26,[160]]]],[[],35],[74,[[26,[167]]]],[74,[[26,[79]]]],[[[26,[187]]],168],[73,[[26,[169]]]]],"c":[],"p":[[4,"Option"],[4,"BeaconProviderError"],[3,"Formatter"],[6,"Result"],[4,"ImmutableFileObserverError"],[4,"ChainObserverError"],[8,"Future"],[3,"Box"],[3,"Pin"],[3,"BeaconProviderImpl"],[3,"Global"],[8,"Any"],[3,"Arc"],[3,"Rc"],[8,"ChainObserver"],[8,"ImmutableFileObserver"],[4,"CardanoNetwork"],[3,"Demand"],[8,"Error"],[3,"String"],[4,"Result"],[3,"TypeId"],[15,"str"],[3,"APIVersionProvider"],[3,"Version"],[3,"Vec"],[4,"APIVersionProviderError"],[3,"VersionReq"],[3,"Error"],[3,"Error"],[6,"OpenAPIFileName"],[6,"OpenAPIVersionRaw"],[3,"HashMap"],[3,"EraChecker"],[3,"ProtocolParameters"],[3,"Beacon"],[6,"ProtocolAggregateVerificationKey"],[6,"ProtocolGenesisSignature"],[3,"Certificate"],[4,"CertificateGenesisProducerError"],[3,"ProtocolMessage"],[3,"CertificateGenesisProducer"],[4,"CertificateRetrieverError"],[4,"CertificateVerifierError"],[4,"ProtocolGenesisError"],[3,"Logger"],[3,"MithrilCertificateVerifier"],[3,"ProtocolGenesisSigner"],[8,"CertificateRetriever"],[3,"ProtocolGenesisVerifier"],[15,"u8"],[15,"slice"],[15,"bool"],[3,"TxDatumBuilder"],[4,"TxDatumFieldValue"],[3,"TxDatum"],[4,"TxDatumError"],[3,"MockChainObserver"],[3,"CardanoCliRunner"],[4,"TxDatumFieldTypeName"],[3,"FakeObserver"],[8,"Serializer"],[3,"Ok"],[3,"Error"],[3,"Error"],[6,"ChainAddress"],[3,"CardanoCliChainObserver"],[3,"OpCert"],[4,"Value"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[15,"u64"],[15,"usize"],[8,"Hasher"],[3,"PathBuf"],[3,"Epoch"],[8,"Serializer"],[3,"SignerWithStake"],[3,"Sum6KesBytes"],[3,"EraMarkersVerifier"],[3,"ProtocolSingleSignature"],[3,"ProtocolSignerVerificationKey"],[6,"ProtocolPartyId"],[3,"EraMarkersSigner"],[8,"CryptoRng"],[8,"RngCore"],[8,"Deserializer"],[4,"ProtocolRegistrationErrorWrapper"],[3,"ColdKeyGenerator"],[4,"ProtocolInitializerErrorWrapper"],[4,"EraMarkersVerifierError"],[6,"ProtocolParameters"],[4,"RegisterError"],[6,"SignatureError"],[3,"StmSig"],[6,"StmVerificationKeyPoP"],[3,"Path"],[8,"AsRef"],[6,"Result"],[6,"EraMarkersVerifierSecretKey"],[6,"ProtocolGenesisSecretKey"],[6,"EraMarkersVerifierVerificationKey"],[6,"ProtocolGenesisVerificationKey"],[6,"HexEncodedKey"],[8,"DeserializeOwned"],[8,"Serialize"],[3,"PublicKey"],[3,"Keypair"],[6,"EraMarkersVerifierSignature"],[15,"array"],[6,"ProtocolStakeDistribution"],[3,"SignerFixture"],[3,"DatabaseVersionChecker"],[3,"SqlMigration"],[6,"StdError"],[4,"ApplicationNodeType"],[3,"DatabaseVersion"],[4,"Ordering"],[3,"DatabaseVersionProvider"],[3,"Connection"],[3,"DatabaseVersionUpdater"],[3,"Projection"],[3,"Row"],[4,"HydrationError"],[3,"Mutex"],[6,"DbVersion"],[3,"DummyImmutablesDbBuilder"],[3,"DummyImmutableDb"],[3,"ImmutableFile"],[3,"CardanoImmutableDigester"],[3,"DumbImmutableDigester"],[8,"Write"],[8,"Digest"],[6,"Output"],[3,"Error"],[3,"DumbImmutableFileObserver"],[4,"ImmutableDigesterError"],[4,"ImmutableFileCreationError"],[4,"ImmutableFileListingError"],[3,"ParseIntError"],[3,"ImmutableFileSystemObserver"],[8,"ImmutableFileDigestCacheProvider"],[6,"ImmutableFileNumber"],[3,"JsonImmutableFileDigestCacheProviderBuilder"],[3,"JsonImmutableFileDigestCacheProvider"],[3,"MemoryImmutableFileDigestCacheProvider"],[4,"ImmutableDigesterCacheProviderError"],[4,"ImmutableDigesterCacheStoreError"],[4,"ImmutableDigesterCacheGetError"],[6,"ImmutableFileName"],[6,"HexEncodedDigest"],[3,"Error"],[4,"BeaconComparison"],[3,"CertificateMetadata"],[3,"CertificatePending"],[3,"EpochSettings"],[3,"InternalServerError"],[3,"ClientError"],[3,"MithrilStakeDistribution"],[4,"ProtocolMessagePartKey"],[8,"Artifact"],[8,"Clone"],[3,"SignedEntity"],[4,"SignedEntityTypeDiscriminants"],[4,"SignedEntityType"],[3,"Signer"],[3,"SingleSignatures"],[3,"Snapshot"],[4,"BeaconComparisonError"],[4,"EpochError"],[8,"Debug"],[6,"Stake"],[6,"ProtocolMessagePartValue"],[6,"PartyId"],[6,"StakeDistribution"],[6,"HexEncodedAgregateVerificationKey"],[6,"HexEncodedMultiSignature"],[6,"HexEncodedGenesisSignature"],[6,"ProtocolVersion"],[3,"Utc"],[3,"DateTime"],[15,"f64"],[6,"HexEncodedVerificationKeySignature"],[6,"HexEncodedOpCert"],[6,"KESPeriod"],[6,"LotteryIndex"],[15,"i64"],[6,"U8F24"],[4,"SupportedEra"],[3,"EraMarker"],[3,"EraEpochToken"],[3,"SupportedEraIter"],[4,"EraReaderError"],[3,"UnsupportedEraError"],[8,"EraReaderAdapter"],[3,"EraReader"],[3,"EraReaderAdapterBuilder"],[4,"EraReaderAdapterType"],[3,"EraMarkersPayloadCardanoChain"],[3,"EraReaderDummyAdapter"],[3,"EraReaderCardanoChainAdapter"],[3,"EraReaderFileAdapter"],[3,"EraReaderBootstrapAdapter"],[3,"CertificateMessage"],[3,"CertificateListItemMessageMetadata"],[3,"CertificateListItemMessage"],[3,"CertificateMetadataMessage"],[3,"CertificatePendingMessage"],[3,"SignerMessage"],[3,"EpochSettingsMessage"],[3,"SignerWithStakeMessagePart"],[3,"MithrilStakeDistributionMessage"],[3,"MithrilStakeDistributionListItemMessage"],[3,"RegisterSignatureMessage"],[3,"RegisterSignerMessage"],[3,"SnapshotMessage"],[3,"SnapshotListItemMessage"],[6,"StdResult"],[3,"MultiSigner"],[6,"ProtocolMultiSignature"],[6,"ProtocolAggregationError"],[3,"SignerBuilder"],[4,"SignerBuilderError"],[3,"SingleSigner"],[6,"ProtocolInitializer"],[3,"CardanoImmutableFilesFullSignableBuilder"],[3,"MithrilSignableBuilderService"],[3,"MithrilStakeDistributionSignableBuilder"],[8,"ImmutableDigester"],[8,"SignableBuilder"],[3,"WhereCondition"],[3,"SourceAlias"],[3,"EntityCursor"],[3,"ProjectionField"],[3,"Iter"],[4,"Value"],[3,"CursorWithOwnership"],[8,"SqLiteEntity"],[4,"StoreError"],[4,"AdapterError"],[8,"StoreAdapter"],[3,"RwLock"],[3,"StakeStore"],[8,"Sync"],[3,"Replacements"],[3,"DumbStoreAdapter"],[3,"FailStoreAdapter"],[8,"Eq"],[8,"Send"],[3,"MemoryAdapter"],[3,"SQLiteAdapter"],[8,"PartialEq"],[3,"SQLiteResultIterator"],[3,"Recompositions"],[3,"Decompositions"],[3,"StreamSafe"],[3,"MithrilFixtureBuilder"],[3,"MithrilFixture"],[6,"ProtocolSignerVerificationKeySignature"],[4,"StakeDistributionGenerationMethod"],[3,"APISpec"],[3,"Bytes"],[3,"Response"],[8,"BeaconProvider"],[8,"CertificateVerifier"],[8,"SerDeShelleyFileFormat"],[13,"NotEnoughImmutable"],[13,"FileStemExtraction"],[13,"FileNameExtraction"],[13,"CurrentEraNotFound"],[13,"AdapterFailure"],[8,"FromMessageAdapter"],[8,"ToMessageAdapter"],[8,"TryFromMessageAdapter"],[8,"SignableBuilderService"],[8,"Provider"],[8,"StorePruner"],[8,"StakeStorer"],[13,"RandomDistribution"]]},\ -"mithril_signer":{"doc":"Mithril Signer crate documentation","t":"NIEDNNDNDNDDNNNNNDDNNNDDINNNNNNIEEINNDDEIEDDNLLMMKLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLKLMMLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLKLKLLMAMLLMMLLLLLLLLLLMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLKLLLKLKLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLMLLLLKLKLKLMMKLKLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLLMMLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMAF","n":["AggregateVerificationKeyComputationFailed","AggregatorClient","AggregatorClientError","AggregatorHTTPClient","ApiVersionMismatch","Codec","Configuration","Critical","DefaultConfiguration","FileParse","FromEpochSettingsAdapter","FromPendingCertificateMessageAdapter","HTTPClientCreation","IOError","Init","JsonParseFailed","KeepState","MithrilProtocolInitializerBuilder","MithrilSingleSigner","NoStakeForSelf","NoStakeForSigner","NoValueError","ProductionServiceBuilder","ProtocolInitializerStore","ProtocolInitializerStorer","ProtocolSignerCreationFailure","ProxyCreation","Registered","RemoteServerLogical","RemoteServerTechnical","RemoteServerUnreachable","Runner","RunnerError","RuntimeError","ServiceBuilder","SignatureFailed","Signed","SignerRunner","SignerServices","SignerState","SingleSigner","SingleSignerError","StateMachine","ToRegisterSignerMessageAdapter","Unregistered","adapt","adapt","aggregator_endpoint","api_version_provider","associate_signers_with_stake","associate_signers_with_stake","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","beacon_provider","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build_era_reader_adapter","can_i_sign","can_i_sign","cardano_cli_path","cardano_node_socket_path","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","certificate_handler","chain_observer","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone_into","clone_into","clone_into","clone_into_box","collect","compute_aggregate_verification_key","compute_aggregate_verification_key","compute_message","compute_message","compute_single_signature","compute_single_signature","compute_single_signatures","compute_single_signatures","cycle","data_stores_directory","database","db_directory","default","deserialize","digester","disable_digests_cache","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","era_checker","era_reader","era_reader_adapter_params","era_reader_adapter_type","era_reader_adapter_type","erased_serialize","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_adapter","get_current_beacon","get_current_beacon","get_epoch_settings","get_epoch_settings","get_last_protocol_initializer","get_last_protocol_initializer","get_max_records","get_network","get_party_id","get_party_id","get_pending_certificate","get_pending_certificate","get_protocol_initializer","get_protocol_initializer","get_sqlite_file","get_state","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is_critical","is_init","is_registered","is_signed","is_unregistered","kes_secret_key_path","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","network","network_magic","new","new","new","new","new","new","operational_certificate_path","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","override_chain_observer_builder","override_immutable_file_observer_builder","party_id","prepare_request_builder","protocol_initializer_store","provide","provide","provide","provide","register_signatures","register_signatures","register_signer","register_signer","register_signer_to_aggregator","register_signer_to_aggregator","relay_endpoint","reset_digests_cache","retrieve_epoch_settings","retrieve_epoch_settings","retrieve_pending_certificate","retrieve_pending_certificate","run","run_interval","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","save_protocol_initializer","save_protocol_initializer","send_single_signature","send_single_signature","serialize","signable_builder_service","single_signer","source","stake_store","store_retention_limit","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","try_adapt","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_era_checker","update_era_checker","update_stake_distribution","update_stake_distribution","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","message","message","nested_error","nested_error","epoch","epoch","epoch","signed_entity_type","migration","get_migrations"],"q":[[0,"mithril_signer"],[662,"mithril_signer::RuntimeError"],[666,"mithril_signer::SignerState"],[670,"mithril_signer::database"],[671,"mithril_signer::database::migration"]],"d":["Avk computation Error","Trait for mocking and testing a AggregatorClient","Error structure for the Aggregator Client.","AggregatorHTTPClient is a http client for an aggregator","Incompatible API version error","Encoding / Decoding error.","Client configuration","Critical error means the runtime will exit and the …","Default configuration with all the default values for …","Parse file error","Adapter to convert EpochSettingsMessage to EpochSettings.","Adapter to turn CertificatePendingMessage instances into …","HTTP client creation error","Mostly network errors.","Starting state","Could not parse response.","KeepState error means the runtime will keep its state and …","This is responsible of creating new instances of …","Implementation of the SingleSigner.","Could not associate my node with a stake.","Could not find the stake for one of the signers.","Value was expected from a subsystem but None was returned.","Create a SignerService instance for Production environment.","Implementation of the ProtocolInitializerStorer","Store the ProtocolInitializer used for each Epoch. This is …","Cryptographic Signer creation error.","Proxy creation error","Registered state. The Signer has successfuly registered …","The aggregator host responded it cannot fulfill our …","The aggregator host has returned a technical error.","Could not reach aggregator.","This trait is mainly intended for mocking.","This type represents the errors thrown from the Runner.","RuntimeError Error kinds tied to their faith in the state …","The ServiceBuilder is intended to manage Services instance …","Signature Error","Signed state. The Signer has signed the message for the …","Controller methods for the Signer’s state machine.","This structure groups all the services required by the …","Different possible states of the state machine.","The SingleSigner is the structure responsible of issuing …","SingleSigner error structure.","The state machine is responsible of the execution of the …","Adapter to create RegisterSignerMessage from Signer …","Hold the latest known epoch in order to help …","Method to convert.","Method to trigger the conversion.","Aggregator endpoint","API version provider","From a list of signers, associate them with the stake read …","","","","","","","","","","","","","","","","","","","","Beacon provider service","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a SignerService instance.","Build a Services for the Production environment.","Create a ProtocolInitializer instance.","Create era reader adapter from configuration settings.","Check if all prerequisites for signing are met.","","Cardano CLI tool path","Path of the socket used by the Cardano CLI tool to …","","","","","","","","","","","","","","","","","","","Certificate handler service","Chain Observer service","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Compute aggregate verification key from stake distribution","Compute aggregate verification key from stake distribution","Create the message to be signed with the single signature.","","Create the single signature.","","Computes single signatures","","Perform a cycle of the state machine.","Directory to store signer data (Stakes, Protocol …","database module. This module contains the entities …","Directory to snapshot","","","Digester service","Disable immutables digests cache.","","","","","","","","","","","Era checker service","Era reader service","Era reader adapter parameters","Era reader adapter type","Era reader adapter type","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Fetch the current beacon from the Cardano node.","","Fetch the current epoch settings if any.","","Return the list of the N last saved protocol initializers …","","","Return the CardanoNetwork value from the configuration.","Get party id","Get party id","Fetch the current pending certificate if any.","","Fetch a protocol initializer if any saved for the given …","","Create the SQL store directory if not exist and return the …","Return the current state of the state machine.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Easy matching Critical errors.","Returns true if the state in Init","Returns true if the state in Registered","Returns true if the state in Signed","Returns true if the state in Unregistered","File path to the KES secret key of the pool","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Cardano network","Cardano Network Magic number useful for TestNet & DevNet","AggregatorHTTPClient factory","Create a new ProtocolInitializerStore.","Create a new Runner instance.","Create a new production service builder.","Create a new StateMachine instance.","Create a new instance of the MithrilSingleSigner.","File path to the operational certificate of the pool","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Override default chain observer builder.","Override immutable file observer builder.","Party Id","Forge a client request adding protocol version in the …","ProtocolInitializer store","","","","","Registers single signatures with the aggregator.","","Registers signer with the aggregator.","","Register the signer verification key to the aggregator.","","Relay endpoint","If set the existing immutables digests cache will be reset.","Retrieves epoch settings from the aggregator","","Retrieves a pending certificate from the aggregator","","Launch the state machine until an error occurs or it is …","Run Interval","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Save a protocol initializer for the given Epoch.","","Send the single signature to the aggregator in order to be …","","","Signable Builder Service","SingleSigner service","","Stake store service","Store retention limit. If set to None, no limit will be …","","","","","","","","","Adapter method","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Read the current era and update the EraChecker.","","Read the stake distribution and store it.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Context error message","Context error message","Eventual previous error message","Eventual previous error message","Current Epoch","Epoch when Signer may sign.","Epoch when Signer signed.","Entity type that is signed","Migration module","Get all the migrations required by this version of the …"],"i":[34,0,0,0,47,34,0,40,0,27,0,0,47,47,43,47,40,0,0,27,27,27,0,0,0,34,47,43,47,47,47,0,0,0,0,34,43,0,0,0,0,0,0,0,43,76,77,20,63,64,10,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,63,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,80,11,79,20,64,10,20,20,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,63,63,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,20,26,27,20,26,27,26,26,81,35,64,10,64,10,81,35,39,20,0,20,26,20,63,20,27,43,27,27,27,27,43,43,43,43,63,63,20,20,26,20,47,47,20,26,40,40,27,27,43,43,34,34,62,76,78,77,52,10,11,63,39,79,35,47,47,20,26,40,40,40,27,43,34,52,64,10,64,10,82,52,52,20,81,35,64,10,82,52,20,39,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,40,43,43,43,43,20,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,20,20,62,52,10,11,39,35,20,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,11,11,20,62,63,47,40,27,34,83,62,83,62,64,10,20,20,83,62,83,62,39,20,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,82,52,64,10,20,63,63,47,63,20,20,26,27,47,40,27,43,34,78,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,64,10,64,10,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,84,85,84,85,86,87,88,88,0,0],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,2],[[],3],0,0,[[4,[6,[5]]],[[9,[[8,[7]]]]]],[[10,4,[6,[5]]],[[9,[[8,[7]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[[9,[[8,[7]]]]]],[11,[[9,[[8,[7]]]]]],[[12,13,[15,[14]],[15,[16]]],[[19,[17,18]]]],[[20,[22,[21]]],[[19,[[22,[23]],24]]]],[25,[[9,[[8,[7]]]]]],[[10,25],[[9,[[8,[7]]]]]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[20,20],[26,26],[27,27],[[]],[[]],[[]],[26,[[8,[28]]]],[26,[[19,[[31,[29,30]],32]]]],[[[6,[33]],17],[[19,[[15,[29]],34]]]],[[35,[6,[33]],17],[[19,[[15,[29]],34]]]],[[36,[6,[33]]],[[9,[[8,[7]]]]]],[[10,36,[6,[33]]],[[9,[[8,[7]]]]]],[[4,37,[6,[33]]],[[9,[[8,[7]]]]]],[[10,4,37,[6,[33]]],[[9,[[8,[7]]]]]],[[37,[6,[33]],17],[[19,[[15,[38]],34]]]],[[35,37,[6,[33]],17],[[19,[[15,[38]],34]]]],[39,[[19,[40]]]],0,0,0,[[],26],[41,[[19,[20]]]],0,0,[[27,27],42],[[43,43],42],[[],42],[[],42],[[],42],[[],42],[[],42],[[],42],[[],42],[[],42],0,0,0,0,0,[44,[[19,[45,46]]]],[[47,48],49],[[47,48],49],[[20,48],49],[[26,48],49],[[40,48],49],[[40,48],49],[[27,48],49],[[27,48],49],[[43,48],49],[[43,48],49],[[34,48],49],[[34,48],49],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[50,47],[[]],[[]],[[]],[27,40],[[]],[51,40],[[]],[[]],[[]],[52,[[54,[[8,[53]]]]]],[[],[[9,[[8,[7]]]]]],[10,[[9,[[8,[7]]]]]],[[],[[9,[[8,[7]]]]]],[10,[[9,[[8,[7]]]]]],[55,[[9,[[8,[7]]]]]],[[52,55],[[9,[[8,[7]]]]]],[52,[[15,[55]]]],[20,[[19,[56,32]]]],[[],57],[35,57],[[],[[9,[[8,[7]]]]]],[10,[[9,[[8,[7]]]]]],[4,[[9,[[8,[7]]]]]],[[52,4],[[9,[[8,[7]]]]]],[20,14],[39,43],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[40,42],[43,42],[43,42],[43,42],[43,42],0,[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[29,[15,[29]],[22,[61]]],62],[[[8,[53]],[15,[55]]],52],[[20,63],10],[20,11],[[43,[8,[64]],65],39],[57,35],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[11,11],[11,11],0,[[62,66],66],0,[67],[67],[67],[67],[[36,38],[[9,[[8,[7]]]]]],[[62,36,38],[[9,[[8,[7]]]]]],[[4,5],[[9,[[8,[7]]]]]],[[62,4,5],[[9,[[8,[7]]]]]],[[4,13],[[9,[[8,[7]]]]]],[[10,4,13],[[9,[[8,[7]]]]]],0,0,[[],[[9,[[8,[7]]]]]],[62,[[9,[[8,[7]]]]]],[[],[[9,[[8,[7]]]]]],[62,[[9,[[8,[7]]]]]],[39,[[19,[40]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[4,17],[[9,[[8,[7]]]]]],[[52,4,17],[[9,[[8,[7]]]]]],[[36,[15,[38]]],[[9,[[8,[7]]]]]],[[10,36,[15,[38]]],[[9,[[8,[7]]]]]],[[20,68],19],0,0,[47,[[15,[69]]]],0,0,[[]],[[]],[[]],[[],29],[[],29],[[],29],[[],29],[[],29],[70,[[71,[25]]]],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[4,[[9,[[8,[7]]]]]],[[10,4],[[9,[[8,[7]]]]]],[4,[[9,[[8,[7]]]]]],[[10,4],[[9,[[8,[7]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,[[],[[75,[74]]]]],"c":[],"p":[[3,"EpochSettingsMessage"],[3,"EpochSettings"],[3,"RegisterSignerMessage"],[3,"Epoch"],[3,"Signer"],[15,"slice"],[8,"Future"],[3,"Box"],[3,"Pin"],[3,"SignerRunner"],[3,"ProductionServiceBuilder"],[6,"Stake"],[3,"ProtocolParameters"],[3,"PathBuf"],[4,"Option"],[6,"KESPeriod"],[6,"ProtocolInitializer"],[6,"ProtocolInitializerError"],[4,"Result"],[3,"Configuration"],[8,"ChainObserver"],[3,"Arc"],[8,"EraReaderAdapter"],[6,"StdError"],[3,"CertificatePending"],[3,"DefaultConfiguration"],[4,"RunnerError"],[8,"Source"],[3,"String"],[3,"Value"],[6,"Map"],[4,"ConfigError"],[3,"SignerWithStake"],[4,"SingleSignerError"],[3,"MithrilSingleSigner"],[4,"SignedEntityType"],[3,"ProtocolMessage"],[3,"SingleSignatures"],[3,"StateMachine"],[4,"RuntimeError"],[8,"Deserializer"],[15,"bool"],[4,"SignerState"],[8,"Serializer"],[3,"Ok"],[3,"Error"],[4,"AggregatorClientError"],[3,"Formatter"],[6,"Result"],[3,"Error"],[4,"EpochError"],[3,"ProtocolInitializerStore"],[8,"StoreAdapter"],[3,"RwLock"],[15,"usize"],[4,"CardanoNetwork"],[6,"PartyId"],[3,"Global"],[8,"Any"],[3,"Rc"],[3,"APIVersionProvider"],[3,"AggregatorHTTPClient"],[3,"SignerServices"],[8,"Runner"],[3,"Duration"],[3,"RequestBuilder"],[3,"Demand"],[8,"Serializer"],[8,"Error"],[3,"CertificatePendingMessage"],[6,"StdResult"],[3,"TypeId"],[15,"str"],[3,"SqlMigration"],[3,"Vec"],[3,"FromEpochSettingsAdapter"],[3,"ToRegisterSignerMessageAdapter"],[3,"FromPendingCertificateMessageAdapter"],[3,"MithrilProtocolInitializerBuilder"],[8,"ServiceBuilder"],[8,"SingleSigner"],[8,"ProtocolInitializerStorer"],[8,"AggregatorClient"],[13,"KeepState"],[13,"Critical"],[13,"Unregistered"],[13,"Registered"],[13,"Signed"]]},\ +"mithril_signer":{"doc":"Mithril Signer crate documentation","t":"NIEDNNDNDNDDNNNNNDDNNNDDINNNNNNIEEINNDDEIEDDNLLMMKLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLKLMMLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLKLKLLMAMLLMMLLLLLLLLLLMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLKLLLKLKLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLMLLLLKLKLKLMMKLKLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLLMMLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMAF","n":["AggregateVerificationKeyComputationFailed","AggregatorClient","AggregatorClientError","AggregatorHTTPClient","ApiVersionMismatch","Codec","Configuration","Critical","DefaultConfiguration","FileParse","FromEpochSettingsAdapter","FromPendingCertificateMessageAdapter","HTTPClientCreation","IOError","Init","JsonParseFailed","KeepState","MithrilProtocolInitializerBuilder","MithrilSingleSigner","NoStakeForSelf","NoStakeForSigner","NoValueError","ProductionServiceBuilder","ProtocolInitializerStore","ProtocolInitializerStorer","ProtocolSignerCreationFailure","ProxyCreation","Registered","RemoteServerLogical","RemoteServerTechnical","RemoteServerUnreachable","Runner","RunnerError","RuntimeError","ServiceBuilder","SignatureFailed","Signed","SignerRunner","SignerServices","SignerState","SingleSigner","SingleSignerError","StateMachine","ToRegisterSignerMessageAdapter","Unregistered","adapt","adapt","aggregator_endpoint","api_version_provider","associate_signers_with_stake","associate_signers_with_stake","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","az","beacon_provider","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build_era_reader_adapter","can_i_sign","can_i_sign","cardano_cli_path","cardano_node_socket_path","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","certificate_handler","chain_observer","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone_into","clone_into","clone_into","clone_into_box","collect","compute_aggregate_verification_key","compute_aggregate_verification_key","compute_message","compute_message","compute_single_signature","compute_single_signature","compute_single_signatures","compute_single_signatures","cycle","data_stores_directory","database","db_directory","default","deserialize","digester","disable_digests_cache","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","era_checker","era_reader","era_reader_adapter_params","era_reader_adapter_type","era_reader_adapter_type","erased_serialize","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_adapter","get_current_beacon","get_current_beacon","get_epoch_settings","get_epoch_settings","get_last_protocol_initializer","get_last_protocol_initializer","get_max_records","get_network","get_party_id","get_party_id","get_pending_certificate","get_pending_certificate","get_protocol_initializer","get_protocol_initializer","get_sqlite_file","get_state","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is_critical","is_init","is_registered","is_signed","is_unregistered","kes_secret_key_path","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossless_try_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","lossy_into","network","network_magic","new","new","new","new","new","new","operational_certificate_path","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","override_chain_observer_builder","override_immutable_file_observer_builder","party_id","prepare_request_builder","protocol_initializer_store","provide","provide","provide","provide","register_signatures","register_signatures","register_signer","register_signer","register_signer_to_aggregator","register_signer_to_aggregator","relay_endpoint","reset_digests_cache","retrieve_epoch_settings","retrieve_epoch_settings","retrieve_pending_certificate","retrieve_pending_certificate","run","run_interval","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","save_protocol_initializer","save_protocol_initializer","send_single_signature","send_single_signature","serialize","signable_builder_service","single_signer","source","stake_store","store_retention_limit","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","try_adapt","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","type_name","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","update_era_checker","update_era_checker","update_stake_distribution","update_stake_distribution","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","message","message","nested_error","nested_error","epoch","epoch","epoch","signed_entity_type","migration","get_migrations"],"q":[[0,"mithril_signer"],[662,"mithril_signer::RuntimeError"],[666,"mithril_signer::SignerState"],[670,"mithril_signer::database"],[671,"mithril_signer::database::migration"]],"d":["Avk computation Error","Trait for mocking and testing a AggregatorClient","Error structure for the Aggregator Client.","AggregatorHTTPClient is a http client for an aggregator","Incompatible API version error","Encoding / Decoding error.","Client configuration","Critical error means the runtime will exit and the …","Default configuration with all the default values for …","Parse file error","Adapter to convert EpochSettingsMessage to EpochSettings.","Adapter to turn CertificatePendingMessage instances into …","HTTP client creation error","Mostly network errors.","Starting state","Could not parse response.","KeepState error means the runtime will keep its state and …","This is responsible of creating new instances of …","Implementation of the SingleSigner.","Could not associate my node with a stake.","Could not find the stake for one of the signers.","Value was expected from a subsystem but None was returned.","Create a SignerService instance for Production environment.","Implementation of the ProtocolInitializerStorer","Store the ProtocolInitializer used for each Epoch. This is …","Cryptographic Signer creation error.","Proxy creation error","Registered state. The Signer has successfuly registered …","The aggregator host responded it cannot fulfill our …","The aggregator host has returned a technical error.","Could not reach aggregator.","This trait is mainly intended for mocking.","This type represents the errors thrown from the Runner.","RuntimeError Error kinds tied to their faith in the state …","The ServiceBuilder is intended to manage Services instance …","Signature Error","Signed state. The Signer has signed the message for the …","Controller methods for the Signer’s state machine.","This structure groups all the services required by the …","Different possible states of the state machine.","The SingleSigner is the structure responsible of issuing …","SingleSigner error structure.","The state machine is responsible of the execution of the …","Adapter to create RegisterSignerMessage from Signer …","Hold the latest known epoch in order to help …","Method to convert.","Method to trigger the conversion.","Aggregator endpoint","API version provider","From a list of signers, associate them with the stake read …","","","","","","","","","","","","","","","","","","","","Beacon provider service","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a SignerService instance.","Build a Services for the Production environment.","Create a ProtocolInitializer instance.","Create era reader adapter from configuration settings.","Check if all prerequisites for signing are met.","","Cardano CLI tool path","Path of the socket used by the Cardano CLI tool to …","","","","","","","","","","","","","","","","","","","Certificate handler service","Chain Observer service","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Compute aggregate verification key from stake distribution","Compute aggregate verification key from stake distribution","Create the message to be signed with the single signature.","","Create the single signature.","","Computes single signatures","","Perform a cycle of the state machine.","Directory to store signer data (Stakes, Protocol …","database module. This module contains the entities …","Directory to snapshot","","","Digester service","Disable immutables digests cache.","","","","","","","","","","","Era checker service","Era reader service","Era reader adapter parameters","Era reader adapter type","Era reader adapter type","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Fetch the current beacon from the Cardano node.","","Fetch the current epoch settings if any.","","Return the list of the N last saved protocol initializers …","","","Return the CardanoNetwork value from the configuration.","Get party id","Get party id","Fetch the current pending certificate if any.","","Fetch a protocol initializer if any saved for the given …","","Create the SQL store directory if not exist and return the …","Return the current state of the state machine.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Easy matching Critical errors.","Returns true if the state in Init","Returns true if the state in Registered","Returns true if the state in Signed","Returns true if the state in Unregistered","File path to the KES secret key of the pool","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Cardano network","Cardano Network Magic number useful for TestNet & DevNet","AggregatorHTTPClient factory","Create a new ProtocolInitializerStore.","Create a new Runner instance.","Create a new production service builder.","Create a new StateMachine instance.","Create a new instance of the MithrilSingleSigner.","File path to the operational certificate of the pool","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Override default chain observer builder.","Override immutable file observer builder.","Party Id","Forge a client request adding protocol version in the …","ProtocolInitializer store","","","","","Registers single signatures with the aggregator.","","Registers signer with the aggregator.","","Register the signer verification key to the aggregator.","","Relay endpoint","If set the existing immutables digests cache will be reset.","Retrieves epoch settings from the aggregator","","Retrieves a pending certificate from the aggregator","","Launch the state machine until an error occurs or it is …","Run Interval","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Save a protocol initializer for the given Epoch.","","Send the single signature to the aggregator in order to be …","","","Signable Builder Service","SingleSigner service","","Stake store service","Store retention limit. If set to None, no limit will be …","","","","","","","","","Adapter method","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Read the current era and update the EraChecker.","","Read the stake distribution and store it.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Context error message","Context error message","Eventual previous error message","Eventual previous error message","Current Epoch","Epoch when Signer may sign.","Epoch when Signer signed.","Entity type that is signed","Migration module","Get all the migrations required by this version of the …"],"i":[34,0,0,0,47,34,0,40,0,27,0,0,47,47,43,47,40,0,0,27,27,27,0,0,0,34,47,43,47,47,47,0,0,0,0,34,43,0,0,0,0,0,0,0,43,76,77,20,63,64,10,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,63,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,80,11,79,20,64,10,20,20,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,63,63,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,20,26,27,20,26,27,26,26,81,35,64,10,64,10,81,35,39,20,0,20,26,20,63,20,27,43,27,27,27,27,43,43,43,43,63,63,20,20,26,20,47,47,20,26,40,40,27,27,43,43,34,34,62,76,78,77,52,10,11,63,39,79,35,47,47,20,26,40,40,40,27,43,34,52,64,10,64,10,82,52,52,20,81,35,64,10,82,52,20,39,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,40,43,43,43,43,20,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,20,20,62,52,10,11,39,35,20,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,11,11,20,62,63,47,40,27,34,83,62,83,62,64,10,20,20,83,62,83,62,39,20,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,82,52,64,10,20,63,63,47,63,20,20,26,27,47,40,27,43,34,78,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,64,10,64,10,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,62,76,78,77,52,10,11,63,39,79,35,47,20,26,40,27,43,34,84,85,84,85,86,87,88,88,0,0],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,2],[[],3],0,0,[[4,[6,[5]]],[[9,[[8,[7]]]]]],[[10,4,[6,[5]]],[[9,[[8,[7]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[[9,[[8,[7]]]]]],[11,[[9,[[8,[7]]]]]],[[12,13,[15,[14]],[15,[16]]],[[19,[17,18]]]],[[20,[22,[21]]],[[19,[[22,[23]],24]]]],[25,[[9,[[8,[7]]]]]],[[10,25],[[9,[[8,[7]]]]]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[20,20],[26,26],[27,27],[[]],[[]],[[]],[26,[[8,[28]]]],[26,[[19,[[31,[29,30]],32]]]],[[[6,[33]],17],[[19,[[15,[29]],34]]]],[[35,[6,[33]],17],[[19,[[15,[29]],34]]]],[[36,[6,[33]]],[[9,[[8,[7]]]]]],[[10,36,[6,[33]]],[[9,[[8,[7]]]]]],[[4,37,[6,[33]]],[[9,[[8,[7]]]]]],[[10,4,37,[6,[33]]],[[9,[[8,[7]]]]]],[[37,[6,[33]],17],[[19,[[15,[38]],34]]]],[[35,37,[6,[33]],17],[[19,[[15,[38]],34]]]],[39,[[19,[40]]]],0,0,0,[[],26],[41,[[19,[20]]]],0,0,[[27,27],42],[[43,43],42],[[],42],[[],42],[[],42],[[],42],[[],42],[[],42],[[],42],[[],42],0,0,0,0,0,[44,[[19,[45,46]]]],[[47,48],49],[[47,48],49],[[20,48],49],[[26,48],49],[[40,48],49],[[40,48],49],[[27,48],49],[[27,48],49],[[43,48],49],[[43,48],49],[[34,48],49],[[34,48],49],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[50,47],[[]],[[]],[27,40],[51,40],[[]],[[]],[[]],[[]],[52,[[54,[[8,[53]]]]]],[[],[[9,[[8,[7]]]]]],[10,[[9,[[8,[7]]]]]],[[],[[9,[[8,[7]]]]]],[10,[[9,[[8,[7]]]]]],[55,[[9,[[8,[7]]]]]],[[52,55],[[9,[[8,[7]]]]]],[52,[[15,[55]]]],[20,[[19,[56,32]]]],[[],57],[35,57],[[],[[9,[[8,[7]]]]]],[10,[[9,[[8,[7]]]]]],[4,[[9,[[8,[7]]]]]],[[52,4],[[9,[[8,[7]]]]]],[20,14],[39,43],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[[[8,[58]]],[[8,[59,58]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[22,[[22,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[60,[[60,[59]]]],[40,42],[43,42],[43,42],[43,42],[43,42],0,[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[29,[15,[29]],[22,[61]]],62],[[[8,[53]],[15,[55]]],52],[[20,63],10],[20,11],[[43,[8,[64]],65],39],[57,35],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[11,11],[11,11],0,[[62,66],66],0,[67],[67],[67],[67],[[36,38],[[9,[[8,[7]]]]]],[[62,36,38],[[9,[[8,[7]]]]]],[[4,5],[[9,[[8,[7]]]]]],[[62,4,5],[[9,[[8,[7]]]]]],[[4,13],[[9,[[8,[7]]]]]],[[10,4,13],[[9,[[8,[7]]]]]],0,0,[[],[[9,[[8,[7]]]]]],[62,[[9,[[8,[7]]]]]],[[],[[9,[[8,[7]]]]]],[62,[[9,[[8,[7]]]]]],[39,[[19,[40]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[4,17],[[9,[[8,[7]]]]]],[[52,4,17],[[9,[[8,[7]]]]]],[[36,[15,[38]]],[[9,[[8,[7]]]]]],[[10,36,[15,[38]]],[[9,[[8,[7]]]]]],[[20,68],19],0,0,[47,[[15,[69]]]],0,0,[[]],[[]],[[]],[[],29],[[],29],[[],29],[[],29],[[],29],[70,[[71,[25]]]],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],72],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[],73],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[4,[[9,[[8,[7]]]]]],[[10,4],[[9,[[8,[7]]]]]],[4,[[9,[[8,[7]]]]]],[[10,4],[[9,[[8,[7]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,[[],[[75,[74]]]]],"c":[],"p":[[3,"EpochSettingsMessage"],[3,"EpochSettings"],[3,"RegisterSignerMessage"],[3,"Epoch"],[3,"Signer"],[15,"slice"],[8,"Future"],[3,"Box"],[3,"Pin"],[3,"SignerRunner"],[3,"ProductionServiceBuilder"],[6,"Stake"],[3,"ProtocolParameters"],[3,"PathBuf"],[4,"Option"],[6,"KESPeriod"],[6,"ProtocolInitializer"],[6,"ProtocolInitializerError"],[4,"Result"],[3,"Configuration"],[8,"ChainObserver"],[3,"Arc"],[8,"EraReaderAdapter"],[6,"StdError"],[3,"CertificatePending"],[3,"DefaultConfiguration"],[4,"RunnerError"],[8,"Source"],[3,"String"],[3,"Value"],[6,"Map"],[4,"ConfigError"],[3,"SignerWithStake"],[4,"SingleSignerError"],[3,"MithrilSingleSigner"],[4,"SignedEntityType"],[3,"ProtocolMessage"],[3,"SingleSignatures"],[3,"StateMachine"],[4,"RuntimeError"],[8,"Deserializer"],[15,"bool"],[4,"SignerState"],[8,"Serializer"],[3,"Ok"],[3,"Error"],[4,"AggregatorClientError"],[3,"Formatter"],[6,"Result"],[3,"Error"],[4,"EpochError"],[3,"ProtocolInitializerStore"],[8,"StoreAdapter"],[3,"RwLock"],[15,"usize"],[4,"CardanoNetwork"],[6,"PartyId"],[3,"Global"],[8,"Any"],[3,"Rc"],[3,"APIVersionProvider"],[3,"AggregatorHTTPClient"],[3,"SignerServices"],[8,"Runner"],[3,"Duration"],[3,"RequestBuilder"],[3,"Demand"],[8,"Serializer"],[8,"Error"],[3,"CertificatePendingMessage"],[6,"StdResult"],[3,"TypeId"],[15,"str"],[3,"SqlMigration"],[3,"Vec"],[3,"FromEpochSettingsAdapter"],[3,"ToRegisterSignerMessageAdapter"],[3,"FromPendingCertificateMessageAdapter"],[3,"MithrilProtocolInitializerBuilder"],[8,"ServiceBuilder"],[8,"SingleSigner"],[8,"ProtocolInitializerStorer"],[8,"AggregatorClient"],[13,"KeepState"],[13,"Critical"],[13,"Unregistered"],[13,"Registered"],[13,"Signed"]]},\ "mithril_stm":{"doc":"Mithril-stm CI workflow crates.io","t":"ENNNENNNLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLALLLLLLLLLLLLLLLLLLDDGLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLMLLLLLLLMLLLLLLLLLLLLLLGGDDDDDDDGGLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLMMLLLLLLLLLLLLLLLMLMLLLLLLLLLLLLLLLLLLLLMLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["AggregationError","KeyInvalid","KeyRegistered","NotEnoughSignatures","RegisterError","SerializationError","UnregisteredInitializer","UsizeConversionInvalid","az","az","borrow","borrow","borrow_mut","borrow_mut","cast_from","cast_from","checked_as","checked_as","checked_cast_from","checked_cast_from","clone","clone","clone_into","clone_into","eq","equivalent","fmt","fmt","fmt","fmt","from","from","into","into","key_reg","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","provide","provide","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","stm","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","ClosedKeyReg","KeyReg","RegParty","az","az","borrow","borrow","borrow_mut","borrow_mut","cast_from","cast_from","checked_as","checked_as","checked_cast_from","checked_cast_from","clone","clone","clone_into","clone_into","close","default","eq","eq","equivalent","equivalent","fmt","fmt","from","from","init","into","into","merkle_tree","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","reg_parties","register","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","to_owned","to_owned","total_stake","try_from","try_from","try_into","try_into","type_id","type_id","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","Index","Stake","StmAggrSig","StmAggrVerificationKey","StmClerk","StmInitializer","StmParameters","StmSig","StmSigner","StmVerificationKey","StmVerificationKeyPoP","aggregate","az","az","az","az","az","az","az","batch_proof","batch_verify","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","cast_from","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_as","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","checked_cast_from","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp_stm_sig","compute_avk","compute_avk","dedup_sigs_for_indices","deserialize","deserialize","deserialize","deserialize","deserialize","eq","eq","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_bytes","from_bytes","from_bytes","from_bytes","from_registration","from_signer","get_closed_reg","get_reg_party","get_stake","hash","indexes","into","into","into","into","into","into","into","k","m","new_signer","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_as","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","overflowing_cast_from","params","partial_cmp","phi_f","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_as","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","saturating_cast_from","serialize","serialize","serialize","serialize","serialize","setup","sigma","sign","signer_index","stake","to_bytes","to_bytes","to_bytes","to_bytes","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_as","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","unwrapped_cast_from","verification_key","verification_key","verify","verify","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_as","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from","wrapping_cast_from"],"q":[[0,"mithril_stm"],[64,"mithril_stm::key_reg"],[124,"mithril_stm::stm"]],"d":["Error types for aggregation.","The supplied key is not valid","This key has already been registered by a participant","Not enough signatures were collected, got this many …","Errors which can be outputted by key registration.","Serialization error","UnregisteredInitializer error","This error happens when we try to convert a u64 to a usize …","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Key registration functionality.","","","","","","","","","","","Top-level API for Mithril Stake-based Threshold …","","","","","","","","","","","","","","","","","","","Structure generated out of a closed registration …","Struct that collects public keys and stakes of parties. …","Stores a registered party with its public key and the …","","","","","","","","","","","","","","","","","Finalize the key registration. This function disables …","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Initialise an empty KeyReg. todo: remove this init function","Calls U::from(self).","Calls U::from(self).","Unique public key out of the key registration instance.","","","","","Ordered list of registered parties.","Verify and register a public key and stake for a …","","","","","","","Total stake of the registered parties.","","","","","","","","","","","","","","","Quorum index for signatures. An aggregate signature (…","The quantity of stake held by a party, represented as a u64…","StmMultiSig uses the “concatenation” proving system …","Stm aggregate key (batch compatible), which contains the …","StmClerk can verify and aggregate StmSigs and verify …","Initializer for StmSigner. This is the data that is used …","Used to set protocol parameters.","Signature created by a single party who has won the …","Participant in the protocol can sign messages. This …","Wrapper of the MultiSignature Verification key","Wrapper of the MultiSignature Verification key with proof …","Aggregate a set of signatures for their corresponding …","","","","","","","","The list of unique merkle tree nodes that covers path for …","Batch verify a set of signatures, with different messages …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Compare two StmSig by their signers’ merkle tree indexes.","Compute the StmAggrVerificationKey related to the used …","Compute the StmAggrVerificationKey related to the used …","Given a slice of sigs, this function returns a new list of …","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Extract the StmParameters from a byte slice.","Convert a slice of bytes to an StmInitializer","Extract a batch compatible StmSig from a byte slice.","Extract a StmAggrSig from a byte slice.","Create a new Clerk from a closed registration instance.","Create a Clerk from a signer.","Return the closed registration instance","Get the (VK, stake) of a party given its index.","Extract stake from the signer.","","The index(es) for which the signature is valid","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Quorum parameter.","Security parameter, upper bound on indices.","Build the avk for the given list of parties.","","","","","","","","","","","","","","","Current protocol instantiation parameters.","","f in phi(w) = 1 - (1 - f)^w, where w is the stake of a …","","","","","","","","","","","","","","","","","","","","Builds an StmInitializer that is ready to register with …","The signature from the underlying MSP scheme.","This function produces a signature following the …","Merkle tree index of the signer.","This participant’s stake.","Convert to bytes","Convert to bytes","Convert an StmSig into bytes","Convert multi signature to bytes","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Extract the verification key.","Extract the verification key.","Verify an stm signature by checking that the lottery was …","Verify aggregate signature, by checking that","","","","","","","","","","","","","",""],"i":[0,3,3,2,0,3,3,2,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,3,3,2,2,3,3,2,3,2,3,0,2,3,2,3,2,3,2,3,2,3,0,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,0,0,0,11,14,11,14,11,14,11,14,11,14,11,14,11,14,11,14,11,11,11,14,11,14,11,14,11,14,11,11,14,14,11,14,11,14,14,11,11,14,11,14,11,14,14,11,14,11,14,11,14,11,14,11,14,11,14,11,14,0,0,0,0,0,0,0,0,0,0,0,19,28,29,30,19,20,27,23,23,23,28,29,30,19,20,27,23,28,29,30,19,20,27,23,28,29,30,19,20,27,23,28,29,30,19,20,27,23,28,29,30,19,20,27,23,28,29,30,19,20,27,23,28,29,30,19,20,27,23,20,20,30,19,19,28,29,20,27,23,28,20,20,28,29,30,19,20,27,23,28,29,30,19,20,27,27,23,28,29,20,23,19,19,30,19,30,20,20,28,29,30,19,20,27,23,28,28,29,28,29,30,19,20,27,23,28,29,30,19,20,27,23,29,20,28,28,29,30,19,20,27,23,28,29,30,19,20,27,23,28,29,20,27,23,29,20,30,20,29,28,29,20,23,28,29,30,19,20,27,23,28,29,30,19,20,27,23,28,29,30,19,20,27,23,28,29,30,19,20,27,23,28,29,30,19,20,27,23,28,29,30,19,20,27,23,29,30,20,23,28,29,30,19,20,27,23,28,29,30,19,20,27,23],"f":[0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[2,2],[3,3],[[]],[[]],[[3,3],4],[[],4],[[2,5],6],[[2,5],6],[[3,5],6],[[3,5],6],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[7],[7],[[]],[[]],[[]],[[]],0,[[]],[[]],[[],8],[[],8],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[11,11],[[[14,[[0,[12,13]]]]],[[14,[[0,[12,13]]]]]],[[]],[[]],[11,[[14,[[0,[13,15]]]]]],[[],11],[[11,11],4],[[[14,[[0,[16,13]]]],[14,[[0,[16,13]]]]],4],[[],4],[[],4],[[11,5],6],[[[14,[[0,[17,13]]]],5],6],[[]],[[]],[[],11],[[]],[[]],0,[[]],[[]],[[]],[[]],0,0,[[]],[[]],[[]],[[]],[[]],[[]],0,[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,[[[19,[[0,[13,12,15]]]],[21,[20]],[21,[22]]],[[9,[[23,[[0,[13,12,15]]]],2]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[[21,[[23,[[0,[12,13,15,24,25]]]]]],[21,[[26,[22]]]],[21,[[27,[[0,[12,13,15,24,25]]]]]],[21,[28]]],[[9,[[0,[[0,[12,13,15,24,25]]]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[28,28],[29,29],[[[30,[[0,[12,13]]]]],[[30,[[0,[12,13]]]]]],[[[19,[[0,[12,12,13]]]]],[[19,[[0,[12,12,13]]]]]],[20,20],[[[27,[[0,[12,12,13,15]]]]],[[27,[[0,[12,12,13,15]]]]]],[[[23,[[0,[12,12,13,15]]]]],[[23,[[0,[12,12,13,15]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[20,20],31],[[20,20],31],[[[30,[[0,[12,13,15]]]]],[[27,[[0,[12,13,15]]]]]],[[[19,[[0,[13,12,15]]]]],[[27,[[0,[13,12,15]]]]]],[[[19,[[0,[13,12,15]]]],[21,[22]],[21,[20]]],[[9,[[26,[20]],2]]]],[32,[[9,[28]]]],[32,[[9,[29]]]],[32,[[9,[20]]]],[32,[[9,[[27,[[0,[12,13,15]]]]]]]],[32,[[9,[[23,[[0,[12,13,15]]]]]]]],[[28,28],4],[[20,20],4],[[],4],[[28,5],6],[[29,5],6],[[[30,[[0,[17,13]]]],5],6],[[[19,[[0,[17,12,13]]]],5],6],[[20,5],6],[[[27,[[0,[17,12,13,15]]]],5],6],[[[23,[[0,[17,12,13,15]]]],5],6],[[]],[[]],[[]],[[]],[[]],[[]],[[[14,[[0,[12,13,15]]]]],[[27,[[0,[12,13,15]]]]]],[[]],[[[21,[22]]],[[9,[28,3]]]],[[[21,[22]]],[[9,[29,3]]]],[[[21,[22]]],[[9,[20,0]]]],[[[21,[22]]],[[9,[[23,[[0,[12,13,15,24,25]]]],[0,[[0,[12,13,15,24,25]]]]]]]],[[28,[14,[[0,[13,12,15]]]]],[[19,[[0,[13,12,15]]]]]],[[[30,[[0,[13,12,15]]]]],[[19,[[0,[13,12,15]]]]]],[[[30,[[0,[12,13,15]]]]],[[14,[[0,[12,13,15]]]]]],[[[19,[[0,[13,12,15]]]],33],1],[[[30,[[0,[12,13,15]]]]],18],[[20,34]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[29,[14,[[0,[13,12]]]]],[[9,[[30,[[0,[13,12]]]],3]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[20,20],[[1,[31]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[28,35],9],[[29,35],9],[[20,35],9],[[[27,[[0,[12,13,15]]]],35],9],[[[23,[[0,[12,13,15]]]],35],9],[[28,18,[0,[36,37]]],29],0,[[[30,[[0,[12,13,15]]]],[21,[22]]],[[1,[20]]]],0,0,[28,[[38,[22]]]],[29,[[38,[22]]]],[20,[[26,[22]]]],[[[23,[[0,[12,13,15,24,25]]]]],[[26,[22]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[29,39],[[[30,[[0,[12,13,15]]]]],40],[[20,28,40,18,[27,[[0,[12,13,15]]]],[21,[22]]],[[9,[0]]]],[[[23,[[0,[12,13,15,24,25]]]],[21,[22]],[27,[[0,[12,13,15,24,25]]]],28],[[9,[[0,[[0,[12,13,15,24,25]]]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]]],"c":[],"p":[[4,"Option"],[4,"AggregationError"],[4,"RegisterError"],[15,"bool"],[3,"Formatter"],[6,"Result"],[3,"Demand"],[3,"String"],[4,"Result"],[3,"TypeId"],[3,"KeyReg"],[8,"Clone"],[8,"Digest"],[3,"ClosedKeyReg"],[8,"FixedOutput"],[8,"PartialEq"],[8,"Debug"],[6,"Stake"],[3,"StmClerk"],[3,"StmSig"],[15,"slice"],[15,"u8"],[3,"StmAggrSig"],[8,"Send"],[8,"Sync"],[3,"Vec"],[3,"StmAggrVerificationKey"],[3,"StmParameters"],[3,"StmInitializer"],[3,"StmSigner"],[4,"Ordering"],[8,"Deserializer"],[6,"Index"],[8,"Hasher"],[8,"Serializer"],[8,"RngCore"],[8,"CryptoRng"],[15,"array"],[6,"StmVerificationKeyPoP"],[6,"StmVerificationKey"]]}\ }'); if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; diff --git a/rust-doc/settings.html b/rust-doc/settings.html index 7db4066a392..498888f3cfd 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 diff --git a/rust-doc/src/mithril_client/commands/snapshot/download.rs.html b/rust-doc/src/mithril_client/commands/snapshot/download.rs.html index 8c6c32a5498..24b9966914b 100644 --- a/rust-doc/src/mithril_client/commands/snapshot/download.rs.html +++ b/rust-doc/src/mithril_client/commands/snapshot/download.rs.html @@ -137,7 +137,7 @@ If you are using Cardano Docker image, you can restore a Cardano Node with: -docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="{}",target=/data/db/ -e NETWORK={} inputoutput/cardano-node:8.1.1 +docker run -v cardano-node-ipc:/ipc -v cardano-node-data:/data --mount type=bind,source="{}",target=/data/db/ -e NETWORK={} inputoutput/cardano-node:8.1.2 "###
    , &self.digest,