Browse Source

merge archived helpdesk

Joystream Stats 3 years ago
parent
commit
fcbd88a006
76 changed files with 5515 additions and 0 deletions
  1. 1 0
      helpdesk/.gitignore
  2. 276 0
      helpdesk/README.md
  3. BIN
      helpdesk/img/bug-report.png
  4. BIN
      helpdesk/img/bug_earn.png
  5. BIN
      helpdesk/img/bugreporters.png
  6. 0 0
      helpdesk/img/bugreporters.svg
  7. BIN
      helpdesk/img/contentcreators.png
  8. 0 0
      helpdesk/img/contentcreators.svg
  9. BIN
      helpdesk/img/contentcurators.png
  10. 0 0
      helpdesk/img/contentcurators.svg
  11. BIN
      helpdesk/img/council_10.png
  12. BIN
      helpdesk/img/council_earn.png
  13. BIN
      helpdesk/img/councilmembers.png
  14. 0 0
      helpdesk/img/councilmembers.svg
  15. BIN
      helpdesk/img/flows.png
  16. 329 0
      helpdesk/img/helpdesk-repo.svg
  17. 72 0
      helpdesk/img/helpdesk_new.svg
  18. BIN
      helpdesk/img/storage_300.png
  19. BIN
      helpdesk/img/storage_earn.png
  20. BIN
      helpdesk/img/storageproviders.png
  21. 0 0
      helpdesk/img/storageproviders.svg
  22. BIN
      helpdesk/img/validator_50.png
  23. BIN
      helpdesk/img/validator_earn.png
  24. BIN
      helpdesk/img/validators.png
  25. 0 0
      helpdesk/img/validators.svg
  26. 210 0
      helpdesk/proposals/README.md
  27. 30 0
      helpdesk/roles/README.md
  28. 117 0
      helpdesk/roles/builders/README.md
  29. BIN
      helpdesk/roles/builders/img/builder.png
  30. 17 0
      helpdesk/roles/builders/img/builder_new.svg
  31. 273 0
      helpdesk/roles/content-creators/README.md
  32. 17 0
      helpdesk/roles/content-creators/img/content-creators.svg
  33. 247 0
      helpdesk/roles/content-curator-lead/README.md
  34. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category1.json
  35. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category10.json
  36. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category11.json
  37. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category12.json
  38. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category13.json
  39. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category14.json
  40. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category15.json
  41. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category2.json
  42. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category3.json
  43. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category4.json
  44. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category5.json
  45. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category6.json
  46. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category7.json
  47. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category8.json
  48. 3 0
      helpdesk/roles/content-curator-lead/category-jsons/category9.json
  49. 17 0
      helpdesk/roles/content-curator-lead/img/content-curator-lead.svg
  50. 482 0
      helpdesk/roles/content-curators/README.md
  51. 17 0
      helpdesk/roles/content-curators/img/content-curators.svg
  52. 201 0
      helpdesk/roles/content-curators/query-node-examples/README.md
  53. 713 0
      helpdesk/roles/council-members/README.md
  54. 17 0
      helpdesk/roles/council-members/img/council-members_new.svg
  55. BIN
      helpdesk/roles/council-members/img/council_member.png
  56. BIN
      helpdesk/roles/img/roles.png
  57. 17 0
      helpdesk/roles/img/roles_new.svg
  58. 32 0
      helpdesk/roles/operators/README.md
  59. BIN
      helpdesk/roles/operators/img/builder.png
  60. 17 0
      helpdesk/roles/operators/img/builder_new.svg
  61. 390 0
      helpdesk/roles/storage-lead/README.md
  62. 7 0
      helpdesk/roles/storage-lead/img/storage-lead.svg
  63. 578 0
      helpdesk/roles/storage-providers/README.md
  64. 17 0
      helpdesk/roles/storage-providers/img/storage-provider_new.svg
  65. BIN
      helpdesk/roles/storage-providers/img/storage_provider.png
  66. 867 0
      helpdesk/roles/validators/README.md
  67. BIN
      helpdesk/roles/validators/img/validator.png
  68. 17 0
      helpdesk/roles/validators/img/validator_new.svg
  69. 17 0
      helpdesk/testnets/README.md
  70. 30 0
      helpdesk/testnets/alexandria/README.md
  71. 30 0
      helpdesk/testnets/antioch/README.md
  72. 32 0
      helpdesk/testnets/constantinople/README.md
  73. 20 0
      helpdesk/testnets/sumer/README.md
  74. 222 0
      helpdesk/tokenomics/README.md
  75. 9 0
      helpdesk/tools/README.md
  76. 132 0
      helpdesk/tools/cli/README.md

+ 1 - 0
helpdesk/.gitignore

@@ -0,0 +1 @@
+.DS_Store

+ 276 - 0
helpdesk/README.md

@@ -0,0 +1,276 @@
+<p align="center"><img src="img/helpdesk_new.svg"></p>
+
+<div align="center">
+  <h3>Guides to get started on our <a href="https://testnet.joystream.org/">current testnet</a> in links below<h3>
+</div>
+
+<div align="center">
+  <h4>
+    <a href="/roles/validators">
+      Validators
+    </a>
+    <span> | </span>
+    <a href="/roles/council-members">
+      Council Members
+    </a>
+    <span> | </span>
+    <a href="/roles/storage-providers">
+      Storage Providers
+    </a>
+    <span> | </span>
+    <a href="/roles/content-curators">
+      Content Curators
+    </a>
+    <span> | </span>
+    <a href="/roles/operators">
+      Operators
+    <span> | </span>
+    <a href="/roles/builders">
+      Builders
+    </a>
+    </a>
+  </h4>
+</div>
+<div align="center">
+  <h5>
+    <a href="/tools/cli">
+      CLI
+    </a>
+    <span> | </span>
+    <a href="/roles/content-creators">
+      Content Creators
+    </a>
+  </h5>
+</div>
+</br>
+
+Table of Contents
+---
+
+<!-- TOC START min:1 max:3 link:true asterisk:false update:true -->
+- [Overview](#overview)
+  - [Contribute](#contribute)
+  - [Get Paid to Participate](#get-paid-to-participate)
+- [Get Started](#get-started)
+  - [Generate Keys](#generate-keys)
+  - [Get a Membership](#get-a-membership)
+- [Incentives](#incentives)
+- [Founding Member Program](#founding-member-program)
+- [Active Roles](#active-roles)
+  - [Validators](#validators)
+    - [Description](#description)
+    - [Incentives](#incentives-1)
+  - [Council Members](#council-members)
+    - [Description](#description-1)
+    - [Incentives](#incentives-2)
+  - [Storage Providers](#storage-providers)
+    - [Description](#description-2)
+    - [Incentives](#incentives-3)
+  - [Content Curators](#content-curators)
+    - [Description](#description-3)
+    - [Incentives](#incentives-4)
+  - [Builders](#builders)
+    - [Description](#description-4)
+    - [Incentives](#incentives-5)
+- [Other Features and Tools](#other-features-and-tools)
+  - [Content Creators](#content-creators)
+    - [Description](#description-5)
+  - [CLI](#cli)
+  - [On-Chain Forum](#on-chain-forum)
+<!-- TOC END -->
+
+# Overview
+This repo contains detailed guides to support users interacting with our current [testnet](https://testnet.joystream.org/).
+
+## Contribute
+If you find something that is wrong or missing in these guides, please make an [issue](https://github.com/Joystream/helpdesk/issues), or better yet, fork the repo and make a [PR](https://github.com/Joystream/helpdesk/pulls) to help us improve!
+
+## Get Paid to Participate
+
+The Joystream Testnet Token (tJOY) is backed by a USD-denominated fiat pool, and currently redeemable via Bitcoin Cash. More information about how this works can be found below. If you want to find the current exchange rate, when the fiat pool is getting topped up, and track the status of pending exchanges, go [here](https://www.joystream.org/testnet).
+
+To exchange your tokens, follow these steps.
+1. In order for us to know what address to pay, you must link your Joystream address to your Bitcoin Cash address. The easiest way to do this is in the `My Memo` tab under the `My Keys` sidebar. Ensure that the correct account is selected (the one containing the tokens you wish to redeem) in the drop-down located in the top right-hand corner of the Pioneer interface.
+
+```
+# Only the part in the line below goes in the memo:
+1OR3ORqORzYOURBBITCOINCASHADDRESS
+```
+
+2. Send your testnet tokens (tJOY) to the following address:
+
+```
+5D5PhZQNJzcJXVBxwJxZcsutjKPqUPydrvpu6HeiBfMaeKQu
+```
+
+Once the tokens have been received to this address, the time, date, your address, your memo and the current tJOY/USD exchange rate are logged. Your tokens are then burned (reducing the tJOY issuance), and the USD amount is deducted from the fiat pool. This means that the exchange rate is not affected. Your Bitcoin Cash should arrive within 72 hours, as we are batching the transactions. Also note that the BCH/USD exchange rate is at the time of the Bitcoin Cash transfer.
+
+# Get Started
+To get started and participate on the Joystream testnets, you must first generate `Key(s)`, and sign up for a `Membership`. This requires no software or downloads, and can be done in your browser on Pioneer [here](https://testnet.joystream.org).
+
+## Generate Keys
+Click `My Keys` in the sidebar, and then click the `Add account` button. The choices you make from here depend to a certain degree on how you intend to participate. If you just want to play around, you can follow the recommended defaults. If you have a specific role in mind, you may instead want to follow the links to the instructions in the [header of this document](#guides-to-get-started-on-our-current-testnet-in-links-below), or compare them in more detail [here](#active-roles).
+
+In any event, the `Keys` will be automatically stored in your browser storage for your convenience, but even so it's safest to save your `Raw seed` (you need it for certain roles) and save the .json file associated with the key. The `Mnemonic` can also be used to restore your `Keys`, but keeping the .json file somewhere safe is recommended, as it is the preferred format used to import your key in to certain tools, such as the [CLI](/tools/cli).
+
+## Get a Membership
+To become a `Member` of the platform, you will need some tokens. There is now a `faucet` available as part of the Joystream Player app which grants participants with tokens to create a membership to start uploading content. Currently, the only other way to get tokens is to join our [Discord server](https://discord.gg/DE9UN3YpRP) and ask for some there. This group is also a great place to get support and discuss Joystream with other community members.
+
+**Note:**
+There are currently no fees associated with most transactions, but some parts of Pioneer may still require you to maintain a balance of at least 1 tJOY to allow you to perform certain actions.
+
+If you have tokens and would like to create a membership via Pioneer, click `Membership` in the sidebar, and select the `Register` tab. Choose a `Handle/nickname`. Optionally, provide a link to an image file for your avatar, and fill in the markdown-enabled `About` field.
+
+
+# Incentives
+The Joystream testnets are incentivized, meaning users can earn real money for participating. There are many reasons we have chosen a system like this, but one of the main motivations is to build a community that understands the network. After the platform goes live on mainnet, Jsgenesis will not be around to run critical infrastructure, occupy the roles needed for the platform to work, or drive innovation.
+
+Previous testnets had weekly payouts for all roles, with the magnitude of rewards and positions available decided by Jsgenesis. The old incentive scheme has worked in the sense that it has gotten a small group of users to participate and earn Bitcoin Cash for their contributions. However, the testnet tokens (tJOYs) have only been a means to an end. Users only needed a small amount to stake for roles, and get the recurring Bitcoin Cash reward, without having to consider tJOY as a valuable asset in its own right.
+
+When Joystream goes live on mainnet, there will be no one there to pay these (Bitcoin Cash) rewards, and the platform must rely on JOY tokens as the single value carrier for maintaining critical infrastructure, continued development, governance, and to provide incentives for content creators. In order to get a structure that reflects the mainnet incentives in a better way, we have decided to have the tJOY token issuance be backed by a fiat pool, where users can convert their tokens to cover their real costs, time and hardware. The basics of the new scheme is outlined below:
+
+-   At launch of a new network, the token issuance will be migrated from the previous network, and the existing fiat pool will be "transferred" to the new network.
+-   For each Council Term (currently one week), an amount of USD will be added to fiat pool by Jsgenesis as recurring replenishment, thus increasing the value of each token, if one were to assume the issuance stays constant.
+-   However, all roles on the platform will be compensated by newly minted tJOY tokens, effectively inflating the supply.
+-   In addition to the recurring replenishment, a set of Council KPIs (Key Performance Indicators), will be set by us, to ensure the network is working as intended.
+-   If a KPI is reached, the fiat pool will increase by the amount computed based on the level success for each KPI, new tJOY will be minted proportionally, and these will be distributed to the `Council Members` responsible for achieving each specific KPI and in some cases, those who vote for them. As a consequence, this will not affect the value of token holders not participating in the governance.
+-   Other ways that the tJOY supply and the fiat pool can increase include through bounties, competitions, spending proposals, etc.
+
+An overview on how the new incentive scheme works, and how it interacts with the new proposal model that gives far more power and responsibility to users via the council, can be found [here](/tokenomics).
+
+# Founding Member Program
+
+Alongside the testnet incentive structure associated with earning tJOY (redeemable for BCH) from participation, we are also rewarding high-quality project contributors with allocations of mainnet JOY tokens through our new Founding Member Program.
+
+We have launched this program to ensure that a sufficiently large, effective and motivated community of users is ready to occupy all the different roles required to run, evolve and grow the platform on mainnet.
+
+You can read more about the program in the [dedicated GitHub repo](https://github.com/joystream/founding-members), or on our [website](https://www.joystream.org/founding-members/).
+
+# Active Roles
+
+The list below shows the currently active roles available at our current [testnet](https://testnet.joystream.org/). In order to know how to best allocate your tokens, you can experiment with the [tokenomics spreadsheet](https://docs.google.com/spreadsheets/d/13Bf7VQ7-W4CEdTQ5LQQWWC7ef3qDU4qRKbnsYtgibGU/edit?usp=sharing).
+
+## Validators
+
+<p align="center"><img src="img/validators.svg" width="500"></p>
+
+### Description
+In proof of stake systems, block producers, or `Validators`, are typically paid a fixed amount for each block produced. `Validators` must run a full node.
+
+A detailed guide to setting up the `Validator` node and settings can be found [here](/roles/validators).
+
+### Incentives
+
+Active `Validators` are rewarded in tJOY every new `era` (600 blocks). The size of the reward for each `Validator` depends on a couple of variables:
+
+- The number of `Validators`
+  - The total amount awarded is independent of the number of active `Validators`. This means that the individual tJOY reward is the total reward divided by the number of `Validators` in the last `era`.
+- The total supply of tJOY
+  - The rewards for `Validators` are calculated as a percentage of the total tJOY issuance.
+- The ratio of tokens at stake for the `Validator` set compared to the total token issuance on the network
+  - By summing up the stake of the individual `Validators` and their `Nominators`, you get the total amount at stake.
+  - Divide by the tJOY issuance and you get the ratio.
+  - The ideal number (for the `Validators`) is 30%.
+  - If this number is higher or lower, than 30%, the rewards "drop off"
+
+The rewards for the last `era` will show up as an event, and can be seen in the [explorer](https://testnet.joystream.org/#/explorer), if you keep a window open. Fairly precise estimates can be found on the [Tokenomics page](https://testnet.joystream.org/#/tokenomics) in Pioneer, or (in most cases) by looking at the "last reward" in [here](https://testnet.joystream.org/#/staking/targets).
+If you want to exchange your tokens, you need to unbond them first. Check the guide for instructions on how to do this.
+
+A change to note introduced in the Alexandria testnet is the fact that payouts to validators are no longer paid automatically.
+However, you have two weeks to claim your rewards, so, for example, if you forget for 15 days, you'll only "lose" a day of earnings.
+(Also, anyone can claim for anyone, so a nominator will not suffer if the associated validator forgets)
+
+## Council Members
+
+<p align="center"><img src="img/councilmembers.svg" width="500"></p>
+
+### Description
+
+`Council Members` are elected by the stakeholders in the system to act in the long-term interest of the platform. The `Council` is responsible for allocating resources, and hiring executive personnel to run the platform's day-to-day operations.
+
+An overview of the proposal system can be found [here](/proposals).
+A detailed explanation of the election cycle and responsibilities can be found [here](/roles/council-members).
+
+### Incentives
+
+`Council Members` receive recurring rewards in tJOY. Unlike the other recurring rewards for roles, this is not something the `Council` can vote on, as it could lead to some unfortunate outcomes. The size of the reward can be found can be found in the chain state.
+
+Council Members also receive [Council KPI rewards](/tokenomics/README.md#council-kpis) on top of the recurring rewards.
+
+## Storage Providers
+
+<p align="center"><img src="img/storageproviders.svg" width="500"></p>
+
+### Description
+
+You can't have a video platform without videos, so someone has to take the role of storing the data. In the future, this will be a highly specialized role, focusing on what is implied by the name of the role. Currently, it will in practice also entail the future `Bandwidth Provider` role.
+
+Unlike `Validators` that can come and go without too much friction (at least for now), a new `Storage Provider` will currently need to replicate the entire content directory. As a consequence, the platform needs some stability for this role to avoid providing a poor user experience, or worse, loss of data.
+
+After an upgrade of the `Constantinople` network, the `Storage Provider` role will now be within its own working group, with a lead overseeing the day-to-day operations, while being accountable to the Council.
+
+A detailed guide on being a Storage Provider and the associated responsibilities can be found [here](/roles/storage-providers).
+
+### Incentives
+
+The `Storage Lead` can only be hired (or fired) by the Council through the proposal system. The Lead should maintain sufficient storage and distribution capacity by employing `Storage Providers`, and paying them sufficiently. The Lead will also need to run a storage node themselves. Another important task is to keep an eye on the working group's financing (deciding how much each `Storage Provider` should be paid etc.).
+
+The current status of this role can be found [here](https://testnet.joystream.org/#/working-groups).
+
+## Content Curators
+
+<p align="center"><img src="img/contentcurators.svg" width="500"></p>
+
+### Description
+
+`Content Curators` will one day be essential for ensuring that the petabytes of media items uploaded to Joystream are formatted correctly and comprehensively monitored and moderated. Our upcoming testnet allows this content monitoring to take place by giving users who are selected for the role administrative access to the Joystream content directory to make changes where necessary.
+
+A detailed guide on being a Content Curator and the associated responsibilities can be found [here](/roles/content-curators).
+
+### Incentives
+
+`Content Curators` are hired by the `Curator Lead`. The `Council` is responsible for setting the budget for the `Curators` by providing the lead with a so-called mint. The lead can hire and fire as they choose, but if the capacity of the mint runs out, the rewards will stop flowing. This means that both the `Council` and the lead must pay attention to the mint capacity.
+
+The group and its lead are governed through the proposal system, where any member can propose to "Set Content Working Group Mint Capacity", and "Set (Curator) Lead".
+
+The former, if executed, will simply set the capacity of the mint to the number proposed, regardless of previous capacity. To avoid workers "striking" due to the lack of payments (including for themselves), the lead must ensure the mint does not run out of capacity. If the lead goes rogue, or simply spends too much, the capacity can be set to zero to avoid further spending.
+
+When making a new "Set (Curator) Lead" proposal, one can propose to
+- replace the old lead
+- hire a lead if there are currently none
+- fire the current lead, without setting a new one.
+
+
+## Builders
+
+<p align="center""><img src="img/bugreporters.svg" width="500"></p>
+
+### Description
+The creation of the `Builder` or `Operations` working group means that this is now a formal role, with support for on-chain rewards. The `Builder` role is an evolving one, concerned mainly with the day-to-day management of the platform.
+
+Outside of the formal operations working group, Builders may be mostly focussed on solving bounties. The tasks associated with these Bounties will ideally try to solve some problem either for the community or Jsgenesis, but in some cases, their main purpose will be to create some fun and/or attract new members to the community. In some cases, Bounties may be created as a result of requests from the Council or the community.
+
+Over time, the tasks should allow people with different skill sets and interests to participate. Most challenges will be easier if you are somewhat technical or creative, but in other situations it will simply require putting in some time and effort. To learn more about Bounties, see [here](/roles/builders).
+
+### Incentives
+
+The incentives will be to claim all, or parts, of the reward associated with the Bounty, and the formal rewards for members of the operations working group.
+
+# Other Features and Tools
+
+This section covers other things you can do after [getting started](#get-started), that aren't paid roles at the moment.
+
+## Content Creators
+
+<p align="center"><img src="img/contentcreators.svg" width="500"></p>
+
+### Description
+
+When the Joystream mainnet is live, `Content Creators` will be responsible for creating and uploading the enormous variety of different content types and genres which we believe will allow Joystream to grow into a successful decentralized media platform.
+
+## CLI
+The CLI tool is under development, but is already needed for the [Storage Lead](/roles/storage-lead), [Curators and Lead](/roles/content-curators), [Content Creators](/roles/content-creators), and can be useful for [Storage Providers](/roles/storage-providers). Go [here](/tools/cli) for more information and guides.
+
+## On-Chain Forum
+
+This is the first step in providing users, infrastructure role participants, `Council Members` and future stakeholders a way to communicate and coordinate. Hopefully, this method of interaction will further help in developing a strong community around Joystream. Note that you have to be a `member` to post, and only the forum moderator (forum sudo) can create categories.

BIN
helpdesk/img/bug-report.png


BIN
helpdesk/img/bug_earn.png


BIN
helpdesk/img/bugreporters.png


File diff suppressed because it is too large
+ 0 - 0
helpdesk/img/bugreporters.svg


BIN
helpdesk/img/contentcreators.png


File diff suppressed because it is too large
+ 0 - 0
helpdesk/img/contentcreators.svg


BIN
helpdesk/img/contentcurators.png


File diff suppressed because it is too large
+ 0 - 0
helpdesk/img/contentcurators.svg


BIN
helpdesk/img/council_10.png


BIN
helpdesk/img/council_earn.png


BIN
helpdesk/img/councilmembers.png


File diff suppressed because it is too large
+ 0 - 0
helpdesk/img/councilmembers.svg


BIN
helpdesk/img/flows.png


+ 329 - 0
helpdesk/img/helpdesk-repo.svg

@@ -0,0 +1,329 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 882 300" style="enable-background:new 0 0 882 300;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#C4C3C6;}
+	.st1{fill:#FFFFFF;}
+	.st2{fill-rule:evenodd;clip-rule:evenodd;}
+	.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#C4C3C6;}
+	.st4{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
+	.st5{fill:#010101;}
+	.st6{fill:none;}
+	.st7{fill-rule:evenodd;clip-rule:evenodd;fill:#B1B2B7;}
+	.st8{fill-rule:evenodd;clip-rule:evenodd;fill:#FDFDFD;}
+	.st9{fill-rule:evenodd;clip-rule:evenodd;fill:#F9F9F9;}
+</style>
+<g id="Layer_4">
+	<path d="M876,209H6c-3.3,0-6-2.7-6-6V6c0-3.3,2.7-6,6-6h870c3.3,0,6,2.7,6,6v197C882,206.3,879.3,209,876,209z"/>
+	<g>
+		<path class="st1" d="M84.7,100.6v-15H67.8v15h-3.7V67.4h3.7v14.9h16.9V67.4h3.6v33.2H84.7z"/>
+		<path class="st1" d="M111.9,97.6l1.4-0.1l0.1,2.8c-3.6,0.5-6.8,0.8-9.4,0.8c-3.5,0-5.9-1-7.3-3c-1.4-2-2.2-5.1-2.2-9.3
+			c0-8.4,3.3-12.6,10-12.6c3.2,0,5.6,0.9,7.2,2.7c1.6,1.8,2.4,4.6,2.4,8.5l-0.2,2.7H98.2c0,2.7,0.5,4.6,1.4,5.9c1,1.3,2.6,1.9,5,1.9
+			C107,97.9,109.5,97.8,111.9,97.6z M110.6,87.2c0-2.9-0.5-5-1.4-6.2c-0.9-1.2-2.5-1.8-4.6-1.8c-2.1,0-3.7,0.6-4.8,1.9
+			c-1.1,1.3-1.6,3.3-1.7,6.1H110.6z"/>
+		<path class="st1" d="M120.1,100.6V66.1h3.6v34.5H120.1z"/>
+		<path class="st1" d="M130.9,111.3V76.6h3.6v1.7c2.4-1.5,4.8-2.2,7.2-2.2c3,0,5.2,1,6.6,2.9c1.4,1.9,2.1,5.1,2.1,9.6
+			c0,4.4-0.8,7.6-2.4,9.6c-1.6,1.9-4.3,2.9-8,2.9c-2,0-3.7-0.2-5.4-0.5v10.7H130.9z M141.2,79.3c-1,0-2,0.2-3.1,0.5
+			c-1.1,0.3-2,0.6-2.6,1l-0.9,0.5v16.2c2.3,0.4,4,0.5,5.2,0.5c2.6,0,4.4-0.7,5.4-2.2s1.6-3.9,1.6-7.2s-0.5-5.7-1.4-7.1
+			C144.4,80,143,79.3,141.2,79.3z"/>
+		<path class="st1" d="M174.7,66.1v34.5h-3.6V99c-2.5,1.4-4.9,2.1-7.3,2.1c-1.3,0-2.4-0.2-3.4-0.5s-1.9-0.9-2.7-1.7
+			c-1.7-1.7-2.6-4.9-2.6-9.6c0-4.7,0.8-8,2.3-10.1c1.6-2.1,4.1-3.1,7.7-3.1c1.9,0,3.8,0.2,5.9,0.6V66.1H174.7z M162.2,97.5
+			c0.6,0.2,1.3,0.3,2.2,0.3s1.9-0.2,3.1-0.5c1.1-0.3,2-0.6,2.7-0.9l1-0.4V79.8c-2-0.4-4-0.6-5.7-0.6c-2.4,0-4.1,0.8-5.1,2.3
+			c-1,1.6-1.4,4-1.4,7.2c0,3.7,0.6,6.2,1.7,7.5C161.1,96.9,161.6,97.3,162.2,97.5z"/>
+		<path class="st1" d="M197.9,97.6l1.4-0.1l0.1,2.8c-3.6,0.5-6.8,0.8-9.4,0.8c-3.5,0-5.9-1-7.3-3c-1.4-2-2.2-5.1-2.2-9.3
+			c0-8.4,3.3-12.6,10-12.6c3.2,0,5.6,0.9,7.2,2.7c1.6,1.8,2.4,4.6,2.4,8.5l-0.2,2.7h-15.8c0,2.7,0.5,4.6,1.4,5.9
+			c1,1.3,2.6,1.9,5,1.9C193.1,97.9,195.5,97.8,197.9,97.6z M196.7,87.2c0-2.9-0.5-5-1.4-6.2c-0.9-1.2-2.5-1.8-4.6-1.8
+			c-2.1,0-3.7,0.6-4.8,1.9c-1.1,1.3-1.6,3.3-1.7,6.1H196.7z"/>
+		<path class="st1" d="M213.4,79.3c-3.5,0-5.2,1.2-5.2,3.6c0,1.1,0.4,1.9,1.2,2.4c0.8,0.5,2.6,0.9,5.5,1.4c2.8,0.5,4.9,1.2,6,2.1
+			c1.2,0.9,1.8,2.6,1.8,5c0,2.5-0.8,4.3-2.4,5.4s-3.9,1.7-6.9,1.7c-2,0-4.3-0.2-7-0.7l-1.4-0.2l0.2-3.1c3.6,0.5,6.4,0.8,8.3,0.8
+			s3.3-0.3,4.2-0.9c1-0.6,1.5-1.6,1.5-3c0-1.4-0.4-2.3-1.2-2.8c-0.8-0.5-2.7-1-5.5-1.4c-2.8-0.4-4.8-1.1-6-2
+			c-1.2-0.9-1.8-2.5-1.8-4.8c0-2.3,0.8-4.1,2.5-5.2c1.6-1.1,3.7-1.7,6.2-1.7c2,0,4.4,0.2,7.3,0.7l1.3,0.2l-0.1,3.1
+			C218.3,79.6,215.5,79.3,213.4,79.3z"/>
+		<path class="st1" d="M231.8,100.6h-3.6V66.1h3.6v20.4l3.7-0.2l6.9-9.7h4.1l-7.8,11l8.2,13h-4.1l-7.2-11.1l-3.8,0.1V100.6z"/>
+	</g>
+</g>
+<g id="Layer_2">
+</g>
+<g id="Layer_3">
+</g>
+<g id="Layer_1">
+	<g>
+		<g>
+			<g>
+				<path d="M610.4,97.2c0,0-7.3,0.7-8.3,4.7l0.3,3.4c0,0-14.3-7-25.3,13l-8.6,90.2c0,0-1.2,14.4,7.1,22c1.8,1.7,4.2,2.7,6.6,3
+					l4.2,0.5v8.4c0,0-4.7,3.7-5.3,6.6c-0.7,3,0,9.3,0,9.3s7.3,17.3,52.2,14.3c44.9-3,42.9-19.3,42.9-19.3l-2.3-8.6
+					c0,0-1.7-0.5-3.7-2.8l-0.3-8l12.6-12.3c0,0,7.3-5,6.3-18.6c-1-13.6-11.5-92.5-11.5-92.5s-8.2-12.1-23.7-7.3l-0.3-3
+					c0,0-1.9-3.3-6.4-3.3C642.4,95.6,610.4,97.2,610.4,97.2z M608.4,218.4c0,0-7.3,0.7-10.3,2.3c0,0-16,2.6-14.3-11.5l7.3-80.9
+					c0,0,0.3-6.6,7.3-7.6v3c0,0-3.4,0.6-3.5,3.5c-0.1,3,10.4,5.7,10.4,5.7v11.5c0,0-4.7,1.6-4.7,4.3v5c0,0-8.3,6.3-5.6,25.3
+					c2.7,18.9,4.1,20.3,4.1,20.3s-2.8,6,2.2,7.6c5,1.7,8.3,2.4,8.3,2.4L608.4,218.4z M667.4,218.8c-2.8-1.6-12.4-2.8-12.4-2.8
+					l-0.3-8.5c4.7-1.4,9.8-5.8,9.8-5.8c0.9-3.3-3.2-5.9-3.2-5.9s3.8-2.1,4.4-19.9c0.6-16.1-3.8-24-5.3-26.7v0
+					c-0.1-0.4-0.3-1.2-0.7-2.5c-1.7-5.4-5.7-5-5.7-5l-0.3-9.6c5.7-1.8,12.2-4.4,11.2-7.5c-0.3-1.1-4.8-3.9-4.8-3.9l0.1-6.2
+					c6.3,0.3,7.8,8.5,7.8,8.5s10.4,69.2,10.8,79.1C679.1,212.1,667.4,218.8,667.4,218.8z"/>
+				<path class="st0" d="M629.9,241.4c13.4-0.2,24.1-0.2,34.5-9.1c0.8,6.8,1.8,5.2,2.1,10.9c0.1,1.1,0.4,2.4-0.3,3.2
+					c-0.4,0.5-1.1,0.8-1.7,1c-20.2,7.9-39,10.1-59.9,4.4c-3.1-0.9-6.3-1.9-8.7-4.1c-0.7-0.6-1.3-1.3-1.5-2.1c-0.2-0.7-0.1-1.4,0-2.1
+					c0.3-2.2-1-8.8,1.1-9.6c1.4-0.5,11,4.3,12.9,4.9C616.6,241.8,621.3,241.4,629.9,241.4z"/>
+				<path class="st0" d="M595.9,256.4c22.9,6.2,55.4,5.4,75.5-7.7c1.5,2.5,1.6,4.3,1.1,7.2c-0.1,0.8-4.2,3.4-4.8,4
+					c-0.5,0.5-4.4,2.9-5.1,3.2c-19.7,6.7-39.5,7.7-59.8,3.2c-6.5-1.4-10.8-1.8-15.7-6.2c-0.5-0.4-1-0.9-1.1-1.6c-0.1-0.5,0-1,0-1.5
+					c0.4-2.1,0.6-2.3,1.2-4.4C590.8,254.6,591.6,255.7,595.9,256.4z"/>
+				<path class="st0" d="M630.1,109.9c7.5-0.1,15.3-0.7,22-4.2c0.7,3.5,1,7,0.7,10.6c0,0.5-0.1,1-0.4,1.4c-0.3,0.4-0.8,0.5-1.3,0.6
+					c-14.4,2.8-29.2,3.1-43.7,1c-0.6-0.1-1.3-0.2-1.8-0.6c-1-0.7-1.1-2.1-1.1-3.2c-0.1-7.4,1.4-6.5,8.3-6
+					C618.6,109.9,624.4,110,630.1,109.9z"/>
+				<path class="st1" d="M607.4,262.3c-0.3,1.1-1.2,2.1-1.1,3.3c0.1,1.8,2.3,2.6,4.1,2.9c15.2,2.4,31,1.5,45.8-2.5
+					c0.8-0.2,1.7-0.5,2.2-1.2c0.4-0.6,0.4-1.3,0.4-1.9c0-2.6,0.1-3.2,0.1-5.8c-0.6-1.3-2.4-1-3.8-0.7c-9.2,2.7-18.9,4-28.5,3.9
+					c-4.8-0.1-9.5-0.7-14.2-1.2C607.3,258.5,608.6,258,607.4,262.3z"/>
+				<path class="st0" d="M607.1,161.1c-2-0.7-4.5-1.4-5.9,0.2c-0.7,0.8-0.8,2-0.8,3c-0.2,3.8-0.4,7.6-0.6,11.4
+					c-0.4,8,0.4,13.3,3.4,20.7c1.4,3.4,13.7,6,20.8,6.4c7.1,0.4,14.3,0.1,21.4-1.1c4-0.6,8.2-1.7,10.9-4.7c1.7-1.9,2.7-4.5,3.4-7
+					c2.6-9.3,4.3-16.7,1.8-26.1c-0.3-1.1-1.5-2.5-2.4-3.3c-1.2-1.1-3.7-0.4-5.4-0.3c-7.3,0.6-13.9,3.6-21.1,3.9
+					C624.9,164.8,615,164,607.1,161.1z"/>
+				<path class="st1" d="M625.8,168.4c-5.4,0.1-11.5-0.1-15,4c-1.7,1.9-2.4,1.5-3,3.9c-0.9,3.8-1.8,7.6-1.6,11.5
+					c0.2,3.9,1.5,7.8,4.3,10.6c3.6,3.6,9.1,4.5,14.1,4.6c5,0.2,9.9-0.2,14.8-1.1c6.5-1.2,13.3-3.7,16.8-9.3
+					c1.9-3.1,2.5-6.7,2.8-10.3c0.4-4.5,0.3-6-0.3-10.4c-0.3-2.2-0.4-5-1.3-7c-1.1-2.6-0.9-2.3-3.7-1.6
+					C644.2,165.6,635.6,168.3,625.8,168.4z"/>
+				<path class="st1" d="M636.8,110c-0.3,0.1-0.7,0.1-1,0.4c-0.4,0.3-0.5,0.8-0.6,1.2c-0.6,2.2,0,5-0.2,7.3c0,0.4,0,0.8,0.2,1.1
+					c0.3,0.3,0.7,0.3,1,0.3c2.4-0.1,6.1-0.6,8.5-0.8c0.7,0,1.4-0.1,1.9-0.6c0.3-0.3,0.5-0.8,0.6-1.3c0.5-1.7,0.9-6.9-0.7-8.4
+					C645.2,108,638.5,109.7,636.8,110z"/>
+				<path class="st0" d="M629.4,224.4c5.8-0.9,9.1-1.8,14.8-3c5.7-1.2,13.1-2.5,17.5,1.4c0.9,0.8,2.9,2.1,2.5,3.2
+					c-0.2,0.7-0.9,1.9-1.5,2.4c-18.5,12.6-44.1,12.9-63.6,1.9c-1.3-0.7-2.7-2.1-2-3.4c0.2-0.4,0.7-0.7,1.1-0.9
+					c4.3-2.5,10-4.1,15-3.4C618.8,223.4,623.4,225.3,629.4,224.4z"/>
+				<path class="st0" d="M654,152.6c0.6-0.2,1.3-0.4,2-0.2c1.3,0.5,0.8,2.1,1.1,3.2c-16.3,5.4-26.4,6.7-44.5,3.5
+					c-1-0.2-3.9-1.6-4.9-2c-0.5-0.2-0.4-2.4,1-2.6c2.3-0.2,6.4,1.1,7.1,1.2c4.6,0.8,5.3,0.6,10,0.7
+					C635.4,156.7,644.9,155.4,654,152.6z"/>
+				<path d="M659.7,148.3c0.1,0.1,0.3,0.4,0.7,1v0C660.6,150.4,659.8,148.5,659.7,148.3z"/>
+				<path class="st0" d="M618.4,217.6c-0.6,0.5-1.3,1.5-0.7,2c0.2,0.2,0.5,0.3,0.8,0.3c9.1,1.8,18.5-0.3,27.6-2.3
+					c1.1-0.3,2.3-0.5,3.2-1.3c1.8-1.5,2-4.4,1.5-6.4C641.2,210.5,626.1,211.4,618.4,217.6z"/>
+				<path class="st1" d="M642.3,210.1c0.7-0.2,1.1,0.7,1.2,1.4c0.3,2.1,0.2,4.3-0.2,6.4c0,0.2-0.1,0.5-0.3,0.7
+					c-0.2,0.2-0.5,0.2-0.8,0.2c-0.8,0-1.5,0-2.3,0.1c-0.7,0-1.5,0-2.1-0.4c-0.4-0.3-0.6-0.7-0.7-1.2c-0.5-1.6-0.2-3.5,0.8-4.8
+					c1-1.3,1.7-2.4,3.4-2.3L642.3,210.1z"/>
+				<path class="st0" d="M660.2,198.4c0.3-0.1,1.9,1.3,1.9,1.6c0,0.2-0.2,0.4-0.4,0.5c-3.2,2.7-7.2,4.3-11.2,5.2
+					c-4.1,0.9-8.4,2.1-12.6,2.4c-12.4,0.7-20,1.5-31.6-2.7c0-1.2,0.2-2.4,0.7-3.6c11.2,3.8,18.1,3.9,29.9,3.2
+					c4.4-0.2,8.8-0.8,13-2.1c2.1-0.6,4.2-1.4,6.1-2.4C658.1,199.6,658.9,198.9,660.2,198.4z"/>
+				<path class="st0" d="M590.1,124.1c-1.7,3.3-2.4,7.1-3,10.8c-2.5,15.8-3.5,28.9-4.5,44.9c-0.6,10.6-1.2,21.2-1.8,31.8
+					c-0.1,1.6-0.2,3.2,0.2,4.7c0.7,2.6,2.9,4.7,5.3,5.9s5.1,1.8,7.8,2.3c0,1.7-0.3,3.4-0.9,5c-5.8-0.3-11.3-3.8-14.5-8.6
+					c-3.2-4.9-4.3-11-3.7-16.8c0.2-1.9,0.6-3.8,0.6-5.8c0-2.6,0.1-5.6,0.4-8.2c0.5-4.1-0.3-4.6,0.1-6.7c0.7-3.1,1.1-3,1.1-6.2
+					c-0.1-6.8,0.1-12.2,0.8-18.3c1-9.6,2.3-19.2,3.5-28.7c0.4-3.3,0.9-6.6,2.3-9.6c2.6-5.6,8.8-9.3,15-9.1c-0.2,3.5,0.1,4.5-2.7,6.2
+					C593.6,119.5,591.5,121.3,590.1,124.1z"/>
+				<path class="st0" d="M598,126.7c1.9,2.3,4.9,3.1,7.8,3.7c2.4,0.5,4.7,0.9,7.1,1.1c7.7,0.8,15.6,0.4,23.3,0
+					c4-0.2,7.9-0.4,11.8-1.2c4.7-1,9.3-2.8,13.4-5.4c-1-0.8-2.1-1.5-3.1-2.2c-0.3-0.2-0.7-0.4-1-0.5c-0.5-0.1-1,0.2-1.5,0.4
+					c-6.8,3.2-14.4,4.3-21.9,4.6c-6.5,0.3-13.1,0.1-19.5-0.7c-3.3-0.4-6.6-0.9-9.8-1.6C601.5,124.4,599.5,123.4,598,126.7z"/>
+				<path class="st0" d="M630.7,134.6c6.7,0,13.6-0.1,19.6-2.8c-0.2,4.2-0.1,8.4,0.3,12.6c-9.5,4.5-16.4,5.2-29.2,4.5
+					c-2.4-0.1-3.3-0.8-5.4-1.8c-0.6-0.3-1.6-1.7-1.8-2.3c-0.1-0.4-0.4-1-0.4-1.5c0.1-2.1,0.1-2.5,0-3.8c-0.1-1,0-2.9,0.4-3.8
+					c0.7-1.7,2.5-0.8,4-0.7C623.8,135.3,625.1,134.6,630.7,134.6z"/>
+				<path class="st1" d="M643.4,134c0.3-0.1,0.6-0.1,0.9,0c0.5,0.2,0.6,0.8,0.6,1.3c0.3,3.6,0.6,7.2,0.7,10.9c0,0.1,0,0.3,0,0.4
+					c-0.1,0.2-0.3,0.2-0.4,0.3c-2.9,1.3-6,1.9-9.1,1.8c-1.1-2.6-1.4-5.4-1.7-8.2c-0.2-2-1.6-5.5,1-6.1c0.9-0.2,2.2,0.2,3.1,0.2
+					C640.1,134.5,641.8,134.3,643.4,134z"/>
+				<path class="st1" d="M637.1,131.2c0.3,0.3,0.9,0.3,1.3,0.3c2.8-0.1,5.7-0.4,8.5-1c0.4-0.1,0.9-0.2,1-0.6c0.2-0.4,0-0.9-0.2-1.3
+					c-0.4-0.7-0.9-1.4-1.4-2.1c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.4-0.1c-1.5,0-2.7-0.1-4.1,0.3c-1.4,0.4-4.8,0.2-5.2,1.2
+					C635.8,128.7,636.1,129.9,637.1,131.2z"/>
+			</g>
+			<path class="st0" d="M659.1,112.1c1.9,0.9,4,1,5.8,2c3.6,2,4.5,6.6,5.1,10.7c1.5,10.2,3,20.4,4.5,30.6c0.8,5.5,1.6,10.9,2.4,16.4
+				c1,6.6,1.9,10.2,2.7,16.8c0.3,2.7,0.6,5.5,1,8.2c0.3,1.8,0.6,3.5,0.6,5.3c0.3,6.9-3.5,13.8-9.4,17.4c-1.5,0.9-3.3,1.9-3.5,3.7
+				c-0.2,1.6,1.3,3.1,1.3,4.7c5.8-5.3,12.5-11.1,14-18.8c1.4-7.4-0.4-13.9-1-21.6c-0.2-2.1-0.7-4.5-1-7.3c-1-7.8-1.9-12.6-3.4-20.4
+				c-1.5-8.2-2.4-16.4-3.3-24.7c-0.7-5.9-2-11.7-3.2-17.6c-0.2-0.8-0.4-1.6-0.8-2.3c-0.5-0.8-1.9-2.5-2.8-3c-3-1.8-5.9-2.7-9.3-3.7
+				C654.4,107.3,656.7,111,659.1,112.1z"/>
+			<path class="st1" d="M637.1,205c-0.3,0-0.5,0-0.8,0.2c-0.6,0.3-0.6,1.2-0.5,1.8c0,0.2,0.1,0.5,0.2,0.7c0.2,0.3,0.7,0.3,1.1,0.3
+				c2.6,0,5.2-0.3,7.7-0.8c1.4-0.2,5.7-0.6,3.4-2.8c-1-1-2.6-0.4-3.8-0.2C642,204.7,639.6,204.8,637.1,205z"/>
+			<path class="st1" d="M636.4,156.1c-1.1,0.1-2.3,0.3-3,1.1c-0.5,0.7-0.6,1.6-0.5,2.4c0,0.2,0.1,0.4,0.2,0.6
+				c0.3,0.6,1.1,0.6,1.8,0.6c3.5-0.2,7-0.8,10.4-1.8c0.5-0.2,1.1-0.3,1.5-0.7c1.9-1.7-0.5-3.5-2.2-3.1
+				C641.9,155.8,639.1,155.9,636.4,156.1z"/>
+		</g>
+		<path class="st1" d="M653.9,221.6c-3.6-1.2-7.6-0.6-11.2,0.3c-3.7,1-7.2,2.4-11,3c-2,0.3-10.1,0.6-11.8,1.6
+			c-5.3,3.1-4.2,6.6-2.9,8.2c1.3,1.5,3.4,2.3,5.4,2.5s4.1,0.1,6.1,0.1c1.7,0.1,3.5,0.3,5.2,0.3c5.1,0,19.7-4.2,24.4-6.2
+			c3.2-1.4,4.3-2.3,2-5.4C658.6,224,656.4,222.4,653.9,221.6z"/>
+	</g>
+	<path class="st0" d="M603.1,105.8c0,0-3.7-12.4,1.8-13.7c5.5-1.3,48.6-6.4,49.8-0.4c1.3,6.1-1.2,11.4-1.2,11.4l3.5,0.5
+		c0,0,4.6-15.3,1.1-17.1c-3.6-1.8-16.2-5.2-27-5.1s-35.8,2.5-33.6,13.5c2.1,11.1,3,11.6,3,11.6L603.1,105.8z"/>
+	<g>
+		<path d="M603.4,95.7c0.4,0.3,0.8,0.7,1.3,0.7c0.4,0,0.8-0.2,1.2-0.4c2-1.2,5.2-4.5,5-6.8c-0.1-0.9-0.7-1.8-1-2.6
+			c-1.5-4.2-2.4-5.7-4.3-9c-0.6-1.1-0.1-1.4-0.3-2.6c-0.2-1.2-0.4-3.3-0.5-4.5c-0.1-1.7-0.6-2-0.9-3.5c-0.1-0.4,0.1-0.8,0.4-1.1
+			c0.4-0.4,1-0.4,1.5-0.5c4.6-0.2,9.3-0.5,13.9-0.8c1.6-0.1,3.2-0.2,4.8-0.3c10.8-0.7,21.5-1.4,32.3-2.1c0.4,0,0.9-0.1,1.2-0.4
+			c0.2-0.3,0.2-0.8,0.1-1.1c-1-4.2-3-8.3-2.3-12.5c0.3-1.6,1-3.1,1.6-4.7c1-2.6,1.7-5.3,2.1-8c0.1-0.4,0.1-0.8,0-1.1
+			c-0.1-0.5-0.5-0.9-0.9-1.2c-3.2-2.8-7.2-2.3-11.2-3.6c-2.4-0.8-5.5-1.9-7.9-2.3c-1.2-0.2-2.3-0.8-3.6-1.1
+			c-1.5-0.3-2.8-0.8-4.3-1.1c-3.7-0.8-7.5-1.6-11.1-2.7c-1.9,4.8-3.4,8.6-5.3,13.4c-0.6,1.6-1.3,3.3-2.5,4.6c-1.1,1.2-2.6,2-4,2.8
+			c-5.9,3.4-11.5,7.3-17.1,11.3c-0.9,0.7-1.9,1.3-2.5,2.3c-0.7,1.1-0.8,2.5-0.9,3.8c-0.5,5.7-2.1,11.7-2.6,17.4
+			c-0.3,3.5,4.6,6.2,7,8.4C596.4,89.4,599.9,92.5,603.4,95.7z"/>
+		<path class="st0" d="M605.6,85c-1.6-2.2-3.1-4.5-4-7.2c-1-2.8-0.9-3.5-2.1-6.4c0.9-0.4,1-2.1,1.8-2.4c3.2-1.4,6-1,10.1-2.4
+			c3.8-1.3,7.7-2.5,11.7-2.9c2.5-0.3,5.1-0.2,7.6-0.6c3.2-0.5,6.3-1.6,9.5-2c4-0.5,6.8-0.1,10.9-0.3c-1.8-2.9-1.1-5.5-0.3-8.7
+			c0.4-1.6,1.1-5.4,1.5-7c0.5-1.6,0.6-2.7,0.8-4.4c0.1-0.7,1.9-3.3,1.4-3.8c-1.1-1.1-4.1-1.1-6.4-1.5c-7.7-1.4-15.1-3.6-22.8-5.5
+			c-0.6-0.1-1.2-0.3-1.7,0c-0.4,0.3-0.7,0.7-0.9,1.2c-1.2,2.8-3.3,7-4.5,9.7c-0.5,1.1-1,2.2-1.8,3.1c-0.7,0.7-1.7,1.2-2.6,1.7
+			c-6.7,3.3-13,7.3-18.9,11.9c-0.7,0.5-1.4,1.1-1.9,1.9c-0.4,0.6-0.5,1.4-0.7,2.1c-1.1,4.7-1.9,9.5-2.4,14.2
+			c-0.1,0.9-0.2,1.8,0.2,2.5c0.4,0.8,1.1,1.3,1.8,1.8c3.9,2.8,6.1,6.4,9.7,9.5c2.1,1.8,2.6,2.4,3.4,1.3
+			C606.1,89.4,606.3,86.1,605.6,85z"/>
+		<path d="M613.5,67.2c0,0,7.4-5,11.9-11.3c0,0-2.2,6.1-9,11L613.5,67.2z"/>
+		<path class="st1" d="M597.2,85.1c-0.3-0.3-0.1-0.7,0.3-0.6c0.6,0.2,2.1,1.1,3.4,2.1c0,0,3.4,3.2,3.6,4.6c0,0.2-0.2,0.3-0.4,0.2
+			c-0.5-0.1-1.6-0.7-3.8-2.9L597.2,85.1z"/>
+		<path class="st1" d="M628.8,30.6c-0.9-0.2-2.7-0.4-3.5-0.7c-1.1-0.3-1.4-0.4-2.2,0.5c-2.2,3.8-3.6,8.4-5.6,12.2
+			c0.6-0.2,2.6-1.6,3.2-1.7c2.8-0.5,1.4-0.3,4.2-0.7c1.6-2.9,4.3-6,5.7-8.9c0.1-0.1,0.1-0.2,0.1-0.3L628.8,30.6z"/>
+		<path d="M600.1,72.7c0,0-1.7-2.3-3.1-3.6c0,0,2.5,1.4,2.9,1.9c0,0,0.3-1.5-0.5-2.2l2.3,2.3L600.1,72.7z"/>
+		<path class="st1" d="M592.8,73.2c0.4-0.7,0.5-1.4,0.7-2.2c0.5-2.5,1.1-5,1.6-7.4c0.3-1.4,0.6-2.7,1.3-3.9c1-1.7,2.8-2.8,4.5-3.8
+			c2.7-1.8,5.3-3.8,7.9-5.7c1.5-1.2,3.1-2.4,4.1-4c-6.3,3.4-12.6,6.8-18,11.5c-0.7,0.6-1.3,1.2-1.7,1.9c-0.4,0.6-0.5,1.3-0.7,2
+			c-0.6,2.5-1.1,4.9-1.6,7.4c-0.5,2.3-1.2,5-1.2,7.4C590.3,76.5,592.4,73.9,592.8,73.2z"/>
+		<path d="M597.2,85.1c0,0,0.2-0.9,1.7,0.1c0,0,2.2,1.5,3.2,2.6c0,0-2.1-3.2-4.9-4.2c0,0-2.1,0-1.8,1.8L597.2,85.1z"/>
+	</g>
+	<g>
+		<path d="M604.9,88.6c0.3-2.7,5-7.9,8.5-6.1c1.8,1,4,2.9,4.9,4.8c1.4-2.4,4-3.8,6.7-4.2s5.2,2.3,5.7,5.1c1.9-4.1,8.6-4.8,11.3-1.2
+			c0.4-2.6,3.2-4.4,5.7-4.1c2.6,0.3,4.7,2.4,5.5,4.9s0.3,5.2-0.8,7.5c-0.3,0.7-3.1,2.3-4.3,2.4c-1.6,0.1-3-0.2-4.2-2.6
+			c0.4,3-1.7,6.1-4.6,6.8s-6.3-1.1-7.3-3.9c-0.8,2.7-1.7,5.7-4.3,6.4c-0.7,0.2-3.9,0.3-4.6,0.1c-2.1-0.4-3.3-3.1-4.4-4.9
+			c0.5,1.3-0.7,3.7-2.1,4.3c-6.7,2.6-8.8-0.5-10.5-6.3C605.2,94.2,604.7,91.1,604.9,88.6z"/>
+		<path class="st0" d="M614.2,86.9c0.3,0.2,0.6,0.4,0.8,0.7c0.2,0.4,0.3,0.8,0.3,1.2c0.4,2.8,0.6,5.5,0.7,8.3c0,0.8,0,1.7-0.4,2.5
+			c-0.3,0.4-0.7,0.5-1,0.8c-1,0.8-2,0.8-3.2,0.6c-1.5-0.3-2.4-2.6-2.7-4.1C607.8,93.6,607,82.8,614.2,86.9z"/>
+		<path class="st0" d="M622,88.6c0.6-0.9,1.6-1.5,2.7-1.6c1.1-0.1,2,0.3,2.6,1.2c1,1.5,0.9,4.4,0.8,6.2c-0.1,1.3,0.2,3.2-0.6,4.2
+			c-0.8,1-2,1.6-3.3,1.5c-0.3,0-1.2-0.2-1.4-0.3c-1-0.4-1.7-3.4-1.8-4.5C620.8,93.3,620.8,90.5,622,88.6z"/>
+		<path class="st0" d="M634.9,89.6c0.5-0.8,1.3-1.4,2.2-1.6c1-0.1,2,0.3,2.6,1c1,1.3,1,2.9,1.1,4.5c0.1,1.1,0.1,2.7-0.6,3.6
+			c-0.6,0.9-1.5,1.4-2.7,1.4c-0.3,0-1-0.4-1.3-0.5c-0.9-0.3-1.4-1.4-1.6-2.3C634.4,93.8,633.9,91.3,634.9,89.6z"/>
+		<path class="st0" d="M645.7,88c0.4-0.6,1.2-1.1,1.9-1.1c0.8,0,1.6,0.4,2.1,1c0.8,1.2,0.5,1.3,0.5,2.6c0,1,0.2,2-0.4,2.7
+			c-0.6,0.7-1.7,0.7-2.7,0.6c-0.2,0-0.4-0.1-0.6-0.1c-0.8-0.3-1-1.2-1.1-2C645.3,90.1,644.8,89.3,645.7,88z"/>
+		<path class="st1" d="M611.9,85.7c0.8-0.2,2.1,0.8,2.2,1c0.1,0.2,0.1,0.4,0.1,0.6c0.1,1.5,0.3,2.6,0.3,4.1c0,0.5-0.3,1.3-0.5,1.7
+			c-0.2,0.2-0.4,0.4-0.6,0.6c-0.6,0.5-1.2,1-1.9,0.9c-0.8-0.1-2-1.5-2.1-2.3C609.1,90.6,607.8,86.8,611.9,85.7z"/>
+		<path class="st1" d="M636.9,87.1c0.6-0.2,1.7,0.4,1.8,0.5c0.1,0.1,0.4,0.5,0.4,0.7c0.1,1.1,0.3,2,0.3,3.2c0,0.3-0.6,1.1-0.8,1.4
+			c-0.1,0.2-0.3,0.3-0.4,0.5c-0.4,0.4-0.9,0.8-1.4,0.7c-0.6-0.1-1.6-1.2-1.7-1.8C634.8,90.9,633.8,87.9,636.9,87.1z"/>
+		<path class="st1" d="M624.9,86.8c0.8-0.2,1.9,0.6,1.9,0.8c0.1,0.2,0.1,0.4,0.1,0.6c0,1.3,0.2,1.9,0.1,3.3c0,0.4-0.4,1.7-0.6,2
+			c-0.2,0.2-0.4,0.4-0.6,0.6c-0.5,0.5-1.3,0.5-1.9,0.5c-0.7,0-1.6-1.3-1.7-2C622,91,620.4,87.9,624.9,86.8z"/>
+		<path d="M610.3,93.9c0,0,3,0.2,3.4-2.3l0.1-5.2l0.4,0.2l0.3,4.8c0,0-0.2,2.2-2.1,3C611,95,610.3,93.9,610.3,93.9z"/>
+		<path d="M623,94c0,0,3,0.2,3.4-2.3l0.1-5.2l0.4,0.2l0.3,4.8c0,0-0.2,2.2-2.1,3C623.7,95,623,94,623,94z"/>
+		<path d="M635.7,93.3c0,0,3,0.2,3.4-2.3l0.1-5.2l0.4,0.2l0.3,4.8c0,0-0.2,2.2-2.1,3C636.4,94.4,635.7,93.3,635.7,93.3z"/>
+		<path class="st1" d="M646.6,91.1c0,0,2,0.2,2.7-0.7c0,0,0.8-2.7,0-3.3s-3.2-0.5-3.9,1.4C645.4,88.5,645.7,90.2,646.6,91.1z"/>
+		<path d="M646.4,91c0,0,2.8,0,3.1-1.9l0-3.9l0.3,0.2l0.2,3.6c0,0-0.3,1.9-2.1,2.4C646.9,91.7,646.4,91,646.4,91z"/>
+	</g>
+	<path class="st1" d="M595.5,116.9c-0.4,0.7-1.2,1.1-1.8,1.5c-3.2,2.1-5.4,5.5-6.6,9.1s-1.7,7.4-2.1,11.2c-0.5,4.4-1,8.7-1.5,13.1
+		c-1.4-0.7-1.7-2.5-1.7-4.1c-0.1-6.7,1.2-13.4,2.7-19.9c0.6-2.6,1.3-5.3,2.9-7.4C588.6,118.7,597.6,113.6,595.5,116.9z"/>
+	<g>
+		<path class="st0" d="M70.9,138.8c0,2.2-0.4,3.8-1.1,4.8c-0.7,1-2,1.5-3.9,1.5c-1.9,0-3.2-0.5-3.9-1.5c-0.7-1-1.1-2.6-1.1-4.8
+			c0-2.2,0.4-3.8,1.1-4.9c0.7-1.1,2-1.6,3.8-1.6s3.1,0.5,3.8,1.6C70.5,134.9,70.9,136.6,70.9,138.8z M62.4,138.8
+			c0,1.8,0.2,3.1,0.7,3.9c0.5,0.8,1.4,1.2,2.8,1.2c1.4,0,2.3-0.4,2.8-1.2c0.5-0.8,0.7-2.1,0.7-3.9s-0.2-3.2-0.7-4
+			c-0.5-0.8-1.4-1.3-2.8-1.3c-1.4,0-2.3,0.4-2.8,1.3C62.7,135.6,62.4,136.9,62.4,138.8z"/>
+		<path class="st0" d="M78.8,135.9h1.4v9h-1.4v-0.6c-0.9,0.5-1.8,0.8-2.7,0.8c-1.2,0-2-0.3-2.4-1c-0.4-0.6-0.6-1.8-0.6-3.5v-4.7h1.4
+			v4.7c0,1.3,0.1,2.2,0.3,2.6c0.2,0.4,0.7,0.7,1.5,0.7c0.4,0,0.8-0.1,1.2-0.2c0.4-0.1,0.7-0.2,0.9-0.3l0.3-0.2V135.9z"/>
+		<path class="st0" d="M82.7,144.9v-9h1.3v1.2c1-0.7,2.1-1.2,3.3-1.4v1.4c-0.5,0.1-1,0.2-1.6,0.5c-0.5,0.2-1,0.4-1.3,0.5l-0.5,0.2
+			v6.6H82.7z"/>
+		<path class="st0" d="M95.7,137c-1.3,0-2,0.5-2,1.4c0,0.4,0.1,0.7,0.4,0.9s1,0.4,2.1,0.5c1.1,0.2,1.8,0.4,2.3,0.8
+			c0.4,0.3,0.7,1,0.7,1.9s-0.3,1.6-0.9,2c-0.6,0.4-1.5,0.6-2.6,0.6c-0.7,0-1.6-0.1-2.6-0.3l-0.5-0.1l0.1-1.2
+			c1.4,0.2,2.4,0.3,3.1,0.3c0.7,0,1.2-0.1,1.6-0.3c0.4-0.2,0.5-0.6,0.5-1.1c0-0.5-0.2-0.9-0.5-1.1c-0.3-0.2-1-0.4-2.1-0.5
+			c-1.1-0.2-1.8-0.4-2.2-0.7c-0.4-0.3-0.7-0.9-0.7-1.8c0-0.9,0.3-1.5,0.9-1.9s1.4-0.6,2.3-0.6c0.7,0,1.6,0.1,2.8,0.3l0.5,0.1l0,1.2
+			C97.6,137,96.5,137,95.7,137z"/>
+		<path class="st0" d="M100.3,135.9h1.3l2.2,7.8h0.6l2.3-7.8h1.4l-3.7,13H103l1.2-4h-1.3L100.3,135.9z"/>
+		<path class="st0" d="M112.5,137c-1.3,0-2,0.5-2,1.4c0,0.4,0.1,0.7,0.4,0.9s1,0.4,2.1,0.5c1.1,0.2,1.8,0.4,2.3,0.8
+			c0.4,0.3,0.7,1,0.7,1.9s-0.3,1.6-0.9,2c-0.6,0.4-1.5,0.6-2.6,0.6c-0.7,0-1.6-0.1-2.6-0.3l-0.5-0.1l0.1-1.2
+			c1.4,0.2,2.4,0.3,3.1,0.3c0.7,0,1.2-0.1,1.6-0.3c0.4-0.2,0.5-0.6,0.5-1.1c0-0.5-0.2-0.9-0.5-1.1c-0.3-0.2-1-0.4-2.1-0.5
+			c-1.1-0.2-1.8-0.4-2.2-0.7c-0.4-0.3-0.7-0.9-0.7-1.8c0-0.9,0.3-1.5,0.9-1.9s1.4-0.6,2.3-0.6c0.7,0,1.6,0.1,2.8,0.3l0.5,0.1l0,1.2
+			C114.4,137,113.3,137,112.5,137z"/>
+		<path class="st0" d="M122.7,137.1h-2.9v4.3c0,1,0.1,1.7,0.2,2s0.5,0.5,1.1,0.5l1.6-0.1l0.1,1.1c-0.8,0.1-1.4,0.2-1.8,0.2
+			c-0.9,0-1.6-0.2-1.9-0.7c-0.4-0.5-0.5-1.3-0.5-2.6v-4.7h-1.3v-1.2h1.3v-2.8h1.3v2.8h2.9V137.1z"/>
+		<path class="st0" d="M130.5,143.8l0.5-0.1l0,1.1c-1.4,0.2-2.5,0.3-3.5,0.3c-1.3,0-2.2-0.4-2.8-1.1c-0.5-0.7-0.8-1.9-0.8-3.5
+			c0-3.2,1.3-4.7,3.8-4.7c1.2,0,2.1,0.3,2.7,1s0.9,1.7,0.9,3.2l-0.1,1h-5.9c0,1,0.2,1.7,0.5,2.2c0.4,0.5,1,0.7,1.9,0.7
+			S129.6,143.9,130.5,143.8z M130,139.9c0-1.1-0.2-1.9-0.5-2.3s-0.9-0.7-1.7-0.7s-1.4,0.2-1.8,0.7c-0.4,0.5-0.6,1.2-0.6,2.3H130z"/>
+		<path class="st0" d="M134.8,144.9h-1.4v-9h1.3v0.6c0.9-0.5,1.8-0.8,2.6-0.8c1.1,0,1.9,0.3,2.3,0.9c0.4-0.2,0.9-0.5,1.5-0.6
+			c0.6-0.2,1.2-0.3,1.7-0.3c1.2,0,2,0.3,2.4,1c0.4,0.6,0.6,1.8,0.6,3.5v4.8h-1.3v-4.7c0-1.2-0.1-2.1-0.4-2.6s-0.8-0.7-1.5-0.7
+			c-0.4,0-0.8,0.1-1.2,0.2s-0.7,0.2-1,0.3l-0.3,0.2c0.2,0.4,0.2,1.3,0.2,2.6v4.7h-1.3v-4.6c0-1.3-0.1-2.2-0.4-2.6
+			c-0.2-0.5-0.7-0.7-1.5-0.7c-0.4,0-0.8,0.1-1.2,0.2s-0.7,0.2-0.9,0.3l-0.3,0.2V144.9z"/>
+		<path class="st0" d="M151.4,137c-1.3,0-2,0.5-2,1.4c0,0.4,0.1,0.7,0.4,0.9s1,0.4,2.1,0.5c1.1,0.2,1.8,0.4,2.3,0.8
+			c0.4,0.3,0.7,1,0.7,1.9s-0.3,1.6-0.9,2c-0.6,0.4-1.5,0.6-2.6,0.6c-0.7,0-1.6-0.1-2.6-0.3l-0.5-0.1l0.1-1.2
+			c1.4,0.2,2.4,0.3,3.1,0.3c0.7,0,1.2-0.1,1.6-0.3c0.4-0.2,0.5-0.6,0.5-1.1c0-0.5-0.2-0.9-0.5-1.1c-0.3-0.2-1-0.4-2.1-0.5
+			c-1.1-0.2-1.8-0.4-2.2-0.7c-0.4-0.3-0.7-0.9-0.7-1.8c0-0.9,0.3-1.5,0.9-1.9s1.4-0.6,2.3-0.6c0.7,0,1.6,0.1,2.8,0.3l0.5,0.1l0,1.2
+			C153.2,137,152.1,137,151.4,137z"/>
+		<path class="st0" d="M162.6,137.1v7.8h-1.4v-7.8h-1.1v-1.2h1.1v-0.8c0-1.3,0.2-2.1,0.5-2.6c0.4-0.5,1-0.7,1.9-0.7l1.8,0.1l0,1.1
+			c-0.7,0-1.2,0-1.7,0s-0.8,0.1-0.9,0.4c-0.2,0.3-0.3,0.8-0.3,1.7v0.8h2.6v1.2H162.6z"/>
+		<path class="st0" d="M166.3,140.4c0-1.6,0.3-2.8,0.9-3.6c0.6-0.7,1.6-1.1,3-1.1c1.4,0,2.4,0.4,3,1.1c0.6,0.7,0.9,1.9,0.9,3.6
+			c0,1.6-0.3,2.8-0.8,3.6s-1.6,1.1-3,1.1c-1.5,0-2.5-0.4-3-1.1C166.5,143.2,166.3,142,166.3,140.4z M167.7,140.4
+			c0,1.3,0.2,2.2,0.5,2.8c0.3,0.5,1,0.8,2,0.8c1,0,1.7-0.3,2-0.8c0.3-0.5,0.5-1.4,0.5-2.8c0-1.3-0.2-2.2-0.5-2.7s-1-0.7-1.9-0.7
+			c-0.9,0-1.6,0.2-1.9,0.7S167.7,139.1,167.7,140.4z"/>
+		<path class="st0" d="M176.2,144.9v-9h1.3v1.2c1-0.7,2.1-1.2,3.3-1.4v1.4c-0.5,0.1-1,0.2-1.6,0.5c-0.5,0.2-1,0.4-1.3,0.5l-0.5,0.2
+			v6.6H176.2z"/>
+		<path class="st0" d="M190.3,135.7c1.2,0,2.1,0.3,2.5,1c0.5,0.7,0.7,1.9,0.7,3.6c0,1.7-0.3,2.9-0.9,3.6c-0.6,0.7-1.7,1.1-3.3,1.1
+			c-0.5,0-1.3,0-2.5-0.1l-0.5-0.1V132h1.3v4.4C188.6,136,189.5,135.7,190.3,135.7z M189.3,143.9c1.2,0,2-0.3,2.3-0.8
+			c0.4-0.5,0.6-1.4,0.6-2.7c0-1.3-0.2-2.2-0.5-2.7s-0.8-0.8-1.6-0.8c-0.7,0-1.4,0.1-2.1,0.4l-0.4,0.1v6.3
+			C188.5,143.9,189,143.9,189.3,143.9z"/>
+		<path class="st0" d="M201.4,135.9h1.4v9h-1.4v-0.6c-0.9,0.5-1.8,0.8-2.7,0.8c-1.2,0-2-0.3-2.4-1c-0.4-0.6-0.6-1.8-0.6-3.5v-4.7
+			h1.4v4.7c0,1.3,0.1,2.2,0.3,2.6c0.2,0.4,0.7,0.7,1.5,0.7c0.4,0,0.8-0.1,1.2-0.2c0.4-0.1,0.7-0.2,0.9-0.3l0.3-0.2V135.9z"/>
+		<path class="st0" d="M205.4,133.9v-1.6h1.4v1.6H205.4z M205.4,144.9v-9h1.4v9H205.4z"/>
+		<path class="st0" d="M209.4,144.9V132h1.4v12.9H209.4z"/>
+		<path class="st0" d="M220.4,132v12.9h-1.3v-0.6c-0.9,0.5-1.8,0.8-2.7,0.8c-0.5,0-0.9-0.1-1.3-0.2c-0.4-0.1-0.7-0.3-1-0.6
+			c-0.6-0.6-1-1.8-1-3.6s0.3-3,0.9-3.8c0.6-0.8,1.5-1.2,2.9-1.2c0.7,0,1.4,0.1,2.2,0.2v-4H220.4z M215.7,143.8
+			c0.2,0.1,0.5,0.1,0.8,0.1c0.3,0,0.7-0.1,1.2-0.2c0.4-0.1,0.8-0.2,1-0.3l0.4-0.2v-6.1c-0.8-0.1-1.5-0.2-2.1-0.2
+			c-0.9,0-1.5,0.3-1.9,0.9c-0.4,0.6-0.5,1.5-0.5,2.7c0,1.4,0.2,2.3,0.6,2.8C215.3,143.5,215.5,143.7,215.7,143.8z"/>
+		<path class="st0" d="M223,133.9v-1.6h1.4v1.6H223z M223,144.9v-9h1.4v9H223z"/>
+		<path class="st0" d="M228.3,144.9h-1.4v-9h1.3v0.6c1-0.5,1.9-0.8,2.8-0.8c1.2,0,2,0.3,2.4,1s0.6,1.8,0.6,3.5v4.8h-1.3v-4.7
+			c0-1.2-0.1-2.1-0.4-2.6s-0.8-0.7-1.6-0.7c-0.4,0-0.8,0.1-1.2,0.2c-0.4,0.1-0.8,0.2-1,0.3l-0.3,0.2V144.9z"/>
+		<path class="st0" d="M240.1,149.2c-1.4,0-2.4-0.2-3-0.6c-0.6-0.4-0.9-1.1-0.9-2.1c0-0.5,0.1-0.9,0.3-1.2c0.2-0.3,0.6-0.7,1.1-1
+			c-0.3-0.2-0.5-0.6-0.5-1.2c0-0.2,0.1-0.6,0.5-1.1l0.2-0.3c-0.9-0.4-1.4-1.3-1.4-2.7c0-2.1,1.1-3.1,3.4-3.1c0.6,0,1.1,0.1,1.6,0.2
+			l0.3,0.1l2.7-0.1v1.2l-1.7,0c0.4,0.4,0.6,1,0.6,1.8c0,1.1-0.3,1.9-0.8,2.4c-0.6,0.5-1.4,0.7-2.6,0.7c-0.3,0-0.6,0-0.9-0.1
+			c-0.2,0.5-0.3,0.9-0.3,1c0,0.4,0.1,0.6,0.3,0.7c0.2,0.1,0.9,0.1,2.1,0.1c1.2,0,2,0.2,2.5,0.5c0.5,0.4,0.8,1.1,0.8,2.1
+			C244.1,148.2,242.8,149.2,240.1,149.2z M237.5,146.3c0,0.6,0.2,1.1,0.5,1.3c0.4,0.2,1,0.4,2,0.4s1.6-0.1,2.1-0.4
+			c0.4-0.3,0.6-0.7,0.6-1.3s-0.1-1-0.4-1.2c-0.3-0.2-0.9-0.3-1.8-0.3l-1.9-0.1c-0.4,0.3-0.7,0.5-0.8,0.8
+			C237.6,145.7,237.5,146,237.5,146.3z M237.7,138.8c0,0.7,0.2,1.2,0.5,1.5s0.8,0.5,1.6,0.5c0.7,0,1.3-0.2,1.6-0.5
+			c0.3-0.3,0.5-0.8,0.5-1.5c0-0.7-0.2-1.2-0.5-1.5c-0.3-0.3-0.8-0.5-1.6-0.5c-0.7,0-1.3,0.2-1.6,0.5S237.7,138.1,237.7,138.8z"/>
+		<path class="st0" d="M245.2,147.1l0.8-4.1h1.5l-1.2,4.1H245.2z"/>
+		<path class="st0" d="M253.1,135.9h1.4l1.8,7.8h0.3l2.1-7.7h1.4l2.1,7.7h0.3l1.8-7.8h1.4l-2.1,9h-2.2l-1.9-7l-1.9,7h-2.2
+			L253.1,135.9z"/>
+		<path class="st0" d="M267.6,144.9v-9h1.3v1.2c1-0.7,2.1-1.2,3.3-1.4v1.4c-0.5,0.1-1,0.2-1.6,0.5c-0.5,0.2-1,0.4-1.3,0.5l-0.5,0.2
+			v6.6H267.6z"/>
+		<path class="st0" d="M273.8,133.9v-1.6h1.4v1.6H273.8z M273.8,144.9v-9h1.4v9H273.8z"/>
+		<path class="st0" d="M282.4,137.1h-2.9v4.3c0,1,0.1,1.7,0.2,2s0.5,0.5,1.1,0.5l1.6-0.1l0.1,1.1c-0.8,0.1-1.4,0.2-1.8,0.2
+			c-0.9,0-1.6-0.2-1.9-0.7c-0.4-0.5-0.5-1.3-0.5-2.6v-4.7h-1.3v-1.2h1.3v-2.8h1.3v2.8h2.9V137.1z"/>
+		<path class="st0" d="M284,133.9v-1.6h1.4v1.6H284z M284,144.9v-9h1.4v9H284z"/>
+		<path class="st0" d="M289.3,144.9H288v-9h1.3v0.6c1-0.5,1.9-0.8,2.8-0.8c1.2,0,2,0.3,2.4,1s0.6,1.8,0.6,3.5v4.8h-1.3v-4.7
+			c0-1.2-0.1-2.1-0.4-2.6s-0.8-0.7-1.6-0.7c-0.4,0-0.8,0.1-1.2,0.2c-0.4,0.1-0.8,0.2-1,0.3l-0.3,0.2V144.9z"/>
+		<path class="st0" d="M301.1,149.2c-1.4,0-2.4-0.2-3-0.6c-0.6-0.4-0.9-1.1-0.9-2.1c0-0.5,0.1-0.9,0.3-1.2c0.2-0.3,0.6-0.7,1.1-1
+			c-0.3-0.2-0.5-0.6-0.5-1.2c0-0.2,0.1-0.6,0.5-1.1l0.2-0.3c-0.9-0.4-1.4-1.3-1.4-2.7c0-2.1,1.1-3.1,3.4-3.1c0.6,0,1.1,0.1,1.6,0.2
+			l0.3,0.1l2.7-0.1v1.2l-1.7,0c0.4,0.4,0.6,1,0.6,1.8c0,1.1-0.3,1.9-0.8,2.4c-0.6,0.5-1.4,0.7-2.6,0.7c-0.3,0-0.6,0-0.9-0.1
+			c-0.2,0.5-0.3,0.9-0.3,1c0,0.4,0.1,0.6,0.3,0.7c0.2,0.1,0.9,0.1,2.1,0.1c1.2,0,2,0.2,2.5,0.5c0.5,0.4,0.8,1.1,0.8,2.1
+			C305.1,148.2,303.8,149.2,301.1,149.2z M298.6,146.3c0,0.6,0.2,1.1,0.5,1.3c0.4,0.2,1,0.4,2,0.4s1.6-0.1,2.1-0.4
+			c0.4-0.3,0.6-0.7,0.6-1.3s-0.1-1-0.4-1.2c-0.3-0.2-0.9-0.3-1.8-0.3l-1.9-0.1c-0.4,0.3-0.7,0.5-0.8,0.8
+			C298.7,145.7,298.6,146,298.6,146.3z M298.7,138.8c0,0.7,0.2,1.2,0.5,1.5s0.8,0.5,1.6,0.5c0.7,0,1.3-0.2,1.6-0.5
+			c0.3-0.3,0.5-0.8,0.5-1.5c0-0.7-0.2-1.2-0.5-1.5c-0.3-0.3-0.8-0.5-1.6-0.5c-0.7,0-1.3,0.2-1.6,0.5S298.7,138.1,298.7,138.8z"/>
+		<path class="st0" d="M317.2,138.6v4.6c0,0.4,0.4,0.7,1,0.8l-0.1,1.1c-0.9,0-1.7-0.2-2.1-0.7c-1.1,0.5-2.2,0.7-3.2,0.7
+			c-0.8,0-1.5-0.2-1.9-0.7c-0.4-0.5-0.6-1.1-0.6-2s0.2-1.5,0.7-1.9c0.4-0.4,1.1-0.7,2.1-0.8l2.8-0.3v-0.8c0-0.6-0.1-1-0.4-1.3
+			c-0.3-0.3-0.6-0.4-1.1-0.4c-1,0-2,0.1-3,0.2l-0.6,0.1l-0.1-1c1.3-0.3,2.5-0.4,3.5-0.4s1.8,0.2,2.2,0.7
+			C317,136.9,317.2,137.6,317.2,138.6z M311.7,142.3c0,1.1,0.5,1.7,1.4,1.7c0.8,0,1.6-0.1,2.4-0.4l0.4-0.1v-3l-2.7,0.3
+			c-0.5,0-0.9,0.2-1.2,0.5S311.7,141.8,311.7,142.3z"/>
+		<path class="st0" d="M321.2,144.9h-1.4v-9h1.3v0.6c1-0.5,1.9-0.8,2.8-0.8c1.2,0,2,0.3,2.4,1s0.6,1.8,0.6,3.5v4.8h-1.3v-4.7
+			c0-1.2-0.1-2.1-0.4-2.6s-0.8-0.7-1.6-0.7c-0.4,0-0.8,0.1-1.2,0.2c-0.4,0.1-0.8,0.2-1,0.3l-0.3,0.2V144.9z"/>
+		<path class="st0" d="M336.5,132v12.9h-1.3v-0.6c-0.9,0.5-1.8,0.8-2.7,0.8c-0.5,0-0.9-0.1-1.3-0.2c-0.4-0.1-0.7-0.3-1-0.6
+			c-0.6-0.6-1-1.8-1-3.6s0.3-3,0.9-3.8c0.6-0.8,1.5-1.2,2.9-1.2c0.7,0,1.4,0.1,2.2,0.2v-4H336.5z M331.8,143.8
+			c0.2,0.1,0.5,0.1,0.8,0.1c0.3,0,0.7-0.1,1.2-0.2c0.4-0.1,0.8-0.2,1-0.3l0.4-0.2v-6.1c-0.8-0.1-1.5-0.2-2.1-0.2
+			c-0.9,0-1.5,0.3-1.9,0.9c-0.4,0.6-0.5,1.5-0.5,2.7c0,1.4,0.2,2.3,0.6,2.8C331.4,143.5,331.6,143.7,331.8,143.8z"/>
+		<path class="st0" d="M346.4,135.7c0.4,0,1.1,0.1,2,0.2l0.4,0.1l-0.1,1.1c-1-0.1-1.7-0.2-2.1-0.2c-1,0-1.7,0.2-2.1,0.7
+			c-0.4,0.5-0.5,1.4-0.5,2.7c0,1.3,0.2,2.2,0.5,2.7c0.3,0.5,1.1,0.8,2.1,0.8l2.1-0.2l0.1,1.1c-1.1,0.2-2,0.3-2.5,0.3
+			c-1.4,0-2.4-0.4-2.9-1.1c-0.5-0.7-0.8-1.9-0.8-3.6s0.3-2.9,0.9-3.6C344.1,136.1,345.1,135.7,346.4,135.7z"/>
+		<path class="st0" d="M350.4,140.4c0-1.6,0.3-2.8,0.9-3.6c0.6-0.7,1.6-1.1,3-1.1c1.4,0,2.4,0.4,3,1.1c0.6,0.7,0.9,1.9,0.9,3.6
+			c0,1.6-0.3,2.8-0.8,3.6s-1.6,1.1-3,1.1c-1.5,0-2.5-0.4-3-1.1C350.6,143.2,350.4,142,350.4,140.4z M351.8,140.4
+			c0,1.3,0.2,2.2,0.5,2.8c0.3,0.5,1,0.8,2,0.8c1,0,1.7-0.3,2-0.8c0.3-0.5,0.5-1.4,0.5-2.8c0-1.3-0.2-2.2-0.5-2.7s-1-0.7-1.9-0.7
+			c-0.9,0-1.6,0.2-1.9,0.7S351.8,139.1,351.8,140.4z"/>
+		<path class="st0" d="M361.6,144.9h-1.4v-9h1.3v0.6c0.9-0.5,1.8-0.8,2.6-0.8c1.1,0,1.9,0.3,2.3,0.9c0.4-0.2,0.9-0.5,1.5-0.6
+			c0.6-0.2,1.2-0.3,1.7-0.3c1.2,0,2,0.3,2.4,1c0.4,0.6,0.6,1.8,0.6,3.5v4.8h-1.3v-4.7c0-1.2-0.1-2.1-0.4-2.6s-0.8-0.7-1.5-0.7
+			c-0.4,0-0.8,0.1-1.2,0.2s-0.7,0.2-1,0.3l-0.3,0.2c0.2,0.4,0.2,1.3,0.2,2.6v4.7h-1.3v-4.6c0-1.3-0.1-2.2-0.4-2.6
+			c-0.2-0.5-0.7-0.7-1.5-0.7c-0.4,0-0.8,0.1-1.2,0.2s-0.7,0.2-0.9,0.3l-0.3,0.2V144.9z"/>
+		<path class="st0" d="M376.7,144.9h-1.4v-9h1.3v0.6c0.9-0.5,1.8-0.8,2.6-0.8c1.1,0,1.9,0.3,2.3,0.9c0.4-0.2,0.9-0.5,1.5-0.6
+			c0.6-0.2,1.2-0.3,1.7-0.3c1.2,0,2,0.3,2.4,1s0.6,1.8,0.6,3.5v4.8h-1.3v-4.7c0-1.2-0.1-2.1-0.4-2.6s-0.8-0.7-1.5-0.7
+			c-0.4,0-0.8,0.1-1.2,0.2s-0.7,0.2-1,0.3l-0.3,0.2c0.2,0.4,0.2,1.3,0.2,2.6v4.7H381v-4.6c0-1.3-0.1-2.2-0.4-2.6
+			c-0.2-0.5-0.7-0.7-1.5-0.7c-0.4,0-0.8,0.1-1.2,0.2s-0.7,0.2-0.9,0.3l-0.3,0.2V144.9z"/>
+		<path class="st0" d="M396,135.9h1.3v9H396v-0.6c-0.9,0.5-1.8,0.8-2.7,0.8c-1.2,0-2-0.3-2.4-1c-0.4-0.6-0.6-1.8-0.6-3.5v-4.7h1.3
+			v4.7c0,1.3,0.1,2.2,0.3,2.6c0.2,0.4,0.7,0.7,1.5,0.7c0.4,0,0.8-0.1,1.2-0.2c0.4-0.1,0.7-0.2,0.9-0.3l0.3-0.2V135.9z"/>
+		<path class="st0" d="M401.3,144.9h-1.4v-9h1.3v0.6c1-0.5,1.9-0.8,2.8-0.8c1.2,0,2,0.3,2.4,1s0.6,1.8,0.6,3.5v4.8h-1.3v-4.7
+			c0-1.2-0.1-2.1-0.4-2.6s-0.8-0.7-1.6-0.7c-0.4,0-0.8,0.1-1.2,0.2s-0.8,0.2-1,0.3l-0.3,0.2V144.9z"/>
+		<path class="st0" d="M409.6,133.9v-1.6h1.4v1.6H409.6z M409.6,144.9v-9h1.4v9H409.6z"/>
+		<path class="st0" d="M416.9,135.7c0.4,0,1.1,0.1,2,0.2l0.4,0.1l-0.1,1.1c-1-0.1-1.7-0.2-2.1-0.2c-1,0-1.7,0.2-2.1,0.7
+			s-0.5,1.4-0.5,2.7c0,1.3,0.2,2.2,0.5,2.7c0.3,0.5,1.1,0.8,2.1,0.8l2.1-0.2l0.1,1.1c-1.1,0.2-2,0.3-2.5,0.3c-1.4,0-2.4-0.4-2.9-1.1
+			c-0.5-0.7-0.8-1.9-0.8-3.6s0.3-2.9,0.9-3.6C414.6,136.1,415.6,135.7,416.9,135.7z"/>
+		<path class="st0" d="M427.7,138.6v4.6c0,0.4,0.4,0.7,1,0.8l-0.1,1.1c-0.9,0-1.7-0.2-2.1-0.7c-1.1,0.5-2.2,0.7-3.2,0.7
+			c-0.8,0-1.5-0.2-1.9-0.7c-0.4-0.5-0.6-1.1-0.6-2s0.2-1.5,0.7-1.9c0.4-0.4,1.1-0.7,2.1-0.8l2.8-0.3v-0.8c0-0.6-0.1-1-0.4-1.3
+			c-0.3-0.3-0.6-0.4-1.1-0.4c-1,0-2,0.1-3,0.2l-0.6,0.1l-0.1-1c1.3-0.3,2.5-0.4,3.5-0.4c1,0,1.8,0.2,2.2,0.7
+			C427.5,136.9,427.7,137.6,427.7,138.6z M422.2,142.3c0,1.1,0.5,1.7,1.4,1.7c0.8,0,1.6-0.1,2.4-0.4l0.4-0.1v-3l-2.7,0.3
+			c-0.5,0-0.9,0.2-1.2,0.5S422.2,141.8,422.2,142.3z"/>
+		<path class="st0" d="M435.1,137.1h-2.9v4.3c0,1,0.1,1.7,0.2,2c0.1,0.3,0.5,0.5,1.1,0.5l1.6-0.1l0.1,1.1c-0.8,0.1-1.4,0.2-1.8,0.2
+			c-0.9,0-1.6-0.2-1.9-0.7c-0.4-0.5-0.5-1.3-0.5-2.6v-4.7h-1.3v-1.2h1.3v-2.8h1.3v2.8h2.9V137.1z"/>
+		<path class="st0" d="M436.7,133.9v-1.6h1.4v1.6H436.7z M436.7,144.9v-9h1.4v9H436.7z"/>
+		<path class="st0" d="M442,144.9h-1.4v-9h1.3v0.6c1-0.5,1.9-0.8,2.8-0.8c1.2,0,2,0.3,2.4,1s0.6,1.8,0.6,3.5v4.8h-1.3v-4.7
+			c0-1.2-0.1-2.1-0.4-2.6s-0.8-0.7-1.6-0.7c-0.4,0-0.8,0.1-1.2,0.2s-0.8,0.2-1,0.3l-0.3,0.2V144.9z"/>
+		<path class="st0" d="M453.8,149.2c-1.4,0-2.4-0.2-3-0.6c-0.6-0.4-0.9-1.1-0.9-2.1c0-0.5,0.1-0.9,0.3-1.2c0.2-0.3,0.6-0.7,1.1-1
+			c-0.3-0.2-0.5-0.6-0.5-1.2c0-0.2,0.1-0.6,0.4-1.1l0.2-0.3c-0.9-0.4-1.4-1.3-1.4-2.7c0-2.1,1.1-3.1,3.4-3.1c0.6,0,1.1,0.1,1.6,0.2
+			l0.3,0.1l2.7-0.1v1.2l-1.7,0c0.4,0.4,0.6,1,0.6,1.8c0,1.1-0.3,1.9-0.8,2.4c-0.6,0.5-1.4,0.7-2.6,0.7c-0.3,0-0.6,0-0.9-0.1
+			c-0.2,0.5-0.3,0.9-0.3,1c0,0.4,0.1,0.6,0.3,0.7c0.2,0.1,0.9,0.1,2.1,0.1c1.2,0,2,0.2,2.5,0.5c0.5,0.4,0.8,1.1,0.8,2.1
+			C457.8,148.2,456.5,149.2,453.8,149.2z M451.3,146.3c0,0.6,0.2,1.1,0.5,1.3c0.4,0.2,1,0.4,2,0.4c1,0,1.6-0.1,2.1-0.4
+			c0.4-0.3,0.6-0.7,0.6-1.3s-0.2-1-0.5-1.2c-0.3-0.2-0.9-0.3-1.8-0.3l-1.9-0.1c-0.4,0.3-0.7,0.5-0.8,0.8
+			C451.3,145.7,451.3,146,451.3,146.3z M451.4,138.8c0,0.7,0.2,1.2,0.5,1.5c0.3,0.3,0.8,0.5,1.6,0.5c0.7,0,1.3-0.2,1.6-0.5
+			c0.3-0.3,0.5-0.8,0.5-1.5c0-0.7-0.2-1.2-0.5-1.5c-0.3-0.3-0.8-0.5-1.6-0.5c-0.7,0-1.3,0.2-1.6,0.5
+			C451.5,137.6,451.4,138.1,451.4,138.8z"/>
+	</g>
+</g>
+</svg>

File diff suppressed because it is too large
+ 72 - 0
helpdesk/img/helpdesk_new.svg


BIN
helpdesk/img/storage_300.png


BIN
helpdesk/img/storage_earn.png


BIN
helpdesk/img/storageproviders.png


File diff suppressed because it is too large
+ 0 - 0
helpdesk/img/storageproviders.svg


BIN
helpdesk/img/validator_50.png


BIN
helpdesk/img/validator_earn.png


BIN
helpdesk/img/validators.png


File diff suppressed because it is too large
+ 0 - 0
helpdesk/img/validators.svg


+ 210 - 0
helpdesk/proposals/README.md

@@ -0,0 +1,210 @@
+Table of Contents
+---
+<!-- TOC START min:1 max:4 link:true asterisk:false update:true -->
+- [Overview](#overview)
+  - [Implemented Proposals](#implemented-proposals)
+      - [Text](#text)
+      - [Spending](#spending)
+      - [Set Max Validator Count](#set-max-validator-count)
+      - [Set Election Parameters](#set-election-parameters)
+      - [Runtime Upgrade](#runtime-upgrade)
+      - [Add Working Group Leader Opening](#add-working-group-leader-opening)
+      - [Begin Review Working Group Leader Application](#begin-review-working-group-leader-application)
+      - [Fill Working Group Leader Opening](#fill-working-group-leader-opening)
+      - [Set Working Group Mint Capacity](#set-working-group-mint-capacity)
+      - [Slash Working Group Leader Stake](#slash-working-group-leader-stake)
+      - [Decrease Working Group Leader Stake](#decrease-working-group-leader-stake)
+      - [Set Working Group Leader Reward](#set-working-group-leader-reward)
+      - [Terminate Working Group Leader Role](#terminate-working-group-leader-role)
+  - [Deprecated Proposals](#deprecated-proposals)
+      - [Evict Storage Provider](#evict-storage-provider)
+      - [Set Storage Role Parameters](#set-storage-role-parameters)
+      - [Set Content Curator Lead](#set-content-curator-lead)
+      - [Set Content Working Group Mint Capacity](#set-content-working-group-mint-capacity)
+  - [Mechanics](#mechanics)
+      - [Voting Kinds](#voting-kinds)
+      - [States and Outcomes](#states-and-outcomes)
+  - [Proposal Parameters](#proposal-parameters)
+  - [Proposal Flow](#proposal-flow)
+    - [Example](#example)
+      - [Voting Scenario A](#voting-scenario-a)
+<!-- TOC END -->
+
+# Overview
+
+When the `Council` was first introduced, it was only able to vote on whether or not a runtime upgrade should be implemented. This very rarely occurred, making the Council a rather insignificant part of the platform.
+
+As the `Council` is intended to be the executive arm of the Joystream governance system, we have now developed a proposal system that allows users to control most of the day-to-day decision making on the platform.
+
+
+## Implemented Proposals
+
+The list below contains all the proposal types currently available.
+
+#### Text
+Aka "Signal Proposal"
+
+Although no action will happen if such a proposal is voted through, it provides a way for user to request changes, propose improvements, complain about something, and in general voice their opinion on a matter. This will open a discussion, and Council Member can signal their approval or rejection through a vote. This can be used to notify the platform developers about key feature missing, highlight a topic of controversy, etc.
+
+#### Spending
+Aka "Funding Request"
+
+In general, this proposal will include an amount, and a beneficiary. This can be used to fund development, pay winners of competitions, make bonus payments for a role, or anything else that requires minting new tokens to a specific individual or group.
+
+#### Set Max Validator Count
+The Validators are rewarded for producing blocks, and will share the rewards that are minted each era (target 3600 blocks). This reward is calculated based on the total issuance, and the amount of tJOY staked by the pool of Validators relative to the total issuance. A higher number means smaller rewards for each individual Validator, but set to low and the network grinds to a halt.
+
+#### Set Election Parameters
+As the Council will see a significantly increased workload, there may be a need to change some of the Election cycle parameters. This proposal allows the Council to vote on expanding the Council seats, increase or decrease the length of the Voting process, or the minimum stakes required to participate. If this proposal is voted through, a change of these parameters will not be activated until the next election cycle, to avoid the current Council making changes benefitting themselves.
+
+#### Runtime Upgrade
+As before, upgrading the runtime can be proposed by any member, and voted in by the Council. This is a critical proposal that, if a "bad" runtime is proposed and voted in, can kill the blockchain.
+
+#### Add Working Group Leader Opening
+
+This proposal allows an opening for a Working Group Lead to be created. When editing the "Opening schema", you must ensure your changes still return a valid JSON schema. This determines what information is collected from candidates. Note that the reward specified is not binding, and is only determined when the [Fill Working Group Leader Opening](#fill-working-group-leader-opening) proposal is made (and approved).
+
+#### Begin Review Working Group Leader Application
+
+This simply sets the opening for Working Group Lead to the "in review" status, meaning no further applications can be accepted. It is required to move on to the `Fill Working Group Leader Opening` proposal.
+
+#### Fill Working Group Leader Opening
+
+If the Opening is in the "Review Stage", use this proposal to propose a specific Lead. The Council can now vote, and, if approved, this will be the new Lead.
+
+Note that there can be multiple proposals of this type at the same time, so multiple candidates can be considered simultaneously. However, once one is approved, the others will fail.
+
+#### Set Working Group Mint Capacity
+
+This effectively acts as a budget for a Working Group; the Lead and Worker payments are taken from this mint. The Working Group Lead will be unable to spend more than the limit established by this proposal. This proposal also does not add tokens to any residual funds remaining in the mint, it sets the mint capacity to exactly what is entered in the proposal once it is approved.
+
+#### Slash Working Group Leader Stake
+
+To punish or warn the Lead of a Working Group for not performing their job correctly, they can be slashed partially or fully without firing them using this proposal type.
+
+#### Decrease Working Group Leader Stake
+
+This proposal type allows decreasing the stake of a Working Group Lead.
+
+#### Set Working Group Leader Reward
+
+This proposal allows for changing the reward for the Lead of a working group if it appears too little or too much. Note that only the amount can be changed, not the frequency.
+
+#### Terminate Working Group Leader Role
+
+If for whatever reason the Working Group Lead needs to be removed from their post (and potentially slashed), this is the proposal type which needs to be voted on.
+
+## Deprecated Proposals
+
+#### Evict Storage Provider
+This allows users to make a proposal to "fire" a Storage Provider that is not performing the role satisfactorily.
+
+#### Set Storage Role Parameters
+The Storage Provider will be paid by minting new tokens, effectively increasing the tJOY supply. The incentive will be to keep both the number of slots, and the size of the individual rewards, as low as possible while maintaining a sufficient service.
+
+#### Set Content Curator Lead
+The Content Curator Lead is the first implementation of the concept of Group Leads on the platform. These will in general be responsible for hiring, firing, rewarding and training the group they are leading. They are hired by the council, and will be given a budget to perform their role satisfactorily, without inflating the supply more than necessary.
+
+This means they have to answer to the users if they fail in their task. In this particular case, all members can propose to:
+
+-   Set a Lead if there are none currently occupying the role
+-   Fire the existing Lead, without setting a new one
+-   Replace the existing Lead, with a specified new member
+
+If the proposal is voted through, the change will occur immediately.
+
+#### Set Content Working Group Mint Capacity
+To avoid the Lead paying themselves too much, or frivolous spending in general, the Lead can only spend as much as the Mint Capacity. Effectively, a budget for their spending. Once the Mint runs out, recurring rewards for the Content Curators (including themselves) will be frozen.
+
+If the Lead, or anyone else, wants to replenish or drain the existing Mint, a proposal can be made. If voted in, the new Capacity proposed will be set immediately.
+
+## Mechanics
+
+#### Voting Kinds
+A voter can choose between the following outcomes:
+- `Approve` - approving the proposed action
+- `Reject` - reject the proposed action
+- `Slash` - reject the proposed action, and slash the stake of the proposer
+- `Abstain` - abstain from voting
+
+#### States and Outcomes
+Below is a list of the states a proposal can be in, and what each of them means:
+- `Active` - the proposal can be voted on, and no resolution has been made
+- `Grace Period` - the proposal has been approved, and is awaiting execution
+- `Executed` - the proposal was approved, and, after a potential `Grace Period`, executed on chain
+- `Execution Failed` - the proposal was approved, and, after a potential `Grace Period`, attempted to be executed on chain. For some reason, the execution failed
+- `Rejected` - the proposal was rejected by the council
+- `Slashed` - the proposal was rejected, and the stake of proposer was slashed by the council
+- `Expired` - the council members did not reach consensus and the proposal expired without any action. This can be the result of insufficient voter turnout, or disagreement between the council members
+
+## Proposal Parameters
+The parameters below are specific to each proposal type, and the values are chosen to balance the importance and risks associated with each of them.
+
+- **Voting Period [blocks]** - the maximum number of blocks where voting is open before a proposal expires
+- **Grace Period [blocks]** - the number of blocks after a proposal is approved until it as implemented on chain
+- **Approval Quorum [%]** - the number of votes required to be cast before a proposal _can_ be approved
+- **Approval Threshold [%]** - the required threshold ratio of cast votes for `approve`, relative to those that vote `abstain`, `reject` or `slash`
+- **Slashing Quorum [%]** -  the number of votes required to be cast before a proposal _can_ lead to slashing the stake of the proposer
+- **Slashing Threshold [%]** - the required threshold ratio of cast votes that slash relative to those that vote approve, abstain or reject.
+- **Proposal Stake [tJOY]** - the required stake to create a proposal of this type
+
+There are also some general parameters that apply equally to all proposals, such as fees, length of text allowed, the maximum number of proposals currently in the `active` stage, etc.
+
+## Proposal Flow
+
+Any member of the platform with a sufficient quantity of tokens to stake can create a proposal. If the proposal includes values that are within the allowable range, and there are fewer `active` proposals than permitted, the proposal will proceed to the `active` state where the council can vote on it.
+
+### Example
+
+Suppose there are currently 20 members of the council. A proposal to [set max validator count](#set-max-validator-count) is made, where the parameters below apply:
+
+| Proposal Parameters                | Value           |
+|:---------------------------------:|:------------:|
+|`voting_period`                  |  43,200        |
+|`grace_period`                   | 0                  |
+|`approval_quorum_percentage`    | 50%             |
+|`approval_threshold_percentage` | 75%             |
+|`slashing_quorum_percentage`    | 60%             |
+|`slashing_threshold_percentage` | 80%             |
+|`required_stake`                |  25,000            |
+
+A member puts up the required stake of 25,000 tJOY, and the proposal goes the `active` stage at block height 100,000.
+
+#### Voting Scenario A
+The votes come in, until we have:
+
+- 6 `Approve`
+- 0 `Reject`
+- 0 `Slash`
+- 0 `Abstain`
+
+At this point, the `Approval Quorum` parameter is fulfilled (100%>75% approval), but there are still too few votes cast to fulfil the `Approval Threshold` (at 30%<50%).
+
+A few more votes are cast:
+
+- 6 `Approve`
+- 1 `Reject`
+- 1 `Slash`
+- 1 `Abstain`
+
+At this point, neither the `Approval Quorum` parameter (67%<75% approval), nor the `Approval Threshold` (at 45%<50%), is fulfilled.
+
+Another vote comes in:
+
+- 6 `Approve`
+- 2 `Reject`
+- 1 `Slash`
+- 1 `Abstain`
+
+At this point, `Approval Quorum` parameter (60%<75% approval) is not fulfilled, whereas the `Approval Threshold` (50%), is now fulfilled.
+
+A few more votes are cast:
+
+- 8 `Approve`
+- 2 `Reject`
+- 1 `Slash`
+- 1 `Abstain`
+
+At this point, `Approval Quorum` parameter (67%<75% approval) is not fulfilled, whereas the `Approval Threshold` (50%), is now fulfilled.
+
+A final vote for `Approve` is cast, and the (unfinished sentence)

+ 30 - 0
helpdesk/roles/README.md

@@ -0,0 +1,30 @@
+<p align="center"><img src="img/roles_new.svg"></p>
+
+<div align="center">
+  <h4>If you want to stay updated on current and future roles on the Joystream platform, <br />
+  visit the <a href="https://www.joystream.org/roles">roles section</a> on our website.<h4>
+</div>
+
+- [Overview](#overview)
+- [Active Roles](#active-roles)
+- [Future Roles](#future-roles)
+
+# Overview
+This page contains links to the guides for the currently active roles, and a list of the future platform roles.
+
+# Active Roles
+- [Validators](validators)
+- [Council Members](council-members)
+- [Storage Providers](storage-providers)
+- [Content Creators](content-creators)
+- [Content Curators](content-curators)
+- [Builders and Bug Reporters](builders)
+
+# Future Roles
+ - Membership Screener
+ - Membership Curator
+ - Bandwidth Provider
+ - Discovery Provider
+ - Live Streaming Provider
+ - Builder
+ - Communication Moderator

+ 117 - 0
helpdesk/roles/builders/README.md

@@ -0,0 +1,117 @@
+<p align="center"><img src="img/builder_new.svg"></p>
+
+<div align="center">
+  <h4>This guide will explain how you can take part in building Joystream, either by reporting bugs or contributing to our
+  <a href="https://github.com/Joystream">software</a>.<h4>
+</div>
+
+
+
+Table of Contents
+==
+<!-- TOC START min:1 max:3 link:true asterisk:false update:true -->
+- [Overview](#overview)
+  - [Bugs and Improvements](#bugs-and-improvements)
+    - [Reporting Issues](#reporting-issues)
+    - [Making Contributions](#making-contributions)
+  - [Community Bounties](#community-bounties)
+    - [Types of Tasks](#types-of-tasks)
+    - [Workflow](#workflow)
+<!-- TOC END -->
+
+
+# Overview
+This page contains information on how you can contribute to building the Joystream platform. We are also happy to see community members [contribute](#bugs-and-improvements) unprompted, and will always evaluate whether these warrant a bounty.
+
+In any case, this guide will mainly focus on incentivized contributions through formalized [Community Bounties](#community-bounties).
+
+## Bugs and Improvements
+
+As with all software, and especially the early versions, there will be plenty of bugs, missing features and enhancements required. Both to improve as we go, and to "train" a group of testers and developers for our autonomous platform, we are keen for "outsiders" to start contributing as soon as possible.
+
+### Reporting Issues
+If you find a bug in any of our software, reporting these as `Issues` in the main [Joystream repo](https://github.com/Joystream/joystream) is always helpful. Depending on the severity of the issue, and the quality of information provided in the `Issue` to allow us to evaluate and reproduce the bug, you may be eligible for a reward. Example of a detailed `Issue`:
+* For nodes and software ran on your computer
+  * Logs and crash reports (from one of the nodes)
+  * Steps to reproduce
+  * Your environment (e.g. operating system and version)
+  * etc.
+* If related to our `Pioneer` [testnet](https://testnet.joystream.org) app:
+  * What (if any) error message did you see?
+  * What were you trying to do?
+  * What is your address?
+  * What is your balance?
+  * What is the type of `key` (i.e. `Schnorrkel`, `Edwards` or `ECDSA`)?
+  * Are you a `Member`?
+  * Is the `key` used for another role?
+  * etc.
+
+### Making Contributions
+As an open-source project, we try to follow the standard conventions and workflow.
+
+If you find a bug or want to improve or add something in the code, documentation, or guides, go to [our GitHub organization](https://github.com/Joystream) and find the appropriate repo.
+
+Fork it, make the changes you want to address, and create a `Pull request`. For our mutual convenience, it would be nice if you made an [Issue](#reporting-issues) first, so we can address whether your work would qualify for a Bounty.
+
+## Community Bounties
+The (Community) Bounties are meant to replace the "old" [Bounty](https://github.com/Joystream/bounties) system previously used by Jsgenesis. In discussions with the community, these have been referred to as "Community KPIs", but we've chosen to use the term Bounties to properly distinguish them from "regular" [Council KPIs](/tokenomics/README.md#council-kpis).
+
+Jsgenesis will publish these first as (GitHub) issues in the [Community Repo](https://github.com/Joystream/community-repo), before the Council makes a [forum post](https://testnet.joystream.org/#/forum). They can also be found through our [website](https://www.joystream.org/get-started/).
+Unlike Council KPIs,
+- They will not be published at the same regular and predictable intervals
+- They will not necessarily have deadlines
+- Jsgenesis will rarely get involved in managing or assigning them
+
+The last part is key, as the [Council will act as Project Managers](/roles/council-members/README.md#managing-bounties), and serve as a bridge between Jsgenesis and the individual or group working on them. In many cases, they will further hire a Bounty Manager to represent them.
+
+Because of this, you should regularly monitor the [on-chain forum](testnet.joystream.org/#/forum).
+
+### Types of Tasks
+The tasks associated with these Community Bounties will ideally try to solve some problem either for the community or Jsgenesis, but in some cases, their main purpose will be to create some fun and/or attract new members to the community.
+
+Over time, the tasks should allow people with different skillsets and interests to participate. Most challenges will be easier if you have technical or creative skills, but in other situations it will simply require putting in some time and effort:
+- Coding
+  - Discord/Telegram bots
+  - Scripts
+  - Enhance the UI
+  - Improve infrastructure
+- Writing
+  - Documentation
+  - Marketing material
+  - Explainers
+  - Translations
+- Creative
+  - Videos
+  - Artwork
+  - Gifs
+  - Memes
+- Research, testing and sourcing
+  - Source/upload freely licensed media
+  - Testing and benchmarking tools
+  - Research interesting projects
+  - Tokenomics research
+- Reviewing
+  - All of the above
+
+### Workflow
+As the Council are responsible for establishing the rules, format and workflow, we again advise prospective participants to lookup the specifics for a particular Bounty using the [on-chain forum](testnet.joystream.org/#/forum).
+
+#### Reward Distribution
+The Council decides how much of the total Bounty reward will go to the Submitter, if the rewards should or can be split, and so forth.
+
+#### Format
+The format should try to optimize for the time, quality, risk and cost, associated with each Bounty. In most cases, this means either an ["Open"](#open-format), ["Free For All"](#free-for-all-format) and ["Closed"](#close-format) formats.
+
+##### Free For All Format
+For smaller, and perhaps more creative and subjective Bounty, it may make more sense to leave it as a "free for all". In this case, the Council sets a deadline, picks the best Deliverable(s), and rewards the Submitter(s) as per the rules, similar to a competition in many ways
+
+##### Open Format
+For smaller Bounties, perhaps running indefinitely, where entrants can make multiple submissions and there are few barriers to entry.
+
+##### Closed Format
+For a Bounty that requires investing lots of time and/or other resources, it may be reasonable to guarantee one or more "Applicants" that gets "Assigned", giving them some agreed time to complete all, or some, of the work, without having someone come in and "snipe" the reward.
+
+##### Other
+In addition to the varieties outlined, other formats can be defined and chosen if they are more appropriate for a specific Bounty.
+
+A "new" Council must honor any agreements and rules set by their predecessors, for as long as the rules say so.

BIN
helpdesk/roles/builders/img/builder.png


File diff suppressed because it is too large
+ 17 - 0
helpdesk/roles/builders/img/builder_new.svg


+ 273 - 0
helpdesk/roles/content-creators/README.md

@@ -0,0 +1,273 @@
+<p align="center"><img src="img/content-creators.svg"></p>
+
+<div align="center">
+  <h4>This is a guide for prospective Content Creators on the latest
+  <a href="https://testnet.joystream.org/">Joystream Testnet</a>.<h4>
+</div>
+
+
+Table of Contents
+==
+<!-- TOC START min:1 max:3 link:true asterisk:false update:true -->
+- [Overview](#overview)
+- [Get Started](#get-started)
+  - [Using the Joystream Player](#using-the-joystream-player)
+    - [Import Your Membership Key](#import-your-membership-key)
+    - [Sign Up](#sign-up)
+    - [Create a Channel](#create-a-channel)
+    - [Upload a Video](#upload-a-video)
+    - [Troubleshooting](#troubleshooting)
+  - [Using the CLI](#using-the-cli)
+    - [Create a Channel](#create-a-channel-1)
+    - [Upload a Video](#upload-a-video-1)
+    - [Updating Channels or Videos](#updating-channels-or-videos)
+    - [Troubleshooting](#troubleshooting-1)
+  - [Content Directory](#content-directory)
+    - [Categories](#categories)
+    - [Licenses](#licenses)
+- [Content Restrictions](#content-restrictions)
+<!-- TOC END -->
+
+# Overview
+This page will contain all information on how to act as a `Content Creator`, and how to create a channel, upload videos, and managing your content.
+
+Starting with the Sumer release, content is now consumed, created, and managed in the [Joystream Player](https://play.joystream.org/). You can still use the [Joystream-CLI](https://www.npmjs.com/package/@joystream/cli) to create channels and upload videos, but using the [Joystream Studio](https://play.joystream.org/studio/) will provide a far better experience for most purposes.
+
+You must always keep in mind our Terms of Service when uploading content. Further details can be found [here](#content-restrictions).
+
+# Get Started
+Before you can upload your first video, you need to create a membership (if you don't already have one) and then a channel. Instructions for using the Joystream Player can be found below, but if you prefer to use the CLI, go [here](#using-the-cli).
+
+## Using the Joystream Player
+In order to use the [Joystream Studio](https://play.joystream.org/studio/) interface, you need to install the [Polkadot browser extension](https://polkadot.js.org/extension/) in order to sign transactions.
+
+If you already have a membership, follow the instructions below.
+
+If you are new to the platform, you can create a new membership through the onboarding system. Skip to [here](#sign-up).
+
+### Import Your Membership Key
+1. Download the Polkadot browser extension[here](https://polkadot.js.org/extension/).
+2. Go directly to [Joystream Studio](https://play.joystream.org/studio/), or select the menu -> then "Joystream Studio" in the [Player](https://play.joystream.org/).
+3. Click "Sign In", allow the extension access, and follow the instructions.
+4. Open the extension, click the "+" button, and import/restore your account from json/seed.
+5. If you have more than one account, confirm your account selection, and continue.
+6. Select your membership profile, and you will be redirected to a page to [create your channel](#create-channel).
+
+### Sign Up
+Note that you can also register in our (less polished - but we're working on a new one) governance app - [Pioneer](https://testnet.joystream.org/#/accounts), but then you'll need to get tokens first. Using the onboarding flow below is recommended for new participants.
+
+1. Download the Polkadot browser extension[here](https://polkadot.js.org/extension/).
+2. Go directly to [Joystream Studio](https://play.joystream.org/studio/), or select the menu -> then "Joystream Studio" in the [Player](https://play.joystream.org/).
+3. Click "Sign In", allow the extension access, and follow the instructions.
+4. Open the extension, and click the large circle to create an account. Confirm your account selection, and continue to create a membership.
+5. You need to choose a unique handle, consisting of only lowercase characters, numbers and underscores. Optionally (and preferably), also add a link to your membership avatar, and some information about yourself. Create the membership and wait ~15 seconds for the transaction to confirm.
+6. Select your membership profile, and you will be redirected to a page to [create your channel](#create-channel)
+
+### Create a Channel
+
+Once you have signed in, it's time to create a Channel.
+
+1. Give your channel a good title and description.
+
+Although neither cover nor avatar are required, we strongly recommend your to add these as well. Unlike previous versions, where you had to provide a URL, these will also be uploaded to our storage system.
+
+2. Click on the empty profile avatar just left of the title to select your avatar from your computer. Then, crop and adjust your image to fit.
+4. Hower over the background and click to add your banner/background. Crop and adjust your image to fit.
+3. Once you are satisfied, click "Create channel", sign your transaction, and wait for it to confirm. Your assets will now upload in the background.
+4. To see how it looks in the [Player](https://play.joystream.org/channels), note that you have to wait for the uploads to complete, plus another ~15sec delay, before it will appear. If you're not happy with the appearance, you can go back to the Studio to edit it.
+
+If you are seeking rewards for your content, please be aware that the channel metadata matters. Make it appropriate and descriptive, and use high resolution, well cropped images. If you are planning to upload videos across multiple categories/genres/themes, *consider* making multiple channels! This can be done by clicking your profile in the top right corner. Here, you can also log out if you want to use a different membership or key.
+
+### Upload a Video
+
+Now that we have created a channel, we can upload a video.
+
+1. Click the blue button next to your profile in the top right corner, or "Videos" in the sidebar.
+2. Drag and drop your video file, or click the blue "Select a file" button to add your video file.
+3. Once completed, repeat the above step to add a thumbnail image. Crop and adjust your image to fit.
+4. The title will default to the name of the video file, but this will probably need changing.
+5. Fill out the rest of the fields.
+6. Once you are satisfied, click "Start publishing", sign your transaction, and wait for it to confirm. Your assets will now upload in the background.
+7. To see how it looks in the [Player](https://play.joystream.org/videos), note that you have to wait for the uploads to complete, plus another ~15sec delay, before it will appear. Note that unlike channels, videos will never appear in the videos list unless you have successfully uploaded both the video and the thumbnail.
+
+If you've made a mistake, or simply want to make an improvement, you can edit the video metadata. This is not possible for the video file itself, which can't be changed. If this is incorrect, you will have to delete the video, and start again.
+
+### Troubleshooting
+If you have any issues - the first step is to ask in our [Discord server](https://discord.gg/mzv7DeNq)!
+
+## Using the CLI
+
+Although the CLI is not the recommended of uploading, it can be beneficial in some situations. Especially if you want to create/upload multiple channels/videos at the time, and have already ensured your (image) assets are in the correct aspect ratios.
+
+To get, install and configure (ie. importing your membership key to) the CLI, go [here](/tools/cli/README.md).
+
+### Create a Channel
+First, create an input .json file based on the example [here](https://github.com/Joystream/joystream/blob/master/cli/examples/content/CreateChannel.json).
+
+Notes:
+- `rewardAccount` currently doesn't do anything, as the reward system hasn't been implemented on the runtime side. Unless you want to deal with it later however, it may be worth setting it now.
+- `category` (for channels) are currently not displayed in the Player. You can set still them now, by passing it as an integer. At launch, the available categories will be the same as for videos, and listed [here](#categories).
+
+Then, with your `membershipController` key selected:
+```
+$ yarn joystream-cli content:createChannel -i /path/to/channel-input.json --context Member
+```
+
+#### Bulk Creation
+To bulk create, prepare multiple input files, and use a bash script:
+```bash
+#!/bin/sh
+export AUTO_CONFIRM=true
+
+yarn joystream-cli content:createChannel -i /path/to/channel-input1.json --context Member
+yarn joystream-cli content:createChannel -i /path/to/channel-input2.json --context Member
+```
+If you want to change the account in between creations, add:
+```bash
+yarn joystream-cli account:choose -a <5ctrlAccountOfMyMembership>
+```
+
+### Upload a Video
+First, create an input .json file based on the example [here](https://github.com/Joystream/joystream/blob/master/cli/examples/content/CreateVideo.json).
+
+Notes:
+- `personsList` currently doesn't do anything, and can just omitted.
+- `category` is passed as an integer. At launch, the available categories will be the same as for channels, and listed [here](#categories).
+- `license` is passed as an integer. At launch, the available license can be found [here](#licenses). Note that depending on the license you choose, the json looks slightly different:
+```json
+// Custom License:
+  "license": {
+    "code": 1000,
+    "customText": "Some custom text of your choosing!"
+  },
+// Public Domain:
+  "license": {
+    "code": 1001
+  },
+// All Creative Commons, ie. 1002-1008 (although not strictly required by 1002)
+  "license": {
+    "code": 1002,
+    "Attribution": "Attribution to the original creator as per the license rules."
+  },
+```
+Then, with your `channelOwner` key selected:
+```
+$ yarn joystream-cli content:createVideo -i /path/to/video-input.json -c <channelId>
+```
+
+#### Bulk Uploads
+To bulk create, prepare multiple input files, and use a bash script:
+```bash
+#!/bin/sh
+export AUTO_CONFIRM=true
+
+yarn joystream-cli content:createVideo -i /path/to/video-input1.json -c <channelId>
+
+```
+If you want to change the account in between creations, add:
+```bash
+yarn joystream-cli account:choose -a <5ctrlAccountOfMyMembership>
+```
+
+### Updating Channels or Videos
+If you want to update your channel or video, with `<*Id>`, update your input .json, and, with your `channelOwner` key selected:
+
+```
+$ yarn joystream-cli content:updateChannel <channelId> -i /path/to/video-input.json
+$ yarn joystream-cli content:updateVideo <videoId> -i /path/to/video-input.json
+```
+If you only want to change the title of your channel or video, the .json example below is sufficient:
+
+```
+{
+  "title": "Your new video or channel title."
+}
+```
+
+### Troubleshooting
+If you have any issues - the first step is to ask in our [Discord server](https://discord.gg/mzv7DeNq)!
+
+## Content Directory
+The new content directory is partially using [metaprotocols](https://github.com/Joystream/joystream/issues/1990). That means a lot of the information in a transaction is not actually available on chain, but has to be looked up in our query-node "playground" [here](https://hydra.joystream.org/graphql).
+
+A basic example of how to find the first 100 videos sorted by the block height created:
+```
+query {
+  videos (limit:100, orderBy:createdInBlock_ASC){
+    id
+    title
+    isCensored
+    isPublic
+    category {
+      id
+      name
+    }
+    channelId
+    channel {
+      id
+      createdAt
+      createdInBlock
+      ownerMember {
+        id
+        handle
+      }
+    }
+    createdAt
+    createdInBlock
+  }
+}
+```
+Note that the clicking "docs" (and/or "schema") is very be helpful, once you get the general syntaxt!
+
+### Categories
+At the time of writing, the only way to find the current set of categories is to go to the query-node playground and query:
+```
+query {
+  videoCategories {
+    id
+    name
+  }
+}
+```
+If you are looking for the channel categories, replace `videoCategories` with `channelCategories`
+
+Note that the categories below only include what was set at launch, and may have changed since then.
+```json
+{
+    "categories":
+    [
+        {"id":"1","name":"Film & Animation"},
+        {"id":"2","name":"Autos & Vehicles"},
+        {"id":"3","name":"Music"},
+        {"id":"4","name":"Pets & Animals"},
+        {"id":"5","name":"Sports"},
+        {"id":"6","name":"Travel & Events"},
+        {"id":"7","name":"Gaming"},
+        {"id":"8","name":"People & Blogs"},
+        {"id":"9","name":"Comedy"},
+        {"id":"10","name":"Entertainment"},
+        {"id":"11","name":"News & Politics"},
+        {"id":"12","name":"Howto & Style"},
+        {"id":"13","name":"Education"},
+        {"id":"14","name":"Science & Technology"},
+        {"id":"15","name":"Nonprofits & Activism"}
+    ]
+}
+```
+
+### Licenses
+At launch, the available license are:
+```
+1000   Custom
+1001   PDM           Public Domain                                                   https://creativecommons.org/share-your-work/public-domain/pdm
+1002   CC0           Public Domain Dedication                                        https://creativecommons.org/share-your-work/public-domain/cc0
+1003   CC_BY         Creative Commons Attribution License                            https://creativecommons.org/licenses/by/4.0                  
+1004   CC_BY_SA      Creative Commons Attribution-ShareAlike License                 https://creativecommons.org/licenses/by-sa/4.0               
+1005   CC_BY_ND      Creative Commons Attribution-NoDerivs License                   https://creativecommons.org/licenses/by-nd/4.0               
+1006   CC_BY_NC      Creative Commons Attribution-NonCommercial License              https://creativecommons.org/licenses/by-nc/4.0               
+1007   CC_BY_NC_SA   Creative Commons Attribution-NonCommercial-ShareAlike License   https://creativecommons.org/licenses/by-nc-sa/4.0            
+1008   CC_BY_NC_ND   Creative Commons Attribution-NonCommercial-NoDerivs License     https://creativecommons.org/licenses/by-nc-nd/4.0            
+```
+
+# Content Restrictions
+It is very important that you do not upload illegal or copyrighted content on our testnets. Firstly, this will result in a disqualification from payouts. It will also result in the takedown of content, potentially slashing of funds, and the deletion of your channel. Multiple spam uploads which represent a burden to moderate for the `Content Curators` may also be penalized and result in deductions on payouts due for qualifying content uploads on your content creator profile.

File diff suppressed because it is too large
+ 17 - 0
helpdesk/roles/content-creators/img/content-creators.svg


+ 247 - 0
helpdesk/roles/content-curator-lead/README.md

@@ -0,0 +1,247 @@
+<p align="center"><img src="img/content-curator-lead.svg"></p>
+
+<div align="center">
+  <h4>This is a guide to working as the Content Curator Lead on the latest
+  <a href="https://testnet.joystream.org/">Joystream Testnet</a>.<h4>
+</div>
+
+
+
+Table of Contents
+==
+<!-- TOC START min:1 max:4 link:true asterisk:false update:true -->
+- [Overview](#overview)
+- [About The Curator Lead](#about-the-curator-lead)
+- [Hiring Curator Lead](#hiring-curator-lead)
+  - [Proposals](#proposals)
+    - [Create Opening](#create-opening)
+    - [Review Applications](#review-applications)
+    - [Processing Applications](#processing-applications)
+- [Hiring Content Curators](#hiring-content-curators)
+  - [Using the CLI](#using-the-cli)
+    - [Create Opening](#create-opening-1)
+    - [Accepting Applications](#accepting-applications)
+    - [Processing Applications](#processing-applications-1)
+- [Working As Content Curator Lead](#working-as-content-curator-lead)
+  - [Responsibilities](#responsibilities)
+    - [Curation](#curation)
+    - [Firing Curators](#firing-curators)
+    - [Content Working Group Mint](#content-working-group-mint)
+      - [Replenishing The Mint](#replenishing-the-mint)
+- [Troubleshooting](#troubleshooting)
+<!-- TOC END -->
+
+# Overview
+
+This page will contain all information on how to become `Content Curator Lead`, and how to perform the various tasks required for the job.
+
+# About The Curator Lead
+
+Since the introduction of the proposals system for the Constantinople testnet, the `Council` has had the power to appoint a `Content Curator Lead` for the network.
+
+# Hiring Curator Lead
+
+## Proposals
+
+Hiring the `Curator Lead` is the responsibility of the `Council` through the proposals system. Three new proposal types have been introduced to support the hiring process, and more have also been added to allow the `Council` to effectively manage the lead once "in office", through slashing, setting the mint capacity, decreasing stake and firing etc.
+
+### Create Opening
+
+The first step from the Council's perspective is creating an opening where prospective `Curator Leads` can apply for the role.
+Within [Pioneer](https://testnet.joystream.org), navigate first to the proposals tab and select `New Proposal`.
+
+To create an opening, select `Add Working Group Leader Opening` and fill in the variables.
+
+### Review Applications
+
+In order to formally "close" the opening to further applicants and inform the existing candidates that their submissions are currently being considered, the status of the opening must be changed to "In Review".
+
+This can be done very easily through the creation of another proposal by the `Council`, this time with the `Begin Review Working Group Leader Application` proposal type. The main thing to pay attention to here is the `Working Group Opening ID` created earlier. Helpfully there is a dropdown box for choosing among the currently active openings, in case you have forgotten the ID.
+
+### Processing Applications
+
+The final step in hiring the `Curator Lead` is to create a `Fill Working Group Leader Opening`. The requirements here are simply to choose the relevant opening from the drop-down menu and choose between the candidate applications (in JSON format) shown on the page.
+
+Once a candidate has been chosen and the final proposal has passed, the focus is now on the new `Curator Lead`...
+
+# Hiring Content Curators
+
+As the person responsible for the platforms content curation, the Lead may find additional manpower is required, and can hire `Content Curators` to assist.
+
+## Using the CLI
+Our newly developed Command-Line Interface (CLI) is an essential tool for the Curator Lead, as it is by far the simplest way to hire and manage `Curator Providers` and applicants for this role. The program and its instructions for use can be found [here](https://github.com/Joystream/joystream/tree/master/cli).
+
+All of the useful commands which can be executed by the `Curator Lead` will require the lead to import their "role" key rather than their "member" key. Consequently, in the CLI the `account:import` and `account:choose` commands will need to be used.
+
+All the commands available for managing the workers are available by using the command `joystream-cli working-groups --help`, which returns:
+```
+Working group lead and worker actions
+
+USAGE
+  $ joystream-cli working-groups:COMMAND
+
+COMMANDS
+  working-groups:application                 Shows an overview of given application by Working Group Application ID
+  working-groups:createOpening               Create working group opening (requires lead access)
+  working-groups:decreaseWorkerStake         Decreases given worker stake by an amount that will be returned to the worker role account. Requires lead access.
+  working-groups:evictWorker                 Evicts given worker. Requires lead access.
+  working-groups:fillOpening                 Allows filling working group opening that's currently in review. Requires lead access.
+  working-groups:increaseStake               Increases current role (lead/worker) stake. Requires active role account to be selected.
+  working-groups:leaveRole                   Leave the worker or lead role associated with currently selected account.
+  working-groups:opening                     Shows an overview of given working group opening by Working Group Opening ID
+  working-groups:openings                    Shows an overview of given working group openings
+  working-groups:overview                    Shows an overview of given working group (current lead and workers)
+  working-groups:setDefaultGroup             Change the default group context for working-groups commands.
+  working-groups:slashWorker                 Slashes given worker stake. Requires lead access.
+  working-groups:startAcceptingApplications  Changes the status of pending opening to "Accepting applications". Requires lead access.
+  working-groups:startReviewPeriod           Changes the status of active opening to "In review". Requires lead access.
+  working-groups:terminateApplication        Terminates given working group application. Requires lead access.
+  working-groups:updateRewardAccount         Updates the worker/lead reward account (requires current role account to be selected)
+  working-groups:updateRoleAccount           Updates the worker/lead role account. Requires member controller account to be selected
+  working-groups:updateRoleStorage           Updates the associated worker storage
+  working-groups:updateWorkerReward          Change given worker's reward (amount only). Requires lead access.
+  ```
+
+### Create Opening
+
+To create an opening, the lead needs to run the `working-groups:createOpening -g curators` command using their role key.
+
+There are some options for specific purposes which can be selected with this command, as shown below:
+```
+Create working group opening (requires lead access)
+
+USAGE
+  $ joystream-cli working-groups:createOpening
+
+OPTIONS
+  -e, --edit                                          If provided along with --input - launches in edit mode allowing to modify the input before sending the exstrinsic
+
+  -g, --group=(storageProviders|curators|operations)  The working group context in which the command should be executed
+                                                      Available values are: storageProviders, curators, operations.
+
+  -i, --input=input                                   Path to JSON file to use as input (if not specified - the input can be provided interactively)
+
+  -o, --output=output                                 Path to the file where the output JSON should be saved (this output can be then reused as input)
+
+  --dryRun                                            If provided along with --output - skips sending the actual extrinsic(can be used to generate a "draft" which can be provided as input later)
+```
+
+Note that although some values are stated as `u128` or other confusing types, you should provide plaintext or numbers, and the CLI will convert them for you. Once this command is run, the prompts to set up the opening are *somewhat* self-explanatory. Feel free to ask, or give it a try with a --dryRun first :)
+
+
+If successfully submitted, you can look at your Opening using the `working-groups:opening <WGOPENINGID> -g curators`, which returns something like:
+
+```
+Current Group: curators
+
+______________ Human readable text _______________
+
+{
+    version: 1,
+    headline: "Curator application",
+    job: {
+        title: "Curators",
+        description: "You can become a curator!"
+    },
+    application: {
+        sections: null
+    },
+    reward: "10 tJOY per 600 blocks",
+    creator: {
+        membership: {
+            handle: "yourHandle"
+        }
+    },
+    process: {
+        details: [
+
+        ]
+    }
+}
+
+________________ Opening details _________________
+
+WG Opening ID                 1                                   
+Opening ID                    22                                  
+Type                          Worker                              
+Stage                         Complete                            
+Last status change            ~ 10:12:54 AM 12/10/2020 (#1251432)
+Application stake             == 500.000 JOY                      
+Role stake                    == 500.000 JOY                      
+
+_______________ Unstaking periods ________________
+
+Crowded Out Application Stake Unstaking Period Length:                  0 blocks
+Crowded Out Role Stake Unstaking Period Length:                         0 blocks
+Exit Role Application Stake Unstaking Period:                           0 blocks
+Exit Role Stake Unstaking Period:                                       0 blocks
+Fill Opening Failed Applicant Application Stake Unstaking Period:       0 blocks
+Fill Opening Failed Applicant Role Stake Unstaking Period:              0 blocks
+Fill Opening Successful Applicant Application Stake Unstaking Period:   0 blocks
+Review Period Expired Application Stake Unstaking Period Length:        0 blocks
+Review Period Expired Role Stake Unstaking Period Length:               0 blocks
+Terminate Application Stake Unstaking Period:                           0 blocks
+Terminate Role Stake Unstaking Period:                                  0 blocks
+
+________________ Applications (0) ________________        
+```
+
+### Accepting Applications
+
+Once enough applications have been submitted, these can now be reviewed to decide who should be hired as a `Content Curator`.
+The command to be used is the following: `working-groups:startReviewPeriod <WGOPENINGID> -g curators`.
+
+You can find the `WGOPENINGID` in the URL in Pioneer or using the CLI command `working-groups:openings -g curators`
+
+### Processing Applications
+
+As soon as the opening is in the `In Review` state, you can start hiring!
+
+Simply run `working-groups:fillOpening <WGOPENINGID> -g curators` where `<WGOPENINGID>` is the same as earlier, and you will be prompted to select the applicants you wish to hire (using a check-box dialog). The usernames of the candidates will be shown so you don't have to worry about numerical IDs for this part.
+
+# Working As Content Curator Lead
+
+## Responsibilities
+
+Other than the hiring aspect of the role as `Content Curator Lead`, the lead should try to coordinate the actions of the other curators and decide on priorities for curation.
+
+If necessary, upon discussing with the council, the `Content Curator Lead` can also decide to fire curators who are not performing their jobs adequately.
+
+Most of the time however, the responsibilities of the `Content Curator Lead` will be very similar to those of a standard `Content Curator`. You can read about these responsibilities in [this section](/roles/content-curators#curation-policy) of the guide for `Content Curators`, but note that the Lead also has the ultimate responsibility for the work performed by their team and associated reporting requirements.
+
+### Curation
+The main task of the `Curators` is curating the content on chain.
+
+The easiest way is to simply "hide" content by using the `content:updateChannelCensorshipStatus` and `content:updateVideoCensorshipStatus` commands. However, the Curator Lead must first enable curation by creating groups:
+```
+# Create a new group:
+$ joystream-cli content:createCuratorGroup
+
+# Add curator to the group:
+$ joystream-cli content:addCuratorToGroup <GROUPID> <CURATORID>
+
+# Make the group active:
+$ joystream-cli content:setCuratorGroupStatus <GROUPID>
+
+# Overview of the group(s)
+$ joystream-cli content:curatorGroups
+```
+
+Only curators in active groups may censor content, or manage channel and video categories.
+
+### Firing Curators
+Unfortunately, it may sometimes be necessary to fire curators who are not doing their jobs correctly.
+
+Use the command `joystream-cli working-groups:evictWorker <WORKERID> -g curators` and follow the instructions.
+
+### Content Working Group Mint
+To check the details of the current Content Working Group Mint:
+
+(1) Use the following chain state query to determine the current mint ID: `contentDirectoryWorkingGroup -> mint`.<br>
+(2) Check the details of the mint using the following query: `minting -> mints`.
+
+#### Replenishing The Mint
+It will sometimes be necessary to replenish the Content Working Group Mint. This can be done through a `Set Working Group Mint Capacity` proposal [here](https://testnet.joystream.org/#/proposals/new) which must be approved by the Council in order to take effect. For this reason, it is best to discuss these sorts of proposals with the Council before making them.
+
+# Troubleshooting
+If you need help with some of the more advanced operations associated with being the `Content Curator Lead` (e.g. maintaining the content directory), please simply ask for help in the [Discord group](https://discord.gg/DE9UN3YpRP) or get in touch with one of the Jsgenesis team directly.

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category1.json

@@ -0,0 +1,3 @@
+{
+"name": "Film & Animation"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category10.json

@@ -0,0 +1,3 @@
+{
+"name": "Entertainment"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category11.json

@@ -0,0 +1,3 @@
+{
+"name": "News & Politics"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category12.json

@@ -0,0 +1,3 @@
+{
+"name": "Howto & Style"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category13.json

@@ -0,0 +1,3 @@
+{
+"name": "Education"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category14.json

@@ -0,0 +1,3 @@
+{
+"name": "Science & Technology"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category15.json

@@ -0,0 +1,3 @@
+{
+"name": "Nonprofits & Activism"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category2.json

@@ -0,0 +1,3 @@
+{
+"name": "Autos & Vehicles"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category3.json

@@ -0,0 +1,3 @@
+{
+"name": "Music"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category4.json

@@ -0,0 +1,3 @@
+{
+"name": "Pets & Animals"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category5.json

@@ -0,0 +1,3 @@
+{
+"name": "Sports"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category6.json

@@ -0,0 +1,3 @@
+{
+"name": "Travel & Events"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category7.json

@@ -0,0 +1,3 @@
+{
+"name": "Gaming"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category8.json

@@ -0,0 +1,3 @@
+{
+"name": "People & Blogs"
+}

+ 3 - 0
helpdesk/roles/content-curator-lead/category-jsons/category9.json

@@ -0,0 +1,3 @@
+{
+"name": "Comedy"
+}

File diff suppressed because it is too large
+ 17 - 0
helpdesk/roles/content-curator-lead/img/content-curator-lead.svg


+ 482 - 0
helpdesk/roles/content-curators/README.md

@@ -0,0 +1,482 @@
+<p align="center"><img src="img/content-curators.svg"></p>
+
+<div align="center">
+  <h4>This is a guide for applying, and working as a Content Curator on the latest
+  <a href="https://testnet.joystream.org/">Joystream Testnet</a>.<h4>
+  <h4>If you are interested in the Content Curator Lead role, please instead visit this
+    <a href="../content-curator-lead">dedicated guide</a>.<h4>
+</div>
+
+
+
+Table of Contents
+==
+<!-- TOC START min:1 max:4 link:true asterisk:false update:true -->
+- [Overview](#overview)
+- [Hiring Process](#hiring-process)
+  - [Applying for a Role](#applying-for-a-role)
+    - [Accepting applications](#accepting-applications)
+      - [Track the status of your application](#track-the-status-of-your-application)
+      - [Withdraw or change your application](#withdraw-or-change-your-application)
+    - [Applications in review](#applications-in-review)
+      - [Track the status of your application](#track-the-status-of-your-application-1)
+  - [Hiring complete](#hiring-complete)
+- [Working as a curator](#working-as-a-curator)
+  - [Curation Policy](#curation-policy)
+    - [Regular Checks](#regular-checks)
+      - [Example](#example)
+    - [Council Reports](#council-reports)
+      - [Example](#example-1)
+    - [Tools](#tools)
+      - [Joystream Player](#joystream-player)
+      - [CLI](#cli)
+      - [Hydra Playground](#hydra-playground)
+    - [Policy](#policy)
+      - [Videos](#videos)
+      - [Channels](#channels)
+    - [Discretion](#discretion)
+  - [Curation Tools](#curation-tools)
+    - [Censoring](#censoring)
+    - [Category Management](#category-management)
+      - [Create Category](#create-category)
+      - [Update Category](#update-category)
+      - [Delete Category](#delete-category)
+  - [Content Directory](#content-directory)
+    - [Categories](#categories)
+    - [Licenses](#licenses)
+- [Content Restrictions](#content-restrictions)
+<!-- TOC END -->
+
+# Overview
+
+This page will contain all information on how to apply for the role of `Content Curator`, and how to perform the various tasks required for the job.
+
+# Hiring Process
+
+First, open [Pioneer](https://testnet.joystream.org/), and navigate to the `Working groups` sidebar. Here you will find an overview of the current `Content Curators`, and the `Content Lead`. In the `Opportunities` tab, you can get an overview of future, current and previous openings, along with terms, settings, status, and history (if applicable). The terms and settings include the following parameters to consider:
+
+- `Max active applicants` - The maximum number of active applicants for an opening
+- `Max review period length` - The maximum length (in blocks) of the review period
+- `Application staking policy` - This stake applies for the application only
+  - A fixed or minimum stake for the application
+  - The length (in blocks) from an application has been resolved until the stake is returned
+- `Role staking policy` - This stake applies for the role itself, and successful applicants will have these funds locked while being in the role
+  - A fixed or minimum stake for the role
+  - The length (in blocks) from an unsuccessful application has been resolved, or a successful applicant has quit or gotten fired, until the stake is returned
+- `Reward policy` - The rewards (in `X [JOY]/N [blocks]`) for successful applicants
+
+
+## Applying for a Role
+
+In order to be able to successfully apply for a role as a `Content Curator`, you have to register a membership, which requires tokens. It should also be expected that there will be staking requirements, which will require more tokens. The exact terms should be clear from the listing.
+
+You will be able to complete the application process as long as you have generated a keypair, but your application transaction will be discarded by the runtime for a variety of reasons:
+- If you are not a member.
+- If you attempt to apply twice with the same `MemberId`.
+- If you attempt to apply with insufficient stake.
+- If you try to stake more tokens than you can (note the application transaction costs 1 JOY)
+- If you apply for a role with a maximum number of slots, with fixed or no stake requirements, and the maximum application slots have been reached.
+- If you try to apply manually through the `Extrinsics` sidebar, you can fail for a variety of other reasons.
+
+### Accepting applications
+
+Only openings in the "Accepting applications" stage can be applied for. Assuming there is one or more openings in this stage that is of interest (and you have sufficient tokens) you can apply for the role. Click the green `APPLY NOW` button inside the Opening box, and follow the staking instructions and write the requested information.
+
+After you have completed this, you will be sent to a confirmation page, where you can submit the application. Once you click `Make transaction and submit application`, a new key will be generated for you. This will be the `controller` key for the role, which you will need to use for all curation transactions if you are hired. It will by default not have a password, and be named `<TITLE OF JOB OPENING> ROLE KEY`. You can rename, set a password, and download a backup .json file of this key in the `My Keys` sidebar.
+
+#### Track the status of your application
+Once your application is submitted, you can check the status of your application by selecting this key, and navigate to the `My roles` tab under the `Working groups` sidebar.
+
+#### Withdraw or change your application
+While the opening is in the "Accepting applications", you can withdraw your application. As you can not apply twice with the same membership key, the only way to change your application, either to add more stake or update the application text, you need to withdraw your application first. This can be done by selecting the generated role key, navigate to the `My roles` tab under the `Working groups` sidebar, and clicking the `Cancel and withdraw stake` button.
+
+### Applications in review
+
+Once the `Content Curator Lead` is satisfied with the quality/quantity of the applications, the `Applications in review` stage will begin. In this stage, applicants can no longer withdraw their application. The `Content Curator Lead` can do a final review of the applicants, and will make a decision on how many and whom, if any, to hire for the role. As there is a `Max review period length`, inaction will default to no hires, and both the "Role stake" and "Application stake" will be returned in due time.
+
+#### Track the status of your application
+As in the [Accepting applications](#accepting-applications) stage, you can track the status of your application by selecting the role key, and navigate to the `My roles` tab under the `Working groups` sidebar.
+
+## Hiring complete
+
+Assuming the `Content Curator Lead` decides to hire one or more applicants, a transaction that hires a set of applicants and sets the `Reward policy` will be made. Successful applicants will appear in the `Workings groups` tab with their membership handle, their "Role stake" and, as time goes, the tokens earned for the job.
+
+Once either the above happens, the lead chooses to terminate the opening without hiring anyone, or the `Max review period length` expires, the opening will go to the `Hiring complete` stage.
+
+As in the previous stages, regardless if your application was successful or not, you can check the status of your application by selecting the role key, and navigate to the `My roles` tab under the `Working groups` sidebar.
+
+If your application was successful, you will now be able to curate content on the Joystream platform.
+
+# Working as a curator
+
+The main job for curators is to regularly check the content directory and channels, and checking that rules and guidelines are being followed.
+
+## Curation Policy
+Due to the large influx of users, and incentives for video curation, we need a formal workflow for the `Content Curators`, and a curation policy. We now have a [Curation Policy](https://github.com/Joystream/community-repo/blob/master/governance/Curation_Policy.md), approved by the Council. 
+
+The exact intervals and delegation procedure should be agreed upon by the Council and the Lead, and the Lead and the Curators respectively.
+
+The "Regular Checks", in lack of a better term, are critical. Although discussions can be had around the exact format, something very close to this is required.
+
+The "Council Reports" are a lot more comprehensive and challenging. Unlike the "Regular Checks", these are primarily meant for the Council, and the format and scope here may be reduced somewhat.
+
+### Regular Checks
+At some defined (minimum) frequency, the Curator reviews all new videos and channels uploaded.
+
+To avoid everyone stepping on each other’s toes, the Lead should consider splitting the workload between the team, e.g. by day/time and if required, also by language, category, etc.
+
+Each review of this kind should be reported in a designated thread on the Forum, for both the Council and Channel Owners on the Forum.
+
+#### Example
+- *Date:* `<dd.mm.yy>`
+- *Snapshot:* `block #number`
+- *Last report:* `<link.to.previous.post>`
+- *Author:* `<ID/Handle/WorkerId>`
+- *Overall Statistics:*
+  - *Total channels:* `149`
+  - *Total videos:* `535`
+  - *Total assets:* `1401`
+- *Since Last Report:*
+  - *Total new channels:* `2`
+  - *Total new videos:* `3`
+  - *Total new assets:* `13`
+
+##### New Videos and Channels Since Last Report
+
+|Channel ID/Title    |Owner [memberId/Handle]|Curator Status                                  |Reference        |
+|:------------------:|:---------------------:|:----------------------------------------------:|:---------------:|
+|`<ID>`/<title>      |`<ID>/<handle>`        |Censored - spam - `1`                           |`#<number>`      |
+|`<ID>`/<title>      |`<ID>/<handle>`        |Approved                                        |NA               |
+
+
+|Video ID/Title      |Owner [memberId/Handle]|Channel ID/Title               |Curator Status                                  |Reference        |
+|:------------------:|:---------------------:|:-----------------------------:|:----------------------------------------------:|:---------------:|
+|`<ID>`/<title>      |`<ID>/<handle>`        |`<ID>`/<title>                 |Censored - requires attribution -`2`            |`#<number>`      |
+|`<ID>`/<title>      |`<ID>/<handle>`        |`<ID>`/<title>                 |Approved                                        |NA               |
+|`<ID>`/<title>      |`<ID>/<handle>`        |`<ID>`/<title>                 |Poor thumbnail, improve by `#<number>` - `3`    |NA               |
+
+1. This is pure spam, and the owner was warned.
+2. All licenses of this kind require attribution.
+3. The thumbnail is misleading, and in low resolution.
+
+---
+
+The "owner" and "title" are also included, to make it easier for the uploader to find out what the status of their channel is.
+
+The "curator status" should indicate either `Approved`, or what action, if any, was taken. In that case, a reference to the block height where the transaction change occurred.
+
+The Curator team should also monitor this thread, as it would be where the channel owner reports back to them if they made change(s) requested, disagrees with some action taken, or simply has any questions.
+
+### Council Reports
+At some agreed interval, assumed to be at least once for each Council Term, _all_ videos and channels must be "checked in" on. There could be many reasons why to verify that they are still acceptable. In some cases, some details may have been overlooked in previous "check-ups", but there is also the chance that a Channel owner or a (rogue) Curator makes a change that requires an action.
+
+To avoid having to go through thousands of videos/channels every time, the Lead, or some other curator could perhaps deploy a script that checks for certain types of transaction that make changes to the content directory.
+
+To avoid everyone stepping on each other’s toes, the Lead should consider splitting the workload between the team, e.g., by language, category, etc.
+
+The results from this check in should be reported to the Council and the Channel Owners on the Forum.
+
+#### Example
+
+##### Introduction
+- *Report ID:* `<ID>`
+- *Date:* `<dd.mm.yy>`
+- *Snapshot:* `block #number`
+- *Last report:* `<link.to.previous.post>`
+- *Author:* `<ID/Handle/WorkerId>`
+- *Overall Statistics:*
+  - *Total channels:* `149`
+  - *Total videos:* `535`
+  - *Total assets:* `1401`
+- *Changes Since Last Report:*
+  - *Total new channels:* `10`
+  - *Total new videos:* `38`
+  - *Total new assets:* `117`
+
+##### Changes Made Since Last Report - Owner
+|Channel ID/Title    |Owner [memberId/Handle]|Changed                 |Consequence            |Reference (block/post)    |
+|:------------------:|:---------------------:|:----------------------:|----------------------:|:------------------------:|
+|`<ID>`/<title>      |`<ID>/<handle>`        |Updated banner          |NA                     |`#<number>`               |
+
+
+|Video ID/Title      |Owner [memberId/Handle]|Channel ID/Title               |Changed                 |Consequence            |Reference (block/post)    |
+|:------------------:|:---------------------:|:-----------------------------:|:----------------------:|----------------------:|:------------------------:|
+|`<ID>`/<title>      |`<ID>/<handle>`        |`<ID>`/<title>                 |Changed thumbnail       |No longer censored     |`#<number>/<postId>`      |
+|`<ID>`/<title>      |`<ID>/<handle>`        |`<ID>`/<title>                 |Added thumbnail         |No longer hidden       |`#<number>/<postId>`      |
+
+
+##### Changes Made Since Last Report - Curators
+|Channel ID/Title    |Owner [memberId/Handle]|Curator Status                                  |Reference (block/post)    |
+|:------------------:|:---------------------:|:----------------------------------------------:|:------------------------:|
+|`<ID>`/<title>      |`<ID>/<handle>`        |Censored - spam - `1`                           |`#<number>/<postId>`      |
+
+|Video ID/Title      |Owner [memberId/Handle]|Channel ID/Title               |Curator Status                                  |Reference (block/post)    |
+|:------------------:|:---------------------:|:-----------------------------:|:----------------------------------------------:|:------------------------:|
+|`<ID>`/<title>      |`<ID>/<handle>`        |`<ID>`/<title>                 |Attribution added, no longer censored           |`#<number>/<postId>`      |
+|`<ID>`/<title>      |`<ID>/<handle>`        |`<ID>`/<title>                 |Censored - requires attribution                 |`#<number>/<postId>`      |
+|`<ID>`/<title>      |`<ID>/<handle>`        |`<ID>`/<title>                 |Changed thumbnail, no longer censored           |`#<number>/<postId>`      |
+
+##### All Non-Visible Channels
+|Channel ID/Title    |Owner [memberId/Handle]|Reason                                          |Reference (block/post)    |
+|:------------------:|:---------------------:|:----------------------------------------------:|:------------------------:|
+|`<ID>`/<title>      |`<ID>/<handle>`        |Title too long at creation                      |`#<number>/<postId>`      |
+
+##### All Non-Playable Videos
+|Video ID/Title      |Owner [memberId/Handle]|Channel ID/Title               |Reason                                          |Reference (block/post)    |
+|:------------------:|:---------------------:|:-----------------------------:|:----------------------------------------------:|:------------------------:|
+|`<ID>`/<title>      |`<ID>/<handle>`        |`<ID>`/<title>                 |Video deleted by owner                          |`#<number>/<postId>`      |
+|`<ID>`/<title>      |`<ID>/<handle>`        |`<ID>`/<title>                 |Set as not public by owner                      |`#<number>/<postId>`      |
+|`<ID>`/<title>      |`<ID>/<handle>`        |`<ID>`/<title>                 |Censored - requires attribution                 |`#<number>/<postId>`      |
+
+
+##### Notes
+Some notes from the curator.
+
+---
+
+This will be quite a lot of work, but all the data needed can be found using a script that checks all blocks from `n` to `m`, and looks at all events with `event.section == content`, and returns these blocks (or the full data). A basic version of this will be made available in the [community repo](https://github.com/Joystream/community-repo).
+
+### Tools
+For every job, good tools are needed.
+
+#### Joystream Player
+Going through each video and channel one by one can be quite arduous, but to verify that the assets work, and are displayed properly, [Regular Checks](#regular-checks) are required. The URL of each video and channel will match their respective IDs, which should help with the processing.
+
+#### CLI
+With the release of the Sumer network, in a transitional phase, the CLI will not display a lot of context for each video and channel.
+- for channels: `ID   Owner       IsCensored   RewardAccount`
+- for vidoes:   `ID   InChannel   InSeries     IsCensored   `
+- Where `InSeries` and `RewardAccount` can be ignored.
+
+#### Hydra Playground
+To effectively get information about videos in bulk, the [playground](https://hydra.joystream.org/graphql) will need to be used. We are adding helpers to assist the Curators here.
+
+### Policy
+
+`warning`
+Means posting a note in the forum, as part of the [Regular Checks](#regular-checks), that something has to be corrected within a certain time period.
+
+`censor`
+Means updating the status (`isCensored`) for a video from `false` to `true`. This cannot be changed back by anyone but another curator in an active group.
+
+#### Videos
+**When to (only) issue a `warning`:**
+- Missing artwork
+  - If the thumbnail is missing, or just really poor, the video can be issued a `warning`
+- Suspicious license
+  - If the Curator suspects, but is not able to verify that a video is incorrectly licensed, a `warning` can be issued, leaving the channel owner some defined deadline to respond and provide more information or evidence.
+- Content not as "advertised"
+  - If the title, description, category and thumbnail imply a baking video, the video should not be a documentary about Bitcoin
+- Poor quality
+  - If the video quality is "unreasonably" low
+- Duplicates
+  - If the same video has been uploaded several times
+
+**When to `censor` a video:**
+- License requires attribution
+  - If the selected license requires attribution, but none is given or attribution is incorrect
+- Breach of license
+  - If the license has specific requirements with it (e.g. "no derivatives" if [CC_BY_NC_ND](https://creativecommons.org/licenses/by-nc-nd/4.0/))
+- Suspected copyright violation
+  - If it's not clear that the video is in violation, but this is strongly suspected by the Curator
+- Terms of Service violation
+  - If the video is in violation of other parts of the [ToS](https://play.joystream.org/legal/tos)
+
+#### Channels
+**When to (only) issue a `warning`:**
+- Multiple warnings for videos
+
+**When to `censor` a channel:**
+- Multiple or recurring *serious* infractions
+  - If multiple videos are currently `censored` and the owner has made no efforts to fix this
+
+
+### Discretion
+These rules are not clearly defined in all cases, so it's important that curators are able to use discretion. In many cases, it's preferable to try and get in touch with the channel owner first, rather than immediately pull the trigger. If in doubt, contact the `Lead` first. In other cases, immediate action may be required.
+
+"Speak softly, and carry a big stick"
+- Theodore Roosevelt
+
+## Curation Tools
+
+The two main on chain tasks for curators are [censoring](#censoring) and [category management](#category-management).
+
+### Censoring
+```
+# Censor channel:
+$ joystream-cli content:updateChannelCensorshipStatus --help
+
+Update Channel censorship status (Censored / Not censored).
+
+USAGE
+  $ joystream-cli content:updateChannelCensorshipStatus ID [STATUS]
+
+ARGUMENTS
+  ID      ID of the Channel
+  STATUS  New censorship status of the channel (1 - censored, 0 - not censored)
+
+OPTIONS
+  --rationale=rationale
+
+# Censor video:
+$ joystream-cli content:updateVideoCensorshipStatus --help
+
+Update Video censorship status (Censored / Not censored).
+
+USAGE
+  $ joystream-cli content:updateVideoCensorshipStatus ID [STATUS]
+
+ARGUMENTS
+  ID      ID of the Video
+  STATUS  New video censorship status (1 - censored, 0 - not censored)
+
+OPTIONS
+  --rationale=rationale
+```
+
+### Category Management
+Curators can create, update and delete categories. Instructions below are for videos only, as channel categories are not (yet) visible in the player.
+
+#### Create Category
+Say a curator wants to add a category called "Joystream Videos":
+1. Create an input file in json format like so:
+```json
+{
+  "name": "Joystream Videos"
+}
+```
+2. As a curator, with your role key, use the following command:
+```
+$ joystream-cli content:createVideoCategory --help
+
+Create video category inside content directory.
+
+USAGE
+  $ joystream-cli content:createVideoCategory
+
+OPTIONS
+  -i, --input=input         (required) Path to JSON file to use as input
+  --context=(Lead|Curator)  Actor context to execute the command in (Lead/Curator)
+```
+3. Set the correct options, and submit!
+
+#### Update Category
+Same as above, but:
+```
+$ joystream-cli content:updateVideoCategory --help
+
+Update video category inside content directory.
+
+USAGE
+  $ joystream-cli content:updateVideoCategory VIDEOCATEGORYID
+
+ARGUMENTS
+  VIDEOCATEGORYID  ID of the Video Category
+
+OPTIONS
+  -i, --input=input         (required) Path to JSON file to use as input
+  --context=(Lead|Curator)  Actor context to execute the command in (Lead/Curator)
+```
+
+#### Delete Category
+```
+$ joystream-cli content:deleteVideoCategory --help
+
+Delete video category.
+
+USAGE
+  $ joystream-cli content:deleteVideoCategory VIDEOCATEGORYID
+
+ARGUMENTS
+  VIDEOCATEGORYID  ID of the Video Category
+
+OPTIONS
+  --context=(Lead|Curator)  Actor context to execute the command in (Lead/Curator)
+```
+
+## Content Directory
+The new content directory is partially using [metaprotocols](https://github.com/Joystream/joystream/issues/1990). That means a lot of the information in a transaction is not actually available on chain, but has to be looked up in our query-node "playground" [here](https://hydra.joystream.org/graphql).
+
+A basic example of how to find the first 100 videos sorted by the block height created:
+```
+query {
+  videos (limit:100, orderBy:createdInBlock_ASC){
+    id
+    title
+    isCensored
+    isPublic
+    category {
+      id
+      name
+    }
+    channelId
+    channel {
+      id
+      createdAt
+      createdInBlock
+      ownerMember {
+        id
+        handle
+      }
+    }
+    createdAt
+    createdInBlock
+  }
+}
+```
+More examples can be found [here](/roles/content-curators/query-node-examples).
+
+Note that the clicking "docs" (and/or "schema") is likely to be very helpful, once you get a grasp of the general syntax!
+
+### Categories
+At the time of writing, the only way to find the current set of categories is to go to the query-node playground and query:
+```
+query {
+  videoCategories {
+    id
+    name
+  }
+}
+```
+If you are looking for the channel categories, replace `videoCategories` with `channelCategories`.
+
+Note that the categories below only include what was set at launch, and may have changed since then.
+```json
+{
+    "categories":
+    [
+        {"id":"1","name":"Film & Animation"},
+        {"id":"2","name":"Autos & Vehicles"},
+        {"id":"3","name":"Music"},
+        {"id":"4","name":"Pets & Animals"},
+        {"id":"5","name":"Sports"},
+        {"id":"6","name":"Travel & Events"},
+        {"id":"7","name":"Gaming"},
+        {"id":"8","name":"People & Blogs"},
+        {"id":"9","name":"Comedy"},
+        {"id":"10","name":"Entertainment"},
+        {"id":"11","name":"News & Politics"},
+        {"id":"12","name":"Howto & Style"},
+        {"id":"13","name":"Education"},
+        {"id":"14","name":"Science & Technology"},
+        {"id":"15","name":"Nonprofits & Activism"}
+    ]
+}
+```
+
+### Licenses
+At launch, the available licenses are:
+```
+1000   Custom
+1001   PDM           Public Domain                                                   https://creativecommons.org/share-your-work/public-domain/pdm
+1002   CC0           Public Domain Dedication                                        https://creativecommons.org/share-your-work/public-domain/cc0
+1003   CC_BY         Creative Commons Attribution License                            https://creativecommons.org/licenses/by/4.0                  
+1004   CC_BY_SA      Creative Commons Attribution-ShareAlike License                 https://creativecommons.org/licenses/by-sa/4.0               
+1005   CC_BY_ND      Creative Commons Attribution-NoDerivs License                   https://creativecommons.org/licenses/by-nd/4.0               
+1006   CC_BY_NC      Creative Commons Attribution-NonCommercial License              https://creativecommons.org/licenses/by-nc/4.0               
+1007   CC_BY_NC_SA   Creative Commons Attribution-NonCommercial-ShareAlike License   https://creativecommons.org/licenses/by-nc-sa/4.0            
+1008   CC_BY_NC_ND   Creative Commons Attribution-NonCommercial-NoDerivs License     https://creativecommons.org/licenses/by-nc-nd/4.0            
+```
+
+# Content Restrictions
+It is very important that you do not upload illegal or copyrighted content on our testnets. Firstly, this will result in a disqualification from payouts. It will also result in the takedown of content, potentially slashing of funds, and the deletion of your channel. Multiple spam uploads which represent a burden to moderate for the `Content Curators` may also be penalized and result in deductions on payouts due for qualifying content uploads on your content creator profile.

File diff suppressed because it is too large
+ 17 - 0
helpdesk/roles/content-curators/img/content-curators.svg


+ 201 - 0
helpdesk/roles/content-curators/query-node-examples/README.md

@@ -0,0 +1,201 @@
+Table of Contents
+---
+<!-- TOC START min:1 max:4 link:true asterisk:false update:true -->
+  - [Examples](#examples)
+    - [Channel by ID](#channel-by-id)
+    - [Video by ID](#video-by-id)
+    - [Videos updated after date/time](#videos-updated-after-datetime)
+    - [First videos created](#first-videos-created)
+    - [Last videos created](#last-videos-created)
+    - [Created before, updated after](#created-before-updated-after)
+  - [Arguments](#arguments)
+    - [Limits](#limits)
+    - [Sorting](#sorting)
+    - [Filter](#filter)
+<!-- TOC END -->
+
+## Examples
+Some useful examples can be found below. Through these examples, alongside the helpers found in the docs, it should be possible to deduce the information required for the role.
+
+### Channel by ID
+Some (presumably most) relevant info about a channel with a specific `id`:
+```
+query {
+  channels (where:{id_eq:2 }) {
+    id
+    createdAt
+    updatedAt
+    createdInBlock
+    title
+    category {
+      name
+    }
+    ownerMember {
+      id
+      handle
+      channels {
+        id
+        title
+      }
+    }
+    coverPhotoAvailability
+    avatarPhotoAvailability
+    coverPhotoDataObject {
+      joystreamContentId
+      size
+    }
+    avatarPhotoDataObject {
+      joystreamContentId
+      size
+    }
+    isCensored
+    isPublic
+  	}
+    languages {
+      iso
+    }
+    videos {
+      id
+      title
+      mediaAvailability
+      thumbnailPhotoAvailability
+    }
+}
+```
+
+### Video by ID
+Some (presumably most) relevant info about a video with a specific `id`:
+```
+query {
+  videos (where:{id_eq:1 }) {
+    id
+    createdAt
+    updatedAt
+    updatedById
+    deletedAt
+    deletedById
+    channel {
+      id
+      title
+      ownerMember {
+        id
+        about
+        handle
+        controllerAccount
+      }
+    }
+    category {
+      id
+      name
+    }
+    title
+    description
+    duration
+    thumbnailPhotoAvailability
+    language {
+      iso
+    }
+    hasMarketing
+    publishedBeforeJoystream
+    isPublic
+    isCensored
+    isExplicit
+    license {
+      code
+      customText
+      attribution
+    }
+    mediaDataObject {
+      joystreamContentId
+      size
+      liaison {
+        workerId
+        metadata
+      }
+    }
+    mediaAvailability
+    mediaMetadataId
+    createdInBlock
+    isFeatured
+  }
+}
+```
+
+### Videos updated after date/time
+To get videos updated after a certain `timestamp`:
+```
+query {
+  videos (where:{updatedAt_gt:"2021-05-29" }) {
+    id
+    createdAt
+    updatedAt
+  }
+}
+```
+```
+query {
+  videos (where:{updatedAt_gt:"2021-05-29T08:00:00Z" }) {
+    id
+    createdAt
+    updatedAt
+  }
+}
+```
+
+### First videos created
+To get first `n` videos created:
+```
+query {
+  videos (limit:10, orderBy:createdInBlock_ASC){
+    id
+    title
+    createdAt
+    createdInBlock
+  }
+}
+```
+### Last videos created
+To get last `n` videos created:
+```
+query {
+  videos (limit:10, orderBy:createdInBlock_DESC){
+    id
+    title
+    createdAt
+    createdInBlock
+  }
+}
+```
+### Created before, updated after
+To get all videos created before some `timestamp`, and updated afters some other `timestamp`
+```
+query {
+  videos (where:{updatedAt_gt:"2021-05-31T08:00:00Z",createdAt_lt:"2021-05-31T07:00:00Z"}) {
+    id
+    title
+    createdAt
+    updatedAt
+  }
+}
+```
+
+## Arguments
+See examples above for syntax.
+
+### Limits
+The default limit is always 50, but this can be modified by adding `(limit: <number>)`.
+
+### Sorting
+If you want to order by some specific parameter, click "docs" -> and select the query you are looking for. Then scroll down to `ARGUMENTS`, and click `orderBy` to show the options available in the class.
+```
+query {
+  <yourClass> (orderBy:something_ASC)
+}
+```
+
+### Filter
+Same as above, but click `where`.
+```
+query {
+  <yourClass> (where: {something_eq: "xyz", somethingElse_in: [0-10]})
+}

+ 713 - 0
helpdesk/roles/council-members/README.md

@@ -0,0 +1,713 @@
+<p align="center"><img src="img/council-members_new.svg"></p>
+
+<div align="center">
+  <h4>This is a step-by-step guide on the Joystream Council, allowing users to take part in the governance system for the
+  <a href="https://testnet.joystream.org/">Joystream Testnet</a>.<h4>
+</div>
+
+Overview
+===
+This page contains a detailed guide about how the governance system works on the current Joystream testnet, and how you can participate. This page is intended primarily for those wanting to become, or who already are Council Members ("CMs").
+
+Nonetheless, if you are interested in the Joystream project more generally and/or want to become a part of the community now or in the future, there is lots of information in here that will help you understand the project and the governance of the platform at a higher level.
+
+Table of Contents
+---
+<!-- TOC START min:1 max:4 link:true asterisk:false update:true -->
+- [Antioch](#antioch)
+  - [New Structure](#new-structure)
+- [Why Become a Council Member](#why-become-a-council-member)
+  - [Rewards and Incentives](#rewards-and-incentives)
+    - [Recurring Rewards](#recurring-rewards)
+    - [KPI Rewards](#kpi-rewards)
+      - [Grading of KPI Rewards](#grading-of-kpi-rewards)
+  - [Get Started](#get-started)
+- [Council Elections](#council-elections)
+  - [Parameters](#parameters)
+  - [Council Election Cycle](#council-election-cycle)
+    - [Announcing](#announcing)
+      - [How to Announce](#how-to-announce)
+      - [End of Announcing](#end-of-announcing)
+    - [Voting](#voting)
+      - [How to Vote](#how-to-vote)
+    - [Revealing](#revealing)
+      - [How to Reveal](#how-to-reveal)
+      - [End of Revealing](#end-of-revealing)
+    - [Term](#term)
+- [How to Get Elected](#how-to-get-elected)
+  - [Announce on the Forum](#announce-on-the-forum)
+- [Elected Council Members](#elected-council-members)
+  - [Tasks Overview](#tasks-overview)
+  - [Council KPIs](#council-kpis)
+    - [Scope of Work](#scope-of-work)
+      - [Council Deliverables](#council-deliverables)
+      - [Chain Values](#chain-values)
+    - [Reports](#reports)
+    - [Council Secretary](#council-secretary)
+    - [Managing the Working Groups](#managing-the-working-groups)
+      - [Cost Control](#cost-control)
+      - [General Performance](#general-performance)
+      - [Council Actions](#council-actions)
+    - [Managing Bounties](#managing-bounties)
+      - [Definitions of Terms](#definitions-of-terms)
+      - [Councils Role](#councils-role)
+      - [General Steps](#general-steps)
+      - [Bounty Formats](#bounty-formats)
+      - [Open Format](#open-format)
+      - [Free for All Format](#free-for-all-format)
+      - [Closed Format](#closed-format)
+      - [Other](#other)
+      - [Workflow](#workflow)
+- [Governance](#governance)
+  - [Proposals](#proposals)
+  - [Voting on Proposals](#voting-on-proposals)
+<!-- TOC END -->
+
+
+# Antioch
+Starting with the launch of the `Antioch` network, some changes to the Council Member incentive scheme will take effect. There are two main reasons for this:
+1. To account for the (unfortunately still present) "tragedy of the commons" problem
+2. In order to make easier for newcomers to join, learn and earn through participation in the very important Council Member role.
+
+With the last "iteration" of the KPI rewards scheme, we saw a marked improvement in the achievement of sometimes difficult KPIs. Despite the individual KPI rewards for the Council Members being independent of their actual contribution, the CMs solved the problem by creating spending proposals for the reward of that KPI - effectively granting themselves rewards. Although this is a relatively good solution, it still creates a strong incentive for a "whale" to vote themselves in each term and earn the associated rewards with no further effort.
+
+This last point overlaps neatly with the second point - namely the difficulty for new users to earn their slot on the Council. Jsgenesis countered this by voting themselves, and making sure at least some newcomers got their opportunity, but we are now targeting a more "aggressive" rotation. At launch, we will be targeting a healthy mix of newcomers and more seasoned Council Members.
+
+## New Structure
+The new structure can be summarized as follows:
+- More members on each Council, and shorter terms
+- The "Announcing" stage will start almost immediately after a new Council is elected, meaning you will be able to announce your candidacy for most of the term (except during "Voting" and "Revealing")
+- In addition to announcing your candidacy by making the transaction, you should also make sure to write a forum post about yourself - as Jsgenesis will vote for those that explain why they would make a good Council Member.
+- The "recurring rewards" will be quite low, and almost all of the rewards will be associated with KPIs, and general voting participation
+- The Council will be presented with a longer list of KPIs, each with designated amounts assigned to each of them
+- At the end of the term, the CM must write a forum post explaining exactly what they achieved, with links and references where applicable
+- A CM that "solves" a KPI singlehandedly will earn the entire reward for themselves. If they co-operate, or if two people solve it independently (equally well, and at the same time), they will split the reward between them [1](#1)
+- The reward will be paid in tJOY, and Jsgenesis will publish this in the KPI page on our blog
+
+More details about the KPI rewards can be found [here](#kpi-rewards).
+
+# Why Become a Council Member
+As the governance system is arguably the most important component of the platform on mainnet, we are relying on testnets to train and build up an experienced and highly competent group of initial community members that can diligently perform the tasks required of them once we reach the mainnet stage.
+
+A "good" Council needs CMs that all have a strong understanding of both the platform's token economics (["tokenomics"](/tokenomics)) and each of the individual Working Groups and the roles each of these play in making the platform function. Additionally, the composition of each Council should ensure that the group has expertise in every domain, and some CMs with low-level technical understanding will likely be required to provide guidance on other aspects of the project (marketing, legal, strategy etc.).
+
+## Rewards and Incentives
+During the Constantinople testnet, Jsgenesis realized we need to put a lot more effort in to attracting, training and retaining these high-quality people. CMs will on a mainnet exclusively earn recurring rewards, similar to other roles. On our testnets however, where there are little incentives for users to diligently scrutinize each applicant and place votes, we have tried to mimic this through use of [KPIs](#council-kpis).
+
+Jsgenesis will also take an active role in the elections. More information on how to apply, and increase your chances of getting elected can be found [here](#council-election-cycle).
+
+### Recurring Rewards
+A newly elected Council could be assigned a recurring reward that automatically pays out tokens every `n`th block. The magnitude of this reward may change over time, but can be monitored on the [Tokenomics page](https://testnet.joystream.org/#/tokenomics).
+In the current Sumer testnet the recurring rewards are absent.    
+
+### KPI Rewards
+The KPI rewards will depend on the Council's performance. Jsgenesis will provide a new set of [Council KPIs](#council-kpis) for each new term, with some variability in terms of scope and maximum rewards.
+
+Each individual KPI will be have a reward assigned to it, which can be achieved if the task is fully completed, and graded as such by Jsgenesis. If the task is considered 20% completed, the reward will be set to 20% of this (unless something else is specified in the KPI).
+
+Unlike previous versions of the KPI reward scheme, these will not be shared (equally) by all CMs, and no rewards will be distributed to the Voters. The reward can be awarded to a single CM, or divided by a group of CMs. This means the Council is incentivized to co-operate, and distribute tasks between them based on whatever metric they choose.
+
+If they are able to agree on a distribution up front, this should be posted in a new thread on the forum, which the individual CMs will (at the end of the term) use to outline what they did during the term. This information will then be public, and used for three different purposes:
+
+1. Grading the KPIs and calculating their individual KPI rewards
+2. Distributing [Founding Member](https://github.com/Joystream/founding-members) points
+3. For Jsgenesis to vote on future Council elections
+
+Below we will expand further on that first point.
+
+#### Grading of KPI Rewards
+In general, Jsgenesis will only use what is included in the forum post, and results/deliveries when grading KPIs. This means that any agreement made between two CMs in other channels will not be considered in case of disputes.
+
+Before the grading deadline, Jsgenesis will not only grade the KPIs for quality, but also decide on who gets what portion of the rewards.
+
+## Get Started
+Unlike most of the other current and future roles on the Joystream Platform, most of the information and actions required by participants in the governance system is available in our UI - named [Pioneer](https://testnet.joystream.org). For elected CMs, some familiarity with [GitHub](https://github.com/Joystream/community-repo/) is required, and at any time, a subset of the CMs must be able to use git, and basic coding review skills. As the project grows, new skills and more advanced skills may be required.
+
+If you want to get elected as a CM or vote on the platform, you need to be a Member. Instructions for registration can be found [here](https://github.com/JoyStream/helpdesk/#get-started).
+
+**Note**
+After introducing `Memberships` to the platform, we found it to be confusing to have a concept of both `Accounts` and `Memberships`. We are in the process of renaming the `Accounts` to the `Keys`, but there are still traces of `Accounts` showing up.
+
+# Council Elections
+A new Council of CMs are elected at regular intervals. The election is decided by selecting the applicants that has the highest total "stake" backing them. Staking here means "locking" up your tokens, making them unusable for transfers or staking in other ways, thus forcing participants to put "skin in the game". The total stake is the sum of the applicant's own stake required to put themselves up for election, and the stake of any voters voting for them.
+
+The terms of these elections are defined by some parameters. Although these can be changed either by the [Proposal system](/proposals), or by `sudo`, the parameter changes should be both infrequent and small.
+
+The current set of parameters, as well as the status and stage of the [Council/election cycle](#council-election-cycle) can be found [here](https://testnet.joystream.org/#/council).
+
+## Parameters
+In addition to the length (and definitions) of the election stages described below, the most important parameters are:
+- `Council Size`
+  - This is the number of CMs that will be elected. This is a fixed value, meaning neither less nor more CMs can be elected.
+- `Candidacy Limit`
+  - This is the maximum number of applicants, that have [announced](#announcing) their candidacy, that are eligible to be voted for in the [voting](#voting) stage. This number will always be bigger than the `Council Size`
+- `Minimum Council Stake`
+- `Minimum Voting Stake`
+  - The minimum stake that applicants and voters are required to put up, for standing as a candidate and voting (for others or themselves) respectively.
+
+The full details of the election cycle will also expand upon these parameters.
+
+## Council Election Cycle
+The election cycle consists of four stages. Currently, the length of each one is:
+1. [Announcing](#announcing) - lasts 57,600 blocks (~4 days)
+2. [Voting](#voting) - lasts 14,400 blocks (~24h)
+3. [Revealing](#revealing) - lasts 14,400 blocks (~24h)
+4. [Term](#term) - lasts 14,400 blocks (~24h)
+
+### Announcing
+During the entire `Announcing` stage, anyone that is a Member and can stake a greater number of tokens than the `Minimum Council Stake`, can apply to become a CM.
+
+#### How to Announce
+With your membership key:
+- select "Council" in the sidebar
+- click the "Applicants" tab
+- set the number of tokens you want to stake
+- click "Apply to council" and confirm
+
+**Important Notes**
+- you can add to your stake later, by following the same approach as above
+- this can be particularly useful because of the `Candidacy Limit`, which limits the number of applicants that goes through to the [voting](#voting)
+- active CMs can "re-use" their own stake from the last election cycle
+- this means that you if you staked 10k JOY on yourself, and have 5k "free" balance, you can stake 15k
+
+#### End of Announcing
+At the end of the stage, there are three outcomes depending on:
+- the number of `Applicants`
+- the `Council Size`
+- the `Candidacy Limit`
+
+##### Scenario A:
+If: `Council Size <= Applicants <= Candidacy Limit`. I.e. the number of applicants is between the `Council Size` and `Candidacy Limit`.
+
+The `Announcing` stage ends, with all the applicants proceeding to the `Voting` stage.
+
+##### Scenario B:
+If: `Candidacy Limit < Applicants`. I.e. the number of applicants is greater than the `Candidacy Limit`.
+
+All of the applicants are sorted and ranked by their stake. The `Announcing` stage ends, and only those with a rank better than, or equal to, the `Candidacy Limit` will proceed to the `Voting` stage.
+
+The applicants that did not make it to the `Voting` stage get their stake back right away.
+
+##### Scenario C:
+If: `Applicants < Council Size`. I.e. the number of applicants is smaller than the `Council Size`.
+
+There are not enough applicants to fill the Council slots, and a new `Announcing` stage begins, with all the applicants automatically re-entered.
+
+### Voting
+As soon as the `Announcing` stage closes, anyone that is a Member and can stake more than the `Minimum Voting Stake`, can vote for any of the applicants for the entire duration of this stage.
+
+#### How to Vote
+With your membership key:
+- select "Council" in the sidebar
+- click the "Applicants" tab
+- find your preferred Applicant, and click the "Vote" button
+- set the number of tokens you want to stake
+- click "Submit my vote" and confirm
+
+You can vote as many times as you like, for any Applicant (including yourself).
+
+**Important Notes**
+When you submit a Vote, a `Random salt` will be generated for you, and only a `Hash` of the vote will be broadcast and stored on chain. This means:
+- no one will know who you voted for, or how much you staked
+- unless this hash is "revealed" during the [Revealing](#revealing) stage, the vote will not count
+- unless you save the `Random salt` somewhere, you will only be able to "reveal" your vote if:
+  - you use the same key, computer and browser - without clearing local storage.
+  - if you save the `Random salt`, you only need the key
+- if you voted for one or more active CMs, you can "re-use" your voting stake from the last election cycle
+- this means that you if you staked 10k JOY voting for one or more current CMs, and have 5k "free" balance, you can stake 15k for voting
+
+### Revealing
+As soon as the `Voting` stage closes, the `Revealing` stage begins. As stated before, only when a vote is "revealed" will it become public, and count.
+
+#### How to Reveal
+With your membership key (used to vote on the candidates):
+- select "Council" in the sidebar
+- click the "Votes" tab
+- you should see the votes you have already made on this page
+- click the "Reveal" button next to the votes you wish to reveal and confirm
+
+#### End of Revealing
+At the end of the `Revealing` stage, the applicants are sorted and ranked by their total stake, i.e. the sum of the stake(s) they bonded during the `Announcing` stage, and the sum of all **"revealed"** votes.
+
+The applicants ranked within the number equal to the `Council Size` will become CMs.
+
+The applicants that did not get elected will get their stake back immediately. The same goes for those that voted for them, and those that did not reveal their votes.
+
+### Term
+On the block that marks the end of the `Revealing` stage, the elected CMs will automatically be given their new privileges. Namely, the right to vote on [Proposals](#proposals), and be assigned an on-chain [Recurring Reward](#recurring-rewards).
+
+The CMs' stakes will be not only be held until the `Term Duration` expires, but until a new Council is elected. The same applies to those that voted for them.
+
+The Recurring Rewards however, will only be paid during the `Term Duration`.
+
+Note that the next `Announcing` stage will start at the exact block the `Term Duration` expires.
+
+# How to Get Elected
+Unless you have sufficient tokens to get (re-)elected without any extra voters, you are unlikely to get any votes without making an effort to do so. As Jsgenesis represents a large proportion of the voting power, and community members are unlikely to vote for unknown actors without a proven track record, there are some steps you can take to greatly increase your probability of getting votes:
+
+## Announce on the Forum
+Before a new `Announcing` stage begins, a new thread will be made on the on-chain [forum](https://testnet.joystream.org/#/forum). Regardless of whether you are a new to the project, have been following it from a distance, are an active member or an experienced CM, make a post or two explaining why you deserve to be voted in. Some suggestions of what to include are:
+- All
+  - A little bit about yourself (no need to dox yourself)
+  - Handles on other platforms, such as GitHub, Telegram, Discord, Keybase (again, no need to dox yourself)
+  - Why you want to be a CM
+  - Interest in the project
+  - Interest in the space (blockchain, media, both)
+  - Any useful skills or assets, such as:
+    - technical/coding
+    - sysadmin
+    - economics
+    - spreadsheets
+    - math
+    - media production, curation
+    - free time and grit
+    - etc.
+- Newcomers
+  - A little (more?) about yourself (still, no need to dox yourself)
+  - What brought you in to the project
+  - Goals
+  - Participation in other projects of any kind
+  - What you have done to prepare
+  - Any questions about the role
+  - etc.
+- Long-term community members
+  - General Joystream "record", such as
+    - Roles you had
+    - Contributions (bounties, KPIs, etc.)
+    - Proposals made
+    - Participation on discussions on Telegram, Discord, Forum, GitHub, Proposals
+  - CM "record"
+    - Election history
+    - Proposal voting history
+    - Council KPIs performed
+
+As you are likely to get some follow up questions, it is a good idea to check in at regular intervals to answer these.
+
+# Elected Council Members
+The CMs have a variety of [tasks](#tasks-overview). Some are pro-active, others are re-active. Some are recurring and predictable, others will require on the spot problem solving.
+
+To some extent, the same applies to their rewards. They could receive a fixed (in tJOY) [Recurring Reward](#recurring-rewards), which will be handled automatically by the chain. The other relies on their ability to solve the tasks and challenges they face through the [Council KPIs](#council-kpis).
+
+A CM that is slacking off, or for other reasons unable or unwilling to perform their tasks will still receive their rewards for the term, but are unlikely to get re-elected in the near future.
+
+## Tasks Overview
+The list below contains a high-level overview of their responsibilities:
+- Elect a [Council Secretary](#council-secretary), to be the "official" point of contact between the Council and Jsgenesis
+- Pay attention to the forum and [Discord group](https://discord.gg/DE9UN3YpRP), to assist and answer questions when appropriate
+- Pay attention to incoming Proposals, discuss and make informed votes
+- Monitor the performance on the [Working Groups](#managing-the-working-groups) and, if necessary, take action
+- Monitor, communicate with, fund and report on the [forum sudo](/README.md#on-chain-forum)
+- Monitor the platform's infrastructure, and report issues or perform the appropriate action(s)
+  - endpoint nodes (does blocks come in on hosted pioneer)
+  - pioneer (any sites not responding as expected)
+  - storage system (is media served)
+  - [status-server](https://status.joystream.org/status)
+- Monitor the platform's spending and resource allocation
+- Perform and/or delegate the required tasks related to the [Council KPIs](#council-kpis)
+- Perform the required tasks related to the [Community Bounties](#community-bounties)
+
+Although only the Council KPIs will qualify for extra rewards in that particular term, other tasks will be rewarded through Founding Member points and increased probability of re-election.
+
+## Council KPIs
+For each Council Term, a set of Council KPIs will be released. These will contain tasks that the Council, or individual CMs acting on behalf of the Council, should try to complete. Although the tasks and actions required by the Council will vary, the structure of the Council KPIs are fixed.
+
+##### Structure Example
+An example of the structure for a single Council KPI is outlined below. Note that the number of KPIs, success events, individual and sum of the rewards, and complexity of the KPIs per term will vary.
+
+Council KPI - Term `X`
+- `id:` - The unique identifier (e.g. `X.1`)
+- `Title:` - The title
+- `Reward:` - The maximum reward paid, assuming all `Success Events` are delivered and graded complete
+- `Description:` - A description of the problem solved if all `Success Events` are complete
+- `Success Events:`
+  - `1.` - A precise definition of subtask `1.`
+  - `2.` - A precise definition of subtask `2.`
+  - ...
+  - `n.` - A precise definition of subtask `n.`
+- `Annihilation:` - A precise definition of something that, if it occurs, would result in the entire KPI `Reward` getting lost, even in the event all the `Success Events` are fully completed.
+- `Grading date:` - A (loose) deadline for when Jsgenesis will grade the KPIs, and if applicable, pay the CMs their rewards.
+
+In addition to these, there are some other information that may or may not be included:
+- `Starting at:` - The exact block height (and approx. date/time) from which the KPI is "Active"
+- `Ends at:` - The exact block height (and approx. date/time) from which the KPI is no longer "Active"
+- `Measurement period:` - Similar to the above
+
+The reason these may not always be present is because the intention is that a Council KPI will be active from the block the Council is elected, until the block a new one replaces them.
+
+### Scope of Work
+The Council KPIs will emphasize tasks that the Council would be expected to handle or directly delegate once the project is live on mainnet. Instead of partially repeating what is listed [here](#tasks-overview), this section will instead focus on some examples of specific `Success Events`, and workflow.
+
+Most KPIs will be graded based on one of two things:
+1. A deliverable submitted
+2. On-chain records and numbers
+
+#### Council Deliverables
+For a deliverable to qualify, it must, unless noted otherwise:
+- Be submitted as a pull request ("PR") to the [community-repo](#https://github.com/Joystream/community-repo/)
+- Either be made by the [Council Secretary](#council-secretary) directly, or reviewed and "approved" by said person
+- Be Accompanied by a link to an "approved" [text Proposal](#proposals)
+
+Unless these conditions are met, Jsgenesis reserves the right to consider a deliverable invalid. However, exemptions can be made depending on the circumstances.
+
+It is irrelevant whether the Council collaborates in producing the deliverable, if it is made by a single CM, or procured from another Member or outsider. The only exceptions are if the deliverable:
+- includes a claim (optional) of its source that proves false
+- does not follow the license requirements of the repo, or violates any other license
+- contains anything violating the platform [ToS](https://testnet.joystream.org/#/pages/tos)
+
+#### Chain Values
+The KPI will define whether the value in question shall be:
+- maintained throughout some period of blocks
+- reached at some point during some period of blocks
+- the value from a specific block height
+
+### Reports
+Each Council will be prompted to submit deliverables reporting on things like:
+- interesting events (such as Proposal history)
+- discussions that lead to decisions made (such as voting on said Proposals)
+- budgets and accounts
+- network statistics
+
+### Council Secretary
+The Council Secretary is an informal role, where the Council themselves are given some flexibility in deciding on compensation and extending their Scope of Work, outside of what is defined in the Council KPI.
+
+The following bullet points should be expected as the `Success Events` for the KPI:
+- A Text [Proposal](#proposals) electing an active CM is "approved" within 24h of a new Term
+  - An optional deputy can be chosen
+- The Secretary provides a GitHub handle, which will be granted ["Triage"](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization) permission to the [community-repo](#https://github.com/Joystream/community-repo/)
+- Secretary uses their permission to perform the tasks listed [here](#council-deliverables) and [here](#council-deliverables).
+
+### Managing the Working Groups
+Currently, there are two Working Groups on the network:
+- [Storage Providers](/roles/storage-providers)
+- [Content Curators](/roles/content-curators)
+
+The role of the Council is not to control these directly, but rather ensure they are being well-run by their respective Leads. What is considered "well-run" is of course open to a wide interpretation, so specific quantitive and qualitative targets would be defined in the [Council KPIs](#council-kpis).
+
+However, to understand what these targets could entail, how to monitor them, and perhaps even stay ahead of the curve, one should be familiar with some indicators of what to look for.
+
+Finally, a CM must understand what the Council's options are for dealing with a Working Group that is underperforming.
+
+#### Cost Control
+How the Council chooses to approach this is up to them. It is up to the Lead of each group to create [Proposals](#proposals) for replenishing the Working Groups mint, but it's up to the Council to approve or reject these requests.
+
+A good approach could be to agree on weekly budgets, and revise them on an as-needed basis. How to set these budgets would depend on a variety of factors such as:
+- Changes in the exchange rate
+- Increased costs and/or workload
+  - The Storage Provider Group's real costs depend on:
+    - size of the `dataDirectory`
+    - bandwidth due to frequent uploads, downloads and playbacks
+    - replication requirement (the platform may wish to have sufficient backup in case workers quit or crash)
+    - changes in hardware/VPS costs
+  - The Content Curators Group's costs is mostly associated with their time:
+    - Verifying new content are in line with the [ToS](https://testnet.joystream.org/#/pages/tos)
+    - Verifying the metadata of new and existing content
+    - Running or creating tools for monitoring changes in the Content Directory or `dataDirectory`
+
+#### General Performance
+In addition to the bottom-line costs, there are some nuances to the distribution of said costs, and the general quality of the service each Working Group Provides.
+
+
+**Storage Providers**
+- Quality of service
+  - Is the Storage Providers' uptime acceptable and consistent
+  - Are uploads interrupted or failing at an unacceptable rate
+  - Is the content replicated to an acceptable level
+- Speed of service
+  - Are some/all providers slow to upload to
+  - Are some/all providers slow to download/play from
+
+**Content Curators**
+- Quality of service
+  - Is good at getting content featured or promoted
+  - Are quality channels getting `verified`
+  - Are the curation actions made accurately and reliably
+- Speed of service
+  - Are the points listed above dealt with in a reasonable time
+  - Are the curators responsive to requests/complaints/questions made
+
+**Lead Actions**
+Are the Leads doing their jobs, in terms of:
+- Managing workers
+  - slashing and/or firing non-performing workers
+  - keeping the "right" workers, when a cut to the number of workers is required
+  - creating and completing new openings quickly and professionally
+  - hiring/firing too many/few workers
+- Professionally Conduct
+  - reacting swiftly to requests/complaints/questions made
+  - failing to report their actions as/if required
+  - responding to the Council's directives
+- Economics
+  - ensuring the workers' stakes and unstaking terms are reasonable
+  - creating the proposals to replenish their mints in time
+
+#### Council Actions
+In some cases, the Council may wish to take some action in relation to the Lead of a Working Group.
+
+If a Working Group is not performing adequately, the first course of action may simply be to give an informal warning to the Lead in question.
+
+The main way of dealing with Leads is through the [proposal system](#proposals). Unfortunately, there are currently limited ways of dealing with the Curator Lead. For the Storage Lead, there are more options, but only one that is not a punishment:
+**Content Curator Lead**
+- reduce the group's mint
+- fire the lead
+**Storage Provider Lead**
+- reduce the group's mint
+- slash all or parts of the Lead's stake (without firing them)
+- fire the Lead (without slashing them)
+- fire and slash all or parts of the Lead's stake
+- decrease the stake of a Lead (in case the exchange rate has made the stake bigger than "justifiable")
+
+### Managing Bounties
+The concept and some examples of (Community) Bounties (previously referred to as "Community KPIs") are explained [here](https://github.com/Joystream/community-repo/tree/master/bounties-overview/README.md), so this section will rather focus on the Council's role in these as Project Managers. What this entails exactly will vary depending on the type, complexity, and stage of the active Bounties themselves, but "good" Project Management will be rewarded through the [Council KPIs](#council-kpis).
+
+A Community Bounty will in general be graded based on deliverables, with conditions similar to what is described [here](#council-deliverables).
+
+Unlike the Council KPIs, the rewards for fulfilling them will not go directly to the CMs, but rather increase the [Fiat Pool](/tokenomics/README.md#fiat-pool), thus increasing the value of all the token holders. However, it's assumed that most, if not all, of these rewards will be directed at the group or individual that made the deliverable.
+
+This section contains examples with suggestions for the step-by-step workflow some "common" formats for Bounties - namely ["Open"](#open-format), ["Free For All"](#free-for-all-format) and ["Closed"](#close-format) formats. The format should try to optimize for the time, quality, risk and cost, associated with each Bounty.
+
+Note that the target audience for this is not the participants themselves, but rather the Council Members.
+
+#### Definitions of Terms
+- Community Repo - this [GitHub repo](https://github.com/Joystream/community-repo/issues)
+- Bounty Issue - meaning a GitHub issue made by `bwhm` or `blrhc` of Jsgenesis in the Community Repo
+- Council Member (CM) - a (current) member of the Joystream Council
+- Council Secretary - a CM elected by the other CMs to be the "main" representative of the Council towards Jsgenesis
+- Bounty Manager (BM) - a Community Member (can be a CM as well) elected by the Council to be responsible for managing all Bounties for some period of time, or "just" this specific Bounty. Defaults to the Council Secretary if no other person is chosen
+- Forum - the on-chain [Joystream](https://testnet.joystream.org/#/forum/) forum
+
+#### Councils Role
+As seen in below, the amount of work managing a Bounty will in some cases be substantial. Previously, it was intended that the Council should perform this work as group, but it has become clear that hiring a single (or small group) to act as Bounty Manager(s), either for all open Bounties, or individual ones, is needed for the system to work.
+
+Although the idea of forcing the Council to communicate and co-operate their way through this was noble, it leads to an example of the tragedy of the commons.
+
+As managing the Bounties will be a significant part of their (potential) KPI rewards, they have some excess resources and incentives to hire the "right" people. They can either pay for this out of pocket, request funding for this through spending proposals, reserve some part of the Bounty reward for this purpose or by asking Jsgenesis for designated funding.
+
+In the end, the Council will still be responsible for the work the BM does, so they should still verify the spending and/or text proposals made, and seek feedback of the BM's performance (e.g. responsiveness and communication) from participants.
+
+#### General Steps
+Jsgenesis creates a Bounty Issue in the Community Repo with a new Bounty. This Bounty Issue is meant for the Council first and foremost, and ideally, the person(s) attempting, or successfully manages, to solve the Bounty should not even *need* to read this.
+
+In this Bounty Issue, Jsgenesis will explain/outline:
+- what the bounty is for
+- success events and their associated rewards
+- some restrictions/requirements
+- how the final submission should be made before it is graded by Jsgenesis
+
+After this, the BM, parses the Bounty Issue, and starts drafting what will be the original post(s) in the Forum thread. In this post, the following should be made clear:
+- The *full* Scope of Work
+- The *full* set of rules and conditions, including budgets
+  - meaning, for both points above, not only what is covered in the Bounty Issue itself, but any other information the BM sees fitting to include
+- The *full* workflow for all relevant parties, including deadlines etc.
+  - what this entails will be addressed for each individual [Bounty Format](#bounty-format) below.
+
+If the BM needs clarity or more information than what is covered in the Bounty Issue, reply to it for clarity.
+
+Once the draft is completed, the BM creates a text or spending proposal (if funding is needed for their tasks) presenting a draft of the Forum post that will be made for the bounty. If the text is too long to fit in the proposal, a link to the text is shared in its place.
+
+If the proposal is approved, with or without any agreed corrections, the Forum thread is created with the agreed content.
+
+Finally, the BM replies with the content in the Bounty Issue, and makes a PR to the Community Repo, updating the information [required](https://github.com/Joystream/community-repo/tree/master/bounties-overview).
+
+#### Bounty Formats
+If the Bounty Issue doesn't include, or just suggests a format, the Council is free to choose.
+
+If a format is specified, there is still some freedom to choose within that realm. What is listed below are simply examples.
+
+#### Open Format
+An example of the "Open" format is Bounty [#10 - "Upload Public Domain Content"](https://github.com/Joystream/community-repo/issues/88).
+
+Anyone (with a membership) can participate in this bounty, it has a fairly low barrier to entry, and will run indefinitely.
+
+However, managing this bounty is not as straightforward, as one would expect a large number of entries, from many different users.
+
+##### Full Workflow
+Involved parties, and their responsibilities:
+- Jsgenesis
+  - initial Bounty Issue
+  - final grading
+- the Bounty Manager
+  - deploying the Bounty
+  - initial grading
+  - weekly reports and spending proposals
+- the Council
+  - approving the Bounty
+  - voting spending proposals
+- Content Curators
+  - approving uploaded Videos and Channels
+- Entrants
+  - creating channels and uploading videos for rewards
+
+1. The Bounty Manager sets some Bounty specific rules (in addition to the [General Steps](#general-steps)), such as:
+  - Required metadata
+  - Other requirements for a video to be rewarded `$n` (length, resolution, encoding, etc.)
+  - Exactly how an Entrant should submit their videos (see 3.)
+  - When they will perform their weekly grading
+  - The role of the Content Curators
+  - etc.
+2. The Entrant sees the Bounty, and uploads one or more videos.
+3. After doing so, they post in the bounties Forum post, with the following information:
+  - `channelId`(s)
+  - `videoId`(s)
+  - Brief explanation of the videos uploaded, and perhaps what they expect the reward for each video should be.
+4. The Content Curators should, as is their role, regularly go through _all_ videos uploaded on the platform, curate channels and videos, and post updates on the Forum.
+5. The Bounty Manager, when performing their weekly grading and reporting, can look through the Content Curators Forum thread, and see what has been approved or not. If a video/channel posted in 2. is not approved, it need not be graded. Once the BM has completed grading all (approved) entries, they create a report containing:
+  - For each Entrant identified by their membershipId, membershipHandle and account
+    - all channels and videos by their IDs
+    - with grading (i.e. reward) for each video ID
+  - A summary of the rewards
+  - A list of all videos/channels that was not approved by Curators
+6. This report is submitted as a PR to the Community Repo, along with a Spending Proposal equalling the sum of the Rewards (plus, if applicable, a payment for their own labour).
+7. If approved by the Council, a review of the PR containing the report is requested by Jsgenesis, and the BM sends the funds minted by the Proposal to the rightful owners.
+8. Jsgenesis grades the report, (including some spot checks of the videos), and adds the amount they see applicable to the Fiat Pool.
+
+#### Free for All Format
+An example of the "Open" format is Bounty [#11 - "Design Community Repo Banner"](https://github.com/Joystream/community-repo/issues/89).
+
+Similar to the [Open](#open-format) format, anyone (with a membership) can participate in this bounty, but it requires a little more specialized skills. It's similar to a competition in many ways, as there can be unlimited entrant, but only a few winners.
+
+##### Full Workflow
+Involved parties, and their responsibilities:
+- Jsgenesis
+  - initial Bounty Issue
+  - final grading
+- the Bounty Manager
+  - deploying the Bounty
+  - initial grading
+  - spending proposals
+- the Council
+  - approving the Bounty
+  - voting on spending proposals
+- Entrants
+  - designing covers
+- Candidates
+  - entrants the BM picks as winners
+
+1. The Bounty Manager sets some Bounty specific rules (in addition to the [General Steps](#general-steps)), such as:
+  - Where and how a Banner should be submitted initially (e.g. the forum or Community Repo)
+  - Exact specifications of a banner (e.g. file format(s), resolutions, etc.)
+  - Information on how to find resources (e.g. "blank canvas", fonts, preferred themes, etc.)
+  - Deadline(s) for submissions
+  - Reserves the right to extend deadlines under certain conditions
+  - etc.
+2. Entrants sees the Bounty, and creates banners.
+3. After doing so, they post in the bounties Forum post (and/or makes a draft PR to the Community Repo), with their work.
+4. The BM performs their reviews, and selects up to three Candidates (if there are fewer than three, the BM can choose to extend the deadline). These are each encouraged to make spending proposals.
+5. The Candidates (if they haven't already), opens PRs with their work to the Community Repo, and make their spending proposals - linking to the PRs, and the BMs approvals.
+6. If one or more is approved by the Council, the Candidates mark their PR ready for review, and the BM requests a review by Jsgenesis.
+8. Jsgenesis grades the work and adds the amount they see applicable to the Fiat Pool.
+
+#### Closed Format
+In Bounties that requires significant time and/or other resources to complete, and with only one "winner" in practice, Jsgenesis considers it fair to all parties to have an application process culminating in a single Community Member being assigned the Bounty for some agreed time.
+
+Most `coding` and `research` Bounties fits equally well as examples, but [#8 -  "Ledger for Joystream"](https://github.com/Joystream/community-repo/issues/86) seems most suitable due to its extensive scope.
+
+##### Full Workflow
+Involved parties, and their responsibilities:
+- Jsgenesis
+  - initial Bounty Issue
+  - final grading
+- the Bounty Manager
+  - deploying the Bounty
+  - advising the Council
+  - initial grading
+- the Council
+  - approving the Bounty
+  - voting on spending proposals
+- Applicants
+  - Community Members applying to be Assigned the Bounty
+- Assigned
+  - the Applicant chosen
+
+
+1. The Bounty Manager sets some Bounty specific rules (in addition to the [General Steps](#general-steps)), such as:
+  - Applications for the bounty will be accepted for until blockheight `n`, say 2 weeks from now.
+  - The BM reserves the right to extend the deadline, if no "suitable" Applicants apply
+    - If that is not the case, an Applicant will be assigned within blockheight `n+43200`, say within three days of the Application stage ending
+  - The application must contain:
+    - Hardware wallets owned by the Applicant (Ledger required)
+    - Experience with using cryptocurrencies
+    - Milestones and timelines
+    - Brief explanation of why they should be Assigned the Bounty
+  - The BM is free to suggest or set parameters for milestones (e.g. 3), timelines (e.g. max two weeks for each), and other reporting requirements
+    - A milestone implies some partial delivery at an agreed time, with some part of the compensations being paid out on completion.
+2. Applicants apply for the Bounty. (They may also ask questions, and set some conditions if applicable.)
+3. After the application stage is over, the Bounty Manager either:
+  - Assigns an Applicant themselves, or makes a text proposal to the Council proposing to assign one (depending on what was agreed in [initially](#general-steps))
+  - Extend the Application process - possible with some new terms (e.g. requesting more funding, longer deadlines, etc.)
+4. Assuming an Applicant is now Assigned, they start working with the following agreements:
+  - Milestone 1 covers Success Events 1 and 2, will pay the full amount ($100) on completion, if submitted within blockheight `n+43200+72000` (five days) and fully accepted. If not submitted, a new Applicant may be Assigned, unless an agreement is made.
+  - Milestone 2 covers Success Event 3, and will pay the full amount ($100) on completion, if submitted within blockheight `n+43200+72000+72000` (ten days) and fully accepted. If not submitted, a new Applicant may be chosen, unless an agreement is made.
+  - Milestone 3 covers Success Events 4 and 5, and will pay the full amount ($250) on completion, if submitted within blockheight `n+43200+72000+72000+72000` (fifteen days) and fully accepted. If not submitted, a new Applicant may be chosen, unless an agreement is made.
+5. Before Milestone 1 is reached, the Assigned makes a draft PR to the Community Repo, and a spending proposal for the amount agreed (or less, if the Assigned is themselves aware that their work is incomplete). The Assigned should communicate this to the BM.
+6. The BM advices the Council (by replying to the Proposal) on whether to approve or not.
+  - If the BM advices approval, and the Council approves the proposal, the Assigned proceeds to Milestone 2
+  - If the BM advices not approving, they must state why. If the Council agrees, the BM decides whether to assign a new Applicant, or extend the deadline(s)
+  - Any other outcome should lead to the BM getting replaced.
+7. Assuming step 6. was approved, repeat steps 5. and 6. (except instead of a new PR, new commits are pushed to the draft PR)
+8. Assuming step 6. and 7. was approved, the Assigned makes their (hopefully) final commits to the PR, and creates their final spending proposal.
+9. The BM advices the Council (by replying to the Proposal) on whether to approve or not.
+10. If approved, the Assigned marks the PR "ready for review", and the BM assigns Jsgenesis for review.
+11. Jsgenesis grades the "entire" Bounty, and increases the fiat pool with the equivalent amount.
+
+#### Other
+In addition to the varieties outlined, other formats can be defined and chosen if they are more appropriate for a specific Bounty.
+
+A "new" Council must honor any agreements and rules set by their predecessors, for as long as the rules say so.
+
+#### Workflow
+The workflow will depend both on the Reward Distribution and the [Format](#format), and must be established beforehand.
+
+- For "Closed" formats, an Applier must present a bid justifying why they ought to be assigned the given Bounty. This should include detailed terms, such as time needed, costs, etc. If approved, this makes the terms valid.
+- In some cases, it may make sense to break a Bounty up in to milestones, with partial rewards at each stage. This builds trust as the Council can see the progress being made, and the Assignee can get chunks of the reward along the way.
+- In other cases, the person may need some initial funding to get started.
+- For "Closed" formats, the specifics of the workflow could be part of the Applier's application for participation.
+
+# Governance
+Constantinople introduced a number of important changes to the governance structure of the platform. The most important of these was the enhancement of the platform's proposal system. You can read descriptions of each of the proposal types on the helpdesk article [here](/proposals/README.md).
+
+Most of the proposals are meant to allow the Council to allocate the platforms resources as efficiently as possible. In order to do so, a [tokenomics spreadsheet](https://docs.google.com/spreadsheets/d/13Bf7VQ7-W4CEdTQ5LQQWWC7ef3qDU4qRKbnsYtgibGU/edit?usp=sharing) has been made to assist in the decision making.
+
+## Proposals
+As a Member (CM or not) you are able to make proposals to be voted on by the Council.
+
+The types of proposals available include:
+- Text/signal Proposal
+- Spending Proposal
+- Set Max Validator Count
+- Set Content Curator Lead
+- Set Content Working Group Mint Capacity
+- Set Election Parameters
+- Runtime Upgrade
+- Add Working Group Leader Opening
+- Set Working Group Mint Capacity
+- Begin Review Working Group Leader Application
+- Fill Working Group Leader Opening
+- Slash Working Group Leader Stake
+- Decrease Working Group Leader Stake
+- Set Working Group Leader Reward
+- Terminate Working Group Leader Role
+
+To make a proposal:
+1. Click the Proposals tab in the Pioneer sidebar (`/proposals`).
+2. This will provide a view of all of the currently active (as well as past) proposals.
+3. If there are fewer than five `active` proposals, you can click the `New Proposal` button at the top of the page.
+4. You will be given a list of proposal types; select the one which is required for your proposal.
+5. Make a note of the staking requirements, ensuring your account balance is sufficient to create the proposal.
+6. Also note the other variables on the page, paying particular attention to the quorum and threshold for votes.
+7. Click `Create Proposal` and fill in the required fields, `Title`, `Rationale` and `Description`.
+8. When you are ready, click `Submit Proposal` and sign the transaction.
+9. If everything has worked correctly, your proposal should now be `active` on the proposals page.
+
+## Voting on Proposals
+While any member can make a proposal, only Council Members can vote!
+
+The voting process is rather simple. The first step is to navigate to the proposals (`/proposals`) page and view the currently active proposals. Select the proposal you would like to vote on and simply click the button corresponding to your decision (based on discussion with other council members) on the merits of the proposal.
+
+You can choose:
+
+- `Approve` - approving the proposed action
+- `Reject` - reject the proposed action
+- `Slash` - reject the proposed action, and slash the stake of the proposer
+- `Abstain` - abstain from voting
+
+More information on how council votes are processed can be read [here](/proposals/README.md).

File diff suppressed because it is too large
+ 17 - 0
helpdesk/roles/council-members/img/council-members_new.svg


BIN
helpdesk/roles/council-members/img/council_member.png


BIN
helpdesk/roles/img/roles.png


File diff suppressed because it is too large
+ 17 - 0
helpdesk/roles/img/roles_new.svg


+ 32 - 0
helpdesk/roles/operators/README.md

@@ -0,0 +1,32 @@
+<p align="center"><img src="img/builder_new.svg"></p>
+
+<div align="center">
+  <h4>This guide outlines the scope of work for the Operations working group
+<h4>
+</div>
+
+
+
+Table of Contents
+==
+<!-- TOC START min:1 max:3 link:true asterisk:false update:true -->
+- [Overview](#overview)
+  - [Technical Infrastructure](#technical-infrastructure)
+  - [Bounty Managers](#bounty-managers)
+  - [Technical Support](#technical-support)
+<!-- TOC END -->
+
+
+# Overview
+As the group is brand new, the scope of work is not yet settled. This document will therefore only briefly outline some of the anticipated tasks.
+
+## Technical Infrastructure
+A key part of the role is to maintain technical infrastructure, add new features, and create new tools.
+
+An easy example is to maintan the `joystream-api` in the [Community Repo](https://github.com/Joystream/community-repo/), whenever new types are published, and add new tools and templates.
+
+## Bounty Managers
+Another key component of the role is to act as Bounty Managers for all things technical, and if they can't find someone else, take on the responsibility as BMs for all non-content bounties.
+
+## Technical Support
+Users will often run into technical obstacles where they need assistance. The Operations group should monitor both the forum, this repo, and especially our [Discord](https://discord.gg/DE9UN3YpRP).

BIN
helpdesk/roles/operators/img/builder.png


File diff suppressed because it is too large
+ 17 - 0
helpdesk/roles/operators/img/builder_new.svg


+ 390 - 0
helpdesk/roles/storage-lead/README.md

@@ -0,0 +1,390 @@
+<p align="center"><img src="img/storage-lead.svg"></p>
+
+<div align="center">
+  <h4>This is a guide to working as the Storage Provider Lead on the latest
+  <a href="https://testnet.joystream.org/">Joystream Testnet</a>.<h4>
+</div>
+
+
+
+Table of Contents
+==
+<!-- TOC START min:1 max:3 link:true asterisk:false update:true -->
+- [Overview](#overview)
+- [About The Storage Lead](#about-the-storage-lead)
+- [Hiring Storage Lead](#hiring-storage-lead)
+  - [Proposals](#proposals)
+    - [Create Opening](#create-opening)
+    - [Review Applications](#review-applications)
+    - [Processing Applications](#processing-applications)
+- [Hiring Storage Providers](#hiring-storage-providers)
+  - [Using the CLI](#using-the-cli)
+    - [Create Opening](#create-opening-1)
+    - [Accepting Applications](#accepting-applications)
+    - [Processing Applications](#processing-applications-1)
+- [Working As Storage Lead](#working-as-storage-lead)
+  - [Responsibilities](#responsibilities)
+  - [All Commands](#all-commands)
+  - [Set Vouchers Limits](#set-vouchers-limits)
+<!-- TOC END -->
+
+
+# Overview
+
+This page contains all the information required on becoming `Storage Provider Lead`, and how to perform the various tasks required for the job.
+
+# About The Storage Lead
+
+The `Storage Working Group Lead`, `Storage Provider Lead` or simply `Storage Lead` is a new role introduced as part of the _Nicaea_ upgrade to our Constantinople testnet. The `Storage Lead` is hired directly by the council through the proposals system and is responsible for the hiring, firing and wider management of `Storage Providers` on the network.
+
+# Hiring Storage Lead
+
+## Proposals
+
+Hiring the `Storage Lead` is the responsibility of the `Council` through the proposals system. Three new proposal types have been introduced to support the hiring process, and more have also been added to allow the `Council` to effectively manage the lead once "in office", through slashing, setting the mint capacity, decreasing stake and firing etc.
+
+### Create Opening
+
+The first step from the Council's perspective is creating an opening where prospective `Storage Leads` can apply for the role.
+Within [Pioneer](https://testnet.joystream.org), navigate first to the proposals tab and select `New Proposal`.
+
+To create an opening, select `Add Working Group Leader Opening` and fill in the variables.
+
+### Review Applications
+
+In order to formally "close" the opening to further applicants and inform the existing candidates that their submissions are currently being considered, the status of the opening must be changed to "In Review".
+
+This can be done very easily through the creation of another proposal by the `Council`, this time with the `Begin Review Working Group Leader Application` proposal type. The main thing to pay attention to here is the `Working Group Opening ID` created earlier. Helpfully there is a dropdown box for choosing among the currently active openings, in case you have forgotten the ID.
+
+### Processing Applications
+
+The final step in hiring the `Storage Lead` is to create a `Fill Working Group Leader Opening`. The requirements here simply to choose the relevant opening from the drop-down menu and choose between the candidate applications (in JSON format) shown on the page.
+
+Once a candidate has been chosen and the final proposal has passed, the focus is now on the new `Storage Lead`...
+
+# Hiring Storage Providers
+
+## Using the CLI
+Our newly developed Command-Line Interface (CLI) is an essential tool for the Storage Lead, as it is by far the simplest way to hire and manage `Storage Providers` and applicants for this role. The program and its instructions for use can be found [here](https://github.com/Joystream/joystream/tree/master/cli).
+
+All of the useful commands which can be executed by the `Storage Lead` will require the lead to import their "role" key rather than their "member" key. Consequently, in the CLI the `account:import` and `account:choose` commands will need to be used.
+
+### Create Opening
+
+To create an opening, the lead needs to run the `working-groups:createOpening` command using their role key.
+
+There are some options for specific purposes which can be selected with this command, as shown below:
+```
+Create working group opening (requires lead access)
+
+USAGE
+  $ joystream-cli working-groups:createOpening
+
+OPTIONS
+  -e, --edit                               If provided along with --input - launches in edit mode allowing to modify the input before sending the extrinsic
+
+  -g, --group=(storageProviders|curators)  The working group context in which the command should be executed
+                                           Available values are: storageProviders, curators.
+
+  -i, --input=input                        Path to JSON file to use as input (if not specified - the input can be provided interactively)
+
+  -o, --output=output                      Path to the file where the output JSON should be saved (this output can be then reused as input)
+
+  --dryRun                                 If provided along with --output - skips sending the actual extrinsic (can be used to generate a "draft" which can be provided as input
+                                           later)
+```
+
+Note that although some values are stated as `u128` or other confusing types, you should provide plaintext or numbers, and the CLI will convert them for you. Once this command is run, the prompts to set up the opening are *somewhat* self-explanatory.
+However, here are some pointers when creating an Opening.
+
+#### Application Parameters
+- `Choose value for activate_at:`
+  - Use `CurrentBlock` for allowing applications right away
+- `Do you want to provide the optional application_rationing_policy parameter?`
+  - This lets you set a max number of active applicants (`n`).
+  - Can be useful to avoid "spam", and combined with
+  - This lets you require an application stake from the Applicants
+  - Combined with setting `role/application_staking_policy`, and `at_least` for one or both, only the `n` applicants with the highest combined `role+application` stake will be considered.
+- `Provide value for max_review_period_length` should be high enough to allow you enough time to review. If the Review Period expires, the Opening closes, and no one is hired.
+- The various `*_unstaking_period_length` parameters means all take an argument `x` in blocks
+  - `crowded_out_unstaking_period_length` - "Application" and/or "Role" stake:
+    - If an applicant is crowded out due to the `number_of_applicants>n`, this lets you set an "unstaking period". May not make much sense, as they may want to re-apply with (a) higher stakes, and this will block them from re-using said stake(s) for `x` blocks.
+  - `review_period_expired_unstaking_period_length` - "Application" and/or "Role" stake:
+    - If the Opening expired with no one hired, this keeps their stake(s) locked for `x` blocks. May be overly harsh?
+  - `fill_opening_successful_applicant_application_stake_unstaking_period` - Only "Application" stake:
+    - If an Opening is ended with one or more Workers hired, `x` is the number of blocks until the hired Worker(s) Application stake is returned.
+  - `fill_opening_failed_applicant_*_stake_unstaking_period` - "Application" and/or "Role" stake:
+    - If an Opening is ended with one or more Workers hired, `x` is the number of blocks until the Application stake is returned to those that were not hired.
+  - `terminate_*_stake_unstaking_period` - "Application" and/or "Role" stake:
+    - If an Application was terminated, this keeps their stake(s) locked for `x` blocks. May be useful to stop spammers.
+    - If no one was hired, this keeps their Application stake locked for `x` blocks. May be overly harsh?
+  - `exit_role_*_stake_unstaking_period` - "Application" and/or "Role" stake:
+    - If a Worker exits their role, this keeps their stake(s) locked for `x` blocks.
+    - Should be used for the Role stake
+    - Maybe not so useful for the Application stake?
+
+#### Human Readable Information and Questions
+The second part is filling out a JSON schema, where you can set what information is provided to applicants and what details are collected as part of the application process. As mentioned above, you should consider creating a draft first, to review your input before broadcasting on-chain. Here are some pointers:
+- When prompted for a version, provide the value `1`.
+- When providing "type" for the `questions vector`, `text` means single line, whereas `text area` means a multi-line text area.
+
+#### Complete Example
+```
+? Your account's password [hidden]
+  Choose value for activate_at: CurrentBlock
+  Providing values for commitment struct:
+    Do you want to provide the optional application_rationing_policy parameter? Yes
+      Providing values for {
+        max_active_applicants:u32
+      } struct:
+        Provide value for max_active_applicants 3
+    Provide value for max_review_period_length 14400
+    Do you want to provide the optional application_staking_policy parameter? Yes
+      Providing values for {
+        amount:u128
+        amount_mode:{"_enum":["AtLeast","Exact"]}
+        crowded_out_unstaking_period_length:Option<u32>
+        review_period_expired_unstaking_period_length:Option<u32>
+      } struct:
+        Provide value for amount 1000
+        Choose value for amount_mode: AtLeast
+        Do you want to provide the optional crowded_out_unstaking_period_length parameter? Yes
+          Provide value for u32 1
+        Do you want to provide the optional review_period_expired_unstaking_period_length parameter? Yes
+          Provide value for u32 2
+    Do you want to provide the optional role_staking_policy parameter? Yes
+      Providing values for {
+        amount:u128
+        amount_mode:{"_enum":["AtLeast","Exact"]}
+        crowded_out_unstaking_period_length:Option<u32>
+        review_period_expired_unstaking_period_length:Option<u32>
+      } struct:
+        Provide value for amount 1001
+        Choose value for amount_mode: AtLeast
+        Do you want to provide the optional crowded_out_unstaking_period_length parameter? Yes
+          Provide value for u32 3
+        Do you want to provide the optional review_period_expired_unstaking_period_length parameter? Yes
+          Provide value for u32 4
+    Do you want to provide the optional fill_opening_successful_applicant_application_stake_unstaking_period parameter? Yes
+      Provide value for u32 5
+    Do you want to provide the optional fill_opening_failed_applicant_application_stake_unstaking_period parameter? Yes
+      Provide value for u32 6
+    Do you want to provide the optional fill_opening_failed_applicant_role_stake_unstaking_period parameter? Yes
+      Provide value for u32 7
+    Do you want to provide the optional terminate_application_stake_unstaking_period parameter? Yes
+      Provide value for u32 8
+    Do you want to provide the optional terminate_role_stake_unstaking_period parameter? Yes
+      Provide value for u32 9
+    Do you want to provide the optional exit_role_application_stake_unstaking_period parameter? Yes
+      Provide value for u32 10
+    Do you want to provide the optional exit_role_stake_unstaking_period parameter? Yes
+      Provide value for u32 11
+Providing values for human_readable_text struct:
+    Provide value for version 1
+    Provide value for headline Some Headline
+    Providing values for job struct:
+      Provide value for title Some Title
+      Provide value for description Some Description
+    Providing values for application struct:
+      Providing values for sections vector:
+        Do you want to add another entry to sections vector (currently: 0)? Yes
+        Providing values for {
+          title:Text
+          questions:Vec<{"title":"Text","type":"Text"}>
+        } struct:
+          Provide value for title Sections Title 0
+          Providing values for questions vector:
+            Do you want to add another entry to questions vector (currently: 0)? Yes
+            Providing values for {
+              title:Text
+              type:Text
+            } struct:
+              Provide value for title Questions Title 0
+              Provide value for type text area
+            Do you want to add another entry to questions vector (currently: 1)? Yes
+            Providing values for {
+              title:Text
+              type:Text
+            } struct:
+              Provide value for title Questions Title 1
+              Provide value for type text
+            Do you want to add another entry to questions vector (currently: 2)? Yes
+            Providing values for {
+              title:Text
+              type:Text
+            } struct:
+              Provide value for title Questions Title 2
+              Provide value for type text area
+            Do you want to add another entry to questions vector (currently: 3)? No
+        Do you want to add another entry to sections vector (currently: 1)? Yes
+        Providing values for {
+          title:Text
+          questions:Vec<{"title":"Text","type":"Text"}>
+        } struct:
+          Provide value for title Sections Title 1
+          Providing values for questions vector:
+            Do you want to add another entry to questions vector (currently: 0)? Yes
+            Providing values for {
+              title:Text
+              type:Text
+            } struct:
+              Provide value for title Questions Title 0 in Section 1
+              Provide value for type text
+            Do you want to add another entry to questions vector (currently: 1)? No
+        Do you want to add another entry to sections vector (currently: 2)? No
+    Provide value for reward x tJOY per n blocks
+    Providing values for creator struct:
+      Providing values for membership struct:
+        Provide value for handle Lead
+    Providing values for process struct:
+      Providing values for details vector:
+        Do you want to add another entry to details vector (currently: 0)? Yes
+        Provide value for Text Detail 0
+        Do you want to add another entry to details vector (currently: 1)? Yes
+        Provide value for Text Detail 1
+        Do you want to add another entry to details vector (currently: 2)? No
+```
+If successfully submitted, you can look at your Opening using the `working-groups:opening <WGOPENINGID>`, which returns:
+```
+Group: storageProviders
+
+______________ Human readable text _______________
+
+{
+    version: 1,
+    headline: "Some Headline",
+    job: {
+        title: "Some Title",
+        description: "Some Description"
+    },
+    application: {
+        sections: [
+            {
+                title: "Sections Title 0",
+                questions: [
+                    {
+                        title: "Questions Title 0",
+                        type: "text area"
+                    },
+                    {
+                        title: "Questions Title 1",
+                        type: "text"
+                    },
+                    {
+                        title: "Questions Title 2",
+                        type: "text area"
+                    }
+                ]
+            },
+            {
+                title: "Sections Title 1",
+                questions: [
+                    {
+                        title: "Questions Title 0 in Section 1",
+                        type: "text"
+                    }
+                ]
+            }
+        ]
+    },
+    reward: "x tJOY per n blocks",
+    creator: {
+        membership: {
+            handle: "Lead"
+        }
+    },
+    process: {
+        details: [
+            "Detail 0",
+            "Detail 1"
+        ]
+    }
+}
+
+________________ Opening details _________________
+
+WG Opening ID                 8                                
+Opening ID                    10                               
+Type                          Worker                           
+Stage                         Accepting Applications           
+Last status change            ~ 6:31:06 AM 7/29/2020 (#194118)
+Application stake             >= 1.000k JOY                    
+Role stake                    >= 1.001k JOY                    
+
+_______________ Unstaking periods ________________
+
+Crowded Out Application Stake Unstaking Period Length:                  1 block  
+Crowded Out Role Stake Unstaking Period Length:                         3 blocks  
+Exit Role Application Stake Unstaking Period:                           10 blocks
+Exit Role Stake Unstaking Period:                                       11 blocks
+Fill Opening Failed Applicant Application Stake Unstaking Period:       6 blocks  
+Fill Opening Failed Applicant Role Stake Unstaking Period:              7 blocks  
+Fill Opening Successful Applicant Application Stake Unstaking Period:   5 blocks  
+Review Period Expired Application Stake Unstaking Period Length:        2 blocks  
+Review Period Expired Role Stake Unstaking Period Length:               4 blocks  
+Terminate Application Stake Unstaking Period:                           8 blocks  
+Terminate Role Stake Unstaking Period:                                  9 blocks  
+```
+
+
+### Accepting Applications
+
+Once enough applications have been submitted, these can now be reviewed to decide who should be hired as a `Storage Provider`.
+The command to be used is the following: `working-groups:startReviewPeriod <WGOPENINGID>`.
+
+You can find the `WGOPENINGID` in the URL in Pioneer or through a chain state query of the currently active openings.
+
+### Processing Applications
+
+As soon as the opening is in the `In Review` state, you can start hiring!
+
+Simply run `working-groups:fillOpening <WGOPENINGID>` where `<WGOPENINGID>` is the same as earlier, and you will be prompted to select the applicants you wish to hire (using a check-box dialog). The usernames of the candidates will be shown so you don't have to worry about numerical IDs for this part.
+
+# Working As Storage Lead
+
+## Responsibilities
+As the `Storage Lead` you are responsible for ensuring that `Storage Providers` are performing adequately. They must hold a complete and up-to-date copy of the content directory and ensure uptime in order to effectively serve testnet content consumers.
+
+If a `Storage Provider` is not performing adequately, it is up to you to decide the sanctions for this, which may include slashing and, as a last resort, their eviction from the Storage Working Group.
+
+## All Commands
+
+Within the CLI, all of the relevant commands for the Storage Lead can be found through the following query:
+```
+working-groups --help
+```
+More information on the usage can be found [here](/tools/cli)
+
+For convenience, the output of this command is listed below to give a sense of the powers and responsibilities of the Storage Lead:
+```
+Working group lead and worker actions
+
+USAGE
+  $ joystream-cli working-groups:COMMAND
+
+COMMANDS
+  working-groups:application                 Shows an overview of given application by Working Group Application ID
+  working-groups:createOpening               Create working group opening (requires lead access)
+  working-groups:decreaseWorkerStake         Decreases given worker stake by an amount that will be returned to the worker role account. Requires lead access.
+  working-groups:evictWorker                 Evicts given worker. Requires lead access.
+  working-groups:fillOpening                 Allows filling working group opening that's currently in review. Requires lead access.
+  working-groups:increaseStake               Increases current role (lead/worker) stake. Requires active role account to be selected.
+  working-groups:leaveRole                   Leave the worker or lead role associated with currently selected account.
+  working-groups:opening                     Shows an overview of given working group opening by Working Group Opening ID
+  working-groups:openings                    Shows an overview of given working group openings
+  working-groups:overview                    Shows an overview of given working group (current lead and workers)
+  working-groups:setDefaultGroup             Change the default group context for working-groups commands.
+  working-groups:slashWorker                 Slashes given worker stake. Requires lead access.
+  working-groups:startAcceptingApplications  Changes the status of pending opening to "Accepting applications". Requires lead access.
+  working-groups:startReviewPeriod           Changes the status of active opening to "In review". Requires lead access.
+  working-groups:terminateApplication        Terminates given working group application. Requires lead access.
+  working-groups:updateRewardAccount         Updates the worker/lead reward account (requires current role account to be selected)
+  working-groups:updateRoleAccount           Updates the worker/lead role account. Requires member controller account to be selected
+  working-groups:updateRoleStorage           Updates the associated worker storage
+  working-groups:updateWorkerReward          Change given worker's reward (amount only). Requires lead access.
+```
+
+## Set Vouchers Limits
+Starting with `Sumer`, the Storage Lead is also responsible for handling channel owners' quotas. If requested, and approved, this can (for now) only be done by using the [extrinsics tab](https://testnet.joystream.org/#/extrinsics) (which requires you to enable the "Fully featured" view in settings), and selecting `dataDirectory`.
+
+Note that the quotas are on the `channel` level, not `member`. You can also check the current voucher limits in the [chain state tab](https://testnet.joystream.org/#/chainstate).

File diff suppressed because it is too large
+ 7 - 0
helpdesk/roles/storage-lead/img/storage-lead.svg


+ 578 - 0
helpdesk/roles/storage-providers/README.md

@@ -0,0 +1,578 @@
+<p align="center"><img src="img/storage-provider_new.svg"></p>
+
+<div align="center">
+  <h4>This is a guide to setting up your <a href="https://github.com/Joystream/joystream/tree/master/storage-node">storage node</a>, and getting started as a Storage Provider on the latest
+    <a href="https://testnet.joystream.org/">testnet</a>.</h4><br>
+</div>
+
+
+
+Table of Contents
+==
+<!-- TOC START min:1 max:3 link:true asterisk:false update:true -->
+- [Overview](#overview)
+- [Instructions](#instructions)
+  - [Initial setup](#initial-setup)
+  - [Install IPFS](#install-ipfs)
+    - [Configure IPFS](#configure-ipfs)
+    - [Run IPFS as a service](#run-ipfs-as-a-service)
+  - [Setup Hosting](#setup-hosting)
+    - [Instructions](#instructions-1)
+    - [Run caddy as a service](#run-caddy-as-a-service)
+  - [Install and Setup the Storage Node](#install-and-setup-the-storage-node)
+  - [Update Your Storage Node](#update-your-storage-node)
+    - [Applying for a Storage Provider opening](#applying-for-a-storage-provider-opening)
+    - [Setup and configure the storage node](#setup-and-configure-the-storage-node)
+    - [Run storage node as a service](#run-storage-node-as-a-service)
+    - [Verify everything is working](#verify-everything-is-working)
+- [Troubleshooting](#troubleshooting)
+  - [Port not set](#port-not-set)
+  - [No tokens in role account](#no-tokens-in-role-account)
+  - [Caddy v1 (deprecated)](#caddy-v1-deprecated)
+    - [Run caddy as a service](#run-caddy-as-a-service-1)
+<!-- TOC END -->
+
+
+
+# Overview
+
+This page contains all information required to set up your storage node and become a `Storage Provider` on the current Joystream testnet.
+
+The guide for the `Storage Provider Lead` can be found [here](/roles/storage-lead).
+
+# Instructions
+
+The instructions below will assume you are running as `root`. This makes the instructions somewhat easier, but less safe and robust.
+
+Note that this has been tested on a fresh images of `Ubuntu 20.04 LTS`. You may run into some troubles with `Debian`.
+
+The system has shown to be quite resource intensive, so you should choose a VPS with specs equivalent to [Linode 8GB](https://www.linode.com/pricing/) or better (not an affiliate link).
+
+Please note that unless there are any openings for new storage providers (which you can check in [Pioneer](https://testnet.joystream.org/) under `Working Groups` -> `Opportunities`), you will not be able to join. Applying to the opening is easiest in Pioneer, but once hired, you no longer need it. Actions you may want to perform after getting hired are easiest to carry out with the [CLI](/tools/cli/README.md#working-groups). With this, you can configure things like:
+- changing your reward destination address
+- changing your role key
+- increasing your stake
+- leaving the role
+
+## Initial setup
+First of all, you need to connect to a fully synced [Joystream full node](https://github.com/Joystream/joystream/releases). By default, the program assumes you are running a node on the same device. For instructions on how to set this up, go [here](/roles/validators). Note that you can disregard all the parts about keys before applying, and just install the software so it is ready to go.
+We strongly encourage that you run both the [node](/roles/validators#run-as-a-service) and the other software below as a service.
+
+Now, get the additional dependencies:
+```
+$ apt-get update && apt-get upgrade -y
+# on debian 10, if you manage the first hurdle:
+$ apt-get install libcap2-bin
+```
+
+## Install IPFS
+The storage node uses [IPFS](https://ipfs.io/) as backend.
+```
+$ wget https://github.com/ipfs/go-ipfs/releases/download/v0.8.0/go-ipfs_v0.8.0_linux-amd64.tar.gz
+$ tar -xvzf go-ipfs_v0.8.0_linux-amd64.tar.gz
+$ cd go-ipfs
+$ ./ipfs init --profile server
+$ ./install.sh
+# start ipfs daemon:
+$ ipfs daemon
+```
+If you see `Daemon is ready` at the end, you are good!
+
+### Configure IPFS
+Some of the default configurations needs to be changed, in order to get better performance:
+
+```
+# cuz xyz
+ipfs config --bool Swarm.DisableBandwidthMetrics true
+# Default only allows storing 10GB, so:
+ipfs config Datastore.StorageMax "400GB"
+# cuz xyz
+ipfs config --json Gateway.PublicGateways '{"localhost": null }'
+```
+
+
+### Run IPFS as a service
+
+To ensure high uptime, it's best to set the system up as a `service`.
+
+Example file below:
+
+```
+$ nano /etc/systemd/system/ipfs.service
+# Paste in everything below the stapled line
+---
+[Unit]
+Description=ipfs
+After=network.target
+
+[Service]
+Type=simple
+User=root
+WorkingDirectory=/root
+LimitNOFILE=10240
+PIDFile=/run/ipfs/ipfs.pid
+ExecStart=/usr/local/bin/ipfs daemon --routing=dhtclient
+Restart=on-failure
+RestartSec=3
+StartLimitInterval=600
+
+[Install]
+WantedBy=multi-user.target
+```
+Save and exit. Close the `ipfs daemon` if it's still running, then:
+```
+$ systemctl start ipfs
+# If everything works, you should get an output. Verify with:
+$ systemctl status ipfs
+# If you see something else than "Daemon is ready" at the end, try again in a couple of seconds.
+# To have ipfs start automatically at reboot:
+$ systemctl enable ipfs
+# If you want to stop ipfs, either to edit the file or some other reason:
+$ systemctl stop ipfs
+```
+
+## Setup Hosting
+In order to allow for users to upload and download, you have to setup hosting, with an actual domain as both Chrome and Firefox requires `https://`. If you have a "spare" domain or subdomain you don't mind using for this purpose, go to your domain registrar and point your domain to the IP you want. If you don't, you will need to purchase one.
+
+To configure SSL-certificates the easiest is to use [caddy](https://caddyserver.com/), but feel free to take a different approach. Note that if you are using caddy for commercial use, you need to acquire a license. Please check their terms and make sure you comply with what is considered personal use.
+
+Previously, this guide was using Caddy v1, but this has now been deprecated. As some of you may already have installed it, and may want to continue running it, the now deprecated instructions can be found in full [here](#caddy-v1).
+
+### Instructions
+For the best setup, you should use the "official" [documentation](https://caddyserver.com/docs/).
+
+The instructions below are for Caddy v2.4.1:
+```
+$ wget https://github.com/caddyserver/caddy/releases/download/v2.4.1/caddy_2.4.1_linux_amd64.tar.gz
+$ tar -vxf caddy_2.4.1_linux_amd64.tar.gz
+$ mv caddy /usr/bin/
+# Test that it's working:
+$ caddy version
+```
+
+Configure the `Caddyfile`:
+```
+$ nano ~/Caddyfile
+# Paste in everything below the stapled line
+---
+# Storage Node API
+https://<your.cool.url>/storage/* {
+        route /storage/* {
+                uri strip_prefix /storage
+                reverse_proxy localhost:3000
+        }
+        header /storage {
+                Access-Control-Allow-Methods "GET, PUT, HEAD, OPTIONS"
+        }
+        request_body {
+                max_size 10GB
+        }
+}
+```
+
+Now you can check if you configured correctly, with:
+```
+$ caddy validate ~/Caddyfile
+# Which should return:
+--
+...
+Valid configuration
+--
+# You can now run caddy with:
+$ caddy run --config /root/Caddyfile
+# Which should return something like:
+--
+...
+... [INFO] [<your.cool.url>] The server validated our request
+... [INFO] [<your.cool.url>] acme: Validations succeeded; requesting certificates
+... [INFO] [<your.cool.url>] Server responded with a certificate.
+... [INFO][<your.cool.url>] Certificate obtained successfully
+... [INFO][<your.cool.url>] Obtain: Releasing lock
+```
+
+### Run caddy as a service
+To ensure high uptime, it's best to set the system up as a `service`.
+
+Example file below:
+
+```
+$ nano /etc/systemd/system/caddy.service
+# Paste in everything below the stapled line
+---
+[Unit]
+Description=Caddy
+Documentation=https://caddyserver.com/docs/
+After=network.target
+
+[Service]
+User=root
+ExecStart=/usr/bin/caddy run --config /root/Caddyfile
+ExecReload=/usr/bin/caddy reload --config /root/Caddyfile
+TimeoutStopSec=5s
+LimitNOFILE=1048576
+LimitNPROC=512
+PrivateTmp=true
+ProtectSystem=full
+AmbientCapabilities=CAP_NET_BIND_SERVICE
+
+[Install]
+WantedBy=multi-user.target
+```
+Save and exit. Close `caddy` if it's still running, then:
+```
+$ systemctl start caddy
+# If everything works, you should get an output. Verify with:
+$ systemctl status caddy
+# Which should produce something similar to the previous output.
+# To have caddy start automatically at reboot:
+$ systemctl enable caddy
+# If you want to stop caddy:
+$ systemctl stop caddy
+# If you want to edit your Caddfile, edit it, then run:
+$ caddy reload
+```
+
+## Install and Setup the Storage Node
+
+First, you need to clone the Joystream monorepo, which contains the storage software.
+Note that if you already have a storage-node installed (or running), go [here](#update-your-storage-node).
+
+```
+$ git clone https://github.com/Joystream/joystream.git
+$ cd joystream
+$ ./setup.sh
+# this requires you to start a new session. if you are using a vps:
+$ exit
+$ ssh user@ipOrURL
+# on your local machine, just close the terminal and open a new one
+$ yarn build:packages
+$ yarn run colossus --help
+```
+You can set the PATH to avoid the `yarn run` prefix by:
+```
+$ cd ~/joystream/storage-node/packages/colossus
+$ yarn link
+# Test that it's working with:
+$ colossus --help
+# It should now work globally
+```
+
+## Update Your Storage Node
+To update your storage-node from an old network, it's probably time to update `ipfs` and `caddy`, although older versions _should_ continue to work.
+
+If you `rm -rf ~/.ipfs`, you are also saving a **lot** of storage space, as the content-directory will not be migrated in full.
+
+There are also some changes required in all the .service files, so ideally go through the entire guide!
+
+To upgrade the storage node itself:
+```
+# If you are running as service (which you should)
+$ systemctl stop storage-node
+$ cd ~/joystream/storage-node/packages/colossus
+$ yarn unlink
+$ cd ~/joystream
+$ git pull origin master
+$ rm -rf node modules
+$ yarn cache clean
+$ ./setup.sh
+# this requires you to start a new session. if you are using a vps:
+$ exit
+$ ssh user@ipOrURL
+# on your local machine, just close the terminal and open a new one
+$ cd ~/joystream
+$ yarn build:packages
+$ cd ~/joystream/storage-node/packages/colossus
+$ yarn run colossus --help
+```
+
+If you have been running a storage node previously, and used `.bash_profile` to avoid the `yarn run` prefix, you need to:
+`$ nano ~/.bash_profile`
+Then, uncomment or remove the lines below:
+```
+# Colossus
+alias colossus="/root/storage-node-joystream/packages/colossus/bin/cli.js"  
+alias helios="/root/storage-node-joystream/packages/helios/bin/cli.js"
+```
+For helios, you can instead change the path from `/root/storage-node-joystream/packages/helios/bin/cli.js` -> `/root/joystream/storage-node/packages/helios/bin/cli.js`
+
+
+### Applying for a Storage Provider opening
+
+Click [here](https://testnet.joystream.org) to open the `Pioneer app` in your browser. Then follow instructions [here](https://github.com/Joystream/helpdesk#get-started) to generate a set of `Keys`, get tokens, and sign up for a `Membership`. This `key` will be referred to as the `member` key.
+
+Make sure to save the `5YourJoyMemberAddress.json` file. This key will require tokens to be used as stake for the `Storage Provider` application (`application stake`) and further stake may be required if you are selected for the role (`role stake`).
+
+To check for current openings, visit [this page](https://testnet.joystream.org/#/working-groups/opportunities) on Pioneer and look for any `Storage Provider` applications which are open for applications. If there is an opening available, fill in the details requested in the form required and stake the tokens needed to apply (when prompted you can sign a transaction for this purpose).
+
+During this process you will be provided with a role key, which will be made available to download in the format `5YourStorageAddress.json`. If you set a password for this key, remember it :)
+
+The next steps (below) will only apply if you are a successful applicant.
+
+
+### Setup and configure the storage node
+
+**Make sure your [Joystream full node](https://github.com/Joystream/joystream/releases) is fully synced before you move to the next step(s)!**
+
+Assuming you are running the storage node on a VPS via ssh, on your local machine:
+
+```
+# Go the directory where you saved your <5YourStorageAddress.json>:
+$ scp <5YourStorageAddress.json> <user>@<your.vps.ip.address>:/root/joystream/storage-node/
+```
+Your `5YourStorageAddress.json` should now be where you want it.
+
+On the machine/VPS you want to run your storage node:
+
+```
+# If you are not already in that directory:
+$ cd ~/joystream/storage-node
+```
+
+On our older testnets, at this point you would have to "apply" using a separate colossus command to any available storage role. With the evolution of our testnet and the introduction of the `Storage Working Group`, this is no longer necessary. The next steps simply require that you link the "role key" (`5YourStorageAddress.json`) and `Storage ID` to your storage server.
+
+To check your `Storage ID`, you have two (easy) options:
+1. Use the [CLI](/tools/cli/README.md#working-groups:overview)
+2. Check [Pioneer](https://testnet.joystream.org/#/working-groups)
+
+**Note:** Make sure you send some tokens to your "role key"/`5YourStorageAddress.json` before proceeding! It needs tokens to send transactions, or it will be considered "down", and unavailable for syncing.
+
+```
+# To make sure everything is running smoothly, it would be helpful to run with DEBUG.
+
+$ cd ~/joystream
+$ DEBUG=joystream:* yarn run colossus server --key-file <5YourStorageAddress.json> --public-url https://<your.cool.url>/storage/ --provider-id <your_storage-id>
+
+# If you set a passphrase for <5YourStorageAddress.json>:
+$ DEBUG=joystream:* (yarn run) colossus server --key-file <5YourStorageAddress.json> --public-url https://<your.cool.url>/storage/ --provider-id <your_storage-id> --passphrase <your_passphrase>
+```
+
+If you do this, you should see (among other things) something like:
+
+```
+... :  ________                     _____
+... :  ______(_)__________  __________  /__________________ _______ ___
+... :  _____  /_  __ \_  / / /_  ___/  __/_  ___/  _ \  __ `/_  __ `__ \
+... :  ____  / / /_/ /  /_/ /_(__  )/ /_ _  /   /  __/ /_/ /_  / / / / /
+... :  ___  /  \____/_\__, / /____/ \__/ /_/    \___/\__,_/ /_/ /_/ /_/
+... :  /___/         /____/
+... :  <timestamp>joystream:runtime:base Init
+... :  <timestamp>joystream:runtime:identities Init
+... :  <timestamp>joystream:runtime:identities Initializing key from /root/ <5YourStorageAddress.json>
+... :  <timestamp>joystream:runtime:identities Successfully initialized with address  <5YourStorageAddress>
+... :  <timestamp>joystream:runtime:balances Init
+... :  <timestamp>joystream:runtime:roles Init
+... :  <timestamp>joystream:runtime:assets Init
+... :  <timestamp>joystream:runtime:system Init
+... :  <timestamp>joystream:runtime:base Waiting for chain to be synced before proceeding.
+... :  <timestamp>joystream:sync Sync run started.
+... :  [HPM] Proxy created: function (path, req) {
+... :    // we get the full path here so it needs to match the path where
+... :    // it is used by the openapi initializer
+... :    return path.match('^/asset/v0') && (req.method === 'GET' || req.method === 'HEAD')
+... :  }  -> http://localhost:8080/
+... :  Starting API server...
+... :  API server started. { address: '::', family: 'IPv6', port: 3000 }
+... :  <timestamp>joystream:storage:storage IPFS node is up with identity:  <ipfsPeerId>
+... :  <timestamp>joystream:colossus announcing public url
+... :  <timestamp>joystream:sync Sync run completed, set <n> new relationships to ready
+... :  <timestamp>joystream:runtime:base:tx Submitted: {"nonce":"<nonce>","txhash":"<hash>","tx":"<hash>"}
+... :  <timestamp>joystream:runtime:base:tx Finalized {"nonce":"<nonce>","txhash":"<hash>"}
+```
+
+If everything is working smoothly, you will now start syncing the `content directory`.
+
+Note that unless you run this is a [service](#run-storage-node-as-a-service), you now have to open a second terminal for the remaining steps.
+
+#### Check that you are syncing
+After you've had it running for a bit (>1 min):
+```
+$ cd ~/joystream/
+$ yarn run helios
+```
+If everything is working, you should rather quickly, see your SP as active, with correct `workerId` and URL.
+
+### Run storage node as a service
+
+To ensure high uptime, it's best to set the system up as a `service`. Note that this will not work if you set a password for your `<5YourStorageAddress.json> `.
+
+Example file below:
+
+```
+$ nano /etc/systemd/system/storage-node.service
+# Paste in everything below the stapled line
+---
+[Unit]
+Description=Joystream Storage Node
+After=network.target ipfs.service joystream-node.service
+
+[Service]
+User=root
+WorkingDirectory=/root/joystream/storage-node
+LimitNOFILE=8192
+Environment=DEBUG=joystream:*,-joystream:util:ranges
+ExecStart=/root/.volta/bin/node \
+        packages/colossus/bin/cli.js \
+        --key-file <5YourStorageAddress.json> \
+        --public-url https://<your.cool.url>/storage/ \
+        --provider-id <your_storage-id>
+Restart=on-failure
+StartLimitInterval=600
+
+[Install]
+WantedBy=multi-user.target
+```
+Save and exit. Close `colossus` if it's still running, then:
+```
+$ systemctl start storage-node
+# If everything works, you should get an output. Verify with:
+$ systemctl status storage-node
+# Which should produce something like:
+---
+● storage-node.service - Joystream Storage Node
+...
+
+<timestamp> localhost node[36281]: <timestamp> joystream:sync Starting sync run...
+<timestamp> localhost node[36281]: <timestamp> joystream:sync sync run complete
+<timestamp> localhost node[36281]: <timestamp> joystream:sync Starting sync run...
+<timestamp> localhost node[36281]: <timestamp> joystream:sync sync run complete
+...
+---
+# To have colossus start automatically at reboot:
+$ systemctl enable storage-node
+# If you want to stop the storage node, either to edit the storage-node.service file or some other reason:
+$ systemctl stop storage-node
+```
+
+### Verify everything is working
+
+In your browser, find and click on an uploaded media file [here](https://testnet.joystream.org//#/media/), then open the developer console, and find the URL of the asset. Copy the `<content-id>`, i.e. whatever comes after the last `/`.
+
+Then paste the following in your browser:
+`https://<your.cool.url>/storage/swagger.json`
+Which should return a json.
+
+And:
+`https://<your.cool.url>/storage/asset/v0/<content-id>`.
+(e.g. `5GPhGYaGumtdpFYowMHY15hsdZVZUyEUe2trgh2vq7zGcFKx`)
+If the content starts playing, that means you are good!
+
+# Troubleshooting
+If you had any issues setting it up, you may find your answer here!
+
+## Port not set
+
+If you get an error like this:
+```
+Error: listen EADDRINUSE: address already in use :::3000
+```
+
+It most likely means your port is blocked. This could mean your storage-node is already running (in which case you may want to kill it unless it's configured as a service), or that another program is using the port.
+
+In case of the latter, you can specify a new port (e.g. 3001) with the `--port 3001` flag.
+Note that you have to modify the `Caddyfile` as well...
+
+## No tokens in role account
+If you try to run the storage-node without tokens to pay the transaction fee, you may at some point have tried so many times your transaction gets "temporarily banned". In this case, you either have to wait for a while, or use the [CLI](/tools/cli/README.md#working-groups:updateRoleAccount) tool to change your "role account".
+
+
+## Caddy v1 (deprecated)
+
+These instructions below are for Caddy v1. If you don't already have it installed, it will not work. The instructions are only kept in case you happen to have installed it on your computer/VPS already.
+
+```
+$ curl https://getcaddy.com | bash -s personal
+# Allow caddy access to required ports:
+$ setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy
+$ ulimit -n 8192
+```
+
+Configure caddy with `nano ~/Caddyfile` and paste in the following:
+
+```
+# Storage Node API
+https://<your.cool.url> {
+    proxy / localhost:3000 {
+        transparent
+    }
+    header / {
+        Access-Control-Allow-Origin  *
+        Access-Control-Allow-Methods "GET, PUT, HEAD, OPTIONS"
+    }
+}
+```
+Now you can check if you configured correctly, with:
+```
+$ /usr/local/bin/caddy --validate --conf ~/Caddyfile
+# Which should return:
+Caddyfile is valid
+
+# You can now run caddy with:
+$ (screen) /usr/local/bin/caddy --agree --email <your_mail@some.domain> --conf ~/Caddyfile
+```
+After a short wait, you should see:
+```
+YYYY/MM/DD HH:NN:SS [INFO] [<your.cool.url>] Server responded with a certificate.
+done.
+
+Serving HTTPS on port 443
+https://<your.cool.url>
+
+
+Serving HTTP on port 80
+https://<your.cool.url>
+
+```
+
+### Run caddy as a service
+To ensure high uptime, it's best to set the system up as a `service`.
+
+Example file below:
+
+```
+$ nano /etc/systemd/system/caddy.service
+# Paste in everything below the stapled line
+---
+[Unit]
+Description=Reverse proxy for storage node
+After=network.target
+
+[Service]
+User=root
+WorkingDirectory=/root
+LimitNOFILE=8192
+PIDFile=/var/run/caddy/caddy.pid
+ExecStart=/usr/local/bin/caddy -agree -email <your_mail@some.domain> -pidfile /var/run/caddy/caddy.pid -conf /root/Caddyfile
+Restart=on-failure
+StartLimitInterval=600
+
+
+[Install]
+WantedBy=multi-user.target
+```
+Save and exit. Close `caddy` if it's still running, then:
+```
+$ systemctl start caddy
+# If everything works, you should get an output. Verify with:
+$ systemctl status caddy
+# Which should produce something like:
+---
+● caddy.service - Reverse proxy for storage node
+   Loaded: loaded (/etc/systemd/system/caddy.service; disabled)
+   Active: active (running) since Day YYYY/MM/DD HH:NN:SS UTC; 6s ago
+ Main PID: 9053 (caddy)
+   CGroup: /system.slice/caddy.service
+           9053 /usr/local/bin/caddy -agree email <your_mail@some.domain> -pidfile /var/run/caddy/caddy.pid -conf /root/Caddyfile
+
+Mon DD HH:NN:SS localhost systemd[1]: Started Reverse proxy for hosted apps.
+Mon DD HH:NN:SS localhost caddy[9053]: Activating privacy features... done.
+Mon DD HH:NN:SS localhost caddy[9053]: Serving HTTPS on port 443
+Mon DD HH:NN:SS localhost caddy[9053]: https://<your.cool.url>
+Mon DD HH:NN:SS localhost caddy[9053]: https://<your.cool.url>
+Mon DD HH:NN:SS localhost caddy[9053]: Serving HTTP on port 80
+Mon DD HH:NN:SS localhost caddy[9053]: https://<your.cool.url>
+---
+# To have caddy start automatically at reboot:
+$ systemctl enable caddy
+# If you want to stop caddy, either to edit the file or some other reason:
+$ systemctl stop caddy
+```

File diff suppressed because it is too large
+ 17 - 0
helpdesk/roles/storage-providers/img/storage-provider_new.svg


BIN
helpdesk/roles/storage-providers/img/storage_provider.png


+ 867 - 0
helpdesk/roles/validators/README.md

@@ -0,0 +1,867 @@
+<p align="center"><img src="img/validator_new.svg"></p>
+
+<div align="center">
+  <h4>This is a step-by-step guide for setting up your <a href="https://github.com/Joystream/substrate-node-joystream">full node</a>, and getting started as a Validator on the latest
+  <a href="https://testnet.joystream.org/">Joystream Testnet</a>.<h4>
+</div>
+
+
+
+Table of Contents
+==
+<!-- TOC START min:1 max:3 link:true asterisk:false update:true -->
+- [Overview](#overview)
+- [Instructions](#instructions)
+- [On Your Machine](#on-your-machine)
+  - [Mac](#mac)
+    - [Setup Node](#setup-node)
+    - [Keys](#keys)
+    - [Final Step](#final-step)
+  - [Linux](#linux)
+    - [Setup Node](#setup-node-1)
+    - [Keys](#keys-1)
+    - [Final Step](#final-step-1)
+- [In the Pioneer app (browser)](#in-the-pioneer-app-browser)
+  - [Validator Setup](#validator-setup)
+    - [Generate your keys](#generate-your-keys)
+    - [Configure your validator keys](#configure-your-validator-keys)
+    - [Stop Validating](#stop-validating)
+- [Advanced](#advanced)
+  - [Run as a service](#run-as-a-service)
+    - [Configure the service](#configure-the-service)
+    - [Starting the service](#starting-the-service)
+    - [Errors](#errors)
+  - [Settings](#settings)
+    - [Bonding preferences](#bonding-preferences)
+    - [Validating preferences](#validating-preferences)
+    - [Example](#example)
+  - [Nominating](#nominating)
+    - [Generate your keys](#generate-your-keys-1)
+    - [Configure your keys](#configure-your-keys)
+- [Rewards](#rewards)
+  - [Claiming Rewards](#claiming-rewards)
+    - [Claiming in Bulk](#claiming-in-bulk)
+    - [Claiming one `era` at the Time](#claiming-one-era-at-the-time)
+    - [Check claims made](#check-claims-made)
+  - [Rewards on Joystream](#rewards-on-joystream)
+    - [Dynamic Parameters](#dynamic-parameters)
+    - [Fixed Parameters](#fixed-parameters)
+    - [Validator set and block production](#validator-set-and-block-production)
+    - [Total rewards calculation](#total-rewards-calculation)
+    - [Examples](#examples)
+- [Slashing](#slashing)
+  - [Offline](#offline)
+    - [Offline Example](#offline-example)
+    - [Offline Slashing Size](#offline-slashing-size)
+- [Troubleshooting](#troubleshooting)
+  - [Unstaking](#unstaking)
+    - [In Pioneer](#in-pioneer)
+    - [Using Extrinsics](#using-extrinsics)
+<!-- TOC END -->
+
+
+# Overview
+
+This page contains all information on how to setup your node and become a `Validator` on the Joystream Testnets. It will be updated for improvements, and when something changes for new testnets.
+
+If you want to earn more `tJOY` tokens, but for some reason can't or won't become a `Validator`, you can [`Nominate`](#nominating) instead.
+
+# Instructions
+
+The instructions below cover Mac and Linux (64 bit and armv7). Windows binaries are currently not available.
+
+**Note**
+If you are just running a node, and don't want to be a `Validator`, you can skip the flags
+`--pruning archive` and `--validator`
+
+
+# On Your Machine
+
+---
+
+## Mac
+
+* Every time something is written in `<brackets>`, it means you have to replace this with your input, without the `<>`.
+* When something is written in `"double_quotes"`, it means the number/data will vary depending on your node or the current state of the blockchain.
+* For terminal commands, `$` means you must type what comes afterwards. `#` Means it's just a comment/explanation, and must not be typed.
+```
+# This is just a comment, don't type or paste it in your terminal!
+$ cd ~/
+# Only type/paste the "cd ~/, not the preceding $ !
+```
+### Setup Node
+
+Open the terminal (Applications->Utilities):
+
+```
+$ cd ~/
+$ wget https://github.com/Joystream/joystream/releases/download/v9.3.0/joystream-node-5.1.0-9d9e77751-x86_64-macos.tar.gz
+$ wget https://github.com/Joystream/joystream/releases/download/v9.3.0/joy-testnet-5.json
+----
+# If you don't have wget installed, paste the link in your browser save.
+# Assuming it gets saved in your ~/Downloads folder:
+$ mv ~/Downloads/joystream-node-5.1.0-9d9e77751-x86_64-macos.tar.gz ~/
+---
+$ tar -vxf joystream-node-5.1.0-9d9e77751-x86_64-macos.tar.gz
+$ ./joystream-node --chain joy-testnet-5.json --pruning archive --validator
+```
+- If you want your node to have a non-random identifier, add the flag:
+  - `--name <nodename>`
+- If you want to get a more verbose log output, add the flag:
+  - `--log runtime,txpool,transaction-pool,trace=sync`
+
+Your node should now start syncing with the blockchain. The output should look like this:
+```
+Joystream Node
+  version "Version"-"your_OS"
+  by Joystream, 2019-2020
+Chain specification: "Joystream Version"
+Node name: "nodename"
+Roles: AUTHORITY
+Initializing Genesis block/state (state: "0x…", header-hash: "0x…")
+Loading GRANDPA authority set from genesis on what appears to be first startup.
+Loaded block-time = BabeConfiguration { slot_duration: 6000, epoch_length: 100, c: (1, 4), genesis_authorities: ...
+Creating empty BABE epoch changes on what appears to be first startup.
+Highest known block at #0
+Local node identity is: "peer id"
+Starting BABE Authorship worker
+Discovered new external address for our node: /ip4/"IP"/tcp/30333/p2p/"peer id"
+New epoch 0 launching at block ...
+...
+...
+Syncing, target=#"block_height" ("n" peers), best: #"synced_height" ("hash_of_synced_tip"), finalized #0 ("hash_of_finalized_tip"), ⬇ "download_speed"kiB/s ⬆ "upload_speed"kiB/s
+```
+From the last line, notice `target=#"block_height"` and `best: #"synced_height"`
+When the `target=#block_height`is the same as `best: #"synced_height"`, your node is fully synced!
+
+**Keep the terminal window open.**
+
+### Keys
+
+Now you need to generate your keys. Go [here](#generate-your-keys) to do that now.
+
+### Final Step
+
+Now it's time to configure your keys to start validating. Go [here](#configure-your-validator-keys) to configure your `Validator`.
+
+---
+
+## Linux
+
+* Every time something is written in `<brackets>`, this means you have to replace this with your input, without the `<>`.
+* When something is written in `"double_quotes"`, it means the number/data will vary depending on your node or the current state of the blockchain.
+* For terminal commands:
+  * `$` means you must type what comes afterwards
+  * `#` means it's just a comment/explanation for the readers convenience
+```
+# This is just a comment, don't type or paste it in your terminal!
+$ cd ~/
+# Only type/paste the "cd ~/, not the preceding $ !
+```
+### Setup Node
+
+Open the terminal:
+
+```
+$ cd ~/
+# 64 bit debian based Linux
+$ wget https://github.com/Joystream/joystream/releases/download/v9.3.0/joystream-node-5.1.0-9d9e77751-x86_64-linux-gnu.tar.gz
+$ tar -vxf joystream-node-5.1.0-9d9e77751-x86_64-linux-gnu.tar.gz
+# armv7 (eg. raspberry pi)
+$ wget TBD
+$ tar -vxf TBD
+# For both
+$ wget https://github.com/Joystream/joystream/releases/download/v9.3.0/joy-testnet-5.json
+$ ./joystream-node --chain joy-testnet-5.json --pruning archive --validator
+```
+- If you want your node to have a non-random identifier, add the flag:
+  - `--name <nodename>`
+- If you want to get a more verbose log output, add the flag:
+  - `--log runtime,txpool,transaction-pool,trace=sync`
+
+Your node should now start syncing with the blockchain. The output should look like this:
+```
+Joystream Node
+  version "Version"-"your_OS"
+  by Joystream contributors, 2019-2020
+Chain specification: "Joystream Version"
+Node name: "nodename"
+Roles: AUTHORITY
+Initializing Genesis block/state (state: "0x…", header-hash: "0x…")
+Loading GRANDPA authority set from genesis on what appears to be first startup.
+Loaded block-time = BabeConfiguration { slot_duration: 6000, epoch_length: 100, c: (1, 4), genesis_authorities: ...
+Creating empty BABE epoch changes on what appears to be first startup.
+Highest known block at #0
+Local node identity is: "peer id"
+Starting BABE Authorship worker
+Discovered new external address for our node: /ip4/"IP"/tcp/30333/p2p/"peer id"
+New epoch 0 launching at block ...
+...
+...
+Syncing, target=#"block_height" ("n" peers), best: #"synced_height" ("hash_of_synced_tip"), finalized #0 ("hash_of_finalized_tip"), ⬇ "download_speed"kiB/s ⬆ "upload_speed"kiB/s
+```
+From the last line, notice `target=#"block_height"` and `best: #"synced_height"`
+When the `target=#block_height`is the same as `best: #"synced_height"`, your node is fully synced!
+
+**Keep the terminal window open.**
+
+### Keys
+
+Now you need to generate your keys. Go [here](#generate-your-keys) to do that now.
+
+### Final Step
+
+Now it's time to configure your keys to start validating. Go [here](#configure-your-validator-keys) to configure your `Validator`.
+
+---
+
+# In the Pioneer app (browser)
+
+## Validator Setup
+
+### Generate your keys
+
+While the node is syncing, you can start the process of setting up the rest.
+
+1. Go to the [Pioneer App](https://testnet.joystream.org/), and select `My Keys` in the sidebar. Click the `Add account` button.
+
+Names are entirely optional, but the next steps will be easier if you follow the system suggested.
+
+2. For ease of use, name your first keypair "stash", or at least something that contains the word.
+
+If you want to be able to recover your keys later, write down your mnemonic seed, key pair crypto type and secret derivation path.
+
+3. Depending on your browser, you might have to confirm saving the json file.
+
+4. Repeat the process for your "controller" key.
+
+You should now have two sets of keys, namely:
+- the "stash" key that will stake your funds
+- the "controller" key that you will use to operate your validator
+
+5. If you already have tokens, transfer the bulk to your "stash" account. If you don't yet have any tokens, ask in the [Discord chat](https://discord.gg/DE9UN3YpRP), and you shall receive :)
+
+6. Send at least 1 token to your "controller".
+
+### Configure your validator keys
+
+In order to be a `Validator`, you need to stake. Note that you may have to refresh your browser if you're not seeing the options right away.
+
+**IMPORTANT:** Your node needs to be fully synced, before proceeding to step 7.
+1. In a terminal window on the machine/VPS your node is running, paste the following:
+```
+curl -H "Content-Type: application/json" -d '{"id":1, "jsonrpc":"2.0", "method": "author_rotateKeys", "params":[]}' http://localhost:9933
+```
+If your node is running, this should return:
+```
+{"jsonrpc":"2.0","result":"0xa0very0long0hex0string","id":1}
+```
+
+This will save the session keys to your node. Make sure you don't close the window before copying the `0xa0very0long0hex0string` somewhere.
+
+If your node is not running, is running on a different port, or `curl` is not installed, it will return something like:
+```
+curl: (7) Failed to connect to localhost port 9933: Connection refused
+# or
+{"jsonrpc":"2.0","error":{"code":-32601,"message":"Method not found"},"id":1}
+```
+
+2. Back in [Pioneer](testnet.joystream.org/), click `Validators` in the sidebar, and then the `Account actions` tab.
+3. Click the `+ Stash` button, and select the keys from the first two dropdowns.
+4. In the third field, enter the amount you want to stake (the maximum amount is the tokens in the account -1).
+5. In the bottom dropdown, select the payment destination. Your selection here depends on your [preferences](#bonding-preferences).
+6. If the transaction goes through, you should now see a `Set Session Key` button next to your "stash" and "controller" keys in this window. Click it, paste in your `0xa0very0long0hex0string` in the field, and confirm.
+7. If the transaction goes through, you should now see a `Validate` button instead. IF your node is fully synced click it, and set your `reward commission percentage`, a number between 0 and 100. Your input here depends on your preferences. A "high" number means you are less likely to get [Nominators](#nominating).
+
+Refresh your browser, and select the `Waiting` tab. If your account shows under `intentions`, wait for the next `era`, and you will be moved to the `validators` list (in the `Staking Overview` tab).
+
+### Stop Validating
+Unless you want to risk getting slashed, you need to "gracefully" stop validating.
+This can be done easily in [Pioneer](testnet.joystream.org/)
+1. Click `Validators` in the sidebar, then choose the `Account actions` tab.
+2. Click the "Stop" button to the right, and confirm.
+3. Once you are dropped from the Validator set (can take up to 70min), you can safely stop your node.
+
+# Advanced
+
+## Run as a service
+
+If you are running your node on a [Linux](#linux) and want to run it as a [service](https://wiki.debian.org/systemd/Services), you can set it up this way.
+Note that you should avoid this unless you know what you are doing, are running your node on **your own VPS** or a single board computer. With great (sudo) privileges, comes great responsibilities!
+
+If you are already running as a `validator`, consider [unstaking](#unstaking) first, as you may experience some downtime if you make any mistakes in the setup.
+
+### Configure the service
+
+Either as root, or a user with sudo privileges. If the latter, add `sudo` before commands.
+
+```
+$ cd /etc/systemd/system
+# you can choose whatever name you like, but the name has to end with .service
+$ touch joystream-node.service
+# open the file with your favorite editor (I use nano below)
+$ nano joystream-node.service
+```
+
+#### Example with user joystream
+
+The example below assumes the following:
+- You have setup a user `joystream` to run the node
+- The path to the `joystream-node` binary is `/home/joystream/joystream-node`
+  - This can be confirmed by typing `pwd` in the directory you downloaded the binary to
+
+```
+[Unit]
+Description=Joystream Node
+After=network.target
+
+[Service]
+Type=simple
+User=joystream
+WorkingDirectory=/home/joystream/
+ExecStart=/home/joystream/joystream-node \
+        --chain joy-testnet-5.json \
+        --pruning archive \
+        --validator \
+        --name <memberId-memberHandle> \
+        --log runtime,txpool,transaction-pool,trace=sync
+Restart=on-failure
+RestartSec=3
+LimitNOFILE=10000
+
+[Install]
+WantedBy=multi-user.target
+```
+
+#### Example as root
+
+The example below assumes the following:
+- You have setup a user `root` to run the node
+- The path to the `joystream-node` binary is `/root/joystream-node`
+  - This can be confirmed by typing `pwd` in the directory you downloaded the binary to
+
+```
+[Unit]
+Description=Joystream Node
+After=network.target
+
+[Service]
+Type=simple
+User=root
+WorkingDirectory=/root/
+ExecStart=/root/joystream-node \
+        --chain joy-testnet-5.json \
+        --pruning archive \
+        --validator \
+        --name <memberId-memberHandle> \
+        --log runtime,txpool,transaction-pool,trace=sync
+Restart=on-failure
+RestartSec=3
+LimitNOFILE=10000
+
+[Install]
+WantedBy=multi-user.target
+```
+
+### Starting the service
+
+You can add/remove any `flags` as long as you remember to include `\` for every line but the last. Also note that systemd is very sensitive to syntax, so make sure there are no extra spaces before or after the `\`.
+
+After you are happy with your configuration:
+
+```
+$ systemctl daemon-reload
+# this is only strictly necessary after you changed the .service file after running, but chances are you will need to use it once or twice.
+# if your node is still running, now is the time to kill it.
+$ systemctl start joystream-node
+# if everything is correctly configured, this command will not return anything.
+# To verify it's running:
+$ systemctl status joystream-node
+# this will only show the last few lines. To see the latest 100 entries (and follow as new are added)
+$ journalctl -n 100 -f -u joystream-node
+
+# To make the service start automatically at boot:
+$ systemctl enable joystream-node
+```
+You can restart the service with:
+- `systemctl restart joystream-node`
+
+If you want to change something (or just stop), run:
+- `systemctl stop joystream-node`
+
+Before you make the changes. After changing:
+
+```
+$ systemctl daemon-reload
+$ systemctl start joystream-node
+```
+
+### Errors
+
+If you make a mistake somewhere, `systemctl start joystream-node` will prompt:
+```
+Failed to start joystream-node.service: Unit joystream-node.service is not loaded properly: Invalid argument.
+See system logs and 'systemctl status joystream-node.service' for details.
+```
+Follow the instructions, and see if anything looks wrong. Correct it, then:
+
+```
+$ systemctl daemon-reload
+$ systemctl start joystream-node
+```
+
+## Settings
+
+If you don't want to use the default settings, here are some of the options you can configure.
+
+### Bonding preferences
+The bonding preferences decide on how your (tJOY) staking rewards are distributed. There are three alternatives:
+1. `Stash account (increase the amount at stake)` (default).
+
+This automatically sends all rewards the `stash` address, where it gets bonded as additional stake. This will increase your probability of staying in the `validator` set.
+
+2. `Stash account (do no increase the amount at stake)`
+
+As for 1. this automatically sends all rewards the `stash` address, but does *not* get bonded as stake, meaning it will not help "guard" your spot in the `validator` set.
+
+3. `Controller account`
+
+This sends all rewards to the `controller`, at your disposal.
+
+### Validating preferences
+The `reward commission` determines how the (tJOY) staking rewards are split between yourself and any potential [nominators](#nominating). The default - 0(%) - means that the reward is split based on the number of bonded stake the `validator` and `nominators` have put up. Example:
+
+- Let `v` be the bonded tokens by the validators `stash` key
+- Let `c` be the `reward commission` decided by the validator
+- Let `n1` be the bonded tokens by the nominator1 `stash`
+- Let `n2` be the bonded tokens by the nominator2 `stash`
+- Let `r` be the reward for the individual validators that `era`
+
+```
+# payout for the validator
+c*r + r*(1 - c)*v/(v + n1 + n2)
+# payout for the nominator1
+r(1 - c) * n1/(v + n1 + n2)
+```
+
+### Example
+- assume there are 10 active validators in this era
+- validator 1 bonds 100,000 tJOY
+- validators 2-10 all bond 300,000tJOY
+- validator 1 has `reward commission` set to 10%
+- nominator A bonds 100,000 tJOY, and nominates validator 1
+- nominator B bonds 50,000 tJOY, and nominates validator 1
+- thus, validator A has an effective stake of 250,000 tJOY
+- after the end of the era, the total rewards are 25,000 tJOY
+
+```
+# All validators get an equal share, before sharing with nominators:
+R_v = 25,000tJOY / 10 = 2,500tJOY
+
+# payout for validator 1
+R_v.1 = 0.1 * 2,500tJOY + 2,500tJOY *(1 - 0.1) * (100,000tJOY / 250,000tJOY) = 1,150tJOY
+
+# payout for nominator A
+R_n.A = 2,500tJOY *(1 - 0.1) * (100,000tJOY / 250,000tJOY) = 900tJOY
+
+# payout for nominator B
+R_n.B = 2,500tJOY *(1 - 0.1) * (50,000tJOY / 250,000tJOY) = 450tJOY
+```
+
+As the Validator carries the cost of operating and maintaining their nodes, it makes sense for them to take a slice of the pie before sharing.
+
+## Nominating
+
+If you want to get some return on your tokens without running a node yourself, you can `nominate` another `validator` and get a share of their rewards.
+
+This might also come in handy if there are too many `validators` and you don't have enough tokens get a spot, or if you have to shut down your own node for a while.
+
+### Generate your keys
+
+1. Go to the [Pioneer App](https://testnet.joystream.org/), and select `My keys` in the sidebar. Click the `Add account` button.
+
+Names are entirely optional, but the next steps will be easier if you follow the system suggested.
+
+2. For ease of use, name your first keypair "stash", or at least something that contains the word.
+
+If you want to be able to recover your keys later, write down your mnemonic seed, key pair crypto type and secret derivation path.
+
+3. Depending on your browser, you might have to confirm saving the json file.
+
+4. Repeat the process for your "controller" key.
+
+You should now have two sets of keys, namely:
+- the "stash" key that will stake your funds
+- the "controller" key that you will use to operate your validator
+
+5. If you already have tokens, transfer the bulk to your "stash" account. If you don't yet have any tokens, ask in the [Discord chat](https://discord.gg/DE9UN3YpRP), and you shall receive :)
+
+6. Send at least 1 token to your "controller".
+
+### Configure your keys
+
+In order to be a `Nominator`, you need to stake. Note that you may have to refresh your browser if you're not seeing the options right away.
+
+1. In [Pioneer](testnet.joystream.org/), click `Validators` in the sidebar, and then the `Account actions` tab.
+2. Click the `+ Stash` button, and select the keys from the first two dropdowns.
+3. In the third field, enter the amount you want to stake (the maximum amount is the tokens in the account -1).
+4. In the bottom dropdown, select the payment destination. Your selection here depends on your [preferences](#bonding-preferences).
+5. If the transaction goes through, you should now see a `Nominate` button next to your "stash" and "controller" keys in this window. Click it, and select the "stash" account(s) of the `Validator(s)` you want to `Nominate` for.
+7. Once submitted, you will start earning a share of the rewards.
+
+# Rewards
+Rewards are the most critical part of any blockchain infrastructure, block production, whether it's from [Proof of Work](https://en.wikipedia.org/wiki/Proof_of_work) (using miners, e.g. Bitcoin)  or [Proof of Stake](https://en.wikipedia.org/wiki/Proof_of_stake) (using validators, like Joystream). Validators are rewarded for producing, propagating and securing the network.
+
+## Claiming Rewards
+Rewards are no longer paid out automatically to the validators, and it must be done manually.
+We have made it so you have ~2 weeks to claim your rewards, but after that, they can no longer be claimed.
+
+This was not a voluntary decision from Jsgenesis, but part of the new staking module from [Substrate](https://github.com/paritytech/substrate). The reason is simply that if your validator set is very large and with a lot of nominators (which will be the case for many Substrate based chains), every payout would require a lot of transactions. By instead making it manual, this will be spaced out.
+
+**Note:**
+Claiming rewards for a specific Validator can be done by anyone, not just the Validator themselves. However, only the Validator (and Nominator) can batch up multiple claims in one [bulk](#claiming-in-bulk).
+
+### Claiming in Bulk
+This can only be done if you have the keys for the Validator or Nominator you want to claim for:
+In the UI, Validators can claim rewards in "bulks" of 40 `eras` at the time:
+1. In [Pioneer](testnet.joystream.org/), click `Validators` in the sidebar, and then the `Payouts` tab
+2. Make sure the `Max, x eras` are selected
+3. At the bottom of the page, you will see an overview of:
+  - which `eras` you can claim rewards for
+  - the total amount `available` you are "owed"
+  - the time `remaining` to claim (your "oldest") reward
+4. Click the `Payout` button at the right end of the row, and confirm to claim the "oldest" 40 `era` rewards for you, and any potential [Nominators](#nominating) that has claim to some of your rewards
+5. If you have more than 40 `eras`, you can repeat this after the first transaction is complete
+
+**Note:**
+- If a Validator had any Nominator(s) in the `eras` for which they claim rewards, the Nominator(s) will automatically get their rewards for said `eras`
+- A Nominator that claims rewards for multiple `eras`, the Validator(s) they nominated in said `eras` will automatically also get their rewards.
+
+### Claiming one `era` at the Time
+This can be done by *any* account:
+1. Go to the [extrinsics](https://testnet.joystream.org/#/extrinsics) tab
+2. Select `staking.payoutStakers(validator_stash, era)`
+3. Select/paste the address of the `stash` account you want to claim on behalf of/for
+4. Type in the `era` you want to claim for, and submit
+
+### Check claims made
+To find out if a "stash" claimed reward(s) from `era(s)`:
+- [chain state](https://testnet.joystream.org/#/chainstate) query of `ledger(AccountId): Option<StakingLedger>` with the *any* current, or "historic" controller. Output:
+```
+{
+  stash: 5YourStashAddress,
+  total: <tot_bonded> JOY,
+  active: <act_bonded> JOY,
+  unlocking: [],
+  claimedRewards: [
+    <era_a>,
+    <era_b>,
+    ...
+    <era_i>,
+  ]
+}
+```
+**Note:**
+To understand what `unlocking` means, go [here](#using-extrinsics).
+
+## Rewards on Joystream
+For Substrate based blockchains, the validator rewards depend on some [dynamic parameters](#dynamic-parameters), that will change continuously, and some [fixed parameters](#fixed-parameters) in the chain spec.
+
+### Dynamic Parameters
+1. Active validators (`V_a`) - the number of `validators` currently running. This can be found:
+  - in the [Validators](https://testnet.joystream.org/#/staking) tab -> validator (**`V_a`** / `V_i`)
+  - or through a [chain state](https://testnet.joystream.org/#/chainstate) query of `session.validators()` (and count them)
+2. Max/Ideal validators `V_i` - the max number of active validators. This number can be changed through proposals, but was initially set to 20. Current value can be found:
+  - in the [Validators](https://testnet.joystream.org/#/staking) tab -> validator (`V_a` / **`V_i`**)
+  - or through a [chain state](https://testnet.joystream.org/#/chainstate) query of `staking.validatorCount()`
+3. Issuance `I` - total tJOY tokens in circulation. This can be found:
+  - in the [explorer](https://testnet.joystream.org/#/explorer) tab
+  - or through a [chain state](https://testnet.joystream.org/#/chainstate) query of `balances.totalIssuance()`
+4. Validator stake (`S_v`) - i.e. the total stake of the `validators` set, corresponding to the sum of the stakes of each `validator`, plus the stake of their [nominators](#nominating) if any. This can be found:
+  - in the [staking](https://testnet.joystream.org/#/staking/targets) tab (alongside `I`, and the percentage of `S_v / I` - also known as the Active staking ratio, `S_v,ar`, see 5.)
+  - or through a [chain state](https://testnet.joystream.org/#/chainstate) query of `staking.erasTotalStake(<EraIndex>)`
+    - the `<EraIndex>` can be found by `staking.activeEra()`
+5. Active staking ratio, `S_v,ar` - the current ratio of tokens staked by active validators (and their nominators) and the issuance. So `S_v,ar = S_v / I`
+
+### Fixed Parameters
+6. Minimum inflation, `I_min` - the min yearly inflation distributed to validators.
+  - This number is currently set to `5%`.
+7. Maximum inflation, `I_max` - the max yearly inflation distributed to validators.
+  - This number is currently set to `75%`.
+8. Ideal staking ratio, `S_v,ir` - the ideal ratio of effective stake over issuance for maximum validator rewards.
+  - This number is currently set to `30%`.
+9. Falloff, `F_v` - how quickly the validator rewards drop when the actual staking rate `S_v,ar` exceeds the ideal staking rate `S_v,ir`.
+  - This number is currently set to `5%`.
+10. Sessions, `session_l` - each `session` (or `epoch`) should last ~10 minutes / 100 blocks `*`
+11. Era length, `era_l` - each `era` lasts 60 minutes should last 6 `sessions` -> ~60 minutes / 600 blocks `*`
+
+- `*` For a variety of reasons (such as latency, validators going down, etc.) an `era` can be as little as 1 `session` and a `session` can be a lot fewer blocks than 100.
+
+### Validator set and block production
+At the end of each era, a new set of active validators `V_a` is determined by sorting all those that have declared their intention (e.g. both the active and next up) by their stake, and selecting up to `V_i` in a descending order.
+
+Those selected are treated as equals, and will have the same chance of being selected to produce blocks and thus get an equal share of the rewards. Slashes however, are applied as a percentage of stake, so a validator with more stake risks getting slashed more despite earning the same.
+
+### Total rewards calculation
+As shown, the maximum total validator reward per year is 75% for `S_v,ar = S_v,ir = 0.3`. With an era length of 600 blocks, each era, the maximum total, `R_vm,te` and individual, `R_vm,ie` reward for the validators are:
+
+**Note**
+For all calculations, we assume there are (365.2425×24×60×60s)/year.
+
+```
+R_vm,te = I * I_max * era_l / year
+= I * 0.75 * 3600s / (31556952s)
+= 0.0000855596*I
+
+R_vm,ie = R_vm,te / V_a
+= 0.0000342238*I/V_a
+```
+
+For `S_v,ar<S_v,ir`, the total rewards drop linearly down to the minimum inflation rate `I_min` for `S_v,ar = 0`
+For `S_v,ar>S_v,ir`, the total rewards drop exponentially down to the minimum inflation rate for `I_min` `S_v,ar = 1` .
+
+The exact formula:
+```
+R_v,te = I * (I_min + (I_max - I_min) * 2^((S_v,ir − S_v,ar) / F_v)) * era_l / year
+```
+
+### Examples
+
+The tJOY rewards for the validators can be calculated using this [spreadsheet](https://docs.google.com/spreadsheets/d/13Bf7VQ7-W4CEdTQ5LQQWWC7ef3qDU4qRKbnsYtgibGU/edit?usp=sharing). The examples below should assist in using it:
+
+#### Example A
+In addition to the fixed parameters above (except `S_v,ir` = `25%`), suppose:
+```
+V_a = 20
+I = 100,000,000tJOY
+S_v = 25,000,000tJOY
+```
+
+As `S_v / I = 0.3`, meaning `S_v,ar = S_v,ir` the maximum yearly inflation rate `I_max = 75%` will be shared among the validators. Each era, the total, `R_v,te` and individual, `R_v,ie` reward for the validators are:
+
+----
+```
+R_v,te = I * I_max * era / year
+= 100,000,000tJOY * 0.75 * 3600s / (31556952s)
+= 8,556tJOY
+
+R_v,ie = R_v,te / V_a
+= 8,556tJOY / 20
+= 428tJOY
+```
+
+#### Example B
+In addition to the fixed parameters above, suppose:
+```
+V_a = 20
+I = 100,000,000tJOY
+S_v = 20,000,000tJOY
+```
+
+With `S_v / I = 0.2`. Each era, the total, `R_v,te` and individual, `R_v,ie` reward for the validators are:
+
+```
+R_v,te = I * (I_min + (I_max - I_min) * S_v,ar / S_v,ir) * era_i / year
+= 6,959tJOY
+
+R_v,ie = R_v,te / V_a
+= 6,959tJOY / 20
+= 348tJOY
+```
+
+#### Example C
+In addition to the fixed parameters above, suppose:
+```
+V_a = 20
+I = 100,000,000tJOY
+S_v = 30,000,000tJOY
+```
+
+With `S_v,t=S_v,eff/I=0.3`. Each era, the total, `R_v,te` and individual, `R_v,ie` reward for the validators are:
+
+```
+R_v,te = I * (I_min + (I_max - I_min) * 2^((S_v,ir − S_v,ar) / F_v)) * era_l / year
+= 4,563tJOY
+
+R_v,ie = R_v,te / V_a
+= 4,563tJOY / 20
+= 228tJOY
+```
+#### Example conclusion
+As seen above, the difference from staking 5% more or less than the ideal, is quite substantial.
+
+- By staking 5% less, the "loss" is only 18% (6,959tJOY vs 8,556tJOY)
+- By staking 5% more, the "loss" is instead 47% (4,563tJOY vs 8,556tJOY)
+
+More information on the staking, rewards and slashing mechanics can be found on the Web3 Foundation's research papers [here](https://research.web3.foundation/en/latest/polkadot/economics/1-token-economics.html).
+
+# Slashing
+Just as the Validators are rewarded for producing, propagating and securing the network, they are punished for misbehaving. The slashing mechanics are more complex, so it will not be covered as detailed as the [rewards](#rewards).
+
+Although there are other reasons for getting slashed as a Validator, the reasons that stem from intentional malicious behavior will not be covered here. If you want to learn more about the details of slashing, visit this guide from the [Polkadot](https://github.com/paritytech/polkadot) wiki guide on [slashing (and staking)](https://wiki.polkadot.network/docs/en/learn-staking#slashing).
+
+## Offline
+The most likely reason a Validator will get slashed is for going offline without first [stopping](#stop-validating) gracefully.
+
+If `n` Validators go offline, there will be two "events" at the end of that `session`:
+1. `imOnline:SomeOffline`
+2. `offences.Offence`
+
+### Offline Example
+Suppose we have two Validators offline, - `v_0` and `v_1`. `v_1` has one nominator `n_1` (all `accountId`/address of their "stash").
+When selecting the block the event occurred in from the [explorer](https://testnet.joystream.org/#/explorer), it will appear like so:
+
+**1** `imOnline:SomeOffline`:
+```
+At the end of the session, at least one validator was found to be offline.
+  Vec<IdentificationTuple>
+
+    0: IdentificationTuple: IdentificationTuple
+    [
+      <v_0>,
+      {
+        total: <v_0 stake> JOY,
+        own: <v_0 stake> JOY,
+        others: []
+      }
+    ]
+
+    1: IdentificationTuple: IdentificationTuple
+    [
+      <v_1>,
+      {
+        total: <v_1+n_1 stake> JOY,
+        own: <v_1> JOY,
+        others: [
+          {
+            who: <n_1>,
+            value: <n_1 stake> JOY,
+          }
+        ]
+      }
+    ]
+```
+This identifies which valididators are reported "offline".
+
+
+**2** `offences.Offence`:
+```
+There is an offence reported of the given `kind` happened at the `session_index` and (kind-specific) time slot. This event is not deposited for duplicate slashes. Last element indicates of the offence was applied (true) or queued (false).
+
+  Kind
+  im-online:offlin
+
+  OpaqueTimeSlot
+  0xsomething
+
+  bool
+  <Yes> or <No>
+```
+The key here is whether `bool` is `Yes` (`true`) or `No` (`false`).
+- If `Yes/true`, this means a slash will be applied.
+- If `No/false`, this means no slash will be applied.
+
+### Offline Slashing Size
+The magnitude of the slash (and whether one will be applied at all), depends on the max number of Validator slots allowed (`V_max`), and the number of Validators reported offline `V_off`.
+- If `V_off / V_max` < 1/10
+  - No slash will be applied
+- If `V_off / V_max` > 1/3
+  - A max slash of 7% is initiated `*`
+
+The exact formula, from the comment in the codebase, is presented below (with variables changed for clarity):
+```
+		// the formula is min((3 * (V_off - (V_max / 10 + 1))) / V_max, 1) * 0.07
+		// basically, 10% can be offline with no slash, but after that, it linearly climbs up to 7%
+		// when 13/30 are offline (around 5% when 1/3 are offline).
+```
+
+`*` A single `Offence` adds an entry to the Validators `slash span`. The actual slashing (burning) of tokens will happen ~24h hours later. For more info, we again refer to the [Polkadot Wiki](https://wiki.polkadot.network/docs/en/learn-staking#slashing-across-eras)
+
+---
+
+# Troubleshooting
+If you had any issues setting it up, you may find your answer here!
+
+## Unstaking
+Due to an unfortunate error in Pioneer which we are working to fix, unstaking requires either lots of patience, or using the chain state/extrinsics tab for certain tasks.
+
+### In Pioneer
+
+If you stop validating by killing your node before unstaking, you will get slashed and kicked from the `Validator` set. If you know in advance (it can take up to 70min) you can do the following steps instead:
+
+1. In `Validator -> Account Actions`, click `Stop`.
+
+If you are just pausing the `validator` and intend to start it up later, you can stop here. When you are ready to start again, fire up your node, go to `Validator Staking`, and click `Validate`.
+
+If you want to stop being a `validator` and move your tokens to other/better use, continue.
+
+---
+
+2. Next you must unbond. In the same window (`Validator -> Account Actions`), next to your keypair, click the rightmost triple dotted "settings" button, select `Unbond funds`, and choose the amount you wish to unbond.
+
+After the transaction has gone through, you will see a new line appearing in the `bonded` column, showing the amount and a "clock" icon. Hovering over this with your cursor will tell you when your unbonding is complete (starts at <24h / <14,400 blocks), and you can go to the third and final step.
+
+3. Within 24h, the tokens should be unbonded, and you will see a new line appearing in the `bonded` column, showing the amount you can claim and a blue "lock" button. Click the button to finalize the unbonding, and your tokens will be "free" to spend from your "stash".
+
+**Notes:**
+- If you have performed multiple unbondings, in different `eras`:
+  - hovering over the "clock" will show multiple entries, e.g. `<amount>, <time_left>, <block_left>`
+  - you may also have both the "clock" and "lock" button, if some of your unbondings are completed
+  - if you have any pending [slashes](#slashing), these will be deducted when you perform step 3.
+
+
+### Using Extrinsics
+
+First, make sure you have set `Fully Featured` interface in the `Settings` sidebar.
+
+#### Definitions
+- `<tot_bonded>` Is the total amount you have staked/bonded
+- `<act_bonded>` Is the number of tokens that is not being unlocked
+- `<unbonding_n>` Is the number of tokens that is in the process of being freed from your `n`th `Unbond funds` request  
+  - `sum <unbonding_n>` + `<act_bonded>` = `<tot_bonded>`
+- `<era_unbonded_n>` Is the `era` when your `n`th `Unbond funds` request tokens will be "free" to transfer/bond/vote
+
+To find out if you have started/completed your `n` unbonding(s):
+1. [chain state](https://testnet.joystream.org/#/chainstate) query of `ledger(AccountId): Option<StakingLedger>` with the controller. Output:
+```
+# If you have successfully initiated unbonding, but the tokens are not unlocked:
+{
+  stash: 5YourStashAddress,
+  total: <tot_bonded> JOY,
+  active: <act_bonded> JOY,
+  unlocking: [
+    {
+      value: <unbonding_0> JOY,
+      era: <era_unbonded_0>
+    },
+    {
+      value: <unbonding_1> JOY,
+      era: <era_unbonded_1>
+    },
+    ...
+    {
+      value: <unbonding_n> JOY,
+      era: <era_unbonded_n>
+    }
+  ],
+  claimedRewards: [
+    <era_a>,
+    <era_b>,
+    ...
+    <era_i>,
+  ]
+}
+```
+**Note:**
+To understand what `claimedRewards` means, go [here](#check-claims-made).
+
+
+2. The `era` should only change every 600 blocks, but certain events may trigger a new era. To calculate when your funds are "free" In `Chain State` -> `staking.currentEra()`. Let output be `<era_current>`
+
+If `<era_unbonded_n>` >= `<era_current_n>`, you can claim the unbonded funds in step 3.
+
+3. Once the unbonding is complete, go to [extrinsics](https://testnet.joystream.org/#/extrinsics), with the `controller`, select `staking.withdrawUnbonded(num_slashing_spans)`
+
+**Note:** If you have any "pending" slashes, this will require some more [chain state](https://testnet.joystream.org/#/chainstate) queries, to find the input `num_slashing_spans`.
+
+Your tokens will be "free" to spend from your "stash".

BIN
helpdesk/roles/validators/img/validator.png


File diff suppressed because it is too large
+ 17 - 0
helpdesk/roles/validators/img/validator_new.svg


+ 17 - 0
helpdesk/testnets/README.md

@@ -0,0 +1,17 @@
+Testnets
+==
+
+Table of Contents
+---
+<!-- TOC START min:1 max:3 link:true asterisk:false update:true -->
+  - [Current Testnet](#current-testnet)
+  - [Past Testnets](#past-testnets)
+<!-- TOC END -->
+
+## Current Testnet
+- [Sumer](/testnets/sumer)
+
+## Past Testnets
+- [Constantinople](/testnets/constantinople)
+- [Alexandria](/testnets/alexandria)
+- [Antioch](/testnets/antioch)

+ 30 - 0
helpdesk/testnets/alexandria/README.md

@@ -0,0 +1,30 @@
+# Launch of Alexandria
+
+Alexandria was launched as a new chain on the 21st of September 2020, effectively deprecating [Constantinople](/testnets/constantinople).
+
+## Migration
+A lot of the state and "history" was migrated from Constantinople:
+- All memberships
+- Most balances`*`:
+  - all those associated with a membership `root` or `controller`
+  - all tokens staked for [Council Members](/roles/council-members) and their voters, but as "free" balance
+  - all tokens staked for (as "free" balance), and the balance of the "role" key of, active [Content Curators](/roles/content-curators) and [Storage Providers](/roles/storage-providers)
+  - all tokens staked in [Proposals](/proposals)
+  - all tokens staked for [Validators and Nominators](/roles/validators), although slashed tokens were deducted
+- The [Forum](/README.md#on-chain-forum)
+- Old [Proposals](/proposals) history and discussions, although only "viewable" in [Pioneer](https://testnet.joystream.org/#/proposals/historical)
+- All Channels and content
+- The [Fiat Pool](/tokenomics/README.md#fiat-pool)
+
+
+`*`
+- The `Total Issuance` at the snapshot was: 154289593 tJOY
+- The `Total Exported Issuance` was: 140539804 tJOY
+- "Lost" tokens: 13749789 tJOY
+
+If some of your tokens were "lost" in the transfer, you can "claim" these until the end of September 2020.
+
+## Changes
+After the upgrade, all roles, e.g. `Validators`, `Storage Providers`, `Council Members` and `Curators` were fired from their position.
+
+In addition, the old KPI scheme was replaced by [Council KPIs](/tokenomics/README.md#council-kpis) and [Community Bounties](/tokenomics/README.md#community-bounties).

+ 30 - 0
helpdesk/testnets/antioch/README.md

@@ -0,0 +1,30 @@
+# Launch of Antioch
+
+Antioch was launched as a new chain on the 7th of April 2021, after a chain split bug resulted in the "fall" of [Babylon](/testnets/babylon) (broken link).
+
+## Migration
+A lot of the state and "history" was migrated from Babylon:
+- All memberships (as of block #2718912)
+- Most balances`*` (as of block #2528244):
+  - all those associated with a membership `root` or `controller`
+  - all tokens staked for [Council Members](/roles/council-members) and their voters, but as "free" balance
+  - all tokens staked for (as "free" balance), and the balance of the "role" key of, active [Content Curators](/roles/content-curators) and [Storage Providers](/roles/storage-provider)
+  - all tokens staked in [Proposals](/proposals)
+  - all tokens staked for [Validators and Nominators](/roles/validators), although slashed tokens was deducted
+  - all accounts that had been used for balance transfers (sent or received) after block #1292266
+- The [Forum](/README.md#on-chain-forum) (as of block #2718912)
+- Old [Proposals](/proposals) history and discussions, although only in "viewable" in [Pioneer](https://testnet.joystream.org/#/proposals/historical)
+- The [Fiat Pool](/tokenomics/README.md#fiat-pool)
+
+
+`*`
+- The `Total Issuance` at the snapshot was: 442442844 tJOY
+- The `Total Exported Issuance` was: 440615492 tJOY
+- "Lost" tokens: 1827352 tJOY ~ 0.41%
+
+If some of your tokens were "lost" in the transfer, you can "claim" these until the end of April 2021.
+
+## Changes
+After the upgrade, all roles, e.g. `Validators`, `Storage Providers` and `Curators` were fired from their position. The Council that was elected prior to the chain split was set by `sudo` for the first term.
+
+Some parameter changes were made, mostly related to the Council Election.

+ 32 - 0
helpdesk/testnets/constantinople/README.md

@@ -0,0 +1,32 @@
+## Launch
+
+After the upgrade, all current roles, i.e. `Storage Providers`, `Council Members` and `Curators` will be fired from their position.
+
+-   A new set of initial role parameters will be set by Jsgenesis
+-   A new, initial council will be set by Jsgenesis
+
+The new supply will be set to fixed number of tJOY - 100,000,000 (100 million)
+
+-   These will be created out of thin air.
+-   A total of 50% of the token supply will be distributed to existing members, and community members that had signed up for our newsletter, and claimed tokens.
+-   Testnet tokens currently in circulation will not be touched (although members will see an influx).
+
+An initial fiat pool of USD 2500 will be reserved
+
+-   This means every tJOY is worth 0.025 cent at launch.
+-   Users can, after a grace period of 5 days, exchange their tJOY for USD at their convenience.
+-   Exchanging tokens will be burned immediately, thus decreasing the supply, and not affecting the exchange rate.
+-   The status of the network economics, instructions for how to, and tracking of, exchanges can be monitored at the new [testnet page](https://www.joystream.org/testnet).
+
+## Going Forward
+
+As all positions and roles on the network are paid in new tJOY minted, the supply will increase all else being equal. As this effectively decreases the value of each tJOY over time, all token holders will have an interest in not increasing the number of tokens more than "necessary". However, the network is designed to facilitate multiple ways for users to increase the value of their tokens.
+
+-   A weekly, pre-determined replenishment of tokens will be added to the fiat pool, independent of the supply.
+-   This will, for the first week, be USD 250.
+-   A weekly set of [KPIs](https://en.wikipedia.org/wiki/Performance_indicator), decided by Jsgenesis, will be assigned a dollar value.
+-   If one or more of these KPIs are reached, the fiat pool will be increased, effectively increasing the value of each token.
+-   As all roles will be compensated in tJOY, community members can choose to stake their tokens to get one or more of these roles.
+-   As the roles require a variety of resources, such as technical skills, hardware, time, etc. depending on your preference, you can grow your tokens faster than the inflation.
+
+With the new proposal system, users can propose changing parameters that the council will then vote on. As it will be in everyone's interest to spend as few tokens as possible to achieve as many of the KPIs possible, the council will try to maximize the efficiency, both to increase their token value, and to get re-elected for the role.

+ 20 - 0
helpdesk/testnets/sumer/README.md

@@ -0,0 +1,20 @@
+# Launch of Sumer
+
+Sumer was launched via a runtime upgrade on the 27th of May 2021, replacing the previous testnet, [Antioch](/testnets/antioch).
+
+## Migration
+Most of the state and "history" was migrated from Constantinople as part of the runtime upgrade:
+- All memberships
+- All balances
+- The [Forum](/README.md#on-chain-forum)
+- [Proposals](/proposals) history and discussions, although only in "viewable" in [Pioneer](https://testnet.joystream.org/#/proposals/historical)
+- The [Fiat Pool](/tokenomics/README.md#fiat-pool)
+- Roles were preserved (i.e. people with roles retained these, even though some software upgrades may have been required, depending on the role)
+
+Channels and media content were not migrated due to the new content directory not supporting these.
+
+## Changes
+
+Content uploads are now possible through the Joystream Studio interface rather than through the clunky CLI-dependent flow.
+The main "structural" change was the introduction of the builder/operations working group.
+Storage Providers needed to update their software, and the CLI tool also needed to be updated to work properly.

+ 222 - 0
helpdesk/tokenomics/README.md

@@ -0,0 +1,222 @@
+Overview
+===
+
+This page will explain the token economics ("tokenomics") of the Joystream testnets, and how this applies to the individual actors, and platform as a whole.
+
+Table of Contents
+---
+<!-- TOC START min:1 max:3 link:true asterisk:false update:true -->
+- [Tokenomics](#tokenomics)
+  - [Token Issuance](#token-issuance)
+    - [Inflationary Forces](#inflationary-forces)
+    - [Deflationary Forces](#deflationary-forces)
+  - [Fiat Pool](#fiat-pool)
+    - [Regular Replenishments](#regular-replenishments)
+  - [KPIs and Bounties](#kpis-and-bounties)
+    - [Council KPIs](#council-kpis)
+    - [Community Bounties](#community-bounties)
+  - [Tokenomics Examples](#tokenomics-examples)
+    - [Example A](#example-a)
+    - [Example B](#example-b)
+<!-- TOC END -->
+
+# Tokenomics
+At launch of a new testnet, the token (tJOY) issuance will be set/calculated, and an initial USD denominated fiat pool will be created to back it. The key concept is outlined below:
+
+- All roles will be rewarded directly in tJOY
+- tJOY will be backed by a USD fiat pool and redeemable via Bitcoin Cash at the convenience of participants
+- This means that tJOY - only needed for staking and fees on the previous testnet - will now function more like the mainnet token
+- The exchange rate will simply be amount of tokens issued divided by the size of the fiat pool
+- When a user exchanges their tJOY for USD, the tokens will be burned immediately, thus **not affecting the exchange rate**
+- New tokens rewards are minted to pay for the various roles on the network
+- The fiat pool will be topped up regularly for every new Council Term, without minting new tokens, effectively increasing the exchange rate (all else being equal)
+- For every new Council term, Jsgenesis will create [Council KPIs](#council-kpis), each assigned a USD value. If the goals are achieved, Jsgenesis will reward the Council without affecting the exchange rate
+- Jsgenesis will also create [Community Bounties](#community-bounties), similar to bounties, but managed by the Council. These are also assigned a USD value, and if achieved, Jsgenesis will (indirectly) reward the individual or group that achieved the goals.
+
+Examples of the system through the eyes of a user can be found [here](#tokenomics-examples). In order for community members to get a grasp of the tokenomics, a [spreadsheet](https://docs.google.com/spreadsheets/d/13Bf7VQ7-W4CEdTQ5LQQWWC7ef3qDU4qRKbnsYtgibGU/edit?usp=sharing) has been made.
+
+
+## Token Issuance
+
+The issuance of new tJOY will in practice be a cost incurred for all holders of tJOY, both passive and active (with the exception of tokens minted for [KPIs](#kpis) achieved). Because of this, it is in the interest of all holders to ensure the platform's resources are well managed, and keep tabs on the [Council Members'](../roles/council-members) spending.
+
+Jsgenesis will try to mimic the market forces of supply and demand, by rewarding good behavior through [KPIs](#kpis), to ensure participants have incentives to keep the platform and associated infrastructure running.
+
+### Inflationary Forces
+There are many inflationary forces in the network, but not all of them will impact the exchange rate. The main ones are recurring rewards, and other costs associated with achieving KPIs.
+
+- Recurring rewards, currently paid to:
+  - [Council Members](/roles/council-members) for running and managing the platform's day to day operations
+  - [Storage Providers](/roles/storage-providers) for receiving, storing and serving content files
+  - [Content Curators](/roles/content-curators) for monitoring and curating content and channels
+- Automatic rewards, to [Validators](/roles/validators) and [Nominators](/roles/validators/README.md#nominating) are minted as rewards for finding blocks, and keeping the network up and running
+- [Spending Proposals](/proposals/README.md#spending) that are "approved" and executed
+
+Tokens will also be minted for other purposes, such as faucets, competitions, [KPIs](#kpis), etc. Unlike the costs listed above however, these will under normal circumstances be offset by an equivalent increase of [Fiat Pool](#fiat-pool).
+
+If the system is changed, some of these can impact the exchange rate in the future, but users will be warned in advance.
+
+### Deflationary Forces
+Tokens are slashed and/or burned for a variety of reasons, thus reducing supply and increasing the exchange rate.
+
+- Transactions (aka "extrinsics") fees, are burned
+  - Extrinsics are now in most cases free, but
+  - Users may need/choose to set a higher fee for transaction priority
+  - Users, or Jsgenesis, may set high fees to intentionally burn tokens
+- Creating [Proposals](/proposals) requires the creator to put up [Stake](/proposals/README.md#stake) (the size depends on the perceived "severity" of the Proposal type). Unless the Proposal gets [Approved](/proposals/README.md#approved), the full amount will not be returned to the "creator":
+  - A [Slashed Proposal](/proposals/README.md#slashed) means slashing and burning the entire Stake of the "creator"
+  - A [Cancelled Proposal](/proposals/README.md#slashed) means a fixed amount of the Stake is burned
+  - A [Rejected Proposal](/proposals/README.md#rejected) means a smaller, fixed amount of the Stake is slashed and burned
+  - An [Expired Proposal](/proposals/README.md#expired) counts as "rejected"
+- Slashing Staked [workers](/roles). The mechanism of these slashes depends on the role, but in all cases, the tokens are burned.
+  - [Validators](/roles/validators) (and their [Nominators](/roles/validators/README.md#nominating)) get slashed automatically by the chain if they go offline, or respond too slowly, without first stopping.
+  - [Storage Providers](/roles/storage-providers) can get their stakes slashed by their Lead.
+  - The [Storage Lead](/roles/storage-lead) can get their stakes slashed by the Council through a [Proposal](/proposals/README.md#slash-working-group-leader-stake).
+  - [Content Curators](/roles/content-curators) can get their stakes slashed by their Lead.
+
+
+When an exchange takes place, the tokens are also burned, but this will have no impact on the exchange rate as the fiat pool will decrease proportionally.
+
+## Fiat Pool
+The fiat pool, denominated in USD, will start at a set value, but will change continuously.
+
+### Regular Replenishments
+For each Council Term (currently 1 week), an amount of USD will be added to the fiat pool as recurring replenishment, thus increasing the value of each token, if one were to assume the issuance would stay constant.
+
+## KPIs and Bounties
+Jsgenesis will regularly release new Key Performance Indicators ("KPIs") and Bounties as a way to incentivize the community and its participants to perform certain actions, maintain network functionality, produce reports, assets, code or other deliverables, etc.
+
+The KPI scheme has evolved over time, and further changes in the future should be expected.
+
+Currently, we separate these as two different types, [Council KPIs](#council-kpis) and [Community Bounties](#community-bounties), each with a distinct structure, frequency, scope, and reward mechanism.
+
+### Council KPIs
+For each new Council elected, a fresh set of Council KPIs are published by Jsgenesis. These KPIs will mainly serve to incentivize the Council Members to manage the platform, pay attention to the Tokenomics, monitor the network and respond to proposals and other requests.
+
+Each individual KPI in the set will:
+- contain some defined tasks or conditions for the Council to address or deliver
+- have a specific maximum reward assigned to it (in USD)
+- (usually) last during the entire Term of the Council
+- be graded (individually) a few days after the end of said Term
+
+The sum of the rewards earned will be given directly to the individual Council Members and those that voted for them, without affecting the overall exchange rate, by topping up the [Fiat Pool](#fiat-pool) and minting new tokens.
+
+As the Council KPIs mainly apply to prospective Council Members, the full details can be found under their role section [here](/roles/council-members/README.md#council-kpis).
+
+### Community Bounties
+The (Community) Bounties are meant to replace the "old" bounty system previously used by Jsgenesis. In discussions with the community, these have been referred to as "Community KPIs", but we've chosen to use the term Bounties to properly distinguish them.
+
+Jsgenesis will publish these in a format similar to that of a [Council KPI](#council-kpis), but with some key differences:
+- They will not be published at the same regular and predictable intervals
+- They will not necessarily have deadlines
+- Jsgenesis will rarely get involved in managing or assigning them
+
+The last part is key, as the Council will act as Project Managers, and serve as a bridge between Jsgenesis and the individual or group working on them.
+
+#### Types of Tasks
+The tasks associated with these Community Bounties will ideally try to solve some problem either for the community or Jsgenesis, but in some cases, their main purpose will be to create some fun and/or attract new members to the community.
+
+Over time, the tasks should allow people with different skillsets and interests to participate. Most challenges will be easier if you have some technical or creative skills, but in other situations it will simply require putting in some time and effort:
+- Coding
+  - Discord/Telegram bots
+  - Scripts
+  - Enhance the UI
+  - Improve infrastructure
+- Writing
+  - Documentation
+  - Marketing material
+  - Explainers
+  - Translations
+- Creative
+  - Videos
+  - Artwork
+  - Gifs
+  - Memes
+- Research, testing and sourcing
+  - Source/upload freely licensed media
+  - Testing and benchmarking tools
+  - Research interesting projects
+  - Tokenomics research
+- Reviewing
+  - All of the above
+
+More details about Community Bounties can be found [here](/roles/builders).
+
+
+## Tokenomics Examples
+
+A rational user will continuously consider their options, and try to maximize their profits based on a variety of inputs such as:
+- tJOY holdings
+- the tJOY costs and returns associated with the available roles
+- the USD costs of hardware, electricity and their time
+- opportunity costs
+- exchange rate changes from
+  - tJOY issuance change
+    - recurring role rewards
+    - fees
+    - slashes and tJOY burns
+    - `Council` spending
+  - fiat pool inflows and outflows
+    - replenishment of fiat pool
+    - KPIs achieved leading to an increased fiat pool
+
+### Example A
+
+Suppose there is `10,000 tJOY` in circulation, and `USD 1,000` represents the initial fiat pool. This means that the exchange rate is `0.1 tJOY/USD`.
+
+A user has `1,500 tJOY`, and after weighing their options and calculating the rate, they decide to cash in `500 tJOY`. They go to [the incentives page](https://www.joystream.org/testnet), verify the exchange rate, and follow the instructions on how to cash in. After submitting and signing the transaction, a new pending exchange is displayed at the bottom of said [page](https://www.joystream.org/testnet):
+
+The Joystream transaction locks in the USD value of the exchange. At regular intervals, all pending transactions will be paid out in Bitcoin Cash, with the prevailing BCH/USD rate at the time of payout.
+
+All else being equal, this will reduce the tJOY issuance from `10,000 to 9,500`, and the USD fiat pool from `1,000 to 950`. The exchange rate will therefore not be changed, and there is no incentive to start a run on the bank.
+
+Furthermore, suppose the user, after considering their skillset and rate of return, decided that the best option for them was to stake their remaining `1,000 tJOY` for the role of `Storage Provider`, and assume further that the payout for this role was `2 tJOY per 3600 blocks` (6 hours).
+
+Assuming again all else being equal, i.e. the only token inflation on the network was the payout for *this* user, the payout stays the same, and our user performs their job satisfactory, they can expect to cash in `560 tJOY` every week. After the first week, the total issuance is now `10,060 tJOY`, and the fiat pool is now `$950 USD`. The user cash out their `560 tJOY`, and with a rate of `~0.094 tJOY/USD`, will receive `$52.9 USD` for their job.
+
+If the user had instead chosen to exchange all their `1,500tJOY` in the first place, they would have locked in a value of `$150 USD`. Their actual choice however, resulted in having cashed in a total of `$102.9 USD`, with another `1,000` tJOY worth `$94.4 USD` at the prevailing rates, for a total of `$197.3 USD`.
+
+In practice, the system will be far more complex than what is outlined above. For more precise calculations, please use [the spreadsheet](https://docs.google.com/spreadsheets/d/13Bf7VQ7-W4CEdTQ5LQQWWC7ef3qDU4qRKbnsYtgibGU/edit?usp=sharing).
+
+### Example B
+
+After two weeks, suppose there is now `100,000 tJOY` in circulation, and `USD $3,000` in the fiat pool. This means that the exchange rate is `0.03 tJOY/USD`. However, the next replenishment of the fiat pool is set to `$200 USD`. Additionally, two `KPIs` are live, with a potential payout of `$100 USD` for each. These are both scheduled in exactly 7 days. The users have `4000 tJOY`.
+
+Currently, the status of the roles and rewards are:
+
+**Storage Providers**
+
+-   5 slots filled, 1 slot open
+-   Stake is `3500 tJOY`, cost of entering is `200 tJOY`
+-   Rewards are `4 tJOY/600` blocks per slot
+-   The users find that running a Storage Provider costs them `$4 USD per week`
+
+**Validators**
+
+-   All 10 slots filled
+-   Lowest current stake in the pool is `2500 tJOY`
+-   Rewards are `575 tJOY/100800 blocks` in total
+-   The users find that running a Storage Provider costs them `$1 USD per week`
+
+**Council Members:**
+
+-   New election is running, with 6 slots
+-   It is assumed `4000 tJOY` will be enough to earn a slot
+-   Rewards are `300 tJOY/100800` blocks per CM
+
+**Curators:**
+
+-   The lead and 2 slots are filled, 1 slot is open for application
+-   Stake required is `500 tJOY`
+-   Rewards are `5 tJOY/3600` blocks per slot for curators
+-   The lead earns `12tJOY/3600` blocks
+
+The user assumes that on average, the KPIs will return 150 USD this week, and decides to calculate their estimated earnings for each option, assuming:
+
+-   all slots fill up
+-   no tx fees included
+-   no slashing
+
+At first glance it appears as if then `Storage Provider` is the most lucrative role. However, with a second look, one can see that you can instead try to become both a `Curator` and a `Validator`, as the upfront stake and cost for the former totals `3,700 tJOY`, whereas the latter two totals just `3,000 tJOY`.
+
+There are still a lot of factors that should be considered, such as time spent, transaction fees, risk of not getting or keeping your role, tokens being locked in for staking, reputation and knowledge building, etc. When all these are weighed against each other, one must assume that the various roles will be ranked differently depending on one's skills, costs, risk tolerance and other preferences.

+ 9 - 0
helpdesk/tools/README.md

@@ -0,0 +1,9 @@
+Table of Contents
+---
+<!-- TOC START min:1 max:4 link:true asterisk:false update:true -->
+- [Overview](#overview)
+<!-- TOC END -->
+
+# Overview
+
+This is a guide to using tools not explicitly tied to a single role. Currently, only the [CLI](/tools/cli) is documented.

+ 132 - 0
helpdesk/tools/cli/README.md

@@ -0,0 +1,132 @@
+Table of Content
+---
+<!-- TOC START min:1 max:4 link:true asterisk:false update:true -->
+- [Overview](#overview)
+  - [Install](#install)
+    - [Install with NPM](#install-with-npm)
+    - [Build Yourself](#build-yourself)
+    - [Update](#update)
+    - [Both](#both)
+  - [Getting Started](#getting-started)
+<!-- TOC END -->
+
+# Overview
+
+The CLI tool is currently quite rough, and its main function is to let the Storage Provider Lead perform their duties in a more user-friendly manner than the [extrinsics](https://testnet.joystream.org/#/extrinsics) tab. For this reason, the guide will focus primarily on this side of the tool's functionality.
+
+
+## Install
+
+There are two ways of installing the CLI.
+
+If you are, or are planning to, run a `storage-node`, build your own node/runtime, or host your own instance of `Pioneer` the CLI is bundled in the [joystream-monorepo](https://github.com/Joystream/joystream). In that case, go [here](#build-yourself). If not, you may have an easier time using the [NPM-package](#install-with-npm).
+
+
+### Install with NPM
+If you have [NPM](https://www.npmjs.com/get-npm) installed:
+
+```
+$ npm install -g @joystream/cli
+```
+Depending on your `npm` source, this might return some errors.
+
+This can be resolved in by:
+
+1. Try without -g:
+```
+$ npm install @joystream/cli
+```
+2. Configure npm:
+```
+$ nano ~/.npmrc
+# Append the line below
+prefix = ${HOME}/.npm-packages
+# save and exit
+```
+And then (again without -g):
+```
+npm install @joystream/cli
+```
+3. If none of the above works, you are in a rush, you don't want to try another `npm` source, you're the only one using this computer - you still shouldn't do it, but:
+```
+$ npm install -g @joystream/cli --unsafe-perm
+```
+
+### Build Yourself
+
+To get the CLI up and running, on a Mac or Linux based system, you need `yarn`. On Debian based Linux, you will not have much success using `apt`, but you can check out [this guide](/roles/storage-providers/README.md#install-yarn-and-node-on-linux) for help.
+
+```
+$ cd ~/
+$ git clone https://github.com/Joystream/joystream.git
+$ cd joystream
+$ ./setup.sh
+# this requires you to start a new session. if you are using a vps:
+$ exit
+$ ssh user@ipOrURL
+# on your local machine, just close the terminal and open a new one
+$ yarn build:packages
+$ cd cli
+$ yarn link
+```
+
+### Update
+```
+$ cd joystream
+$ cd cli
+$ yarn unlink
+$ cd bin
+$ yarn unlink
+$ cd ~/joystream
+$ rm -rf node modules
+$ yarn cache clean
+$ ./setup.sh
+# this requires you to start a new session. if you are using a vps:
+$ exit
+$ ssh user@ipOrURL
+# on your local machine, just close the terminal and open a new one
+$ yarn build:packages
+$ cd cli
+$ yarn link
+```
+
+### Both
+```
+# Test that it's working:
+$ joystream-cli help
+```
+Which should return the output below:
+
+```
+Command Line Interface for Joystream community and governance activities
+
+VERSION
+  @joystream/cli/0.5.0 linux-x64 node-v14.16.1
+
+USAGE
+  $ joystream-cli [COMMAND]
+
+TOPICS
+  account         Accounts management - create, import or switch currently used account
+  api             Inspect the substrate node api, perform lower-level api calls or change the current api provider uri
+  content         Interactions with content directory module - managing vidoes, channels, assets, categories and curator groups
+  council         Council-related information and activities like voting, becoming part of the council etc.
+  working-groups  Working group lead and worker actions
+
+COMMANDS
+autocomplete display autocomplete installation instructions
+  help          display help for joystream-cli
+```
+
+## Getting Started
+
+The first time you run a command, you will be prompted to set your API-endpoint. This will determine which node you are talking to. If you are running a node locally, you can choose `localhost`. If not, you can connect to the public node, or select a custom endpoint. You can also go the [api](#api) section to do it manually.
+
+The first time you want to perform an action that requires a key, you will be asked to import one. You can also go the [account](#account) section to do it manually.
+
+Note that your imports and setting are stored locally at:
+- `/home/<Username>/.local/share/joystream-cli` (Linux)
+- `c:\Users\<Username>\AppData\Roaming\joystream-cli` (Windows)
+- `/Users/<Username>/Library/Application Support/joystream-cli` (Mac OS)
+
+For each command, try `--help` for info on `args` and `options`. For an overview of all `help` outputs, and more info on the CLI, go [here](https://github.com/Joystream/joystream/tree/master/cli).

Some files were not shown because too many files changed in this diff