Giter VIP home page Giter VIP logo

community-repo's Introduction

Joystream

This is the main code repository for all Joystream software. In this mono-repo you will find all the software required to run a Joystream network: The Joystream full node, runtime and all reusable substrate runtime modules that make up the Joystream runtime. In addition to all front-end apps and infrastructure servers necessary for operating the network.

Overview

The Joystream network builds on the substrate blockchain framework, and adds additional functionality to support the various roles that can be entered into on the platform.

Development

For best results use GNU/Linux with minimum glibc version 2.28 for nodejs v18 to work. So Ubuntu 20.04 or newer.

You can check your version of glibc with ldd --version

The following tools are required for building, testing and contributing to this repo:

  • Rust toolchain - required
  • nodejs >= v14.18.x - required (However volta will try to use v18.6)
  • yarn classic package manager v1.22.x- required
  • docker and docker-compose v2.20.x or higher - required
  • ansible - optional

If you use VSCode as your code editor we recommend using the workspace settings for recommend eslint plugin to function properly.

After cloning the repo run the following to get started:

Install development tools

./setup.sh

If you prefer your own node version manager

Install development tools without Volta version manager.

./setup.sh --no-volta

For older operating systems which don't support node 18

Modify the root package.json and change volta section to use node version 16.20.1 instead of 18.6.0

"volta": {
    "node": "16.20.1",
    "yarn": "1.22.19"
}

Run local development network

# Build local npm packages
yarn build

# Build joystream/node docker testing image
RUNTIME_PROFILE=TESTING yarn build:node:docker

# Start a local development network
yarn start

Software

Substrate blockchain

Server Applications - infrastructure

Front-end Applications

  • Pioneer v2 - Main UI for accessing Joystream community and governance features
  • Atlas - Media Player

Tools and CLI

Testing infrastructure

Running a local full node

git checkout master
WASM_BUILD_TOOLCHAIN=nightly-2022-11-15 cargo build --release
./target/release/joystream-node -- --pruning archive --chain joy-mainnet.json

Learn more about joystream-node.

A step by step guide to setup a full node and validator on the Joystream main network, can be found here.

Pre-built joystream-node binaries

Look under the 'Assets' section:

Mainnet chainspec file

Integration tests

# Make sure yarn packages are built
yarn build

# Build the test joystream-node
RUNTIME_PROFILE=TESTING yarn build:node:docker

# Run tests
yarn test

Contributing

We have lots of good first issues open to help you get started on contributing code. If you are not a developer you can still make valuable contributions by testing our software and providing feedback and opening new issues.

A description of our branching model will help you to understand where work on different software components happens, and consequently where to direct your pull requests.

We rely on eslint for code quality of our JavaScript and TypeScript code and prettier for consistent formatting. For Rust we rely on rustfmt and clippy.

The husky npm package is used to manage the project git-hooks. This is automatically installed and setup when you run yarn install.

When you git commit and git push some scripts will run automatically to ensure committed code passes lint, tests, and code-style checks.

During a rebase/merge you may want to skip all hooks, you can use HUSKY_SKIP_HOOKS environment variable.

HUSKY_SKIP_HOOKS=1 git rebase ...

RLS Extension in VScode or Atom Editors

If you use RLS extension in your IDE, start your editor with the BUILD_DUMMY_WASM_BINARY=1 environment set to workaround a build issue that occurs in the IDE only.

BUILD_DUMMY_WASM_BINARY=1 code ./joystream

Authors

See the list of contributors who participated in this project.

License

All software under this project is licensed as GPLv3 unless otherwise indicated.

Acknowledgments

Thanks to the whole Parity Tech team for making substrate and helping in chat with tips, suggestions, tutorials and answering all our questions during development.

community-repo's People

Contributors

0x2bc avatar aaron20 avatar agrafen avatar andybut avatar arseniy2706 avatar arturbarker avatar blrhc avatar bwhm avatar cheomsk avatar codefikeyz avatar dependabot[bot] avatar finnyfound avatar freakstatic avatar htcwrs avatar iesua-lab avatar igrexac avatar ilichhh avatar leetjoy avatar lopegor avatar maxlevush-coinside avatar mikeshipa avatar mochet avatar nexusfallout avatar oiclid avatar oleksanderkorn avatar singulart avatar surpaul avatar swasilenko avatar traumschule avatar zazik3 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

community-repo's Issues

Community Bounty #8 - "Ledger for Joystream"

Tags

  • Research

Description

Research how well the Ledger hardware wallet is supported, how to use them on the network, derivation paths and key recovery.

Reward

USD 450

Format

Jsgenesis requests a closed format.

Resources

You must have/buy a Ledger* hardware wallet, and connect pioneer to a node you control, running with flags: --log runtime,txpool,transaction-pool to work on this bounty. If you are not already running a node, setting up a devchain might be useful...

Notes
  • It is not clear if both Ledger Nano X and Ledger Nano S is compatible with the polkadot app.
  • For all of the tests below, please use a fresh device, or verify your existing backup is safe and can be recovered, then wipe your device and generate a new seed on your device to avoid compromising your seed and funds in any way.
  • To complete all the steps, you must expose your seed in order for anyone to verify the information provided.
  • Jsgenesis can not be held responsible for any loss of funds as a result of performing this bounty.
  • Make sure you use the most recent firmware and application version on your ledger device.

Success Events

The final deliverable is a report answering all the question below, in a way such that the reader of the report can understand the findings without having to read anything else than the report. Simply answering "yes" or "no" is not sufficient, and steps to reproduce, sources etc. must be provided.

The workload and reward for the success events assumes that only one keytype is supported, and the Polkadot JS extension is required to use alongside Pioneer. If this turns out to be incorrect (eg. more keytypes, and you can use Pioneer without the extension as well), the reward for success event 3 will be increased. If it turns out you can't use a Ledger on Joystream at all, only success events 1,2 and 5 applies.

  1. Test compatibility of Ledger on Joystream - USD 50
  • Can a Ledger be used to sign transactions on Pioneer w/o an extension?
    • If no: Can a Ledger be used to sign transactions on Polkadot JS apps w/o an extension?
  • Can a Ledger be used to sign transactions on Pioneer with the extension
    • If no: Can a Ledger be used to sign transactions on Polkadot with the extension
  1. Which substrate keytypes are supported by Ledger - USD 50
  • Schnorrkel (sr25519)?
  • Edwards (ed25519)?
  • ECDSA?
  1. Transaction testing - USD 100
  • Test (at least) a single transaction from each section, and log:
    • method
    • input
    • data displayed on ledger (can be image)
    • data displayed in Pioneer/extension (can be screenshot)
    • if fail:
      • error message(s) displayed Pioneer/extension (can be screenshot)
      • error message displayed on node (if any)
  1. What are the derivation paths, and recovery mechanism, for each keytype supported - USD 200
  • Find the derivation path used for each of the keytypes supported.
  • Check if you are able to successfully recover the key without using a Ledger, and sign a transaction with it, by some mix of:
    • the BIP39 tool
    • Subkey
    • Pioneer
    • Polkadot/substrate documentation
  • If successful: note down all steps, and results in such a way that your results are reproducible
    • Your seed
    • All commands
    • All results
    • Everything you inserted in to the browser
  • If unsuccessful: note down all steps of your attempts, and results in such a way that your results are reproducible, and/or can be ruled out by someone else attempting this
  1. Research, without any testing required, if any other hardware wallet manufactorer supports Polkadot/substrate (and by extension Joystream) - USD 50

Conditions

  • The reports are submitted as a PR to the Community Repo
  • The reports are licensed as GPLv3, in accordance with the repo.

Annihilation

The report contains anything that tries to lure users to expose their seeds.

Review Period

Once the Council submits the report from success event 1, and @bwhm and @blrhc is assigned to review, Jsgenesis will grade within 1 week.

Status

See forum post
Closed with #171

$450 fiat pool increase!

governance: Proposal Guidelines

If we look at all proposals submitted so far (https://joystreamstats.live/councils & https://testnet.joystream.org/#/proposals/historical) the formatting of the proposals varies quite significantly.

It would be good to have a document that lists out:

  • Each type of proposal and their purpose
  • Titling guidelines
  • Guidelines for what information each proposal type should include (ex. "A spending proposal should include the current exchange rate")

There is no way to enforce these elements of proposal creation so they would simply be guidelines, but having more consistent proposals would help in many ways, especially so new users have a simple document that explains things.

It would also be good to link some good examples of each proposal type.

Improving council reports

Currently I complete all the council reports by hand and using small code snippets within the Javascript menu, there is a lot that could be improved and these could largely be automated and improved upon.

Compared to the tokenomics reports, the council reports should ideally focus on both:

  • data (aspects of council performance, how much CMs voted, how quickly proposals were voted through and other information that isn't available from the chain or UI)
  • opinion (what were problems, challenges and what can be improved)

You can look at the current set of council reports to get an understanding of what they show now: https://github.com/Joystream/community-repo/tree/master/council-reports

These improvements + automation could easily be completed for bounties, I can help to produce a template if necessary. The end product would ideally be a script which can take a start + end blockheight as input and output a detailed, useful council report that can then be completed with a bit of input for the opinion aspects.

  • Council / election round number
    • How many elections were held to elect this council, how long did it take?
    • How many applicants, how much stake, how many votes?
    • How much is the total stake + votes behind all applicants?
    • How many unique accounts voted?
  • Council member information
    • Who are the council members, how much stake, how many votes?
    • What was the total amount of stake/votes put behind the successful council applicants?
  • Council mint information
    • Start and end total minted values
    • How much was spent on minting proposals? (+ percentage of this from mint spend)
    • How much were council members paid, were any payments missed? (+ percentage of this from mint spend)
    • Percentage increase difference from start to end
  • Proposal information
    • Proposal totals, proposal type totals
    • For spending proposals the total value of these proposals
    • For mint proposals the total value of these proposals
  • CM participation info
    • How long did each proposal take to finalize, what was the total + average time for proposals to get finalized?
    • How often did each council member vote?

Runtime upgrade proposal

Rationale

With the inflow of new users, there are lots of urgent matters that needs to be addressed.

This text proposal will only address those can, and need to be, solved by a runtime upgrade. In particular, it aims to allow more users to participate on the network, and improve capacities where needed.

Description

Validators

The perhaps easiest way to become an active participant on the Joystream network is to run a node. At the moment, there is also no good way for us to track the the uptime and reliability of a node operator without them being validators. Although this is something being worked on, the easiest and best solution (in a vacuum) is to lower the bar to become a validator.

Max Validators

Currently, the highest number of validators that can be proposed by a the Council is set to 100. There are some clear drawbacks in allowing "too many" validators, (increases the blocktime, reduces the rewards, etc.), but we beleive that the Community should be allowed to decide this. Polkadot currently "only" allows 297, so we are hesitant to allow much more than this without having tested it for a while.

We propose giving the Council the option to increase this number from 100 up to 300.

Rewards

Part of the equation around this are the rewards for the Validators and Nominators. We were initially also planning on increasing this, as they are arguably losing money on their operations as of now, but after giving it some thought, it's not clear that is the correct way to go:

  • The Validators/Nominators already gets ~55% of the total platform inflation as rewards, while also staking ~55%.
  • While they do have higher costs than some "official" roles, it requires very little time after initial setup.
  • Increasing the rewards will mean that some "whales" will be able to operate a large number of nodes profitably, while Community Members wanting run one validator to earn points to become Founding Members will be pushed out due to their lower stakes.

For these reasons, we propose keeping the rewards as they are for the time being.

Slashing

On the previous network, slashes was very frequent, and the amounts were high. Most Validators ended up losing tokens, so we chose to increase the rewards and limit the risks of slashes. The latter was mostly a consequence of reducing the unbonding period from ~1 month to ~24h. This had both the benefit described abobe, and allowed users to more quickly allocate their resources to other voting and/or staking for other roles. Without going in to too many details, the unbonding period for Validator and Nominator stake is related to slashing, as there is no point in slashing someone if they are able to move their tokens before they get slashed.

We propose adjusting this up to ~7 days, so that Validators must be more careful, and make it less tempting for "whales" to risk and lock up their tokens for a longer period of time.

Council

The size of the Council was adjusted in a recent proposal, and there will be 12 slots instead of 6 from the next term forward. Although we believe the effects of this should be monitored before increasing again, we propose changing the two hardcoded values for the Set Election Parameters proposal:

  • Min Candidacy Limit from 25 to 50
  • Max Council Size Limit from 20 to 30

These changes are rather small, but we believe it should be "enough" until the next testnet.
Note that, as with Max Validators, these changes does nothing by itself, but gives the Council the possibility to expand the Council more in the future.

Proposals

The proposal system is seeing more and more use.

Currently, there is platform a limit on that only allows 5 active proposals at the time. This was meant to allow the Council more time to evaluate each proposal, and not get discouraged by always having to deal with "infinite" proposals.

Max Active Proposals

As long term Community Members have gotten more used to dealing with proposals, and the proposal system has found more and more use cases (rewarding creative users, managing bounties, etc.), we believe it's time to increase this number. We propose adjusting this to 10 or 12, but we would want your input on this.

Increase the Stakes

We still believe too many open proposals at all times will lead to lower "quality" proposals and voting. Another way to limit proposals is to change the price (eg. stake).

We propose changing the required stakes as follows:

  • Text: 25k -> 50k
  • Runtime Upgrade: 1M -> 5M
  • Set Election Parameters: 200k -> 1M
  • Spending: 25k -> 50k
  • Set Validator Count: 100k -> 500k
  • Add Working Group Leader Opening: 100k -> 200k
  • Set Working Group Mint Capacity: 50k -> 200k
  • Begin Review Working Group Leader Application: 25k -> 50k
  • Fill Working Group Leader Opening: 50k -> 200k
  • Slash Working Group Leader Stake: 50k -> 200k
  • Decrease Working Group Leader Stake: 50k -> 200k
  • Set Working Group Leader Reward: 50k -> 200k
  • Terminate Working Group Leader Role: 100k -> 200k

We are not "sure" on many of these values, but a quick rationale:

  • Text and Spending are the two most common ones, and also the most likely "needed" by newcomers. They will often require the least amount of time to evaluate, and Spending will sometimes be the only way for newcomers to earn tokens in the first place.
  • All *Working Group* proposals are rarely used as is, and many are "blocked" in the first place, so no need for big adjustments
  • The rest (Runtime Upgrade, Set Election Parameters, Set Validator Count) are arguably the most critical ones, and should not be taken lightly by the proposer or the Council. The runtime upgrade, which could destroy the chain, will also see a lower grace period (from 5 to 2 days) to allow us to always use the proposal predictably in the future, instead of using sudo.

joystreamstats.live - further improvements

WIP

  • Add buttons/links for all sections of the site (calendar, timeline view, proposals view, curator view). It would be better if this was consistently shown on all pages, so a user can navigate between sections without having to revisit the front page.
  • Add member tooltip (that can be seen on front page) to forum view + council view
  • On Validator page, it currently shows profit per week for all validators. It would be useful to show the expected amount an individual validator makes per week/month at the current payout rate (as this shows more easily whether it is financially viable to operate a validator)
  • The homepage could maybe be redesigned so that Forum / Council / Active Proposals / Validators are boxes with basic statistics, and then a user could click to navigate to each complete page (this would mean moving the validators section from the front page)
  • If it's possible to have a graph showing the validator stake>total issuance ratio over time as this is becoming a more important metric for validators to pay attention to

Community Bounty #7 - "Joystream Player Loading"

Tags

  • Research
  • Coding

Description

The current implementation of the Joystream Player hosted here takes a while to load. There are some known reasons for this, but there may also be some unknown sources. While all of the items listed below will contribute, note that the first one is the main point of interest in this bounty

  • Javascript processing while loading the app
  • Loading static assets
  • Querying Hydra, to get the videos and channels. See github
  • Fetching the metadata assets for videos and channels, from various URLs.
  • Querying Orion, to get view counts. See github

Reward

Up to USD 400, depending on the quality of the work.

Format

Jsgenesis requests a closed format.

Success Events

  1. Benchmark the individual sources of loading time, and compare across browsers - $150.

The deliverable is a report that breaks down the individual sources of loading time, and quantifies them.
The following browsers must be included in the tests:

  • Chrome
  • Firefox
  • Brave
    In addition to opening the landing page, loading times for both browsing and directly accessing a specific video and channel must be included.
    If possible, test on different hardware, and include the specs, OS and versions of browser/OS.
  1. Provide solutions that would decrease the loading times - $250.

The deliverable is a report looking into the non-trivial sources of load time, and produce high-level ways of reducing them. Although querying Hydra and Orion will play a role, this is outside the scope of this bounty. The main focus is to try to optimize the JS app itself.

Note that if you think you are able to improve the code yourself, reach out to us. If so, a new success event, with better rewards, will be added.

Conditions

  • The reports are submitted as a PR to the Community Repo
  • The reports are licensed as GPLv3, in accordance with the repo.

Annihilation

NA

Review Period

Once the Council approves the PR, by requesting reviews from @bwhm and @blrhc , Jsgenesis will grade and potentially increase the fiat pool, within 1 week.

Status

See forum post

joystreamstats.live improvements - WIP

The basic site is up and seems great.

A few potential additions/improvements:

  • A way to list proposals by author and maybe some stats about % of proposals passed/failed/slashed by that author
    • Help to build the reputation of proposal creators
  • A way to list proposals by type (ex. text/spending/ValidatorCount) and maybe some stats
    • Help to identify how each proposal type is differently recieved by the council
  • A "tools" section that could have some easier ways of calculating role payments (ex. if storage lead is paid 23146 JOY per 3,600 blocks, how much is that in dollars at current exchange rate)

governance: report cycles

Currently we have the following reports:

  • council report (completed each council round)
  • tokenomics report (completed each council round)
  • budget (completed each council round)
  • WG evaluation reports (unknown but probably each month)

Eventually the council will have to produce reports/proposals on a regular basis. So we will need an overview document which breaks down the timeframe each of these reports should be produced on.

This isn't really needed just yet due to the low number of roles, but eventually at mainnet/DAO there would need to be a system for keeping track of this. At that stage some of these reports may no longer exist.

Validator Spot Check - WIP

The validator role largely manages itself and the council can only control the number of validators, so a spot check for this role might look more like an informational report than a typical spot check. It should include information that would matter to nominators, people seeking to become validators and most network participants.

This would largely take the form of a script that can take a start and end blockheight and provide statistics on those blocks. Other parts of it would be based on more informal sources like user feedback on the forums.

It could also include a general conclusion about how the validators and nominators are doing.

The current tools available are:

Some ideas:

Stake

  • The proportion and distribution of commission rates (ex. "How many validators have a 80-90% vs 90-100% commission rate?")
  • The proportion and distribution of validator stake (ex. "How many validators have staked 500k-1m JOY vs 1-2m JOY")
  • The proportion and distribution of nominator stake (ex. "How many nominators have staked 500k-1m JOY vs 1-2m JOY")
  • The proportion and distribution of total stake (ex. "How many val+nom have staked 500k-1m JOY vs 1-2m JOY")
  • The proportion of nominator stake vs total stake vs total issuance

Constant values

  • What the ideal staking amount is, and what it currently is
  • Given stake>total issuance, what is the current inflation rate?

Financials

  • At the current exch. rate, how much is each validator and nominator making?
  • How much the role is paying to each validator, at current rates, for the next month (this is slightly complicated because you would also need to look at how nominators get rewards, which isn't shown in Pioneer yet)
  • How many validators, when considering nominator cut are making enough to cover likely server costs?
  • How much a server to run the role is likely to cost (this is currently largely tied to database size)
  • The current size of the blockchain database, how fast is the chain growing

Decentralization & Performance

  • The geographical distribution of nodes (if we can get IP addresses of all known nodes, it might be possible to use some geolocation script to give an idea of what countries are hosting nodes. The idea with this is to try and know if validators are too centralized)
  • The performance of validators (ex. how well are the validators doing to keep the network running consistently, judged by average blocktimes)

Role information

  • How many waiting validators have there been over time
  • How many non-validating nodes are there vs validating nodes
  • How many nominators vs validators are there

Other information that would be good to know, but might be harder to find:

  • How many validators or nominators were slashed recently?
  • How many tokens were slashed recently?
  • At the current exch. rate, how much is each nominator making?
  • How much bandwidth does a validator use?
  • Has finalizing had any long lag periods?
  • How many blocks had much longer than average periods to be produced (ex. if a block should take 6 seconds to be produced, how many blocks took >10s to produce, also is it possible to know which validators were responsible for these delays?)

Discord Bots

We will need several bots for Discord, in particular:

  • Identity bot that can tie a Telegram handle to an on-chain address/membership
  • Faucet bot (can maybe be adapted from the previous ones)
  • Forum bots for specific channels
  • Proposal bot for proposal channel
  • Council bot for council channel
  • Tip bot

KPI: 5.6 Council Status Report

With 4 Council terms completed, it's time for a review of the KPI system and Council performance thus far.

Council Summary

For each Council term:

memberId handle ownStake otherStake voting history Reward
<i> <handle> <a> tJOY <b> tJOY <n>/<m> <c>tJOY USD

Where the CM voted on n proposals out of m possible.

And an overview:

memberId handle councils voting history Rewards
<i> <handle> <1,2,3,4> <n>/<m> <c>tJOY USD

Thoughts for the Future

Create a "survey" from all previous CMs (and anyone else that wants to weigh in). The answers should be made on chain in the forum, but anonymous replies can be made in DMs on telegram (to Martin and/or Ben).

Council and Elections

  1. How many elections have you participated in as a candidate?
  2. What did you do to get promotion?
  3. How many of those did you get elected?
  4. How many elections have you participated in as a voter, but not a candidate?
  5. Do you think the council size should be increased/reduced? Why?
  6. Do you think the council term should be longer/shorter Why?
  7. Do you think any of the other stages should be longer/shorter Why?
    ...

Council communication

  1. Has it been difficult to communicate with other CMs?
  2. Has there been much of a "need" to communicate with other CMs?
  3. Has there been any communication with other CMs outside of forum and/or telegram?
  4. Would it be easier if the Council had a dedicated communication channel? If yes:
    • should it still open for all?
    • should it be "read only" for non-CMs?
    • should it be "secret"
      ...

KPIs

  1. How much time (estimate) did you spend on direct or indirect tasks related to being a CM?
  2. If you have been in multiple terms: Has the workload/time spent trended up or down?
  3. Which tasks takes the most time?
  4. Are there any KPIs that seems especially meaningful?
  5. Are there any KPIs that seems especially meaningless?
    ...

Bounties

  1. Why has it proven challenging to complete Bounties?
    • (compensation? tasks?)
  2. Would it help if Jsgenesis changed policy from a "few and important Bounties" to "many and fun"
  3. What kind of Bounties would you like to see?
  4. What could be done to promote Bounties?
    ...

Comments are welcome!

Community Bounty #10 - "Upload Public Domain Content"

Tags

  • Content

Description

As part of the Babylon release, the new consumer application was launched. To showcase it, Jsgenesis uploaded some 300 videos of Public Domain, and other Creative Commons permissively licensed content.

We believe there are some hidden gems available out there, that is licensed permissive.

Reward

Up to USD 5 per video.
Update - 09.07.21
Effective from block #1386000, there will be a cap of $500 paid out per week.
The BM/Council are free to design the distribution scheme.

Format

This will be an "open" bounty, where all users can contribute without the need to be assigned. Users are encouraged to submit their videos in batches to avoid cluttering the proposal system. Duplicate entries will be graded by time of upload, not time of submissions.

Steps for participants:

  • Upload one or more video to the platform.
  • Provide links in the (tbd) forum post for the Curators and the Admins (tbd) to review.
  • After the videos are approved by the Curators, the Admins will grade them and set a total reward.
  • Create a spending proposal based on the then prevailing exchange rate listing the entityId, and title of all your videos, along with a link to the forum post where the Admin grades them.
  • Unless the Council can raise legitimate concerns, they will approve.

Workload for the Council:

  • Assign one or more Admin to grade the videos, and agree on a reasonable weekly compensation. This will be reimbursed by Jsgenesis.
  • Once a week, the Council (Secretary) produces a report that lists all the submissions and:
    • The memberId of all participants, and a link to the associated spending proposal.
    • For each of these the entityIds, titles and reward for each entry.
  • The report is delivered as a PR to the Community Repo.

Success Events

  1. Source interesting videos online, and upload them to appropriate channels.
    Videos are graded on:
  • quality of video/audio
  • quality of metadata for the video:
    • thumbnail
    • descriptions
    • release year
    • etc.
  • quality of metadata for the channel:
    • cover
    • avatar
    • title
  • length of content
  • quality of content
  • relevance to the platform
    • a video discussing eg. cryptocurrency or governance is more "relevant" than a pre-game show of a sporting event that occurred 70 years ago.

Conditions

  • All media files and metadata files/links must be in the public domain, or other permissive license
  • All metadata is set correctly, especially if relevant to the license (eg. attribution if required)
  • Duplicates will not be accepted unless the quality is significantly better
  • Videos are placed in channels themed appropriately (eg. a cryptocurrency video shouldn't be in a baking channel)

Annihilation

  • Anything that violates the platforms ToS and/or any license or copyright.

Review Period

  • Jsgenesis will perform bulk reviews, every Tuesday.

Status

See forum post

External Stats Website (WIP)

As Pioneer is quite complicated to upgrade it may be worth investigating making a 3rd party website which can take chain information and populate it with statistics. One example of this is https://siastats.info/

I couldn't find any examples that show stats for a council or governance system, but maybe having some of the ideas here on a 3rd party website would work: #18

Tracking Spending Proposals

Currently any user can make a spending proposal and if approved there is no system for tracking the progress of these proposals.

This doesn't really apply to KPI or bounty proposals which already have a tracking system, but for sporadic proposals made by users.

Content Migration Report

The upgrade from Alexandria to Babylon will among other changes, include some major changes impacting the content system:

  1. The Content Directory will be upgraded and overhauled.
    • The classes, entities and schemas will be changed
    • Channels will now be entities
  2. The Content Curator Working Group will be a "proper" working group, working the same way as the Storage Provider WG.
    • All curators will be fired
    • The council will hire the Lead
    • The lead will manage openings in the CLI
  3. Content will now longer be available in Pioneer.
    • Channels, uploading and curation will only be possible from the CLI
    • A new consumer app for consumption of content

Due to all of these changes, automatic migration of all content is "impossible". As a result, the Council must compile a list of content to be migrated.

There are currently 121 assets (which may change before this is addressed) in the content directory. Some of these will not even be visible due to errors during upload, double uploads, or content/channels marked as "unlisted".

Task 1

The Council must produce or procure a list of all 121+ assets:

  • Identifier (looks like an address, eg. 5xyz)
  • Uploader - channelId,channelTitleand memberId of owner
  • Entities associated - entityId of both the asset itself (in class 1), and the video (in class 7)
    Note that not all assets will have entities associated with them

Task 2

From the list above, identify content that should be migrated based on the following criteria:

  1. High quality
  2. Good metadata included
  3. Unique content, that is either created specifically for the Joystream platform, or not available other places
  4. The channel owner requests it

Note that 3 and 4 should get priority here. A video in the public domain will not be lost to the world if it's missing, and is easy to re-upload...

Community Bounty #12 - "Deploy Reliable Endpoints"

Tags

  • Coding, Marketing

Description

Our endpoint has come under a lot of stress with the large inflow of new users. Providing endpoints may become a "formal" role in future testnets*, but we think it could be an informal role in the near future.

* as pioneer will in the future connect to a query node, it will likely be part of the scope of the query node operators to also provide a websocket endpoint.

Reward

USD 100 as a one time payment (for up to two members),
and the Council will be given a budget for biweekly recurring rewards that should cover the cost plus a negotiated fee.

Resources

  • The command ./joystream-node --help will display plenty of configurable options for the node. Some of these "must" be updated to provide a good endpoint.
  • Using a load balancer may be preferable to running one "big" node.
  • Running the node(s) with docker may be better than systemd
  • Note that our current endpoint is hosted by Linodes in Frankfurt, Germany so hosting with a different provider and from a different geographic location could be a benefit.

Format

Jsgenesis prefers the Council comes up with a format, as there are benefits and downsides with both.

The Council will be responsible to set the full rules, and can choose two winners that will both get USD 100 in tJOY.

Success Events

  1. Deploy a public endpoint with high capacity - USD 100.

The endpoint must be deployed on sufficiently strong hardware, and the following information must be shared in full. Based on the initial information shared in the application, the Council will approve your spending proposal.

  1. Ensure close 100% uptime, and relieve some of the pressure on the current endpoint.

The Council will be given a budget to provide compensation, depending on the approved proposals. Note that before the inflow, Jsgenesis spent approx. USD 120/month on endpoints (that cost has since gone up). Up to USD 200 per month (USD 100 per Council term) will be approved without question.

Conditions

When a PR is made for Jsgenesis to review, the following information is required:

  • Specs and location (hardware)
  • Configs and flags (node)
  • Endpoint URL (for testing)
  • SSL

Annihilation

  • Any information provided is found to be incorrect
  • Excessive logging/spying on users
  • Any other "malicious" actions

Review Period

  • Up to 1 week after the PR is submitted

Status

DRAFT

Community Bounty #3 - "Improved Telegram Bot"

Now that Bounty #1 is completed, and the bot as up and running, we want to improve it.

Description

As the bot still has some issues (due to bugs in the initial bot), we want to both fix these, and expand on the functionality.

Reward

Up to $225 when first opened 08.11.20 with three success events.
Note that new success events will be added.

Success Events

As each of these success events can be completed individually, it can be beneficial to assign them to multiple parties.

  1. Validators/Block Production - $75:
    Every 24th era, a summary is produced:
    • Blocks produced
    • Time passed (hh:mm:ss)
    • Average blocktime
    • Average stake
    • Average number of validators
    • Average number of nominators
  2. Storage Providers - $100:
    Produces a message every time:
    • A storage provider goes offline (id, address, time)
    • A storage provider goes online (id, address, time)
    • A new storage provider (or lead) opportunity is opened (id, title, link)
    • A new storage provider (or lead) opportunity is closed (id, title, link, providerId+membershipId of hired)
  3. Proposals - $50:
    Fixes the existing implementation, such that it:
    • Only reports a proposal is finalized once
    • Reports when a proposal is executed, with execution details

Conditions

  • The source code is licensed under GPLv3
  • The bot builds on existing code, in typescript.
  • As soon as the Council approves the (final) spending proposal, a PR with all the source code is made to this Repo.
  • This includes complete, step by step, instructions for deploying the bot.

Annihilation

If the Council submits a bot containing malicious code for review by Jsgenesis, the Council will be deducted the total amount requested for the Bounty.

Review Period

Once the Council submits the bot, by requests for review by @bwhm and @blrhc , Jsgenesis will grade and potentially increase the fiat pool, withing 72h.

Status

Closed, with $25 rewarded.

Council Task Performance - WIP

Currently Joystream uses a system of KPIs that allow for rewards to be given to council members based on accomplishments during council terms. The current KPI system can be looked at as "good habits" which the council can then work to integrate and improve upon. In a mainnet scenario there may be a KPI system, but the rewards aspect is less clear.

We can define "council tasks" as being the following:

  • Performing spot checks
  • Doing reports
  • Managing Working Groups

Therefore it is maybe important that the council system eventually moves to a transactional one where council members (or whoever does work) submits reports and documents with appropriate spending proposals. For this purpose there is now a rate sheet being worked on: #54 which can be used to guide standardized values for completing tasks.

The benefits of moving to a transactional system for council work are:

  • There is a more direct relationship between tasks + rewards
  • It may become easier to track who is doing tasks
  • The council may become more self-sufficient in completing work
  • Regular Council payments may not need to be so significant (the council salary that is given for just being a council member)
  • Spending Proposals relating to the council would be more consistent, meaning that the amount needed to be minted for work is more predictable.

The negatives of moving to a transactional system for council work are:

  • There may be competition from various parties who want to do work or who have already completed work
  • Spending proposals require using proposals, which may generate too much proposal traffic if there are too many spending proposals

Alongside the rate sheet, it may be useful to have a way to break down each of the reports into a KPI-like system and track the performance of each council in this manner. A document to do this could look something like this:

Council # 1 2 3
Council Report
Tokenomics Report
Storage WG Spot Check 1
Storage WG Spot Check 2
Storage WG Spot Check 3
Curator WG Spot Check 1
Curator WG Spot Check 2
Curator WG Spot Check 3
Score 8/8 6/8 6/8

There could also be an aspect to this of tracking who completes which tasks to help build up a reputation system.

KPI 6.6: Content Sourcing

With the introduction of Atlas as part of the Babylon release facilitating easier and more engaging content consumption, it is becoming ever more important that we populate our content directory with appealing content, for a variety of reasons. These are not limited to: increasing awareness of the platform, allowing us to create a more accurate simulation of the content types and characteristics available on mainnet and for other community purposes.

For this reason we have devised a KPI asking the Council to identify some of the best ways to obtain such content.

We are hoping the Council will suggest creative solutions to solve this issue, among which might include using Spending Proposals to fund content by selected creators, identifying new sources of public domain content, remixing existing open content and other more creative suggestions...

All content sourced will need to be appropriately licensed. Atlas will natively support Public Domain and Creative Commons-licensed content, but of course content using any license which allows distribution on platforms such as Joystream will be permitted.

At this early stage in the process the only deliverable required will be a report exploring some of the feasible methods for obtaining these new content items. These methods should be outlined in detail in order to allow future Councils to act on some of the most promising suggestions made.

We are mainly looking to focus on quality rather than quantity in this KPI, though any technique which will "enrich" the content directory should be explored in detail in the Council's report.

Community Bounty #6 - "Increase Validator Set Research"

Description

Research the costs and parameter changes associated with increasing the Validator count substantially.

With a new incentives program to be disclosed shortly, we want to increase both the visibility of the platform, and open up for more people to contribute and participate on the platform. We believe running a node, and potentially becoming a validator, is a good way of getting started, and reaching the front page of the Polkadot Telemetry could get some eyeballs.

Reward

Up to $200 when first opened 17.01.21 with two success events.
Note that more success events, or just expanding on the two, can be added later. This would also lead to adjusting the rewards.

Success Events

Currently, the max validator count is 42. These report should focus on the consequences of bumping this to:

  • 100
  • 200
  • 300
  • 500
  1. Produce a report estimating the costs, for the validators themselves and other tJOY holders, associated with a larger validator set. - $100:
    • What is a good estimate of the (current) running costs for a validators? This assumes running a VPS from some of the bigger actors around.
    • What is the weekly "cost" for the platform (in terms of tJOY and USD) the last 4 weeks?
    • How much of the returns are not cashed out?
    • Has there been any slashes in this period?

Note that with a current historyDepth of 336 eras (~14 days), some of these questions will require you to query an archival node (such as the hosted one) with at. Eg.
await api.query.staking.at.erasValidatorReward(blockHash, eraIndex)

  1. The report includes a table with the proposed parameters for a set of potential 'Max Validator Count' values. - $100:
    • How much would the required returns be (in tJOY and USD) pr week for each of the proposed validators counts to stay profitable?
    • What would the runtime parameters need to be set to to account for this?

For help with these calculations: Feel free to make a copy of this spreadsheet, and play around with the values:

Conditions

  • The report is issued as a PR to the Community Repo

Annihilation

NA

Review Period

Once the Council submits the report, and @bwhm and @blrhc is assigned to review, Jsgenesis will grade within 72h.

Status

Completed - $200

Spending Proposal Management

WIP but we need a document outlining how spending proposals should be managed, including:

  • categorization (media/marketing/coding/misc)
  • tracking of each spending proposal (milestones/deliverables)
  • report generation at end of each council session

Budget - WIP

Currently I do a budget each council session and I use a spreadsheet to manage this. This is because some of the numbers are not available on the chain, such as if the council agrees to pay a lead some fixed amount of fiat (which is then converted to tokens based on the current exchange rate).

An example of it is here: https://testnet.joystream.org/#/forum/threads/171

Rather than having a new post to sporadically update the budget on the forum, it could be something incorporated into the stats website or as a script, which would allow users to link to the budget at a specific blockheight, or a blockheight range which would show the fluctuations in figures.

Some of the limitations of the current budget system are:

  • Does not list out the amount council members make from payments on an individual basis
  • Does not provide any historical context
  • Is poorly formatted and difficult to understand without some additional formatting/colors

Budgets for now are still quite simple, but on a platform with several different roles it would make council processes much easier to have a more fluid method of linking to budgets.

This is something that could be simply incorporated for now and then expanded upon later on.

Problems:

  • How do we have fiat amounts agreed on by the council somehow accessible by the budget tool? This is important since some roles have a fixed hardware cost that is currently considered in fiat.

Council Workflow (WIP)

This is a document that we can use to illustrate what a successful council should achieve during any given council session and regardless of KPIs. As this is still WIP it will be an issue and later can be turned into an actual document.

As anyone can submit proposals it may be that work is done outside of council members themselves.

Council Workflow

Council Start

  • Hire Council Secretary / any other necessary roles

Council Run

  • Spot checks for working groups

Council End

  • Council Report
  • Tokenomics Report

Tokenomic Report Generator Improvements

Adapted from #28:

  • Add status of new mints
  • Fix total staked for council elections (seems to be incorrect)
  • Divide council election stake into ownstake and otherstake
  • Time dilation (how much did long/short block production times drift in % and HH:MM:SS from the expected duration over a council term)

Community Bounty #4 - "Improved Telegram Bot"

Note that although #47 was closed due to some bugs, it may be of use.

Description

As the bot still has some issues (due to bugs in the initial bot), we want to both fix these, and expand on the functionality.

Reward

Up to $225 when first opened 05.12.20 with three success events.
Note that new success events will be added.

Success Events

As each of these success events can be completed individually, it can be beneficial to assign them to multiple parties.

  1. Validators/Block Production - $75:
    Every 24th era, a summary is produced:
    • Blocks produced
    • Time passed (hh:mm:ss)
    • Average blocktime
    • Average stake
    • Average number of validators
    • Average number of nominators
  2. Storage Providers - $100:
    Produces a message every time:
    • A storage provider goes offline (id, address, time)
    • A storage provider goes online (id, address, time)
    • A new storage provider (or lead) opportunity is opened (id, title, link)
    • A new storage provider (or lead) opportunity is closed (id, title, link, providerId+membershipId of hired)
  3. Proposals - $50:
    Fixes the existing implementation, such that it:
    • Only reports a proposal is finalized once
    • Reports when a proposal is executed, with execution details

Conditions

  • The source code is licensed under GPLv3
  • The bot builds on existing code, in typescript.
  • As soon as the Council approves the (final) spending proposal, a PR with all the source code is made to this Repo.
  • This includes complete, step by step, instructions for deploying the bot.

Annihilation

If the Council submits a bot containing malicious code for review by Jsgenesis, the Council will be deducted the total amount requested for the Bounty.

Review Period

Once the Council submits the bot, by requests for review by @bwhm and @blrhc , Jsgenesis will grade and potentially increase the fiat pool, withing 72h.

Status

Open.
Once the Council makes a post on the forum, a link will to the post will be added.

Telegram bot bugs + improvements

Now that the bot is live, it will hopefully be easier for people to propose/improve upon it. We could hopefully create small bounties for these.

  • The proposal notification Title field is actually taking from description/rationale. There is a title field and it should be what is shown.
  • When announcing a new election cycle or stage, it would be nice for the bot to include a rough indication in human readable format of the time this stage will be active for. (ex. "This phase lasts for ~24h")
  • A reminder notification for highly important events, like election announce period would be great. The current announce period is 24h, so after the initial bot notification a reminder could be made at 16h to ensure people in different time zones are aware.

Joystream Community Call

Joystream Community Call

When

15:00pm UTC, 27th of August.

Duration

60 minutes.

How

We will use Zoom:

https://us02web.zoom.us/j/85258405364

Recording

We will record, and we may end up publishing an edited version on Joystream and/or YouTube in the future.

Privacy

If you are concerned about your privacy, just join with
your camera turned off, with a pseudonymous handle and if you also want to speak, you could use a distorter like VoiceMod.

Host

The hosts will be the following from Jsgenesis

  • Bedeho
  • Martin
  • Ben

Structure

  1. Introductions: everyone who wishes to give a brief introduction, please write your name in the chat, and you will get the mic.
  2. Point of Discussion: What is the best way to share our progress & plans?
  3. Questions&Answers + discussion.
  4. (If time permits) Show and Tell: Preview of new video consumer experience on Figma.

Questions&Answers

There were way too many questions for this one call, so we picked a few, then we can have some discussion based on those. Other questions will be addressed in later calls.

Firing of working group leads

As part of #111

Currently, we have rules agreed on by previous councils a year ago, specifically,
So far we have agreed that at this point (27 May) that if a storage provider is expired for a period of 24 hours or more, it can be kicked by the council.
https://testnet.joystream.org/#/forum/threads/35

As the rule is so old, it can't possibly apply to the current testnet, but we need to develop a similar agreed upon set of rules for where it is appropriate to fire a working group lead (ex. "if a WG lead is unresponsive for n days")

It may be that the council has to create a smoke signal to give some forewarning to a working group lead before any firing is enacted.

Community Bounty #2 - "Research and Testing of `polkadot-js extension`"

Description

After the upgrade, we have enabled the polkadot-js extension as part of Pioneer.

Reward

Up to $200 can be awarded, if all success events are completed in full.

Success Events

  1. OS and Browser tests performed
    • Are Linux, MacOS, Windows all supported
    • Are Firefox, Chrome, Chromium all supported
  2. Cross device tests performed
    • Does the plugin work cross device
    • Does it work cross device, cross OS and cross browsers
  3. Functionality tests performed
    • What keypair types are supported
    • What are the password requirements
    • Will a key generated for a specific chain/runtime work for other chains
    • Can you import raw seeds, mnemonic seeds and/or jsons
    • Can you create new seeds and or jsons
    • Can you export seeds and or jsons

Conditions

  • A report with the results is submitted as a PR to the Community Repo.

Annihilation

The report contains incorrect information.

Review Period

Once the Council submits the bot, by requests for review by @bwhm and @blrhc , Jsgenesis will grade and potentially increase the fiat pool, within 72h.

Status

Closed and completed with #67.

Council report improvements

Currently council reports are handmade, joystreamstats does a lot to make things easier but the general formatting of the council report is hugely time consuming.

The template needs to be cut down as the amount of text needed to convey a small amount of information is dramatic. It used to be workable when we had 10-20 proposals during a council term, but now we have more than 40 and it needs to be improved to work with any number of proposals.

Parts of these improvements are:

  • Do breakdown of proposals via table
  • Change overview to a table
  • Change minting information to a table
  • Change proposal overview to a table

Ideally there is maybe a way to get this information from joystreamstats so that less time is required on these reports.

Tokenomic report improvements

These are properties that are a bit difficult to currently work with, but can be added in future reports:

  • Video duration
  • Unique channels
  • Verified channels
  • Censored channels
  • Forum posts by subcategory
  • Total staked across platform
  • Avg. uploads per channel
  • Average time for proposal vote success:
  • Average overall time for proposal vote success:
  • USD backing

Rate sheet - WIP

The council has a variety of tasks like spot checks, tokenomics reports and council reports and council members (or people doing the work) can elect to use a spending proposal to ask to be paid for their work.

In order to attract more people into doing these tasks, it may be beneficial to have an agreed upon rate sheet for how much work goes into each task. Part of the difficulty in spending proposals seems to have been that people are uncomfortable with how many tokens to ask for, so by having this be standardized it may help.

The rates will probably change in relation to the size of the platform, but it would be good to have some standards that can be adjusted over time.

A very basic example which would just list out each task, maybe with the template/script to be used as well as the amount (including some allowance for overage if there is some unforeseen extra amount of work required):
Council Report - 250k tokens (+/- 20%)
Tokenomics report - 150k tokens (+/- 20%)

Script for auditing an account

We need a script that can take an address and output how much the account has spent in total
It should have the following features:

  • List out basic information like date of first + last transaction
  • Total number of transactions (ex. 243 transactions)
  • Total amount of tokens spent (ex. 6.34m JOY)
  • Average transaction amount (ex. "average transaction amount of 328k JOY)
  • Current balance
  • Itemized list of every transaction made (recipient, amount, date/time, blockheight)
  • The ability to enter a start + end blockheight to target specific periods of time (ex. between blocks 484000 and 512000, how many transactions were made)

This will become important with reward accounts and certain bounties and would help a great deal toward saving time

governance: process for managing creative bounties + competitions

Creative bounties are bounties that involve users doing creative work and submitting them as spending proposals. This is a difficult problem to solve as the council being creative may not be the best way of dealing with this.

One solution could be turn any creative bounty in the future into a competition. There are some difficulties with this as we currently don't have any good means of conducting votes from the community to pick the best submissions. One possible solution is to use discord in the interim while waiting for the forum poll tool to be released (which may take a substantial amount of time)

FM launch questionnaire - KPI 12.4

As stated in the KPI, the launch and first scoring period of the FM program is completed. The number of new community members has been (pleasantly) overwhelming, but it's clear that everything we've tried to communicate has not reached the entire community. It's also quite likely that there is lots of room for improvements in what was intended as well.

Every member of the platform that has submitted one or more summaries, before answering this questionnaire, will receive 5000tJOY!
Ideally, the Council should make these payments frequently, and request a refund from Jsgenesis.

Some (further) notes for the Council:

  1. Consider this a non-exhaustive list of question - the Council are free to add more!
  2. Feel free to make it multiple choice where applicable
  3. Jsgenesis must not receive or get access the "raw" data, we want to preserve the responders anonymity so they can answer "freely".
  4. The only "personal" data we want is the memberId and account of all responders.
  5. Make sure the report gives a good overview of the responses, so that we know roughly how many answered in a similar way.

New users only (and optional)

  1. How did you find us?
  2. Where are you from?
  3. Age bracket (18-24, 25-35, 36+)

All users

Submitting Summaries

  1. Did you experience any technical issues submitting your summary?
  2. What was the biggest challenge filling out your summary?
  3. How many times have you submitted?
  4. Did you know that you should only submit at the end of each scoring period?
  5. Did you know that you can submit your summary for scoring period 1 even after scoring period 3 is completed?

The Founding Members Program

  1. Were you aware of the referral program?
  2. Were you aware that the program is not over after the first scoring period?
  3. Were you aware that it's not enough to participate on the first scoring period only?
  4. Have you read the terms, rules and "procedures" in the Founding Member repo?
  5. What have you done to earn points thus far?
  6. What are you planning on doing to earn points in the future?

Joystream

  1. What do you think Jsgenesis (the company developing Joystream) will do after Joystream goes live on mainnet?
  2. Are you aware that we have many open bounties, that pays in tJOY?
  3. Did you know you can exchange your tJOY for Bitcoin Cash?

Joystreamstats.live - Timeline/Explorer view

Currently the Joystream stats site shows proposals very well, what would be an interesting thing to have (which might be quite labor intensive to make) is a timeline view of all proposals and important events on the platform. This is somewhat similar to the idea of a community calendar I posted about in the main Joystream repo: https://github.com/Joystream/joystream/issues/1106 although in this case would specifically be about events on the platform and not involve the community directly whereas the community calendar concept was oriented around users paying to list events.

Something like a Gantt Chart Timeline might work:
https://www.projectmanager.com/gantt-chart

But built with some of the tools a non-linear video editor (like Sony Vegas) has, meaning a user is capable of zooming in and out and customizing the view generated.

Promethease doesn't have a timeline view, but does have some interesting methods/UI of exploring data that might be a good set of ideas: https://files.snpedia.com/reports/promethease_data/genome_Lilly_Mendel_v4_ui2.html

Polkadot has a calendar feature which although similar is stymied by being cumbersome to use and only shows the events on a given day in a way which is not easy for users to understand: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/calendar

Some elements:

  • interactive, so a user can zoom in and out and change the scale of time (similar to a non-linear video editor)
  • sortable, so a user can include/exclude elements
  • inclusive of important events, such as proposal creation/duration to finalize, elections duration, new council events, hiring openings and other things.
  • some kind of weighting system to show events to be bigger visually (ex. a runtime upgrade is a big event compared to a spending proposal)
  • a way of allowing a user to look at a specific time period (ex. "what happened on the platform last March?")

This kind of view/tool would allow users to easily see the scale of time and events on the platform, and make it much easier to answer certain questions (ex. "how frequently are new storage leads hired?"). It is also a significantly easy way of communicating to new users of the level of governance activity on the platform (and will not really show community activity in any significant way).

Community Bounty #11 - "Design Community Repo Banner"

Tags

  • Design

Description

Most of the repos in the Joystream organization have branded banners in their README.md.

These were made a while back, when the project was in a different place, so some are now missing. We are in the process of making new ones for these, but for the Community Repo, we want the community to design one.

Examples of current ones in the Helpdesk:
https://github.com/Joystream/helpdesk/blob/master/roles/builders/img/builder_new.svg
https://github.com/Joystream/helpdesk/blob/master/img/helpdesk_new.svg
https://github.com/Joystream/helpdesk/blob/master/roles/img/roles_new.svg
https://github.com/Joystream/helpdesk/blob/master/roles/content-curators/img/content-curators.svg

Reward

USD 250.
USD 100 will be awarded to the entry that the Council approves, whereas an extra USD 150 will be awarded if it passes (potentially after some feedback) the critical eye of @bedeho.

Format

Jsgenesis proposes a "free for all" format.

Success Events

  1. Design a banner for the Community - USD 100.
    The Council will be allowed to approve up to three candidates, each awarded USD 100.

  2. If one (or more) of the designs are approved by @bedeho, each of them will be awarded an extra USD 150.

Conditions

  • The banner must be delivered in both .svg and .png format, in the same dimension as the existing ones.
  • The banner must be licensed as GPLv3
  • The banner is submitted as a PR to the Community Repo
  • The font and background could be the same, but doesn't strictly have to be. See Design Repo.

Annihilation

  • The banner violates any copyright or license.

Review Period

  • Up to 1 week, including feedback and iterations.

Status

See forum post

CM leaderboard

There are currently many council issues that are being worked on, a large part of this relies on having the community vote for effective CMs. Recent council reports started including CM participation rates, but this does not give a good overview. CM reports are problematic for this purpose because they could lead to a small crowd of known CMs participating, a leaderboard should include all actors who have ever participated in the council.

Creating a CM leaderboard would be a technically trivial way of getting across great data concerning CM participation. It should also be done in a way:

  • that doesn't punish CMs for not being active during all council sessions, if people are unavailable for 2-3 months, their score should be maintained.
  • that as well as including an overall average shows recent council sessions, so that an interested party can see whether the CM is improving or not
CM name Total CM sessions (total proposals) Average Participation Last council 2nd Last Council 3rd Last Council
bob 14 (84) 56.65% 72.1% (6 proposals) 42.1% (14 proposals) 12.1% (3 proposals)
alice 6 (43) 34.5% 62.1% (6 proposals) N/A 38.1% (3 proposals)
mike 5 (54) 12.3% 8.1% (6 proposals) 16.1% (14 proposals) N/A
  • The average participation for each CM would be taken from the following data:
    • The number of proposals made during session
    • The vote participation = the % of proposals a CM voted on during session
    • Taking vote participation and making it an average
  • Total CM sessions would be the total number of council sessions the CM has been voted onto, this would also include the total number of proposals this CM was present during
  • Last council could be expanded to be more like a quarterly score.

Council Secretary Workflow

This doesn't have a place on the community repo or forum just yet, but is a WIP so that this role is easier to do:

Council Secretary Workflow

This document serves as a basic workflow and overview of what the Council Secretary role involves. The council secretary is an informal role so unlike many other Joystream roles does not have fixed rewards or a fixed scope of work, so the workflow and responsibilities are heavily influenced by given KPIs and what happens during a particular council session.

Basic requirements & responsibilities:

  • Communicate with CMs and users, create threads and make sure everyone is aware of work that needs to be done or proposals that need to be voted on
  • Communicate with Jsgenesis, through proposals, forum and Telegram
  • Keep a close eye on Github updates concerning the operations of the council, proposals and coming updates
  • Help users to interact with the council and be aware of how proposals work
  • Identify limitations or potential improvements for reports, elections, proposals and try to improve upon these
  • Help push along the process of voting for proposals and elections
  • Help to communicate processes and workflow in a transparent manner as much as possible
  • Maintain a neutral stance as much as possible for everything

After new election is started:

  1. Create thread for council applicants to post introductions in
  2. Make people in Telegram aware and be helpful
  3. Pay attention to application/vote/reveal stages and communicate any needs to the userbase
  4. Make sure users are aware of potential benefits of participating in the council voting process
  5. Make sure users are aware of the best way they can apply themselves when it comes to Jsgenesis votes

After new council elected:

  1. Note the exchange rate at the start of council, produce figures corresponding to KPIs and dollar pool value
  2. Create proposal to elect council secretary
    • Include Github link
  3. Look through KPIs, produce forum thread breaking down each KPI and start discussion of each
    • Divide KPIs
      • Identify which require internal work
      • Identify which require external work (like KPIs that are dependent upon bounties)
      • Identify conditional KPIs (ex. a KPI which requires block production times, or a failure state for proposals being passed are conditional and not easily influenced by council)
  4. Add threads for any new community KPIs and close old community KPI threads.
  5. Regular checking on KPIs and making update posts in appropriate threads to ensure everyone is aware of what the current status of KPIs are
  6. Add thread for council round feedback

After council ends:

  1. Compile CM feedback from CM feedback thread
  2. Produce council report

Other Tasks:

  • Manage PRs on community repo
    • When approved by propposal or approved by ruleset, request review from Jsgenesis.
  • Periodic user feedback capture
    • If required, help to create threads and mechanisms for user feedback.
  • Periodic report generation
    • If required by KPIs, help to produce initial templates for reports and identify what important information needs to be shown at minimum.
  • Periodic lead feedback
    • If required by KPIs, help to create threads, proposals and reports to capture user feedback on lead role performance,
  • Rolling Github Community Repo proposals
    • Periodically collect outstanding PRs which have had no proposals made, and create a proposal listing them for the council.
    • Separate any problematic PRs and create separate proposals for them.
  • Github Issues
    • Create and manage Github issues
    • Periodically create Github issues to try and capture feedback on improving reports
  • Community KPI management
    • Help to make users of the platform aware of Community KPIs and be helpful on how to apply.

Overhaul of the KPI System

Rationale

After 11 weeks of KPIs, we at Jsgenesis are of the impression it's not working the way we had hoped. Though there are many smaller issues that may have contributed to the failure of the current system, we think the biggest problem is simply that incentives for KPIs are not calibrated correctly.

As the KPIs reward all token holders based on their proportional share of the tJOY issuance, it would only makes financial sense for true "whales" to participate without a substantially larger fiat pool. Even then, the "free-rider problem" could come in to play.

Our hope was that these issues would be mitigated through funding proposals and competition for Council spots, but that has proved to be incorrect.

Our main objective for the KPI system continues to be attracting and training contributors to the project, while simulating the economic system we envision the mainnet platform will run on. At this stage, all improvements to the platform (in the form of code, marketing, hiring etc.) will need to be funded and executed by the platform independently.

It is to serve this ultimate goal that we have suggested some enhancements to the KPI system, which are outlined below as a proposal which we hope the Council will carefully consider.

Description

An executive summary of our proposal to improve the system are as follows:

  • KPIs will be split in to "Council KPIs" and "Community KPIs".
  • Council KPIs:
    • These KPIs will typically focus on short terms goals, like network stability, platform operations and allocation of resources.
    • They will always follow the Council term (i.e. they will last for seven days)
    • The rewards for achieved Council KPIs will be distributed to the Council and their backers (voters) only.
  • Community KPIs:
    • These KPIs will typically be producing a deliverable or performing some task for the community or Jsgenesis.
    • These can be more long-term oriented, and require more work and some skills in a specific domain.
    • The reward structure will work similar to todays KPI system, but with a clear workflow, and with Jsgenesis providing a guarantee for the contributors.
  • Both of these KPI types will require more involvement from the Council, thus requiring better incentives for them to be active.
  • Jsgenesis will take a more involved in the election cycle, to avoid complacency and "free-riders".

More details below:

Definition of Terms:

  • "Applicant" - A person that wants to to do the work for a KPI
  • "Assignee" - A person that, after being an Applicant, gets approved, and may be given some privileges in line with agreed terms
  • "CM" - Council Member
  • "Deliverable" - Any item submitted either to the Council or Jsgenesis, with the intention of achieving the KPI.
  • "Submitter" - A person that submits a KPI deliverable to the Council

Council KPIs

Recurring KPIs, such as "Block Production", "Proposal Clearance" and "Council Reporting" are good examples of potential Council KPIs. Alongside managing the working groups and the platform finances, this constitutes an important part of the Councils main responsibilities.

The common theme is that these KPIs either directly or indirectly require the Council to monitor the network and Working Groups' performances, the platform finances, and pay attention to Proposals and discussions.

Suggested Changes

The Council KPI rewards will go to the "successful" election (governance) participants, ie. elected CMs and those that voted for them, proportional to their stakes.

As perhaps the most critical role at this stage of our testnets,the CMs will now earn rewards in two ways. A fixed and predictable reward for getting elected in the first place, and a performance best bonus for doing a good job.

Finally, Jsgenesis will take a far more active role in the voting process, and scrutinize the voting history and activity level of each applicant. The main purpose of this is to counter the "free-rider problem", by voting out CMs that doesn't perform their tasks satisfactory. Note that Jsgenesis voting will not count as "stake" wrt. to the KPI reward distribution.

Community KPIs

KPIs such as Content Creation (e.g. KPI 2.3) and the recurring Telegram Bots are good examples of a Community KPI. These KPIs can address issues outside of the platforms day to day operations, and focus on longer term goals such as development, community building, creating useful tools, etc. In general, these are perhaps better understood as bounties and/or competitions, so a name change could be in the cards.

Our thinking here was always that community members would try to attack these sorts of KPIs themselves, then through a series of Text and Funding Proposals, perform the work, and claim a reward.

This has worked slightly better than for the Council-style KPIs, but it is still far from perfect. All of the factors below deserve some of the blame:

  1. These KPIs have not been promoted sufficiently, neither inside nor outside of our community
  2. The Council has had no incentive to perform tasks themselves, nor search for people to assign them
  3. The funding structure we imagined have been poorly communicated - thus few know/understand it
  4. There was no explicit guarantee that your work would be rewarded by the Council in the end
  5. It requires some overhead, instead of just performing a task and claim the reward

The somewhat negative feedback loop meant that we were hesitant to put too much effort in creating these KPIs, which again made it less interesting for users.

Our suggestions below addresses most of these, but not the fifth. This is because we believe it's important to cultivate a system that mimics a workflow that is viable on mainnet.

Suggested Changes

In the new system, we rely on the increased incentives for the CMs to assist in setting the rules, creating a clear workflow and act as Project Managers. They are also the ones that decides what is submitted to Jsgenesis to be graded and rewarded. Note that Jsgenesis can overrule their decisions in situations if the "rules" are not adhered to. Especially in cases where a user spent time and resources in to something, without getting rewarded due to some mistake made by the Council.

Community KPIs may not have a deadline, but the prize and complexity may be adjusted if deemed necessary.

Rules

As the Community KPIs will vary in size, scope and reward, each time a new Community KPI is made, the Council must agree on the specific rules (this will be part of the Council's KPIs).

Reward Distribution

The Council decides how much of the total KPI 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 KPI. The Closed, Free For All and First Come, First Served formats presented are just suggestions.

Closed

For a KPI that requires investing lots of time and/or other resources, it may be reasonable to guarantee one or more Applicants that gets Assigned some time to complete all, or some, of the work, without having someone come in and "snipe" the reward.

Free For All

For smaller, and perhaps more creative and subjective KPIs, 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.

First Come, First Served

For smaller, perhaps more time sensitive KPIs, one could choose a format where anyone can enter, but each Submitters Deliverable is reviewed by the chronological order they are submitted. The first acceptable Deliverable(s) is granted the reward(s).

Further

In addition the varieties outlined, other formats can be defined and chosen if they are more appropriate for a specific KPI.

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, and must be established beforehand.

  • For "Closed" formats, an Applicant must present a bid why they should be assigned the given KPI. 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 KPI 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 Applicant's application for participation.

Steps

1. New KPIs Made

Although the Council decides on the rules and reward distribution, they listen for input from others in the platform forum and on Telegram. Within a reasonable time (as stated in the Council KPI), the rules for the KPI are presented in Text Proposal, voted through, and published on GitHub.

1.5. Work is Assigned

Depending on the rules chosen, there may be a step to assign the work to one or more Assignees.

This will require some back and forth through multiple Proposals, and should thus be avoided for less complex KPIs.

2. Work Happens

For a "Closed" format, it can mean a series of Text and Funding Proposals, waiting, and ongoing communication between the Assigned/Assignees, and the CMs.

For a "Free for All", it can be mean reviewing submitted Deliverables as they come in, or waiting for the deadline. How a Submitter should make the CMs aware of their Deliverable once ready (GitHub, Telegram, forum or Proposal) must be defined in the rules. A "First Come First Served" format will be similar to the "Free for All". Once one or more Deliverables are approved, the Submitter(s) should be considered as Assigned in Step 3.

3. The Work is Submitted to the Council

Regardless of format, once an Assignee, or otherwise qualified Submitter, considers their work done, they create a (final) Spending Proposal, which in total rewards them the agreed amount, links to all relevant discussion and rules, and a link to their work.

Once the Council considers the Deliverables complete, this final Spending Proposal is "approved" and successfully executed.

4. Jsgenesis Grading

After Step 3, the Submitter have received their reward, and their work now "belongs" to the platform.

Jsgenesis will then review and grade the Deliverable as such. This can result in a reward anywhere between nothing (failed), or everything (full score), and the fiat pool will be increased accordingly.

It may be that this reward is smaller than what was rewarded to the Submitter. This will cost the token holders, and one would expect the Council to be punished.

Councils Role

As seen in the workflow, the Councils role in the Community KPIs is substantial. They will work as the Project Managers, and are at the end held accountable for the quality of the Deliverable they submit for grading. These tasks may be a part of the Councils KPI directly, but the efficiency, creativity, rules, workflow, speed and outcome of the process will anyway be part of the Jsgenesis Council voting process.

Community Bounty #5 - "Joystream Telegram Sticker pack"

Description

Create a Joystream branded sticker pack for Telegram.

Telegram allows for custom sticker packs to be made. These can spice up the conversation a little, and allows the Joystream Community to let their creativity and design show!

Reward

Up to $400 when first opened 12.11.20 with three success events.
Note that new success events can be added, after event 1 is complete, and sets the parameters. This may also lead to adjusting the rewards

Success Events

The first needs to be completed before the terms, rules and specifics can be determined.

  1. Provide details on how to create a sticker pack on Telegram - $100:
    A report answering the following questions is made:
    • What are the steps involved for creating a sticker pack?
    • Are there any costs associated with this?
    • How should this bounty be organized?
  2. Produce a sticker pack with at least 10 Joystream branded/related stickers - $300 (max):

Conditions

  • Artwork is made available in the Community Repo
  • Must be in good taste, and related to the project
  • Grading for success event 2 will be highly subjective.

Annihilation

Stickers contain artwork that violates any licenses or copyrights.

Review Period

Once the Council submits the report from success event 1, and @bwhm and @blrhc is assigned to review, Jsgenesis will grade within 72h, and update for the next event(s).

Status

Open.

Community Bounty #13 - "Research, Document and Create Example for, Discord Bots"

Tags

  • Research
  • Coding

Description

As we have transitioned our main community chat from Telegram over to Discord, bots should be moved to the same location. This requires some research, and examples for the Community.

Reward

USD 200

Format

Jsgenesis proposes a "Closed" format.

Success Events

  1. Research, and produce a document outlining all steps required to make a Discord bot - USD 100
    The purpose here is to make the experience for developing Discord bots in the future easier.

  2. Make a simple example bot, that whenever tagged, responds with Hello @user - USD 50

  3. Document the exact steps required for deploying this bot on our Discord - USD 50
    This means step by step deployment, including getting API tokens.

Conditions

  • The source code is licensed under GPLv3.
  • The bot builds is written in typescript.
  • As soon as the Council approves the (final) spending proposal, a PR with all the source code is made to this Repo.

Annihilation

  • If the Council submits a bot containing malicious code for review by Jsgenesis, the Council will be deducted the total amount requested for the Bounty.

Review Period

  • Up to 1 week, including feedback and iterations.

Status

Open.

Script for listing recent uploads and actions

Based on a discussion with @freakstatic we probably need a script soon to make the job of the curator lead easier, the script should be able to:

  • Take a start and end blockheight and list out all videos uploaded
  • List out any moderation actions taken
  • Include a link to all videos and basic metadata (upload title, uploader name)

Community Bounty #1 - "Update Telegram Bot"

Note
Updated reward and deadlines.

Description

As the old bot is not compatible with the new joystream-types, it needs to fixed as soon as possible.

Reward

Up to $150$300 can be awarded, if all success events are completed in full.
After 20.10.2020 - 00:00 UTC, the reward drops by USD 10 each day after that.
Deadline: 01.11.20

Success Events

The success events are listed in order of priority. If the Council chooses to break up the bounty in pieces (and request review/funding for each/some separately), it should done in this order.

  1. The existing bot is upgraded to function with the new types - $100$150
    • The first, and most important, step is simply to make it work like it used to do.
    • This would just mean fixing the previously deployed bot.
  2. The bot is re-written in typescript - $50$75
    • We want all of our API related source code written in typescript (and being typesafe).
    • This will make it easier to maintain and update, when new joystream-types are deployed.
  3. The 'bug' associated with the finalization of Proposals are fixed - $50$75
    • As this bug is easier to fix if the bot was written in typescript, this gets priority over 2.

Conditions

  • The source code is licensed under GPLv3
  • As soon as the Council approves the (final) spending proposal, a PR with all the source code is made to this Repo
  • This includes complete, step by step, instructions for deploying the bot.

Annihilation

If the Council submits a bot containing malicious code for review by Jsgenesis, the Council will be deducted the total amount requested for the Bounty.

Review Period

Once the Council submits the bot, by requests for review by @bwhm and @blrhc , Jsgenesis will grade and potentially increase the fiat pool, withing 72h.

Status

Open.
Once the Council makes a post on the forum, a link will to the post will be added.

Informal role hiring process

  • Text proposal is made outlining role, salary, conditions, reporting requirements (and also possibly a deadline or minimum number of applications)
  • If approved a thread is opened for applications
  • Any current council member can choose any application they feel would be best and submit a spending proposal to start the first salary payment. The first proposal that is executed would be the accepted application.
  • The worker can then create a spending proposal themselves to get subsequent payments
  • The worker can be fired by executed text proposal

Gitbook for rules and processes

The Joystream handbook (https://github.com/Joystream/handbook) is a largely technical document that explains how various features of the platform work. We need to look at creating a Gitbook on the community repo that begins to list out various rules/standards and expectations.

Some things to think about:

  • Overview / table of contents
  • Structure of each "department" of the platform
  • Some "good practices" explanation for submitting spending proposals correctly

We currently use the forum for writing some of the guide documents which isn't ideal, so this Gitbook could replace that and serve as a central place for users to obtain useful information.

This Gitbook may be related to the Constitution although I'm not clear on whether these would be the same thing just yet:

joystreamstats addition: "price of vote"

To calculate the "price of vote" we take the total amount staked (voter + own stake) and divide it by the total number of votes placed on all proposals during a session.
Example: For a recently council term, there was 82075100 JOY staked for the council election, and there were 202 votes made by CMs on proposals. This puts the price of vote at 406312 JOY.

From this calculation we can then determine how much a CM is worth in terms of "price of vote". So if a CM has a combined stake of 510000, we divide this by the price of vote (406312) to get 4.

After a Council term is over, we can look at how many times a CM voted on proposals and determine whether the amount of their stake is consistent with price of vote.

Sample table:
image

Other additions that would be useful to show:

  • The ratio of CM ownstake:voterstake both for the entire council and individual CMs
  • Price of Vote for both ownstake + voterstake

Community Bounty #9 - "Repo/Documentation Improvements"

Tags

  • Research
  • Testing
  • Proofreading
  • Coding

Description

As the repos are updated, it's difficult to avoid introducing broken links, errors with images, grammar mistakes, formatting errors, etc. in the README.md files. This makes it difficult to navigate, and adds friction for readers.

Note that this applies to ALL the README.md files, not just the top level one. Also note that although finding bugs in our code would always be highly rewarded, it is outside the scope of this Bounty, where only the README.md are to be reviewed.

Reward

Per correction/fix:

  • Broken links: USD 3

  • Grammatical error*: USD 2

  • Formatting error: USD 2
    Improvements:

  • Incorrect information: USD 5 (per fix)

  • Expanding or elaborating on incorrect or incomplete information/instructions: 10 USD (per section)

  • Adding new documentation**: USD 50

  • * This doesn't include changing between British and US english

  • ** Only for the parts specified in the Success Event 2

Format

Jsgenesis suggests a "free for all" format.

Steps for participants:

  • Once you have found something, fork the repo, and make the changes on your branch.
  • Push your changes, and make a PR with the fixes.
  • Request a review in the forum thread(tbd) from the Admin(tbd).
  • Request a review from @bwhm or @blrhc.
  • Once the PR is merged (this may be an iterative process), create a spending proposal based on the then prevailing exchange and the sum of the merged changes.
  • Include a link the PR.

Success Events

  1. For each of the repos below, make a PR improving the docs/guides:
  1. Add to the documentation for the following sections of the repos:
  • helpdesk
    • Add a guide for using the CLI for the Validator role.
  • joystream-api-examples
    • Update the repo to use the newest types, and make examples for how to use the API to:
      • Fetch historical data from an archival node (proposals and validators)
      • Get information from events (must be combined with historical data)
      • How to get all data from double maps
    • Note that this (outdated and incomplete) draft PR may be of help.

Conditions

  • The fixes are submitted as a PR to the respective repositories
  • All fixes are licensed in line with the respective repositories

Annihilation

Any "fixes" that introduces bugs, anything maliocous or clearly incorrect information.

Review Period

Once the Council approves the PR, by linking to the PR in this issue, and tagging @bwhm and @blrhc, Jsgenesis will grade and potentially increase the fiat pool, within 72h. If the PR contains code, up to a week must be expected.

Status

See forum post

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.