diff --git a/404.html b/404.html index bbe67394..f045574f 100644 --- a/404.html +++ b/404.html @@ -4,13 +4,13 @@ Page Not Found | SanchoNet - +
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/about/index.html b/about/index.html index 682ec646..024d22e5 100644 --- a/about/index.html +++ b/about/index.html @@ -4,13 +4,13 @@ About | SanchoNet - +
Skip to main content

About

SanchoNet is about introducing the Cardano community to governance features from CIP-1694 in a controlled testnet environment.

Contributing

Want to make this site better? Submit a pull request!

  1. Clone this repository
  2. Run nix develop to enter a shell with all the necessary tools
  3. Edit one of the files in the docs/* folder
  4. Run just run in the Nix shell to run the website locally
  5. Once you are done with your changes, commit them to the repository!
- + \ No newline at end of file diff --git a/actions/index.html b/actions/index.html index e7149b9c..af3d2fc5 100644 --- a/actions/index.html +++ b/actions/index.html @@ -4,13 +4,13 @@ SanchoNet governance actions | SanchoNet - +
Skip to main content

SanchoNet governance actions

CIP-1694 describes seven types of governance actions.

ActionDescription
1. Motion of no-confidenceA motion to create a state of no-confidence in the current constitutional committee
2. New constitutional committee and/or threshold and/or term limitsModifications to the members of the constitutional committee, signature threshold, or term limits
3. Updates to the constitutionModifications to the off-chain constitution, recorded as an on-chain hash of the text document
4. Hard fork initiationA non-backward compatible upgrade of the network, which requires a prior software upgrade
5. Protocol parameter changesAny change to one or more updatable protocol parameters, excluding changes to major protocol versions ('hard forks')
6. Treasury withdrawalsTreasury withdrawals are sub-categorized into small, medium, or large and are determined by the amount of lovelace to be withdrawn.
7. InfoAn action that doesn't have any on-chain impact except for being recorded on-chain.

Each type of governance action represents a distinct feature within cardano-node and cardano-cli. As such, they will be rolled out in phases, coinciding with the integration of each feature.

Check out the Tutorials and Voting on governance actions to learn how to create and vote on governance actions.

- + \ No newline at end of file diff --git a/assets/js/11bb5b53.0aad058b.js b/assets/js/11bb5b53.50f3624c.js similarity index 98% rename from assets/js/11bb5b53.0aad058b.js rename to assets/js/11bb5b53.50f3624c.js index f8999ac0..220c9796 100644 --- a/assets/js/11bb5b53.0aad058b.js +++ b/assets/js/11bb5b53.50f3624c.js @@ -1 +1 @@ -"use strict";(self.webpackChunksanchonet=self.webpackChunksanchonet||[]).push([[3584],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},f=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=c(n),f=r,m=p["".concat(l,".").concat(f)]||p[f]||u[f]||o;return n?a.createElement(m,i(i({ref:t},d),{},{components:n})):a.createElement(m,i({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:r,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=n(7462),r=(n(7294),n(3905));const o={sidebar_label:"Voting as Multisignature DRep",title:"Voting on governance actions as a multisignature DRep",sidebar_position:10.1,slug:"/tutorials/vote-multisig-drep"},i=void 0,s={unversionedId:"tutorials/vote-actions-multisig-drep",id:"tutorials/vote-actions-multisig-drep",title:"Voting on governance actions as a multisignature DRep",description:"Pre-requisites",source:"@site/docs/tutorials/vote-actions-multisig-drep.mdx",sourceDirName:"tutorials",slug:"/tutorials/vote-multisig-drep",permalink:"/tutorials/vote-multisig-drep",draft:!1,editUrl:"https://github.com/input-output-hk/sanchonet/tree/master/docs/tutorials/vote-actions-multisig-drep.mdx",tags:[],version:"current",sidebarPosition:10.1,frontMatter:{sidebar_label:"Voting as Multisignature DRep",title:"Voting on governance actions as a multisignature DRep",sidebar_position:10.1,slug:"/tutorials/vote-multisig-drep"},sidebar:"docsSidebar",previous:{title:"Voting on actions",permalink:"/tutorials/vote-action"},next:{title:"Useful jq filters",permalink:"/tutorials/jq-filters"}},l={},c=[{value:"Pre-requisites",id:"pre-requisites",level:3},{value:"Verify the content of the governance action",id:"verify-the-content-of-the-governance-action",level:3},{value:"Create the vote file",id:"create-the-vote-file",level:3},{value:"Include the vote in a transaction",id:"include-the-vote-in-a-transaction",level:3}],d={toc:c},p="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(p,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h3",{id:"pre-requisites"},"Pre-requisites"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Payment key pair"),(0,r.kt)("li",{parentName:"ul"},"Address with funds"),(0,r.kt)("li",{parentName:"ul"},"Multisignature DRep. See ",(0,r.kt)("a",{parentName:"li",href:"/tutorials/multisig-drep-registration"},"Register multisig DRep")),(0,r.kt)("li",{parentName:"ul"},"A SanchoNet node")),(0,r.kt)("p",null,"To vote on governance actions, follow this process:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Obtain the action ID of an ongoing governance action from Discord or query the governance state."),(0,r.kt)("li",{parentName:"ol"},"Determine your voting stance; engage in discussion if required"),(0,r.kt)("li",{parentName:"ol"},"Construct your vote file through the Cardano CLI. The example below demonstrates voting ",(0,r.kt)("inlineCode",{parentName:"li"},"--yes"),", although options for ",(0,r.kt)("inlineCode",{parentName:"li"},"--no")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"--abstain")," are also available.")),(0,r.kt)("h3",{id:"verify-the-content-of-the-governance-action"},"Verify the content of the governance action"),(0,r.kt)("p",null,"Assume that we have been given the action ID ",(0,r.kt)("inlineCode",{parentName:"p"},"df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79#0")," for a new constitution proposal."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Obtain the URL and hash of the new constitution proposal from the governance state:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | \\\njq -r --arg govActionId \"df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79\" '.proposals | to_entries[] | select(.value.actionId.txId | contains($govActionId)) | .value'\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'{\n "action": {\n "contents": [\n null,\n {\n "anchor": {\n "dataHash": "5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d",\n "url": "https://tinyurl.com/mr3ferf9"\n }\n }\n ],\n "tag": "NewConstitution"\n },\n "actionId": {\n "govActionIx": 0,\n "txId": "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79"\n },\n "committeeVotes": {\n "keyHash-c8ac605b25d6084c2ceb28043c8f01b62629966d038a249c7847d66d": "VoteYes",\n "keyHash-d13507f7e7fb8ac3ce2094187c9d99d4601021e9ef5a5f310567765d": "VoteYes"\n },\n "dRepVotes": {\n "keyHash-16faaf6daa2635bbf53bbbaf38b3a6040adf7ced2f7f08952592cf5b": "VoteYes",\n "keyHash-57cb90cfb635e76af648abf1b6a91519218a5919b3cba2527e3725d1": "VoteYes",\n "keyHash-7d84808d563f0f258ad7e4337c2c4bd13010930ebdf7b86c3bfd9ef8": "VoteYes"\n },\n "deposit": 0,\n "expiresAfter": 80,\n "proposedIn": 78,\n "returnAddr": {\n "credential": {\n "keyHash": "f925cbd4eb78aad49ec7bf9b4ddfa4cc4486c967e392699d143c81aa"\n },\n "network": "Testnet"\n },\n "stakePoolVotes": {}\n}\n')),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},"Download the file from the URL registered on the ledger state:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"wget https://tinyurl.com/mr3ferf9 -O constitution.txt\n")),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},"Verify that the hash of the file matches the ",(0,r.kt)("inlineCode",{parentName:"li"},"dataHash"),"from the ledger state:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"b2sum -l 256 constitution.txt\n5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d constitution.txt\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Everything is in order; the text at the URL matches the dataHash, confirming that the text at the URL is precisely what we are voting for.")),(0,r.kt)("p",null,"In the future, voting apps, explorers, wallets, and other tools could perform the filtering, ensuring that they only display actions whose URL content has been verified against the hash on the ledger state."),(0,r.kt)("h3",{id:"create-the-vote-file"},"Create the vote file"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Vote with DRep keys:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'cardano-cli conway governance vote create \\\n --yes --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \\\n --governance-action-index "0" \\\n --drep-script-hash $(cat multisig.hash) \\\n --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote \n')),(0,r.kt)("h3",{id:"include-the-vote-in-a-transaction"},"Include the vote in a transaction"),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},"Build the transaction:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli conway transaction build --testnet-magic 4 \\\n --tx-in \"$(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --output-json | jq -r 'keys[0]')\" \\\n --change-address $(cat payment.addr) \\\n --vote-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote \\\n --witness-override 2 \\\n --out-file vote-tx.raw\n")),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},"Every member of the DRep witnesses the transaction with their respective signing keys. Additionally, we need to witness the transaction with the\npayment signing key:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli conway transaction witness \\\n --tx-body-file vote-tx.raw \\\n --signing-key-file drep1.skey \\\n --out-file drep1.witness\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli conway transaction witness \\\n --tx-body-file vote-tx.raw \\\n --signing-key-file drep2.skey \\\n --out-file drep2.witness\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli conway transaction witness \\\n --tx-body-file vote-tx.raw \\\n --signing-key-file drep3.skey \\\n --out-file drep3.witness\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli conway transaction witness \\\n --tx-body-file vote-tx.raw \\\n --signing-key-file payment.skey \\\n --out-file payment.witness\n")),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},"Assemble the transaction:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli transaction assemble \\\n --tx-body-file vote-tx.raw \\\n --witness-file payment.witness \\\n --witness-file drep1.witness \\\n --witness-file drep2.witness \\\n --witness-file drep3.witness \\\n --out-file tx.signed\n")),(0,r.kt)("ol",{start:5},(0,r.kt)("li",{parentName:"ol"},"Submit the transaction:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli transaction submit --testnet-magic 4 --tx-file vote-tx.signed\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksanchonet=self.webpackChunksanchonet||[]).push([[3584],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},f=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=c(n),f=r,m=p["".concat(l,".").concat(f)]||p[f]||u[f]||o;return n?a.createElement(m,i(i({ref:t},d),{},{components:n})):a.createElement(m,i({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:r,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=n(7462),r=(n(7294),n(3905));const o={sidebar_label:"Voting as multisignature DRep",title:"Voting on governance actions as a multisignature DRep",sidebar_position:10.1,slug:"/tutorials/vote-multisig-drep"},i=void 0,s={unversionedId:"tutorials/vote-actions-multisig-drep",id:"tutorials/vote-actions-multisig-drep",title:"Voting on governance actions as a multisignature DRep",description:"Pre-requisites",source:"@site/docs/tutorials/vote-actions-multisig-drep.mdx",sourceDirName:"tutorials",slug:"/tutorials/vote-multisig-drep",permalink:"/tutorials/vote-multisig-drep",draft:!1,editUrl:"https://github.com/input-output-hk/sanchonet/tree/master/docs/tutorials/vote-actions-multisig-drep.mdx",tags:[],version:"current",sidebarPosition:10.1,frontMatter:{sidebar_label:"Voting as multisignature DRep",title:"Voting on governance actions as a multisignature DRep",sidebar_position:10.1,slug:"/tutorials/vote-multisig-drep"},sidebar:"docsSidebar",previous:{title:"Voting on actions",permalink:"/tutorials/vote-action"},next:{title:"Useful jq filters",permalink:"/tutorials/jq-filters"}},l={},c=[{value:"Pre-requisites",id:"pre-requisites",level:3},{value:"Verify the content of the governance action",id:"verify-the-content-of-the-governance-action",level:3},{value:"Create the vote file",id:"create-the-vote-file",level:3},{value:"Include the vote in a transaction",id:"include-the-vote-in-a-transaction",level:3}],d={toc:c},p="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(p,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h3",{id:"pre-requisites"},"Pre-requisites"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Payment key pair"),(0,r.kt)("li",{parentName:"ul"},"Address with funds"),(0,r.kt)("li",{parentName:"ul"},"Multisignature DRep. See ",(0,r.kt)("a",{parentName:"li",href:"/tutorials/multisig-drep-registration"},"Register multisig DRep")),(0,r.kt)("li",{parentName:"ul"},"A SanchoNet node")),(0,r.kt)("p",null,"To vote on governance actions, follow this process:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Obtain the action ID of an ongoing governance action from Discord or query the governance state."),(0,r.kt)("li",{parentName:"ol"},"Determine your voting stance; engage in discussion if required"),(0,r.kt)("li",{parentName:"ol"},"Construct your vote file through the Cardano CLI. The example below demonstrates voting ",(0,r.kt)("inlineCode",{parentName:"li"},"--yes"),", although options for ",(0,r.kt)("inlineCode",{parentName:"li"},"--no")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"--abstain")," are also available.")),(0,r.kt)("h3",{id:"verify-the-content-of-the-governance-action"},"Verify the content of the governance action"),(0,r.kt)("p",null,"Assume that we have been given the action ID ",(0,r.kt)("inlineCode",{parentName:"p"},"df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79#0")," for a new constitution proposal."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Obtain the URL and hash of the new constitution proposal from the governance state:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | \\\njq -r --arg govActionId \"df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79\" '.proposals | to_entries[] | select(.value.actionId.txId | contains($govActionId)) | .value'\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'{\n "action": {\n "contents": [\n null,\n {\n "anchor": {\n "dataHash": "5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d",\n "url": "https://tinyurl.com/mr3ferf9"\n }\n }\n ],\n "tag": "NewConstitution"\n },\n "actionId": {\n "govActionIx": 0,\n "txId": "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79"\n },\n "committeeVotes": {\n "keyHash-c8ac605b25d6084c2ceb28043c8f01b62629966d038a249c7847d66d": "VoteYes",\n "keyHash-d13507f7e7fb8ac3ce2094187c9d99d4601021e9ef5a5f310567765d": "VoteYes"\n },\n "dRepVotes": {\n "keyHash-16faaf6daa2635bbf53bbbaf38b3a6040adf7ced2f7f08952592cf5b": "VoteYes",\n "keyHash-57cb90cfb635e76af648abf1b6a91519218a5919b3cba2527e3725d1": "VoteYes",\n "keyHash-7d84808d563f0f258ad7e4337c2c4bd13010930ebdf7b86c3bfd9ef8": "VoteYes"\n },\n "deposit": 0,\n "expiresAfter": 80,\n "proposedIn": 78,\n "returnAddr": {\n "credential": {\n "keyHash": "f925cbd4eb78aad49ec7bf9b4ddfa4cc4486c967e392699d143c81aa"\n },\n "network": "Testnet"\n },\n "stakePoolVotes": {}\n}\n')),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},"Download the file from the URL registered on the ledger state:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"wget https://tinyurl.com/mr3ferf9 -O constitution.txt\n")),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},"Verify that the hash of the file matches the ",(0,r.kt)("inlineCode",{parentName:"li"},"dataHash"),"from the ledger state:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"b2sum -l 256 constitution.txt\n5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d constitution.txt\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Everything is in order; the text at the URL matches the dataHash, confirming that the text at the URL is precisely what we are voting for.")),(0,r.kt)("p",null,"In the future, voting apps, explorers, wallets, and other tools could perform the filtering, ensuring that they only display actions whose URL content has been verified against the hash on the ledger state."),(0,r.kt)("h3",{id:"create-the-vote-file"},"Create the vote file"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Vote with DRep keys:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'cardano-cli conway governance vote create \\\n --yes --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \\\n --governance-action-index "0" \\\n --drep-script-hash $(cat multisig.hash) \\\n --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote \n')),(0,r.kt)("h3",{id:"include-the-vote-in-a-transaction"},"Include the vote in a transaction"),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},"Build the transaction:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli conway transaction build --testnet-magic 4 \\\n --tx-in \"$(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --output-json | jq -r 'keys[0]')\" \\\n --change-address $(cat payment.addr) \\\n --vote-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote \\\n --witness-override 2 \\\n --out-file vote-tx.raw\n")),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},"Every member of the DRep witnesses the transaction with their respective signing keys. Additionally, we need to witness the transaction with the\npayment signing key:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli conway transaction witness \\\n --tx-body-file vote-tx.raw \\\n --signing-key-file drep1.skey \\\n --out-file drep1.witness\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli conway transaction witness \\\n --tx-body-file vote-tx.raw \\\n --signing-key-file drep2.skey \\\n --out-file drep2.witness\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli conway transaction witness \\\n --tx-body-file vote-tx.raw \\\n --signing-key-file drep3.skey \\\n --out-file drep3.witness\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli conway transaction witness \\\n --tx-body-file vote-tx.raw \\\n --signing-key-file payment.skey \\\n --out-file payment.witness\n")),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},"Assemble the transaction:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli transaction assemble \\\n --tx-body-file vote-tx.raw \\\n --witness-file payment.witness \\\n --witness-file drep1.witness \\\n --witness-file drep2.witness \\\n --witness-file drep3.witness \\\n --out-file tx.signed\n")),(0,r.kt)("ol",{start:5},(0,r.kt)("li",{parentName:"ol"},"Submit the transaction:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"cardano-cli transaction submit --testnet-magic 4 --tx-file vote-tx.signed\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.5d624dcc.js b/assets/js/935f2afb.4af6ff2f.js similarity index 99% rename from assets/js/935f2afb.5d624dcc.js rename to assets/js/935f2afb.4af6ff2f.js index 0c4f04fa..ae0ee0e6 100644 --- a/assets/js/935f2afb.5d624dcc.js +++ b/assets/js/935f2afb.4af6ff2f.js @@ -1 +1 @@ -"use strict";(self.webpackChunksanchonet=self.webpackChunksanchonet||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docsSidebar":[{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Join the community","href":"/get-started/discord","docId":"get-started/discord"},{"type":"link","label":"SanchoNet GovTool","href":"/get-started/govtool","docId":"get-started/govtool"}],"href":"/get-started/"},{"type":"category","label":"Why SanchoNet?","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Don Quixote","href":"/why-sanchonet/don-quixote","docId":"why-sanchonet/don-quixote"},{"type":"link","label":"Sancho Panza","href":"/why-sanchonet/sancho-panza","docId":"why-sanchonet/sancho-panza"},{"type":"link","label":"Barataria","href":"/why-sanchonet/barataria","docId":"why-sanchonet/barataria"}],"href":"/why-sanchonet/"},{"type":"category","label":"Roles","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"SPO","href":"/roles/spo","docId":"roles/spo"},{"type":"link","label":"DRep","href":"/roles/drep","docId":"roles/drep"},{"type":"link","label":"Developers","href":"/roles/dev","docId":"roles/dev"}]},{"type":"category","label":"Governance actions","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/actions","docId":"governance-actions/actions"}]},{"type":"link","label":"Faucet","href":"/faucet","docId":"faucet"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Start a SanchoNet node","href":"/tutorials/start-node","docId":"tutorials/start-a-node"},{"type":"link","label":"File naming convention","href":"/tutorials/file-naming-convention","docId":"tutorials/file-naming-convention"},{"type":"link","label":"Generate keys and an address","href":"/tutorials/address","docId":"tutorials/keys-and-address"},{"type":"link","label":"Stake address registration","href":"/tutorials/register-stake-address","docId":"tutorials/register-stake"},{"type":"link","label":"Register a stake pool","href":"/tutorials/stake-pool-registration","docId":"tutorials/register-spo"},{"type":"link","label":"Register a DRep","href":"/tutorials/drep-registration","docId":"tutorials/register-drep"},{"type":"link","label":"Register a multisignature DRep","href":"/tutorials/multisig-drep-registration","docId":"tutorials/register-multisig-drep"},{"type":"link","label":"Delegate votes to a DRep","href":"/tutorials/delegate-to-drep","docId":"tutorials/delegate-to-drep"},{"type":"link","label":"Generate committee keys","href":"/tutorials/committee","docId":"tutorials/committee"},{"type":"link","label":"Create governance actions","href":"/tutorials/actions","docId":"tutorials/actions"},{"type":"link","label":"Voting on actions","href":"/tutorials/vote-action","docId":"tutorials/vote-actions"},{"type":"link","label":"Voting as Multisignature DRep","href":"/tutorials/vote-multisig-drep","docId":"tutorials/vote-actions-multisig-drep"},{"type":"link","label":"Useful jq filters","href":"/tutorials/jq-filters","docId":"tutorials/jq-filters"},{"type":"link","label":"CLI queries","href":"/tutorials/cli queries","docId":"tutorials/queries"}]},{"type":"category","label":"DRep Pioneer Program","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview and Goals","href":"/drep-pioneer-program/drep-pp/overview","docId":"drep-pioneer-program/program-goals"},{"type":"link","label":"Participation Requirements","href":"/drep-pioneer-program/drep-pp/requirements","docId":"drep-pioneer-program/participation-reqs"},{"type":"link","label":"Lesson Plan Overview","href":"/drep-pioneer-program/drep-pp/lesson-plan","docId":"drep-pioneer-program/lesson-plan-intro"},{"type":"link","label":"Prelude an Introductions","href":"/drep-pioneer-program/drep-pp/prelude-and-intro","docId":"drep-pioneer-program/lp-prelude"},{"type":"link","label":"Module 1 - Cardano\u2019s Governance and Roles","href":"/drep-pioneer-program/drep-pp/module-1","docId":"drep-pioneer-program/module-1"},{"type":"link","label":"Module 2 - DRep Code of Conduct","href":"/drep-pioneer-program/drep-pp/module-2","docId":"drep-pioneer-program/module-2"},{"type":"link","label":"Module 3 - Reward Schemes for DReps","href":"/drep-pioneer-program/drep-pp/module-3","docId":"drep-pioneer-program/module-3"},{"type":"link","label":"Module 4 - Joining the DReps Ecosystem","href":"/drep-pioneer-program/drep-pp/module-4","docId":"drep-pioneer-program/module-4"},{"type":"link","label":"Closing Actitivity and Wrap Up","href":"/drep-pioneer-program/drep-pp/lp-wrapup.mdx","docId":"drep-pioneer-program/lp-wrapup"}]},{"type":"category","label":"Tools and resources","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Tools and resources","href":"/tools-resources/resources","docId":"tools-resources/resources"},{"type":"link","label":"Conway ledger era FAQs","href":"/tools-resources/faq","docId":"tools-resources/faq"}]},{"type":"link","label":"Meetups","href":"/meetups","docId":"meetups"}]},"docs":{"drep-pioneer-program/lesson-plan-intro":{"id":"drep-pioneer-program/lesson-plan-intro","title":"DRep Pioneer Program Lesson Plan","description":"Proposed Schedule","sidebar":"docsSidebar"},"drep-pioneer-program/lp-prelude":{"id":"drep-pioneer-program/lp-prelude","title":"DRep Pioneer Program Lesson Plan","description":"Prelude and Introductions","sidebar":"docsSidebar"},"drep-pioneer-program/lp-wrapup":{"id":"drep-pioneer-program/lp-wrapup","title":"DRep Pioneer Program Lesson Plan","description":"Closing Activity and Wrap Up","sidebar":"docsSidebar"},"drep-pioneer-program/module-1":{"id":"drep-pioneer-program/module-1","title":"DRep Pioneer Program Lesson Plan","description":"Module 1: Cardano\u2019s Governance and Roles","sidebar":"docsSidebar"},"drep-pioneer-program/module-2":{"id":"drep-pioneer-program/module-2","title":"DRep Pioneer Program Lesson Plan","description":"Module 2: DRep Code of Conduct","sidebar":"docsSidebar"},"drep-pioneer-program/module-3":{"id":"drep-pioneer-program/module-3","title":"DRep Pioneer Program Lesson Plan","description":"Module 3: Reward Schemes for DReps","sidebar":"docsSidebar"},"drep-pioneer-program/module-4":{"id":"drep-pioneer-program/module-4","title":"DRep Pioneer Program Lesson Plan","description":"Module 4: Joining the DReps Ecosystem","sidebar":"docsSidebar"},"drep-pioneer-program/participation-reqs":{"id":"drep-pioneer-program/participation-reqs","title":"Participation Requirements","description":"Participants Requirements","sidebar":"docsSidebar"},"drep-pioneer-program/program-goals":{"id":"drep-pioneer-program/program-goals","title":"DRep Pioneer Program","description":"Overview","sidebar":"docsSidebar"},"faucet":{"id":"faucet","title":"SanchoNet faucet","description":"To request funds from the faucet:","sidebar":"docsSidebar"},"get-started/discord":{"id":"get-started/discord","title":"Join the community","description":"Joining the Community on Discord\\"","sidebar":"docsSidebar"},"get-started/get-started":{"id":"get-started/get-started","title":"SanchoNet","description":"Welcome to SanchoNet\\"","sidebar":"docsSidebar"},"get-started/govtool":{"id":"get-started/govtool","title":"SanchoNet GovTool","description":"SanchoNet GovTool\\"","sidebar":"docsSidebar"},"governance-actions/actions":{"id":"governance-actions/actions","title":"SanchoNet governance actions","description":"CIP-1694 describes seven types of governance actions.","sidebar":"docsSidebar"},"meetups":{"id":"meetups","title":"Meetups","description":"SanchoNet meetups is a way for people to get to know more about SanchoNet be it online or offline at an event.","sidebar":"docsSidebar"},"roles/dev":{"id":"roles/dev","title":"Developers","description":"Develop on SanchoNet","sidebar":"docsSidebar"},"roles/drep":{"id":"roles/drep","title":"DRep","description":"Become a SanchoNet DRep","sidebar":"docsSidebar"},"roles/spo":{"id":"roles/spo","title":"SPO","description":"Become a SanchoNet SPO","sidebar":"docsSidebar"},"tools-resources/faq":{"id":"tools-resources/faq","title":"Conway ledger era FAQs","description":"Conway ledger era FAQs\\"","sidebar":"docsSidebar"},"tools-resources/resources":{"id":"tools-resources/resources","title":"Tools and resources","description":"Tools and resources\\"","sidebar":"docsSidebar"},"tutorials/actions":{"id":"tutorials/actions","title":"Governance actions","description":"Common aspects of all types of governance actions","sidebar":"docsSidebar"},"tutorials/committee":{"id":"tutorials/committee","title":"Generate committee member keys and certificates","description":"Committee member cold keys","sidebar":"docsSidebar"},"tutorials/delegate-to-drep":{"id":"tutorials/delegate-to-drep","title":"Delegate votes to a DRep","description":"Delegating your voting power to a SanchoNet delegate representative (DRep) operates much like delegating your stake to a stake pool. Voting power delegation involves the issuance of a delegation certificate from your stake key to the chosen SanchoNet DRep. Just as with stake delegation, the process of delegating votes to a SanchoNet DRep does not entail relinquishing control of your funds. Instead, the vote delegation certificate grants the selected DRep permission to vote on your behalf.","sidebar":"docsSidebar"},"tutorials/file-naming-convention":{"id":"tutorials/file-naming-convention","title":"File naming convention/schema","description":"To align the tutorials, examples, and also third-party tooling, you can find a suggested file naming convention/schema related to the Conway and Voltaire eras in this document.","sidebar":"docsSidebar"},"tutorials/jq-filters":{"id":"tutorials/jq-filters","title":"Useful jq filters","description":"\'_jq is like sed for JSON data - you can use it to slice, filter, map, and transform","sidebar":"docsSidebar"},"tutorials/keys-and-address":{"id":"tutorials/keys-and-address","title":"Generate keys and address","description":"First, generate a payment key pair and a stake key pair. Then, use the payment verification key and the stake verification key to build an address that can be used to receive funds from the faucet.","sidebar":"docsSidebar"},"tutorials/queries":{"id":"tutorials/queries","title":"Useful CLI queries","description":"Query the constitution:","sidebar":"docsSidebar"},"tutorials/register-drep":{"id":"tutorials/register-drep","title":"Registering as a SanchoNet delegate representative (DRep)","description":"Pre-requisites","sidebar":"docsSidebar"},"tutorials/register-multisig-drep":{"id":"tutorials/register-multisig-drep","title":"Registering a multisignature delegate representative (DRep)","description":"In certain scenarios, a Delegate Representative (DRep) may comprise multiple individuals collectively involved in decision-making processes.","sidebar":"docsSidebar"},"tutorials/register-spo":{"id":"tutorials/register-spo","title":"Register a stake pool","description":"WARNING: This tutorial is simplified and deliberately excludes secure key handling which is essential for other testnets and mainnet. For a comprehensive tutorial, see the Cardano course where you can access video lessons and a more detailed instruction handbook.","sidebar":"docsSidebar"},"tutorials/register-stake":{"id":"tutorials/register-stake","title":"Stake address registration certificate","description":"To take part on the SanchoNet consensus protocol, we need to submit a stake address registration certificate to the chain. This allows to delegate stake to a SanchoNet stake pool","sidebar":"docsSidebar"},"tutorials/start-a-node":{"id":"tutorials/start-a-node","title":"Start a SanchoNet node","description":"Download or build cardano-node and cardano-cli binaries:","sidebar":"docsSidebar"},"tutorials/vote-actions":{"id":"tutorials/vote-actions","title":"Voting on governance actions","description":"Pre-requisites","sidebar":"docsSidebar"},"tutorials/vote-actions-multisig-drep":{"id":"tutorials/vote-actions-multisig-drep","title":"Voting on governance actions as a multisignature DRep","description":"Pre-requisites","sidebar":"docsSidebar"},"why-sanchonet/barataria":{"id":"why-sanchonet/barataria","title":"Barataria","description":"An island to govern","sidebar":"docsSidebar"},"why-sanchonet/don-quixote":{"id":"why-sanchonet/don-quixote","title":"Don Quixote","description":"A knight in an era after knights","sidebar":"docsSidebar"},"why-sanchonet/sancho-panza":{"id":"why-sanchonet/sancho-panza","title":"Sancho Panza","description":"Loyal and faithful squire","sidebar":"docsSidebar"},"why-sanchonet/why-sanchonet":{"id":"why-sanchonet/why-sanchonet","title":"Why SanchoNet?","description":"Why the name SanchoNet","sidebar":"docsSidebar"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunksanchonet=self.webpackChunksanchonet||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docsSidebar":[{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Join the community","href":"/get-started/discord","docId":"get-started/discord"},{"type":"link","label":"SanchoNet GovTool","href":"/get-started/govtool","docId":"get-started/govtool"}],"href":"/get-started/"},{"type":"category","label":"Why SanchoNet?","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Don Quixote","href":"/why-sanchonet/don-quixote","docId":"why-sanchonet/don-quixote"},{"type":"link","label":"Sancho Panza","href":"/why-sanchonet/sancho-panza","docId":"why-sanchonet/sancho-panza"},{"type":"link","label":"Barataria","href":"/why-sanchonet/barataria","docId":"why-sanchonet/barataria"}],"href":"/why-sanchonet/"},{"type":"category","label":"Roles","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"SPO","href":"/roles/spo","docId":"roles/spo"},{"type":"link","label":"DRep","href":"/roles/drep","docId":"roles/drep"},{"type":"link","label":"Developers","href":"/roles/dev","docId":"roles/dev"}]},{"type":"category","label":"Governance actions","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/actions","docId":"governance-actions/actions"}]},{"type":"link","label":"Faucet","href":"/faucet","docId":"faucet"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Start a SanchoNet node","href":"/tutorials/start-node","docId":"tutorials/start-a-node"},{"type":"link","label":"File naming convention","href":"/tutorials/file-naming-convention","docId":"tutorials/file-naming-convention"},{"type":"link","label":"Generate keys and an address","href":"/tutorials/address","docId":"tutorials/keys-and-address"},{"type":"link","label":"Stake address registration","href":"/tutorials/register-stake-address","docId":"tutorials/register-stake"},{"type":"link","label":"Register a stake pool","href":"/tutorials/stake-pool-registration","docId":"tutorials/register-spo"},{"type":"link","label":"Register a DRep","href":"/tutorials/drep-registration","docId":"tutorials/register-drep"},{"type":"link","label":"Register a multisignature DRep","href":"/tutorials/multisig-drep-registration","docId":"tutorials/register-multisig-drep"},{"type":"link","label":"Delegate votes to a DRep","href":"/tutorials/delegate-to-drep","docId":"tutorials/delegate-to-drep"},{"type":"link","label":"Generate committee keys","href":"/tutorials/committee","docId":"tutorials/committee"},{"type":"link","label":"Create governance actions","href":"/tutorials/actions","docId":"tutorials/actions"},{"type":"link","label":"Voting on actions","href":"/tutorials/vote-action","docId":"tutorials/vote-actions"},{"type":"link","label":"Voting as multisignature DRep","href":"/tutorials/vote-multisig-drep","docId":"tutorials/vote-actions-multisig-drep"},{"type":"link","label":"Useful jq filters","href":"/tutorials/jq-filters","docId":"tutorials/jq-filters"},{"type":"link","label":"CLI queries","href":"/tutorials/cli queries","docId":"tutorials/queries"}]},{"type":"category","label":"DRep Pioneer Program","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview and Goals","href":"/drep-pioneer-program/drep-pp/overview","docId":"drep-pioneer-program/program-goals"},{"type":"link","label":"Participation Requirements","href":"/drep-pioneer-program/drep-pp/requirements","docId":"drep-pioneer-program/participation-reqs"},{"type":"link","label":"Lesson Plan Overview","href":"/drep-pioneer-program/drep-pp/lesson-plan","docId":"drep-pioneer-program/lesson-plan-intro"},{"type":"link","label":"Prelude an Introductions","href":"/drep-pioneer-program/drep-pp/prelude-and-intro","docId":"drep-pioneer-program/lp-prelude"},{"type":"link","label":"Module 1 - Cardano\u2019s Governance and Roles","href":"/drep-pioneer-program/drep-pp/module-1","docId":"drep-pioneer-program/module-1"},{"type":"link","label":"Module 2 - DRep Code of Conduct","href":"/drep-pioneer-program/drep-pp/module-2","docId":"drep-pioneer-program/module-2"},{"type":"link","label":"Module 3 - Reward Schemes for DReps","href":"/drep-pioneer-program/drep-pp/module-3","docId":"drep-pioneer-program/module-3"},{"type":"link","label":"Module 4 - Joining the DReps Ecosystem","href":"/drep-pioneer-program/drep-pp/module-4","docId":"drep-pioneer-program/module-4"},{"type":"link","label":"Closing Actitivity and Wrap Up","href":"/drep-pioneer-program/drep-pp/lp-wrapup.mdx","docId":"drep-pioneer-program/lp-wrapup"}]},{"type":"category","label":"Tools and resources","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Tools and resources","href":"/tools-resources/resources","docId":"tools-resources/resources"},{"type":"link","label":"Conway ledger era FAQs","href":"/tools-resources/faq","docId":"tools-resources/faq"}]},{"type":"link","label":"Meetups","href":"/meetups","docId":"meetups"}]},"docs":{"drep-pioneer-program/lesson-plan-intro":{"id":"drep-pioneer-program/lesson-plan-intro","title":"DRep Pioneer Program Lesson Plan","description":"Proposed Schedule","sidebar":"docsSidebar"},"drep-pioneer-program/lp-prelude":{"id":"drep-pioneer-program/lp-prelude","title":"DRep Pioneer Program Lesson Plan","description":"Prelude and Introductions","sidebar":"docsSidebar"},"drep-pioneer-program/lp-wrapup":{"id":"drep-pioneer-program/lp-wrapup","title":"DRep Pioneer Program Lesson Plan","description":"Closing Activity and Wrap Up","sidebar":"docsSidebar"},"drep-pioneer-program/module-1":{"id":"drep-pioneer-program/module-1","title":"DRep Pioneer Program Lesson Plan","description":"Module 1: Cardano\u2019s Governance and Roles","sidebar":"docsSidebar"},"drep-pioneer-program/module-2":{"id":"drep-pioneer-program/module-2","title":"DRep Pioneer Program Lesson Plan","description":"Module 2: DRep Code of Conduct","sidebar":"docsSidebar"},"drep-pioneer-program/module-3":{"id":"drep-pioneer-program/module-3","title":"DRep Pioneer Program Lesson Plan","description":"Module 3: Reward Schemes for DReps","sidebar":"docsSidebar"},"drep-pioneer-program/module-4":{"id":"drep-pioneer-program/module-4","title":"DRep Pioneer Program Lesson Plan","description":"Module 4: Joining the DReps Ecosystem","sidebar":"docsSidebar"},"drep-pioneer-program/participation-reqs":{"id":"drep-pioneer-program/participation-reqs","title":"Participation Requirements","description":"Participants Requirements","sidebar":"docsSidebar"},"drep-pioneer-program/program-goals":{"id":"drep-pioneer-program/program-goals","title":"DRep Pioneer Program","description":"Overview","sidebar":"docsSidebar"},"faucet":{"id":"faucet","title":"SanchoNet faucet","description":"To request funds from the faucet:","sidebar":"docsSidebar"},"get-started/discord":{"id":"get-started/discord","title":"Join the community","description":"Joining the Community on Discord\\"","sidebar":"docsSidebar"},"get-started/get-started":{"id":"get-started/get-started","title":"SanchoNet","description":"Welcome to SanchoNet\\"","sidebar":"docsSidebar"},"get-started/govtool":{"id":"get-started/govtool","title":"SanchoNet GovTool","description":"SanchoNet GovTool\\"","sidebar":"docsSidebar"},"governance-actions/actions":{"id":"governance-actions/actions","title":"SanchoNet governance actions","description":"CIP-1694 describes seven types of governance actions.","sidebar":"docsSidebar"},"meetups":{"id":"meetups","title":"Meetups","description":"SanchoNet meetups is a way for people to get to know more about SanchoNet be it online or offline at an event.","sidebar":"docsSidebar"},"roles/dev":{"id":"roles/dev","title":"Developers","description":"Develop on SanchoNet","sidebar":"docsSidebar"},"roles/drep":{"id":"roles/drep","title":"DRep","description":"Become a SanchoNet DRep","sidebar":"docsSidebar"},"roles/spo":{"id":"roles/spo","title":"SPO","description":"Become a SanchoNet SPO","sidebar":"docsSidebar"},"tools-resources/faq":{"id":"tools-resources/faq","title":"Conway ledger era FAQs","description":"Conway ledger era FAQs\\"","sidebar":"docsSidebar"},"tools-resources/resources":{"id":"tools-resources/resources","title":"Tools and resources","description":"Tools and resources\\"","sidebar":"docsSidebar"},"tutorials/actions":{"id":"tutorials/actions","title":"Governance actions","description":"Common aspects of all types of governance actions","sidebar":"docsSidebar"},"tutorials/committee":{"id":"tutorials/committee","title":"Generate committee member keys and certificates","description":"Committee member cold keys","sidebar":"docsSidebar"},"tutorials/delegate-to-drep":{"id":"tutorials/delegate-to-drep","title":"Delegate votes to a DRep","description":"Delegating your voting power to a SanchoNet delegate representative (DRep) operates much like delegating your stake to a stake pool. Voting power delegation involves the issuance of a delegation certificate from your stake key to the chosen SanchoNet DRep. Just as with stake delegation, the process of delegating votes to a SanchoNet DRep does not entail relinquishing control of your funds. Instead, the vote delegation certificate grants the selected DRep permission to vote on your behalf.","sidebar":"docsSidebar"},"tutorials/file-naming-convention":{"id":"tutorials/file-naming-convention","title":"File naming convention/schema","description":"To align the tutorials, examples, and also third-party tooling, you can find a suggested file naming convention/schema related to the Conway and Voltaire eras in this document.","sidebar":"docsSidebar"},"tutorials/jq-filters":{"id":"tutorials/jq-filters","title":"Useful jq filters","description":"\'_jq is like sed for JSON data - you can use it to slice, filter, map, and transform","sidebar":"docsSidebar"},"tutorials/keys-and-address":{"id":"tutorials/keys-and-address","title":"Generate keys and address","description":"First, generate a payment key pair and a stake key pair. Then, use the payment verification key and the stake verification key to build an address that can be used to receive funds from the faucet.","sidebar":"docsSidebar"},"tutorials/queries":{"id":"tutorials/queries","title":"Useful CLI queries","description":"Query the constitution:","sidebar":"docsSidebar"},"tutorials/register-drep":{"id":"tutorials/register-drep","title":"Registering as a SanchoNet delegate representative (DRep)","description":"Pre-requisites","sidebar":"docsSidebar"},"tutorials/register-multisig-drep":{"id":"tutorials/register-multisig-drep","title":"Registering a multisignature delegate representative (DRep)","description":"In certain scenarios, a Delegate Representative (DRep) may comprise multiple individuals collectively involved in decision-making processes.","sidebar":"docsSidebar"},"tutorials/register-spo":{"id":"tutorials/register-spo","title":"Register a stake pool","description":"WARNING: This tutorial is simplified and deliberately excludes secure key handling which is essential for other testnets and mainnet. For a comprehensive tutorial, see the Cardano course where you can access video lessons and a more detailed instruction handbook.","sidebar":"docsSidebar"},"tutorials/register-stake":{"id":"tutorials/register-stake","title":"Stake address registration certificate","description":"To take part on the SanchoNet consensus protocol, we need to submit a stake address registration certificate to the chain. This allows to delegate stake to a SanchoNet stake pool","sidebar":"docsSidebar"},"tutorials/start-a-node":{"id":"tutorials/start-a-node","title":"Start a SanchoNet node","description":"Download or build cardano-node and cardano-cli binaries:","sidebar":"docsSidebar"},"tutorials/vote-actions":{"id":"tutorials/vote-actions","title":"Voting on governance actions","description":"Pre-requisites","sidebar":"docsSidebar"},"tutorials/vote-actions-multisig-drep":{"id":"tutorials/vote-actions-multisig-drep","title":"Voting on governance actions as a multisignature DRep","description":"Pre-requisites","sidebar":"docsSidebar"},"why-sanchonet/barataria":{"id":"why-sanchonet/barataria","title":"Barataria","description":"An island to govern","sidebar":"docsSidebar"},"why-sanchonet/don-quixote":{"id":"why-sanchonet/don-quixote","title":"Don Quixote","description":"A knight in an era after knights","sidebar":"docsSidebar"},"why-sanchonet/sancho-panza":{"id":"why-sanchonet/sancho-panza","title":"Sancho Panza","description":"Loyal and faithful squire","sidebar":"docsSidebar"},"why-sanchonet/why-sanchonet":{"id":"why-sanchonet/why-sanchonet","title":"Why SanchoNet?","description":"Why the name SanchoNet","sidebar":"docsSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/abd7a278.3c1dead2.js b/assets/js/abd7a278.05ecb479.js similarity index 99% rename from assets/js/abd7a278.3c1dead2.js rename to assets/js/abd7a278.05ecb479.js index 57b8aa92..54bfbe0b 100644 --- a/assets/js/abd7a278.3c1dead2.js +++ b/assets/js/abd7a278.05ecb479.js @@ -1 +1 @@ -"use strict";(self.webpackChunksanchonet=self.webpackChunksanchonet||[]).push([[3152],{3905:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>v});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var c=n.createContext({}),l=function(e){var t=n.useContext(c),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},u=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(o),h=r,v=p["".concat(c,".").concat(h)]||p[h]||d[h]||a;return o?n.createElement(v,i(i({ref:t},u),{},{components:o})):n.createElement(v,i({ref:t},u))}));function v(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=h;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:r,i[1]=s;for(var l=2;l{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=o(7462),r=(o(7294),o(3905));const a={sidebar_label:"Useful jq filters",title:"Useful jq filters",sidebar_position:11,slug:"/tutorials/jq-filters"},i=void 0,s={unversionedId:"tutorials/jq-filters",id:"tutorials/jq-filters",title:"Useful jq filters",description:"'_jq is like sed for JSON data - you can use it to slice, filter, map, and transform",source:"@site/docs/tutorials/jq-filters.mdx",sourceDirName:"tutorials",slug:"/tutorials/jq-filters",permalink:"/tutorials/jq-filters",draft:!1,editUrl:"https://github.com/input-output-hk/sanchonet/tree/master/docs/tutorials/jq-filters.mdx",tags:[],version:"current",sidebarPosition:11,frontMatter:{sidebar_label:"Useful jq filters",title:"Useful jq filters",sidebar_position:11,slug:"/tutorials/jq-filters"},sidebar:"docsSidebar",previous:{title:"Voting as Multisignature DRep",permalink:"/tutorials/vote-multisig-drep"},next:{title:"CLI queries",permalink:"/tutorials/cli queries"}},c={},l=[{value:"Show governance actions that will expire at the end of the current epoch:",id:"show-governance-actions-that-will-expire-at-the-end-of-the-current-epoch",level:3},{value:"Show governance actions that were proposed in the current epoch:",id:"show-governance-actions-that-were-proposed-in-the-current-epoch",level:3},{value:"Sort governance actions by the number of DRep votes:",id:"sort-governance-actions-by-the-number-of-drep-votes",level:3},{value:"Sort by the number of SPO votes:",id:"sort-by-the-number-of-spo-votes",level:3},{value:"Sort by the number of CC votes:",id:"sort-by-the-number-of-cc-votes",level:3},{value:"Filter actions that expire within the current and the next two epochs, including information about all roles' votes, sorted by expiration epoch:",id:"filter-actions-that-expire-within-the-current-and-the-next-two-epochs-including-information-about-all-roles-votes-sorted-by-expiration-epoch",level:3},{value:"Show actions for which a specific DRep key has voted, indicating the DRep's vote and the total number of votes received for this action:",id:"show-actions-for-which-a-specific-drep-key-has-voted-indicating-the-dreps-vote-and-the-total-number-of-votes-received-for-this-action",level:3},{value:"Show actions where the given DRep key has not voted yet:",id:"show-actions-where-the-given-drep-key-has-not-voted-yet",level:3},{value:"Show the total number of 'yes', 'no', and 'abstain' votes for a given governance action ID:",id:"show-the-total-number-of-yes-no-and-abstain-votes-for-a-given-governance-action-id",level:3},{value:"Show the active treasury withdrawal governance actions and their current vote count:",id:"show-the-active-treasury-withdrawal-governance-actions-and-their-current-vote-count",level:3},{value:"Show the active update committee governance actions and their current vote count:",id:"show-the-active-update-committee-governance-actions-and-their-current-vote-count",level:3}],u={toc:l},p="wrapper";function d(e){let{components:t,...o}=e;return(0,r.kt)(p,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"'",(0,r.kt)("em",{parentName:"p"},"jq is like sed for JSON data - you can use it to slice, filter, map, and transform\nstructured data with the same ease that sed, awk, grep and friends let you play with text."),"'"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://jqlang.github.io/jq/download/"},"Install jq"),"."),(0,r.kt)("p",null,"Below you will find some useful jq filters to parse the governance state."),(0,r.kt)("h3",{id:"show-governance-actions-that-will-expire-at-the-end-of-the-current-epoch"},"Show governance actions that will expire at the end of the current epoch:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 \\\n | jq --argjson epoch \"$current_epoch\" '.proposals\n | to_entries[]\n | select(.value.expiresAfter == $epoch)'\n\n")),(0,r.kt)("h3",{id:"show-governance-actions-that-were-proposed-in-the-current-epoch"},"Show governance actions that were proposed in the current epoch:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 \\\n | jq -r --argjson epoch \"$current_epoch\" '.proposals\n | to_entries[]\n | select(.value.proposedIn == $epoch)'\n")),(0,r.kt)("h3",{id:"sort-governance-actions-by-the-number-of-drep-votes"},"Sort governance actions by the number of DRep votes:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | jq -r '\n .proposals\n | to_entries[]\n | {govActionId: .value.actionId, type: .value.proposalProcedure.govAction.tag, drepVoteCount: (.value.dRepVotes | keys | length)}\n ' | jq -s 'sort_by(.voteCount) | reverse[]'\n\n")),(0,r.kt)("h3",{id:"sort-by-the-number-of-spo-votes"},"Sort by the number of SPO votes:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | jq -r '\n .proposals\n | to_entries[]\n | {govActionId: .value.actionId, type: .value.proposalProcedure.govAction.tag, spoVoteCount: (.value.stakePoolVotes | keys | length)}\n ' | jq -s 'sort_by(.voteCount) | reverse[]'\n")),(0,r.kt)("h3",{id:"sort-by-the-number-of-cc-votes"},"Sort by the number of CC votes:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | jq -r '\n .proposals\n | to_entries[]\n | {govActionId: .value.actionId, type: .value.proposalProcedure.govAction.tag, ccVoteCount: (.value.committeeVotes | keys | length)}\n ' | jq -s 'sort_by(.voteCount) | reverse[]'\n")),(0,r.kt)("h3",{id:"filter-actions-that-expire-within-the-current-and-the-next-two-epochs-including-information-about-all-roles-votes-sorted-by-expiration-epoch"},"Filter actions that expire within the current and the next two epochs, including information about all roles' votes, sorted by expiration epoch:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | jq -r --argjson current_epoch \"$current_epoch\" '\n .proposals\n | to_entries[]\n | select(.value.expiresAfter >= ($current_epoch | tonumber) and .value.expiresAfter <= ($current_epoch + 2))\n | {\n govActionId: .value.actionId,\n type: .value.proposalProcedure.govAction.tag,\n expiresAfter: .value.expiresAfter,\n committeeVotesCount: (.value.committeeVotes | length),\n dRepVotesCount: (.value.dRepVotes | length),\n stakePoolVotesCount: (.value.stakePoolVotes | length)\n }\n ' | jq -s 'sort_by(.expiresAfter)'\n\n")),(0,r.kt)("h3",{id:"show-actions-for-which-a-specific-drep-key-has-voted-indicating-the-dreps-vote-and-the-total-number-of-votes-received-for-this-action"},"Show actions for which a specific DRep key has voted, indicating the DRep's vote and the total number of votes received for this action:"),(0,r.kt)("p",null,"Replace ",(0,r.kt)("inlineCode",{parentName:"p"},"keyHash-0e7d17c8a917eaee361924d6471331128b3e0de5323f54d70dd0c8c9")," with the hex DRep ID of your interest, if it is a script based DRRep, make sure\nto use ",(0,r.kt)("inlineCode",{parentName:"p"},"scriptHash")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"keyHash")," prefix."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg dRepKey \"keyHash-0e7d17c8a917eaee361924d6471331128b3e0de5323f54d70dd0c8c9\" '\n .proposals\n | to_entries[]\n | select(.value.dRepVotes[$dRepKey] != null)\n | {\n govActionId: .value.actionId,\n type: .value.proposalProcedure.govAction.tag,\n dRepVote: .value.dRepVotes[$dRepKey],\n expiresAfter: .value.expiresAfter,\n committeeVotesCount: (.value.committeeVotes | length),\n dRepVotesCount: (.value.dRepVotes | length),\n stakePoolVotesCount: (.value.stakePoolVotes | length)\n }\n '\n")),(0,r.kt)("h3",{id:"show-actions-where-the-given-drep-key-has-not-voted-yet"},"Show actions where the given DRep key has not voted yet:"),(0,r.kt)("p",null,"Replace ",(0,r.kt)("inlineCode",{parentName:"p"},"058b60ead63f667c0ff5b40e269dd1f05ce3a804256735ad4eddce20")," with the hex DRep ID of your interest."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg dRepKey \"keyHash-0e7d17c8a917eaee361924d6471331128b3e0de5323f54d70dd0c8c9\" '\n .proposals\n | to_entries[]\n | select(.value.dRepVotes[$dRepKey] == null)\n | {\n govActionId: .value.actionId,\n type: .value.proposalProcedure.govAction.tag,\n expiresAfter: .value.expiresAfter,\n committeeVotesCount: (.value.committeeVotes | length),\n dRepVotesCount: (.value.dRepVotes | length),\n stakePoolVotesCount: (.value.stakePoolVotes | length)\n }\n '\n")),(0,r.kt)("h3",{id:"show-the-total-number-of-yes-no-and-abstain-votes-for-a-given-governance-action-id"},"Show the total number of 'yes', 'no', and 'abstain' votes for a given governance action ID:"),(0,r.kt)("p",null,'Replace "1e08794a48b71ec7e48d3190c7c30455f9538d0e54f4087915ff201167334bc7" and "0" and with the governance action ID and index of your interest.'),(0,r.kt)("p",null,"and .value.actionId.govActionIx == $actionIndex"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'cardano-cli conway query gov-state --testnet-magic 4 \\\n | jq -r --arg actionTxId "1e08794a48b71ec7e48d3190c7c30455f9538d0e54f4087915ff201167334bc7" --arg actionIndex "0" \' .proposals\n | to_entries[]\n | select(.value.actionId.txId == $actionTxId and .value.actionId.govActionIx == ($actionIndex | tonumber))\n | {\n govActionId: .value.actionId,\n dRepVoteYesCount: (.value.dRepVotes | with_entries(select(.value == "VoteYes")) | length),\n dRepVoteNoCount: (.value.dRepVotes | with_entries(select(.value == "VoteNo")) | length),\n dRepAbstainCount: (.value.dRepVotes | with_entries(select(.value == "Abstain")) | length),\n stakePoolVoteYesCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteYes")) | length),\n stakePoolVoteNoCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteNo")) | length),\n stakePoolAbstainCount: (.value.stakePoolVotes | with_entries(select(.value == "Abstain")) | length),\n committeeVoteYesCount: (.value.committeeVotes | with_entries(select(.value == "VoteYes")) | length),\n committeeVoteNoCount: (.value.committeeVotes | with_entries(select(.value == "VoteNo")) | length),\n committeeAbstainCount: (.value.committeeVotes | with_entries(select(.value == "Abstain")) | length)\n }\n\'\n')),(0,r.kt)("h3",{id:"show-the-active-treasury-withdrawal-governance-actions-and-their-current-vote-count"},"Show the active ",(0,r.kt)("inlineCode",{parentName:"h3"},"treasury withdrawal")," governance actions and their current vote count:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)\n\ncardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg currentEpoch "$current_epoch" \'\n .proposals\n | to_entries[]\n | select(.value.expiresAfter > ($currentEpoch | tonumber) and .value.proposalProcedure.govAction.tag == "TreasuryWithdrawals")\n | { type: .value.proposalProcedure.govAction.tag, \n govActionId: .value.actionId,\n expiresAfter: .value.expiresAfter,\n dRepVoteYesCount: (.value.dRepVotes | with_entries(select(.value == "VoteYes")) | length),\n dRepVoteNoCount: (.value.dRepVotes | with_entries(select(.value == "VoteNo")) | length),\n dRepAbstainCount: (.value.dRepVotes | with_entries(select(.value == "Abstain")) | length),\n committeeVoteYesCount: (.value.committeeVotes | with_entries(select(.value == "VoteYes")) | length),\n committeeVoteNoCount: (.value.committeeVotes | with_entries(select(.value == "VoteNo")) | length),\n committeeAbstainCount: (.value.committeeVotes | with_entries(select(.value == "Abstain")) | length)\n }\n\' | jq -s \'sort_by(.expiresAfter)\'\n\n')),(0,r.kt)("h3",{id:"show-the-active-update-committee-governance-actions-and-their-current-vote-count"},"Show the active ",(0,r.kt)("inlineCode",{parentName:"h3"},"update committee")," governance actions and their current vote count:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)\n\ncardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg currentEpoch "$current_epoch" \'\n .proposals\n | to_entries[]\n | select(.value.expiresAfter > ($currentEpoch | tonumber) and.value.proposalProcedure.govAction.tag == "UpdateCommittee")\n | { type: .value.proposalProcedure.govAction.tag,\n govActionId: .value.actionId,\n expiresAfter: .value.expiresAfter,\n dRepVoteYesCount: (.value.dRepVotes | with_entries(select(.value == "VoteYes")) | length),\n dRepVoteNoCount: (.value.dRepVotes | with_entries(select(.value == "VoteNo")) | length),\n dRepAbstainCount: (.value.dRepVotes | with_entries(select(.value == "Abstain")) | length),\n stakePoolVoteYesCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteYes")) | length),\n stakePoolVoteNoCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteNo")) | length),\n stakePoolAbstainCount: (.value.stakePoolVotes | with_entries(select(.value == "Abstain")) | length)\n }\n\' | jq -s \'sort_by(.expiresAfter)\'\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksanchonet=self.webpackChunksanchonet||[]).push([[3152],{3905:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>v});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var c=n.createContext({}),l=function(e){var t=n.useContext(c),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},u=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(o),h=r,v=p["".concat(c,".").concat(h)]||p[h]||d[h]||a;return o?n.createElement(v,i(i({ref:t},u),{},{components:o})):n.createElement(v,i({ref:t},u))}));function v(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=h;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:r,i[1]=s;for(var l=2;l{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=o(7462),r=(o(7294),o(3905));const a={sidebar_label:"Useful jq filters",title:"Useful jq filters",sidebar_position:11,slug:"/tutorials/jq-filters"},i=void 0,s={unversionedId:"tutorials/jq-filters",id:"tutorials/jq-filters",title:"Useful jq filters",description:"'_jq is like sed for JSON data - you can use it to slice, filter, map, and transform",source:"@site/docs/tutorials/jq-filters.mdx",sourceDirName:"tutorials",slug:"/tutorials/jq-filters",permalink:"/tutorials/jq-filters",draft:!1,editUrl:"https://github.com/input-output-hk/sanchonet/tree/master/docs/tutorials/jq-filters.mdx",tags:[],version:"current",sidebarPosition:11,frontMatter:{sidebar_label:"Useful jq filters",title:"Useful jq filters",sidebar_position:11,slug:"/tutorials/jq-filters"},sidebar:"docsSidebar",previous:{title:"Voting as multisignature DRep",permalink:"/tutorials/vote-multisig-drep"},next:{title:"CLI queries",permalink:"/tutorials/cli queries"}},c={},l=[{value:"Show governance actions that will expire at the end of the current epoch:",id:"show-governance-actions-that-will-expire-at-the-end-of-the-current-epoch",level:3},{value:"Show governance actions that were proposed in the current epoch:",id:"show-governance-actions-that-were-proposed-in-the-current-epoch",level:3},{value:"Sort governance actions by the number of DRep votes:",id:"sort-governance-actions-by-the-number-of-drep-votes",level:3},{value:"Sort by the number of SPO votes:",id:"sort-by-the-number-of-spo-votes",level:3},{value:"Sort by the number of CC votes:",id:"sort-by-the-number-of-cc-votes",level:3},{value:"Filter actions that expire within the current and the next two epochs, including information about all roles' votes, sorted by expiration epoch:",id:"filter-actions-that-expire-within-the-current-and-the-next-two-epochs-including-information-about-all-roles-votes-sorted-by-expiration-epoch",level:3},{value:"Show actions for which a specific DRep key has voted, indicating the DRep's vote and the total number of votes received for this action:",id:"show-actions-for-which-a-specific-drep-key-has-voted-indicating-the-dreps-vote-and-the-total-number-of-votes-received-for-this-action",level:3},{value:"Show actions where the given DRep key has not voted yet:",id:"show-actions-where-the-given-drep-key-has-not-voted-yet",level:3},{value:"Show the total number of 'yes', 'no', and 'abstain' votes for a given governance action ID:",id:"show-the-total-number-of-yes-no-and-abstain-votes-for-a-given-governance-action-id",level:3},{value:"Show the active treasury withdrawal governance actions and their current vote count:",id:"show-the-active-treasury-withdrawal-governance-actions-and-their-current-vote-count",level:3},{value:"Show the active update committee governance actions and their current vote count:",id:"show-the-active-update-committee-governance-actions-and-their-current-vote-count",level:3}],u={toc:l},p="wrapper";function d(e){let{components:t,...o}=e;return(0,r.kt)(p,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"'",(0,r.kt)("em",{parentName:"p"},"jq is like sed for JSON data - you can use it to slice, filter, map, and transform\nstructured data with the same ease that sed, awk, grep and friends let you play with text."),"'"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://jqlang.github.io/jq/download/"},"Install jq"),"."),(0,r.kt)("p",null,"Below you will find some useful jq filters to parse the governance state."),(0,r.kt)("h3",{id:"show-governance-actions-that-will-expire-at-the-end-of-the-current-epoch"},"Show governance actions that will expire at the end of the current epoch:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 \\\n | jq --argjson epoch \"$current_epoch\" '.proposals\n | to_entries[]\n | select(.value.expiresAfter == $epoch)'\n\n")),(0,r.kt)("h3",{id:"show-governance-actions-that-were-proposed-in-the-current-epoch"},"Show governance actions that were proposed in the current epoch:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 \\\n | jq -r --argjson epoch \"$current_epoch\" '.proposals\n | to_entries[]\n | select(.value.proposedIn == $epoch)'\n")),(0,r.kt)("h3",{id:"sort-governance-actions-by-the-number-of-drep-votes"},"Sort governance actions by the number of DRep votes:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | jq -r '\n .proposals\n | to_entries[]\n | {govActionId: .value.actionId, type: .value.proposalProcedure.govAction.tag, drepVoteCount: (.value.dRepVotes | keys | length)}\n ' | jq -s 'sort_by(.voteCount) | reverse[]'\n\n")),(0,r.kt)("h3",{id:"sort-by-the-number-of-spo-votes"},"Sort by the number of SPO votes:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | jq -r '\n .proposals\n | to_entries[]\n | {govActionId: .value.actionId, type: .value.proposalProcedure.govAction.tag, spoVoteCount: (.value.stakePoolVotes | keys | length)}\n ' | jq -s 'sort_by(.voteCount) | reverse[]'\n")),(0,r.kt)("h3",{id:"sort-by-the-number-of-cc-votes"},"Sort by the number of CC votes:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | jq -r '\n .proposals\n | to_entries[]\n | {govActionId: .value.actionId, type: .value.proposalProcedure.govAction.tag, ccVoteCount: (.value.committeeVotes | keys | length)}\n ' | jq -s 'sort_by(.voteCount) | reverse[]'\n")),(0,r.kt)("h3",{id:"filter-actions-that-expire-within-the-current-and-the-next-two-epochs-including-information-about-all-roles-votes-sorted-by-expiration-epoch"},"Filter actions that expire within the current and the next two epochs, including information about all roles' votes, sorted by expiration epoch:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | jq -r --argjson current_epoch \"$current_epoch\" '\n .proposals\n | to_entries[]\n | select(.value.expiresAfter >= ($current_epoch | tonumber) and .value.expiresAfter <= ($current_epoch + 2))\n | {\n govActionId: .value.actionId,\n type: .value.proposalProcedure.govAction.tag,\n expiresAfter: .value.expiresAfter,\n committeeVotesCount: (.value.committeeVotes | length),\n dRepVotesCount: (.value.dRepVotes | length),\n stakePoolVotesCount: (.value.stakePoolVotes | length)\n }\n ' | jq -s 'sort_by(.expiresAfter)'\n\n")),(0,r.kt)("h3",{id:"show-actions-for-which-a-specific-drep-key-has-voted-indicating-the-dreps-vote-and-the-total-number-of-votes-received-for-this-action"},"Show actions for which a specific DRep key has voted, indicating the DRep's vote and the total number of votes received for this action:"),(0,r.kt)("p",null,"Replace ",(0,r.kt)("inlineCode",{parentName:"p"},"keyHash-0e7d17c8a917eaee361924d6471331128b3e0de5323f54d70dd0c8c9")," with the hex DRep ID of your interest, if it is a script based DRRep, make sure\nto use ",(0,r.kt)("inlineCode",{parentName:"p"},"scriptHash")," instead of ",(0,r.kt)("inlineCode",{parentName:"p"},"keyHash")," prefix."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg dRepKey \"keyHash-0e7d17c8a917eaee361924d6471331128b3e0de5323f54d70dd0c8c9\" '\n .proposals\n | to_entries[]\n | select(.value.dRepVotes[$dRepKey] != null)\n | {\n govActionId: .value.actionId,\n type: .value.proposalProcedure.govAction.tag,\n dRepVote: .value.dRepVotes[$dRepKey],\n expiresAfter: .value.expiresAfter,\n committeeVotesCount: (.value.committeeVotes | length),\n dRepVotesCount: (.value.dRepVotes | length),\n stakePoolVotesCount: (.value.stakePoolVotes | length)\n }\n '\n")),(0,r.kt)("h3",{id:"show-actions-where-the-given-drep-key-has-not-voted-yet"},"Show actions where the given DRep key has not voted yet:"),(0,r.kt)("p",null,"Replace ",(0,r.kt)("inlineCode",{parentName:"p"},"058b60ead63f667c0ff5b40e269dd1f05ce3a804256735ad4eddce20")," with the hex DRep ID of your interest."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg dRepKey \"keyHash-0e7d17c8a917eaee361924d6471331128b3e0de5323f54d70dd0c8c9\" '\n .proposals\n | to_entries[]\n | select(.value.dRepVotes[$dRepKey] == null)\n | {\n govActionId: .value.actionId,\n type: .value.proposalProcedure.govAction.tag,\n expiresAfter: .value.expiresAfter,\n committeeVotesCount: (.value.committeeVotes | length),\n dRepVotesCount: (.value.dRepVotes | length),\n stakePoolVotesCount: (.value.stakePoolVotes | length)\n }\n '\n")),(0,r.kt)("h3",{id:"show-the-total-number-of-yes-no-and-abstain-votes-for-a-given-governance-action-id"},"Show the total number of 'yes', 'no', and 'abstain' votes for a given governance action ID:"),(0,r.kt)("p",null,'Replace "1e08794a48b71ec7e48d3190c7c30455f9538d0e54f4087915ff201167334bc7" and "0" and with the governance action ID and index of your interest.'),(0,r.kt)("p",null,"and .value.actionId.govActionIx == $actionIndex"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'cardano-cli conway query gov-state --testnet-magic 4 \\\n | jq -r --arg actionTxId "1e08794a48b71ec7e48d3190c7c30455f9538d0e54f4087915ff201167334bc7" --arg actionIndex "0" \' .proposals\n | to_entries[]\n | select(.value.actionId.txId == $actionTxId and .value.actionId.govActionIx == ($actionIndex | tonumber))\n | {\n govActionId: .value.actionId,\n dRepVoteYesCount: (.value.dRepVotes | with_entries(select(.value == "VoteYes")) | length),\n dRepVoteNoCount: (.value.dRepVotes | with_entries(select(.value == "VoteNo")) | length),\n dRepAbstainCount: (.value.dRepVotes | with_entries(select(.value == "Abstain")) | length),\n stakePoolVoteYesCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteYes")) | length),\n stakePoolVoteNoCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteNo")) | length),\n stakePoolAbstainCount: (.value.stakePoolVotes | with_entries(select(.value == "Abstain")) | length),\n committeeVoteYesCount: (.value.committeeVotes | with_entries(select(.value == "VoteYes")) | length),\n committeeVoteNoCount: (.value.committeeVotes | with_entries(select(.value == "VoteNo")) | length),\n committeeAbstainCount: (.value.committeeVotes | with_entries(select(.value == "Abstain")) | length)\n }\n\'\n')),(0,r.kt)("h3",{id:"show-the-active-treasury-withdrawal-governance-actions-and-their-current-vote-count"},"Show the active ",(0,r.kt)("inlineCode",{parentName:"h3"},"treasury withdrawal")," governance actions and their current vote count:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)\n\ncardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg currentEpoch "$current_epoch" \'\n .proposals\n | to_entries[]\n | select(.value.expiresAfter > ($currentEpoch | tonumber) and .value.proposalProcedure.govAction.tag == "TreasuryWithdrawals")\n | { type: .value.proposalProcedure.govAction.tag, \n govActionId: .value.actionId,\n expiresAfter: .value.expiresAfter,\n dRepVoteYesCount: (.value.dRepVotes | with_entries(select(.value == "VoteYes")) | length),\n dRepVoteNoCount: (.value.dRepVotes | with_entries(select(.value == "VoteNo")) | length),\n dRepAbstainCount: (.value.dRepVotes | with_entries(select(.value == "Abstain")) | length),\n committeeVoteYesCount: (.value.committeeVotes | with_entries(select(.value == "VoteYes")) | length),\n committeeVoteNoCount: (.value.committeeVotes | with_entries(select(.value == "VoteNo")) | length),\n committeeAbstainCount: (.value.committeeVotes | with_entries(select(.value == "Abstain")) | length)\n }\n\' | jq -s \'sort_by(.expiresAfter)\'\n\n')),(0,r.kt)("h3",{id:"show-the-active-update-committee-governance-actions-and-their-current-vote-count"},"Show the active ",(0,r.kt)("inlineCode",{parentName:"h3"},"update committee")," governance actions and their current vote count:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)\n\ncardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg currentEpoch "$current_epoch" \'\n .proposals\n | to_entries[]\n | select(.value.expiresAfter > ($currentEpoch | tonumber) and.value.proposalProcedure.govAction.tag == "UpdateCommittee")\n | { type: .value.proposalProcedure.govAction.tag,\n govActionId: .value.actionId,\n expiresAfter: .value.expiresAfter,\n dRepVoteYesCount: (.value.dRepVotes | with_entries(select(.value == "VoteYes")) | length),\n dRepVoteNoCount: (.value.dRepVotes | with_entries(select(.value == "VoteNo")) | length),\n dRepAbstainCount: (.value.dRepVotes | with_entries(select(.value == "Abstain")) | length),\n stakePoolVoteYesCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteYes")) | length),\n stakePoolVoteNoCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteNo")) | length),\n stakePoolAbstainCount: (.value.stakePoolVotes | with_entries(select(.value == "Abstain")) | length)\n }\n\' | jq -s \'sort_by(.expiresAfter)\'\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/eeefc164.362560bf.js b/assets/js/eeefc164.a3383c2d.js similarity index 99% rename from assets/js/eeefc164.362560bf.js rename to assets/js/eeefc164.a3383c2d.js index 8f0caea6..b138825f 100644 --- a/assets/js/eeefc164.362560bf.js +++ b/assets/js/eeefc164.a3383c2d.js @@ -1 +1 @@ -"use strict";(self.webpackChunksanchonet=self.webpackChunksanchonet||[]).push([[787],{3905:(e,t,n)=>{n.d(t,{Zo:()=>f,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),s=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},f=function(e){var t=s(e.components);return a.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,f=c(e,["components","mdxType","originalType","parentName"]),d=s(n),p=o,h=d["".concat(l,".").concat(p)]||d[p]||u[p]||r;return n?a.createElement(h,i(i({ref:t},f),{},{components:n})):a.createElement(h,i({ref:t},f))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=p;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[d]="string"==typeof e?e:o,i[1]=c;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>s});var a=n(7462),o=(n(7294),n(3905));const r={sidebar_label:"Voting on actions",title:"Voting on governance actions",sidebar_position:10,slug:"/tutorials/vote-action"},i=void 0,c={unversionedId:"tutorials/vote-actions",id:"tutorials/vote-actions",title:"Voting on governance actions",description:"Pre-requisites",source:"@site/docs/tutorials/vote-actions.mdx",sourceDirName:"tutorials",slug:"/tutorials/vote-action",permalink:"/tutorials/vote-action",draft:!1,editUrl:"https://github.com/input-output-hk/sanchonet/tree/master/docs/tutorials/vote-actions.mdx",tags:[],version:"current",sidebarPosition:10,frontMatter:{sidebar_label:"Voting on actions",title:"Voting on governance actions",sidebar_position:10,slug:"/tutorials/vote-action"},sidebar:"docsSidebar",previous:{title:"Create governance actions",permalink:"/tutorials/actions"},next:{title:"Voting as Multisignature DRep",permalink:"/tutorials/vote-multisig-drep"}},l={},s=[{value:"Pre-requisites",id:"pre-requisites",level:3},{value:"Verify the content of the governance action",id:"verify-the-content-of-the-governance-action",level:3},{value:"Create the vote file",id:"create-the-vote-file",level:3},{value:"Include the vote in a transaction",id:"include-the-vote-in-a-transaction",level:3}],f={toc:s},d="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h3",{id:"pre-requisites"},"Pre-requisites"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Payment key pair"),(0,o.kt)("li",{parentName:"ul"},"Address with funds"),(0,o.kt)("li",{parentName:"ul"},"CC hot, DRep OR stake pool keys"),(0,o.kt)("li",{parentName:"ul"},"A SanchoNet node")),(0,o.kt)("p",null,"To vote on governance actions, follow this process:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Obtain the action ID of an ongoing governance action from Discord or query the governance state."),(0,o.kt)("li",{parentName:"ol"},"Determine your voting stance; engage in discussion if required"),(0,o.kt)("li",{parentName:"ol"},"Construct your vote file through the Cardano CLI. The example below demonstrates voting ",(0,o.kt)("inlineCode",{parentName:"li"},"--yes"),", although options for ",(0,o.kt)("inlineCode",{parentName:"li"},"--no")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"--abstain")," are also available.")),(0,o.kt)("h3",{id:"verify-the-content-of-the-governance-action"},"Verify the content of the governance action"),(0,o.kt)("p",null,"Assume that we have been given the action ID ",(0,o.kt)("inlineCode",{parentName:"p"},"df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79#0")," for a new constitution proposal."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Obtain the URL and hash of the new constitution proposal from the governance state:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | \\\njq -r --arg govActionId \"df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79\" '.proposals | to_entries[] | select(.value.actionId.txId | contains($govActionId)) | .value'\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'{\n "action": {\n "contents": [\n null,\n {\n "anchor": {\n "dataHash": "5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d",\n "url": "https://tinyurl.com/mr3ferf9"\n }\n }\n ],\n "tag": "NewConstitution"\n },\n "actionId": {\n "govActionIx": 0,\n "txId": "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79"\n },\n "committeeVotes": {\n "keyHash-c8ac605b25d6084c2ceb28043c8f01b62629966d038a249c7847d66d": "VoteYes",\n "keyHash-d13507f7e7fb8ac3ce2094187c9d99d4601021e9ef5a5f310567765d": "VoteYes"\n },\n "dRepVotes": {\n "keyHash-16faaf6daa2635bbf53bbbaf38b3a6040adf7ced2f7f08952592cf5b": "VoteYes",\n "keyHash-57cb90cfb635e76af648abf1b6a91519218a5919b3cba2527e3725d1": "VoteYes",\n "keyHash-7d84808d563f0f258ad7e4337c2c4bd13010930ebdf7b86c3bfd9ef8": "VoteYes"\n },\n "deposit": 0,\n "expiresAfter": 80,\n "proposedIn": 78,\n "returnAddr": {\n "credential": {\n "keyHash": "f925cbd4eb78aad49ec7bf9b4ddfa4cc4486c967e392699d143c81aa"\n },\n "network": "Testnet"\n },\n "stakePoolVotes": {}\n}\n')),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"Download the file from the URL registered on the ledger state:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"wget https://tinyurl.com/mr3ferf9 -O constitution.txt\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Verify that the hash of the file matches the ",(0,o.kt)("inlineCode",{parentName:"li"},"dataHash"),"from the ledger state:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"b2sum -l 256 constitution.txt\n5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d constitution.txt\n")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Everything is in order; the text at the URL matches the dataHash, confirming that the text at the URL is precisely what we are voting for.")),(0,o.kt)("p",null,"In the future, voting apps, explorers, wallets, and other tools could perform the filtering, ensuring that they only display actions whose URL content has been verified against the hash on the ledger state."),(0,o.kt)("h3",{id:"create-the-vote-file"},"Create the vote file"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Vote with DRep keys:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'cardano-cli conway governance vote create \\\n --yes \\\n --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \\\n --governance-action-index "0" \\\n --drep-verification-key-file drep.vkey \\\n --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote\n')),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"Vote with CC hot keys:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'cardano-cli conway governance vote create \\\n --yes \\\n --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \\\n --governance-action-index "0" \\\n --cc-hot-verification-key-file cc-hot.vkey \\\n --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote\n')),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Vote with SPO keys:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'cardano-cli conway governance vote create \\\n --yes \\\n --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \\\n --governance-action-index "0" \\\n --cold-verification-key-file cold.vkey \\\n --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote\n')),(0,o.kt)("h3",{id:"include-the-vote-in-a-transaction"},"Include the vote in a transaction"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Build the transaction:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"cardano-cli conway transaction build --testnet-magic 4 \\\n --tx-in \"$(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]')\" \\\n --change-address $(cat payment.addr) \\\n --vote-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote \\\n --witness-override 2 \\\n --out-file vote-tx.raw\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Sign it with the DRep key:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"cardano-cli transaction sign --tx-body-file vote-tx.raw \\\n --signing-key-file drep.skey \\\n --signing-key-file payment.skey \\\n --testnet-magic 4 \\\n --out-file vote-tx.signed\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"OR sign it with the CC hot key:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"cardano-cli transaction sign --tx-body-file vote-tx.raw \\\n --signing-key-file cc-hot.skey \\\n --signing-key-file payment.skey \\\n --testnet-magic 4 \\\n --out-file vote-tx.signed\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"OR sign it with the SPO cold key:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"cardano-cli transaction sign --tx-body-file vote-tx.raw \\\n --signing-key-file cold.skey \\\n --signing-key-file payment.skey \\\n --testnet-magic 4 \\\n --out-file vote-tx.signed\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Submit the transaction:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"cardano-cli transaction submit --testnet-magic 4 --tx-file vote-tx.signed\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksanchonet=self.webpackChunksanchonet||[]).push([[787],{3905:(e,t,n)=>{n.d(t,{Zo:()=>f,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),s=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},f=function(e){var t=s(e.components);return a.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,f=c(e,["components","mdxType","originalType","parentName"]),d=s(n),p=o,h=d["".concat(l,".").concat(p)]||d[p]||u[p]||r;return n?a.createElement(h,i(i({ref:t},f),{},{components:n})):a.createElement(h,i({ref:t},f))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=p;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[d]="string"==typeof e?e:o,i[1]=c;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>s});var a=n(7462),o=(n(7294),n(3905));const r={sidebar_label:"Voting on actions",title:"Voting on governance actions",sidebar_position:10,slug:"/tutorials/vote-action"},i=void 0,c={unversionedId:"tutorials/vote-actions",id:"tutorials/vote-actions",title:"Voting on governance actions",description:"Pre-requisites",source:"@site/docs/tutorials/vote-actions.mdx",sourceDirName:"tutorials",slug:"/tutorials/vote-action",permalink:"/tutorials/vote-action",draft:!1,editUrl:"https://github.com/input-output-hk/sanchonet/tree/master/docs/tutorials/vote-actions.mdx",tags:[],version:"current",sidebarPosition:10,frontMatter:{sidebar_label:"Voting on actions",title:"Voting on governance actions",sidebar_position:10,slug:"/tutorials/vote-action"},sidebar:"docsSidebar",previous:{title:"Create governance actions",permalink:"/tutorials/actions"},next:{title:"Voting as multisignature DRep",permalink:"/tutorials/vote-multisig-drep"}},l={},s=[{value:"Pre-requisites",id:"pre-requisites",level:3},{value:"Verify the content of the governance action",id:"verify-the-content-of-the-governance-action",level:3},{value:"Create the vote file",id:"create-the-vote-file",level:3},{value:"Include the vote in a transaction",id:"include-the-vote-in-a-transaction",level:3}],f={toc:s},d="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,a.Z)({},f,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h3",{id:"pre-requisites"},"Pre-requisites"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Payment key pair"),(0,o.kt)("li",{parentName:"ul"},"Address with funds"),(0,o.kt)("li",{parentName:"ul"},"CC hot, DRep OR stake pool keys"),(0,o.kt)("li",{parentName:"ul"},"A SanchoNet node")),(0,o.kt)("p",null,"To vote on governance actions, follow this process:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Obtain the action ID of an ongoing governance action from Discord or query the governance state."),(0,o.kt)("li",{parentName:"ol"},"Determine your voting stance; engage in discussion if required"),(0,o.kt)("li",{parentName:"ol"},"Construct your vote file through the Cardano CLI. The example below demonstrates voting ",(0,o.kt)("inlineCode",{parentName:"li"},"--yes"),", although options for ",(0,o.kt)("inlineCode",{parentName:"li"},"--no")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"--abstain")," are also available.")),(0,o.kt)("h3",{id:"verify-the-content-of-the-governance-action"},"Verify the content of the governance action"),(0,o.kt)("p",null,"Assume that we have been given the action ID ",(0,o.kt)("inlineCode",{parentName:"p"},"df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79#0")," for a new constitution proposal."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Obtain the URL and hash of the new constitution proposal from the governance state:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"cardano-cli conway query gov-state --testnet-magic 4 | \\\njq -r --arg govActionId \"df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79\" '.proposals | to_entries[] | select(.value.actionId.txId | contains($govActionId)) | .value'\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'{\n "action": {\n "contents": [\n null,\n {\n "anchor": {\n "dataHash": "5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d",\n "url": "https://tinyurl.com/mr3ferf9"\n }\n }\n ],\n "tag": "NewConstitution"\n },\n "actionId": {\n "govActionIx": 0,\n "txId": "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79"\n },\n "committeeVotes": {\n "keyHash-c8ac605b25d6084c2ceb28043c8f01b62629966d038a249c7847d66d": "VoteYes",\n "keyHash-d13507f7e7fb8ac3ce2094187c9d99d4601021e9ef5a5f310567765d": "VoteYes"\n },\n "dRepVotes": {\n "keyHash-16faaf6daa2635bbf53bbbaf38b3a6040adf7ced2f7f08952592cf5b": "VoteYes",\n "keyHash-57cb90cfb635e76af648abf1b6a91519218a5919b3cba2527e3725d1": "VoteYes",\n "keyHash-7d84808d563f0f258ad7e4337c2c4bd13010930ebdf7b86c3bfd9ef8": "VoteYes"\n },\n "deposit": 0,\n "expiresAfter": 80,\n "proposedIn": 78,\n "returnAddr": {\n "credential": {\n "keyHash": "f925cbd4eb78aad49ec7bf9b4ddfa4cc4486c967e392699d143c81aa"\n },\n "network": "Testnet"\n },\n "stakePoolVotes": {}\n}\n')),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"Download the file from the URL registered on the ledger state:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"wget https://tinyurl.com/mr3ferf9 -O constitution.txt\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Verify that the hash of the file matches the ",(0,o.kt)("inlineCode",{parentName:"li"},"dataHash"),"from the ledger state:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"b2sum -l 256 constitution.txt\n5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d constitution.txt\n")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Everything is in order; the text at the URL matches the dataHash, confirming that the text at the URL is precisely what we are voting for.")),(0,o.kt)("p",null,"In the future, voting apps, explorers, wallets, and other tools could perform the filtering, ensuring that they only display actions whose URL content has been verified against the hash on the ledger state."),(0,o.kt)("h3",{id:"create-the-vote-file"},"Create the vote file"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Vote with DRep keys:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'cardano-cli conway governance vote create \\\n --yes \\\n --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \\\n --governance-action-index "0" \\\n --drep-verification-key-file drep.vkey \\\n --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote\n')),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"Vote with CC hot keys:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'cardano-cli conway governance vote create \\\n --yes \\\n --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \\\n --governance-action-index "0" \\\n --cc-hot-verification-key-file cc-hot.vkey \\\n --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote\n')),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Vote with SPO keys:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'cardano-cli conway governance vote create \\\n --yes \\\n --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \\\n --governance-action-index "0" \\\n --cold-verification-key-file cold.vkey \\\n --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote\n')),(0,o.kt)("h3",{id:"include-the-vote-in-a-transaction"},"Include the vote in a transaction"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Build the transaction:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"cardano-cli conway transaction build --testnet-magic 4 \\\n --tx-in \"$(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]')\" \\\n --change-address $(cat payment.addr) \\\n --vote-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote \\\n --witness-override 2 \\\n --out-file vote-tx.raw\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Sign it with the DRep key:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"cardano-cli transaction sign --tx-body-file vote-tx.raw \\\n --signing-key-file drep.skey \\\n --signing-key-file payment.skey \\\n --testnet-magic 4 \\\n --out-file vote-tx.signed\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"OR sign it with the CC hot key:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"cardano-cli transaction sign --tx-body-file vote-tx.raw \\\n --signing-key-file cc-hot.skey \\\n --signing-key-file payment.skey \\\n --testnet-magic 4 \\\n --out-file vote-tx.signed\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"OR sign it with the SPO cold key:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"cardano-cli transaction sign --tx-body-file vote-tx.raw \\\n --signing-key-file cold.skey \\\n --signing-key-file payment.skey \\\n --testnet-magic 4 \\\n --out-file vote-tx.signed\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Submit the transaction:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"cardano-cli transaction submit --testnet-magic 4 --tx-file vote-tx.signed\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.ab14bb7e.js b/assets/js/runtime~main.c62ccaf7.js similarity index 63% rename from assets/js/runtime~main.ab14bb7e.js rename to assets/js/runtime~main.c62ccaf7.js index 26130b83..95e103dc 100644 --- a/assets/js/runtime~main.ab14bb7e.js +++ b/assets/js/runtime~main.c62ccaf7.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,t,r,f,c={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var t=d[e]={exports:{}};return c[e].call(t.exports,t,t.exports,b),t.exports}b.m=c,e=[],b.O=(a,t,r,f)=>{if(!t){var c=1/0;for(i=0;i=f)&&Object.keys(b.O).every((e=>b.O[e](t[o])))?t.splice(o--,1):(d=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[t,r,f]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var f=Object.create(null);b.r(f);var c={};a=a||[null,t({}),t([]),t(t)];for(var d=2&r&&e;"object"==typeof d&&!~a.indexOf(d);d=t(d))Object.getOwnPropertyNames(d).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,b.d(f,c),f},b.d=(e,a)=>{for(var t in a)b.o(a,t)&&!b.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,t)=>(b.f[t](e,a),a)),[])),b.u=e=>"assets/js/"+({53:"935f2afb",86:"49ac7784",787:"eeefc164",1002:"5449755a",1032:"5886ee98",1263:"08d3f7f3",1416:"bbada698",1447:"d0d6894e",1665:"7b180da0",1818:"5a0482dd",2398:"86c5ba96",3085:"1f391b9e",3152:"abd7a278",3237:"1df93b7f",3255:"1521a28c",3462:"b0064c08",3513:"43b2bb3c",3584:"11bb5b53",3705:"038ebd0e",3900:"d27e288b",3945:"368b6ce8",5548:"09b98730",5552:"aaae1da2",6169:"6c8bebe0",6589:"6fddf1e9",7133:"d2fa3de5",7161:"98e22efe",7173:"3838c1a1",7356:"27cf304e",7661:"069f00c3",7750:"bbe4f477",7918:"17896441",8113:"98762162",8260:"4c4f17cf",8464:"a18a7492",8512:"354cfeef",8584:"cb4ed82a",8595:"36246993",8780:"6d06420b",8913:"59f459cf",8958:"1fdfc5da",9242:"04a456b0",9411:"846aba67",9514:"1be78505",9702:"ce2e39ce",9722:"0852ae7f",9895:"c9f32de9"}[e]||e)+"."+{53:"5d624dcc",86:"58074137",787:"362560bf",814:"d565f12f",1002:"0cff125d",1032:"9285bfeb",1263:"cca63212",1416:"7879c6a7",1447:"5c7b4c9f",1665:"4f28c8cb",1818:"59176e11",2398:"1da8bb5b",3085:"4d8b27b7",3152:"3c1dead2",3237:"17b3f3ed",3255:"176f5e66",3462:"602632d2",3473:"8e63b3c2",3513:"164f4d48",3584:"0aad058b",3705:"b0d4b2bd",3900:"8e0fbc63",3945:"763a6ebb",3987:"613c2d28",4044:"d0540945",4972:"89c2297b",5548:"17ea181e",5552:"d995a92a",6169:"43a6ee8c",6589:"fdef056a",7133:"64da567f",7161:"85042b63",7173:"754c5ef4",7356:"c2a37a72",7661:"f8c8a83a",7750:"4c4cdf35",7918:"e2e4dd0a",8113:"b1ee709e",8260:"3d9303ef",8464:"443548ef",8512:"b18056a8",8584:"5885c64c",8595:"908aa892",8780:"8b0dc2d6",8913:"beb44d9f",8958:"e5fe4e92",9242:"07e4fa74",9411:"c6a1af20",9514:"53ec33ec",9702:"402f9ea2",9722:"44f85b94",9895:"9b9ecb4c"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},f="sanchonet:",b.l=(e,a,t,c)=>{if(r[e])r[e].push(a);else{var d,o;if(void 0!==t)for(var n=document.getElementsByTagName("script"),i=0;i{d.onerror=d.onload=null,clearTimeout(s);var f=r[e];if(delete r[e],d.parentNode&&d.parentNode.removeChild(d),f&&f.forEach((e=>e(t))),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=l.bind(null,d.onerror),d.onload=l.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={17896441:"7918",36246993:"8595",98762162:"8113","935f2afb":"53","49ac7784":"86",eeefc164:"787","5449755a":"1002","5886ee98":"1032","08d3f7f3":"1263",bbada698:"1416",d0d6894e:"1447","7b180da0":"1665","5a0482dd":"1818","86c5ba96":"2398","1f391b9e":"3085",abd7a278:"3152","1df93b7f":"3237","1521a28c":"3255",b0064c08:"3462","43b2bb3c":"3513","11bb5b53":"3584","038ebd0e":"3705",d27e288b:"3900","368b6ce8":"3945","09b98730":"5548",aaae1da2:"5552","6c8bebe0":"6169","6fddf1e9":"6589",d2fa3de5:"7133","98e22efe":"7161","3838c1a1":"7173","27cf304e":"7356","069f00c3":"7661",bbe4f477:"7750","4c4f17cf":"8260",a18a7492:"8464","354cfeef":"8512",cb4ed82a:"8584","6d06420b":"8780","59f459cf":"8913","1fdfc5da":"8958","04a456b0":"9242","846aba67":"9411","1be78505":"9514",ce2e39ce:"9702","0852ae7f":"9722",c9f32de9:"9895"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(a,t)=>{var r=b.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((t,f)=>r=e[a]=[t,f]));t.push(r[2]=f);var c=b.p+b.u(a),d=new Error;b.l(c,(t=>{if(b.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var f=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;d.message="Loading chunk "+a+" failed.\n("+f+": "+c+")",d.name="ChunkLoadError",d.type=f,d.request=c,r[1](d)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,t)=>{var r,f,c=t[0],d=t[1],o=t[2],n=0;if(c.some((a=>0!==e[a]))){for(r in d)b.o(d,r)&&(b.m[r]=d[r]);if(o)var i=o(b)}for(a&&a(t);n{"use strict";var e,a,t,f,r,c={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var t=d[e]={exports:{}};return c[e].call(t.exports,t,t.exports,b),t.exports}b.m=c,e=[],b.O=(a,t,f,r)=>{if(!t){var c=1/0;for(i=0;i=r)&&Object.keys(b.O).every((e=>b.O[e](t[o])))?t.splice(o--,1):(d=!1,r0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[t,f,r]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var r=Object.create(null);b.r(r);var c={};a=a||[null,t({}),t([]),t(t)];for(var d=2&f&&e;"object"==typeof d&&!~a.indexOf(d);d=t(d))Object.getOwnPropertyNames(d).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,b.d(r,c),r},b.d=(e,a)=>{for(var t in a)b.o(a,t)&&!b.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,t)=>(b.f[t](e,a),a)),[])),b.u=e=>"assets/js/"+({53:"935f2afb",86:"49ac7784",787:"eeefc164",1002:"5449755a",1032:"5886ee98",1263:"08d3f7f3",1416:"bbada698",1447:"d0d6894e",1665:"7b180da0",1818:"5a0482dd",2398:"86c5ba96",3085:"1f391b9e",3152:"abd7a278",3237:"1df93b7f",3255:"1521a28c",3462:"b0064c08",3513:"43b2bb3c",3584:"11bb5b53",3705:"038ebd0e",3900:"d27e288b",3945:"368b6ce8",5548:"09b98730",5552:"aaae1da2",6169:"6c8bebe0",6589:"6fddf1e9",7133:"d2fa3de5",7161:"98e22efe",7173:"3838c1a1",7356:"27cf304e",7661:"069f00c3",7750:"bbe4f477",7918:"17896441",8113:"98762162",8260:"4c4f17cf",8464:"a18a7492",8512:"354cfeef",8584:"cb4ed82a",8595:"36246993",8780:"6d06420b",8913:"59f459cf",8958:"1fdfc5da",9242:"04a456b0",9411:"846aba67",9514:"1be78505",9702:"ce2e39ce",9722:"0852ae7f",9895:"c9f32de9"}[e]||e)+"."+{53:"4af6ff2f",86:"58074137",787:"a3383c2d",814:"d565f12f",1002:"0cff125d",1032:"9285bfeb",1263:"cca63212",1416:"7879c6a7",1447:"5c7b4c9f",1665:"4f28c8cb",1818:"59176e11",2398:"1da8bb5b",3085:"4d8b27b7",3152:"05ecb479",3237:"17b3f3ed",3255:"176f5e66",3462:"602632d2",3473:"8e63b3c2",3513:"164f4d48",3584:"50f3624c",3705:"b0d4b2bd",3900:"8e0fbc63",3945:"763a6ebb",3987:"613c2d28",4044:"d0540945",4972:"89c2297b",5548:"17ea181e",5552:"d995a92a",6169:"43a6ee8c",6589:"fdef056a",7133:"64da567f",7161:"85042b63",7173:"754c5ef4",7356:"c2a37a72",7661:"f8c8a83a",7750:"4c4cdf35",7918:"e2e4dd0a",8113:"b1ee709e",8260:"3d9303ef",8464:"443548ef",8512:"b18056a8",8584:"5885c64c",8595:"908aa892",8780:"8b0dc2d6",8913:"beb44d9f",8958:"e5fe4e92",9242:"07e4fa74",9411:"c6a1af20",9514:"53ec33ec",9702:"402f9ea2",9722:"44f85b94",9895:"9b9ecb4c"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},r="sanchonet:",b.l=(e,a,t,c)=>{if(f[e])f[e].push(a);else{var d,o;if(void 0!==t)for(var n=document.getElementsByTagName("script"),i=0;i{d.onerror=d.onload=null,clearTimeout(s);var r=f[e];if(delete f[e],d.parentNode&&d.parentNode.removeChild(d),r&&r.forEach((e=>e(t))),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=l.bind(null,d.onerror),d.onload=l.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={17896441:"7918",36246993:"8595",98762162:"8113","935f2afb":"53","49ac7784":"86",eeefc164:"787","5449755a":"1002","5886ee98":"1032","08d3f7f3":"1263",bbada698:"1416",d0d6894e:"1447","7b180da0":"1665","5a0482dd":"1818","86c5ba96":"2398","1f391b9e":"3085",abd7a278:"3152","1df93b7f":"3237","1521a28c":"3255",b0064c08:"3462","43b2bb3c":"3513","11bb5b53":"3584","038ebd0e":"3705",d27e288b:"3900","368b6ce8":"3945","09b98730":"5548",aaae1da2:"5552","6c8bebe0":"6169","6fddf1e9":"6589",d2fa3de5:"7133","98e22efe":"7161","3838c1a1":"7173","27cf304e":"7356","069f00c3":"7661",bbe4f477:"7750","4c4f17cf":"8260",a18a7492:"8464","354cfeef":"8512",cb4ed82a:"8584","6d06420b":"8780","59f459cf":"8913","1fdfc5da":"8958","04a456b0":"9242","846aba67":"9411","1be78505":"9514",ce2e39ce:"9702","0852ae7f":"9722",c9f32de9:"9895"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(a,t)=>{var f=b.o(e,a)?e[a]:void 0;if(0!==f)if(f)t.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var r=new Promise(((t,r)=>f=e[a]=[t,r]));t.push(f[2]=r);var c=b.p+b.u(a),d=new Error;b.l(c,(t=>{if(b.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;d.message="Loading chunk "+a+" failed.\n("+r+": "+c+")",d.name="ChunkLoadError",d.type=r,d.request=c,f[1](d)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,t)=>{var f,r,c=t[0],d=t[1],o=t[2],n=0;if(c.some((a=>0!==e[a]))){for(f in d)b.o(d,f)&&(b.m[f]=d[f]);if(o)var i=o(b)}for(a&&a(t);n Disclaimer | SanchoNet - + @@ -20,7 +20,7 @@ You are responsible for compliance with U.S. and local country export/import laws and regulations.

The software may not be exported/reexported, either directly or indirectly, to any destination subject to U.S. embargoes or trade sanctions unless formally authorized by the U.S. Government. The embargoed destinations are subject to change and the scope of what is included in the embargo is specific to each embargoed country. For the most current information on U.S. embargoed and sanctioned countries, see the Treasury Department regulations.

- + \ No newline at end of file diff --git a/drep-pioneer-program/drep-pp/lesson-plan/index.html b/drep-pioneer-program/drep-pp/lesson-plan/index.html index f911fdc1..34e41b4f 100644 --- a/drep-pioneer-program/drep-pp/lesson-plan/index.html +++ b/drep-pioneer-program/drep-pp/lesson-plan/index.html @@ -4,13 +4,13 @@ DRep Pioneer Program Lesson Plan | SanchoNet - +

DRep Pioneer Program Lesson Plan

Proposed Schedule

This lesson contains 12 activities covering all the DRep program content. In addition to these activities, instructors should consider breaks throughout the day according to the local culture and manners, such as lunchtime and refreshments that can be offered in the training session.

The following table shows a proposed schedule for a typical training session, with lunchtime around 1:00 p.m. Feel free to adapt the schedule and activity timing accordingly to your audience and local culture.

Lesson Plan Activities

- + \ No newline at end of file diff --git a/drep-pioneer-program/drep-pp/lp-wrapup.mdx/index.html b/drep-pioneer-program/drep-pp/lp-wrapup.mdx/index.html index 8f4e2980..b5c45d0d 100644 --- a/drep-pioneer-program/drep-pp/lp-wrapup.mdx/index.html +++ b/drep-pioneer-program/drep-pp/lp-wrapup.mdx/index.html @@ -4,13 +4,13 @@ DRep Pioneer Program Lesson Plan | SanchoNet - +

DRep Pioneer Program Lesson Plan

Closing Activity and Wrap Up

Activity 12: Conclusions and Further Steps (20 min)

This final activity aims to allow participants to reflect on their learning and consolidate key takeaways from the training day.

You can follow the next steps to conduct a final wrap-up activity:

  1. Recap the main topics covered throughout the training day, highlighting key concepts and insights related to Cardano Governance design, Governance Roles, and the process of becoming a DRep.
  2. Divide participants into small groups, ensuring a mix of individuals with varying familiarity with the subject matter.
  3. Distribute sticky notes and markers to each group. Use breakout rooms and a shared board with notes like Miro, Ideaflip, or Mural in an online training session.
  4. Prompt participants to reflect individually on the following questions:
    • What was the most valuable insight or concept you learned today?
    • How do you plan to apply this knowledge in your role as a DRep or within your organization?
    • Is there any aspect of the training you would like to explore or have additional questions about?
  5. Encourage participants to write their responses on sticky notes (or a shared board in online sessions), capturing each response on a separate note.
  6. Once participants have had time to reflect individually, reconvene as a whole group.
  7. Invite each group to share their reflections by sticking their notes on the whiteboard or flipchart under the corresponding question.
  8. Facilitate a discussion around the shared reflections, allowing participants to elaborate on their responses and engage in dialogue with one another.
  9. Summarize the main themes and insights from the discussion, highlighting any common challenges, opportunities, or areas of interest.

Close the session by expressing appreciation for participants' active participation and contributions throughout the training day. Reinforce the importance of ongoing learning and collaboration in the context of Cardano Governance.

- + \ No newline at end of file diff --git a/drep-pioneer-program/drep-pp/module-1/index.html b/drep-pioneer-program/drep-pp/module-1/index.html index 716888b6..14504959 100644 --- a/drep-pioneer-program/drep-pp/module-1/index.html +++ b/drep-pioneer-program/drep-pp/module-1/index.html @@ -4,13 +4,13 @@ DRep Pioneer Program Lesson Plan | SanchoNet - +

DRep Pioneer Program Lesson Plan

Module 1: Cardano’s Governance and Roles

Activity 4: Cardano’s On-Chain Governance Design (40 min)

In this activity, participants will learn about the on-chain governance design, focusing on how the governance system is described on CIP-1694.

Open the training slides, navigate to the Module 1 section, and highlight the following talking points:

  • During Module 1, you will understand the key aspects of Cardano's on-chain governance design.
  • You will gain deep insight into the expectations and responsibilities of the DRep role and understand the relevance of delegation.

Continue to the “Cardano’s On-Chain Governance Design” section and explain the three pillars of Cardano's governance in the age of Voltaire:

  1. Institutions
  2. Constitutional representation
  3. Democratic consent

At this point, highlight the importance of reading CIP-1694 to understand better the proposed governance system for Cardano, which will allow on-chain decision-making.

Continue with the lesson and introduce the five governance roles:

  1. Delegate Representative (DRep)
  2. Stake Pool Operator (SPO)
  3. Constitutional Committee (CC)
  4. Delegating ada Holders
  5. Non-Delegating ada Holders

Understanding these roles may be challenging. A suggested approach to allowing participants a more profound understanding is to use the “students-produced question” approach. Asking questions is challenging, and participants can do deep thinking and learning by developing questions (Franke et al., 2009). Instead of asking participants questions about the roles to check if they understand them, encourage them to read the definitions and formulate their own questions about each role. This practice engages participants' working and long-term memory (Arnold, 1984).

After presenting the governance roles, briefly describe the processes attained to each role. Point out that the support tools for each role will be explained later.

Finally, explain the overall governance action enactment process. Recall that CIP-1694 describes seven types of governance actions that can be proposed by ada holders and voted by the governance roles with voting rights (DRep, SPO, and CC member).

As a proposed engagement strategy, you can create groups representing each role with voting rights and simulate voting under different scenarios using flashcards or sticky notes to record votes.

Ensure there are no pending questions before moving on to the next activity.

Activity 5: The DRep Role (20 min)

In this activity, participants will review the definition of the DRep role. Jump to “The DRep Role” section in the training slides and discuss the responsibilities and expectations of a DRep. Point out the importance of a DRep as the collective voice of the ada holders that a DRep represents.

To better understand the DRep role, facilitate a discussion between the participants by asking the following questions:

  1. How would you describe the DRep to a newcomer to Cardano?
  2. What are the main challenges a DRep can face?
  3. As a DRep, how would you deal with a conflict of interest when voting on a governance action?

There are no right or wrong answers to these questions; they are intended to foster collaboration between participants. Feel free to add or modify questions at your discretion.

Ensure there are no pending questions before moving on to the next activity.

Activity 6: Understanding Delegation (20 min)

In this activity, participants will learn about the importance of delegation and how it works. Move into the “Understanding Delegation” section on the training slides and start by fostering a critical thinking dialogue between the participants using The Socratic Method.

This method involves a shared dialogue between teacher and students in a classroom setup. The teacher leads by posing thought-provoking questions. Students actively engage by asking questions of their own. The discussion goes back and forth.

You can start the discussion by posing questions, such as:

  • What do you understand as “delegation” in Cardano’s ecosystem context?
  • Are you familiar with delegation outside of Cardano’s ecosystem?

There are no right or wrong answers. The idea is to check participants' pulse around the meaning of delegation to set a baseline before explaining why delegation is important in the context of Cardano’s Governance.

Explain why delegation is necessary and how it is used in several liquid democracy applications.

Next, under the context of delegating voting rights to DReps, check participants' pulse on the following questions:

  • Why not direct voting instead of delegation?
  • Does delegation help?

Figure out scenarios that can illustrate the rationing proposed in the slides.

When the discussion ends, ensure there are no pending questions before moving on to the next activity.

- + \ No newline at end of file diff --git a/drep-pioneer-program/drep-pp/module-2/index.html b/drep-pioneer-program/drep-pp/module-2/index.html index d611f9ac..168777bb 100644 --- a/drep-pioneer-program/drep-pp/module-2/index.html +++ b/drep-pioneer-program/drep-pp/module-2/index.html @@ -4,13 +4,13 @@ DRep Pioneer Program Lesson Plan | SanchoNet - +

DRep Pioneer Program Lesson Plan

Module 2: DRep Code of Conduct

Activity 7: Navigating the Code of Conduct (60 min)

This activity focuses on understanding the DRep’s code of conduct to understand the ethical principles and behavioral expectations outlined in the Code of Conduct for DReps, focusing on guarding against malicious behavior.

For this activity, explain to participants that they will work in groups to analyze and discuss the code of conduct.

Divide participants into small groups of 3-5 members each and provide participants access to the DRep Code of Conduct. In an online session, you can create groups using breakout rooms in Google Meet or Zoom. Also, if you are conducting an in-person session, you can provide paper copies of this document.

Before having the groups discuss the code of conduct, explain the following instructions:

  1. Explain the objective of the activity: to analyze the Code of Conduct and identify fundamental ethical principles and behavioral expectations that guard against malicious behavior from DReps.
  2. Allocate 15 minutes for each group to read the Code of Conduct and discuss its contents. Encourage participants to highlight any sections that they find particularly relevant to prevent malicious behavior.
  3. After the reading period, provide each group with flipchart paper and markers. You can use a shared online document, such as Google Docs, for online sessions.
  4. Instruct groups to visually represent the fundamental ethical principles and behavioral expectations identified in the Code of Conduct. They can use diagrams, charts, or illustrations to depict these concepts.
  5. Encourage groups to discuss and debate their interpretations of the Code of Conduct, considering different perspectives and potential scenarios where ethical principles may be tested.
  6. Allocate 20 minutes for groups to work on their visual representations.
  7. After the allotted time, ask each group to present their visual representation to the rest of the class. Allow time for questions and discussion following each presentation.
  8. Facilitate a whole-group discussion on the insights gained from the activity. Prompt participants to reflect on the importance of ethical behavior in preventing malicious actions by DReps and how the Code of Conduct serves as a guide for upholding these standards.
  9. Conclude the activity by emphasizing the role of DReps in promoting a culture of integrity and accountability.

Thank participants for their engagement and participation in the activity. Before proceeding to the next activity, ensure there are no pending questions.

- + \ No newline at end of file diff --git a/drep-pioneer-program/drep-pp/module-3/index.html b/drep-pioneer-program/drep-pp/module-3/index.html index f6a53c49..25b3cf89 100644 --- a/drep-pioneer-program/drep-pp/module-3/index.html +++ b/drep-pioneer-program/drep-pp/module-3/index.html @@ -4,13 +4,13 @@ DRep Pioneer Program Lesson Plan | SanchoNet - +

DRep Pioneer Program Lesson Plan

Module 3: Reward Schemes for DReps

Activity 8: Reflecting on DReps Compensation (40 min)

This activity focuses on discussing with participants if DReps should be compensated for their collaboration. Compensation for DReps is still an ongoing debate, so having insights from participants will enrich the rationale behind compensation.

Start by presenting the proposed reward schemes to the participants using the training slides that outline the different reward structures, incentives, and criteria for DReps. Ensure that the presentation is clear, concise, and easy to understand.

Divide participants into small groups, ideally consisting of diverse perspectives and backgrounds. Each group should be allowed to discuss the proposed reward schemes amongst themselves. Encourage participants to consider each scheme's potential benefits and drawbacks and any concerns or questions they may have. You can slot 10 to 15 minutes for this discussion.

After the group discussions, reconvene as a whole group for a structured feedback session. Each group can designate a spokesperson to summarize their discussion and present feedback on the proposed reward schemes. Facilitate a discussion where participants can share their insights, ask questions, and provide constructive feedback.

Document the participants' feedback during the session and ensure that it is compiled and shared with relevant stakeholders for consideration. Consider organizing follow-up sessions or opportunities for further discussion to address any outstanding questions or concerns raised by participants.

Thank participants for their engagement and participation in the activity. Before proceeding to the next activity, ensure there are no pending questions.

Activity 9: DRep Reward Schemes (40 min)

This activity focuses on explaining three variants of reward schemes. Similar to the previous activity, present the three variations of reward schemes and divide participants into small discussion groups. You can slot 20 minutes for discussion.

Following the group discussions, gather the entire group for a structured feedback session. Each group should nominate a spokesperson to recap their conversation and offer feedback on the proposed variants for reward schemes. Encourage an open discussion where participants exchange insights, pose inquiries, and provide constructive input.

Record the feedback provided by participants during the session, ensuring it is consolidated and distributed to pertinent stakeholders for review.

Congratulate participants for their active engagement in the activity. Ensure all questions have been addressed comprehensively before transitioning to the next segment.

- + \ No newline at end of file diff --git a/drep-pioneer-program/drep-pp/module-4/index.html b/drep-pioneer-program/drep-pp/module-4/index.html index d3f02bcd..58b2eb67 100644 --- a/drep-pioneer-program/drep-pp/module-4/index.html +++ b/drep-pioneer-program/drep-pp/module-4/index.html @@ -4,13 +4,13 @@ DRep Pioneer Program Lesson Plan | SanchoNet - +

DRep Pioneer Program Lesson Plan

Module 4: Joining the DReps Ecosystem

Activity 10: How to Become a DRep (60 min)

This is a hands-on activity in which participants will learn how to become a DRep through a demonstration.

As an instructor, you will lead participants using the GovTool to follow the required steps to join as a DRep.

The GovTool is currently being updated, so stay tuned for updates on this activity to learn more about conducting the demonstration.

Activity 11: Engaging with the Community as a DRep (15 min)

Communication is crucial to becoming an impactful DRep, so in this activity, participants will learn the available communication channels and tools that DReps can use to engage with the Cardano Community.

In this section, showcase the current channels and tools available:

  • GovTool
  • DRep Campaign Platform
  • Cardano Forum
  • Social Media

Ensure participants understand how to use these resources before continuing to the next activity.

- + \ No newline at end of file diff --git a/drep-pioneer-program/drep-pp/overview/index.html b/drep-pioneer-program/drep-pp/overview/index.html index 4ffe6e03..b0fb2f17 100644 --- a/drep-pioneer-program/drep-pp/overview/index.html +++ b/drep-pioneer-program/drep-pp/overview/index.html @@ -4,7 +4,7 @@ DRep Pioneer Program | SanchoNet - + @@ -14,7 +14,7 @@ participate in the new governance role - DRep.

A major goal of this initiative is to develop a continuous learning program that will support the first cohort of DReps’ to be able to effectively perform their role in Cardano’s proposed governance design.

A further goal of the program is to create materials that can be used ‘standalone’ independent from the training courses, so that a potential DRep can train themselves on what is required in an intuitive and clear way.

- + \ No newline at end of file diff --git a/drep-pioneer-program/drep-pp/prelude-and-intro/index.html b/drep-pioneer-program/drep-pp/prelude-and-intro/index.html index bd5f4ece..be5aa546 100644 --- a/drep-pioneer-program/drep-pp/prelude-and-intro/index.html +++ b/drep-pioneer-program/drep-pp/prelude-and-intro/index.html @@ -4,13 +4,13 @@ DRep Pioneer Program Lesson Plan | SanchoNet - +

DRep Pioneer Program Lesson Plan

Prelude and Introductions

Activity 1: Welcome Participants (15 min)

Welcome participants to the DRep Training; congratulate them for the decision to learn more about the DRep ecosystem and how they can become a DRep to participate in and vote in Cardano’s governance.

Use this time to introduce yourself and share your motivation to become a DRep. If time permits, conduct an ice-breaking activity to allow participants to introduce themselves. You can use the “popcorn” approach, where the last person to participate selects the next teammate to introduce themselves.

Keep introductions plain and straightforward by encouraging participants to answer two or three questions, such as:

  1. What is your name?
  2. How long have you been in the Cardano Community?
  3. Why do you want to become a DRep?

The “popcorn” approach is a double-edged sword; however, it makes the meeting more democratic, with each team member selecting their successor. However, it can also make people feel awkward if they are unfamiliar with one another. If the introductions get stuck, act as a facilitator.

Be sure everyone introduces themselves before moving forward to the next activity.

Activity 2: DRep Training Program Overview (15 min)

Use the session schedule to present an overview of the content you will cover during the day; avoid getting into the details to prevent additional time spent. Use the training slides to present the learning outcomes and encourage participants to ask questions during the session.

Depending on your training type, in-person or online training, explain the session logistics for breaks and any relevant information.

Ask any questions before moving on to the next activity.

Activity 3: Key Terms (15 min)

For this activity, use the glossary in the training slides to present the key terms that participants should acknowledge to understand the forthcoming activities better.

To make this activity more engaging, you can conduct trivia to ask participants if they know the definition of every concept in the glossary. You can use slides or an online tool like Kahoot or TriviaMaker.

Ensure the terms are clear for participants before moving on to the next activity.

- + \ No newline at end of file diff --git a/drep-pioneer-program/drep-pp/requirements/index.html b/drep-pioneer-program/drep-pp/requirements/index.html index 22f0d059..0c84e33e 100644 --- a/drep-pioneer-program/drep-pp/requirements/index.html +++ b/drep-pioneer-program/drep-pp/requirements/index.html @@ -4,13 +4,13 @@ Participation Requirements | SanchoNet - +

Participation Requirements

Participants Requirements

All participants should hold ada to participate as DReps. Participation in this training does not ensure that participants will be accepted as DReps by the Cardano community.

Participants Preliminary Knowledge

To successfully complete this training, participants should:

  • Understand how the Cardano blockchain works.
  • Be familiar with Cardano wallets and how they work.
  • Be able to use the cardano-cli to run simple scripts.

Participants Preparation

To participate in the training, participants should have the following software:

  • A desktop operating system capable of running nix (Linux, Apple macOS, or Microsoft Windows with the Windows Subsystem Linux (WSL) enabled).
  • Any of the following web browsers: Google Chrome, Brave, or Microsoft Edge.
  • The Lace wallet with an active address. Instructions on how to set up a Lace wallet can be found here.

Instructor Requirements

All instructors should have participated in the DRep Pioneers Programs and completed the corresponding training. All instructors are required to join as DReps in the Cardano Governance structure.

Instructor Preparation

This training is designed as a six-hour course that can be offered online or in person. Instructors should consider additional time for breaks and meals.

General Considerations

Regardless of the type of training, online or in person, we encourage you to consider the following:

  • Promote the training session on your social media, write a blog post on your personal or professional website, or contribute to Essential Cardano; you can learn more about it at this link.
  • When promoting your training session, create a registration form to gather participants' information and kindly ask if they would like to receive news and further steps after the training.
  • Maintain a visible and active presence throughout the session to foster community and participant connection. Use inclusive language and acknowledge contributions from all participants to create a supportive learning environment.
  • As an instructor, you should be prepared to adapt your teaching style and approach based on the participants' needs and preferences. You should also be flexible, responsive to feedback, and willing to modify the lesson plan or activities to accommodate different learning styles and abilities.
  • Optionally, take pictures and record videos from your training session for your records and future session promotion. It’s vital to ask for explicit consent from participants to appear in the pictures and videos. You can ask for it in the registration form.
  • After the session, use the provided form to solicit participant feedback to identify strengths and areas for improvement. Use this feedback to refine future sessions and adapt your approach to meet your audience's needs better.

Considerations for Online Training Sessions

To provide a thriving online session, please take into consideration the following:

  • Use a reliable internet connection. A wired connection is highly recommended to reduce the risk of signal loss.
  • Choose an appropriate videoconferencing or video streaming software and test it before the session.
  • Online classes can sometimes lead to reduced engagement compared to in-person sessions. Plan interactive activities, discussions, polls, and quizzes to keep participants engaged throughout the session. Encourage participation through the chat function or by using video or audio interactions.
  • Utilize visual aids such as slides, videos, live coding, and interactive whiteboards to enhance understanding and retention of the material. Ensure that visual aids are clear, relevant, and accessible to all participants.
  • Provide opportunities for participants to receive feedback on their progress and understanding of the material. Incorporate quizzes, polls, or short assignments to assess comprehension and reinforce key concepts.
  • Online classes may require extra time for technical troubleshooting or concept clarification. Plan additional time for these potential issues while ensuring the session stays on schedule. Break the session into manageable segments with built-in breaks to prevent participant fatigue.
  • Have a plan to address technical issues that may arise during the session. Depending on the software and tools you will use, designate a technical support staff member or provide troubleshooting resources for participants to resolve common issues independently.

Considerations for In-Person Training Sessions

To offer an engaging in-person training session, please consider the following:

  • Ensure that the physical classroom is conducive to learning. This includes adequate lighting, comfortable seating, proper ventilation, and appropriate room temperature. Arrange the furniture to promote interaction and engagement among participants.
  • Prepare all necessary materials and resources in advance, such as handouts, visual aids, and equipment. Ensure that all materials are easily accessible to participants and that any technology or equipment functions correctly in the classroom.
  • In an in-person setting, you can employ various engagement techniques to capture participants' attention and maintain their interest. These may include group discussions, hands-on activities, role-playing exercises, demonstrations, and interactive games.
  • Encourage active participation from participants by asking questions, soliciting opinions, and inviting them to share their experiences and insights. Foster a collaborative learning environment where participants feel comfortable expressing themselves and engaging with one another.
  • Prioritize the safety and well-being of participants by adhering to any relevant health and safety guidelines, such as maintaining physical distancing, wearing face masks, and sanitizing shared surfaces. Create a supportive and inclusive learning environment where participants feel respected, valued, and supported in their learning journey.
- + \ No newline at end of file diff --git a/faucet/index.html b/faucet/index.html index 50537d97..bbfc0ab3 100644 --- a/faucet/index.html +++ b/faucet/index.html @@ -4,13 +4,13 @@ SanchoNet faucet | SanchoNet - +

SanchoNet faucet

To request funds from the faucet:

  1. Choose whether you want to request funds or a stake delegation
  2. Fill in your details
  3. Tick the recaptcha box
  4. Click 'Submit'.

When you have finished using your test tokens,
please return them to the faucet at the following address: addr_test1vz0ua2vyk7r4vufmpqh5v44awg8xff26hxlwyrt3uc67maqtql3kl
- + \ No newline at end of file diff --git a/get-started/discord/index.html b/get-started/discord/index.html index 2a09ebec..c17dba7c 100644 --- a/get-started/discord/index.html +++ b/get-started/discord/index.html @@ -4,13 +4,13 @@ Join the community | SanchoNet - +

Join the community

Instructions

  1. Join the IOG Discord community: https://discord.gg/p3jYKGxMvE
  2. Complete the captcha verification
  3. In #start-here, select 'Join the SanchoNet Community'

The 'Voltaire' category, containing SanchoNet channels, will appear. You can enter these channels and join the discussion or just follow along!

SanchoNet Discord channels

The SanchoNet channels include the following:

  • #announcements for updates about SanchoNet
  • #spo-sanchonet for SPO discussion
  • #drep-sanchonet for DRep discussion
  • #builder-sanchonet for discussion of SanchoNet community tooling and infrastructure projects
  • #wallets-sanchonet for wallet discussions, SanchoNet and CIP-95
  • #govtool-sanchonet for discussion of Sancho GovTool beta
  • #live-sancho for live sancho calls
- + \ No newline at end of file diff --git a/get-started/govtool/index.html b/get-started/govtool/index.html index ad9de925..64b92872 100644 --- a/get-started/govtool/index.html +++ b/get-started/govtool/index.html @@ -4,7 +4,7 @@ SanchoNet GovTool | SanchoNet - + @@ -24,7 +24,7 @@ General governance guides Cardano governance page overview GovTool overview

- + \ No newline at end of file diff --git a/get-started/index.html b/get-started/index.html index fb9bf0a9..9e1fa9e0 100644 --- a/get-started/index.html +++ b/get-started/index.html @@ -4,7 +4,7 @@ SanchoNet | SanchoNet - + @@ -14,7 +14,7 @@ SPOs are the backbone of any blockchain network, and on SanchoNet, it's no different. As an SPO, you can take charge and run the testnet network with diligence and integrity and of course, you can influence Barataria's future voting on relevant actions. Your feedback will be invaluable.

  • Delegate representatives (DReps): DReps are the voice of the broader community. As a representative, your role involves participating in voting on governance actions. You can consider the collective interests of the community as you engage in these important decisions.

  • 🚧🚧 SanchoNet is under construction 🚧🚧

    SanchoNet is all about developing and testing the technical components and processes required to action governance for Cardano within CIP-1694. It informs and engages the Cardano community on Voltaire on-chain governance activities currently underway.

    To fully utilize the on-chain components as they are designed for ultimate use on mainnet, a significant program of off-chain elements (eg committees, informational tools, etc) will also need to be delivered, subject to a separate complimentary roadmap and timeline.

    As such, SanchoNet will follow an independent development trajectory scoped from a technical, rather than final, governance perspective. SanchoNet will encapsulate the various actions and use cases that SPOs, DReps, and other users will undertake within typical usage situations as the wider governance capabilities are rolled out.

    Therefore, not all SanchoNet functionality will operate initially as intended (for example, within constitutional actions), and will be subject to change and iteration during the course of development.

    SanchoNet is more than just a testnet, it is a playground of opportunities. Within this space, the community can collaboratively create a governance system that is robust, decentralized, and truly community-driven. Your involvement, dedication, and passion will be the driving force behind SanchoNet's success.

    SanchoNet feature rollout

    The rollout of Sanchonet features will be phased in line with the technical development of CIP-1694:

    SanchoNet phases roll out

    PhasesPhase 1Phase 2Phase 3Phase 4Phase 5Phase 6
    Status✅ Live in SanchoNet✅ Live in SanchoNet✅ Live in SanchoNet✅ Live in SanchoNet🔨 Development in progressNot started
    - + \ No newline at end of file diff --git a/index.html b/index.html index e80b8fd3..80f1fb35 100644 --- a/index.html +++ b/index.html @@ -4,13 +4,13 @@ SanchoNet - +

    SanchoNet

    Building together in the age of Voltaire

    Become a Sancho SPO

    SanchoNet SPOs are the lifeblood of the network. They forge the blocks for all other members. Learn more about becoming a Sancho SPO today!

    Learn more

    Become a Sancho DRep

    SanchoNet provides liquid democracy to get a high voter turnout. DReps are the governing body elected directly through the participants' stake delegation. Become a Sancho DRep today!

    Learn more

    Develop on SanchoNet

    Calling all developers! Do you want to build a cool voting wallet? How about a proposal explorer? Well, there is a job for you. Start integrating your favorite ideas on SanchoNet today!

    Learn more
    Boat
    - + \ No newline at end of file diff --git a/meetups/index.html b/meetups/index.html index b51d9477..91d90d6d 100644 --- a/meetups/index.html +++ b/meetups/index.html @@ -4,13 +4,13 @@ Meetups | SanchoNet - +

    Meetups

    SanchoNet meetups is a way for people to get to know more about SanchoNet be it online or offline at an event.

    This page can be updated by anyone in the community by submitting a pull request with changes.

    LocationDateLinkInfo
    Norway12. Nov 2023https://www.meetup.com/cardano-blockchain-oslo-no/events/296420885/SPO workshop hosted by NADA, https://twitter.com/NordicADA
    Discord(Online)Every Thursdays 8:00PM EST = (GMT-5)https://discord.gg/tHYrxCtdHmSanchoNet CLI workshops for DReps hosted by Mike Hornan[ABLE]
    - + \ No newline at end of file diff --git a/roles/dev/index.html b/roles/dev/index.html index ce9a615c..603cb8bb 100644 --- a/roles/dev/index.html +++ b/roles/dev/index.html @@ -4,13 +4,13 @@ Developers | SanchoNet - +

    Developers

    A SanchoNet developer is an individual skilled in blockchain technology and programming, with a passion for contributing to the evolution of Cardano's governance future.

    Develop on SanchoNet

    To interact with SanchoNet as a developer, you will need to:

    1. Download the node v8.10.0-pre
    2. Run the node
    3. Request funds from the faucet
    4. Build a cool tool to integrate with SanchoNet
    5. Publish it to the community.

    Community tooling

    Wallets

    Wallets are websites or applications that convert a mnemonic into a user-friendly interface for sending and receiving ada. Below is a list of all the wallets currently available on SanchoNet:

    Explorers

    Explorers allow you to visualize blockchain data. Some are web-based, while others are generic APIs. Below is a list of the current explorers available on SanchoNet:

    Voting centers

    Voting centers enable interaction with the chain for viewing and voting on specific proposals. They can also integrate with wallets to facilitate delegation to DReps and submission of transactions to wallets.

    - + \ No newline at end of file diff --git a/roles/drep/index.html b/roles/drep/index.html index 1f17695e..ead98ee8 100644 --- a/roles/drep/index.html +++ b/roles/drep/index.html @@ -4,13 +4,13 @@ DRep | SanchoNet - +

    Delegate representatives (DReps)

    A DRep serves as the community's spokesperson, actively participating in voting on governance actions and advocating for the community's collective interests.

    Becoming a DRep

    As Cardano prepares for the Conway era, community participation becomes vital for its success. A meaningful way to contribute is by becoming a DRep and playing a key role in shaping Cardano's future.

    DReps hold significant responsibilities in the governance process, voting on important system updates. Approval depends on the governance action type and requires a majority vote from the corresponding governance bodies (SPOs, the constitutional committee, and DReps).

    As a DRep, you'll have the power to vote 'yes,' 'no,' or 'abstain' on governance actions proposing changes to protocol parameters. Your vote represents the ada holders' collective voice, making your role crucial in Cardano's decentralized decision-making.

    To become a DRep, follow these steps:

    1. Download the node v8.10.0-pre
    2. Run the node
    3. Request funds from the faucet
    4. Register as a DRep with an on-chain registration certificate
    5. Initially, on SanchoNet, use tools like Discord to identify governance actions requiring your attention and vote
    6. Engage in discussions with other DReps to assess the merits of active governance actions
    7. Cast your votes using Cardano CLI or other voting tools as they become available in the community
    8. When submitting your votes, include reasoning for your vote and an anchor (URL and hash).

    Stay tuned for comprehensive tutorials that will be provided upon the release of new features. You might be also asked to conduct specific tests from participants on SanchoNet, highlighting the importance of your active involvement.

    - + \ No newline at end of file diff --git a/roles/spo/index.html b/roles/spo/index.html index 462107ca..e56bbba1 100644 --- a/roles/spo/index.html +++ b/roles/spo/index.html @@ -4,7 +4,7 @@ SPO | SanchoNet - + @@ -13,7 +13,7 @@ have a role in the governance of the system. Stake pool operators can vote on motions of no confidence, electing new constitutional committee members, initiating hardforks, and making changes to security and relevant protocol parameters.

    Becoming an SPO

    Becoming an SPO is critical to support SanchoNet. The process is straightforward, follow the tutorials below:

    1. Download the latest node
    2. Run the node
    3. Request funds from the faucet
    4. Register a stake pool
    5. Request delegation from the faucet
    - + \ No newline at end of file diff --git a/tools-resources/faq/index.html b/tools-resources/faq/index.html index fe77be1d..d8cc69e6 100644 --- a/tools-resources/faq/index.html +++ b/tools-resources/faq/index.html @@ -4,14 +4,14 @@ Conway ledger era FAQs | SanchoNet - +

    Conway ledger era FAQs

    Warning: Please note that due to ongoing development, some answers may change over time.

    Last update: 2024-02-17

    Based on ledger design cddl: node 8.8.0-pre

    1. What are the new Conway certificates?

    Certificate in CDDLDescription
    reg_certRegisters stake credentials
    unreg_certUnregisters stake credentials
    vote_deleg_certDelegates votes
    stake_vote_deleg_certDelegates to a stake pool and a DRep from the same certificate
    stake_reg_deleg_certRegisters stake credentials and delegates to a stake pool
    vote_reg_deleg_certRegisters stake credentials and delegates to a DRep
    stake_vote_reg_deleg_certRegisters stake credentials, delegates to a pool, and to a DRep
    auth_committee_hot_certAuthorizes the constitutional committee hot credential
    resign_committee_cold_certResigns the constitutional committee cold credential
    reg_drep_certRegisters DRep's credentials
    unreg_drep_certUnregisters (retires) DRep's credentials
    update_drep_certUpdates DRep's metadata anchor

    2. Why are there two ways to register/unregister stake credentials now?

    ⚠ There are currently two ways to register/unregister stake credentials because the old stake_registration and stake_deregistration will be deprecated in the era following the Conway era. ⚠

    The new version allows the ledger to check deposit amounts and return them instantly (rather than on epoch boundary), matching the other new certificates containing deposits.

    3. Why do new certificates have a coin field?

    This change has been made to enable the checking of deposit amounts at the ledger level. It also proves to be more useful in Voltaire, given that protocol parameters are likely to change more frequently than in past eras.

    4. Certificate and transaction field witnesses and deposits

    CertificateParametersRequired witnessesDeposit/refund
    stake_registration(0, stake_credential)NoneNone
    stake_deregistration(1, stake_credential)stake_credentialNone
    stake_delegation(2, stake_credential, pool_keyhash)stake_credentialNone
    pool_registration(3, pool_params)pool_keyNone
    pool_retirement(4, pool_keyhash, epoch)pool_keyNone
    reg_cert(7, stake_credential, coin)stake_credentialDeposit coin of amount keyDeposit
    unreg_cert(8, stake_credential, coin)stake_credentialRefund keyDeposit of amount coin
    vote_deleg_cert(9, stake_credential, drep)stake_credentialNone
    stake_vote_deleg_cert(10, stake_credential, pool_keyhash, drep)stake_credentialNone
    stake_reg_deleg_cert(11, stake_credential, pool_keyhash, coin)stake_credentialDeposit coin of amount keyDeposit
    vote_reg_deleg_cert(12, stake_credential, drep, coin)stake_credentialDeposit coin of amount keyDeposit
    stake_vote_reg_deleg_cert(13, stake_credential, pool_keyhash, drep, coin)stake_credentialDeposit coin of amount keyDeposit
    auth_committee_hot_cert(14, committee_cold_credential, committee_hot_credential)committee_cold_credentialNone
    resign_committee_cold_cert(15, committee_cold_credential, anchor / null)committee_cold_credentialNone
    reg_drep_cert(16, drep_credential, coin, anchor / null)drep_credentialdrepDeposit
    unreg_drep_cert(17, drep_credential, coin)drep_credentialRefund drepDeposit of amount coin
    update_drep_cert(18, drep_credential, anchor / null)drep_credentialNone
    voting_procedure (in Tx body)voting_procedures = { + voter => { + gov_action_id => voting_procedure } }drep_credential OR committee_hot_credential OR stake_pool_keyHashNone
    proposal_procedure (in Tx body)proposal_procedure = [ deposit : coin, reward_account, gov_action, anchor]coinDeposit is returned at the epoch boundary to the reward_account that is specified in the proposal.
    Current treasury value (in Tx body)coinpayment_credentialNone
    Treasury donation (in Tx body)positive_coinpayment_credentialNone

    5. Why isn't the script directly included in a new constitution proposal for the proposal policy?

    The decision to provide only the script hash, rather than the entire script, within a new constitution proposal serves the purpose of reusing the mechanisms previously implemented in Babbage. For instance, it allows individuals to use reference scripts to provide the actual script for the proposal policy when proposing various governance actions. Creating another source for scripts would entail more work.

    6. Regarding the proposal policy for a new CC constitution action: How does the proposal policy script impact the script integrity hash in the transaction body? Do I need to consider the cost model of the provided script?

    The new constitution proposal contains a ScriptHash, also known as the proposal policy. There is nothing special that needs to be done during the proposal stage because the policy is simply being suggested. The significance comes into play when a new constitution with a script hash (proposal policy) is enacted. At that point, the constitution will require scripts and redeemers for every governance proposal, except for the new_constitution and no_confidence proposals. In these cases, it will function in a manner similar to other scripts.

    7. If a voting proposal requires a script and a redeemer, which redeemer tag should I use?

    This tag is yet to be implemented. The designated tag for such instances will be 5, with the index in the redeemer corresponding to the proposal procedure. Additionally, there will be tag 4 – specifically for voting procedures.

    8. What will be the maximum number of protocol parameter changes that can be executed in a single governance action?

    With numerous Plutus versions having distinct cost models, accommodating all of them may become impractical. Nevertheless, it's highly unlikely to exceed the maximum transaction size in the near future.

    9. Can one delegate to DReps that do not exist?

    There are no checks for this at the ledger level, neither for SPOs nor for DReps. At any point, the DRep and the SPO to whom you delegated can unregister, so there is no need to enforce their existence when delegating.

    10. Is it possible to stake a DRep deposit when it is locked?

    No, there is no mechanism to facilitate that action. The purpose of the deposit is to restrict the use of those funds.

    11. What happens with DRep deposits when no stake credential is provided, and where is the deposit returned?

    DRep deposits function similarly to stake credential deposits. They are refunded in the transaction that unregisters the DRep. Stake pool and proposal procedures are retired or expired on the epoch boundary, which is why their deposits are refunded into a reward account. However, DReps and stake credentials are unregistered immediately.

    13. Does the new donation field function similarly to implicit outputs?

    Donations function more like fees. They are collected in a pool and then transferred at the epoch boundary.

    14. How does the 'current treasury value' function, and what happens if I set it to an incorrect value?

    The 'current treasury value' is used for conveying the current treasury amount to Plutus scripts. If the treasury field is set incorrectly, the transaction will be rejected.

    15. How does the process of CC resignation (resign_committee_cold_cert) work, and what happens if all CC members resign? Does this impact the quorum?

    Resigned and expired constitutional committee members are automatically counted as if they have voted 'Abstain'.

    Another crucial point to note is that whenever the number of active committee members (those who are neither expired nor resigned) falls below the committeeMinSize protocol parameter, the system enters a mode in which it is as though all committee members have cast a 'No' vote.

    16. For parameter_change_action and treasury_withdrawals_action does the optionally supplied policy_hash require a witness from the script?

    Yes. It is only optional, when there is no governance policy. When there is a governance policy we require that policy_hash to be present and equal to the one in the elected constitution.

    17. Are the governance voting threshold Parameters set to be fixed at 2 decimal places?

    No, they are rational numbers on the unit interval where both numerator and denominator are specified by 64bit unsigned integers. So, those thresholds can be very precise.

    18. Do unwithdrawn staking rewards count towards one's voting power/ is counted in active/inactive voting stake amounts?

    Yes, the amount in the reward account is counted towards active stake, which means it will also participate in the voting. This decision was to prevent people from constantly withdrawing rewards just so they can get rewards on that amount.

    19. Do any locked deposits count towards voting stake?

    The only deposits which count toward voting stake thresholds are deposits locked for governance actions.

    - + \ No newline at end of file diff --git a/tools-resources/resources/index.html b/tools-resources/resources/index.html index 6c00b806..4b127bf0 100644 --- a/tools-resources/resources/index.html +++ b/tools-resources/resources/index.html @@ -4,7 +4,7 @@ Tools and resources | SanchoNet - + @@ -14,7 +14,7 @@ used by Lace at its core for everything relating to the Cardano blockchain.

    The core/Serialization package has support for serialization and deserialization, developed from the ground up in Typescript.

    Governance Metadata Standards

    The Conway ledger era ushers in on-chain governance for Cardano via CIP-1694 | A First Step Towards On-Chain Decentralized Governance, with the addition of many new on-chain governance artifacts. Some of these artifacts support the linking off-chain metadata, as a way to provide context.

    There have been three governance metadata standards developed, so far, to define what the off-chain contextual data can look like.

    One further standard is around the technical form of the constitution.

    • CIP-???? | Constitution technical form This proposal aims to describe a standardized technical form for the Cardano constitution. Hoping to enhance the accessibility and safety of the document.

    Built by the community

    Disclaimer: These tools and guides are created by the community and are not supported directly. Please refer any issues to the author.

    Tools from the community:

    • Blockfrost.io: the leading Cardano API-as-a-Service, which also provides access to the SanchoNet testing network.
    • NuFi Wallet CIP-95/ SanchoNet Compatible Build: the first community CIP-95 wallet build.
    • Ogmios Conway Releases: is a lightweight bridge interface for cardano-node. It provides an HTTP / WebSocket API that enables applications to interact with a local cardano-node via JSON+RPC-2.0.
    • Cardano-Signer: Open-Source multifunction tool, which can sign&verify data. Can also be used for Key-Generation, like dRep-Keys, CCM-Cold/Hot-Keys with Mnemonic-Support.
    • Adanordic.com: A work-in-progress rudimentary governance related explorer.
    • Cardano Multiplatform Library A standard multifunctional library for serialization & deserialization of core data structures and useful utility functions.
    • Cexplorer.io SanchoNet: The biggest and oldest Cardano explorer, supporting the SanchoNet testing network.
    • cardano-wallet Conway release: Cardano wallet is command line based software wallet.
    • drep.tools: A very early version of a site to help DReps.
    • Plutarch: A Haskell eDSL designed for writing fast and fine-tunable on-chain scripts. Currently supports PlutusLedger V1 and V2, with V3 on its way.

    Guides from the community:

    AuthorTitleDate
    Eysteinh (NBX)Sancho Panza: Navigating Cardano's Testnet Frontier2023-08-14
    Mike Hornan (ABLE)Sancho Testnet Guides and Command Line Interface2023-10-02
    Nicolas Cerny (CF)How to become a delegated representative (DRep) on SanchoNet2024-01-10
    - + \ No newline at end of file diff --git a/tutorials/actions/index.html b/tutorials/actions/index.html index c24da085..82b7cad6 100644 --- a/tutorials/actions/index.html +++ b/tutorials/actions/index.html @@ -4,12 +4,12 @@ Governance actions | SanchoNet - +
    -

    Governance actions

    Common aspects of all types of governance actions

    A proposal is the process of putting together all the information required to submit a governance action to the chain. A proposal consists of:

    • A deposit
    • The reward account that will receive the deposit return
    • The governance action
    • An anchor

    When using the cardano-cli to create a governance action, you will notice that it creates a proposal.

    Deposit and stake credentials

    Any ada holder can submit a governance action to the chain. They must provide a deposit, which will be returned when the action is finalized (whether it is ratified or has expired). +

    Governance actions

    Common aspects of all types of governance actions

    A proposal is the process of putting together all the information required to submit a governance action to the chain. A proposal consists of:

    • A deposit
    • The reward account that will receive the deposit return
    • The governance action
    • An anchor

    When using the cardano-cli to create a governance action, you will notice that it creates a proposal.

    Deposit and stake credentials

    Any ada holder can submit a governance action to the chain. They must provide a deposit, which will be returned when the action is finalized (whether it is ratified or has expired). To facilitate this process, the proposer must specify the stake credential that will receive the refunded deposit.

    Previous governance action ID

    To prevent unintended conflicts between governance actions of the same type, some governance actions must include the governance action ID of the most recently enacted action of its respective type. Notably, this requirement does not apply to treasury withdrawal and info governance actions.

    You can get the last enacted governance action IDs with:

    cardano-cli conway query gov-state --testnet-magic 4 | jq -r .nextRatifyState.nextEnactState.prevGovActionIds
    {
    "Committee": {
    "govActionIx": 0,
    "txId": "fe2c99fe6bc75a9666427163d51ae7dbf5a60df40135361b7bfd53ac6c7912ec"
    },
    "Constitution": {
    "govActionIx": 0,
    "txId": "2bcf2a93cb840d72e6fbbad4d52419fa69a3971dee2e32fab414e32a44ecbaf7"
    },
    "HardFork": null,
    "PParamUpdate": null
    }

    Please note that both the update committee and motion of no confidence actions share the same space, referred to as 'pgaCommittee,' within the governance state. Consequently, the governance state stores a single value to represent both of these actions. The system also verifies either of these @@ -22,7 +22,7 @@ voting process. This process essentially transforms your proposal from a conceptual idea into an actionable item. Once submitted, it becomes part of the public ledger, while also allowing members of the governance bodies to review, discuss, and ultimately cast their votes on its approval or rejection.

    • Note that you can also use build-raw and calculate-min-fee to build transactions in an off-line settting. The example below uses the convenient build:
    cardano-cli conway transaction build \
    --testnet-magic 4 \
    --tx-in "$(cardano-cli query utxo --address "$(cat payment.addr)" --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]')" \
    --change-address $(cat payment.addr) \
    --proposal-file info.action \
    --out-file tx.raw
    cardano-cli conway transaction sign \
    --testnet-magic 4 \
    --tx-body-file tx.raw \
    --signing-key-file payment.skey \
    --out-file tx.signed
    cardano-cli conway transaction submit \
    --testnet-magic 4 \
    --tx-file tx.signed

    Finding the governance action ID of your proposal

    You may want to find your governance action ID to share it with others on Discord1 and seek their support. The transaction ID and the index of the transaction that submitted the proposal serve as the action ID. An effective way to find your governance action ID is by querying the governance state and filtering by (the proposer) stake key hash.

    First, find your key hash with:

    cardano-cli conway stake-address key-hash --stake-verification-key-file stake.vkey

    8e0debc9fdc6c616ac40d98bf3950b436895eea9cccf0396a6e5e12b

    Use jq to filter the gov-state output by the stake key hash. The output contains all the relevant information about your governance actions, including actionId:

    cardano-cli conway query gov-state --testnet-magic 4 \
    | jq -r --arg keyHash "8e0debc9fdc6c616ac40d98bf3950b436895eea9cccf0396a6e5e12b" '.proposals | to_entries[] | select(.value.returnAddr.credential.keyHash | contains($keyHash)) | .value'
    {
    "action": {
    "contents": [
    [
    {
    "credential": {
    "keyHash": "7249a71391f08399f06b492eae7892a33191699625cff50b7dee55c6"
    },
    "network": "Testnet"
    },
    20388738581
    ]
    ],
    "tag": "TreasuryWithdrawals"
    },
    "actionId": {
    "govActionIx": 0,
    "txId": "4fcd92abf2ce3d6796c5fae51ea83d563ca8611359c9624fd1cecd7fa1ce71cc"
    },
    "committeeVotes": {
    "keyHash-23e05ad2b71317a6348ce4b68dae37aa1c0e545cdea740b23c21742e": "VoteNo",
    "keyHash-540bedcd4bdcbf523e899c3ef43f2b96ecec4f6303af58d15a413ed1": "VoteYes",
    "keyHash-6c1d098a366f2274651943a7f778b3b5459c129f0407a0db2902253a": "VoteYes"
    },
    "dRepVotes": {
    "keyHash-13797df5308dfebf2348fa58b312a177cf97939f5f7d21168e1a54db": "VoteYes",
    "keyHash-9853551d8b99884f51608822e012bbf0d444eb7bea2807ee664f1241": "Abstain",
    "keyHash-cf09b59e134fa14e48da39b552c02299a054d7c8b895b3d827453672": "VoteNo"
    },
    "deposit": 1000000000,
    "expiresAfter": 34,
    "proposedIn": 33,
    "returnAddr": {
    "credential": {
    "keyHash": "8e0debc9fdc6c616ac40d98bf3950b436895eea9cccf0396a6e5e12b"
    },
    "network": "Testnet"
    },
    "stakePoolVotes": {}
    }
    - + \ No newline at end of file diff --git a/tutorials/address/index.html b/tutorials/address/index.html index cd5135b2..a34b811e 100644 --- a/tutorials/address/index.html +++ b/tutorials/address/index.html @@ -4,13 +4,13 @@ Generate keys and address | SanchoNet - +
    -

    Generate keys and address

    First, generate a payment key pair and a stake key pair. Then, use the payment verification key and the stake verification key to build an address that can be used to receive funds from the faucet.

    The payment keys control the funds, while the stake keys control the participation in the protocol: delegating stake to a pool and delegating votes to a delegate representative.

    Pre-requisites

    • cardano-cli installed

    Generate key pairs

    1. Generate payment keys:
    cardano-cli conway address key-gen \
    --verification-key-file payment.vkey \
    --signing-key-file payment.skey
    1. Generate stake keys:
    cardano-cli conway stake-address key-gen \
    --verification-key-file stake.vkey \
    --signing-key-file stake.skey

    Build the address

    1. Build your address:
    cardano-cli conway address build \
    --payment-verification-key-file payment.vkey \
    --stake-verification-key-file stake.vkey \
    --out-file payment.addr \
    --testnet-magic 4

    Get funds from the faucet

    1. Use your address on the faucet to get SanchoNet testnet tokens.
    - +

    Generate keys and address

    First, generate a payment key pair and a stake key pair. Then, use the payment verification key and the stake verification key to build an address that can be used to receive funds from the faucet.

    The payment keys control the funds, while the stake keys control the participation in the protocol: delegating stake to a pool and delegating votes to a delegate representative.

    Pre-requisites

    • cardano-cli installed

    Generate key pairs

    1. Generate payment keys:
    cardano-cli conway address key-gen \
    --verification-key-file payment.vkey \
    --signing-key-file payment.skey
    1. Generate stake keys:
    cardano-cli conway stake-address key-gen \
    --verification-key-file stake.vkey \
    --signing-key-file stake.skey

    Build the address

    1. Build your address:
    cardano-cli conway address build \
    --payment-verification-key-file payment.vkey \
    --stake-verification-key-file stake.vkey \
    --out-file payment.addr \
    --testnet-magic 4

    Get funds from the faucet

    1. Use your address on the faucet to get SanchoNet testnet tokens.
    + \ No newline at end of file diff --git a/tutorials/cli queries/index.html b/tutorials/cli queries/index.html index 938e99d9..322e8be0 100644 --- a/tutorials/cli queries/index.html +++ b/tutorials/cli queries/index.html @@ -4,13 +4,13 @@ Useful CLI queries | SanchoNet - +
    -

    Useful CLI queries

    Query the constitution:

    cardano-cli conway query constitution --testnet-magic 4
    {
    "anchor": {
    "dataHash": "5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d",
    "url": "https://tinyurl.com/4xdkkjm3"
    }
    }

    Query the DRep state for all DReps:

    cardano-cli conway query drep-state --testnet-magic 4 --all-dreps


    [
    [
    {
    "scriptHash": "1d8fe9486b5fb282287568f04445c8f4d6cddf76ce2df527fd7debbe"
    },
    {
    "anchor": null,
    "deposit": 2000000,
    "expiry": 108
    }
    ],
    [
    {
    "keyHash": "1da9afe241a10fe5ee9590843134d0eebd4a32af448c9ec91db2e863"
    },
    {
    "anchor": null,
    "deposit": 2000000,
    "expiry": 177
    }
    ],
    [
    {
    "keyHash": "480036de36a123e98663370e4829ebd43aa9bb06ec4b6b25f3e178db"
    },
    {
    "anchor": null,
    "deposit": 2000000,
    "expiry": 176
    }
    ],
    [
    {
    "keyHash": "5b440956e056c96c74d4820b39b4f91cc45bb2b46024c96a594bb2ed"
    },
    {
    "anchor": null,
    "deposit": 2000000,
    "expiry": 176
    },

    ]
    ]

    Query the DRep state for an individual DRep:

    cardano-cli conway query drep-state --drep-key-hash 1da9afe241a10fe5ee9590843134d0eebd4a32af448c9ec91db2e863 --testnet-magic 4
    [
    [
    {
    "keyHash": "1da9afe241a10fe5ee9590843134d0eebd4a32af448c9ec91db2e863"
    },
    {
    "anchor": null,
    "deposit": 2000000,
    "expiry": 188
    }
    ]
    ]

    Query the DRep stake distribution (voting power):

    cardano-cli conway query drep-stake-distribution --testnet-magic 4
    [
    [
    "drep-keyHash-13797df5308dfebf2348fa58b312a177cf97939f5f7d21168e1a54db",
    500000000000
    ],
    [
    "drep-keyHash-9853551d8b99884f51608822e012bbf0d444eb7bea2807ee664f1241",
    495790521257
    ],
    [
    "drep-keyHash-cf09b59e134fa14e48da39b552c02299a054d7c8b895b3d827453672",
    500000000000
    ]
    ]

    Query the committee state:

    cardano-cli conway query committee-state --testnet-magic 4
    {
    "committee": {
    "keyHash-5e86313210aef13297187c38c98abb632678906230f555a1bf0a647a": {
    "expiration": 161,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "e394a160b9f1345b7b84cd25f0a3f1d12cb0c9835a4167f7dc5b52ca"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    },
    "keyHash-8be41436ce39ca3c2f3e4255e17fc6c11581ef6787bccf9ab60f39dd": {
    "expiration": 181,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "e6442af170fabe877ba6b23136ffb32026e9ed927158ecdda2ef0e18"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    },
    "keyHash-da9f5c5c94a6709a9188838ce8cd7fe1c39a1923de4933c16d67c1e0": {
    "expiration": 201,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "f380b5c4f245f9987645023e39b487e11a7d2337aea91dde628d04ed"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    }
    },
    "epoch": 86,
    "quorum": 0.6666666666666666666
    }

    Query the state of an individual committee key hash:

    cardano-cli conway query committee-state --cold-verification-key-hash da9f5c5c94a6709a9188838ce8cd7fe1c39a1923de4933c16d67c1e0 --testnet-magic 4
    {
    "committee": {
    "keyHash-da9f5c5c94a6709a9188838ce8cd7fe1c39a1923de4933c16d67c1e0": {
    "expiration": 201,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "f380b5c4f245f9987645023e39b487e11a7d2337aea91dde628d04ed"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    }
    },
    "epoch": 89,
    "quorum": 0.6666666666666666666
    }

    Query expired committee members

    cardano-cli conway query committee-state --expired --testnet-magic 4
    {
    "committee": {
    "keyHash-059349cd1e77dc3e500d3ffc498adb7307001ecc022c8b083faaa48b": {
    "expiration": 161,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "23e05ad2b71317a6348ce4b68dae37aa1c0e545cdea740b23c21742e"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Expired"
    }
    },
    "epoch": 169,
    "quorum": 0.6
    }

    Query active committee members

    cardano-cli conway query committee-state --active --testnet-magic 4
    {
    "committee": {
    "keyHash-059349cd1e77dc3e500d3ffc498adb7307001ecc022c8b083faaa48b": {
    "expiration": 161,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "23e05ad2b71317a6348ce4b68dae37aa1c0e545cdea740b23c21742e"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    },
    "keyHash-337e0a7fd01c7a7c27e8bac17e40db182bc2a774467795af1e3fe8a9": {
    "expiration": 201,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "540bedcd4bdcbf523e899c3ef43f2b96ecec4f6303af58d15a413ed1"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    },
    "keyHash-9c2aabae5d9187a76ed6b04b40e91ecb4ce3171611c3fd4ec6c6a607": {
    "expiration": 181,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "6c1d098a366f2274651943a7f778b3b5459c129f0407a0db2902253a"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    }
    },
    "epoch": 105,
    "quorum": 0.6
    }

    Query unrecognized committee keys

    cardano-cli conway query committee-state --unrecognized --testnet-magic 42
    {
    "committee": {},
    "epoch": 106,
    "quorum": 0.6
    }
    - +

    Useful CLI queries

    Query the constitution:

    cardano-cli conway query constitution --testnet-magic 4
    {
    "anchor": {
    "dataHash": "5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d",
    "url": "https://tinyurl.com/4xdkkjm3"
    }
    }

    Query the DRep state for all DReps:

    cardano-cli conway query drep-state --testnet-magic 4 --all-dreps


    [
    [
    {
    "scriptHash": "1d8fe9486b5fb282287568f04445c8f4d6cddf76ce2df527fd7debbe"
    },
    {
    "anchor": null,
    "deposit": 2000000,
    "expiry": 108
    }
    ],
    [
    {
    "keyHash": "1da9afe241a10fe5ee9590843134d0eebd4a32af448c9ec91db2e863"
    },
    {
    "anchor": null,
    "deposit": 2000000,
    "expiry": 177
    }
    ],
    [
    {
    "keyHash": "480036de36a123e98663370e4829ebd43aa9bb06ec4b6b25f3e178db"
    },
    {
    "anchor": null,
    "deposit": 2000000,
    "expiry": 176
    }
    ],
    [
    {
    "keyHash": "5b440956e056c96c74d4820b39b4f91cc45bb2b46024c96a594bb2ed"
    },
    {
    "anchor": null,
    "deposit": 2000000,
    "expiry": 176
    },

    ]
    ]

    Query the DRep state for an individual DRep:

    cardano-cli conway query drep-state --drep-key-hash 1da9afe241a10fe5ee9590843134d0eebd4a32af448c9ec91db2e863 --testnet-magic 4
    [
    [
    {
    "keyHash": "1da9afe241a10fe5ee9590843134d0eebd4a32af448c9ec91db2e863"
    },
    {
    "anchor": null,
    "deposit": 2000000,
    "expiry": 188
    }
    ]
    ]

    Query the DRep stake distribution (voting power):

    cardano-cli conway query drep-stake-distribution --testnet-magic 4
    [
    [
    "drep-keyHash-13797df5308dfebf2348fa58b312a177cf97939f5f7d21168e1a54db",
    500000000000
    ],
    [
    "drep-keyHash-9853551d8b99884f51608822e012bbf0d444eb7bea2807ee664f1241",
    495790521257
    ],
    [
    "drep-keyHash-cf09b59e134fa14e48da39b552c02299a054d7c8b895b3d827453672",
    500000000000
    ]
    ]

    Query the committee state:

    cardano-cli conway query committee-state --testnet-magic 4
    {
    "committee": {
    "keyHash-5e86313210aef13297187c38c98abb632678906230f555a1bf0a647a": {
    "expiration": 161,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "e394a160b9f1345b7b84cd25f0a3f1d12cb0c9835a4167f7dc5b52ca"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    },
    "keyHash-8be41436ce39ca3c2f3e4255e17fc6c11581ef6787bccf9ab60f39dd": {
    "expiration": 181,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "e6442af170fabe877ba6b23136ffb32026e9ed927158ecdda2ef0e18"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    },
    "keyHash-da9f5c5c94a6709a9188838ce8cd7fe1c39a1923de4933c16d67c1e0": {
    "expiration": 201,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "f380b5c4f245f9987645023e39b487e11a7d2337aea91dde628d04ed"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    }
    },
    "epoch": 86,
    "quorum": 0.6666666666666666666
    }

    Query the state of an individual committee key hash:

    cardano-cli conway query committee-state --cold-verification-key-hash da9f5c5c94a6709a9188838ce8cd7fe1c39a1923de4933c16d67c1e0 --testnet-magic 4
    {
    "committee": {
    "keyHash-da9f5c5c94a6709a9188838ce8cd7fe1c39a1923de4933c16d67c1e0": {
    "expiration": 201,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "f380b5c4f245f9987645023e39b487e11a7d2337aea91dde628d04ed"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    }
    },
    "epoch": 89,
    "quorum": 0.6666666666666666666
    }

    Query expired committee members

    cardano-cli conway query committee-state --expired --testnet-magic 4
    {
    "committee": {
    "keyHash-059349cd1e77dc3e500d3ffc498adb7307001ecc022c8b083faaa48b": {
    "expiration": 161,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "23e05ad2b71317a6348ce4b68dae37aa1c0e545cdea740b23c21742e"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Expired"
    }
    },
    "epoch": 169,
    "quorum": 0.6
    }

    Query active committee members

    cardano-cli conway query committee-state --active --testnet-magic 4
    {
    "committee": {
    "keyHash-059349cd1e77dc3e500d3ffc498adb7307001ecc022c8b083faaa48b": {
    "expiration": 161,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "23e05ad2b71317a6348ce4b68dae37aa1c0e545cdea740b23c21742e"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    },
    "keyHash-337e0a7fd01c7a7c27e8bac17e40db182bc2a774467795af1e3fe8a9": {
    "expiration": 201,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "540bedcd4bdcbf523e899c3ef43f2b96ecec4f6303af58d15a413ed1"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    },
    "keyHash-9c2aabae5d9187a76ed6b04b40e91ecb4ce3171611c3fd4ec6c6a607": {
    "expiration": 181,
    "hotCredsAuthStatus": {
    "contents": {
    "keyHash": "6c1d098a366f2274651943a7f778b3b5459c129f0407a0db2902253a"
    },
    "tag": "MemberAuthorized"
    },
    "nextEpochChange": "NoChangeExpected",
    "status": "Active"
    }
    },
    "epoch": 105,
    "quorum": 0.6
    }

    Query unrecognized committee keys

    cardano-cli conway query committee-state --unrecognized --testnet-magic 42
    {
    "committee": {},
    "epoch": 106,
    "quorum": 0.6
    }
    + \ No newline at end of file diff --git a/tutorials/committee/index.html b/tutorials/committee/index.html index 5d8e8f84..fdb2b546 100644 --- a/tutorials/committee/index.html +++ b/tutorials/committee/index.html @@ -4,16 +4,16 @@ Generate committee member keys and certificates | SanchoNet - +
    -

    Generate committee member keys and certificates

    Committee member cold keys

    Individuals who are to be nominated as committee members are required to generate a cold key pair. This requirement stems from the necessity to include the cold verification key (or its hash) in the governance action supporting their proposal. The term 'cold key pair' is used to emphasize its intentional storage in a secure, offline environment, which may include safeguarded USB drives, isolated computing machines, or similar devices deliberately disconnected from the internet for enhanced security.

    cardano-cli conway governance committee key-gen-cold \
    --cold-verification-key-file cc-cold.vkey \
    --cold-signing-key-file cc-cold.skey

    Generate the cold verification key hash:

    cardano-cli conway governance committee key-hash \
    --verification-key-file cc-cold.vkey > cc-key.hash
    cat cc-key.hash
    89181f26b47c3d3b6b127df163b15b74b45bba7c3b7a1d185c05c2de

    The key hash would be typically used in the update committee governance action that attempts to add or remove CC members.

    Hot key pair and authorization certificate

    After new committee members have been ratified by a governance action, the new committee members are required to generate a hot key pair and issue +

    Generate committee member keys and certificates

    Committee member cold keys

    Individuals who are to be nominated as committee members are required to generate a cold key pair. This requirement stems from the necessity to include the cold verification key (or its hash) in the governance action supporting their proposal. The term 'cold key pair' is used to emphasize its intentional storage in a secure, offline environment, which may include safeguarded USB drives, isolated computing machines, or similar devices deliberately disconnected from the internet for enhanced security.

    cardano-cli conway governance committee key-gen-cold \
    --cold-verification-key-file cc-cold.vkey \
    --cold-signing-key-file cc-cold.skey

    Generate the cold verification key hash:

    cardano-cli conway governance committee key-hash \
    --verification-key-file cc-cold.vkey > cc-key.hash
    cat cc-key.hash
    89181f26b47c3d3b6b127df163b15b74b45bba7c3b7a1d185c05c2de

    The key hash would be typically used in the update committee governance action that attempts to add or remove CC members.

    Hot key pair and authorization certificate

    After new committee members have been ratified by a governance action, the new committee members are required to generate a hot key pair and issue a hot key authorization certificate. This enables them to cast votes by signing their transactions with their hot signing key while keeping their cold keys securely stored in cold storage. In the event that the hot keys are compromised at any point, the committee member must generate a new hot key pair and issue a new hot key authorization certificate.

    cardano-cli conway governance committee key-gen-hot \
    --verification-key-file cc-hot.vkey \
    --signing-key-file cc-hot.skey
    cardano-cli conway governance committee create-hot-key-authorization-certificate \
    --cold-verification-key-file cc-cold.vkey \
    --hot-key-file cc-hot.vkey \
    --out-file cc-hot-key-authorization.cert
    • Submit the authorization certificate in a transaction:
    cardano-cli conway transaction build \
    --testnet-magic 4 \
    --tx-in "$(cardano-cli query utxo --address "$(cat payment.addr)" --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]')" \
    --change-address payment.addr \
    --certificate-file cc-hot-key-authorization.cert \
    --witness-override 2 \
    --out-file tx.raw
    cardano-cli conway transaction sign \
    --testnet-magic 4 \
    --tx-body-file tx.raw \
    --signing-key-file payment.skey \
    --signing-key-file cc-cold.skey \
    --out-file tx.signed
    cardano-cli conway transaction submit \
    --testnet-magic 4 \
    --tx-file tx.signed
    - + \ No newline at end of file diff --git a/tutorials/delegate-to-drep/index.html b/tutorials/delegate-to-drep/index.html index bbcbb66a..4b7579f4 100644 --- a/tutorials/delegate-to-drep/index.html +++ b/tutorials/delegate-to-drep/index.html @@ -4,13 +4,13 @@ Delegate votes to a DRep | SanchoNet - +
    -

    Delegate votes to a DRep

    Delegating your voting power to a SanchoNet delegate representative (DRep) operates much like delegating your stake to a stake pool. Voting power delegation involves the issuance of a delegation certificate from your stake key to the chosen SanchoNet DRep. Just as with stake delegation, the process of delegating votes to a SanchoNet DRep does not entail relinquishing control of your funds. Instead, the vote delegation certificate grants the selected DRep permission to vote on your behalf.

    In addition to the registered SanchoNet DReps, the system features a couple of default DReps:

    • --always-abstain: this option signals your intention not to participate in the voting procedures, indicating a choice to abstain from the voting process

    • --always-no-confidence: this option signifies your lack of trust in the current constitutional committee, indicating a vote of no confidence in their decisions

    Prerequisites

    • Payment keys and address with funds
    • Stake key
    • Default SanchoNet DRep selection: --always-abstain or --always-no-confidence
    • SanchoNet DRep ID (key hash or script hash) of a registered DRep. See useful cli queries
    • A SanchoNet node

    Generating the vote delegation certificate

    1. Generate the vote delegation certificate.
    • Delegating to the --always-abstain default DRep:
    cardano-cli conway stake-address vote-delegation-certificate \
    --stake-verification-key-file stake.vkey \
    --always-abstain \
    --out-file vote-deleg.cert
    • Delegating to the --always-no-confidence default DRep:
    cardano-cli conway stake-address vote-delegation-certificate \
    --stake-verification-key-file stake.vkey \
    --always-no-confidence \
    --out-file vote-deleg.cert
    • Delegating to a key-based registered SanchoNet DRep:
    cardano-cli conway stake-address vote-delegation-certificate \
    --stake-verification-key-file stake.vkey \
    --drep-key-hash $(cat drep.id) \
    --out-file vote-deleg.cert
    • Delegating to a script-based (i.e. multisignature) registered SanchoNet DRep:
    cardano-cli conway stake-address vote-delegation-certificate \
    --stake-verification-key-file stake.vkey \
    --drep-script-hash $(cat drep-multisig.id) \
    --out-file vote-deleg.cert

    Submitting the certificate in a transaction

    1. Submit the vote delegation certificate in a transaction.
    • Build:
    cardano-cli conway transaction build \
    --testnet-magic 4 \
    --witness-override 2 \
    --tx-in $(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]') \
    --change-address $(cat payment.addr) \
    --certificate-file vote-deleg.cert \
    --out-file tx.raw
    • Sign with payment and stake keys:
    cardano-cli conway transaction sign \
    --tx-body-file tx.raw \
    --signing-key-file payment.skey \
    --signing-key-file stake.skey \
    --testnet-magic 4 \
    --out-file tx.signed
    • Submit:
    cardano-cli conway transaction submit \
    --testnet-magic 4 \
    --tx-file tx.signed
    - +

    Delegate votes to a DRep

    Delegating your voting power to a SanchoNet delegate representative (DRep) operates much like delegating your stake to a stake pool. Voting power delegation involves the issuance of a delegation certificate from your stake key to the chosen SanchoNet DRep. Just as with stake delegation, the process of delegating votes to a SanchoNet DRep does not entail relinquishing control of your funds. Instead, the vote delegation certificate grants the selected DRep permission to vote on your behalf.

    In addition to the registered SanchoNet DReps, the system features a couple of default DReps:

    • --always-abstain: this option signals your intention not to participate in the voting procedures, indicating a choice to abstain from the voting process

    • --always-no-confidence: this option signifies your lack of trust in the current constitutional committee, indicating a vote of no confidence in their decisions

    Prerequisites

    • Payment keys and address with funds
    • Stake key
    • Default SanchoNet DRep selection: --always-abstain or --always-no-confidence
    • SanchoNet DRep ID (key hash or script hash) of a registered DRep. See useful cli queries
    • A SanchoNet node

    Generating the vote delegation certificate

    1. Generate the vote delegation certificate.
    • Delegating to the --always-abstain default DRep:
    cardano-cli conway stake-address vote-delegation-certificate \
    --stake-verification-key-file stake.vkey \
    --always-abstain \
    --out-file vote-deleg.cert
    • Delegating to the --always-no-confidence default DRep:
    cardano-cli conway stake-address vote-delegation-certificate \
    --stake-verification-key-file stake.vkey \
    --always-no-confidence \
    --out-file vote-deleg.cert
    • Delegating to a key-based registered SanchoNet DRep:
    cardano-cli conway stake-address vote-delegation-certificate \
    --stake-verification-key-file stake.vkey \
    --drep-key-hash $(cat drep.id) \
    --out-file vote-deleg.cert
    • Delegating to a script-based (i.e. multisignature) registered SanchoNet DRep:
    cardano-cli conway stake-address vote-delegation-certificate \
    --stake-verification-key-file stake.vkey \
    --drep-script-hash $(cat drep-multisig.id) \
    --out-file vote-deleg.cert

    Submitting the certificate in a transaction

    1. Submit the vote delegation certificate in a transaction.
    • Build:
    cardano-cli conway transaction build \
    --testnet-magic 4 \
    --witness-override 2 \
    --tx-in $(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]') \
    --change-address $(cat payment.addr) \
    --certificate-file vote-deleg.cert \
    --out-file tx.raw
    • Sign with payment and stake keys:
    cardano-cli conway transaction sign \
    --tx-body-file tx.raw \
    --signing-key-file payment.skey \
    --signing-key-file stake.skey \
    --testnet-magic 4 \
    --out-file tx.signed
    • Submit:
    cardano-cli conway transaction submit \
    --testnet-magic 4 \
    --tx-file tx.signed
    + \ No newline at end of file diff --git a/tutorials/drep-registration/index.html b/tutorials/drep-registration/index.html index 63038b04..ec208fdc 100644 --- a/tutorials/drep-registration/index.html +++ b/tutorials/drep-registration/index.html @@ -4,13 +4,13 @@ Registering as a SanchoNet delegate representative (DRep) | SanchoNet - +
    -

    Registering as a SanchoNet delegate representative (DRep)

    Pre-requisites

    • Payment address with funds
    • A SanchoNet node

    Generate SanchoNet DRep keys and an ID

    1. Generate a DRep key pair:
    cardano-cli conway governance drep key-gen \
    --verification-key-file drep.vkey \
    --signing-key-file drep.skey
    {
    "type": "DRepSigningKey_ed25519",
    "description": "Delegate Representative Signing Key",
    "cborHex": "5820eba7053fdc9cb3b8aacf142d3d4ad575bb48fb92f4082d81605ac8e2ccfead5d"
    }
    {
    "type": "DRepVerificationKey_ed25519",
    "description": "Delegate Representative Verification Key",
    "cborHex": "5820c19e0e939609531cfd04dcfa5bf1a5f3e245aa88e163759341aba296af34cc7e"
    }
    1. Generate a SanchoNet DRep ID:
    cardano-cli conway governance drep id \
    --drep-verification-key-file drep.vkey \
    --out-file drep.id
    drep124w9k5ml25kcshqet8r3g2pwk6kqdhj79thg2rphf5u5urve0an

    Generate the registration certificate

    1. Create a SanchoNet DRep registration certificate

    There are three ways to generate the certificate:

    • Using the drep.vkey file:
    cardano-cli conway governance drep registration-certificate \
    --drep-verification-key-file drep.vkey \
    --key-reg-deposit-amt $(cardano-cli conway query gov-state --testnet-magic 4 | jq -r .currentPParams.dRepDeposit) \
    --out-file drep-register.cert
    • Using the DRep verification key:
    cardano-cli conway governance drep registration-certificate \
    --drep-verification-key "$(cat drep.vkey | jq -r .cborHex | cut -c 5-)" \
    --key-reg-deposit-amt $(cardano-cli conway query gov-state --testnet-magic 4 | jq -r .currentPParams.dRepDeposit) \
    --out-file drep-register.cert
    • Using the DRep ID:
    cardano-cli conway governance drep registration-certificate \
    --drep-key-hash $(cat drep.id) \
    --key-reg-deposit-amt $(cardano-cli conway query gov-state --testnet-magic 4 | jq -r .currentPParams.dRepDeposit) \
    --out-file drep-register.cert

    Any of the above methods produces drep-register.cert, which contains:

    {
    "type": "CertificateShelley",
    "description": "DRep Key Registration Certificate",
    "cborHex": "84108200581c555c5b537f552d885c1959c714282eb6ac06de5e2aee850c374d394e00f6"
    }

    Submit certificate in a transaction

    1. Submit the SanchoNet DRep registration certificate in a transaction.
    • Build:
    cardano-cli conway transaction build \
    --testnet-magic 4 \
    --witness-override 2 \
    --tx-in $(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]') \
    --change-address $(cat payment.addr) \
    --certificate-file drep-register.cert \
    --out-file tx.raw
    • Sign:
    cardano-cli conway transaction sign \
    --tx-body-file tx.raw \
    --signing-key-file payment.skey \
    --signing-key-file drep.skey \
    --testnet-magic 4 \
    --out-file tx.signed
    • Submit:
    cardano-cli conway transaction submit \
    --testnet-magic 4 \
    --tx-file tx.signed
    - +

    Registering as a SanchoNet delegate representative (DRep)

    Pre-requisites

    • Payment address with funds
    • A SanchoNet node

    Generate SanchoNet DRep keys and an ID

    1. Generate a DRep key pair:
    cardano-cli conway governance drep key-gen \
    --verification-key-file drep.vkey \
    --signing-key-file drep.skey
    {
    "type": "DRepSigningKey_ed25519",
    "description": "Delegate Representative Signing Key",
    "cborHex": "5820eba7053fdc9cb3b8aacf142d3d4ad575bb48fb92f4082d81605ac8e2ccfead5d"
    }
    {
    "type": "DRepVerificationKey_ed25519",
    "description": "Delegate Representative Verification Key",
    "cborHex": "5820c19e0e939609531cfd04dcfa5bf1a5f3e245aa88e163759341aba296af34cc7e"
    }
    1. Generate a SanchoNet DRep ID:
    cardano-cli conway governance drep id \
    --drep-verification-key-file drep.vkey \
    --out-file drep.id
    drep124w9k5ml25kcshqet8r3g2pwk6kqdhj79thg2rphf5u5urve0an

    Generate the registration certificate

    1. Create a SanchoNet DRep registration certificate

    There are three ways to generate the certificate:

    • Using the drep.vkey file:
    cardano-cli conway governance drep registration-certificate \
    --drep-verification-key-file drep.vkey \
    --key-reg-deposit-amt $(cardano-cli conway query gov-state --testnet-magic 4 | jq -r .currentPParams.dRepDeposit) \
    --out-file drep-register.cert
    • Using the DRep verification key:
    cardano-cli conway governance drep registration-certificate \
    --drep-verification-key "$(cat drep.vkey | jq -r .cborHex | cut -c 5-)" \
    --key-reg-deposit-amt $(cardano-cli conway query gov-state --testnet-magic 4 | jq -r .currentPParams.dRepDeposit) \
    --out-file drep-register.cert
    • Using the DRep ID:
    cardano-cli conway governance drep registration-certificate \
    --drep-key-hash $(cat drep.id) \
    --key-reg-deposit-amt $(cardano-cli conway query gov-state --testnet-magic 4 | jq -r .currentPParams.dRepDeposit) \
    --out-file drep-register.cert

    Any of the above methods produces drep-register.cert, which contains:

    {
    "type": "CertificateShelley",
    "description": "DRep Key Registration Certificate",
    "cborHex": "84108200581c555c5b537f552d885c1959c714282eb6ac06de5e2aee850c374d394e00f6"
    }

    Submit certificate in a transaction

    1. Submit the SanchoNet DRep registration certificate in a transaction.
    • Build:
    cardano-cli conway transaction build \
    --testnet-magic 4 \
    --witness-override 2 \
    --tx-in $(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]') \
    --change-address $(cat payment.addr) \
    --certificate-file drep-register.cert \
    --out-file tx.raw
    • Sign:
    cardano-cli conway transaction sign \
    --tx-body-file tx.raw \
    --signing-key-file payment.skey \
    --signing-key-file drep.skey \
    --testnet-magic 4 \
    --out-file tx.signed
    • Submit:
    cardano-cli conway transaction submit \
    --testnet-magic 4 \
    --tx-file tx.signed
    + \ No newline at end of file diff --git a/tutorials/file-naming-convention/index.html b/tutorials/file-naming-convention/index.html index b7cd632a..423b2c74 100644 --- a/tutorials/file-naming-convention/index.html +++ b/tutorials/file-naming-convention/index.html @@ -4,14 +4,14 @@ File naming convention/schema | SanchoNet - +
    -

    File naming convention/schema

    To align the tutorials, examples, and also third-party tooling, you can find a suggested file naming convention/schema related to the Conway and Voltaire eras in this document.

    The schemas can be extended with a *. prefix if needed. For example:

    • Suggested file name: drep.skey
    • Extended with a prefix: myname.drep.skey

    The naming convention is a work in progress. Please revisit this page regularly to check if any new or modified schemas have been selected.

    Constitution files

    Below is a list of currently used files related to the constitution's text-content/action/vote.

    Text/content

    constitution.txt / *.constitution.txt constitution in cleartext utf-8

    Action

    constitution.action / *.constitution.action for action file content in JSON

    Example content:

    {
    "type": "Governance proposal",
    "description": "",
    "cborHex": "841a000f4240581c1b7a61b...36a56ff490a4af6"
    }

    Vote

    constitution.vote / *.constitution.vote for the vote ballot in JSON

    Example content:

    {
    "type": "Governance vote",
    "description": "",
    "cborHex": "8482582064e7cad9b3ece...1e235709ffa691001f6"
    }

    SanchoNet delegate representatives (DReps) files

    Below is a list of currently used files related to SanchoNet DRep usage.

    Signing key

    Generated as a normal ed25519 key or derived from path 1852'/1815'/acc'/3/idx' +

    File naming convention/schema

    To align the tutorials, examples, and also third-party tooling, you can find a suggested file naming convention/schema related to the Conway and Voltaire eras in this document.

    The schemas can be extended with a *. prefix if needed. For example:

    • Suggested file name: drep.skey
    • Extended with a prefix: myname.drep.skey

    The naming convention is a work in progress. Please revisit this page regularly to check if any new or modified schemas have been selected.

    Constitution files

    Below is a list of currently used files related to the constitution's text-content/action/vote.

    Text/content

    constitution.txt / *.constitution.txt constitution in cleartext utf-8

    Action

    constitution.action / *.constitution.action for action file content in JSON

    Example content:

    {
    "type": "Governance proposal",
    "description": "",
    "cborHex": "841a000f4240581c1b7a61b...36a56ff490a4af6"
    }

    Vote

    constitution.vote / *.constitution.vote for the vote ballot in JSON

    Example content:

    {
    "type": "Governance vote",
    "description": "",
    "cborHex": "8482582064e7cad9b3ece...1e235709ffa691001f6"
    }

    SanchoNet delegate representatives (DReps) files

    Below is a list of currently used files related to SanchoNet DRep usage.

    Signing key

    Generated as a normal ed25519 key or derived from path 1852'/1815'/acc'/3/idx' drep.skey / *.drep.skey for the SanchoNet DRep secret-key JSON (see example content below)

    Example content:

    {
    "type": "DRepSigningKey_ed25519",
    "description": "Delegate Representative Signing Key",
    "cborHex": "00000"
    }
    {
    "type": "DRepExtendedSigningKey_ed25519_bip32",
    "description": "Delegate Representative Signing Key",
    "cborHex": "5840d84f8646463b03accf....da82c5dba3b1e4aa0df20b7"
    }

    The keys derived from hardware wallets will have the keyword 'Hardware' in the description field, such as: 'Hardware Delegate Representative Signing Key'.

    Verification key

    drep.vkey / *.drep.vkey for the SanchoNet DRep verification-key JSON (see example content below)

    Example content:

    {
    "type": "DRepVerificationKey_ed25519",
    "description": "Delegate Representative Verification Key",
    "cborHex": "00000"
    }
    {
    "type": "DRepExtendedVerificationKey_ed25519_bip32",
    "description": "Delegate Representative Verification Key",
    "cborHex": "5820fd6b3cda64cf11f9b91ea3c88dffed906bc872f1e24566d68637c718788638d9"
    }

    The keys derived from hardware wallets will have the keyword 'Hardware' in the description field, such as: Hardware Delegate Representative Verification Key

    Identification file (ID)

    drep.id / *.drep.id for the DRep ID in bech format drep1...

    Example content:

    drep12dggdndq3hhjzszukw5k5sulsesjux780s39h087s0p9vk6ylra

    Registration certificate

    drep-reg.cert / *.drep-reg.cert for the registration certificate JSON

    Example content:

    {
    "type": "CertificateConway",
    "description": "DRep Registration Certificate",
    "cborHex": "00000000"
    }

    Retirement certificate

    drep-ret.cert / *.drep-ret.cert for the de-registration/retirement certificate JSON

    Example content:

    {
    "type": "CertificateConway",
    "description": "DRep Retirement Certificate",
    "cborHex": "00000000"
    }

    Vote delegation certificate

    vote-deleg.cert / *.vote-deleg.cert for the vote delegation certificate JSON

    Example content:

    {
    "type": "CertificateConway",
    "description": "Vote Delegation Certificate",
    "cborHex": "83098200581cc827e7d1fb57cf12662203612fe1f0bb3578574b16f90f4a78cd355c8200581c44924d8233e23a4eda97ba2ce0a336d6152171e70960396b4903eb8a"
    }

    Constitution committee files

    Below is a list of currently used files related to the constitution committee member usage.

    Signing key (cold)

    cc-cold.skey / *.cc-cold.skey for the cold constitutional committee member secret-key JSON

    Signing key (hot)

    cc-hot.skey / *.cc-hot.skey for the hot constitutional committee member secret-key JSON

    Verification key (cold)

    cc-cold.vkey / *.cc-cold.vkey for the cold constitutional committee member verification-key JSON

    Verification key (hot)

    cc-hot.vkey / *.cc-hot.vkey for the hot constitutional committee member verification-key JSON

    - + \ No newline at end of file diff --git a/tutorials/jq-filters/index.html b/tutorials/jq-filters/index.html index 47349961..a922cfa6 100644 --- a/tutorials/jq-filters/index.html +++ b/tutorials/jq-filters/index.html @@ -4,15 +4,15 @@ Useful jq filters | SanchoNet - +
    -

    Useful jq filters

    'jq is like sed for JSON data - you can use it to slice, filter, map, and transform +

    Useful jq filters

    'jq is like sed for JSON data - you can use it to slice, filter, map, and transform structured data with the same ease that sed, awk, grep and friends let you play with text.'

    Install jq.

    Below you will find some useful jq filters to parse the governance state.

    Show governance actions that will expire at the end of the current epoch:

    current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)
    cardano-cli conway query gov-state --testnet-magic 4 \
    | jq --argjson epoch "$current_epoch" '.proposals
    | to_entries[]
    | select(.value.expiresAfter == $epoch)'

    Show governance actions that were proposed in the current epoch:

    current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)
    cardano-cli conway query gov-state --testnet-magic 4 \
    | jq -r --argjson epoch "$current_epoch" '.proposals
    | to_entries[]
    | select(.value.proposedIn == $epoch)'

    Sort governance actions by the number of DRep votes:

    cardano-cli conway query gov-state --testnet-magic 4 | jq -r '
    .proposals
    | to_entries[]
    | {govActionId: .value.actionId, type: .value.proposalProcedure.govAction.tag, drepVoteCount: (.value.dRepVotes | keys | length)}
    ' | jq -s 'sort_by(.voteCount) | reverse[]'

    Sort by the number of SPO votes:

    cardano-cli conway query gov-state --testnet-magic 4 | jq -r '
    .proposals
    | to_entries[]
    | {govActionId: .value.actionId, type: .value.proposalProcedure.govAction.tag, spoVoteCount: (.value.stakePoolVotes | keys | length)}
    ' | jq -s 'sort_by(.voteCount) | reverse[]'

    Sort by the number of CC votes:

    cardano-cli conway query gov-state --testnet-magic 4 | jq -r '
    .proposals
    | to_entries[]
    | {govActionId: .value.actionId, type: .value.proposalProcedure.govAction.tag, ccVoteCount: (.value.committeeVotes | keys | length)}
    ' | jq -s 'sort_by(.voteCount) | reverse[]'

    Filter actions that expire within the current and the next two epochs, including information about all roles' votes, sorted by expiration epoch:

    current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)
    cardano-cli conway query gov-state --testnet-magic 4 | jq -r --argjson current_epoch "$current_epoch" '
    .proposals
    | to_entries[]
    | select(.value.expiresAfter >= ($current_epoch | tonumber) and .value.expiresAfter <= ($current_epoch + 2))
    | {
    govActionId: .value.actionId,
    type: .value.proposalProcedure.govAction.tag,
    expiresAfter: .value.expiresAfter,
    committeeVotesCount: (.value.committeeVotes | length),
    dRepVotesCount: (.value.dRepVotes | length),
    stakePoolVotesCount: (.value.stakePoolVotes | length)
    }
    ' | jq -s 'sort_by(.expiresAfter)'

    Show actions for which a specific DRep key has voted, indicating the DRep's vote and the total number of votes received for this action:

    Replace keyHash-0e7d17c8a917eaee361924d6471331128b3e0de5323f54d70dd0c8c9 with the hex DRep ID of your interest, if it is a script based DRRep, make sure -to use scriptHash instead of keyHash prefix.

    cardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg dRepKey "keyHash-0e7d17c8a917eaee361924d6471331128b3e0de5323f54d70dd0c8c9" '
    .proposals
    | to_entries[]
    | select(.value.dRepVotes[$dRepKey] != null)
    | {
    govActionId: .value.actionId,
    type: .value.proposalProcedure.govAction.tag,
    dRepVote: .value.dRepVotes[$dRepKey],
    expiresAfter: .value.expiresAfter,
    committeeVotesCount: (.value.committeeVotes | length),
    dRepVotesCount: (.value.dRepVotes | length),
    stakePoolVotesCount: (.value.stakePoolVotes | length)
    }
    '

    Show actions where the given DRep key has not voted yet:

    Replace 058b60ead63f667c0ff5b40e269dd1f05ce3a804256735ad4eddce20 with the hex DRep ID of your interest.

    cardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg dRepKey "keyHash-0e7d17c8a917eaee361924d6471331128b3e0de5323f54d70dd0c8c9" '
    .proposals
    | to_entries[]
    | select(.value.dRepVotes[$dRepKey] == null)
    | {
    govActionId: .value.actionId,
    type: .value.proposalProcedure.govAction.tag,
    expiresAfter: .value.expiresAfter,
    committeeVotesCount: (.value.committeeVotes | length),
    dRepVotesCount: (.value.dRepVotes | length),
    stakePoolVotesCount: (.value.stakePoolVotes | length)
    }
    '

    Show the total number of 'yes', 'no', and 'abstain' votes for a given governance action ID:

    Replace "1e08794a48b71ec7e48d3190c7c30455f9538d0e54f4087915ff201167334bc7" and "0" and with the governance action ID and index of your interest.

    and .value.actionId.govActionIx == $actionIndex

    cardano-cli conway query gov-state --testnet-magic 4 \
    | jq -r --arg actionTxId "1e08794a48b71ec7e48d3190c7c30455f9538d0e54f4087915ff201167334bc7" --arg actionIndex "0" ' .proposals
    | to_entries[]
    | select(.value.actionId.txId == $actionTxId and .value.actionId.govActionIx == ($actionIndex | tonumber))
    | {
    govActionId: .value.actionId,
    dRepVoteYesCount: (.value.dRepVotes | with_entries(select(.value == "VoteYes")) | length),
    dRepVoteNoCount: (.value.dRepVotes | with_entries(select(.value == "VoteNo")) | length),
    dRepAbstainCount: (.value.dRepVotes | with_entries(select(.value == "Abstain")) | length),
    stakePoolVoteYesCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteYes")) | length),
    stakePoolVoteNoCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteNo")) | length),
    stakePoolAbstainCount: (.value.stakePoolVotes | with_entries(select(.value == "Abstain")) | length),
    committeeVoteYesCount: (.value.committeeVotes | with_entries(select(.value == "VoteYes")) | length),
    committeeVoteNoCount: (.value.committeeVotes | with_entries(select(.value == "VoteNo")) | length),
    committeeAbstainCount: (.value.committeeVotes | with_entries(select(.value == "Abstain")) | length)
    }
    '

    Show the active treasury withdrawal governance actions and their current vote count:

    current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)

    cardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg currentEpoch "$current_epoch" '
    .proposals
    | to_entries[]
    | select(.value.expiresAfter > ($currentEpoch | tonumber) and .value.proposalProcedure.govAction.tag == "TreasuryWithdrawals")
    | { type: .value.proposalProcedure.govAction.tag,
    govActionId: .value.actionId,
    expiresAfter: .value.expiresAfter,
    dRepVoteYesCount: (.value.dRepVotes | with_entries(select(.value == "VoteYes")) | length),
    dRepVoteNoCount: (.value.dRepVotes | with_entries(select(.value == "VoteNo")) | length),
    dRepAbstainCount: (.value.dRepVotes | with_entries(select(.value == "Abstain")) | length),
    committeeVoteYesCount: (.value.committeeVotes | with_entries(select(.value == "VoteYes")) | length),
    committeeVoteNoCount: (.value.committeeVotes | with_entries(select(.value == "VoteNo")) | length),
    committeeAbstainCount: (.value.committeeVotes | with_entries(select(.value == "Abstain")) | length)
    }
    ' | jq -s 'sort_by(.expiresAfter)'

    Show the active update committee governance actions and their current vote count:

    current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)

    cardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg currentEpoch "$current_epoch" '
    .proposals
    | to_entries[]
    | select(.value.expiresAfter > ($currentEpoch | tonumber) and.value.proposalProcedure.govAction.tag == "UpdateCommittee")
    | { type: .value.proposalProcedure.govAction.tag,
    govActionId: .value.actionId,
    expiresAfter: .value.expiresAfter,
    dRepVoteYesCount: (.value.dRepVotes | with_entries(select(.value == "VoteYes")) | length),
    dRepVoteNoCount: (.value.dRepVotes | with_entries(select(.value == "VoteNo")) | length),
    dRepAbstainCount: (.value.dRepVotes | with_entries(select(.value == "Abstain")) | length),
    stakePoolVoteYesCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteYes")) | length),
    stakePoolVoteNoCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteNo")) | length),
    stakePoolAbstainCount: (.value.stakePoolVotes | with_entries(select(.value == "Abstain")) | length)
    }
    ' | jq -s 'sort_by(.expiresAfter)'
    - +to use scriptHash instead of keyHash prefix.

    cardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg dRepKey "keyHash-0e7d17c8a917eaee361924d6471331128b3e0de5323f54d70dd0c8c9" '
    .proposals
    | to_entries[]
    | select(.value.dRepVotes[$dRepKey] != null)
    | {
    govActionId: .value.actionId,
    type: .value.proposalProcedure.govAction.tag,
    dRepVote: .value.dRepVotes[$dRepKey],
    expiresAfter: .value.expiresAfter,
    committeeVotesCount: (.value.committeeVotes | length),
    dRepVotesCount: (.value.dRepVotes | length),
    stakePoolVotesCount: (.value.stakePoolVotes | length)
    }
    '

    Show actions where the given DRep key has not voted yet:

    Replace 058b60ead63f667c0ff5b40e269dd1f05ce3a804256735ad4eddce20 with the hex DRep ID of your interest.

    cardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg dRepKey "keyHash-0e7d17c8a917eaee361924d6471331128b3e0de5323f54d70dd0c8c9" '
    .proposals
    | to_entries[]
    | select(.value.dRepVotes[$dRepKey] == null)
    | {
    govActionId: .value.actionId,
    type: .value.proposalProcedure.govAction.tag,
    expiresAfter: .value.expiresAfter,
    committeeVotesCount: (.value.committeeVotes | length),
    dRepVotesCount: (.value.dRepVotes | length),
    stakePoolVotesCount: (.value.stakePoolVotes | length)
    }
    '

    Show the total number of 'yes', 'no', and 'abstain' votes for a given governance action ID:

    Replace "1e08794a48b71ec7e48d3190c7c30455f9538d0e54f4087915ff201167334bc7" and "0" and with the governance action ID and index of your interest.

    and .value.actionId.govActionIx == $actionIndex

    cardano-cli conway query gov-state --testnet-magic 4 \
    | jq -r --arg actionTxId "1e08794a48b71ec7e48d3190c7c30455f9538d0e54f4087915ff201167334bc7" --arg actionIndex "0" ' .proposals
    | to_entries[]
    | select(.value.actionId.txId == $actionTxId and .value.actionId.govActionIx == ($actionIndex | tonumber))
    | {
    govActionId: .value.actionId,
    dRepVoteYesCount: (.value.dRepVotes | with_entries(select(.value == "VoteYes")) | length),
    dRepVoteNoCount: (.value.dRepVotes | with_entries(select(.value == "VoteNo")) | length),
    dRepAbstainCount: (.value.dRepVotes | with_entries(select(.value == "Abstain")) | length),
    stakePoolVoteYesCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteYes")) | length),
    stakePoolVoteNoCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteNo")) | length),
    stakePoolAbstainCount: (.value.stakePoolVotes | with_entries(select(.value == "Abstain")) | length),
    committeeVoteYesCount: (.value.committeeVotes | with_entries(select(.value == "VoteYes")) | length),
    committeeVoteNoCount: (.value.committeeVotes | with_entries(select(.value == "VoteNo")) | length),
    committeeAbstainCount: (.value.committeeVotes | with_entries(select(.value == "Abstain")) | length)
    }
    '

    Show the active treasury withdrawal governance actions and their current vote count:

    current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)

    cardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg currentEpoch "$current_epoch" '
    .proposals
    | to_entries[]
    | select(.value.expiresAfter > ($currentEpoch | tonumber) and .value.proposalProcedure.govAction.tag == "TreasuryWithdrawals")
    | { type: .value.proposalProcedure.govAction.tag,
    govActionId: .value.actionId,
    expiresAfter: .value.expiresAfter,
    dRepVoteYesCount: (.value.dRepVotes | with_entries(select(.value == "VoteYes")) | length),
    dRepVoteNoCount: (.value.dRepVotes | with_entries(select(.value == "VoteNo")) | length),
    dRepAbstainCount: (.value.dRepVotes | with_entries(select(.value == "Abstain")) | length),
    committeeVoteYesCount: (.value.committeeVotes | with_entries(select(.value == "VoteYes")) | length),
    committeeVoteNoCount: (.value.committeeVotes | with_entries(select(.value == "VoteNo")) | length),
    committeeAbstainCount: (.value.committeeVotes | with_entries(select(.value == "Abstain")) | length)
    }
    ' | jq -s 'sort_by(.expiresAfter)'

    Show the active update committee governance actions and their current vote count:

    current_epoch=$(cardano-cli query tip --testnet-magic 4 | jq .epoch)

    cardano-cli conway query gov-state --testnet-magic 4 | jq -r --arg currentEpoch "$current_epoch" '
    .proposals
    | to_entries[]
    | select(.value.expiresAfter > ($currentEpoch | tonumber) and.value.proposalProcedure.govAction.tag == "UpdateCommittee")
    | { type: .value.proposalProcedure.govAction.tag,
    govActionId: .value.actionId,
    expiresAfter: .value.expiresAfter,
    dRepVoteYesCount: (.value.dRepVotes | with_entries(select(.value == "VoteYes")) | length),
    dRepVoteNoCount: (.value.dRepVotes | with_entries(select(.value == "VoteNo")) | length),
    dRepAbstainCount: (.value.dRepVotes | with_entries(select(.value == "Abstain")) | length),
    stakePoolVoteYesCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteYes")) | length),
    stakePoolVoteNoCount: (.value.stakePoolVotes | with_entries(select(.value == "VoteNo")) | length),
    stakePoolAbstainCount: (.value.stakePoolVotes | with_entries(select(.value == "Abstain")) | length)
    }
    ' | jq -s 'sort_by(.expiresAfter)'
    + \ No newline at end of file diff --git a/tutorials/multisig-drep-registration/index.html b/tutorials/multisig-drep-registration/index.html index 77296785..ac7691b6 100644 --- a/tutorials/multisig-drep-registration/index.html +++ b/tutorials/multisig-drep-registration/index.html @@ -4,19 +4,19 @@ Registering a multisignature delegate representative (DRep) | SanchoNet - +
    -

    Registering a multisignature delegate representative (DRep)

    In certain scenarios, a Delegate Representative (DRep) may comprise multiple individuals collectively involved in decision-making processes. +

    Registering a multisignature delegate representative (DRep)

    In certain scenarios, a Delegate Representative (DRep) may comprise multiple individuals collectively involved in decision-making processes. Registering a multisignature DRep proves to be an optimal mechanism for such collaborative setups.

    We can utilize Native scripts to register a multisignature DRep. In this example, we will establish a multisignature DRep composed of three sets of keys, where the endorsement of two out of the three sets is necessary.

    Pre-requisites

    • Payment address with funds
    • A SanchoNet node

    Generate SanchoNet DRep keys and an ID

    info

    Each individual member of the DRep must generate a DRep key pair and calculate its verification key hash (a DRep ID). Later on we will use the key hashes to build the Native script.

    1. Generate a DRep key pair:
    cardano-cli conway governance drep key-gen \
    --verification-key-file drep1.vkey \
    --signing-key-file drep1.skey
    {
    "type": "DRepSigningKey_ed25519",
    "description": "Delegate Representative Signing Key",
    "cborHex": "5820eba7053fdc9cb3b8aacf142d3d4ad575bb48fb92f4082d81605ac8e2ccfead5d"
    }
    {
    "type": "DRepVerificationKey_ed25519",
    "description": "Delegate Representative Verification Key",
    "cborHex": "5820c19e0e939609531cfd04dcfa5bf1a5f3e245aa88e163759341aba296af34cc7e"
    }
    1. Get the DRep ID (verification key hash) in "hex" format:
    cardano-cli conway governance drep id \
    --drep-verification-key-file drep1-multisig.vkey \
    --output-format hex \
    --out-file drep.id
    cat drep.id
    e6d27c194fd18f39e080073e5ea02aa78abe4b6c84d78a498302461c

    Build the Native script

    Multi-signature scripts can be written using JSON syntax. This is the format that the cardano-cli tool accepts. In this example we want the script to evaluate to True if and only if at least two valid sigantures are present, this is captured by the fields type and required.

    1. Use a text editor to build your script, let's name it drep-multisig.json:
    {
    "type": "atLeast",
    "required": 2,
    "scripts": [
    {
    "type": "sig",
    "keyHash": "e6d27c194fd18f39e080073e5ea02aa78abe4b6c84d78a498302461c"
    },
    {
    "type": "sig",
    "keyHash": "5ab00e8cd1142fcffc5f7a2c2e3549874afd89e26995d7686c2714d4"
    },
    {
    "type": "sig",
    "keyHash": "db5a8cbb0df0359c36541727229993b21371f834202733c9bbabc1fd"
    }
    ]
    }

    We can choose a different type of script, for example type "any", where the script evaluates to True with a single valid signature from the list:

    {
    "type": "any",
    "scripts": [
    {
    "type": "sig",
    "keyHash": "e6d27c194fd18f39e080073e5ea02aa78abe4b6c84d78a498302461c"
    },
    {
    "type": "sig",
    "keyHash": "5ab00e8cd1142fcffc5f7a2c2e3549874afd89e26995d7686c2714d4"
    },
    {
    "type": "sig",
    "keyHash": "db5a8cbb0df0359c36541727229993b21371f834202733c9bbabc1fd"
    }
    ]
    }

    Or for a more strict setup we can use type "all", where all the signatures are required:

    {
    "type": "all",
    "scripts": [
    {
    "type": "sig",
    "keyHash": "e6d27c194fd18f39e080073e5ea02aa78abe4b6c84d78a498302461c"
    },
    {
    "type": "sig",
    "keyHash": "5ab00e8cd1142fcffc5f7a2c2e3549874afd89e26995d7686c2714d4"
    },
    {
    "type": "sig",
    "keyHash": "db5a8cbb0df0359c36541727229993b21371f834202733c9bbabc1fd"
    }
    ]
    }

    Generate the DRep registration certificate

    1. We'll need the script hash (the DRep ID), calculate it with:
    cardano-cli conway governance hash script \
    --script-file drep-multisig.json \
    --out-file drep-multisig.id
    cat drep-multisig.id
    d862ee2eb3ce246b23ff7e1f62ae0705013e793787485cb6e1845356
    1. Get the DRep deposit amount and store in a variable:
    drepDeposit=$(cardano-cli conway query gov-state | jq -r .currentPParams.dRepDeposit)
    1. Generate the DRep registration certificate:
    cardano-cli conway governance drep registration-certificate \
    --drep-script-hash drep-multisig.id \
    --key-reg-deposit-amt "$drepDeposit" \
    --out-file drep-multisig-reg.cert

    Submit the Registration certificate in a transaction

    1. Build the transaction. Note that we use --witness-override 4 because this tranaction will contain up to 4 signatures, 1 from the payment key and up to 3 members of the DRep.
    cardano-cli conway transaction build \
    --testnet-magic 4 \
    --tx-in $(cardano-cli conway query utxo --address $(cat payment.addr) --output-json | jq -r 'keys[0]') \
    --change-address $(cat payment.addr) \
    --witness-override 4 \
    --certificate-file drep-multisig-reg.cert \
    --certificate-script-file drep-multisig.json \
    --out-file tx.raw
    1. Each member of the DRep will witness the transaction with its individual keys from step 1. In addition, we need the witness from the payment address to pay for the transaction fee.

    Witnessing the transaction with the payment key:

    cardano-cli conway transaction witness \
    --testnet-magic 4 \
    --tx-body-file tx.raw \
    --signing-key-file payment.skey \
    --out-file payment.witness

    Witnessing the transaction with the DRep keys from each memeber:

    cardano-cli conway transaction witness \
    --testnet-magic 4 \
    --tx-body-file tx.raw \
    --signing-key-file drep1.skey \
    --out-file drep1.witness
    cardano-cli conway transaction witness \
    --testnet-magic 4 \
    --tx-body-file tx.raw \
    --signing-key-file drep2.skey \
    --out-file drep2.witness
    cardano-cli conway transaction witness \
    --testnet-magic 4 \
    --tx-body-file tx.raw \
    --signing-key-file drep3.skey \
    --out-file drep3.witness
    1. Assemble the tranaction with all the witnesses from previous step:
    cardano-cli transaction assemble \
    --tx-body-file tx.raw \
    --witness-file payment.witness \
    --witness-file drep1.witness \
    --witness-file drep2.witness \
    --witness-file drep3.witness \
    --out-file tx.signed
    1. Submit the transaction
    cardano-cli conway transaction submit \
    --testnet-magic 4 \
    --tx-file tx.signed
    1. Query the DRep state to confirm
    cardano-cli conway query drep-state \
    --testnet-magic 4 \
    --drep-script-hash $(cat drep-multisig.id)

    [
    [
    {
    "scriptHash": "d862ee2eb3ce246b23ff7e1f62ae0705013e793787485cb6e1845356"
    },
    {
    "anchor": null,
    "deposit": 2000000,
    "expiry": 270
    }
    ]
    ]

    Awesome! Now, we just need to delegate voting power to our DRep!

    - + \ No newline at end of file diff --git a/tutorials/register-stake-address/index.html b/tutorials/register-stake-address/index.html index b4679ddd..87d14f4d 100644 --- a/tutorials/register-stake-address/index.html +++ b/tutorials/register-stake-address/index.html @@ -4,14 +4,14 @@ Stake address registration certificate | SanchoNet - +
    -

    Stake address registration certificate

    To take part on the SanchoNet consensus protocol, we need to submit a stake address registration certificate to the chain. This allows to delegate stake to a SanchoNet stake pool +

    Stake address registration certificate

    To take part on the SanchoNet consensus protocol, we need to submit a stake address registration certificate to the chain. This allows to delegate stake to a SanchoNet stake pool and votes to a SanchoNet delegate representative (DRep).

    Pre-requisites

    • Stake key pair
    • Payment key pair
    • Address with funds
    • A SanchoNet node

    Generate the registration certificate

    1. Register the stake address you previously created by generating a registration certificate:
    cardano-cli conway stake-address registration-certificate \
    --stake-verification-key-file stake.vkey \
    --key-reg-deposit-amt $(cardano-cli conway query gov-state --testnet-magic 4 | jq .currentPParams.stakeAddressDeposit) \
    --out-file registration.cert

    Submit the certificate to the chain

    1. Build, sign and submit the transaction.
    • Build the transaction:
    cardano-cli conway transaction build \
    --testnet-magic 4 \
    --witness-override 2 \
    --tx-in $(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]') \
    --change-address $(cat payment.addr) \
    --certificate-file registration.cert \
    --out-file tx.raw
    • Sign the transaction:
    cardano-cli conway transaction sign \
    --tx-body-file tx.raw \
    --signing-key-file payment.skey \
    --signing-key-file stake.skey \
    --testnet-magic 4 \
    --out-file tx.signed
    • Submit the transaction:
    cardano-cli conway transaction submit \
    --testnet-magic 4 \
    --tx-file tx.signed
    - + \ No newline at end of file diff --git a/tutorials/stake-pool-registration/index.html b/tutorials/stake-pool-registration/index.html index 9044af9b..7d2294c0 100644 --- a/tutorials/stake-pool-registration/index.html +++ b/tutorials/stake-pool-registration/index.html @@ -4,16 +4,16 @@ Register a stake pool | SanchoNet - +
    -

    Register a stake pool

    WARNING: This tutorial is simplified and deliberately excludes secure key handling which is essential for other testnets and mainnet. For a comprehensive tutorial, see the Cardano course where you can access video lessons and a more detailed instruction handbook.

    Prerequisites

    Before you start, ensure that you have:

    1. A running node: see the tutorial
    2. Created keys and addresses: see the tutorial
    3. Requested funds from the faucet

    Set up a relay node

    Setting up a stake pool on SanchoNet involves configuring a block producer node and at least one relay node. The relay node plays a crucial role in propagating the blocks forged by your block-producing node, as well as fetching blocks from other stake pools and serving them to your block producer. In this structure, the block producer communicates solely with your relay node, which in turn interfaces with the rest of the network. This ensures a streamlined communication process and helps to secure your block producer.

    The typical configuration of the stake pool should resemble the following:

    diagram

    To set up your relay node, carry out the following steps:

    1. Install the Cardano node and the Cardano CLI on your relay node.

    2. Configure the firewall for incoming connections: set up the firewall to accept incoming connections on the specific port that you'll be using for the Cardano node. This allows other nodes, including your block producer, to communicate with your relay.

    3. Configure the firewall for outgoing connections: enable the firewall to allow outgoing connections. This configuration ensures that your relay node can contact other relay nodes in the network as well as your block producer node.

    4. Run the node with P2P topology: start your node using the P2P topology setting.

    {
    "localRoots":[
    {
    "accessPoints":[],
    "advertise":false,
    "valency":2
    }
    ],
    "publicRoots":[
    {
    "accessPoints":[
    {
    "address":"sanchonet-node.world.dev.cardano.org",
    "port":30004
    }
    ],
    "advertise":false
    }
    ],
    "useLedgerAfterSlot":1000000
    }

    Set up a block producer

    Setting up your block producer involves similar steps, but there are a few differences in the configuration:

    1. Install the Cardano node and the Cardano CLI on your block producer node.

    2. Configure the firewall for incoming connections: set up the firewall to accept incoming connections only from your relay node on the +

      Register a stake pool

      WARNING: This tutorial is simplified and deliberately excludes secure key handling which is essential for other testnets and mainnet. For a comprehensive tutorial, see the Cardano course where you can access video lessons and a more detailed instruction handbook.

      Prerequisites

      Before you start, ensure that you have:

      1. A running node: see the tutorial
      2. Created keys and addresses: see the tutorial
      3. Requested funds from the faucet

      Set up a relay node

      Setting up a stake pool on SanchoNet involves configuring a block producer node and at least one relay node. The relay node plays a crucial role in propagating the blocks forged by your block-producing node, as well as fetching blocks from other stake pools and serving them to your block producer. In this structure, the block producer communicates solely with your relay node, which in turn interfaces with the rest of the network. This ensures a streamlined communication process and helps to secure your block producer.

      The typical configuration of the stake pool should resemble the following:

      diagram

      To set up your relay node, carry out the following steps:

      1. Install the Cardano node and the Cardano CLI on your relay node.

      2. Configure the firewall for incoming connections: set up the firewall to accept incoming connections on the specific port that you'll be using for the Cardano node. This allows other nodes, including your block producer, to communicate with your relay.

      3. Configure the firewall for outgoing connections: enable the firewall to allow outgoing connections. This configuration ensures that your relay node can contact other relay nodes in the network as well as your block producer node.

      4. Run the node with P2P topology: start your node using the P2P topology setting.

      {
      "localRoots":[
      {
      "accessPoints":[],
      "advertise":false,
      "valency":2
      }
      ],
      "publicRoots":[
      {
      "accessPoints":[
      {
      "address":"sanchonet-node.world.dev.cardano.org",
      "port":30004
      }
      ],
      "advertise":false
      }
      ],
      "useLedgerAfterSlot":1000000
      }

      Set up a block producer

      Setting up your block producer involves similar steps, but there are a few differences in the configuration:

      1. Install the Cardano node and the Cardano CLI on your block producer node.

      2. Configure the firewall for incoming connections: set up the firewall to accept incoming connections only from your relay node on the specific port that you'll be using for the Cardano node. This ensures that only your relay node can communicate with your block producer.

      3. Configure the firewall for outgoing connections: enable the firewall to allow outgoing connections, preferably, only to your own relay's IP and port.

      4. Run the node with P2P topology: start your node using the P2P topology configuration. This time, replace "address":"x.x.x.x" and "port":3000 with the actual IP address and the port of your own relay node. Note that the block producer does not connect to sanchonet-node.world.dev.cardano.org and we avoid using ledger peers by setting "useLedgerAfterSlot¨to -1

      {
      "localRoots":[
      {
      "accessPoints":[
      {
      "address":"x.x.x.x",
      "port":3000
      }
      ],
      "advertise":false,
      "valency":2
      }
      ],
      "publicRoots":[
      {
      "accessPoints":[
      ],
      "advertise":false
      }
      ],
      "useLedgerAfterSlot":-1
      }

      Install jq and set the node socket path

      1. Install jq, a tool that will assist in parsing the UTXOs for transactions:
      sudo apt-get install jq -y
      1. Set the CARDANO_NODE_SOCKET_PATH variable to the path of node.socket that you identified when starting the node:
      export CARDANO_NODE_SOCKET_PATH=~/node.socket

      Register the stake address

      1. Register the stake address you previously created by generating a registration certificate:
      cardano-cli conway stake-address registration-certificate \
      --stake-verification-key-file stake.vkey \
      --key-reg-deposit-amt $(cardano-cli conway query gov-state --testnet-magic 4 | jq .currentPParams.stakeAddressDeposit) \
      --out-file registration.cert
      1. Create a transaction to submit the stake key registration certificate to the chain. Creating a transaction using the CLI always involves a three-step process: BUILDING, SIGNING, AND SUBMITTING the transaction.
      • Build the transaction:
      cardano-cli conway transaction build \
      --testnet-magic 4 \
      --witness-override 2 \
      --tx-in $(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]') \
      --change-address $(cat payment.addr) \
      --certificate-file registration.cert \
      --out-file tx.raw
      • Sign the transaction:
      cardano-cli conway transaction sign \
      --tx-body-file tx.raw \
      --signing-key-file payment.skey \
      --signing-key-file stake.skey \
      --testnet-magic 4 \
      --out-file tx.signed
      • Submit the transaction:
      cardano-cli conway transaction submit \
      --testnet-magic 4 \
      --tx-file tx.signed

      Generate keys for the stake pool

      1. Generate cold keys and the operational certificate for your pool:
      cardano-cli conway node key-gen \
      --cold-verification-key-file cold.vkey \
      --cold-signing-key-file cold.skey \
      --operational-certificate-issue-counter-file opcert.counter
      1. Generate the key-evolving-signature (KES) keys:
      cardano-cli conway node key-gen-KES \
      --verification-key-file kes.vkey \
      --signing-key-file kes.skey
      1. Generate VRF keys:
      cardano-cli conway node key-gen-VRF \
      --verification-key-file vrf.vkey \
      --signing-key-file vrf.skey

      Generate the registration and delegation certificates for the pool

      1. Create your stake pool registration certificate:
      cardano-cli conway stake-pool registration-certificate \
      --cold-verification-key-file cold.vkey \
      --vrf-verification-key-file vrf.vkey \
      --pool-pledge 9000000000 \
      --pool-cost 340000000 \
      --pool-margin 0.05 \
      --pool-reward-account-verification-key-file stake.vkey \
      --pool-owner-stake-verification-key-file stake.vkey \
      --testnet-magic 4 \
      --pool-relay-ipv4 <RELAY NODE PUBLIC IP> \
      --pool-relay-port <RELAY NODE PORT> \
      --out-file pool-registration.cert
      1. Create a stake delegation certificate:
      cardano-cli conway stake-address stake-delegation-certificate \
      --stake-verification-key-file stake.vkey \
      --cold-verification-key-file cold.vkey \
      --out-file delegation.cert

      Submit the certificates in a transaction

      1. Build, sign and submit the transaction
      • Build:
      cardano-cli conway transaction build \
      --testnet-magic 4 \
      --witness-override 3 \
      --tx-in $(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]') \
      --change-address $(cat payment.addr) \
      --certificate-file pool-registration.cert \
      --certificate-file delegation.cert \
      --out-file tx.raw
      • Sign:
      cardano-cli conway transaction sign \
      --tx-body-file tx.raw \
      --signing-key-file payment.skey \
      --signing-key-file cold.skey \
      --signing-key-file stake.skey \
      --testnet-magic 4 \
      --out-file tx.signed
      • Submit:
      cardano-cli conway transaction submit \
      --testnet-magic 4 \
      --tx-file tx.signed
      1. Get your pool ID, you will need to get a delegation from the faucet:
      cardano-cli conway stake-pool id \
      --cold-verification-key-file cold.vkey \
      --output-format bech32 \
      --out-file pool.id

      Starting the node as a block-producer

      1. Generate your operational certificate:
      slotsPerKESPeriod=$(cat shelley-genesis.json | jq -r '.slotsPerKESPeriod')
      slotNo=$(cardano-cli query tip --testnet-magic 4 | jq -r '.slot')
      kesPeriod=$((${slotNo} / ${slotsPerKESPeriod}))
      cardano-cli conway node issue-op-cert --kes-verification-key-file kes.vkey --cold-signing-key-file cold.skey --operational-certificate-issue-counter-file opcert.counter --kes-period ${kesPeriod} --out-file opcert.cert
      1. Request a stake delegation from the faucet. Note that although the delegation will ocurr immediately, you will need two more epochs for your Block producer to start creating blocks. This due to the stake snashopt mechanism.

      2. Restart your node using your pool credentials:

      cardano-node run --topology topology.json \
      --database-path db \
      --socket-path node.socket \
      --shelley-kes-key kes.skey \
      --shelley-vrf-key vrf.skey \
      --shelley-operational-certificate opcert.cert \
      --port 3001 \
      --config config.json
      1. Your stake pool will take part of the stake snapshot on the next epoch boundary. After that, you will be able to query the stake delegated to your pool:
      cardano-cli conway query stake-snapshot \
      --testnet-magic 4 \
      --stake-pool-id <pool_id>
      1. After two epochs (2 days in SanchoNet) your stake pool should start producing blocks, the easiest way to verify it is to grep your node logs
      grep -e TraceForgedBlock
    - + \ No newline at end of file diff --git a/tutorials/start-node/index.html b/tutorials/start-node/index.html index 827e8e14..0ff39570 100644 --- a/tutorials/start-node/index.html +++ b/tutorials/start-node/index.html @@ -4,13 +4,13 @@ Start a SanchoNet node | SanchoNet - +
    -

    Start a SanchoNet node

    Download or build cardano-node and cardano-cli binaries:

    • The latest version for SanchoNet is 8.10.0-pre. See releases.

    Get configuration files

    wget https://book.world.dev.cardano.org/environments/sanchonet/config.json
    wget https://book.world.dev.cardano.org/environments/sanchonet/topology.json
    wget https://book.world.dev.cardano.org/environments/sanchonet/byron-genesis.json
    wget https://book.world.dev.cardano.org/environments/sanchonet/shelley-genesis.json
    wget https://book.world.dev.cardano.org/environments/sanchonet/alonzo-genesis.json
    wget https://book.world.dev.cardano.org/environments/sanchonet/conway-genesis.json

    Run the node

    cardano-node run --topology topology.json \
    --database-path db \
    --socket-path node.socket \
    --port 3001 \
    --config config.json

    Need help?

    For a step-by-step tutorial on how to build and run a node please visit Cardano node course | Building and running the node.

    - +

    Start a SanchoNet node

    Download or build cardano-node and cardano-cli binaries:

    • The latest version for SanchoNet is 8.10.0-pre. See releases.

    Get configuration files

    wget https://book.world.dev.cardano.org/environments/sanchonet/config.json
    wget https://book.world.dev.cardano.org/environments/sanchonet/topology.json
    wget https://book.world.dev.cardano.org/environments/sanchonet/byron-genesis.json
    wget https://book.world.dev.cardano.org/environments/sanchonet/shelley-genesis.json
    wget https://book.world.dev.cardano.org/environments/sanchonet/alonzo-genesis.json
    wget https://book.world.dev.cardano.org/environments/sanchonet/conway-genesis.json

    Run the node

    cardano-node run --topology topology.json \
    --database-path db \
    --socket-path node.socket \
    --port 3001 \
    --config config.json

    Need help?

    For a step-by-step tutorial on how to build and run a node please visit Cardano node course | Building and running the node.

    + \ No newline at end of file diff --git a/tutorials/vote-action/index.html b/tutorials/vote-action/index.html index b8e7d75d..9c99cfeb 100644 --- a/tutorials/vote-action/index.html +++ b/tutorials/vote-action/index.html @@ -4,13 +4,13 @@ Voting on governance actions | SanchoNet - +
    -

    Voting on governance actions

    Pre-requisites

    • Payment key pair
    • Address with funds
    • CC hot, DRep OR stake pool keys
    • A SanchoNet node

    To vote on governance actions, follow this process:

    1. Obtain the action ID of an ongoing governance action from Discord or query the governance state.
    2. Determine your voting stance; engage in discussion if required
    3. Construct your vote file through the Cardano CLI. The example below demonstrates voting --yes, although options for --no or --abstain are also available.

    Verify the content of the governance action

    Assume that we have been given the action ID df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79#0 for a new constitution proposal.

    1. Obtain the URL and hash of the new constitution proposal from the governance state:
    cardano-cli conway query gov-state --testnet-magic 4 | \
    jq -r --arg govActionId "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" '.proposals | to_entries[] | select(.value.actionId.txId | contains($govActionId)) | .value'
    {
    "action": {
    "contents": [
    null,
    {
    "anchor": {
    "dataHash": "5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d",
    "url": "https://tinyurl.com/mr3ferf9"
    }
    }
    ],
    "tag": "NewConstitution"
    },
    "actionId": {
    "govActionIx": 0,
    "txId": "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79"
    },
    "committeeVotes": {
    "keyHash-c8ac605b25d6084c2ceb28043c8f01b62629966d038a249c7847d66d": "VoteYes",
    "keyHash-d13507f7e7fb8ac3ce2094187c9d99d4601021e9ef5a5f310567765d": "VoteYes"
    },
    "dRepVotes": {
    "keyHash-16faaf6daa2635bbf53bbbaf38b3a6040adf7ced2f7f08952592cf5b": "VoteYes",
    "keyHash-57cb90cfb635e76af648abf1b6a91519218a5919b3cba2527e3725d1": "VoteYes",
    "keyHash-7d84808d563f0f258ad7e4337c2c4bd13010930ebdf7b86c3bfd9ef8": "VoteYes"
    },
    "deposit": 0,
    "expiresAfter": 80,
    "proposedIn": 78,
    "returnAddr": {
    "credential": {
    "keyHash": "f925cbd4eb78aad49ec7bf9b4ddfa4cc4486c967e392699d143c81aa"
    },
    "network": "Testnet"
    },
    "stakePoolVotes": {}
    }
    1. Download the file from the URL registered on the ledger state:
    wget https://tinyurl.com/mr3ferf9 -O constitution.txt
    1. Verify that the hash of the file matches the dataHashfrom the ledger state:
    b2sum -l 256 constitution.txt
    5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d constitution.txt

    Everything is in order; the text at the URL matches the dataHash, confirming that the text at the URL is precisely what we are voting for.

    In the future, voting apps, explorers, wallets, and other tools could perform the filtering, ensuring that they only display actions whose URL content has been verified against the hash on the ledger state.

    Create the vote file

    1. Vote with DRep keys:
    cardano-cli conway governance vote create \
    --yes \
    --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \
    --governance-action-index "0" \
    --drep-verification-key-file drep.vkey \
    --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote
    1. Vote with CC hot keys:
    cardano-cli conway governance vote create \
    --yes \
    --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \
    --governance-action-index "0" \
    --cc-hot-verification-key-file cc-hot.vkey \
    --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote
    1. Vote with SPO keys:
    cardano-cli conway governance vote create \
    --yes \
    --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \
    --governance-action-index "0" \
    --cold-verification-key-file cold.vkey \
    --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote

    Include the vote in a transaction

    • Build the transaction:
    cardano-cli conway transaction build --testnet-magic 4 \
    --tx-in "$(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]')" \
    --change-address $(cat payment.addr) \
    --vote-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote \
    --witness-override 2 \
    --out-file vote-tx.raw
    • Sign it with the DRep key:
    cardano-cli transaction sign --tx-body-file vote-tx.raw \
    --signing-key-file drep.skey \
    --signing-key-file payment.skey \
    --testnet-magic 4 \
    --out-file vote-tx.signed
    • OR sign it with the CC hot key:
    cardano-cli transaction sign --tx-body-file vote-tx.raw \
    --signing-key-file cc-hot.skey \
    --signing-key-file payment.skey \
    --testnet-magic 4 \
    --out-file vote-tx.signed
    • OR sign it with the SPO cold key:
    cardano-cli transaction sign --tx-body-file vote-tx.raw \
    --signing-key-file cold.skey \
    --signing-key-file payment.skey \
    --testnet-magic 4 \
    --out-file vote-tx.signed
    • Submit the transaction:
    cardano-cli transaction submit --testnet-magic 4 --tx-file vote-tx.signed
    - +

    Voting on governance actions

    Pre-requisites

    • Payment key pair
    • Address with funds
    • CC hot, DRep OR stake pool keys
    • A SanchoNet node

    To vote on governance actions, follow this process:

    1. Obtain the action ID of an ongoing governance action from Discord or query the governance state.
    2. Determine your voting stance; engage in discussion if required
    3. Construct your vote file through the Cardano CLI. The example below demonstrates voting --yes, although options for --no or --abstain are also available.

    Verify the content of the governance action

    Assume that we have been given the action ID df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79#0 for a new constitution proposal.

    1. Obtain the URL and hash of the new constitution proposal from the governance state:
    cardano-cli conway query gov-state --testnet-magic 4 | \
    jq -r --arg govActionId "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" '.proposals | to_entries[] | select(.value.actionId.txId | contains($govActionId)) | .value'
    {
    "action": {
    "contents": [
    null,
    {
    "anchor": {
    "dataHash": "5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d",
    "url": "https://tinyurl.com/mr3ferf9"
    }
    }
    ],
    "tag": "NewConstitution"
    },
    "actionId": {
    "govActionIx": 0,
    "txId": "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79"
    },
    "committeeVotes": {
    "keyHash-c8ac605b25d6084c2ceb28043c8f01b62629966d038a249c7847d66d": "VoteYes",
    "keyHash-d13507f7e7fb8ac3ce2094187c9d99d4601021e9ef5a5f310567765d": "VoteYes"
    },
    "dRepVotes": {
    "keyHash-16faaf6daa2635bbf53bbbaf38b3a6040adf7ced2f7f08952592cf5b": "VoteYes",
    "keyHash-57cb90cfb635e76af648abf1b6a91519218a5919b3cba2527e3725d1": "VoteYes",
    "keyHash-7d84808d563f0f258ad7e4337c2c4bd13010930ebdf7b86c3bfd9ef8": "VoteYes"
    },
    "deposit": 0,
    "expiresAfter": 80,
    "proposedIn": 78,
    "returnAddr": {
    "credential": {
    "keyHash": "f925cbd4eb78aad49ec7bf9b4ddfa4cc4486c967e392699d143c81aa"
    },
    "network": "Testnet"
    },
    "stakePoolVotes": {}
    }
    1. Download the file from the URL registered on the ledger state:
    wget https://tinyurl.com/mr3ferf9 -O constitution.txt
    1. Verify that the hash of the file matches the dataHashfrom the ledger state:
    b2sum -l 256 constitution.txt
    5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d constitution.txt

    Everything is in order; the text at the URL matches the dataHash, confirming that the text at the URL is precisely what we are voting for.

    In the future, voting apps, explorers, wallets, and other tools could perform the filtering, ensuring that they only display actions whose URL content has been verified against the hash on the ledger state.

    Create the vote file

    1. Vote with DRep keys:
    cardano-cli conway governance vote create \
    --yes \
    --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \
    --governance-action-index "0" \
    --drep-verification-key-file drep.vkey \
    --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote
    1. Vote with CC hot keys:
    cardano-cli conway governance vote create \
    --yes \
    --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \
    --governance-action-index "0" \
    --cc-hot-verification-key-file cc-hot.vkey \
    --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote
    1. Vote with SPO keys:
    cardano-cli conway governance vote create \
    --yes \
    --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \
    --governance-action-index "0" \
    --cold-verification-key-file cold.vkey \
    --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote

    Include the vote in a transaction

    • Build the transaction:
    cardano-cli conway transaction build --testnet-magic 4 \
    --tx-in "$(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --out-file /dev/stdout | jq -r 'keys[0]')" \
    --change-address $(cat payment.addr) \
    --vote-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote \
    --witness-override 2 \
    --out-file vote-tx.raw
    • Sign it with the DRep key:
    cardano-cli transaction sign --tx-body-file vote-tx.raw \
    --signing-key-file drep.skey \
    --signing-key-file payment.skey \
    --testnet-magic 4 \
    --out-file vote-tx.signed
    • OR sign it with the CC hot key:
    cardano-cli transaction sign --tx-body-file vote-tx.raw \
    --signing-key-file cc-hot.skey \
    --signing-key-file payment.skey \
    --testnet-magic 4 \
    --out-file vote-tx.signed
    • OR sign it with the SPO cold key:
    cardano-cli transaction sign --tx-body-file vote-tx.raw \
    --signing-key-file cold.skey \
    --signing-key-file payment.skey \
    --testnet-magic 4 \
    --out-file vote-tx.signed
    • Submit the transaction:
    cardano-cli transaction submit --testnet-magic 4 --tx-file vote-tx.signed
    + \ No newline at end of file diff --git a/tutorials/vote-multisig-drep/index.html b/tutorials/vote-multisig-drep/index.html index cb6b99ef..054caf48 100644 --- a/tutorials/vote-multisig-drep/index.html +++ b/tutorials/vote-multisig-drep/index.html @@ -4,14 +4,14 @@ Voting on governance actions as a multisignature DRep | SanchoNet - +
    -

    Voting on governance actions as a multisignature DRep

    Pre-requisites

    To vote on governance actions, follow this process:

    1. Obtain the action ID of an ongoing governance action from Discord or query the governance state.
    2. Determine your voting stance; engage in discussion if required
    3. Construct your vote file through the Cardano CLI. The example below demonstrates voting --yes, although options for --no or --abstain are also available.

    Verify the content of the governance action

    Assume that we have been given the action ID df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79#0 for a new constitution proposal.

    1. Obtain the URL and hash of the new constitution proposal from the governance state:
    cardano-cli conway query gov-state --testnet-magic 4 | \
    jq -r --arg govActionId "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" '.proposals | to_entries[] | select(.value.actionId.txId | contains($govActionId)) | .value'
    {
    "action": {
    "contents": [
    null,
    {
    "anchor": {
    "dataHash": "5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d",
    "url": "https://tinyurl.com/mr3ferf9"
    }
    }
    ],
    "tag": "NewConstitution"
    },
    "actionId": {
    "govActionIx": 0,
    "txId": "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79"
    },
    "committeeVotes": {
    "keyHash-c8ac605b25d6084c2ceb28043c8f01b62629966d038a249c7847d66d": "VoteYes",
    "keyHash-d13507f7e7fb8ac3ce2094187c9d99d4601021e9ef5a5f310567765d": "VoteYes"
    },
    "dRepVotes": {
    "keyHash-16faaf6daa2635bbf53bbbaf38b3a6040adf7ced2f7f08952592cf5b": "VoteYes",
    "keyHash-57cb90cfb635e76af648abf1b6a91519218a5919b3cba2527e3725d1": "VoteYes",
    "keyHash-7d84808d563f0f258ad7e4337c2c4bd13010930ebdf7b86c3bfd9ef8": "VoteYes"
    },
    "deposit": 0,
    "expiresAfter": 80,
    "proposedIn": 78,
    "returnAddr": {
    "credential": {
    "keyHash": "f925cbd4eb78aad49ec7bf9b4ddfa4cc4486c967e392699d143c81aa"
    },
    "network": "Testnet"
    },
    "stakePoolVotes": {}
    }
    1. Download the file from the URL registered on the ledger state:
    wget https://tinyurl.com/mr3ferf9 -O constitution.txt
    1. Verify that the hash of the file matches the dataHashfrom the ledger state:
    b2sum -l 256 constitution.txt
    5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d constitution.txt

    Everything is in order; the text at the URL matches the dataHash, confirming that the text at the URL is precisely what we are voting for.

    In the future, voting apps, explorers, wallets, and other tools could perform the filtering, ensuring that they only display actions whose URL content has been verified against the hash on the ledger state.

    Create the vote file

    1. Vote with DRep keys:
    cardano-cli conway governance vote create \
    --yes --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \
    --governance-action-index "0" \
    --drep-script-hash $(cat multisig.hash) \
    --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote

    Include the vote in a transaction

    1. Build the transaction:
    cardano-cli conway transaction build --testnet-magic 4 \
    --tx-in "$(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --output-json | jq -r 'keys[0]')" \
    --change-address $(cat payment.addr) \
    --vote-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote \
    --witness-override 2 \
    --out-file vote-tx.raw
    1. Every member of the DRep witnesses the transaction with their respective signing keys. Additionally, we need to witness the transaction with the +

      Voting on governance actions as a multisignature DRep

      Pre-requisites

      To vote on governance actions, follow this process:

      1. Obtain the action ID of an ongoing governance action from Discord or query the governance state.
      2. Determine your voting stance; engage in discussion if required
      3. Construct your vote file through the Cardano CLI. The example below demonstrates voting --yes, although options for --no or --abstain are also available.

      Verify the content of the governance action

      Assume that we have been given the action ID df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79#0 for a new constitution proposal.

      1. Obtain the URL and hash of the new constitution proposal from the governance state:
      cardano-cli conway query gov-state --testnet-magic 4 | \
      jq -r --arg govActionId "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" '.proposals | to_entries[] | select(.value.actionId.txId | contains($govActionId)) | .value'
      {
      "action": {
      "contents": [
      null,
      {
      "anchor": {
      "dataHash": "5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d",
      "url": "https://tinyurl.com/mr3ferf9"
      }
      }
      ],
      "tag": "NewConstitution"
      },
      "actionId": {
      "govActionIx": 0,
      "txId": "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79"
      },
      "committeeVotes": {
      "keyHash-c8ac605b25d6084c2ceb28043c8f01b62629966d038a249c7847d66d": "VoteYes",
      "keyHash-d13507f7e7fb8ac3ce2094187c9d99d4601021e9ef5a5f310567765d": "VoteYes"
      },
      "dRepVotes": {
      "keyHash-16faaf6daa2635bbf53bbbaf38b3a6040adf7ced2f7f08952592cf5b": "VoteYes",
      "keyHash-57cb90cfb635e76af648abf1b6a91519218a5919b3cba2527e3725d1": "VoteYes",
      "keyHash-7d84808d563f0f258ad7e4337c2c4bd13010930ebdf7b86c3bfd9ef8": "VoteYes"
      },
      "deposit": 0,
      "expiresAfter": 80,
      "proposedIn": 78,
      "returnAddr": {
      "credential": {
      "keyHash": "f925cbd4eb78aad49ec7bf9b4ddfa4cc4486c967e392699d143c81aa"
      },
      "network": "Testnet"
      },
      "stakePoolVotes": {}
      }
      1. Download the file from the URL registered on the ledger state:
      wget https://tinyurl.com/mr3ferf9 -O constitution.txt
      1. Verify that the hash of the file matches the dataHashfrom the ledger state:
      b2sum -l 256 constitution.txt
      5d372dca1a4cc90d7d16d966c48270e33e3aa0abcb0e78f0d5ca7ff330d2245d constitution.txt

      Everything is in order; the text at the URL matches the dataHash, confirming that the text at the URL is precisely what we are voting for.

      In the future, voting apps, explorers, wallets, and other tools could perform the filtering, ensuring that they only display actions whose URL content has been verified against the hash on the ledger state.

      Create the vote file

      1. Vote with DRep keys:
      cardano-cli conway governance vote create \
      --yes --governance-action-tx-id "df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79" \
      --governance-action-index "0" \
      --drep-script-hash $(cat multisig.hash) \
      --out-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote

      Include the vote in a transaction

      1. Build the transaction:
      cardano-cli conway transaction build --testnet-magic 4 \
      --tx-in "$(cardano-cli query utxo --address $(cat payment.addr) --testnet-magic 4 --output-json | jq -r 'keys[0]')" \
      --change-address $(cat payment.addr) \
      --vote-file df58f714c0765f3489afb6909384a16c31d600695be7e86ff9c59cf2e8a48c79-constitution.vote \
      --witness-override 2 \
      --out-file vote-tx.raw
      1. Every member of the DRep witnesses the transaction with their respective signing keys. Additionally, we need to witness the transaction with the payment signing key:
      cardano-cli conway transaction witness \
      --tx-body-file vote-tx.raw \
      --signing-key-file drep1.skey \
      --out-file drep1.witness
      cardano-cli conway transaction witness \
      --tx-body-file vote-tx.raw \
      --signing-key-file drep2.skey \
      --out-file drep2.witness
      cardano-cli conway transaction witness \
      --tx-body-file vote-tx.raw \
      --signing-key-file drep3.skey \
      --out-file drep3.witness
      cardano-cli conway transaction witness \
      --tx-body-file vote-tx.raw \
      --signing-key-file payment.skey \
      --out-file payment.witness
      1. Assemble the transaction:
      cardano-cli transaction assemble \
      --tx-body-file vote-tx.raw \
      --witness-file payment.witness \
      --witness-file drep1.witness \
      --witness-file drep2.witness \
      --witness-file drep3.witness \
      --out-file tx.signed
      1. Submit the transaction:
      cardano-cli transaction submit --testnet-magic 4 --tx-file vote-tx.signed
    - + \ No newline at end of file diff --git a/why-sanchonet/barataria/index.html b/why-sanchonet/barataria/index.html index 55aeeebd..66f31bf7 100644 --- a/why-sanchonet/barataria/index.html +++ b/why-sanchonet/barataria/index.html @@ -4,14 +4,14 @@ Barataria | SanchoNet - +

    Barataria

    Barataria plays a unique and significant role in 'Don Quixote.' While existing only in fiction, its symbolism and the events that unfold within its imagined boundaries contribute meaningfully to the novel's exploration of leadership, governance, idealism, and reality.

    In the story, Barataria is a fictional island promised to Sancho Panza, Don Quixote's loyal squire, as a reward for his devoted service. The pledge of ruling Barataria fuels Sancho's dreams and expectations. When a duke and duchess, entertained by Don Quixote and Sancho, decide to actualize this promise, they execute an elaborate prank by appointing Sancho as the governor of the nonexistent island.

    The Barataria episode offers an opportunity to explore Sancho's character, unveiling his practical wisdom and inherent common sense. Despite the absurd situations aimed at testing and mocking him, Sancho governs with dignity, simplicity, and intelligence. His judgments and decrees are marked by a natural grasp of justice and human nature. Instead of becoming a fool in a comedic setting, Sancho turns Barataria into a stage for showcasing his authentic wisdom and leadership.

    Barataria also serves as a mirror to the broader themes of the novel. Just as Don Quixote's idealism often clashes with the harsh realities of the world, Sancho's time in Barataria illustrates the tension between appearance and substance, dream and reality, folly and wisdom. It is a microcosm of the novel's intricate dance between the world as it is and the world as it could be.

    Barataria serves as a link between the lofty ideals of chivalry embodied by Don Quixote and the grounded realism of Sancho. Within this imaginary island, the dreams of both characters converge, and their contrasts find a harmonious resolution.

    In Western literature, the Barataria episode has transcended its origin to become a symbol of leadership that is wise, compassionate, and unpretentious. It stands as a reminder that true wisdom often resides in simplicity and that leadership can be found in the most unlikely places.

    - + \ No newline at end of file diff --git a/why-sanchonet/don-quixote/index.html b/why-sanchonet/don-quixote/index.html index 1a0b2d40..3d32f1e1 100644 --- a/why-sanchonet/don-quixote/index.html +++ b/why-sanchonet/don-quixote/index.html @@ -4,14 +4,14 @@ Don Quixote | SanchoNet - +

    Don Quixote

    Alonso Quijano, the man who would become Don Quixote, begins as an ordinary gentleman from the La Mancha region. He's known to be deeply fixated on books of chivalry. This eventually causes him to lose touch with reality. He decides to resurrect the age of chivalry, renaming himself 'Don Quixote de la Mancha.' This signifies the onset of his transformation, both in regard to his identity and how the world views him.

    In the beginning, Don Quixote's idealism is unrestrained and almost childlike. He perceives the world through a fantastical lens, turning windmills into giants and common inns into castles. His commitment to chivalric codes and virtues is unwavering, albeit frequently misdirected. His notions of honor, justice, and love are drawn from his readings, not real-life encounters. This often leads him into absurd and humorous predicaments. Don Quixote's idealism often materializes as a stubborn refusal to see the world as it truly is, exemplified by his renowned attack on windmills that he misidentifies as giants.

    As the novel unfolds, Don Quixote's character gradually evolves. The initial portrayal of a madman driven by unattainable dreams slowly gives way to a more nuanced and intricate individual. Despite his delusions, nobility resides in his ideals that begin to resonate with those around him. His faith in his knightly mission affects those he encounters, and even those who initially dismiss him as mad come to recognize the sincerity and purity of his beliefs.

    While his squire, Sancho Panza, serves as a foil and grounding influence, Don Quixote also influences Sancho. The relationship between the two characters deepens, as each leaves their mark on the other. Over time, Don Quixote's lofty ideals gradually meld with a more pragmatic grasp of reality, while Sancho starts to appreciate the merits of his master's chivalric worldview.

    As the story concludes, Don Quixote's character experiences a remarkable evolution. His adventures have led to personal growth, deepening wisdom, and a more profound understanding of himself and the world around him. The sharp contrast between idealism and realism has dissolved, giving rise to a more harmonized and human portrayal.

    The culmination of this evolution arrives with the tragic realization of his madness and his decision to forsake his knightly persona, reverting back to Alonso Quijano. This final transformation is tinged with sadness, as it signifies the loss of the beautiful ideals that drove him, but it also represents a return to sanity and a reconciliation with the real world.

    The character of Don Quixote is multi-layered, showcasing a complex evolution. Starting from the naive and delusional Quijano, progressing to the quixotic yet profoundly honorable Don Quixote, and culminating in the wiser and more self-aware man by the narrative's closure, Cervantes skillfully constructs a character that encapsulates the human conflict between idealism and reality. His journey resonates because it mirrors the quest for meaning, virtue, and self-understanding, making Don Quixote a timeless and universal figure in literature.

    - + \ No newline at end of file diff --git a/why-sanchonet/index.html b/why-sanchonet/index.html index e9139f4f..a50b0179 100644 --- a/why-sanchonet/index.html +++ b/why-sanchonet/index.html @@ -4,13 +4,13 @@ Why SanchoNet? | SanchoNet - +

    Why SanchoNet?

    The selection of the name 'SanchoNet' draws inspiration from the intricate and multifaceted character of Sancho Panza, Don Quixote’s companion in Miguel de Cervantes’ literary classic. In the narrative, Sancho's transformation from a humble farmer to a wise governor and loyal friend mirrors virtues that align with the principles steering the evolution and governance of this network.

    Sancho's growth throughout the novel represents a synthesis of realism and idealism. He starts with a practical, down-to-earth perspective but gradually appreciates and even embraces the nobility in Don Quixote's vision of chivalry. His transformation culminates in the episode of governing the fictional 'Island of Barataria,' where his innate wisdom and common sense guide him in delivering fair and wise judgments.

    Sancho's capability to harmonize pragmatic realities with lofty ideals mirrors the essence of SanchoNet. Much like Sancho, the mission of SanchoNet is to cultivate a system that remains grounded in reality while guided by visionary principles. The ultimate goal? To establish a platform where every voice holds significance, embracing inclusivity and pragmatic wisdom in governance.

    The choice of 'SanchoNet' also mirrors the character's transformative journey, echoing the broader themes of growth, self-assurance, and integrity that resonate throughout 'Don Quixote.' The parallel between Sancho and the chivalric code, his self-discovery, and his courage to embrace the extraordinary within himself symbolizes Cardano's aspiration to innovate, empower individuals, and attain greatness.

    Moreover, the intimate relationship between Don Quixote and Sancho, characterized by friendship, mutual influence, and a complex balance between dreams and reality, parallels the collaborative spirit that SanchoNet aims to cultivate within the Cardano community. This partnership transcends mere transactional engagements and evolves into a collective journey toward a more equitable, visionary, and improved ecosystem.

    - + \ No newline at end of file diff --git a/why-sanchonet/sancho-panza/index.html b/why-sanchonet/sancho-panza/index.html index 7a15e9a7..956b8064 100644 --- a/why-sanchonet/sancho-panza/index.html +++ b/why-sanchonet/sancho-panza/index.html @@ -4,7 +4,7 @@ Sancho Panza | SanchoNet - + @@ -17,7 +17,7 @@ them against the skepticism of others. By the end of the story, Sancho's character grows into a synthesis of realism and idealism, embodying the wisdom of the common man and the nobility of the knight-errant.

    Sancho's evolution is a testament to the profound impact of friendship, idealism, and personal growth. His journey reflects the novel's rich exploration of human nature, presenting a timeless portrayal of an ordinary man achieving greatness through wisdom, integrity, and the courage to embrace the extraordinary within himself.

    - + \ No newline at end of file