Git Product home page Git Product logo

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

gleev's People

Contributors

0xvolodya avatar attemka avatar bedeho avatar coollaitar avatar dmtrjsg avatar drillprop avatar dzhidex avatar eldiegod avatar ghhrmnzdh avatar iamnamananand996 avatar kdembler avatar kosorz avatar lcoenengithub avatar mikkio-j avatar mnaamani avatar mochet avatar rafalpawlow avatar semeano avatar thesan avatar toiletgranny avatar traumschule avatar wradoslaw avatar zeeshanakram3 avatar zk3dev avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

gleev's Issues

Update Segment ID

Context

Re-enabling segment for Gleev Dev and Gleev Prod. I have set up the instance managed by the DAO.

Scope

Gleev Prod

gleev.xyz

Update ID in the analytics snippet to 9lXiUP3CB0GCN5KJ1zdUg4m813AjQATB

Full snippet

<script>
  !function(){var i="analytics",analytics=window[i]=window[i]||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","screen","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware","register"];analytics.factory=function(e){return function(){if(window[i].initialized)return window[i][e].apply(window[i],arguments);var n=Array.prototype.slice.call(arguments);if(["track","screen","alias","group","page","identify"].indexOf(e)>-1){var c=document.querySelector("link[rel='canonical']");n.push({__t:"bpc",c:c&&c.getAttribute("href")||void 0,p:location.pathname,u:location.href,s:location.search,t:document.title,r:document.referrer})}n.unshift(e);analytics.push(n);return analytics}};for(var n=0;n<analytics.methods.length;n++){var key=analytics.methods[n];analytics[key]=analytics.factory(key)}analytics.load=function(key,n){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.setAttribute("data-global-segment-analytics-key",i);t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(t,r);analytics._loadOptions=n};analytics._writeKey="9lXiUP3CB0GCN5KJ1zdUg4m813AjQATB";;analytics.SNIPPET_VERSION="5.2.0";
  analytics.load("9lXiUP3CB0GCN5KJ1zdUg4m813AjQATB");
  analytics.page();
  }}();
</script>

Gleev Dev

dev.gleev.xyz

ID = iXklyT4Q7uPScKfpodCMjhwkqGtEHNWo

Full snippet

<script>
  !function(){var i="analytics",analytics=window[i]=window[i]||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","screen","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware","register"];analytics.factory=function(e){return function(){if(window[i].initialized)return window[i][e].apply(window[i],arguments);var n=Array.prototype.slice.call(arguments);if(["track","screen","alias","group","page","identify"].indexOf(e)>-1){var c=document.querySelector("link[rel='canonical']");n.push({__t:"bpc",c:c&&c.getAttribute("href")||void 0,p:location.pathname,u:location.href,s:location.search,t:document.title,r:document.referrer})}n.unshift(e);analytics.push(n);return analytics}};for(var n=0;n<analytics.methods.length;n++){var key=analytics.methods[n];analytics[key]=analytics.factory(key)}analytics.load=function(key,n){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.setAttribute("data-global-segment-analytics-key",i);t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(t,r);analytics._loadOptions=n};analytics._writeKey="iXklyT4Q7uPScKfpodCMjhwkqGtEHNWo";;analytics.SNIPPET_VERSION="5.2.0";
  analytics.load("iXklyT4Q7uPScKfpodCMjhwkqGtEHNWo");
  analytics.page();
  }}();
</script>

Idea: YPP voting system

Problem

https://twitter.com/SatoshiFlipper/status/1687497168393777152
Quality control of content, or judging content is a very difficult thing to do.

The way YPP currently runs is that channels apply and are manually approved based upon their social metrics and content focus (crypto). This means that the type of content allowed is very restrictive and it also means that our platforms "quality" is being defined by these channels. Crypto video content creators are highly incentivized by airdrops, competitions and other means to artificially inflate their metrics which means the current "grading" of channels is extremely limited--when the channel metrics are bypassed it has been said by some in our community that fake or poor quality engagement can be spotted in as little as 1-2 minutes (https://discord.com/channels/811216481340751934/812343711870091285/1137024409840926800) and there have been some observations about the quality of engagement on channels:

"Sure, what I did was open a random YouTube channel from the last reward batch and immediately noticed that it appears to have 99% fake comments. Here's the link: https://www.youtube.com/watch?v=NGY42N4YEsQ On my first try, I found this issue. You can use a translator to check the comments section, but if you know what to look for, they really don't seem genuine." - 0x2bc (https://discord.com/channels/811216481340751934/1053294778529353788/1136233967981437039)

Some of our community members as well as one current election applicant have also stated similar:

"I am doing some research currently. I think I will be able to identify 100-150 CIS channels who are doing such yt abuse this term" - leet_joy (https://discord.com/channels/811216481340751934/812343711870091285/1137078740766162954)

"now gleev has too many scam videos which nobody watches. nevertheless, authors of this kind of content are getting paid for this trash. these videos take a lot of storage space => SPs need to run new servers => council needs to increase SPs salaries => $JOY is falling. for what? for keeping scam content on gleev. my goal is to reduce costs on junk content storage which 1) makes gleev more attractive and useful for new users and content creators 2) keeps $JOY rate from falling." - svasilenko election candidacy note (https://pioneerapp.xyz/#/election?candidate=0000002p)

Simultaneous to this we are turning away content creators who seem genuinely interested and may prove to be of high value to the platform (https://discord.com/channels/811216481340751934/813361923172335648/1138234736247066685).
From the channels that have been approved for YPP it appears that few of them have "engaged" with the community in any substantial way so far. It also appears from some applicants communications that there is a sense that being approved for YPP is a given - while there have been some videos creators have made showing their onboarding to YPP it gives a sense that the YPP approval is mostly autonomous and that these channels aren't engaging with the DAO community--who will eventually be in fully control of rewarding all types of content on the platform.
While a DAO operated YPP has been investigated it appears that given resource and personnel restraints that this is not going to be easy to do currently, it also is the case that we do not have many compelling apps utilizing Joystream and that the complexity of operating two distinct YPP programs would likely act as a net negative for current growth initiatives.
Additionally, we have resource constraints (server capacity) that must be adhered to for Joystream to be successful, while there have been some recent changes to make sure particularly large channels can be avoided there isn't much sense so far of being able to throttle the number of channels that get approved nor is there much social excitement surrounding approved channels.
The DAO community is also not proactively involving itself (or doesn't have the capability to do so) with the YPP channels that get approved - in the long term the DAO community needs to take ownership of the type of content it would would like to see on the platform--this decision is a difficult but integral one that will dictate the type of content that in the future that is not only uploaded and potentially rewarded but forms the basis of Joystream's culture which will be formed by content creators.

Solution

For all types of content, replace the current manual approval process for YPP channels from JSG with a dashboard that a chosen subset of Joystream community members utilize to vote channels for approval. This would mean expanding beyond crypto content.
As a starting point, I would recommend that the council be requested to submit a proposal listing 10 active, trustworthy users who are given voting permissions. This can be changed later on.

  • The dashboard would list all channels that apply for YPP along with some metrics from the channel and a link so that the voting users can take a glance or an in-depth look at the channel and decide whether to vote for it or not. The dashboard would also list more general metrics about how many channels are submitted so far (these are very much things that people screenshot and share on social media!)

image
image

  • Users would be able to click any of the channels on the dashboard and see the current number of votes along with the rationale from voters.

image

  • For users that are approved would click to vote for a chosen the channel and include a rationale that would be submitted as a metaprotocol/remark transaction.

image

  • If a channel gets enough votes to pass a preset threshold, the channel gets approved for YPP rewards and syncing. Alternatively a time interval which is something like "the highest voted channel per 24h interval is approved"

Inspiration + Benefits

Mirror.xyz executed something very similar to this some time ago and it was massively successful--it resulted in an extremely high grade of content for the most part and also generated intense discussion from the community and wider social media & web3 users as well as resulted in very proactive participants.
*"$WRITE RACE is a weekly showdown between people joining the Mirror DAO. The community votes for who gets DAO membership next. At the end of each 2 hour round, the top 10 people are airdropped one $WRITE token, which can be redeemed for Mirror membership, a subdomain, and future community perks." - https://mirror.xyz/race

Some examples of engagement that $WRITE Race generated:

I fully believe that utilizing such a system to approve YPP channels would serve Joystream well into the future (it can be carried on after JSG's YPP program ends) and it would help with our outreach and marketing initiatives to have people being excited about how many votes their channel currently has--it would be amazing to see content creators asking their audiences to vote for their channel to be approved for YPP using social media and could immensely help with awareness of our platform.

Most importantly it will allow for the DAO community to be proactive and have a say about the types of content it wants to have and reward on the platform--this is hugely important to fostering a community of content creators who are actively engaged with our platform and who make high quality content and is something that is simply not achievable by relying upon YouTube metrics entirely.

CRT Onboarding video Brief

Context

The DAO council agreed for Robert to help us with creating onboarding videos for the Creator Tokens feature.
Link to proposal>

Link to Designs

This may help to have it handy to have all workflows at hand

LINK TO FIGMA>

Test Environment

URL: https://atlas-git-crt-joystream.vercel.app/
Make sure to select Atlas-next network
Screenshot 2024-03-06 at 21 07 50

Account: Use Alice (exported JSON will be attached here:
Import this account via JSON import to Polkadot extension
5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY.json
Pass: Passw0rd123

And create a new channel for which you can mint the CRTs

Scope

Phase 1

Task 1

Create Onboarding video for the landing page of CRT module
Screenshot 2024-03-04 at 15 58 57

To produce the onboarding video for creator tokens landing page, highlighting the main value proposition, explaining the benefits and showcasing parts of the flow aimed on helping creators to engage with the CRT feature.

The video will be professionally edited, showcasing parts of the CRT Gleev flow and explaining the concepts and features of CRTs, namely:

Concept of CRT / benefits for creators / benefits for community (buyers)
Feature of customising CRT page
Feature of Setting patronage for the channel
Feature of minting and selling tokens on AMM
Feature of Revenue Share

⚠️ Core value proposition for creators:

  • Creators can mint then sell their minted token on the AMM, subject to buyers first buying some tokens form the AMM

  • More engaged viewers

  • (next release/ near future, creators can sell their minted tokens directly to viewers or reward their loyal fans by transferring some of their tokens)

⚠️ Core value proposition for viewers:

  • Viewers become co-owners of the channel, own part of its assets
  • Viewers receive part of the channel revenue share by buying tokens (from YPP, NFT sales and DAO content rewards and any other revenue in the future)

Task 2

Create Onboarding videos explaining the concepts in the onboarding flow

src="https://github.com/Joystream/gleev/assets/93924525/7ba10ea1-6132-4d79-aeff-669c76d131d9">
<img width="1176" alt="Screenshot 2024-03-04 at 16 01 23"

Phase 2

Additional videos covering

AMM vs Public Sale Explanation (NB: public sale is out of scope for the first release)

Screenshot 2024-03-04 at 16 01 01

Token creation flow and zooming in on the parameters

Screenshot 2024-03-04 at 15 59 11 Screenshot 2024-03-04 at 15 59 43 Screenshot 2024-03-04 at 16 00 07

Problem: Gleev links don't display the image

Description

  1. 'X'

  • When publishing links to the Gleev page, to YPP and to individual channels, on "X" these links do not display the image.
    2024-03-28_15-36-01
    2024-03-28_15-44-07
  • Meaning the image that we have for example in the link to https://www.joystream.org
    2024-03-28_15-33-55
  • That said, the images in the links to the individual videos posted on "X" are also available
    2024-03-28_15-41-50
  1. 'CoinMarketCup'

  • However, the images in the links to the individual videos posted on "CoinMarketCup" no longer display images at all
    2024-03-28_15-46-15
  • On this site it would be great to have such links that are formed for example when posting videos from YouTube
    2024-03-28_15-46-45
  1. Importance

  • In anticipation of the start of the second phase of the Ambassador Program, it makes sense to improve the quality of our links as it is very likely that a large number of Ambassadors will use them!
  1. Suggestion

Figma link

No response

How urgent this is?

It's blocking me right now

Problem: email requirement for signup

Problem

Currently, the new signup flow for Gleev completely removes the option for new users to sign up with wallets (requiring the email/password flow), and also mandates that users with preexisting channels fill in an email address. This has been unpopular with some users who would rather use a 100% wallet flow when using Gleev:

"I won't give my email out of principle. This is not web3. Don't care for notifications. Let me connect with my wallet and signature. It is me. Email should be opt in. Not cool with that." - https://discord.com/channels/811216481340751934/812344859921743872/1141369952532693052

"thanks. If i can sign in with my wallet, why am I required to give my email? All it says is "please provide your email to stay up to date on everything Gleev" but it's not optional. You have to give it. If you say no, then it won't even log you in, even though I already signed the login with my wallet." - https://discord.com/channels/811216481340751934/813361923172335648/1133885845049462925

"You have no access to your wallet accounts anymore without registering via email. This is bad." - https://discord.com/channels/811216481340751934/1035122985905954868/1133029350359449723

  • We already have a wide variety of users, and forcing an email signup, whilst attractive for being very easy to use can dissuade more advanced users who would rather have 100% control of their accounts via a wallet they have chosen.
  • This is also equally important for advanced users who want to move/exchange assets or interact with NFTs via their wallets. Although we do not currently have wallets that support these features it is possible that in the future we will (i.e. "I am a user with a Joystream NFT and I want to move it to a different network).

Solution

  • Give users the choice between email (easy) or wallet (advanced users)
  • Do not require wallet users to provide an email address
  • Do not require wallet users to use the email/password flow and let them just sign up using a wallet

Idea: About Page

Currently Gleev has an unclear purpose to a new user, there is no statement on the site that clarifies what kind of content it is for.

Many sites include an about page for this purpose, so Gleev really needs one.

Currently the best written definition of Gleev's intended purpose I have found is:
Gleev has its sole focus on the Web3 and Crypto content vertical, bringing together the like-minded creators and viewers around the shared passion of the present and the future of Crypto affairs.

This definition could be refined on the about page and made a bit easier to parse.

I have heard this issue being bought up by some users also, as it is quite a challenge for new users to understand what Gleev is, what its relationship with Joystream is etc.

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.