From 8390d2af64d5e007aeecf12663201b6d116c0bd0 Mon Sep 17 00:00:00 2001 From: Sandip Pandey Date: Mon, 13 May 2024 08:57:56 +0200 Subject: [PATCH 1/3] Add GovTool user stories --- userStoryInventoryChangHF.md | 691 +++++++++++++++++++++++++++++++++++ 1 file changed, 691 insertions(+) create mode 100644 userStoryInventoryChangHF.md diff --git a/userStoryInventoryChangHF.md b/userStoryInventoryChangHF.md new file mode 100644 index 0000000..99b3bf0 --- /dev/null +++ b/userStoryInventoryChangHF.md @@ -0,0 +1,691 @@ +# User Story Inventory + +## Document Summary + +Upon socializing of this Inventory, and eventual agreement, we will progress to detailing how the Acceptance will be accomplished and sign-off achieved, the ‘Accepted’ column will be marked Yes once consensus is reached. + +## Change Management + +Upon agreement on the User Story Inventory, a suitable level of Change Management will be applied, this will enable us to phase-deliver Governance on Cardano and to fulfill the ongoing Ecosystem and Community needs. Additional User Stories will be proposed, reviewed, approved and accepted using + +## Source Areas Under Consideration + +This section shows the areas or sources thus far + +| Source | Outline Contribution | State | Key Contract | +|-----------------|--------------------------------------------------------------------------|--------------------------|----------------------| +| CIP-1694 | Blockchain level User Stories on voting, delegation, identity, consensus | Initial Capture Complete | Outreach in progress | +| Voltaire | Use Cases for Governance, voting, delegation | Initial Capture Complete | Outreach in progress | +| Smart Contracts | Plutus v3 and BLS | Initial Capture Complete | Outreach in progress | +| CLI-API | Interface outline and definition | Initial Capture Complete | Outreach in progress | +| Side chains | Interaction with BLS primitives | Outreach in progress | Outreach in progress | +| DApps | To be defined and elaborated | To be defined | Outreach in progress | +| Exchanges | To be defined and elaborated | To be defined | Outreach in progress | +| Other | To be defined and elaborated | To be defined | Outreach in progress | + +--- +
+ + +# PERSONA TYPES +|ID|NAME|DESCRIPTION| +|----|:----|:----| +|HOLDER | ADA Holder | Someone who owns ADA and is not another persona type, these are usually individuals who delegate their voting power to DReps| +|DRep | DRep | Anyone can be a DRep. DReps can vote on governance actions, their voting power is equal to the number of Lovelace that is delegated to them | +|CCM | Constitutional Community Member | The Cardano Constitutional Committee exists to allow only the governance actions that are compliant with the Cardano Constitution to be ratified. Each member of this committee gets one vote. | +|SPO | Stake Pool Operator | SPOs run stake pools, they will be able to vote on certain key governance actions, and their voting power will be equal to the amount of Lovelace that is staked with them | + +# User Story (Voltaire, API, CIP-1694, Community et al) + +# VOLTAIRE + +## 1A: Single Stake Key as Identity +**User Story:** As an Ada holder or dRep, I want to be able to connect the app to my wallet and use only one stake key at a time so that I can properly manage which dRep I have/will delegate to. +### Acceptance Criteria +- Given that I am seeking to connect to the app with a wallet account that controls multiple stake keys. +- When I seek to connect my wallet to the app. +- Then all my stake keys controlled by the wallet will be listed and I will be asked which stake key I wish to use when connected and will be able to select only one option. Once I give permission to the wallet to connect then the app will connect to the wallet. + +## 1B: Wallet Connection with Stake Key is Successful +**User Story:** As an Ada holder or dRep, I want to be able to connect the app to my single stake key wallet so that I can transact with the blockchain. +### Acceptance Criteria +- Given that I am seeking to connect to the app with a wallet account that controls a single stake key and have given the wallet permission to connect. +- When I seek to connect my wallet to the app. +- Then the app will connect to the app with this stake key. + +## 1C: Wallet Disconnection is Successful +**User Story:** As an Ada holder or dRep who has their wallet connected to the app, I want to be able to disconnect my wallet so that my wallet is no longer connected to the app. +### Acceptance Criteria +- Given that I have my wallet connected to the app. +- When I press the disconnect button. +- Then my wallet is disconnected from the app. + +## 1D: Correct Network on Wallet and dApp +**User Story:** As either an Ada Holder or dRep who is in the act of connecting their wallet to the app, I want the mainnet version of the app to check that the wallet I am connecting with is a mainnet wallet and not connect if it is not a mainnet wallet. +### Acceptance Criteria +- Given that I have a wallet for a different “net” to the version of the app I am using. +- When I attempt to connect that wallet to that app. +- The app will refuse to connect and tell me why. + +### 1E: Connect Only CIP95 Compatible Wallets +**User Story:** As either an Ada Holder or DRep, I want to be able to connect only the CIP95 compatible wallets. +#### Acceptance Criteria +- Given that I am looking to connect to the app with a wallet. +- When I seek to connect my wallet to the app. +- Then if I have multiple wallets (CIP95 compatibles & non-compatibles) only CIP95 compatible wallets are listed and I will be asked which wallet to connect. Once I choose the wallet and give permission to the wallet to connect, then the app will connect to the wallet. + +## 2A: Show Delegated dRep ID +**User Story:** As an Ada holder or dRep, I want to be able to see the dRep ID of the dRep that I have delegated to so that I know that I have delegated to someone and who I have delegated to. I also know that the delegation has been successful. +### Acceptance Criteria +- Given that I have connected my wallet to the app and I have delegated to a dRep. +- When I look in the top right of my screen on any page. +- Then I see a widget that shows the dRep ID of the dRep I delegated to truncated. And by pressing this widget I can copy the dRep ID to clipboard. + +## 2B: Dedicated Page for Delegating to a dRep +**User Story:** As an Ada holder, I want to have one page in the app dedicated to delegating to a dRep so that I can easily delegate to a dRep. +### Acceptance Criteria +- Given that I have the app open. +- When I am seeking to delegate to a dRep. +- I should be able to access a page dedicated to delegating my voting power to a dRep. + +## 2C: dRep Delegation Page on Disconnected State +**User Story:** As an Ada holder who has not connected my wallet to the app, I want to be prompted to connect my wallet to the app if I visit the dRep delegation page so that I can delegate my voting power. +### Acceptance Criteria +- Given that I have not connected my wallet to the app. +- When I visit the dRep delegation page. +- I should be prompted to connect my wallet. This page should not show me any other functionality until I do. + +## 2D: Form on the dRep Delegation Page +**User Story:** As an Ada holder who has connected their wallet to the app, I want a simple form on the dRep delegation page so that I can delegate to a dRep. +### Acceptance Criteria +- Given that I have connected my wallet to the app. +- When I visit the dRep delegation page. +- Then I will see: + - A combobox (or combobox style option) with the following options: + - Delegate to Abstain + - Delegate to No-confidence + - Delegate to dRep ID + - (only if option C is chosen): An input box for inputting the dRep ID of my chosen dRep. + - A button which when pressed submits the delegation data to the wallet. + +## 2E: Delegate to Myself +**User Story:** As a dRep who has connected their wallet to the app, I want a "delegate to myself" option so that I can easily delegate to myself without needing to enter my own dRep ID (thus reducing the chance of error). +### Acceptance Criteria +- Given that I have connected my wallet to the app. +- When I visit the dRep delegation page. +- Then I will see: + - A combobox (or combobox style option) with the following options: + - Delegate to Abstain + - Delegate to No-confidence + - Delegate to dRep ID + - Delegate to myself + - (only if option C is chosen): An input box for inputting the dRep ID of my chosen dRep. + - A button which when pressed submits the delegation data to the wallet. + +## 2F: Delegate to a Different dRep +**User Story:** As an Ada holder who has already delegated to a dRep, I want a way to redelegate my voting power from my current dRep to a different dRep so that I can change dReps. +### Acceptance Criteria +- Given that I am an Ada holder who is logged into the app and has delegated their voting power to a dRep. +- When I use the delegate to dRep page. +- Then I can use it to delegate all my voting power to a different dRep. + +## 2G: Retire as dRep +**User Story:** As a dRep, I want to be able to retire so that I can stop being a dRep. +### Acceptance Criteria +- Given that I am logged into the app. +- When I press the retire as dRep button. +- Then my wallet asks me to sign the transaction to retire from being a dRep. + +## 2H: State After Retiring as dRep +**User Story:** As a retired dRep, I want to be able to confirm that I am no longer registered as a dRep so that I have peace of mind. +### Acceptance Criteria +- Given that I am logged into the app with the wallet account I used when I registered as a dRep. +- When I am on the governance action page. +- Then I no longer have the option to vote. Furthermore, on all pages, there is no widget informing me of my dRepID or about how much voting power has been delegated to me. + +## 2I: Check Valid dRep ID +**User Story:** As a user of the app, I want to ensure that I am delegating to a valid dRep ID so that I do not make a mistake. +### Acceptance Criteria +- Given I have my wallet connected to the app. +- When I attempt to delegate to a dRep using their dRep ID (such as described in 2D & 2H). I press the button to submit my delegation to the wallet. +- Then before the app passes my data to the wallet, it will check it against a list of all registered dRep IDs. If the dRep ID doesn’t exist, It will give an error message to the user and not allow them to delegate to the invalid dRep ID. + +## 2J: Prevent Delegation with Insufficient Funds +**User Story:** As either an Ada Holder or DRep, I want to be prevented from delegating when I have insufficient funds. +### Acceptance Criteria +- Given that I have connected to GovTool with zero ADA (or tADA in the case of SanchoNet). +- When I choose the Delegate to DRep ID option and enter a registered DRep ID and press the Delegate button. +- Then I am presented with a warning message and cannot proceed with delegation if my balance is zero or below the transaction costs. + +## 2K: Redirect to Homepage if Wallet Not Connected +**User Story:** As a user without a compatible wallet connected to GovTool, I want to be redirected to the homepage when attempting to visit the Delegate to DRep page URL. +### Acceptance Criteria +- Given that I do not have a compatible wallet connected to GovTool. +- When I attempt to visit the URL of the Delegate to DRep page. +- Then I am redirected to the homepage. + +## 2L: Delegate to Self for Registered DReps +**User Story:** As a registered DRep connected to GovTool with my wallet, I want to be able to delegate to myself via my connected wallet on the Delegate to DRep page. +### Acceptance Criteria +- Given that I am a registered DRep who is connected to GovTool with my wallet, and I am on the Delegate to DRep page. +- When I choose the Delegate to DRep ID option and enter my own DRep ID and press the Delegate button. +- Then I am able to delegate to myself via my connected wallet. + +## 2M: No Delegate to Self Option for Non-Registered DReps +**User Story:** As a non-registered DRep connected to GovTool with my wallet, I want to be unable to see a Delegate to Myself option on the Delegate to DRep page. +### Acceptance Criteria +- Given that I am not a registered DRep and I am connected to GovTool with my wallet. +- When I am on the Delegate to DRep page. +- Then I cannot see a Delegate to Myself option. + +## 2N: Change Delegation Prompt for Users Already Delegated +**User Story:** As a user already delegated to a DRep, I want GovTool to prompt me to "change my delegation" instead of delegating again. +### Acceptance Criteria +- Given that I am already delegated to a DRep. +- When I look at the dashboard. +- Then GovTool will recognize that I am delegated and invite me to "change my delegation" rather than to delegate. + +## 2O: No Delegate to Self for DReps Already Delegated to Themselves +**User Story:** As a registered DRep and already delegated to myself, I want to be unable to see a Delegate to Myself option on the Delegate to DRep page. +### Acceptance Criteria +- Given that I am a registered DRep and I’ve already delegated to myself. +- When I go to change my delegation. +- Then the option to "delegate to myself" will not be shown. + +## 2P: Delegate to Abstain Feature for DReps +**User Story:** As a DRep, I want to be able to delegate using the "delegate to abstain" feature ensuring only my own lovelace's voting power is delegated to Abstain without affecting voting power delegated to me by others. +### Acceptance Criteria +- Given that I am a DRep. +- When I delegate using the "delegate to abstain" feature. +- Then only my own lovelace's voting power will be delegated to Abstain excluding any voting power delegated to me by others, and I will be notified that my delegation transaction was sent. + +## 2R: Delegate to No-Confidence Feature for DReps +**User Story:** As a DRep, I want to be able to delegate using the "delegate to no-confidence" feature ensuring only my own lovelace's voting power is delegated to No-Confidence without affecting voting power delegated to me by others. +### Acceptance Criteria +- Given that I am a DRep. +- When I delegate using the "delegate to no-confidence" feature. +- Then only my own lovelace's voting power will be delegated to No-Confidence, excluding any voting power delegated to me by others. And I will be notified that my delegation transaction was sent. + +## 2S: Delegate to No-Confidence Feature for Non-DReps +**User Story:** As a non-DRep user, I want to be able to delegate using the "delegate to no-confidence" feature ensuring any voting power I have is delegated to No-Confidence. +### Acceptance Criteria +- Given that I am not a DRep. +- When I delegate using the "delegate to no-confidence" feature. +- Then any voting power I have will be delegated to No-Confidence, and I will be notified that my delegation transaction was sent. + + +## 3A: Confirmation of dRep Registration +**User Story:** As a dRep, I want to be able to see if I am registered so that I can confirm my registration. +### Acceptance Criteria +- Given that I have registered as a dRep. +- When I look at any page on the app. +- Then I should see a widget at the top right of each page showing the voting power that has been delegated to me and my dRep ID. On the governance action page, I also have the option to cast a vote. + +## 3B: Dedicated Page for Registering as a dRep +**User Story:** As a dRep (someone who wants to be a dRep), I want one page dedicated to registering as a dRep so that I can easily register as a dRep. +### Acceptance Criteria +- Given that I have the app open. +- When I am seeking to register as a dRep. +- Then I should be able to access a page dedicated to registering as a dRep. + +## 3C: Registering as dRep on Disconnected Wallet State +**User Story:** As a dRep (someone who wants to be a dRep) who has not connected their wallet to the app, I want to be prompted to connect my wallet to the app if I try to register as a dRep so that I can register as a dRep. +### Acceptance Criteria +- Given that I have not logged in to the app. +- When I visit the dRep registration page. +- Then I should be prompted to log into the app before I can register. I cannot begin the process until I have logged in. + +## 3D: Registering as a dRep on Connected Wallet State +**User Story:** As a dRep (someone who wants to be a dRep) who has connected their wallet to the app, I want to be able to register as a dRep so that I can fulfill the duties of a dRep. +### Acceptance Criteria +- Given that I have logged into the app. +- When I visit the dRep registration page. +- Then I should be presented with a registration form consisting of: + - An input box for my dRep metadata URL. + - An input box for a hash of my dRep metadata. + - A button for sending this information to the wallet. + +## 3E: Validation of dRep Registration Data +**User Story:** As a dRep (someone who wants to be a dRep) who has connected their wallet to the app, I want my registration data to be valid so that my data is readable once it has been stored on the chain. +### Acceptance Criteria +- Given that I am on the dRep registration page. +- If/when I have entered some information into the input box for metadata URL, then it will be checked against the following criteria: + - It must be ≤ 64 bytes in length. + - It must be UTF-8 compatible OR + - It must be empty. +- And if/when I have entered some information into the input box for the hash of my metadata URL, then it should be checked against the following criteria: + - It must be 32 bytes in length. + - It must be UTF-8 compatible OR + - It must be empty. +- Then if these criteria are met then I can submit my dRep registration to the wallet. If these criteria are not met then I will not be able to submit data from the form to the wallet and will instead be told which criteria the information I have entered does not meet so that I can rectify it. + +## 3F: Wallet Transaction Handling on Registering as a dRep +**User Story:** As a dRep, I want my wallet to handle the signing of the transaction with the data necessary to register me as a dRep, including the payment of any required deposit, so that this submission of data to the blockchain is secure. +### Acceptance Criteria +- Given that I have entered a URL into the input box for my dRep metadata URL. +- When I press the submit button. +- Then the app should send the relevant data to the wallet, which should pop up and ask me to sign the relevant transactions. + +## 3G: Feedback on dRep Registration Transaction Submission +**User Story:** As a dRep, I want to get some feedback from the app that the transaction has been submitted so that I know I have submitted my dRep registration. +### Acceptance Criteria +- Given that I have used my wallet to submit my registration to the Cardano blockchain. +- When the wallet has done this. +- Then I will get confirmation from the app that the registration transaction has been submitted. This will include a link to the transaction on a block explorer. + +## 3H: Update dRep Metadata +**User Story:** As a dRep, I want to be able to update my metadata so that my delegates have an accurate representation of what I will do for them. +### Acceptance Criteria +- Given that I am a registered dRep who is logged into the app. +- When I register (again) using the dRep registration page. +- Then the app will allow me to register. The data sent to the wallet will supersede the old data when it is stored on the blockchain. + +## 3I: Display Registration Status as "In Progress" +**User Story:** As a user who has submitted a DRep registration transaction, I want the registration status to display as "In Progress" on the dashboard until it is confirmed by the blockchain. +### Acceptance Criteria +- Given that I have just submitted a DRep registration transaction and I am looking at the dashboard. +- When the registration has not yet been confirmed by the blockchain. +- Then the registration status will show as "In Progress" until it is confirmed. + +## 4A: Dedicated Governance Actions Page +**User Story:** As any visitor to the app, when I visit the app I need a dedicated page for viewing governance actions (‘governance actions page’) so I can see what is being proposed. +### Acceptance Criteria +- Given that I am using the app (whether or not I have my wallet connected to the app). +- When I want to view a list of current governance actions. +- Then there is a page that will display this to me. + +## 4B: No Governance Actions Voting for Ada Holder +**User Story:** As an Ada holder with my wallet connected, when I visit the governance actions page I cannot see any voting functionality so I do not mistakenly think I have the ability to vote. +### Acceptance Criteria +- Given that I am not a dRep with my wallet connected to the app. +- When I look at the governance actions. +- There is no suggestion that I have the ability to vote. + +## 4C: Filter Actions on Governance Actions Page +**User Story:** As any user of the app, when I view governance actions I want the ability to be able to filter them based on: +- Governance Action type +- The epoch that the governance action expires in +- Does the number of Constitutional Committee members voting ‘no’ exceed or meet the quorum? (i.e., a veto) +- Does the number of Constitutional Committee members voting ‘yes’ exceed or meet the quorum? (i.e., acceptance) +- And sort them based on the number of ‘yes’ votes they have been given by dReps. +### Acceptance Criteria +- Given that I am viewing the governance actions page. +- When I want to deduce what governance actions will be important to me. +- There is the ability for me to sort and filter governance actions. + +## 4D: Default Show Accepted Governance Actions +**User Story:** As any user of the app, when I view the governance actions page the default setting for the filter that tells me if the governance action has been accepted by the Constitutional Committee or not is set to show me those governance actions which have already been accepted. +### Acceptance Criteria +- Given that I am viewing the governance actions page for the first time since opening the app. +- When I look at the governance actions. +- Then the only governance actions I can see are the ones that have been accepted by the Constitutional Committee. + +## 4E: Display Voting Power for DReps on Governance Actions Page +**User Story:** As a DRep connected to GovTool, I want my voting power to be displayed when I look at the governance actions page. +### Acceptance Criteria +- Given that I am a DRep and connected to GovTool. +- When I look at the governance actions page. +- Then my voting power is displayed. + +## 4F: Ability to Disconnect Wallet and Disable DRep Functionality +**User Story:** As a DRep connected to GovTool, I want the ability to disconnect my wallet from the platform and temporarily disable DRep functionality. +### Acceptance Criteria +- Given that I am a DRep and connected to GovTool and I am on the governance actions page. +- When I click "Disconnect Wallet". +- Then my wallet is disconnected and I am redirected to the same page without DRep functionality enabled, including the ability to vote. + +### 4G: View Current Vote Count on Governance Action Details Page +**User Story:** As a DRep, I want to be able to view the current vote count for, against, and abstaining on the details page of an individual governance action. +#### Acceptance Criteria +- Given that I am a DRep. +- When I look at the details page of an individual governance action. +- Then I can see the current number of votes for, against, and abstaining. + +## 4H: Verify That Displayed Governance Actions Have Not Expired +**User Story:** As a user on the governance action page, I want to verify that none of the displayed governance actions have expired, been ratified, or enacted. +### Acceptance Criteria +- Given that I am on the governance action page. +- When I examine the governance actions displayed. +- Then none of the governance actions shown on the page have expired, been ratified, or enacted. + +## 4I: Count Most Recent Vote in the Same Snapshot +**User Story:** As a DRep, I want my most recent vote to be counted if I submit a different vote for the same transaction within the same snapshot. +### Acceptance Criteria +- Given that I am a DRep and I have already voted on a given governance action. +- When I submit a different vote for the same transaction within the same snapshot. +- Then the most recent vote will be counted. + +## 4J: Include Metadata Anchor in Voting Transaction +**User Story:** As a user who has chosen how to vote on the UI of a governance action's details, I want to include a metadata anchor when voting and ensure it's included in the resulting transaction. +### Acceptance Criteria +- Given that I have chosen how to vote on the UI of a governance action's details. +- When I add a metadata anchor to the UI and click the vote button. +- Then the resulting transaction will include my metadata anchor. + +## 5A: Required Information Displayed for Governance Action +**User Story:** As any user, when I look at a governance action it will have the following information displayed so that I can make an informed choice. +### Acceptance Criteria +- Given that I am viewing the governance actions page. +- When I look at a governance action. +- Then I can see all the vital information. + +## 5B: dRep Can Vote for Governance Action +**User Story:** As a dRep, when I am on the governance action page of the app there will be a vote button so that I can cast a vote. +### Acceptance Criteria +- Given that I have my wallet connected to the app as a dRep (regardless of whether or not I have voted). +- When I look at a governance action. +- Then I can see there is a vote button. + +## 5C: dRep Can Cast Vote and Reason for Voting +**User Story:** As a dRep, when I click the vote button a modal window will pop up. It will give me the ability to select 'yes', 'no', or 'abstain' as my vote on that governance action. In addition, it will contain a box where I have the option to input the URL of the location where I have stored my reason for voting (a “reason URL input box”) in the way that I have decided to vote. And an input box for the hash of the reason why I voted the way I did (a “reason hash input box”). There will also be a 'Submit' button. +### Acceptance Criteria +- Given that I have my wallet connected to the app as a dRep. +- When I go to vote I have the option to: + - Vote ‘yes’, ‘no’, or ‘abstain’. + - Provide a URL to the JSON file where I have stored my reason for voting in the way that I did AKA a metadata URL. + - Provide a hash of the aforementioned JSON file. + - (Points 2 & 3 are optional for casting a vote.) +- Then I can enter a metadata URL (optional) and select the voting option I believe is right in order to submit casting my vote to the wallet. I can then sign the vote transaction with my wallet to submit it to the blockchain. + +## 5D: Reason URL and Reason Hash are Valid +**User Story:** As a dRep, I want the data I have input into the reason URL box and reason hash input box to be valid so that my data is readable once it has been stored on the chain. +### Acceptance Criteria +- Given that I am in the process of casting my vote on a governance action. +- If/when I have entered some information into the reason URL input box then it will be checked against the following criteria: + - It must be ≤ 64 bytes in length. + - It must be UTF-8 compatible OR. + - It must be empty. +- And if/when I have entered some information into the reason hash input box then it should be checked against the following criteria: + - It must be 32 bytes in length. + - It must be UTF-8 compatible OR. + - It must be empty. +- Then if these criteria are met then I can submit my vote to the wallet. If these criteria are not met then I will not be able to submit data from the form to the wallet and will instead be told which criteria the information I have entered does not meet so that I can rectify it. + +## 5E: dRep Can Recast Their Vote +**User Story:** As a dRep, when I wish to change my mind I can simply recast my vote by voting with different options inputted so that I can react to new information I had not previously considered. +### Acceptance Criteria +- Given that I am logged in as a dRep. +- When I have submitted a vote I can vote again on the same governance action to change how my vote is registered at any time until the governance action expires or is enacted. +- Then I won't have to worry about making a mistake. + +## 5F: Confirmation of Voting Transaction Successful Submission +**User Story:** As a dRep, when I (via the wallet) have submitted a vote to the blockchain the app will confirm to me that the transaction has been submitted so that I am not confused about the status of my vote. +### Acceptance Criteria +- Given that I have submitted a vote via my wallet. +- When I look at the app. +- Then it will tell me that my vote has been submitted and will provide me with a link to the transaction details on a block explorer. + +## 5G: Redirect to the Governance Action Page +**User Story:** As any user of the app, when I click on the headline of a governance action I will be redirected in a new browser tab to the URL of the JSON metadata payload of the governance action. +### Acceptance Criteria +- Given that I am on the governance actions page. +- When I want to review the details of the governance action. +- Then I will press on the headline to be redirected to the governance action metadata at the location specified by the governance action metadata URL. + +## 5H: Warning on Clicking Headline of Governance Action +**User Story:** As any user of the app, when I click on the headline of a governance action BEFORE I am redirected to the JSON metadata payload, I will be warned that the app does not check the hash of the metadata provided against the metadata on chain and the user should do this themselves. +### Acceptance Criteria +- Given that I want to know that the person who submitted the governance action has not changed the metadata of the governance action. +- When I click to visit the metadata of the governance action. +- Then I will be warned that I should hash the metadata myself and compare it against the hash that was posted on-chain for that governance action so that I can be sure that the metadata has not been altered. + +## 5I: External URL Warning +**User Story:** As any user of the app, before I am redirected to any external web pages outside of the app I will be shown the full URL, warned that external pages could be dangerous and it is at my own risk that I visit them. I will then have to confirm that I want to be redirected. I will not be redirected until I confirm. +### Acceptance Criteria +- Given that I want to view some externally hosted content which has been linked to in the app (e.g., governance action metadata). +- When I click on the link, I will be shown the full URL and asked if I am sure that I want to visit it at my own risk. +- Then I will either close the warning or indicate that I want to cancel my action in order to not visit the URL or I will indicate that it’s ok to visit the link and I will be redirected to the URL. + +## 5J: External Link Open in a New Tab +**User Story:** As any user of the app, when I click on an external link in the app, the link will open in a separate tab so that I can refer to the information in the app and externally at the same time. +### Acceptance Criteria +- Given that I click a link to some externally hosted information. +- When the external website opens. +- Then it will do so in a different tab. + +## 5K: View Your Own Vote on Governance Action as dRep +**User Story:** As a dRep, when I view governance actions I can see if and how I have voted on each governance action, so that I can avoid voting multiple times on the same action by mistake. +### Acceptance Criteria +- Given that I am logged into the app as a dRep. +- When I view governance actions, I can see which ones I have personally voted on and how I voted. +- Then I can avoid duplicating my votes. + +## 5L: No Retirement Option for Non-Registered DReps +**User Story:** As a non-registered DRep, I want to confirm that there is no retirement option available in GovTool. +### Acceptance Criteria +- Given that I am not registered as a DRep. +- When I look for a retirement option in GovTool. +- Then there is none available. + +## 5M: Return of DRep Registration Deposit Upon Retirement +**User Story:** As a DRep, I want my DRep registration deposit to be returned to me when I register a valid retirement transaction on-chain. +### Acceptance Criteria +- Given that I am a DRep. +- When I register a valid retirement transaction on-chain. +- Then my DRep registration deposit will be returned to me. + +## 6A: Mobile Responsiveness +**User Story:** As any user of the app, when I am using the app on my mobile phone, I have as good a user experience and functionality as is available to me as on desktop so that I can complete my duties with or without a desktop computer. +### Acceptance Criteria +- Given that I have either a desktop or a mobile. +- When I want to use the app, I can do so on either. +- So that my usage is not limited by my lack of equipment. + +## 6B: Error Message Display +**User Story:** As any user of the app, if something goes wrong, I want an error message to inform me what has gone wrong. +### Acceptance Criteria +- Given that I am expecting the app to respond in a given way. +- When the app cannot respond in the intended way. +- Then the app will provide me with an error message which is as helpful as possible. +- Example: I am not connected to the internet and I press "submit"; this should open the wallet but instead, I get an error message "please connect to the internet before submitting". + +## 6C: Navigation Within the dApp +**User Story:** As any user of the app, if I am on a given page, I should be able to easily navigate to any other page. +### Acceptance Criteria +- Given that I am on a page of the app. +- When I want to navigate to a different page in the app. +- Then there is an easy way for me to do so, such as a menu. + +## 6D: Proper Label and Recognition of the (Testnet) Network +**User Story:** As a user of the app, if I am looking at any page on the UI of the testnet version of the MVP, it is clearly labeled as the testnet version so I know which version of the app I am looking at. +### Acceptance Criteria +- Given that I am using the testnet version of the app. +- When I look at the app. +- Then I can see that I am using the testnet version of the app. + +## 6E: Switch Between Testnet and Mainnet Version for User Testing +**User Story:** As a user of the app, I have access to both a testnet version and a mainnet version of the app so that I can test my votes in a risk-free environment. +### Acceptance Criteria +- Given that I have access to the internet. +- When I visit the web address of the testnet MVP. +- Then I can use the testnet MVP. +- And +- When I visit the web address of the mainnet MVP. +- Then I can use the mainnet MVP. + +# CIP-1694 + +# VOLTAIRE + +## User Story ID: CH.VO.001 +- [ ] Enabler +### Title: As a DRep or Ada Holder I want to connect my wallet to GovTool so that I can post transactions on-chain +### User Story +- As a DRep or Ada Holder I want to connect my wallet to GovTool so that I can post transactions on-chain +### Functional Requirements +|Requirements|Acceptance Criteria| +|:----|:----| +| Connect with multiple stake key wallet | Given I am on the homepage
And my wallet is not connected.
When I click the Connect Wallet button
And select (one of) my CIP-95 compatible wallet(s) with multiple stake keys containing more than zero ADA (or tADA for SanchoNet)
And select from a list which stake key I wish to connect with
Then the wallet will prompt me to connect and I can connect to GovTool with it on the selected stake key. | +| | Given I am on the homepage
And my wallet is not connected
When I click the Connect Wallet button
Then I am not shown any non CIP-95 compatible wallets. | +| | Given I am on the homepage
And my wallet is not connected
When I click the Connect Wallet button and select a CIP-95 compliant, multiple stake key wallet, containing zero ADA (or tADA for SanchoNet)
And I select a wallet with multiple stake keys from this list
Ans select which stake key I wish to connect with
When I select a stake key
Then the wallet will prompt me to connect and I can connect to GovTool with it on the selected stake key. | +| Connect with single stake key wallet | Given I am on the homepage with no wallet connected
When I click the Connect Wallet button and select a CIP-95 compliant single stake key wallet
Then my wallet appears and I can connect with it | +| | Given I am on the homepage without my wallet connected
When I click the Connect Wallet button
Then I am not shown any non CIP-95 compatible wallets. | +| | Given I am on the homepage without my wallet connected
When I click the Connect Wallet button and select a CIP-95 compliant, single stake key wallet, containing zero ADA (or tADA for SanchoNet)
Then my wallet appears and I can connect with it | +| | Given I am on the homepage without my wallet connected
When I click the Connect Wallet button and select a CIP-95 compliant, single stake key wallet, containing more than zero ADA (or tADA for SanchoNet)
Then my wallet appears and I can connect with it | +| Disconnect wallet | Given that I am on the dashboard with my wallet connected
If I click the Disconnect button
Then my wallet is disconnected from GovTool and I am redirected to the homepage | +| | Check the wallet is on the correct network
Given I am on the homepage
When I compare the networkId with the environment value set on the deployment for the network.
Then if there are exceptions raised, fail the test.
If no exceptions, connect the wallet to the network (pass) | + + +### Link: + + +## User Story ID: CH.VO.002 +- [ ] Enabler +### Title: As an Ada Holder I want to delegate my voting power to a DRep so that I can claim my staking rewards +### User Story + - As an Ada Holder I want to delegate my voting power to a DRep so that I can claim my staking rewards +### Functional Requirements +|Requirements|Acceptance Criteria| +|:----|:----| +| Delegate to DRep ID | Given that I have my wallet connected, and I am on the Delegate to DRep page
When I select the delegate to DRep ID option and I enter a DRep ID which has not been registered and I press delegate
Then I will be presented with an error message explaining that the DRep ID was not found | +| | Given that I have my wallet connected, and I am on the delegate to DRep page,
When I choose the Delegate to DRep ID option and I enter a registered DRep ID and I press the Delegate button
Then I am able to delegate to that DRep ID via my connected wallet | +| | Given that I have connected to GovTool with zero* ADA (or tADA in the case of SanchoNet)
When I choose the Delegate to DRep ID option and I enter a registered DRep ID and I press the Delegate button
Then I am presented with a warning message and cannot proceed with delegation.
*or at least a number below transaction costs | +| Access Delegate to DRep page | Given that I do not have a compatible wallet connected to GovTool
When I attempt to visit the URL of the Delegate to DRep page
Then I am redirected to the homepage | +| | Given that I have a compatible wallet connected to GovTool and I am looking at the dashboard
When I click on the the Delegate button (or Change Delegation button if you are already registered)
Then I am shown the Delegate to DRep page | +| Verify DRep behaviour in connected state | Given that I'm not connected to the wallet
When I visit the DRep delegation page, and I click the delegate-connect-wallet-button
Then the connect your wallet-modal is visible | +| Verify DRep behaviour in disconnected state | Given that I have a preset DdRep wallet loaded
Then Delegate button is clicked
Then it is expected that delegation options card is visible
delegate to myself is expected to be visible
Then Other options is clicked
Expect that signal no confidence card and vote abstain cards are visible
Next, delegate to dRep card is clicked, followed by next step button
Then expected that dRep ID input is visible along with delegate button | +| Delegate to myself | Given that I am a registered DRep who is connected to GovTool with my wallet, and I am on the Delegate to DRep page
When I choose the Delegate to DRep ID option and I enter my own DRep ID and I press the Delegate button
Then I am able to delegate to myself via my connected wallet | +| | Given that I am a registered DRep who is connected to GovTool with my wallet, and I am on the Delegate to DRep page
When I select the Delegate to Myself option and press the Delegate button
Then I will be able to send a transaction to delegate to myself via my wallet | +| | Given that I am not a registered DRep, and I am connected to GovTool with my wallet,
When I am on the Delegate to DRep page
I cannot see a Delegate to Myself option | +| Change my DRep delegation | Given that I am I am already delegated to a DRep
When I look at the dashboard
GovTool will know that I am delegated and it will invite me to “change my delegation” rather than to delegate. | +| | Given that I am already delegated
When I go to change my delegation
I can delegate to any registered DRep, If I am delegated to myself then the option to “delegate to myself” will not be shown, If I am delegated to a specific predefined DRep then this predefined option will not be shown | +| Check the validity of a DRep ID | Given that I have selected the “delegate to a DRep ID” option in the delegation user journey.
When I enter anything in the DRep ID input box that is not a registered DRep ID.
Then I will not be able to delegate to this DRep ID and will get a warning message. | +| Delegate to Abstain | Given that I am a DRep
When I delegate using the “delegate to abstain” feature
Then it will only delegate my own lovelace’s voting power to Abstain and NOT the voting power (if any) that has been delegated to me by others. I will be notified that my delegation transaction was sent. | +| | Given that I am not a DRep
When I delegate using the “delegate to abstain” feature
Then it will delegate any voting power I have to Abstain. I will be notified that my delegation transaction was sent | +| Delegate to No-Confidence | Given that I am a DRep
When I delegate using the “delegate to no-confidence” feature
Then it will only delegate my own lovelace’s voting power to No-Confidence and NOT the voting power (if any) that has been delegated to me by others. I will be notified that my delegation transaction was sent. | +| | Given that I am not a DRep
When I delegate using the “delegate to no-confidence” feature
Then it will delegate any voting power I have to No-Confi. I will be notified that my delegation transaction was sent | + + +### Link: + + +## User Story ID: VO3 +- [ ] Enabler +### Title: As a DRep I want to register so that I can vote on governance actions +### User Story + - As a DRep I want to register so that I can vote on governance actions +### Functional Requirements +|Requirements|Acceptance Criteria| +|:----|:----| +| Register as a DRep | Given that I am connected to GovTool with a compatible wallet
When I go through the DRep registration process, and do not include a metadata anchor
Then I can register as a DRep via my wallet (because metadata anchors are optional) | +| | Given that I am connected to GovTool with a compatible wallet
When I go through the DRep registration process, and include metadata anchor information in the wrong format
Then I will not be able to progress further in the process and I will be told that it is because the format is incorrect | +| | Given that I am connected to GovTool with a compatible wallet
When I go through the DRep registration process, and include metadata anchor information in the correct format
Then I will be able to register as a DRep via my wallet, GovTool will include the metadata anchor in the registration certificate transaction. | +| Confirm transaction has been sent | Given that I have gone through the DRep registration process
When I press the button on my wallet to submit the transaction
Then I will receive a confirmation message from GovTool that will include a link to the transaction in a block explorer | +| Status of transaction is displayed | Given that I have just submitted a DRep registration transaction, and I am looking at the dashboard
When the registration has not yet been confirmed by the blockchain,
Then the registration status will show as “In Progress” until it is confirmed | + + +### Link: + + +## User Story ID: CH.VO.004 +- [ ] Enabler +### Title: As a DRep I want to vote so that I can fulfil my role +### User Story + - As a DRep I want to vote so that I can fulfil my role +### Functional Requirements +|Requirements|Acceptance Criteria| +|:----|:----| +| Should be able to access the governance actions page as a DRep with my wallet connected | Given that I am a DRep and I am connected to GovTool
When I visit the url of the governance actions page
Then the governance actions page is displayed | +| | Given that I am a DRep and connected to GovTool
When I look at the governance actions page
Then my voting power is displayed | +| | Given that I am a DRep and Connected to GovTool, and I am on the governance actions page
When I click Disconnect Wallet
Then my wallet is disconnected and I am redirected to the same page, but without the DRep functionality (i.e. ability to vote) | +| | Given that I am a DRep and I am on the governance actions page
When I click on the “view proposal details” button
Then I will be shown the page for that individual governance action and be able to view its details | +| A DRep should be able to vote on a live governance action | Given that I am a DRep
When I look at the details page of an individual governance action
Then I can see how many votes the governance action currently has for, against and abstaining | +| | Given that I am a DRep
When I look at the details page of an individual governance action
Then there are buttons allowing me to vote for, against or abstain. | +| | Given that I am a DRep, on the details page of an individual governance action
When I select yes/ no/ abstain, and click vote
Then I can sign & submit this vote via my wallet | +| | Given that I am a DRep
When I have submitted a vote
Then Immediately after this GovTool will display a message informing me that my transaction has been sent and providing me with a link to a block explorer where I can view the transaction | +| People without the (t)ADA needed to pay for voting transactions should not be able to submit a voting transaction | Given that I do not have a wallet connected to GovTool
When I visit the details of a governance action
Then I am not shown a vote button | +| People without their wallet connected or who do have their wallet connected but have not registered as DReps should not be able to vote | Given that I am on the governance action page
When I examine the governance actions
None of the governance actions shown on the page have expired or been ratified or enacted. | +| No one should be able to vote on a governance action that has expired, or been ratified, or enacted. | Given that I am a DRep and I have already voted on a given governance action
When I submit a different vote for the same transaction within the same snapshot
Then the most recent vote will be counted | +| | Given that I have already cast a vote on a given governance action
When I examine this specific governance action’s page
Then instead of seeing a “vote” button I should see a “change vote” button | +| Only the votes of participants who are still DReps at the relevant epoch boundary will be accepted | Given that I am a DRep and I vote yes or abstain on a live governance action.
At the epoch boundary
My votes are counted | +| | Given that I was a DRep that voted yes or abstain on a live governance action but then retired.
At the next epoch boundary
My votes will not be counted towards the total tally of DRep votes. | +| DReps can attach a metadata anchor to their votes | Given that I have chosen how to vote on the UI of a governance action’s details
When I add a metadata anchor to the UI also and click the vote button
Then the resulting transaction will include my metadata anchor | + + +### Link: + +# SMART CONTRACTS + +## User Story ID: SMC.001 +- [ ] Enabler +### User Story +Write the story here. + +Use as many lines as needed. +### Functional requirements +- FR1 +- FR2 +- FR3 +### Acceptance Criteria +- AC1 +- AC2 +- AC3 + +# SIDE CHAIN + +## User Story ID: SCH.001 +- [ ] Enabler +### User Story +Write the story here. + +Use as many lines as needed. +### Functional requirements +- FR1 +- FR2 +- FR3 +### Acceptance Criteria +- AC1 +- AC2 +- AC3 + +# DAPPS + +## User Story ID: DAPP.001 +- [ ] Enabler +### User Story +Write the story here. + +Use as many lines as needed. +### Functional requirements +- FR1 +- FR2 +- FR3 +### Acceptance Criteria +- AC1 +- AC2 +- AC3 + +# EXCHANGES + +## User Story ID: EX.001 +- [ ] Enabler +### User Story +Write the story here. + +Use as many lines as needed. +### Functional requirements +- FR1 +- FR2 +- FR3 +### Acceptance Criteria +- AC1 +- AC2 +- AC3 + +# OTHER + +## User Story ID: OTHER.001 +- [ ] Enabler +### User Story +Write the story here. + +Use as many lines as needed. +### Functional requirements (n.m) with Associated Criteria (AC n.m.o) +- FR1.1.1 +- AC1.1.1.1 - this is the 1st AC for FR1.1 +- FR1.1.2 +- AC1.1.2.1 - this is the 1st AC for FR1.1 +- AC1.1.2.1 - this is the 1st AC for FR1.1 +- FR1.1.3 +- AC1.1.3.1 - this is the 1st AC for FR1.1 +- AC1.1.3.1 - this is the 1st AC for FR1.1 From 9bba068ffb925a6fecbf4f663900e6b03a70fcae Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Tue, 14 May 2024 14:53:38 +0545 Subject: [PATCH 2/3] Update user stories --- userStoryInventoryChangHF.md | 288 ++++++++++++++++++++++++++++++----- 1 file changed, 249 insertions(+), 39 deletions(-) diff --git a/userStoryInventoryChangHF.md b/userStoryInventoryChangHF.md index 99b3bf0..e5bb5d2 100644 --- a/userStoryInventoryChangHF.md +++ b/userStoryInventoryChangHF.md @@ -26,8 +26,8 @@ This section shows the areas or sources thus far ---
- # PERSONA TYPES + |ID|NAME|DESCRIPTION| |----|:----|:----| |HOLDER | ADA Holder | Someone who owns ADA and is not another persona type, these are usually individuals who delegate their voting power to DReps| @@ -40,77 +40,105 @@ This section shows the areas or sources thus far # VOLTAIRE ## 1A: Single Stake Key as Identity + **User Story:** As an Ada holder or dRep, I want to be able to connect the app to my wallet and use only one stake key at a time so that I can properly manage which dRep I have/will delegate to. + ### Acceptance Criteria + - Given that I am seeking to connect to the app with a wallet account that controls multiple stake keys. - When I seek to connect my wallet to the app. - Then all my stake keys controlled by the wallet will be listed and I will be asked which stake key I wish to use when connected and will be able to select only one option. Once I give permission to the wallet to connect then the app will connect to the wallet. ## 1B: Wallet Connection with Stake Key is Successful + **User Story:** As an Ada holder or dRep, I want to be able to connect the app to my single stake key wallet so that I can transact with the blockchain. + ### Acceptance Criteria + - Given that I am seeking to connect to the app with a wallet account that controls a single stake key and have given the wallet permission to connect. - When I seek to connect my wallet to the app. - Then the app will connect to the app with this stake key. ## 1C: Wallet Disconnection is Successful + **User Story:** As an Ada holder or dRep who has their wallet connected to the app, I want to be able to disconnect my wallet so that my wallet is no longer connected to the app. + ### Acceptance Criteria + - Given that I have my wallet connected to the app. - When I press the disconnect button. - Then my wallet is disconnected from the app. ## 1D: Correct Network on Wallet and dApp + **User Story:** As either an Ada Holder or dRep who is in the act of connecting their wallet to the app, I want the mainnet version of the app to check that the wallet I am connecting with is a mainnet wallet and not connect if it is not a mainnet wallet. + ### Acceptance Criteria + - Given that I have a wallet for a different “net” to the version of the app I am using. - When I attempt to connect that wallet to that app. - The app will refuse to connect and tell me why. ### 1E: Connect Only CIP95 Compatible Wallets + **User Story:** As either an Ada Holder or DRep, I want to be able to connect only the CIP95 compatible wallets. + #### Acceptance Criteria + - Given that I am looking to connect to the app with a wallet. - When I seek to connect my wallet to the app. - Then if I have multiple wallets (CIP95 compatibles & non-compatibles) only CIP95 compatible wallets are listed and I will be asked which wallet to connect. Once I choose the wallet and give permission to the wallet to connect, then the app will connect to the wallet. ## 2A: Show Delegated dRep ID + **User Story:** As an Ada holder or dRep, I want to be able to see the dRep ID of the dRep that I have delegated to so that I know that I have delegated to someone and who I have delegated to. I also know that the delegation has been successful. + ### Acceptance Criteria + - Given that I have connected my wallet to the app and I have delegated to a dRep. - When I look in the top right of my screen on any page. - Then I see a widget that shows the dRep ID of the dRep I delegated to truncated. And by pressing this widget I can copy the dRep ID to clipboard. ## 2B: Dedicated Page for Delegating to a dRep + **User Story:** As an Ada holder, I want to have one page in the app dedicated to delegating to a dRep so that I can easily delegate to a dRep. + ### Acceptance Criteria + - Given that I have the app open. - When I am seeking to delegate to a dRep. - I should be able to access a page dedicated to delegating my voting power to a dRep. -## 2C: dRep Delegation Page on Disconnected State -**User Story:** As an Ada holder who has not connected my wallet to the app, I want to be prompted to connect my wallet to the app if I visit the dRep delegation page so that I can delegate my voting power. +## 2C: DRep Delegation Page on Disconnected State + +**User Story:** As an Ada holder who has not connected my wallet to the app, I want to be prompted to connect my wallet to the app if I visit the dRep delegation page and try to delegate so that I can delegate my voting power. + ### Acceptance Criteria + - Given that I have not connected my wallet to the app. -- When I visit the dRep delegation page. +- When I visit the dRep delegation page and try to delegate. - I should be prompted to connect my wallet. This page should not show me any other functionality until I do. -## 2D: Form on the dRep Delegation Page +## 2D: Delegation options on the dRep Delegation Page + **User Story:** As an Ada holder who has connected their wallet to the app, I want a simple form on the dRep delegation page so that I can delegate to a dRep. + ### Acceptance Criteria + - Given that I have connected my wallet to the app. - When I visit the dRep delegation page. - Then I will see: - A combobox (or combobox style option) with the following options: - Delegate to Abstain - Delegate to No-confidence - - Delegate to dRep ID - - (only if option C is chosen): An input box for inputting the dRep ID of my chosen dRep. - - A button which when pressed submits the delegation data to the wallet. + - List of DRep cards including button to delegate. ## 2E: Delegate to Myself + **User Story:** As a dRep who has connected their wallet to the app, I want a "delegate to myself" option so that I can easily delegate to myself without needing to enter my own dRep ID (thus reducing the chance of error). + ### Acceptance Criteria + - Given that I have connected my wallet to the app. - When I visit the dRep delegation page. - Then I will see: @@ -123,121 +151,153 @@ This section shows the areas or sources thus far - A button which when pressed submits the delegation data to the wallet. ## 2F: Delegate to a Different dRep + **User Story:** As an Ada holder who has already delegated to a dRep, I want a way to redelegate my voting power from my current dRep to a different dRep so that I can change dReps. + ### Acceptance Criteria + - Given that I am an Ada holder who is logged into the app and has delegated their voting power to a dRep. - When I use the delegate to dRep page. - Then I can use it to delegate all my voting power to a different dRep. ## 2G: Retire as dRep + **User Story:** As a dRep, I want to be able to retire so that I can stop being a dRep. + ### Acceptance Criteria + - Given that I am logged into the app. - When I press the retire as dRep button. - Then my wallet asks me to sign the transaction to retire from being a dRep. ## 2H: State After Retiring as dRep + **User Story:** As a retired dRep, I want to be able to confirm that I am no longer registered as a dRep so that I have peace of mind. + ### Acceptance Criteria + - Given that I am logged into the app with the wallet account I used when I registered as a dRep. - When I am on the governance action page. - Then I no longer have the option to vote. Furthermore, on all pages, there is no widget informing me of my dRepID or about how much voting power has been delegated to me. ## 2I: Check Valid dRep ID + **User Story:** As a user of the app, I want to ensure that I am delegating to a valid dRep ID so that I do not make a mistake. + ### Acceptance Criteria + - Given I have my wallet connected to the app. - When I attempt to delegate to a dRep using their dRep ID (such as described in 2D & 2H). I press the button to submit my delegation to the wallet. - Then before the app passes my data to the wallet, it will check it against a list of all registered dRep IDs. If the dRep ID doesn’t exist, It will give an error message to the user and not allow them to delegate to the invalid dRep ID. ## 2J: Prevent Delegation with Insufficient Funds + **User Story:** As either an Ada Holder or DRep, I want to be prevented from delegating when I have insufficient funds. + ### Acceptance Criteria + - Given that I have connected to GovTool with zero ADA (or tADA in the case of SanchoNet). - When I choose the Delegate to DRep ID option and enter a registered DRep ID and press the Delegate button. - Then I am presented with a warning message and cannot proceed with delegation if my balance is zero or below the transaction costs. -## 2K: Redirect to Homepage if Wallet Not Connected -**User Story:** As a user without a compatible wallet connected to GovTool, I want to be redirected to the homepage when attempting to visit the Delegate to DRep page URL. +## 2K: Delegation page should be accessible on disconnected state + +**User Story:** As a user without a compatible wallet connected to GovTool, I want the delegation page to be accessible. + ### Acceptance Criteria + - Given that I do not have a compatible wallet connected to GovTool. - When I attempt to visit the URL of the Delegate to DRep page. -- Then I am redirected to the homepage. +- Then I can see the delegation options. ## 2L: Delegate to Self for Registered DReps + **User Story:** As a registered DRep connected to GovTool with my wallet, I want to be able to delegate to myself via my connected wallet on the Delegate to DRep page. + ### Acceptance Criteria + - Given that I am a registered DRep who is connected to GovTool with my wallet, and I am on the Delegate to DRep page. - When I choose the Delegate to DRep ID option and enter my own DRep ID and press the Delegate button. - Then I am able to delegate to myself via my connected wallet. -## 2M: No Delegate to Self Option for Non-Registered DReps -**User Story:** As a non-registered DRep connected to GovTool with my wallet, I want to be unable to see a Delegate to Myself option on the Delegate to DRep page. -### Acceptance Criteria -- Given that I am not a registered DRep and I am connected to GovTool with my wallet. -- When I am on the Delegate to DRep page. -- Then I cannot see a Delegate to Myself option. ## 2N: Change Delegation Prompt for Users Already Delegated + **User Story:** As a user already delegated to a DRep, I want GovTool to prompt me to "change my delegation" instead of delegating again. + ### Acceptance Criteria + - Given that I am already delegated to a DRep. - When I look at the dashboard. - Then GovTool will recognize that I am delegated and invite me to "change my delegation" rather than to delegate. -## 2O: No Delegate to Self for DReps Already Delegated to Themselves -**User Story:** As a registered DRep and already delegated to myself, I want to be unable to see a Delegate to Myself option on the Delegate to DRep page. -### Acceptance Criteria -- Given that I am a registered DRep and I’ve already delegated to myself. -- When I go to change my delegation. -- Then the option to "delegate to myself" will not be shown. ## 2P: Delegate to Abstain Feature for DReps + **User Story:** As a DRep, I want to be able to delegate using the "delegate to abstain" feature ensuring only my own lovelace's voting power is delegated to Abstain without affecting voting power delegated to me by others. + ### Acceptance Criteria + - Given that I am a DRep. - When I delegate using the "delegate to abstain" feature. - Then only my own lovelace's voting power will be delegated to Abstain excluding any voting power delegated to me by others, and I will be notified that my delegation transaction was sent. ## 2R: Delegate to No-Confidence Feature for DReps + **User Story:** As a DRep, I want to be able to delegate using the "delegate to no-confidence" feature ensuring only my own lovelace's voting power is delegated to No-Confidence without affecting voting power delegated to me by others. + ### Acceptance Criteria + - Given that I am a DRep. - When I delegate using the "delegate to no-confidence" feature. - Then only my own lovelace's voting power will be delegated to No-Confidence, excluding any voting power delegated to me by others. And I will be notified that my delegation transaction was sent. ## 2S: Delegate to No-Confidence Feature for Non-DReps + **User Story:** As a non-DRep user, I want to be able to delegate using the "delegate to no-confidence" feature ensuring any voting power I have is delegated to No-Confidence. + ### Acceptance Criteria + - Given that I am not a DRep. - When I delegate using the "delegate to no-confidence" feature. - Then any voting power I have will be delegated to No-Confidence, and I will be notified that my delegation transaction was sent. - ## 3A: Confirmation of dRep Registration + **User Story:** As a dRep, I want to be able to see if I am registered so that I can confirm my registration. + ### Acceptance Criteria + - Given that I have registered as a dRep. - When I look at any page on the app. - Then I should see a widget at the top right of each page showing the voting power that has been delegated to me and my dRep ID. On the governance action page, I also have the option to cast a vote. ## 3B: Dedicated Page for Registering as a dRep + **User Story:** As a dRep (someone who wants to be a dRep), I want one page dedicated to registering as a dRep so that I can easily register as a dRep. + ### Acceptance Criteria + - Given that I have the app open. - When I am seeking to register as a dRep. - Then I should be able to access a page dedicated to registering as a dRep. ## 3C: Registering as dRep on Disconnected Wallet State + **User Story:** As a dRep (someone who wants to be a dRep) who has not connected their wallet to the app, I want to be prompted to connect my wallet to the app if I try to register as a dRep so that I can register as a dRep. + ### Acceptance Criteria + - Given that I have not logged in to the app. - When I visit the dRep registration page. - Then I should be prompted to log into the app before I can register. I cannot begin the process until I have logged in. ## 3D: Registering as a dRep on Connected Wallet State + **User Story:** As a dRep (someone who wants to be a dRep) who has connected their wallet to the app, I want to be able to register as a dRep so that I can fulfill the duties of a dRep. + ### Acceptance Criteria + - Given that I have logged into the app. - When I visit the dRep registration page. - Then I should be presented with a registration form consisting of: @@ -246,8 +306,11 @@ This section shows the areas or sources thus far - A button for sending this information to the wallet. ## 3E: Validation of dRep Registration Data + **User Story:** As a dRep (someone who wants to be a dRep) who has connected their wallet to the app, I want my registration data to be valid so that my data is readable once it has been stored on the chain. + ### Acceptance Criteria + - Given that I am on the dRep registration page. - If/when I have entered some information into the input box for metadata URL, then it will be checked against the following criteria: - It must be ≤ 64 bytes in length. @@ -260,125 +323,177 @@ This section shows the areas or sources thus far - Then if these criteria are met then I can submit my dRep registration to the wallet. If these criteria are not met then I will not be able to submit data from the form to the wallet and will instead be told which criteria the information I have entered does not meet so that I can rectify it. ## 3F: Wallet Transaction Handling on Registering as a dRep + **User Story:** As a dRep, I want my wallet to handle the signing of the transaction with the data necessary to register me as a dRep, including the payment of any required deposit, so that this submission of data to the blockchain is secure. + ### Acceptance Criteria + - Given that I have entered a URL into the input box for my dRep metadata URL. - When I press the submit button. - Then the app should send the relevant data to the wallet, which should pop up and ask me to sign the relevant transactions. ## 3G: Feedback on dRep Registration Transaction Submission + **User Story:** As a dRep, I want to get some feedback from the app that the transaction has been submitted so that I know I have submitted my dRep registration. + ### Acceptance Criteria + - Given that I have used my wallet to submit my registration to the Cardano blockchain. - When the wallet has done this. - Then I will get confirmation from the app that the registration transaction has been submitted. This will include a link to the transaction on a block explorer. ## 3H: Update dRep Metadata + **User Story:** As a dRep, I want to be able to update my metadata so that my delegates have an accurate representation of what I will do for them. + ### Acceptance Criteria + - Given that I am a registered dRep who is logged into the app. - When I register (again) using the dRep registration page. - Then the app will allow me to register. The data sent to the wallet will supersede the old data when it is stored on the blockchain. ## 3I: Display Registration Status as "In Progress" + **User Story:** As a user who has submitted a DRep registration transaction, I want the registration status to display as "In Progress" on the dashboard until it is confirmed by the blockchain. + ### Acceptance Criteria + - Given that I have just submitted a DRep registration transaction and I am looking at the dashboard. - When the registration has not yet been confirmed by the blockchain. - Then the registration status will show as "In Progress" until it is confirmed. ## 4A: Dedicated Governance Actions Page + **User Story:** As any visitor to the app, when I visit the app I need a dedicated page for viewing governance actions (‘governance actions page’) so I can see what is being proposed. + ### Acceptance Criteria + - Given that I am using the app (whether or not I have my wallet connected to the app). - When I want to view a list of current governance actions. - Then there is a page that will display this to me. ## 4B: No Governance Actions Voting for Ada Holder + **User Story:** As an Ada holder with my wallet connected, when I visit the governance actions page I cannot see any voting functionality so I do not mistakenly think I have the ability to vote. + ### Acceptance Criteria + - Given that I am not a dRep with my wallet connected to the app. - When I look at the governance actions. - There is no suggestion that I have the ability to vote. ## 4C: Filter Actions on Governance Actions Page + **User Story:** As any user of the app, when I view governance actions I want the ability to be able to filter them based on: + - Governance Action type - The epoch that the governance action expires in - Does the number of Constitutional Committee members voting ‘no’ exceed or meet the quorum? (i.e., a veto) - Does the number of Constitutional Committee members voting ‘yes’ exceed or meet the quorum? (i.e., acceptance) - And sort them based on the number of ‘yes’ votes they have been given by dReps. + ### Acceptance Criteria + - Given that I am viewing the governance actions page. - When I want to deduce what governance actions will be important to me. - There is the ability for me to sort and filter governance actions. ## 4D: Default Show Accepted Governance Actions + **User Story:** As any user of the app, when I view the governance actions page the default setting for the filter that tells me if the governance action has been accepted by the Constitutional Committee or not is set to show me those governance actions which have already been accepted. + ### Acceptance Criteria + - Given that I am viewing the governance actions page for the first time since opening the app. - When I look at the governance actions. - Then the only governance actions I can see are the ones that have been accepted by the Constitutional Committee. ## 4E: Display Voting Power for DReps on Governance Actions Page + **User Story:** As a DRep connected to GovTool, I want my voting power to be displayed when I look at the governance actions page. + ### Acceptance Criteria + - Given that I am a DRep and connected to GovTool. - When I look at the governance actions page. - Then my voting power is displayed. ## 4F: Ability to Disconnect Wallet and Disable DRep Functionality + **User Story:** As a DRep connected to GovTool, I want the ability to disconnect my wallet from the platform and temporarily disable DRep functionality. + ### Acceptance Criteria + - Given that I am a DRep and connected to GovTool and I am on the governance actions page. - When I click "Disconnect Wallet". - Then my wallet is disconnected and I am redirected to the same page without DRep functionality enabled, including the ability to vote. ### 4G: View Current Vote Count on Governance Action Details Page + **User Story:** As a DRep, I want to be able to view the current vote count for, against, and abstaining on the details page of an individual governance action. + #### Acceptance Criteria + - Given that I am a DRep. - When I look at the details page of an individual governance action. - Then I can see the current number of votes for, against, and abstaining. ## 4H: Verify That Displayed Governance Actions Have Not Expired + **User Story:** As a user on the governance action page, I want to verify that none of the displayed governance actions have expired, been ratified, or enacted. + ### Acceptance Criteria + - Given that I am on the governance action page. - When I examine the governance actions displayed. - Then none of the governance actions shown on the page have expired, been ratified, or enacted. ## 4I: Count Most Recent Vote in the Same Snapshot + **User Story:** As a DRep, I want my most recent vote to be counted if I submit a different vote for the same transaction within the same snapshot. + ### Acceptance Criteria + - Given that I am a DRep and I have already voted on a given governance action. - When I submit a different vote for the same transaction within the same snapshot. - Then the most recent vote will be counted. ## 4J: Include Metadata Anchor in Voting Transaction + **User Story:** As a user who has chosen how to vote on the UI of a governance action's details, I want to include a metadata anchor when voting and ensure it's included in the resulting transaction. + ### Acceptance Criteria + - Given that I have chosen how to vote on the UI of a governance action's details. - When I add a metadata anchor to the UI and click the vote button. - Then the resulting transaction will include my metadata anchor. ## 5A: Required Information Displayed for Governance Action + **User Story:** As any user, when I look at a governance action it will have the following information displayed so that I can make an informed choice. + ### Acceptance Criteria + - Given that I am viewing the governance actions page. - When I look at a governance action. - Then I can see all the vital information. ## 5B: dRep Can Vote for Governance Action + **User Story:** As a dRep, when I am on the governance action page of the app there will be a vote button so that I can cast a vote. + ### Acceptance Criteria + - Given that I have my wallet connected to the app as a dRep (regardless of whether or not I have voted). - When I look at a governance action. - Then I can see there is a vote button. ## 5C: dRep Can Cast Vote and Reason for Voting + **User Story:** As a dRep, when I click the vote button a modal window will pop up. It will give me the ability to select 'yes', 'no', or 'abstain' as my vote on that governance action. In addition, it will contain a box where I have the option to input the URL of the location where I have stored my reason for voting (a “reason URL input box”) in the way that I have decided to vote. And an input box for the hash of the reason why I voted the way I did (a “reason hash input box”). There will also be a 'Submit' button. + ### Acceptance Criteria + - Given that I have my wallet connected to the app as a dRep. - When I go to vote I have the option to: - Vote ‘yes’, ‘no’, or ‘abstain’. @@ -388,8 +503,11 @@ This section shows the areas or sources thus far - Then I can enter a metadata URL (optional) and select the voting option I believe is right in order to submit casting my vote to the wallet. I can then sign the vote transaction with my wallet to submit it to the blockchain. ## 5D: Reason URL and Reason Hash are Valid + **User Story:** As a dRep, I want the data I have input into the reason URL box and reason hash input box to be valid so that my data is readable once it has been stored on the chain. + ### Acceptance Criteria + - Given that I am in the process of casting my vote on a governance action. - If/when I have entered some information into the reason URL input box then it will be checked against the following criteria: - It must be ≤ 64 bytes in length. @@ -402,100 +520,142 @@ This section shows the areas or sources thus far - Then if these criteria are met then I can submit my vote to the wallet. If these criteria are not met then I will not be able to submit data from the form to the wallet and will instead be told which criteria the information I have entered does not meet so that I can rectify it. ## 5E: dRep Can Recast Their Vote + **User Story:** As a dRep, when I wish to change my mind I can simply recast my vote by voting with different options inputted so that I can react to new information I had not previously considered. + ### Acceptance Criteria + - Given that I am logged in as a dRep. - When I have submitted a vote I can vote again on the same governance action to change how my vote is registered at any time until the governance action expires or is enacted. - Then I won't have to worry about making a mistake. ## 5F: Confirmation of Voting Transaction Successful Submission + **User Story:** As a dRep, when I (via the wallet) have submitted a vote to the blockchain the app will confirm to me that the transaction has been submitted so that I am not confused about the status of my vote. + ### Acceptance Criteria + - Given that I have submitted a vote via my wallet. - When I look at the app. - Then it will tell me that my vote has been submitted and will provide me with a link to the transaction details on a block explorer. ## 5G: Redirect to the Governance Action Page + **User Story:** As any user of the app, when I click on the headline of a governance action I will be redirected in a new browser tab to the URL of the JSON metadata payload of the governance action. + ### Acceptance Criteria + - Given that I am on the governance actions page. - When I want to review the details of the governance action. - Then I will press on the headline to be redirected to the governance action metadata at the location specified by the governance action metadata URL. ## 5H: Warning on Clicking Headline of Governance Action + **User Story:** As any user of the app, when I click on the headline of a governance action BEFORE I am redirected to the JSON metadata payload, I will be warned that the app does not check the hash of the metadata provided against the metadata on chain and the user should do this themselves. + ### Acceptance Criteria + - Given that I want to know that the person who submitted the governance action has not changed the metadata of the governance action. - When I click to visit the metadata of the governance action. - Then I will be warned that I should hash the metadata myself and compare it against the hash that was posted on-chain for that governance action so that I can be sure that the metadata has not been altered. ## 5I: External URL Warning + **User Story:** As any user of the app, before I am redirected to any external web pages outside of the app I will be shown the full URL, warned that external pages could be dangerous and it is at my own risk that I visit them. I will then have to confirm that I want to be redirected. I will not be redirected until I confirm. + ### Acceptance Criteria + - Given that I want to view some externally hosted content which has been linked to in the app (e.g., governance action metadata). - When I click on the link, I will be shown the full URL and asked if I am sure that I want to visit it at my own risk. - Then I will either close the warning or indicate that I want to cancel my action in order to not visit the URL or I will indicate that it’s ok to visit the link and I will be redirected to the URL. ## 5J: External Link Open in a New Tab + **User Story:** As any user of the app, when I click on an external link in the app, the link will open in a separate tab so that I can refer to the information in the app and externally at the same time. + ### Acceptance Criteria + - Given that I click a link to some externally hosted information. - When the external website opens. - Then it will do so in a different tab. ## 5K: View Your Own Vote on Governance Action as dRep + **User Story:** As a dRep, when I view governance actions I can see if and how I have voted on each governance action, so that I can avoid voting multiple times on the same action by mistake. + ### Acceptance Criteria + - Given that I am logged into the app as a dRep. - When I view governance actions, I can see which ones I have personally voted on and how I voted. - Then I can avoid duplicating my votes. ## 5L: No Retirement Option for Non-Registered DReps + **User Story:** As a non-registered DRep, I want to confirm that there is no retirement option available in GovTool. + ### Acceptance Criteria + - Given that I am not registered as a DRep. - When I look for a retirement option in GovTool. - Then there is none available. ## 5M: Return of DRep Registration Deposit Upon Retirement + **User Story:** As a DRep, I want my DRep registration deposit to be returned to me when I register a valid retirement transaction on-chain. + ### Acceptance Criteria + - Given that I am a DRep. - When I register a valid retirement transaction on-chain. - Then my DRep registration deposit will be returned to me. ## 6A: Mobile Responsiveness + **User Story:** As any user of the app, when I am using the app on my mobile phone, I have as good a user experience and functionality as is available to me as on desktop so that I can complete my duties with or without a desktop computer. + ### Acceptance Criteria + - Given that I have either a desktop or a mobile. - When I want to use the app, I can do so on either. - So that my usage is not limited by my lack of equipment. ## 6B: Error Message Display + **User Story:** As any user of the app, if something goes wrong, I want an error message to inform me what has gone wrong. + ### Acceptance Criteria + - Given that I am expecting the app to respond in a given way. - When the app cannot respond in the intended way. - Then the app will provide me with an error message which is as helpful as possible. - Example: I am not connected to the internet and I press "submit"; this should open the wallet but instead, I get an error message "please connect to the internet before submitting". ## 6C: Navigation Within the dApp + **User Story:** As any user of the app, if I am on a given page, I should be able to easily navigate to any other page. + ### Acceptance Criteria + - Given that I am on a page of the app. - When I want to navigate to a different page in the app. - Then there is an easy way for me to do so, such as a menu. ## 6D: Proper Label and Recognition of the (Testnet) Network + **User Story:** As a user of the app, if I am looking at any page on the UI of the testnet version of the MVP, it is clearly labeled as the testnet version so I know which version of the app I am looking at. + ### Acceptance Criteria + - Given that I am using the testnet version of the app. - When I look at the app. - Then I can see that I am using the testnet version of the app. ## 6E: Switch Between Testnet and Mainnet Version for User Testing + **User Story:** As a user of the app, I have access to both a testnet version and a mainnet version of the app so that I can test my votes in a risk-free environment. + ### Acceptance Criteria + - Given that I have access to the internet. - When I visit the web address of the testnet MVP. - Then I can use the testnet MVP. @@ -508,11 +668,17 @@ This section shows the areas or sources thus far # VOLTAIRE ## User Story ID: CH.VO.001 + - [ ] Enabler + ### Title: As a DRep or Ada Holder I want to connect my wallet to GovTool so that I can post transactions on-chain + ### User Story + - As a DRep or Ada Holder I want to connect my wallet to GovTool so that I can post transactions on-chain + ### Functional Requirements + |Requirements|Acceptance Criteria| |:----|:----| | Connect with multiple stake key wallet | Given I am on the homepage
And my wallet is not connected.
When I click the Connect Wallet button
And select (one of) my CIP-95 compatible wallet(s) with multiple stake keys containing more than zero ADA (or tADA for SanchoNet)
And select from a list which stake key I wish to connect with
Then the wallet will prompt me to connect and I can connect to GovTool with it on the selected stake key. | @@ -525,21 +691,25 @@ This section shows the areas or sources thus far | Disconnect wallet | Given that I am on the dashboard with my wallet connected
If I click the Disconnect button
Then my wallet is disconnected from GovTool and I am redirected to the homepage | | | Check the wallet is on the correct network
Given I am on the homepage
When I compare the networkId with the environment value set on the deployment for the network.
Then if there are exceptions raised, fail the test.
If no exceptions, connect the wallet to the network (pass) | - -### Link: - +### Link ## User Story ID: CH.VO.002 + - [ ] Enabler + ### Title: As an Ada Holder I want to delegate my voting power to a DRep so that I can claim my staking rewards + ### User Story - - As an Ada Holder I want to delegate my voting power to a DRep so that I can claim my staking rewards + +- As an Ada Holder I want to delegate my voting power to a DRep so that I can claim my staking rewards + ### Functional Requirements + |Requirements|Acceptance Criteria| |:----|:----| | Delegate to DRep ID | Given that I have my wallet connected, and I am on the Delegate to DRep page
When I select the delegate to DRep ID option and I enter a DRep ID which has not been registered and I press delegate
Then I will be presented with an error message explaining that the DRep ID was not found | | | Given that I have my wallet connected, and I am on the delegate to DRep page,
When I choose the Delegate to DRep ID option and I enter a registered DRep ID and I press the Delegate button
Then I am able to delegate to that DRep ID via my connected wallet | -| | Given that I have connected to GovTool with zero* ADA (or tADA in the case of SanchoNet)
When I choose the Delegate to DRep ID option and I enter a registered DRep ID and I press the Delegate button
Then I am presented with a warning message and cannot proceed with delegation.
*or at least a number below transaction costs | +| | Given that I have connected to GovTool with zero*ADA (or tADA in the case of SanchoNet)
When I choose the Delegate to DRep ID option and I enter a registered DRep ID and I press the Delegate button
Then I am presented with a warning message and cannot proceed with delegation.
*or at least a number below transaction costs | | Access Delegate to DRep page | Given that I do not have a compatible wallet connected to GovTool
When I attempt to visit the URL of the Delegate to DRep page
Then I am redirected to the homepage | | | Given that I have a compatible wallet connected to GovTool and I am looking at the dashboard
When I click on the the Delegate button (or Change Delegation button if you are already registered)
Then I am shown the Delegate to DRep page | | Verify DRep behaviour in connected state | Given that I'm not connected to the wallet
When I visit the DRep delegation page, and I click the delegate-connect-wallet-button
Then the connect your wallet-modal is visible | @@ -555,16 +725,20 @@ This section shows the areas or sources thus far | Delegate to No-Confidence | Given that I am a DRep
When I delegate using the “delegate to no-confidence” feature
Then it will only delegate my own lovelace’s voting power to No-Confidence and NOT the voting power (if any) that has been delegated to me by others. I will be notified that my delegation transaction was sent. | | | Given that I am not a DRep
When I delegate using the “delegate to no-confidence” feature
Then it will delegate any voting power I have to No-Confi. I will be notified that my delegation transaction was sent | - -### Link: - +### Link ## User Story ID: VO3 + - [ ] Enabler + ### Title: As a DRep I want to register so that I can vote on governance actions + ### User Story - - As a DRep I want to register so that I can vote on governance actions + +- As a DRep I want to register so that I can vote on governance actions + ### Functional Requirements + |Requirements|Acceptance Criteria| |:----|:----| | Register as a DRep | Given that I am connected to GovTool with a compatible wallet
When I go through the DRep registration process, and do not include a metadata anchor
Then I can register as a DRep via my wallet (because metadata anchors are optional) | @@ -573,16 +747,20 @@ This section shows the areas or sources thus far | Confirm transaction has been sent | Given that I have gone through the DRep registration process
When I press the button on my wallet to submit the transaction
Then I will receive a confirmation message from GovTool that will include a link to the transaction in a block explorer | | Status of transaction is displayed | Given that I have just submitted a DRep registration transaction, and I am looking at the dashboard
When the registration has not yet been confirmed by the blockchain,
Then the registration status will show as “In Progress” until it is confirmed | - -### Link: - +### Link ## User Story ID: CH.VO.004 + - [ ] Enabler + ### Title: As a DRep I want to vote so that I can fulfil my role + ### User Story - - As a DRep I want to vote so that I can fulfil my role + +- As a DRep I want to vote so that I can fulfil my role + ### Functional Requirements + |Requirements|Acceptance Criteria| |:----|:----| | Should be able to access the governance actions page as a DRep with my wallet connected | Given that I am a DRep and I am connected to GovTool
When I visit the url of the governance actions page
Then the governance actions page is displayed | @@ -601,22 +779,28 @@ This section shows the areas or sources thus far | | Given that I was a DRep that voted yes or abstain on a live governance action but then retired.
At the next epoch boundary
My votes will not be counted towards the total tally of DRep votes. | | DReps can attach a metadata anchor to their votes | Given that I have chosen how to vote on the UI of a governance action’s details
When I add a metadata anchor to the UI also and click the vote button
Then the resulting transaction will include my metadata anchor | - -### Link: +### Link # SMART CONTRACTS ## User Story ID: SMC.001 + - [ ] Enabler + ### User Story + Write the story here. Use as many lines as needed. + ### Functional requirements + - FR1 - FR2 - FR3 + ### Acceptance Criteria + - AC1 - AC2 - AC3 @@ -624,16 +808,23 @@ Use as many lines as needed. # SIDE CHAIN ## User Story ID: SCH.001 + - [ ] Enabler + ### User Story + Write the story here. Use as many lines as needed. + ### Functional requirements + - FR1 - FR2 - FR3 + ### Acceptance Criteria + - AC1 - AC2 - AC3 @@ -641,16 +832,23 @@ Use as many lines as needed. # DAPPS ## User Story ID: DAPP.001 + - [ ] Enabler + ### User Story + Write the story here. Use as many lines as needed. + ### Functional requirements + - FR1 - FR2 - FR3 + ### Acceptance Criteria + - AC1 - AC2 - AC3 @@ -658,16 +856,23 @@ Use as many lines as needed. # EXCHANGES ## User Story ID: EX.001 + - [ ] Enabler + ### User Story + Write the story here. Use as many lines as needed. + ### Functional requirements + - FR1 - FR2 - FR3 + ### Acceptance Criteria + - AC1 - AC2 - AC3 @@ -675,12 +880,17 @@ Use as many lines as needed. # OTHER ## User Story ID: OTHER.001 + - [ ] Enabler + ### User Story + Write the story here. Use as many lines as needed. + ### Functional requirements (n.m) with Associated Criteria (AC n.m.o) + - FR1.1.1 - AC1.1.1.1 - this is the 1st AC for FR1.1 - FR1.1.2 From 535b297c350a5226eba56cdd90bbc6f57b326815 Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Thu, 30 May 2024 17:04:48 +0545 Subject: [PATCH 3/3] Refactor user stories acc. latest tests --- userStoryInventoryChangHF.md | 462 ++++++++++++++++++++--------------- 1 file changed, 266 insertions(+), 196 deletions(-) diff --git a/userStoryInventoryChangHF.md b/userStoryInventoryChangHF.md index e5bb5d2..85b9975 100644 --- a/userStoryInventoryChangHF.md +++ b/userStoryInventoryChangHF.md @@ -13,27 +13,28 @@ Upon agreement on the User Story Inventory, a suitable level of Change Managemen This section shows the areas or sources thus far | Source | Outline Contribution | State | Key Contract | -|-----------------|--------------------------------------------------------------------------|--------------------------|----------------------| +| --------------- | ------------------------------------------------------------------------ | ------------------------ | -------------------- | | CIP-1694 | Blockchain level User Stories on voting, delegation, identity, consensus | Initial Capture Complete | Outreach in progress | | Voltaire | Use Cases for Governance, voting, delegation | Initial Capture Complete | Outreach in progress | | Smart Contracts | Plutus v3 and BLS | Initial Capture Complete | Outreach in progress | | CLI-API | Interface outline and definition | Initial Capture Complete | Outreach in progress | -| Side chains | Interaction with BLS primitives | Outreach in progress | Outreach in progress | +| Side chains | Interaction with BLS primitives | Outreach in progress | Outreach in progress | | DApps | To be defined and elaborated | To be defined | Outreach in progress | | Exchanges | To be defined and elaborated | To be defined | Outreach in progress | | Other | To be defined and elaborated | To be defined | Outreach in progress | --- +
# PERSONA TYPES -|ID|NAME|DESCRIPTION| -|----|:----|:----| -|HOLDER | ADA Holder | Someone who owns ADA and is not another persona type, these are usually individuals who delegate their voting power to DReps| -|DRep | DRep | Anyone can be a DRep. DReps can vote on governance actions, their voting power is equal to the number of Lovelace that is delegated to them | -|CCM | Constitutional Community Member | The Cardano Constitutional Committee exists to allow only the governance actions that are compliant with the Cardano Constitution to be ratified. Each member of this committee gets one vote. | -|SPO | Stake Pool Operator | SPOs run stake pools, they will be able to vote on certain key governance actions, and their voting power will be equal to the amount of Lovelace that is staked with them | +| ID | NAME | DESCRIPTION | +| ------ | :------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| HOLDER | ADA Holder | Someone who owns ADA and is not another persona type, these are usually individuals who delegate their voting power to DReps | +| DRep | DRep | Anyone can be a DRep. DReps can vote on governance actions, their voting power is equal to the number of Lovelace that is delegated to them | +| CCM | Constitutional Community Member | The Cardano Constitutional Committee exists to allow only the governance actions that are compliant with the Cardano Constitution to be ratified. Each member of this committee gets one vote. | +| SPO | Stake Pool Operator | SPOs run stake pools, they will be able to vote on certain key governance actions, and their voting power will be equal to the amount of Lovelace that is staked with them | # User Story (Voltaire, API, CIP-1694, Community et al) @@ -83,7 +84,7 @@ This section shows the areas or sources thus far **User Story:** As either an Ada Holder or DRep, I want to be able to connect only the CIP95 compatible wallets. -#### Acceptance Criteria +### Acceptance Criteria - Given that I am looking to connect to the app with a wallet. - When I seek to connect my wallet to the app. @@ -96,8 +97,8 @@ This section shows the areas or sources thus far ### Acceptance Criteria - Given that I have connected my wallet to the app and I have delegated to a dRep. -- When I look in the top right of my screen on any page. -- Then I see a widget that shows the dRep ID of the dRep I delegated to truncated. And by pressing this widget I can copy the dRep ID to clipboard. +- When I look on Dashboard and DRep directory. +- Then I see a widget that shows the dRep ID of the dRep I delegated to truncated. ## 2B: Dedicated Page for Delegating to a dRep @@ -119,40 +120,35 @@ This section shows the areas or sources thus far - When I visit the dRep delegation page and try to delegate. - I should be prompted to connect my wallet. This page should not show me any other functionality until I do. -## 2D: Delegation options on the dRep Delegation Page +## 2D: Delegation options on the DRep directory page -**User Story:** As an Ada holder who has connected their wallet to the app, I want a simple form on the dRep delegation page so that I can delegate to a dRep. +**User Story:** As an Ada holder who has connected their wallet to the app, I want delegation options on the dRep registration page so that I can delegate. ### Acceptance Criteria - Given that I have connected my wallet to the app. -- When I visit the dRep delegation page. +- When I visit the dRep directory page. - Then I will see: - - A combobox (or combobox style option) with the following options: - - Delegate to Abstain - - Delegate to No-confidence + - A dropdown with the following options: + - Abstain from Every Vote + - Signal No Confidence on Every Vote - List of DRep cards including button to delegate. ## 2E: Delegate to Myself -**User Story:** As a dRep who has connected their wallet to the app, I want a "delegate to myself" option so that I can easily delegate to myself without needing to enter my own dRep ID (thus reducing the chance of error). +**User Story:** As a dRep who has connected their wallet to the app, I want a "Become a Direct Voter" option so that I can easily delegate to myself without needing to enter my own dRep ID (thus reducing the chance of error). ### Acceptance Criteria - Given that I have connected my wallet to the app. -- When I visit the dRep delegation page. +- When I visit the dashboard page. - Then I will see: - - A combobox (or combobox style option) with the following options: - - Delegate to Abstain - - Delegate to No-confidence - - Delegate to dRep ID - - Delegate to myself - - (only if option C is chosen): An input box for inputting the dRep ID of my chosen dRep. - - A button which when pressed submits the delegation data to the wallet. + - "Become a Direct voter" card. + - Inside the card, a button that, when pressed navigates to the 'register_as_direct_voter' page and on continue, it submits direct voter transaction to wallet ## 2F: Delegate to a Different dRep -**User Story:** As an Ada holder who has already delegated to a dRep, I want a way to redelegate my voting power from my current dRep to a different dRep so that I can change dReps. +**User Story:** As an Ada holder who has already delegated to a dRep, I want a way to re-delegate my voting power from my current dRep to a different dRep so that I can change dReps. ### Acceptance Criteria @@ -160,107 +156,168 @@ This section shows the areas or sources thus far - When I use the delegate to dRep page. - Then I can use it to delegate all my voting power to a different dRep. -## 2G: Retire as dRep +## 2G: Delegate to Self for Registered DReps -**User Story:** As a dRep, I want to be able to retire so that I can stop being a dRep. +**User Story:** As a registered DRep connected to GovTool with my wallet, I want to be able to delegate to myself via my connected wallet on the DRep directory page. ### Acceptance Criteria -- Given that I am logged into the app. -- When I press the retire as dRep button. -- Then my wallet asks me to sign the transaction to retire from being a dRep. +- Given that I am a registered DRep who is connected to GovTool with my wallet, and I am on the DRep directory page. +- When I search my own DRep ID and press the Delegate button. +- Then I am able to delegate to myself via my connected wallet. -## 2H: State After Retiring as dRep +## 2H: Change Delegation Prompt for Users Already Delegated -**User Story:** As a retired dRep, I want to be able to confirm that I am no longer registered as a dRep so that I have peace of mind. +**User Story:** As a user already delegated to a DRep, I want GovTool to prompt me to "change my delegation" instead of delegating again. ### Acceptance Criteria -- Given that I am logged into the app with the wallet account I used when I registered as a dRep. -- When I am on the governance action page. -- Then I no longer have the option to vote. Furthermore, on all pages, there is no widget informing me of my dRepID or about how much voting power has been delegated to me. +- Given that I am already delegated to a DRep. +- When I look at the dashboard. +- Then GovTool will recognize that I am delegated and invite me to "change my delegation" rather than to delegate. ## 2I: Check Valid dRep ID -**User Story:** As a user of the app, I want to ensure that I am delegating to a valid dRep ID so that I do not make a mistake. +**User Story:** As a user of the app, I want to ensure that only registered dReps are listed. ### Acceptance Criteria - Given I have my wallet connected to the app. -- When I attempt to delegate to a dRep using their dRep ID (such as described in 2D & 2H). I press the button to submit my delegation to the wallet. -- Then before the app passes my data to the wallet, it will check it against a list of all registered dRep IDs. If the dRep ID doesn’t exist, It will give an error message to the user and not allow them to delegate to the invalid dRep ID. +- When I search for a registered dRep by ID in dRep directory. +- Then the search results should display the dRep. + +## 2J: Search dRep ID + +**User Story:** As a user of the app, I want to search for DReps. + +### Acceptance Criteria + +- Given I have my wallet connected to the app. +- When I search for a dRep by ID in dRep directory. +- Then the search results should display. + +## 2K. Filter and sort DReps -## 2J: Prevent Delegation with Insufficient Funds +**User Story:** As any user of the app, when I view dReps I want the ability to be able to filter them based on: -**User Story:** As either an Ada Holder or DRep, I want to be prevented from delegating when I have insufficient funds. +- Active, Inactive, and Retired. +- And sort them based on the RegistrationDate, VotingPower, and Status. ### Acceptance Criteria -- Given that I have connected to GovTool with zero ADA (or tADA in the case of SanchoNet). -- When I choose the Delegate to DRep ID option and enter a registered DRep ID and press the Delegate button. -- Then I am presented with a warning message and cannot proceed with delegation if my balance is zero or below the transaction costs. +- Given that I am viewing the dRep directory page. +- When I want to deduce which dReps will be important to me. +- There is the ability for me to sort and filter dReps. -## 2K: Delegation page should be accessible on disconnected state +## 2L. Copy DRep ID -**User Story:** As a user without a compatible wallet connected to GovTool, I want the delegation page to be accessible. +**User Story:** As an Ada Holder already delegated to DRep, I want to be able to copy the DRep ID to which I have delegated. + +### Acceptance Criteria + +- Given that I am an Ada Holder. +- And I've already delegated to a DRep. +- Then I should see the DRep ID, and upon clicking on it, I should be able to copy the DRep ID. + +## 2M: Delegation page should be accessible on disconnected state + +**User Story:** As a user without a compatible wallet connected to GovTool, I want the dRep directory page to be accessible. ### Acceptance Criteria - Given that I do not have a compatible wallet connected to GovTool. -- When I attempt to visit the URL of the Delegate to DRep page. +- When I attempt to visit the URL of the DRep directory. - Then I can see the delegation options. -## 2L: Delegate to Self for Registered DReps +## 2N: DRep information -**User Story:** As a registered DRep connected to GovTool with my wallet, I want to be able to delegate to myself via my connected wallet on the Delegate to DRep page. +**User Story:** As a user, when i register as a dRep with proper information, after successful registration, I want to see my correct information should be displayed. ### Acceptance Criteria -- Given that I am a registered DRep who is connected to GovTool with my wallet, and I am on the Delegate to DRep page. -- When I choose the Delegate to DRep ID option and enter my own DRep ID and press the Delegate button. -- Then I am able to delegate to myself via my connected wallet. +- Given that I am a user. +- And I register as a DRep. +- When i view my details by searching on dRep directory page, I should be able to see my correct information. +## 2O: Load more DReps -## 2N: Change Delegation Prompt for Users Already Delegated +**User Story:** As a user, I want to load more dReps in list to view additional dReps. -**User Story:** As a user already delegated to a DRep, I want GovTool to prompt me to "change my delegation" instead of delegating again. +### Acceptance Criteria + +- Given that I am a user. +- When I click on the "Show More" button. +- I should be able to see more dReps loaded. + +## 2P. Share DRep details + +**User Story:** As a user, I want to see share dRep details. ### Acceptance Criteria -- Given that I am already delegated to a DRep. -- When I look at the dashboard. -- Then GovTool will recognize that I am delegated and invite me to "change my delegation" rather than to delegate. +- Given that I am a user +- I'm in DRep directory page, And view dRep details. +- Then I should be able to share the dRep details. +## 2Q. DRep information (status, voting power) on card + +**User Story:** As a user, I want to see status and voting power of DRep in dRep card. + +### Acceptance Criteria -## 2P: Delegate to Abstain Feature for DReps +- Given that I am a user +- I'm in DRep directory page. +- Then I should see the dRep status and voting power displayed on the dRep card. -**User Story:** As a DRep, I want to be able to delegate using the "delegate to abstain" feature ensuring only my own lovelace's voting power is delegated to Abstain without affecting voting power delegated to me by others. +## 2R: Warning message for new delegation transaction + +**User Story:** As an Ada Holder or DRep, I want to see a warning message if I attempt to process a new delegation while another delegation is already in progress. ### Acceptance Criteria -- Given that I am a DRep. -- When I delegate using the "delegate to abstain" feature. -- Then only my own lovelace's voting power will be delegated to Abstain excluding any voting power delegated to me by others, and I will be notified that my delegation transaction was sent. +- Given that I am an Ada Holder or DRep. +- I delegate to a dRep, and attempt to initiate another delegation. +- Then I should be shown a modal indicating that a previous delegation transaction is already in progress. -## 2R: Delegate to No-Confidence Feature for DReps +## 2S: Direct voter retirement on delegating to another DRep -**User Story:** As a DRep, I want to be able to delegate using the "delegate to no-confidence" feature ensuring only my own lovelace's voting power is delegated to No-Confidence without affecting voting power delegated to me by others. +**User Story:** As a Direct voter, I want to retire from Direct voter on delegating to another DRep. ### Acceptance Criteria -- Given that I am a DRep. -- When I delegate using the "delegate to no-confidence" feature. -- Then only my own lovelace's voting power will be delegated to No-Confidence, excluding any voting power delegated to me by others. And I will be notified that my delegation transaction was sent. +- Given that I am a Direct voter. +- When I delegate to another dRep. +- Then I should be retired from Direct voter. -## 2S: Delegate to No-Confidence Feature for Non-DReps +## 2T: Warning message for insufficient funds -**User Story:** As a non-DRep user, I want to be able to delegate using the "delegate to no-confidence" feature ensuring any voting power I have is delegated to No-Confidence. +**User Story:** As an Ada Holder, I should not be able to perform delegation if I have insufficient fund. ### Acceptance Criteria -- Given that I am not a DRep. +- Given that I am an Ada Holder. +- And I do not have enough fund for delegation. +- Then I should be shown an error indicating insufficient funds. + +## 2U: Delegate to Abstain Feature + +**User Story:** As a Ada older, I want to be able to delegate using the "delegate to abstain" feature. ensuring my lovelace's voting power is delegated to Abstain. + +### Acceptance Criteria + +- Given that I am a Ada Holder. +- When I delegate using the "delegate to abstain" feature. +- Then my lovelace's voting power will be delegated to Abstain and I will be notified that my delegation transaction was sent. + +## 2V: Delegate to No-Confidence Feature + +**User Story:** As a Ada Holder, I want to be able to delegate using the "delegate to no-confidence" feature ensuring my lovelace's voting power is delegated to No-Confidence. + +### Acceptance Criteria + +- Given that I am a DRep. - When I delegate using the "delegate to no-confidence" feature. -- Then any voting power I have will be delegated to No-Confidence, and I will be notified that my delegation transaction was sent. +- Then my own lovelace's voting power will be delegated to No-Confidence, And I will be notified that my delegation transaction was sent. ## 3A: Confirmation of dRep Registration @@ -301,26 +358,34 @@ This section shows the areas or sources thus far - Given that I have logged into the app. - When I visit the dRep registration page. - Then I should be presented with a registration form consisting of: - - An input box for my dRep metadata URL. - - An input box for a hash of my dRep metadata. - - A button for sending this information to the wallet. + - An input box for my dRep name URL. + - An input box for email. + - An input box for bio. + - An input box for link. + - A button for add new link. + - A button for continue registration process. -## 3E: Validation of dRep Registration Data +## 3E: Validation of dRep Registration Form -**User Story:** As a dRep (someone who wants to be a dRep) who has connected their wallet to the app, I want my registration data to be valid so that my data is readable once it has been stored on the chain. +**User Story:** As a dRep (someone who wants to be a dRep) who has connected their wallet to the app, I want my registration form to be valid so that i will be able to submit the registration form. ### Acceptance Criteria - Given that I am on the dRep registration page. -- If/when I have entered some information into the input box for metadata URL, then it will be checked against the following criteria: - - It must be ≤ 64 bytes in length. - - It must be UTF-8 compatible OR - - It must be empty. -- And if/when I have entered some information into the input box for the hash of my metadata URL, then it should be checked against the following criteria: - - It must be 32 bytes in length. - - It must be UTF-8 compatible OR - - It must be empty. -- Then if these criteria are met then I can submit my dRep registration to the wallet. If these criteria are not met then I will not be able to submit data from the form to the wallet and will instead be told which criteria the information I have entered does not meet so that I can rectify it. +- If/When I have entered some information into the input box for name, then it will be checked against the following criteria: + - It must be ≤ 80 words + - It must not be empty + - It must not contain white space +- If/When I have entered some information into the input box for email, then it will be checked against the following criteria: + - It must be a valid email + - It must be empty +- If/When I have entered some information into the input box for bio, then it will be checked against the following criteria: + - It must be ≤ 500 words + - It must be empty +- If/When I have entered some information into the input box for link, then it will be checked against the following criteria: + - It must be a valid link + - It must be empty +- Then if these criteria are met then I will be navigate to the next step. If these criteria are not met then I will not be able to navigate for further registration process will instead be told which criteria the information I have entered does not meet so that I can rectify it. ## 3F: Wallet Transaction Handling on Registering as a dRep @@ -328,7 +393,9 @@ This section shows the areas or sources thus far ### Acceptance Criteria -- Given that I have entered a URL into the input box for my dRep metadata URL. +- Given that I have fill up the valid information. +- I will able to click the continue button for metadata validation +- Then I have fill up the valid information into the input box for my dRep metadata URL. - When I press the submit button. - Then the app should send the relevant data to the wallet, which should pop up and ask me to sign the relevant transactions. @@ -349,12 +416,12 @@ This section shows the areas or sources thus far ### Acceptance Criteria - Given that I am a registered dRep who is logged into the app. -- When I register (again) using the dRep registration page. -- Then the app will allow me to register. The data sent to the wallet will supersede the old data when it is stored on the blockchain. +- When I view and edit dRep data using the dRep details page. +- Then the app will allow me to update and submit the information. The data sent to the wallet will supersede the old data when it is stored on the blockchain. ## 3I: Display Registration Status as "In Progress" -**User Story:** As a user who has submitted a DRep registration transaction, I want the registration status to display as "In Progress" on the dashboard until it is confirmed by the blockchain. +**User Story:** As a user who has submitted a dRep registration transaction, I want the registration status to display as "In Progress" on the dashboard until it is confirmed by the blockchain. ### Acceptance Criteria @@ -362,6 +429,26 @@ This section shows the areas or sources thus far - When the registration has not yet been confirmed by the blockchain. - Then the registration status will show as "In Progress" until it is confirmed. +## 3J: Retire as dRep + +**User Story:** As a dRep, I want to be able to retire so that I can stop being a dRep. + +### Acceptance Criteria + +- Given that I am logged into the app. +- When I press the retire as dRep button. +- Then I will be navigated to retire_as_dRep page and upon continue my wallet asks me to sign the transaction to retire from being a dRep. + +## 3K: State After Retiring as dRep + +**User Story:** As a retired dRep, I want to be able to confirm that I am no longer registered as a dRep so that I have peace of mind. + +### Acceptance Criteria + +- Given that I am logged into the app with the wallet account I used when I registered as a dRep. +- When I am on the governance action page. +- Then I no longer have the option to vote. Furthermore, on all pages, there is no widget informing me of my dRepID or about how much voting power has been delegated to me. + ## 4A: Dedicated Governance Actions Page **User Story:** As any visitor to the app, when I visit the app I need a dedicated page for viewing governance actions (‘governance actions page’) so I can see what is being proposed. @@ -382,15 +469,12 @@ This section shows the areas or sources thus far - When I look at the governance actions. - There is no suggestion that I have the ability to vote. -## 4C: Filter Actions on Governance Actions Page +## 4C: Filter and Actions on Governance Actions Page **User Story:** As any user of the app, when I view governance actions I want the ability to be able to filter them based on: -- Governance Action type -- The epoch that the governance action expires in -- Does the number of Constitutional Committee members voting ‘no’ exceed or meet the quorum? (i.e., a veto) -- Does the number of Constitutional Committee members voting ‘yes’ exceed or meet the quorum? (i.e., acceptance) -- And sort them based on the number of ‘yes’ votes they have been given by dReps. +- Governance Action types +- And sort them based on Soon to expire, Newest governance actions, and the highest amount of ‘yes’ votes they have been given by dReps. ### Acceptance Criteria @@ -458,19 +542,26 @@ This section shows the areas or sources thus far - When I submit a different vote for the same transaction within the same snapshot. - Then the most recent vote will be counted. -## 4J: Include Metadata Anchor in Voting Transaction +## 4J: Include Context in Voting Transaction **User Story:** As a user who has chosen how to vote on the UI of a governance action's details, I want to include a metadata anchor when voting and ensure it's included in the resulting transaction. ### Acceptance Criteria - Given that I have chosen how to vote on the UI of a governance action's details. -- When I add a metadata anchor to the UI and click the vote button. -- Then the resulting transaction will include my metadata anchor. +- When I provide context to the UI and click the vote button. +- Then the resulting transaction will include my context. ## 5A: Required Information Displayed for Governance Action -**User Story:** As any user, when I look at a governance action it will have the following information displayed so that I can make an informed choice. +**User Story:** As any user, when I look at a governance action it will have the following information displayed: + +- Governance action type +- Submission date +- Expiry date +- Context button +- Votes +- Governance action id ### Acceptance Criteria @@ -490,17 +581,16 @@ This section shows the areas or sources thus far ## 5C: dRep Can Cast Vote and Reason for Voting -**User Story:** As a dRep, when I click the vote button a modal window will pop up. It will give me the ability to select 'yes', 'no', or 'abstain' as my vote on that governance action. In addition, it will contain a box where I have the option to input the URL of the location where I have stored my reason for voting (a “reason URL input box”) in the way that I have decided to vote. And an input box for the hash of the reason why I voted the way I did (a “reason hash input box”). There will also be a 'Submit' button. +**User Story:** As a dRep, when I navigate to the governance action details page. It will give me the ability to select 'yes', 'no', or 'abstain' as my vote on that governance action. In additional it will contain the button for provide the context about the vote. There will also be a 'VOTE' button. ### Acceptance Criteria - Given that I have my wallet connected to the app as a dRep. -- When I go to vote I have the option to: +- When I go to governance action details page I have the option to: - Vote ‘yes’, ‘no’, or ‘abstain’. - - Provide a URL to the JSON file where I have stored my reason for voting in the way that I did AKA a metadata URL. - - Provide a hash of the aforementioned JSON file. - - (Points 2 & 3 are optional for casting a vote.) -- Then I can enter a metadata URL (optional) and select the voting option I believe is right in order to submit casting my vote to the wallet. I can then sign the vote transaction with my wallet to submit it to the blockchain. + - Button for provide about the vote + - Button for cast vote +- Then I can provide voting context and select the voting option I believe is right in order to submit casting my vote to the wallet. I can then sign the vote transaction with my wallet to submit it to the blockchain. ## 5D: Reason URL and Reason Hash are Valid @@ -539,47 +629,27 @@ This section shows the areas or sources thus far - When I look at the app. - Then it will tell me that my vote has been submitted and will provide me with a link to the transaction details on a block explorer. -## 5G: Redirect to the Governance Action Page - -**User Story:** As any user of the app, when I click on the headline of a governance action I will be redirected in a new browser tab to the URL of the JSON metadata payload of the governance action. - -### Acceptance Criteria - -- Given that I am on the governance actions page. -- When I want to review the details of the governance action. -- Then I will press on the headline to be redirected to the governance action metadata at the location specified by the governance action metadata URL. - -## 5H: Warning on Clicking Headline of Governance Action - -**User Story:** As any user of the app, when I click on the headline of a governance action BEFORE I am redirected to the JSON metadata payload, I will be warned that the app does not check the hash of the metadata provided against the metadata on chain and the user should do this themselves. - -### Acceptance Criteria - -- Given that I want to know that the person who submitted the governance action has not changed the metadata of the governance action. -- When I click to visit the metadata of the governance action. -- Then I will be warned that I should hash the metadata myself and compare it against the hash that was posted on-chain for that governance action so that I can be sure that the metadata has not been altered. - -## 5I: External URL Warning +## 5G: External URL Warning on Data not Verifiable and Incorrectly Formatted Proposal -**User Story:** As any user of the app, before I am redirected to any external web pages outside of the app I will be shown the full URL, warned that external pages could be dangerous and it is at my own risk that I visit them. I will then have to confirm that I want to be redirected. I will not be redirected until I confirm. +**User Story:** As any user of the app, before I am redirected to any external web pages of incorrectly formatted proposal outside of the app I will be shown the full URL, warned that external pages could be dangerous and it is at my own risk that I visit them. I will then have to confirm that I want to be redirected. I will not be redirected until I confirm. ### Acceptance Criteria -- Given that I want to view some externally hosted content which has been linked to in the app (e.g., governance action metadata). +- Given that I want to view some externally hosted information of incorrectly formated proposal. - When I click on the link, I will be shown the full URL and asked if I am sure that I want to visit it at my own risk. - Then I will either close the warning or indicate that I want to cancel my action in order to not visit the URL or I will indicate that it’s ok to visit the link and I will be redirected to the URL. -## 5J: External Link Open in a New Tab +## 5H: External Link Open in a New Tab on Data not Verifiable and Incorrectly Formatted Proposal -**User Story:** As any user of the app, when I click on an external link in the app, the link will open in a separate tab so that I can refer to the information in the app and externally at the same time. +**User Story:** As any user of the app, when I click on an external link in incorrectly formatted proposal, the link will open in a separate tab so that I can refer to the information in the app and externally at the same time. ### Acceptance Criteria -- Given that I click a link to some externally hosted information. +- Given that I click a link to some externally hosted information of incorrectly formated proposal. - When the external website opens. - Then it will do so in a different tab. -## 5K: View Your Own Vote on Governance Action as dRep +## 5I: View Your Own Vote on Governance Action as dRep **User Story:** As a dRep, when I view governance actions I can see if and how I have voted on each governance action, so that I can avoid voting multiple times on the same action by mistake. @@ -589,7 +659,7 @@ This section shows the areas or sources thus far - When I view governance actions, I can see which ones I have personally voted on and how I voted. - Then I can avoid duplicating my votes. -## 5L: No Retirement Option for Non-Registered DReps +## 5J: No Retirement Option for Non-Registered DReps **User Story:** As a non-registered DRep, I want to confirm that there is no retirement option available in GovTool. @@ -599,7 +669,7 @@ This section shows the areas or sources thus far - When I look for a retirement option in GovTool. - Then there is none available. -## 5M: Return of DRep Registration Deposit Upon Retirement +## 5K: Return of DRep Registration Deposit Upon Retirement **User Story:** As a DRep, I want my DRep registration deposit to be returned to me when I register a valid retirement transaction on-chain. @@ -667,7 +737,7 @@ This section shows the areas or sources thus far # VOLTAIRE -## User Story ID: CH.VO.001 +## User Story ID: CH.VO.001 - [ ] Enabler @@ -679,21 +749,21 @@ This section shows the areas or sources thus far ### Functional Requirements -|Requirements|Acceptance Criteria| -|:----|:----| -| Connect with multiple stake key wallet | Given I am on the homepage
And my wallet is not connected.
When I click the Connect Wallet button
And select (one of) my CIP-95 compatible wallet(s) with multiple stake keys containing more than zero ADA (or tADA for SanchoNet)
And select from a list which stake key I wish to connect with
Then the wallet will prompt me to connect and I can connect to GovTool with it on the selected stake key. | -| | Given I am on the homepage
And my wallet is not connected
When I click the Connect Wallet button
Then I am not shown any non CIP-95 compatible wallets. | -| | Given I am on the homepage
And my wallet is not connected
When I click the Connect Wallet button and select a CIP-95 compliant, multiple stake key wallet, containing zero ADA (or tADA for SanchoNet)
And I select a wallet with multiple stake keys from this list
Ans select which stake key I wish to connect with
When I select a stake key
Then the wallet will prompt me to connect and I can connect to GovTool with it on the selected stake key. | -| Connect with single stake key wallet | Given I am on the homepage with no wallet connected
When I click the Connect Wallet button and select a CIP-95 compliant single stake key wallet
Then my wallet appears and I can connect with it | -| | Given I am on the homepage without my wallet connected
When I click the Connect Wallet button
Then I am not shown any non CIP-95 compatible wallets. | -| | Given I am on the homepage without my wallet connected
When I click the Connect Wallet button and select a CIP-95 compliant, single stake key wallet, containing zero ADA (or tADA for SanchoNet)
Then my wallet appears and I can connect with it | -| | Given I am on the homepage without my wallet connected
When I click the Connect Wallet button and select a CIP-95 compliant, single stake key wallet, containing more than zero ADA (or tADA for SanchoNet)
Then my wallet appears and I can connect with it | -| Disconnect wallet | Given that I am on the dashboard with my wallet connected
If I click the Disconnect button
Then my wallet is disconnected from GovTool and I am redirected to the homepage | -| | Check the wallet is on the correct network
Given I am on the homepage
When I compare the networkId with the environment value set on the deployment for the network.
Then if there are exceptions raised, fail the test.
If no exceptions, connect the wallet to the network (pass) | +| Requirements | Acceptance Criteria | +| :------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Connect with multiple stake key wallet | Given I am on the homepage
And my wallet is not connected.
When I click the Connect Wallet button
And select (one of) my CIP-95 compatible wallet(s) with multiple stake keys containing more than zero ADA (or tADA for SanchoNet)
And select from a list which stake key I wish to connect with
Then the wallet will prompt me to connect and I can connect to GovTool with it on the selected stake key. | +| | Given I am on the homepage
And my wallet is not connected
When I click the Connect Wallet button
Then I am not shown any non CIP-95 compatible wallets. | +| | Given I am on the homepage
And my wallet is not connected
When I click the Connect Wallet button and select a CIP-95 compliant, multiple stake key wallet, containing zero ADA (or tADA for SanchoNet)
And I select a wallet with multiple stake keys from this list
Ans select which stake key I wish to connect with
When I select a stake key
Then the wallet will prompt me to connect and I can connect to GovTool with it on the selected stake key. | +| Connect with single stake key wallet | Given I am on the homepage with no wallet connected
When I click the Connect Wallet button and select a CIP-95 compliant single stake key wallet
Then my wallet appears and I can connect with it | +| | Given I am on the homepage without my wallet connected
When I click the Connect Wallet button
Then I am not shown any non CIP-95 compatible wallets. | +| | Given I am on the homepage without my wallet connected
When I click the Connect Wallet button and select a CIP-95 compliant, single stake key wallet, containing zero ADA (or tADA for SanchoNet)
Then my wallet appears and I can connect with it | +| | Given I am on the homepage without my wallet connected
When I click the Connect Wallet button and select a CIP-95 compliant, single stake key wallet, containing more than zero ADA (or tADA for SanchoNet)
Then my wallet appears and I can connect with it | +| Disconnect wallet | Given that I am on the dashboard with my wallet connected
If I click the Disconnect button
Then my wallet is disconnected from GovTool and I am redirected to the homepage | +| | Check the wallet is on the correct network
Given I am on the homepage
When I compare the networkId with the environment value set on the deployment for the network.
Then if there are exceptions raised, fail the test.
If no exceptions, connect the wallet to the network (pass) | ### Link -## User Story ID: CH.VO.002 +## User Story ID: CH.VO.002 - [ ] Enabler @@ -705,25 +775,25 @@ This section shows the areas or sources thus far ### Functional Requirements -|Requirements|Acceptance Criteria| -|:----|:----| -| Delegate to DRep ID | Given that I have my wallet connected, and I am on the Delegate to DRep page
When I select the delegate to DRep ID option and I enter a DRep ID which has not been registered and I press delegate
Then I will be presented with an error message explaining that the DRep ID was not found | -| | Given that I have my wallet connected, and I am on the delegate to DRep page,
When I choose the Delegate to DRep ID option and I enter a registered DRep ID and I press the Delegate button
Then I am able to delegate to that DRep ID via my connected wallet | -| | Given that I have connected to GovTool with zero*ADA (or tADA in the case of SanchoNet)
When I choose the Delegate to DRep ID option and I enter a registered DRep ID and I press the Delegate button
Then I am presented with a warning message and cannot proceed with delegation.
*or at least a number below transaction costs | -| Access Delegate to DRep page | Given that I do not have a compatible wallet connected to GovTool
When I attempt to visit the URL of the Delegate to DRep page
Then I am redirected to the homepage | -| | Given that I have a compatible wallet connected to GovTool and I am looking at the dashboard
When I click on the the Delegate button (or Change Delegation button if you are already registered)
Then I am shown the Delegate to DRep page | -| Verify DRep behaviour in connected state | Given that I'm not connected to the wallet
When I visit the DRep delegation page, and I click the delegate-connect-wallet-button
Then the connect your wallet-modal is visible | +| Requirements | Acceptance Criteria | +| :------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Delegate to DRep ID | Given that I have my wallet connected, and I am on the Delegate to DRep page
When I select the delegate to DRep ID option and I enter a DRep ID which has not been registered and I press delegate
Then I will be presented with an error message explaining that the DRep ID was not found | +| | Given that I have my wallet connected, and I am on the delegate to DRep page,
When I choose the Delegate to DRep ID option and I enter a registered DRep ID and I press the Delegate button
Then I am able to delegate to that DRep ID via my connected wallet | +| | Given that I have connected to GovTool with zero*ADA (or tADA in the case of SanchoNet)
When I choose the Delegate to DRep ID option and I enter a registered DRep ID and I press the Delegate button
Then I am presented with a warning message and cannot proceed with delegation.
*or at least a number below transaction costs | +| Access Delegate to DRep page | Given that I do not have a compatible wallet connected to GovTool
When I attempt to visit the URL of the Delegate to DRep page
Then I am redirected to the homepage | +| | Given that I have a compatible wallet connected to GovTool and I am looking at the dashboard
When I click on the the Delegate button (or Change Delegation button if you are already registered)
Then I am shown the Delegate to DRep page | +| Verify DRep behaviour in connected state | Given that I'm not connected to the wallet
When I visit the DRep delegation page, and I click the delegate-connect-wallet-button
Then the connect your wallet-modal is visible | | Verify DRep behaviour in disconnected state | Given that I have a preset DdRep wallet loaded
Then Delegate button is clicked
Then it is expected that delegation options card is visible
delegate to myself is expected to be visible
Then Other options is clicked
Expect that signal no confidence card and vote abstain cards are visible
Next, delegate to dRep card is clicked, followed by next step button
Then expected that dRep ID input is visible along with delegate button | -| Delegate to myself | Given that I am a registered DRep who is connected to GovTool with my wallet, and I am on the Delegate to DRep page
When I choose the Delegate to DRep ID option and I enter my own DRep ID and I press the Delegate button
Then I am able to delegate to myself via my connected wallet | -| | Given that I am a registered DRep who is connected to GovTool with my wallet, and I am on the Delegate to DRep page
When I select the Delegate to Myself option and press the Delegate button
Then I will be able to send a transaction to delegate to myself via my wallet | -| | Given that I am not a registered DRep, and I am connected to GovTool with my wallet,
When I am on the Delegate to DRep page
I cannot see a Delegate to Myself option | -| Change my DRep delegation | Given that I am I am already delegated to a DRep
When I look at the dashboard
GovTool will know that I am delegated and it will invite me to “change my delegation” rather than to delegate. | -| | Given that I am already delegated
When I go to change my delegation
I can delegate to any registered DRep, If I am delegated to myself then the option to “delegate to myself” will not be shown, If I am delegated to a specific predefined DRep then this predefined option will not be shown | -| Check the validity of a DRep ID | Given that I have selected the “delegate to a DRep ID” option in the delegation user journey.
When I enter anything in the DRep ID input box that is not a registered DRep ID.
Then I will not be able to delegate to this DRep ID and will get a warning message. | -| Delegate to Abstain | Given that I am a DRep
When I delegate using the “delegate to abstain” feature
Then it will only delegate my own lovelace’s voting power to Abstain and NOT the voting power (if any) that has been delegated to me by others. I will be notified that my delegation transaction was sent. | -| | Given that I am not a DRep
When I delegate using the “delegate to abstain” feature
Then it will delegate any voting power I have to Abstain. I will be notified that my delegation transaction was sent | -| Delegate to No-Confidence | Given that I am a DRep
When I delegate using the “delegate to no-confidence” feature
Then it will only delegate my own lovelace’s voting power to No-Confidence and NOT the voting power (if any) that has been delegated to me by others. I will be notified that my delegation transaction was sent. | -| | Given that I am not a DRep
When I delegate using the “delegate to no-confidence” feature
Then it will delegate any voting power I have to No-Confi. I will be notified that my delegation transaction was sent | +| Delegate to myself | Given that I am a registered DRep who is connected to GovTool with my wallet, and I am on the Delegate to DRep page
When I choose the Delegate to DRep ID option and I enter my own DRep ID and I press the Delegate button
Then I am able to delegate to myself via my connected wallet | +| | Given that I am a registered DRep who is connected to GovTool with my wallet, and I am on the Delegate to DRep page
When I select the Delegate to Myself option and press the Delegate button
Then I will be able to send a transaction to delegate to myself via my wallet | +| | Given that I am not a registered DRep, and I am connected to GovTool with my wallet,
When I am on the Delegate to DRep page
I cannot see a Delegate to Myself option | +| Change my DRep delegation | Given that I am I am already delegated to a DRep
When I look at the dashboard
GovTool will know that I am delegated and it will invite me to “change my delegation” rather than to delegate. | +| | Given that I am already delegated
When I go to change my delegation
I can delegate to any registered DRep, If I am delegated to myself then the option to “delegate to myself” will not be shown, If I am delegated to a specific predefined DRep then this predefined option will not be shown | +| Check the validity of a DRep ID | Given that I have selected the “delegate to a DRep ID” option in the delegation user journey.
When I enter anything in the DRep ID input box that is not a registered DRep ID.
Then I will not be able to delegate to this DRep ID and will get a warning message. | +| Delegate to Abstain | Given that I am a DRep
When I delegate using the “delegate to abstain” feature
Then it will only delegate my own lovelace’s voting power to Abstain and NOT the voting power (if any) that has been delegated to me by others. I will be notified that my delegation transaction was sent. | +| | Given that I am not a DRep
When I delegate using the “delegate to abstain” feature
Then it will delegate any voting power I have to Abstain. I will be notified that my delegation transaction was sent | +| Delegate to No-Confidence | Given that I am a DRep
When I delegate using the “delegate to no-confidence” feature
Then it will only delegate my own lovelace’s voting power to No-Confidence and NOT the voting power (if any) that has been delegated to me by others. I will be notified that my delegation transaction was sent. | +| | Given that I am not a DRep
When I delegate using the “delegate to no-confidence” feature
Then it will delegate any voting power I have to No-Confi. I will be notified that my delegation transaction was sent | ### Link @@ -739,17 +809,17 @@ This section shows the areas or sources thus far ### Functional Requirements -|Requirements|Acceptance Criteria| -|:----|:----| -| Register as a DRep | Given that I am connected to GovTool with a compatible wallet
When I go through the DRep registration process, and do not include a metadata anchor
Then I can register as a DRep via my wallet (because metadata anchors are optional) | -| | Given that I am connected to GovTool with a compatible wallet
When I go through the DRep registration process, and include metadata anchor information in the wrong format
Then I will not be able to progress further in the process and I will be told that it is because the format is incorrect | -| | Given that I am connected to GovTool with a compatible wallet
When I go through the DRep registration process, and include metadata anchor information in the correct format
Then I will be able to register as a DRep via my wallet, GovTool will include the metadata anchor in the registration certificate transaction. | -| Confirm transaction has been sent | Given that I have gone through the DRep registration process
When I press the button on my wallet to submit the transaction
Then I will receive a confirmation message from GovTool that will include a link to the transaction in a block explorer | -| Status of transaction is displayed | Given that I have just submitted a DRep registration transaction, and I am looking at the dashboard
When the registration has not yet been confirmed by the blockchain,
Then the registration status will show as “In Progress” until it is confirmed | +| Requirements | Acceptance Criteria | +| :--------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Register as a DRep | Given that I am connected to GovTool with a compatible wallet
When I go through the DRep registration process, and do not include a metadata anchor
Then I can register as a DRep via my wallet (because metadata anchors are optional) | +| | Given that I am connected to GovTool with a compatible wallet
When I go through the DRep registration process, and include metadata anchor information in the wrong format
Then I will not be able to progress further in the process and I will be told that it is because the format is incorrect | +| | Given that I am connected to GovTool with a compatible wallet
When I go through the DRep registration process, and include metadata anchor information in the correct format
Then I will be able to register as a DRep via my wallet, GovTool will include the metadata anchor in the registration certificate transaction. | +| Confirm transaction has been sent | Given that I have gone through the DRep registration process
When I press the button on my wallet to submit the transaction
Then I will receive a confirmation message from GovTool that will include a link to the transaction in a block explorer | +| Status of transaction is displayed | Given that I have just submitted a DRep registration transaction, and I am looking at the dashboard
When the registration has not yet been confirmed by the blockchain,
Then the registration status will show as “In Progress” until it is confirmed | ### Link -## User Story ID: CH.VO.004 +## User Story ID: CH.VO.004 - [ ] Enabler @@ -761,29 +831,29 @@ This section shows the areas or sources thus far ### Functional Requirements -|Requirements|Acceptance Criteria| -|:----|:----| -| Should be able to access the governance actions page as a DRep with my wallet connected | Given that I am a DRep and I am connected to GovTool
When I visit the url of the governance actions page
Then the governance actions page is displayed | -| | Given that I am a DRep and connected to GovTool
When I look at the governance actions page
Then my voting power is displayed | -| | Given that I am a DRep and Connected to GovTool, and I am on the governance actions page
When I click Disconnect Wallet
Then my wallet is disconnected and I am redirected to the same page, but without the DRep functionality (i.e. ability to vote) | -| | Given that I am a DRep and I am on the governance actions page
When I click on the “view proposal details” button
Then I will be shown the page for that individual governance action and be able to view its details | -| A DRep should be able to vote on a live governance action | Given that I am a DRep
When I look at the details page of an individual governance action
Then I can see how many votes the governance action currently has for, against and abstaining | -| | Given that I am a DRep
When I look at the details page of an individual governance action
Then there are buttons allowing me to vote for, against or abstain. | -| | Given that I am a DRep, on the details page of an individual governance action
When I select yes/ no/ abstain, and click vote
Then I can sign & submit this vote via my wallet | -| | Given that I am a DRep
When I have submitted a vote
Then Immediately after this GovTool will display a message informing me that my transaction has been sent and providing me with a link to a block explorer where I can view the transaction | -| People without the (t)ADA needed to pay for voting transactions should not be able to submit a voting transaction | Given that I do not have a wallet connected to GovTool
When I visit the details of a governance action
Then I am not shown a vote button | -| People without their wallet connected or who do have their wallet connected but have not registered as DReps should not be able to vote | Given that I am on the governance action page
When I examine the governance actions
None of the governance actions shown on the page have expired or been ratified or enacted. | -| No one should be able to vote on a governance action that has expired, or been ratified, or enacted. | Given that I am a DRep and I have already voted on a given governance action
When I submit a different vote for the same transaction within the same snapshot
Then the most recent vote will be counted | -| | Given that I have already cast a vote on a given governance action
When I examine this specific governance action’s page
Then instead of seeing a “vote” button I should see a “change vote” button | -| Only the votes of participants who are still DReps at the relevant epoch boundary will be accepted | Given that I am a DRep and I vote yes or abstain on a live governance action.
At the epoch boundary
My votes are counted | -| | Given that I was a DRep that voted yes or abstain on a live governance action but then retired.
At the next epoch boundary
My votes will not be counted towards the total tally of DRep votes. | -| DReps can attach a metadata anchor to their votes | Given that I have chosen how to vote on the UI of a governance action’s details
When I add a metadata anchor to the UI also and click the vote button
Then the resulting transaction will include my metadata anchor | +| Requirements | Acceptance Criteria | +| :-------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Should be able to access the governance actions page as a DRep with my wallet connected | Given that I am a DRep and I am connected to GovTool
When I visit the url of the governance actions page
Then the governance actions page is displayed | +| | Given that I am a DRep and connected to GovTool
When I look at the governance actions page
Then my voting power is displayed | +| | Given that I am a DRep and Connected to GovTool, and I am on the governance actions page
When I click Disconnect Wallet
Then my wallet is disconnected and I am redirected to the same page, but without the DRep functionality (i.e. ability to vote) | +| | Given that I am a DRep and I am on the governance actions page
When I click on the “view proposal details” button
Then I will be shown the page for that individual governance action and be able to view its details | +| A DRep should be able to vote on a live governance action | Given that I am a DRep
When I look at the details page of an individual governance action
Then I can see how many votes the governance action currently has for, against and abstaining | +| | Given that I am a DRep
When I look at the details page of an individual governance action
Then there are buttons allowing me to vote for, against or abstain. | +| | Given that I am a DRep, on the details page of an individual governance action
When I select yes/ no/ abstain, and click vote
Then I can sign & submit this vote via my wallet | +| | Given that I am a DRep
When I have submitted a vote
Then Immediately after this GovTool will display a message informing me that my transaction has been sent and providing me with a link to a block explorer where I can view the transaction | +| People without the (t)ADA needed to pay for voting transactions should not be able to submit a voting transaction | Given that I do not have a wallet connected to GovTool
When I visit the details of a governance action
Then I am not shown a vote button | +| People without their wallet connected or who do have their wallet connected but have not registered as DReps should not be able to vote | Given that I am on the governance action page
When I examine the governance actions
None of the governance actions shown on the page have expired or been ratified or enacted. | +| No one should be able to vote on a governance action that has expired, or been ratified, or enacted. | Given that I am a DRep and I have already voted on a given governance action
When I submit a different vote for the same transaction within the same snapshot
Then the most recent vote will be counted | +| | Given that I have already cast a vote on a given governance action
When I examine this specific governance action’s page
Then instead of seeing a “vote” button I should see a “change vote” button | +| Only the votes of participants who are still DReps at the relevant epoch boundary will be accepted | Given that I am a DRep and I vote yes or abstain on a live governance action.
At the epoch boundary
My votes are counted | +| | Given that I was a DRep that voted yes or abstain on a live governance action but then retired.
At the next epoch boundary
My votes will not be counted towards the total tally of DRep votes. | +| DReps can attach a metadata anchor to their votes | Given that I have chosen how to vote on the UI of a governance action’s details
When I add a metadata anchor to the UI also and click the vote button
Then the resulting transaction will include my metadata anchor | ### Link # SMART CONTRACTS -## User Story ID: SMC.001 +## User Story ID: SMC.001 - [ ] Enabler @@ -807,7 +877,7 @@ Use as many lines as needed. # SIDE CHAIN -## User Story ID: SCH.001 +## User Story ID: SCH.001 - [ ] Enabler @@ -831,7 +901,7 @@ Use as many lines as needed. # DAPPS -## User Story ID: DAPP.001 +## User Story ID: DAPP.001 - [ ] Enabler @@ -855,7 +925,7 @@ Use as many lines as needed. # EXCHANGES -## User Story ID: EX.001 +## User Story ID: EX.001 - [ ] Enabler @@ -879,7 +949,7 @@ Use as many lines as needed. # OTHER -## User Story ID: OTHER.001 +## User Story ID: OTHER.001 - [ ] Enabler