├── .gitbook └── assets │ ├── Token Allocation (1).png │ ├── Token Allocation-Updated.svg │ ├── Token Allocation.png │ ├── figure-1.svg │ ├── figure-2.png │ ├── figure-2.svg │ ├── figure-3.svg │ ├── xkcd-dependency (1).png │ └── xkcd-dependency.png ├── .github ├── mk-pantry-accessible.sh └── workflows │ ├── cd.yml │ ├── ci.yml │ ├── make.yml │ └── release.yml ├── .gitignore ├── .markdownlint.json ├── Makefile ├── README.md ├── SUMMARY.md ├── i18n ├── es │ ├── metadata.yml │ └── white-paper.md ├── pt-br │ ├── metadata.yml │ └── white-paper.md └── vi │ ├── metadata.yml │ └── white-paper.md ├── img ├── figure-1.svg ├── figure-2.svg └── figure-3.svg ├── metadata.yml ├── tea.csl └── white-paper.md /.gitbook/assets/Token Allocation (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaxyz/white-paper/7aa3cf5aef40ce0fc0dbd411035cdffe5a91e3a6/.gitbook/assets/Token Allocation (1).png -------------------------------------------------------------------------------- /.gitbook/assets/Token Allocation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaxyz/white-paper/7aa3cf5aef40ce0fc0dbd411035cdffe5a91e3a6/.gitbook/assets/Token Allocation.png -------------------------------------------------------------------------------- /.gitbook/assets/figure-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaxyz/white-paper/7aa3cf5aef40ce0fc0dbd411035cdffe5a91e3a6/.gitbook/assets/figure-2.png -------------------------------------------------------------------------------- /.gitbook/assets/xkcd-dependency (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaxyz/white-paper/7aa3cf5aef40ce0fc0dbd411035cdffe5a91e3a6/.gitbook/assets/xkcd-dependency (1).png -------------------------------------------------------------------------------- /.gitbook/assets/xkcd-dependency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaxyz/white-paper/7aa3cf5aef40ce0fc0dbd411035cdffe5a91e3a6/.gitbook/assets/xkcd-dependency.png -------------------------------------------------------------------------------- /.github/mk-pantry-accessible.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | git config --global url."https://teaxyz:$1@github.com/teaxyz/pantry".insteadOf "https://github.com/teaxyz/pantry" 4 | -------------------------------------------------------------------------------- /.github/workflows/cd.yml: -------------------------------------------------------------------------------- 1 | name: CD 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | paths: ['i18n/**'] 7 | 8 | env: 9 | TEA_SECRET: ${{ secrets.TEA_SECRET }} 10 | 11 | jobs: 12 | cd: 13 | uses: ./.github/workflows/make.yml 14 | with: 15 | upload: true 16 | secrets: inherit 17 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | pull_request: 5 | paths: 6 | - white-paper.md 7 | - metadata.yml 8 | - 'i18n/**' 9 | - 'img/**' 10 | - .github/workflows/ci.yml 11 | - Makefile 12 | 13 | concurrency: 14 | group: ${{ github.ref }} 15 | cancel-in-progress: true 16 | 17 | jobs: 18 | compile: 19 | uses: ./.github/workflows/make.yml 20 | secrets: inherit 21 | -------------------------------------------------------------------------------- /.github/workflows/make.yml: -------------------------------------------------------------------------------- 1 | name: make 2 | 3 | on: 4 | workflow_call: 5 | inputs: 6 | release: 7 | default: false 8 | required: false 9 | type: boolean 10 | upload: 11 | default: false 12 | required: false 13 | type: boolean 14 | 15 | env: 16 | TEA_SECRET: ${{ secrets.TEA_SECRET }} 17 | 18 | jobs: 19 | make: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v3 23 | - run: | # Use on-box make until tea/pantry revlock is resolved 24 | sudo apt-get update 25 | sudo apt-get install \ 26 | texlive-latex-base \ 27 | texlive-fonts-recommended \ 28 | texlive-fonts-extra \ 29 | texlive \ 30 | texlive-latex-extra \ 31 | texlive-xetex 32 | eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" 33 | brew install \ 34 | pandoc \ 35 | pandoc-crossref \ 36 | librsvg 37 | #FIXME: Can't pass secrets to remote-branch CI, so this is until teaxyz/pantry is public 38 | sed -ne 's/^# tea\/white-paper \([0-9]*\.[0-9]*\.[0-9]*\)/VERSION=\1/p' README.md >> $GITHUB_ENV 39 | - run: | # install noto fonts for translated pdfs 40 | sudo apt-get install fonts-noto fonts-noto-cjk 41 | # - run: .github/mk-pantry-accessible.sh ${{ secrets.TEMP_JACOBS_GITHUB_PAT }} 42 | # - uses: teaxyz/setup@v0 43 | 44 | - name: Set Version - Release 45 | if: ${{ inputs.release }} 46 | run: echo "- \fancyfoot[L]{$VERSION}" >> metadata.yml 47 | - name: Set Version - CI/CD 48 | if: ${{ !inputs.release }} 49 | run: | 50 | date=$(date '+%Y%m%d') 51 | echo "- \fancyfoot[L]{$VERSION+$date}" >> metadata.yml 52 | 53 | # - run: tea make 54 | - run: | # Use on-box make until tea/pantry revlock is resolved 55 | eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" 56 | make 57 | - uses: actions/upload-artifact@v3 58 | with: 59 | name: tea.white-paper 60 | path: | 61 | tea.white-paper.pdf 62 | tea.white-paper_??.pdf 63 | 64 | # Following steps only run for upload: true 65 | - name: AWS credentials 66 | if: ${{ inputs.upload }} 67 | uses: aws-actions/configure-aws-credentials@v1 68 | with: 69 | aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} 70 | aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} 71 | aws-region: us-east-1 72 | 73 | - name: Bundle translations 74 | if: ${{ inputs.upload }} 75 | run: | 76 | mkdir white-papers 77 | cp tea.white-paper_??.pdf white-papers/ 78 | - name: Bundle release 79 | if: ${{ inputs.upload && inputs.release }} 80 | run: cp tea.white-paper.pdf white-papers/ 81 | 82 | - name: Upload to S3 83 | if: ${{ inputs.upload }} 84 | run: | 85 | aws s3 sync \ 86 | ./white-papers s3://www.tea.xyz/ \ 87 | --metadata-directive REPLACE \ 88 | --cache-control no-cache,must-revalidate 89 | - name: Invalidate cache 90 | if: ${{ inputs.upload }} 91 | run: | 92 | aws cloudfront create-invalidation \ 93 | --distribution-id ${{ secrets.AWS_CF_DISTRIBUTION_ID }} \ 94 | --paths / /tea.white-paper*.pdf 95 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | permissions: 4 | contents: write 5 | 6 | on: 7 | push: 8 | branches: [main] 9 | paths: [README.md] 10 | 11 | env: 12 | TEA_SECRET: ${{ secrets.TEA_SECRET }} 13 | 14 | jobs: 15 | check: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - uses: actions/checkout@v3 19 | - run: .github/mk-pantry-accessible.sh ${{ secrets.TEMP_JACOBS_GITHUB_PAT }} 20 | - uses: teaxyz/setup@v0 21 | - id: rev-parse 22 | name: did we already publish this version? 23 | run: | 24 | # fetch tags since actions/checkout is a shallow checkout 25 | git fetch --prune --unshallow --tags 26 | 27 | if git show-ref --tags v$VERSION --quiet; then 28 | echo "::set-output name=result::cancel" 29 | fi 30 | 31 | - uses: andymckay/cancel-action@0.2 32 | if: ${{ steps.rev-parse.outputs.result == 'cancel' }} 33 | 34 | make: 35 | needs: [check] 36 | uses: ./.github/workflows/make.yml 37 | with: 38 | release: true 39 | upload: true 40 | secrets: inherit 41 | 42 | release: 43 | runs-on: ubuntu-latest 44 | needs: [make] 45 | steps: 46 | - name: Tag Release 47 | uses: rickstaa/action-create-tag@v1 48 | with: 49 | tag: ${{ env.VERSION }} 50 | - name: Release 51 | uses: softprops/action-gh-release@v1 52 | with: 53 | tag_name: ${{ env.VERSION }} 54 | files: | 55 | tea.white-paper.pdf 56 | tea.white-paper_??.pdf 57 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pdf 2 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "MD012": false, 3 | "MD013": false, 4 | "MD025": false 5 | } -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: all 2 | .PHONY: i18n 3 | .PHONY: clean 4 | 5 | translations := $(patsubst i18n/%/white-paper.md,tea.white-paper_%.pdf,$(wildcard i18n/*/white-paper.md)) 6 | 7 | all: tea.white-paper.pdf $(translations) 8 | 9 | tea.white-paper.pdf: white-paper.md metadata.yml tea.csl img/* 10 | pandoc \ 11 | --number-sections \ 12 | --output $@ \ 13 | --metadata-file metadata.yml \ 14 | --filter pandoc-crossref \ 15 | --csl=tea.csl \ 16 | --citeproc \ 17 | $< 18 | 19 | i18n: $(translations) 20 | 21 | tea.white-paper_%.pdf: i18n/%/white-paper.md i18n/%/metadata.yml tea.csl img/* 22 | pandoc \ 23 | --number-sections \ 24 | --output $@ \ 25 | --metadata-file i18n/$*/metadata.yml \ 26 | --filter pandoc-crossref \ 27 | --csl=tea.csl \ 28 | --citeproc \ 29 | --pdf-engine=xelatex \ 30 | --variable mainfont="Noto Serif" \ 31 | $< 32 | 33 | clean: 34 | rm -f tea.white-paper*.pdf 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # README 2 | 3 | The tea white paper is a [semantically versioned](https://semver.org), [Markdown](https://daringfireball.net/projects/markdown/) document. New releases are deployed to Gitbook. 4 | 5 | ## Contributing 6 | 7 | If you have general feedback, please open a [discussion](discussions/) thread. 8 | -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Table of contents 2 | 3 | * [README](README.md) 4 | * [white-paper](white-paper.md) 5 | -------------------------------------------------------------------------------- /i18n/es/metadata.yml: -------------------------------------------------------------------------------- 1 | title: Un Protocolo Descentralizado para Remunerar el Ecosistema de Código Abierto 2 | abstract: > 3 | Crear un registro público, abierto y estable para todo el software de código abierto 4 | permitirá a los proyectos publicar lanzamientos de forma independiente en lugar 5 | de depender de terceros que ensamblan estos datos irregulares en cientos de 6 | sistemas separados (y duplicados). Los mantenedores de paquetes publicarán 7 | sus lanzamientos en un registro descentralizado impulsado por una blockchain 8 | tolerante a fallos bizantinos para eliminar fuentes únicas de fallo, proporcionar 9 | lanzamientos inmutables y permitir que las comunidades gobiernen sus regiones 10 | del ecosistema de código abierto, independientemente de agendas externas. 11 | 12 | tea incentiva el mantenimiento de código abierto permitiendo a los participantes 13 | de la red apostar valor contra los paquetes de los que dependen y quieren asegurar. 14 | El graph del protocolo tea proporciona registro de paquetes inmutable, requisitos 15 | de dependencia, autenticidad de paquetes y oráculos de uso para informar al algoritmo 16 | de remuneración de tea. La inflación sistemática se distribuye a todos los paquetes 17 | basándose en ese algoritmo. Si se encuentran problemas de seguridad o desarrollo, 18 | los desarrolladores pueden hacer reclamaciones respaldadas por evidencia contra 19 | el paquete, y pueden ocurrir penalizaciones. Los miembros de la comunidad de código 20 | abierto pueden revisar paquetes por problemas de calidad, y el protocolo puede 21 | responder a estas revisiones realizando eventos de penalización proporcionales. 22 | 23 | author: 24 | - Max Howell 25 | - Timothy Lewis 26 | - Thomas Borrel 27 | references: 28 | - id: sources 29 | url: https://github.com/teaxyz/white-paper 30 | - id: cc 31 | url: https://creativecommons.org/licenses/by-sa/4.0/ 32 | - id: nist 33 | url: https://nvd.nist.gov/vuln/detail/CVE-2021-44228 34 | - id: reuters 35 | url: https://www.reuters.com/article/usa-cyber-vulnerability-idCNL1N2SY2PA 36 | - id: twitter 37 | url: https://twitter.com/yazicivo/status/1469349956880408583 38 | - id: w3 39 | url: https://www.w3.org/TR/did-core/ 40 | - id: theregister 41 | url: https://www.theregister.com/2016/03/23/npm_left_pad_chaos/ 42 | - id: fossa 43 | url: https://fossa.com/blog/npm-packages-colors-faker-corrupted/ 44 | - id: lunasec 45 | url: https://www.lunasec.io/docs/blog/node-ipc-protestware/ 46 | - id: github 47 | url: https://github.com/dominictarr/event-stream/issues/116 48 | - id: zdnet 49 | url: https://www.zdnet.com/article/open-source-software-how-many-bugs-are-hidden-there-on-purpose/ 50 | - id: threatpost 51 | url: https://threatpost.com/backdoor-found-in-utility-for-linux/147581/ 52 | - id: fbi 53 | url: https://www.fbi.gov/news/stories/phantom-secure-takedown-031618 54 | - id: europol 55 | url: https://www.europol.europa.eu/media-press/newsroom/news/800-criminals-arrested-in-biggest-ever-law-enforcement-operation-against-encrypted-communication 56 | - id: medium 57 | url: https://medium.com/intrinsic-blog/compromised-npm-package-event-stream-d47d08605502 58 | - id: semver 59 | url: https://semver.org/ 60 | - id: npmjsCrossenv 61 | url: https://blog.npmjs.org/post/163723642530/crossenv-malware-on-the-npm-registry.html 62 | - id: npmjsLodash 63 | url: https://www.npmjs.com/package/lodash 64 | - id: npmjsChalk 65 | url: https://www.npmjs.com/package/chalk 66 | - id: npmjsLogFourjs 67 | url: https://www.npmjs.com/package/log4js/ 68 | - id: arxiv 69 | url: https://arxiv.org/abs/1207.2617/ 70 | - id: web3 71 | url: https://research.web3.foundation/en/latest/polkadot/overview/2-token-economics.html 72 | header-includes: 73 | - \usepackage{fancyhdr,ragged2e} 74 | - \lhead{\parbox[t]{0.5\textwidth}{\RaggedRight\rightmark\strut}} 75 | - \rhead{\parbox[t]{0.5\textwidth}{\RaggedLeft\leftmark\strut}} 76 | - \setlength{\headheight}{5\baselineskip} 77 | - \pagestyle{fancy} 78 | - \fancyfoot[LE,RO]{© 2022 tea.inc.} 79 | - \fancyfoot[L]{v2.1.0+es} # expand these variables! 80 | lang: es # https://pandoc.org/MANUAL.html#language-variables 81 | dir: ltr # language direction; ltr:left-to-right or rtl:right-to-left 82 | translator: 83 | - boredray -------------------------------------------------------------------------------- /i18n/pt-br/metadata.yml: -------------------------------------------------------------------------------- 1 | title: Um Protocolo Descentralizado Para Remunerar o Ecossistema de Código Aberto 2 | abstract: |- 3 | A criação de um registro aberto, público e estável para todos os softwares de código aberto 4 | autorizaria os projetos a publicar lançamentos de forma independente, ao invés de confiar 5 | em terceiros que reúnem esses dados irregulares em centenas de sistemas separados e duplicados. 6 | Os mantenedores de pacotes publicarão seus lançamentos para um registro descentralizado 7 | alimentado por uma blockchain Bizantina tolerante a falhas para eliminar fontes únicas de falha, 8 | fornecer liberações imutáveis e permitir que comunidades governem suas regiões 9 | do ecossistema de código aberto, independentemente de agendas externas. 10 | 11 | O tea incentiva a manutenção do código aberto, permitindo que os participantes da rede 12 | apostem valor em relação aos pacotes dos quais dependem e desejam garantir. 13 | O gráfico do protocolo tea fornece o registro imutável do pacote, os requisitos de dependência, 14 | a autenticidade do pacote e os oráculos de utilização para informar o algoritmo de 15 | remuneração do tea. A inflação sistemática é distribuída a todos os pacotes com base 16 | nesse algoritmo. Se forem encontrados problemas de segurança ou desenvolvimento, 17 | os desenvolvedores podem fazer reivindicações apoiadas por evidências contra o pacote, 18 | e pode ocorrer Slashing. Os membros da comunidade de código aberto podem rever os 19 | pacotes para questões de qualidade, e o protocolo pode responder a essas avaliações 20 | executando eventos de Slashing proporcionais. 21 | author: 22 | - Max Howell 23 | - Timothy Lewis 24 | - Thomas Borrel 25 | references: 26 | - id: sources 27 | url: https://github.com/teaxyz/white-paper 28 | - id: cc 29 | url: https://creativecommons.org/licenses/by-sa/4.0/ 30 | - id: nist 31 | url: https://nvd.nist.gov/vuln/detail/CVE-2021-44228 32 | - id: reuters 33 | url: https://www.reuters.com/article/usa-cyber-vulnerability-idCNL1N2SY2PA 34 | - id: twitter 35 | url: https://twitter.com/yazicivo/status/1469349956880408583 36 | - id: w3 37 | url: https://www.w3.org/TR/did-core/ 38 | - id: theregister 39 | url: https://www.theregister.com/2016/03/23/npm_left_pad_chaos/ 40 | - id: fossa 41 | url: https://fossa.com/blog/npm-packages-colors-faker-corrupted/ 42 | - id: lunasec 43 | url: https://www.lunasec.io/docs/blog/node-ipc-protestware/ 44 | - id: github 45 | url: https://github.com/dominictarr/event-stream/issues/116 46 | - id: zdnet 47 | url: https://www.zdnet.com/article/open-source-software-how-many-bugs-are-hidden-there-on-purpose/ 48 | - id: threatpost 49 | url: https://threatpost.com/backdoor-found-in-utility-for-linux/147581/ 50 | - id: fbi 51 | url: https://www.fbi.gov/news/stories/phantom-secure-takedown-031618 52 | - id: europol 53 | url: https://www.europol.europa.eu/media-press/newsroom/news/800-criminals-arrested-in-biggest-ever-law-enforcement-operation-against-encrypted-communication 54 | - id: medium 55 | url: https://medium.com/intrinsic-blog/compromised-npm-package-event-stream-d47d08605502 56 | - id: semver 57 | url: https://semver.org/ 58 | - id: npmjsCrossenv 59 | url: https://blog.npmjs.org/post/163723642530/crossenv-malware-on-the-npm-registry.html 60 | - id: npmjsLodash 61 | url: https://www.npmjs.com/package/lodash 62 | - id: npmjsChalk 63 | url: https://www.npmjs.com/package/chalk 64 | - id: npmjsLogFourjs 65 | url: https://www.npmjs.com/package/log4js/ 66 | - id: arxiv 67 | url: https://arxiv.org/abs/1207.2617/ 68 | - id: web3 69 | url: https://research.web3.foundation/en/latest/polkadot/overview/2-token-economics.html 70 | header-includes: 71 | - \usepackage{fancyhdr,ragged2e} 72 | - \lhead{\parbox[t]{0.5\textwidth}{\RaggedRight\rightmark\strut}} 73 | - \rhead{\parbox[t]{0.5\textwidth}{\RaggedLeft\leftmark\strut}} 74 | - \setlength{\headheight}{5\baselineskip} 75 | - \pagestyle{fancy} 76 | - \fancyfoot[LE,RO]{© 2022 tea.inc.} 77 | - \fancyfoot[L]{v${1.0.5}+${pt-br}} 78 | lang: pt-br 79 | dir: ltr 80 | translator: 81 | - Lucas Eduardo de Lima -------------------------------------------------------------------------------- /i18n/pt-br/white-paper.md: -------------------------------------------------------------------------------- 1 | # Isenção de responsabilidade 2 | 3 | As informações apresentadas no presente livro branco são de caráter preliminar. 4 | Consequentemente, nem os autores nem qualquer uma dos seus respectivos afiliados assumem qualquer responsabilidade de que as informações aqui estabelecidas sejam finais ou corretas e cada uma das anteriores renuncia, 5 | na medida máxima permitida pela lei aplicável, toda e qualquer responsabilidade decorrente de ato ilícito, contrato ou de outra forma em relação a este livro branco. 6 | Nem este livro branco nem qualquer coisa aqui contida devem constituir a base ou ser invocados em conexão com ou agir como um incentivo para celebrar qualquer contrato ou compromisso de qualquer natureza. 7 | 8 | Nada neste livro branco constitui uma oferta de venda ou uma solicitação para comprar quaisquer tokens aqui discutidos. 9 | Em qualquer caso, se este livro branco for considerado como tal oferta ou solicitação, nenhuma oferta ou solicitação é pretendida ou transmitida por este livro branco em qualquer jurisdição onde seja ilegal fazê-lo, 10 | quando tal oferta ou solicitação exigir uma licença ou registro, ou quando tal oferta ou solicitação estiver sujeita a restrições. 11 | Em particular, quaisquer tokens discutidos neste documento não foram, e, até a data de emissão deste livro branco, não têm a intenção de serem registrados sob as leis de valores mobiliários ou similares de qualquer jurisdição, independentemente de essa jurisdição considerar tais tokens como um valor mobiliário ou instrumento similar, e podem não ser oferecidos ou vendidos em qualquer jurisdição onde fazê-lo constituiria uma violação das leis relevantes de tal jurisdição. 12 | 13 | 14 | # Licença 15 | 16 | O código-fonte[^src] deste documento está disponível sob a licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional[^cc]. 17 | 18 | [^src]: Veja: @sources 19 | [^cc]: Veja: @cc 20 | 21 | 22 | # Introdução 23 | 24 | A internet é predominantemente composta por projetos de código aberto e tem sido assim desde o seu início. 25 | Com o tempo, muitos desses projetos se tornaram peças fundamentais sobre as quais toda inovação futura é construída. 26 | E embora fortunas tenham sido feitas a partir disso, o código aberto é principalmente criado e mantido sem compensação. 27 | 28 | Nós acreditamos que a totalidade do empreendimento humano moderno foi prejudicada ao depender do menor percentual de engenheiros do mundo para escolher entre um salário ou manter a Internet funcionando. 29 | O código aberto é um trabalho de amor frequentemente prejudicado pela falta de incentivos econômicos significativos, resultando em projetos genuinamente valiosos nunca alcançarem seu potencial, enquanto outros sofrem com problemas de segurança devido à falta de incentivos para manter o software ao longo de seu ciclo de vida. 30 | Para realizar plenamente nosso potencial, precisamos de um sistema de remuneração justo para o ecossistema de código aberto que não mude fundamentalmente como ele é construído ou utilizado. 31 | 32 | Empresas frequentemente criam modelos de negócios em torno do código aberto, gerando receita diretamente a partir do trabalho dos desenvolvedores benevolentes, enquanto também dependem deles para corrigir bugs conforme surgem problemas. 33 | Um ótimo exemplo é um incidente recente envolvendo uma vulnerabilidade crítica de segurança no Log4j, um pacote da Apache Software Foundation que se espalhou por muitos softwares comerciais e serviços usados por empresas e governos. 34 | Em novembro de 2021, um pesquisador de segurança que trabalhava para a Alibaba Group Holding Ltd. reportou a vulnerabilidade CVE-2021-44228[^1], que recebeu a pontuação base mais alta possível da Apache Software Foundation. Amit Yoran, CEO da Tenable e diretor fundador do United States Computer Emergency Readiness Team (US-CERT), descreveu essa vulnerabilidade como 'a maior e mais crítica vulnerabilidade da última década'[^2]. 35 | O pânico se instaurou e os poucos voluntários que mantinham esse pacote foram publicamente criticados pelo fracasso. 36 | Após abordar a indignação com um humilde pedido de Justiça, os sistemas foram corrigidos. 37 | Empresas e governos eventualmente perceberam que o Log4j, um pacote usado por uma ampla gama de sistemas críticos por duas décadas, era mantido por alguns voluntários não remunerados, os mesmos heróis desconhecidos que entraram em ação apesar do abuso da indústria[^3] e trabalharam incansavelmente para resolver a vulnerabilidade. 38 | 39 | Infelizmente, o Log4j está longe de ser o único exemplo. 40 | O core-js é baixado 30 milhões de vezes por semana como base de cada aplicativo Node.js, mas também recebe pouquíssimo financiamento. 41 | Recentemente, vários desenvolvedores principais do Bitcoin Core renunciaram, citando, entre outras razões, a *falta de compensação financeira* por suas decisões. 42 | 43 | Houveram múltiplas tentativas de fornecer estruturas de incentivo, geralmente envolvendo patrocínio e sistemas de recompensa. 44 | O patrocínio torna possível para consumidores de código aberto doarem para os projetos que favorecem. 45 | No entanto, imagine o código aberto como uma torre de tijolos onde as camadas inferiores são há muito esquecidas, mas ainda mantidas por engenheiros dedicados e utilizadas por ainda mais desenvolvedores. 46 | Apenas projetos no topo da torre são normalmente conhecidos e recebem patrocínio. 47 | Essa seleção tendenciosa leva a tijolos essenciais que sustentam a torre não receberem doações, enquanto os favoritos recebem mais do que precisam. 48 | Recompensas permitem que consumidores de projetos proponham pagamento para desenvolvedores construírem recursos específicos, assim remunerando apenas projetos por fazer coisas não necessariamente no seu melhor interesse. 49 | E novamente, apenas recompensando os favoritos. 50 | 51 | Neste documento, propomos o tea — um sistema descentralizado para remunerar justamente os desenvolvedores de código aberto com base em suas contribuições para todo o ecossistema e implementado através do algoritmo de incentivo tea aplicado a todas as entradas no registro do tea. 52 | 53 | ![Simplified view of the tea steeping rewards system.](img/figure-1.svg) 54 | 55 | $\parskip=0pt plus 1pt$ 56 | 57 | [^1]: Fonte: @nist 58 | [^2]: Fonte: @reuters 59 | [^3]: Fonte: @twitter 60 | 61 | 62 | # Componentes 63 | 64 | Um desenvolvedor de software construindo uma aplicação precisa de quatro coisas: um navegador, um terminal, um editor e um gerenciador de pacotes. 65 | Destes quatro, o gerenciador de pacotes é o que controla as ferramentas e estruturas que um desenvolvedor precisa para construir seu produto. 66 | Esta camada é onde vemos o potencial de mudar como o código aberto é remunerado. 67 | 68 | ## O Gerenciador de Pacotes 69 | 70 | O gerenciador de pacotes conhece o software de código aberto no qual uma aplicação depende para funcionar, desde o topo da torre até sua base. 71 | Cada componente e versão essencial para a aplicação são conhecidos e registrados. 72 | Ele sabe que o topo da torre seleciona cuidadosamente suas dependências e que essa seleção cuidadosa continua descendendo. 73 | O gerenciador de pacotes está posicionado de forma única na pilha de ferramentas do desenvolvedor para permitir a distribuição automatizada e precisa de valor com base no uso real e prático. 74 | 75 | Nós propomos um registro descentralizado imutável projetado para distribuir valor com base em um algoritmo que determina a contribuição de cada entrada para a utilidade e saúde do sistema. 76 | O valor pode entrar no gráfico nos pontos de ápice — aplicativos e bibliotecas essenciais — e ser distribuído para as dependências desses pontos de ápice e suas dependências recursivamente, já que o registro conhece todo o gráfico de código aberto. 77 | 78 | Além disso, acreditamos que informações materiais devem estar disponíveis via gerenciador de pacotes para que os desenvolvedores possam avaliar se podem confiar em um pacote e em seu autor. 79 | Essas informações podem se basear em reputação, reconhecimento da comunidade, dados obtidos de sistemas de identidade descentralizados (DID[^4]) outros gerenciadores de pacotes ou mecanismos de incentivo que potencialmente dependem dos participantes da rede colocando valor econômico em risco. 80 | 81 | Prevemos que a combinação de ferramentas, informações e recompensas do tea incentivará justamente os desenvolvedores, ajudando a estimular o crescimento do software de código aberto e fomentar a inovação. 82 | 83 | [^4]: See: @w3 84 | 85 | ## O Registro Descentralizado 86 | 87 | Cada gerenciador de pacotes possui seu próprio registro de pacotes duplicando os mesmos metadados repetidamente. 88 | Está na hora de haver um registro único, abrangente e definitivo projetado e governado pelas comunidades que dependem dele. 89 | Este registro descentralizado e imutável poderia fornecer segurança, estabilidade e impedir intenções maliciosas. 90 | 91 | A internet opera com dezenas de milhares de componentes vitais de código aberto. 92 | É notável que, até agora, incidentes causados pela remoção de infraestrutura de código aberto essencial tenham sido mínimos. 93 | O mais famoso foi a remoção de uma dependência do NPM chamada left-pad[^5] em 2016, que causou problemas em sistemas de integração contínua e implantação contínua, deixando os desenvolvedores em situação delicada por dias. 94 | Esse evento demonstrou que a própria internet é baseada em sistemas frágeis de desenvolvimento. 95 | Outros exemplos envolveram participação ativa ou intencional dos mantenedores de pacotes sabotando seus pacotes populares (Veja colors.js, faker.js[^6], e node-ipc[^7]), 96 | ou malfeitores tentando lucrar fingindo ajudar a manter pacotes e corrompendo-os para roubar, por exemplo, chaves privadas de Bitcoin (Veja event-stream[^8]), 97 | ou pacotes maliciosos com erros de grafia intencionais, também conhecidos como typosquatting, 98 | na esperança de enganar os usuários para que os instalem, por exemplo, os pacotes NPM crossenv vs. cross-env[^npmjsCrossenv]. 99 | 100 | A integridade do software precisa ser garantida à medida que a indústria avança para um futuro onde os ativos digitais fazem parte do software. 101 | Não podemos continuar vulneráveis a malfeitores modificando o software. 102 | 103 | A maioria das ferramentas que chamamos de gerenciadores de pacotes não pode garantir que esses pacotes integrados nos aplicativos e dApps sejam o código de código aberto não adulterado publicado por seus autores originais. 104 | O GitHub da Microsoft descobriu que 17% das vulnerabilidades de software foram implantadas com propósitos maliciosos[^9], sendo que algumas permaneceram não detectadas por longos períodos (Veja Webmin 1.890[^10]). 105 | 106 | Um registro descentralizado, complementado por um sistema de reputação e apoiado por incentivos econômicos projetados para expor malfeitores e recompensar benfeitores, pode oferecer as garantias que as comunidades de desenvolvedores têm procurado. 107 | 108 | [^5]: Fonte: @theregister 109 | [^6]: Fonte: @fossa 110 | [^7]: Fonte: @lunasec 111 | [^8]: Fonte: @github 112 | [^npmjsCrossenv]: Fonte: @npmjsCrossenv 113 | [^9]: Fonte: @zdnet 114 | [^10]: Fonte: @threatpost 115 | 116 | 117 | ## O sistema de Amarzenamento 118 | 119 | Pacotes de código aberto oferecem uma ampla gama de funcionalidades, algumas das quais podem ser restritas ou indesejadas. 120 | A criptografia é um excelente exemplo disso. 121 | Um caso de uso crítico para a criptografia é o suporte à privacidade das pessoas em todo o mundo. 122 | No entanto, a criptografia também pode ser usada para fins nefastos (Veja Phantom Secure, desmantelada por agências de aplicação da lei em março de 2018[^11]) ou pode ser comprometida para apoiar atividades de aplicação da lei (Veja Operação Ironside (AFP), Operação Greenlight (Europol), 123 | e Operação Trojan Shield (FBI)[^12] onde o FBI operava uma plataforma de comunicação "criptografada", AN0M, e convenceu criminosos a usar seus telefones "criptografados" para comunicação segura. 124 | 125 | As amplas aplicações da criptografia a tornaram um caso de uso perfeito para software de código aberto e um ótimo exemplo de que qualquer solução que armazene pacotes deve ser à prova de manipulações e resistente à censura. 126 | O tea é um protocolo descentralizado que não tem a intenção de filtrar ou sancionar pacotes com base em sua funcionalidade. 127 | Embora a governança do tea possa optar por remover pacotes comprovadamente maliciosos (consulte a seção de governança para mais informações), é fundamental para o sistema tea se conectar a vários sistemas de armazenamento, incluindo sistemas descentralizados que demonstrem que um pacote não foi alterado e está corretamente replicado. 128 | Os mantenedores de pacotes podem escolher o sistema de armazenamento mais adequado às suas necessidades para armazenar e distribuir seus pacotes de forma segura. 129 | 130 | [^11]: Fonte: @fbi 131 | [^12]: Fonte: @europol 132 | 133 | # Participantes da Rede 134 | 135 | A missão do tea é capacitar comunidades de código aberto e garantir que seus contribuintes sejam apoiados enquanto criam as ferramentas que constroem a Internet. 136 | Neste livro branco, distinguimos os participantes por meio de suas contribuições. 137 | Alguns podem contribuir com código ou verificar o código contribuído. 138 | Outros podem fornecer valor econômico para apoiar os desenvolvedores e sua reputação. 139 | 140 | ## Package Maintainers 141 | 142 | Os mantenedores de pacotes devem garantir que seu software continue entregando valor crescente à medida que a indústria evolui. 143 | 144 | O tea assume que os criadores de pacotes mantêm seu trabalho. 145 | Os mantenedores de pacotes são pilares das comunidades de código aberto que precisam ser capacitados e recompensados por suas contribuições contínuas. 146 | Um mantenedor de pacote pode decidir interromper seus esforços de manutenção ou perceber que não pode operar no mesmo ritmo das expectativas dos usuários do pacote. 147 | Os mantenedores de pacotes recebem um token não fungível (NFT) quando concluem uma submissão de pacote (consulte a seção de NFT do mantenedor para detalhes adicionais). 148 | Este NFT é usado para comprovar seu trabalho e é a chave que direciona as recompensas do tea. 149 | O detentor do NFT de um pacote pode transferir sua propriedade para outro desenvolvedor (ou grupo de desenvolvedores), tornando-os assim mantenedores do pacote e receptores de quaisquer recompensas futuras. 150 | Da mesma forma, um desenvolvedor pode decidir assumir o papel de mantenedor de pacote ao bifurcar o pacote existente e submeter um novo pacote que eles manterão no futuro, tornando-se assim tanto criador quanto mantenedor do pacote. 151 | 152 | É essencial fornecer às comunidades de desenvolvedores as ferramentas adequadas para determinar quais pacotes estão sendo mantidos, bem como a reputação passada e presente dos mantenedores e a qualidade do trabalho. 153 | Com frequência, vimos trabalhos de código aberto sendo adulterados e os esforços de muitos arruinados por malfeitores. 154 | Embora o trabalho desses malfeitores seja em grande parte descoberto e remediado, muitas vezes isso só ocorre depois que danos significativos foram causados, seja por perda financeira ou de dados. 155 | Veja, por exemplo, o pacote npm EventStream[^13] que foi baixado mais de 1,5 milhão de vezes por semana e era utilizado por mais de 1.500 pacotes, quando um hacker conseguiu penetrar no projeto de código aberto, ganhar a confiança de seu autor original e modificar o EventStream para depender de um pacote malicioso que exfiltraria credenciais de carteiras de bitcoin para um servidor de terceiros. 156 | Embora ferramentas possam ajudar a detectar alguns desses ataques, nem sempre se pode depender delas, o que cria uma comunidade inteira dependente da diligência e vontade de compartilhar descobertas uns dos outros. 157 | 158 | Propomos a introdução de incentivos por meio do token tea descrito na seção do token tea, incentivando comunidades de código aberto a relatar construtivamente suas descobertas, para que os mantenedores de pacotes possam abordá-las antes que sejam exploradas. 159 | 160 | [^13]: Fonte: @medium 161 | 162 | ## Usuários de Pacotes 163 | 164 | Os usuários de pacotes são desenvolvedores de software focados em resolver um problema específico. 165 | Muitas vezes, eles buscam na comunidade de código aberto as ferramentas de que precisam para experimentar rapidamente e iterar com custo mínimo ou nenhum, beneficiando-se diretamente do trabalho dos criadores e mantenedores de pacotes. 166 | Tradicionalmente, um subconjunto pode ter optado por apoiar os mantenedores de pacotes por meio de doações ou outras formas de remuneração; no entanto, isso raramente foi o caso. 167 | 168 | O patrocínio pode ser um sistema eficaz para apoiar o desenvolvimento de código aberto; no entanto, a remuneração geralmente não se estende a todas as dependências. 169 | Essa limitação beneficia os favoritos e atrapalha a inovação e a construção de software. 170 | Para prosperar como a base do desenvolvimento de software, o código aberto deve capacitar todos os desenvolvedores, sejam iniciantes ou especialistas, em todas as camadas da torre. 171 | 172 | O objetivo do tea é manter os valores fundamentais do software de código aberto enquanto fornece um sistema descentralizado para remunerar os mantenedores de pacotes por seu trabalho. 173 | Para cumprir essa missão, o tea pretende desenvolver — e incentivar outros a desenvolver — mecanismos para que os usuários de pacotes apoiem os mantenedores de pacotes por meio de casos de uso únicos do token tea, conforme descrito nas seções do token tea, trabalho futuro e esforço potencial da comunidade. 174 | 175 | ## Package Supporters and Sponsors 176 | 177 | Na Web 2.0 e na web3, os apoiadores de pacotes frequentemente foram chamados de 'patrocinadores'. Eles são organizações ou usuários de pacotes que usam software de código aberto para construir seus produtos comerciais, filantropos que desejam apoiar o ecossistema ou empreendedores que procuram financiar equipes para desenvolver componentes de um sistema maior. 178 | 179 | O tea propõe ampliar as comunidades de apoiadores de pacotes para toda a comunidade do tea, sejam organizações, desenvolvedores, usuários ou entusiastas da tecnologia. 180 | O objetivo do tea é implementar mecanismos de incentivo descentralizados por meio de casos de uso exclusivos do token tea para que qualquer membro da comunidade do tea contribua para a sustentabilidade perpétua e o crescimento contínuo do código aberto. 181 | Apoiadores de pacotes e patrocinadores são livres para decidir quais pacotes ou mantenedores de pacotes desejam apoiar com base em seu trabalho, crenças ou qualquer critério e métrica que influenciaria sua decisão. 182 | Além disso, o apoio fornecido pelos apoiadores de pacotes e patrocinadores fluirá para as dependências de cada pacote, confiando implicitamente no mantenedor do pacote para fazer boas escolhas sobre sua pilha de tecnologia e usando essas informações para contribuir para sua reputação. 183 | 184 | Desde que o mantenedor do pacote ofereça esse serviço, um apoiador de pacote e patrocinador pode receber um NFT de nível de suporte premium em troca, beneficiando-se de SLAs acelerados ou licenciamento mais flexível. 185 | Além disso, apoiadores de pacotes e patrocinadores podem decidir apoiar pacotes ou mantenedores de pacotes e redirecionar automaticamente todas ou parte de suas recompensas para incentivar equipes a construir novo software de código aberto. 186 | Em outras palavras, os pacotes não precisam existir para que o tea comece a contribuir. 187 | Projetos incipientes podem ser apoiados da mesma forma que os mais maduros, incentivando ainda mais um cenário de código aberto em constante evolução. 188 | 189 | ## tea Tasters 190 | 191 | À medida que novos pacotes ou novas versões de pacotes existentes são lançados, a validade do trabalho precisa ser demonstrada de forma comprovável. 192 | Essas informações são essenciais para os usuários de pacotes decidirem se confiam ou não tanto no pacote quanto em seus mantenedores. 193 | Com o protocolo tea, essa função é fornecida pelos tea tasters. 194 | 195 | Os tea tasters, geralmente, são desenvolvedores de software experientes dispostos a dedicar parte do seu tempo para verificar as reivindicações associadas a um pacote (funcionalidade, segurança, versionamento semântico[^14], precisão da licença, etc.) e apostar tanto sua reputação quanto valor econômico para demonstrar o resultado de suas pesquisas e análises e apoiar suas avaliações. 196 | Os tea Tasters recebem recompensas por sua diligência e esforços. 197 | No tea, chamamos de 'infusão do seu tea' a ação de bloquear tokens tea para apoiar suas análises e receber recompensas (ou penalidades) com base no consenso sobre a validade de suas avaliações. 198 | 199 | Assim como os apoiadores de pacotes, os tea Tasters podem influenciar a reputação de um pacote e de um mantenedor de pacote; no entanto, seu impacto é mais significativo devido ao papel na validação da segurança, funcionalidade e qualidade de um pacote. 200 | Os tea Tasters também precisarão construir sua reputação para apoiar suas alegações. 201 | A qualidade de seu trabalho e o valor econômico que arriscam ao fazer suas análises, combinados com outras fontes externas de dados, construirão a reputação de cada tea Taster, agregando mais valor ao seu trabalho. 202 | Consulte a seção de reputação de pacotes para mais detalhes sobre os mecanismos usados para influenciar a reputação de um pacote e de um mantenedor de pacote. 203 | 204 | [^14]: Veja: @semver 205 | 206 | # Visão Geral do Protocolo 207 | 208 | O design de um protocolo para recompensar contribuições de código aberto é repleto de desafios. 209 | O software de código aberto, por definição, está aberto a todos e, como resultado, pode ser alvo de má atribuição, apropriação ou manipulação maliciosa. 210 | No entanto, a comunidade de código aberto consistentemente demonstrou disposição para destacar benfeitores e expor os maus. 211 | Historicamente, o tempo gasto revisando e comentando as contribuições de outros desenvolvedores tem sido estritamente voluntário, apesar de quão demoradas e cruciais podem ser as atividades de relatar e defender descobertas. 212 | 213 | Nossa intenção é criar uma plataforma de distribuição sem confiança para aplicativos protegidos por reputação e incentivos financeiros, pois acreditamos que recompensas adequadas para contribuições de código aberto não podem ter sucesso sem um sistema de reputação e a capacidade dos membros da comunidade de comunicar suas descobertas e apoiar (ou discordar) de um pacote ou do trabalho de um desenvolvedor. 214 | 215 | Devemos fornecer aos desenvolvedores ferramentas para acessar e contribuir para esse sistema de reputação. 216 | Ferramentas que incluam acesso visual e programável à versão e reputação de todas as dependências em seus pacotes. 217 | Um entendimento claro de quais membros da comunidade apoiam cada pacote e quantos tokens tea estão sendo utilizados contribuirá para a reputação de cada pacote, assim como quanto um mantenedor de pacote está investindo em seu trabalho comunica o quanto eles o apoiam. 218 | Esses pontos de dados combinados ajudarão a informar um sistema de reputação para todos os membros da comunidade e facilitarão a escolha. 219 | Como o hack do pacote EventStream não foi conduzido pelo pacote em si, mas por meio de uma de suas dependências, a visibilidade em todas as camadas de dependências será vital para construir esse sistema sem confiança. 220 | No entanto, considerações como custos de computação e transação ("gas") precisarão ter prioridade à medida que o sistema for projetado e construído. 221 | 222 | Nosso objetivo é recompensar tanto os desenvolvedores da Web 2.0 quanto da web3. 223 | As complexidades e especificidades de cada pilha tecnológica tornam possível que o rastreamento de instalações e desinstalações de pacotes possa facilmente ser vítima de um ou mais malfeitores, incluindo a "compra" de instalações para inflar artificialmente os números. 224 | Um cenário ainda pior seria introduzir mudanças fundamentais na natureza do software de código aberto, criando fricção desnecessária com chaves de licença ou outros mecanismos de rastreamento de implantação. 225 | Para oferecer a maior cobertura possível, acreditamos que as recompensas não devem depender de uma noção simplista de rastreamento de instalações ou desinstalações, mas sim de mecanismos de incentivo que incentivem a submissão de pacotes de qualidade e a denúncia de pacotes maliciosos ou de alto risco. 226 | Por fim, muitos pacotes dependem de dependências comuns. 227 | Por exemplo, o Lodash tem 151.209 dependentes[^15] enquanto o chalk tem 78.854 dependentes[^16] e o Log4js tem 3.343 dependentes[^17]. 228 | À medida que mais pacotes são criados usando as mesmas dependências, como garantimos que os incentivos sejam distribuídos de forma justa e equitativa? 229 | Como garantimos que as dependências mais utilizadas sejam recompensadas sem prejudicar os novos ou emergentes pacotes e desenvolvedores? 230 | Como garantimos que o sistema de incentivo não acabe direcionando os desenvolvedores longe de linguagens de nicho para centralizá-los onde os incentivos são melhores? 231 | Mas também, como desenvolvedores, como identificamos pacotes com o maior número de dependentes para construir alternativas - versões mais enxutas, mais eficientes e melhor codificadas desses pacotes? 232 | No tea, acreditamos que a falta de incentivo tem impedido a evolução do software de código aberto. 233 | Com os incentivos econômicos e recompensas certas, mais desenvolvedores estarão em posição de construir, melhorar e ampliar o software de código aberto para o benefício do mundo. 234 | Somente então o token tea será capaz de representar o valor total do software de código aberto. 235 | 236 | [^15]: Fonte: @npmjsLodash 237 | [^16]: Fonte: @npmjsChalk 238 | [^17]: Fonte: @npmjsLogFourjs 239 | 240 | ## Submissão de Pacote 241 | 242 | A submissão de um lançamento de pacote requer múltiplas transações para ocorrerem atomicamente. 243 | Especificamente, o mantenedor do pacote deve: 244 | 245 | * Registrar o pacote (e sua versão semântica) no registro descentralizado. 246 | * Fazer upload do pacote no sistema de armazenamento descentralizado para resiliência, resitência à censura e facilidade de distribuição. 247 | * Contribuir para a reputação e confiabilidade do pacote 'infundindo' tokens tea. 248 | 249 | O fracasso de qualquer uma das três operações resultará no protocolo revertendo para seu estado anterior, eliminando assim qualquer evidência da submissão. 250 | 251 | Quando um pacote é submetido com sucesso, o mantenedor do pacote receberá um NFT de mantenedor para evidenciar seu trabalho e contribuição para o código aberto. 252 | O mantenedor do pacote pode transferir as recompensas de 'infusão' associadas ao NFT do mantenedor para um terceiro. 253 | No entanto, a reputação associada à criação e manutenção do ativo permanecerá com o mantenedor do pacote, de modo que sua reputação possa ser afetada ao longo do tempo. 254 | Conforme a reputação de qualquer membro da comunidade do tea atinge marcos importantes, eles podem receber acesso a partes elevadas do protocolo ou receber recompensas aceleradas, conforme decidido pela governança do tea. 255 | Para mais detalhes sobre o NFT do mantenedor, consulte a seção do NFT do mantenedor. 256 | 257 | ### Análise de Dependências 258 | 259 | As dependências de pacotes podem ser extensas, já que cada pacote frequentemente possui dependentes e dependências. 260 | Para fornecer uma metodologia simples que recompense todos os desenvolvedores que contribuíram para o software de código aberto, mantendo a criação da árvore de dependências rápida e computacionalmente eficiente, propomos verificar apenas as dependências de primeiro nível ao submeter um pacote. 261 | 262 | Este design é baseado na hipótese de que cada dependência é, por si só, um pacote que foi submetido independentemente para a árvore do tea. 263 | Ao fazer isso, cada uma de suas dependências pode ser mapeada e, se suas dependências também tiverem dependências, essas serão mapeadas no momento em que o pacote de dependência for submetido 264 | 265 | ![Diagrama de análise de dependências](img/figure-3.svg){#fig:dep-analysis} 266 | 267 | 268 | Na @fig:dep-analysis, a submissão do pacote A aciona uma análise das dependências de tempo de execução 1 até n e das dependências de compilação 1 até n, enquanto as dependências de tempo de execução 1.1 até 1.n e as dependências de compilação 1.1 até 1.n foram analisadas quando o pacote B foi submetido. 269 | Aplicaremos a mesma metodologia para a distribuição de incentivos, já que os tokens infundidos são distribuídos entre todas as dependências, infundindo recursivamente os pacotes listados como dependências (ver @fig:steeping-rewards). 270 | 271 | ![A distribuição das recompensas de infusão entre as dependências.](img/figure-2.svg){#fig:steeping-rewards} 272 | 273 | 274 | Versionamento e dependências conflitantes são desafios significativos, e solucioná-los pode se tornar uma enorme perda de tempo. 275 | Para lidar com isso, propomos que cada pacote seja submetido a uma varredura abrangente de dependências ao ser enviado, para garantir que o pacote esteja em conformidade com as seguintes regras para intervalos de versão semântica. 276 | 277 | * Pacotes podem apenas restringir suas dependências para uma versão principal, embora o início do intervalo possa ser qualquer versão semântica válida (por exemplo, >=5.2.1 <6). 278 | * Se uma dependência for atualizada para uma versão principal mais recente, o tea pode exigir que a versão principal do pacote seja aumentada. 279 | * Da mesma forma, se uma dependência for atualizada para uma versão secundária mais recente, o tea pode exigir que a versão secundária do pacote seja aumentada. 280 | * Se uma nova dependência for adicionada, o tea pode exigir que a versão secundária do pacote seja aumentada. 281 | 282 | Considerando o esforço desnecessário imposto a qualquer usuário de pacote quando as regras acima são desrespeitadas, propomos que uma parte dos tokens tea infundidos pelo mantenedor do pacote seja reduzida para refletir a falta de diligência adequada. 283 | Se um desenvolvedor obriga todos a malabarismar com suas xícaras, alguém vai derramar chá. 284 | Como espera-se que a varredura de dependências ocorra na submissão, devemos observar que nenhuma infusão dos apoiadores de pacotes e patrocinadores, ou dos tea Tasters, terá ocorrido. 285 | 286 | ## A reputação do Pacote e do Mantenedor do Pacote 287 | 288 | Os mantenedores de pacotes devem contribuir para a reputação e confiabilidade de seus pacotes infundindo tokens tea. 289 | No entanto, um sistema de reputação que depende exclusivamente da contribuição econômica do autor não oferece proteção suficiente ao usuário e pode estar sujeito a ataques Sybil, nos quais um único indivíduo cria várias representações de si mesmo para deixar um grande volume de avaliações positivas sobre seu trabalho, enganando os usuários a acreditarem que seu trabalho foi revisado e aprovado por muitos. 290 | 291 | Várias metodologias estão disponíveis para evitar ataques Sybil, algumas das quais são descritas por Nitish Balachandran e Sugata Sanyal em "A Review of Techniques to Mitigate Sybil Attacks"[^18]. 292 | Como o tea é um protocolo descentralizado, o uso de um sistema de certificação de confiança que depende de uma autoridade centralizada de emissão de certificados seria contrário ao seu cerne. 293 | Propomos focar em abordagens descentralizadas para mitigação de ataques Sybil e, mais especificamente, em metodologias que dependem de um grande grupo de participantes da rede incentivados a avaliar e representar publicamente a reputação de cada pacote e seu mantenedor. 294 | 295 | Similar à produção de blocos em uma blockchain de prova-de-participação, onde nós não produtores podem validar o trabalho de outros e, quando necessário, destacar uma violação das regras da rede, o que leva à penalização do malfeitor por meio de redução (destruição de uma parte de sua participação), 296 | propomos um sistema no qual terceiros (também conhecidos como tea Tasters) seriam capazes de revisar pacotes produzidos por mantenedores de pacotes e seriam economicamente incentivados a agir no melhor interesse da comunidade de software de código aberto e de seus usuários, reconhecendo comportamentos bons e penalizando os ruins. 297 | Este sistema deve ser resistente a ataques Sybil e impedir que grandes detentores de tokens influenciem materialmente o protocolo ou a reputação de pacotes específicos. 298 | Acreditamos que essa abordagem está mais alinhada com o código aberto, fornecendo um substrato mais fértil para promover adoção e confiança e, por fim, facilitar o crescimento do tea. 299 | 300 | [^18]: Fonte: @arxiv 301 | 302 | ## Revisão de Pacotes por Terceiros 303 | 304 | A revisão de pacotes por terceiros é um componente essencial na construção de reputação, no entanto, a revisão de terceiros possui seu próprio conjunto de ameaças exclusivas, incluindo os ataques Sybil mencionados anteriormente. 305 | 306 | A tecnologia blockchain, e mais explicitamente o staking, oferece uma oportunidade única para o tea lidar com esse desafio. 307 | Embora os endereços de carteira possam estar disponíveis em quantidades infinitas, esse não é o caso dos tokens tea, cujo fornecimento inicial é esperado para ser de 10 bilhões. 308 | Além disso, cada ação realizada pelos desenvolvedores, como submeter pacotes, verificar pacotes ou infundi-los, contribuirá para sua reputação, criando assim um perfil único para cada desenvolvedor usar tanto para contribuir para a comunidade do tea quanto para participar da governança do tea. 309 | 310 | Ao exigir que os revisores de terceiros infundam tokens tea e incorram no risco de perder uma parte dos tokens infundidos caso se comportem contra o interesse da rede ou sejam malfeitores, os terceiros podem fornecer credibilidade adicional a um pacote e receber uma recompensa na forma de tokens tea. 311 | 312 | Também propomos estender o sistema de reputação para os terceiros que realizam a verificação independente de pacotes - os tea Tasters. 313 | A conclusão de uma revisão positiva exigirá que duas operações ocorram de forma atômica: 314 | 315 | * A submissão da revisão de código, assinada pelo tea Taster e acessível publicamente a todos os membros da comunidade, juntamente com 316 | * O ato de infundir "para" o pacote (em vez de "contra" o pacote), para substantiar sua revisão. 317 | 318 | A conclusão de uma revisão negativa que inclui uma ou mais vulnerabilidades críticas exigirá que os tea Tasters primeiro entrem em contato com o mantenedor do pacote usando um protocolo de mensagens para notificá-los da vulnerabilidade e permitir que eles abordem o problema de forma oportuna. 319 | Após o vencimento do período definido pela governança atribuído ao mantenedor do pacote para abordar sua vulnerabilidade ou quando o pacote corrigido estiver disponível, o mesmo protocolo de mensagens será usado para notificar todos os usuários e testadores deste pacote (incluindo dependentes) que uma vulnerabilidade foi identificada, 320 | e esperançosamente resolvida, para que saibam atualizar sua aplicação ou dependências. 321 | Para desincentivar o desperdício de tempo dos desenvolvedores, a comunicação entre os tea Tasters e os mantenedores de pacotes exigirá que os tea Tasters infundam tokens tea. 322 | 323 | Ao concluir ambas as operações, os tea Tasters receberão um NFT como prova de seu trabalho no pacote específico e na versão do pacote. O acúmulo de NFTs combinado com a taxa de infusão de cada um dos pacotes revisados e informações extraídas de sistemas externos informarão a reputação de um tea Taster. 324 | Conforme sua reputação atinge marcos-chave, os tea Tasters podem ter acesso a partes elevadas do protocolo ou a recompensas aceleradas, conforme decidido pela governança do tea. 325 | 326 | ## Pacotes Desatualizados ou Corrompidos 327 | 328 | A missão do tea é recompensar os contribuidores e participantes das comunidades de código aberto; no entanto, as recompensas devem ser proporcionais aos esforços empreendidos pelos mantenedores de pacotes e tea Tasters. 329 | Pacotes mal mantidos, desatualizados ou corrompidos são indicações claras de que os mantenedores de pacotes não estão atendendo às expectativas da comunidade ou não estão cumprindo a confiança e o apoio depositados neles por meio da infusão de pacotes. 330 | Outra manifestação de pacotes desatualizados pode ser o uso contínuo de uma linguagem antiga ou de uma versão antiga de linguagens multiversão. 331 | Pacotes permanecendo desatualizados ou corrompidos por muito tempo indicam que os tea Tasters precisam revisar regular e consistentemente o trabalho dos mantenedores de pacotes. 332 | 333 | Os tea Tasters são membros críticos das comunidades de código aberto, pois suas revisões e reivindicações associadas podem orientar os usuários de pacotes na direção ou para longe de pacotes. 334 | Para garantir que as revisões possam ser confiáveis continuamente, propomos um mecanismo pelo qual pacotes desatualizados ou corrompidos possam ter uma parte de seus tokens infundidos enviados aos tea Tasters que foram os primeiros a reconhecer a falta de manutenção de qualquer pacote. 335 | 336 | Qualquer revisão negativa que destaque uma falha, como uma vulnerabilidade zero-day ou o uso de uma dependência desatualizada e permaneça aberta após um período de carência definido pela governança, deve ser considerada uma falha por parte do mantenedor do pacote. 337 | Eles não completaram a tarefa com a qual foram incumbidos e recompensados. 338 | O mesmo vale para os apoiadores e patrocinadores do pacote que apostaram sua reputação no trabalho dos mantenedores de pacotes negligentes e receberam recompensas por isso, mas não identificaram a falta de manutenção ou optaram por continuar a apoiar o pacote, independentemente. 339 | 340 | À medida que os pacotes ganham popularidade e uso, com mais aplicativos e sistemas potencialmente críticos dependendo deles, precisamos incentivar os desenvolvedores a relatar discreta e rapidamente falhas ao mantenedor do pacote e os mantenedores de pacotes a resolverem tais falhas antes que possam ser exploradas. 341 | Consequentemente, propomos que qualquer pacote desatualizado ou corrompido que seja objeto de uma ou mais revisões negativas comprovadas e permaneça nesse estado após o período de carência definido pela governança tenha uma parte de seus tokens infundidos destruída, independentemente de sua origem (mantenedor do pacote, apoiadores e patrocinadores do pacote ou revisores anteriores de tea), 342 | enquanto outra parte é enviada aos tea Tasters que enviaram as revisões negativas. A distribuição para todos os tea Tasters pode ser baseada na idade de suas revisões e na quantidade de tokens de tea que infundiram para suas revisões. 343 | 344 | ## Maintainer NFT 345 | 346 | Após a submissão bem-sucedida de um pacote, o mantenedor do pacote receberá um NFT como prova de seu trabalho e contribuição. 347 | O detentor deste NFT receberá automaticamente todas as recompensas associadas ao pacote. 348 | Os mantenedores de pacotes podem transferir a propriedade da manutenção de um pacote para outro mantenedor de pacote simplesmente transferindo o NFT do pacote. 349 | A transferência bem-sucedida do NFT levará o novo proprietário a receber automaticamente as futuras recompensas do pacote. 350 | 351 | Uma parte importante da construção de reputação depende da frequência e quantidade de submissões de pacotes de qualidade. 352 | O NFT entregue aos mantenedores de pacotes como evidência de seu trabalho pode ser usado pelo sistema de reputação para atualizar a reputação de um mantenedor de pacotes e dar a eles acesso a partes elevadas do protocolo, conforme decidido pela governança do tea. 353 | No entanto, para prevenir vetores de ataque, como membros da comunidade comprando sua reputação, a transferência do NFT do mantenedor não resultará na transferência de reputação. 354 | A reputação deve permanecer diretamente associada ao trabalho de um desenvolvedor específico e não pode ser transferida. 355 | 356 | # Token tea 357 | 358 | ## Garantindo a Rede 359 | 360 | Embora muitas blockchains possam parecer soluções de infraestrutura eficazes e seguras para apoiar os objetivos do tea, acreditamos que uma consideração cuidadosa deve ser dada à pilha de tecnologia sobre a qual o sistema tea é construído. 361 | 362 | Escalabilidade, eficiência de custos, ESG e extensibilidade de terceiros são considerações importantes de design que um sistema de prova-de-participação soberano por meio do tea poderia melhor servir. 363 | No modelo de prova-de-participação, os operadores de nós e os participantes da rede apostam valor econômico na forma do token nativo da cadeia para aumentar a segurança do sistema. 364 | Os operadores de nós e os participantes da rede recebem recompensas pela produção bem-sucedida de blocos que estejam em conformidade com as regras da rede e incluam informações precisas de transações. 365 | Inatividade (também conhecida como *node down*) ou atividade maliciosa/incorreta são penalizadas pela destruição de uma fração dos tokens apostados por meio de Slashing. 366 | 367 | Um sistema de prova-de-participação alimentado pelo token tea permitirá que os detentores do token tea contribuam para a segurança do sistema apostando tea e apoiem os desenvolvedores de código aberto deixando tea. 368 | Estamos totalmente cientes de que fatores econômicos podem impedir alguns desenvolvedores de apostar ou deixar tea; como tal, a aposta e o ato de deixar estarão disponíveis por tão pouco quanto uma folha, a menor denominação de tea, representando um centésimo de um bilionésimo ($10^{-8}$) de um tea. 369 | 370 | Ambos os usos do token tea têm funções vitais no suporte e crescimento do ecossistema de código aberto. 371 | O staking de tea garantirá que o sistema tea continue a operar de forma segura, para que todos os participantes da rede possam enviar e acessar pacotes para revisá-los, integrá-los em suas aplicações, etc. 372 | Por outro lado, o ato de infusão tea apoiará o objetivo do tea de fornecer ferramentas para todos os participantes da rede apoiarem e usarem pacotes que atendam aos requisitos de qualidade e confiabilidade, conforme formulado pela comunidade tea por meio de seu apoio e objeção a cada pacote. 373 | Será tomado cuidado ao definir e implementar os parâmetros de aposta e de deixar para que um não se torne parasitário do outro. 374 | 375 | ## Incentivos e Penalidades 376 | 377 | Como discutido anteriormente, há fortes incentivos para malfeitores comprometerem o software de código aberto. 378 | A maioria da infraestrutura crítica da internet está rodando em código aberto, e a corrida para encontrar exploits e outras vulnerabilidades está em curso. 379 | No tea, acreditamos que os mantenedores de pacotes não devem ser culpados (embora muitas vezes o sejam). 380 | 381 | Os incentivos do protocolo tea corrigem isso por meio de uma distribuição justa e equitativa de incentivos. 382 | Um pacote como o Lodash, com mais de 151 mil dependentes, é um pilar do desenvolvimento de código aberto, e seu mantenedor merece ser recompensado proporcionalmente. 383 | No entanto, um sistema de recompensa baseado unicamente no número de dependentes impediria inovadores de interromper esses monopólios, a menos que sejam financiados suficientemente por terceiros ou já tenham acumulado recursos suficientes para se autofinanciar. 384 | Essa abordagem provavelmente levaria a uma redução no número de contribuintes, resultando no oposto do que o tea pretende. 385 | 386 | O objetivo do tea é representar o valor do software de código aberto e, ao fazê-lo, promover seu crescimento capacitando seus participantes com os recursos necessários para perseguir sua paixão sem obstáculos. 387 | O sistema de distribuição de incentivos do tea precisa considerar cuidadosamente a taxa de "deixar" de cada pacote e ajustar os incentivos de cada pacote de acordo. 388 | Para reduzir o risco de um pequeno número de pacotes, usados como dependências em muitos aplicativos, coletarem a maioria das recompensas de "deixar", vamos aproveitar a pesquisa produzida pela Fundação Web3[^19] para o mecanismo de recompensas baseado em prova-de-participação do Polkadot. 389 | Podemos ajustar ainda mais a implementação e suas variáveis com base nos resultados de experimentos práticos. 390 | 391 | À medida que um pacote se aproxima de uma taxa de "infusão" ideal definida pela governança, sua proporção de recompensas de "infusão" diminuirá progressivamente. 392 | Quando um pacote excede sua taxa de "infusão" ideal, a proporção de recompensas de "infusão" diminuirá acentuadamente para desincentivar os apoiadores do pacote e os tasters de deixar ainda mais pacotes altamente infundidos. 393 | Esse design poderia tornar pacotes menos infundidos mais atraentes tanto para apoiadores quanto para tasters. 394 | Também pode incentivar desenvolvedores experientes a criar alternativas para pacotes altamente infundidos, criando uma oportunidade para a comunidade tea equilibrar o suporte ao software existente e promover a inovação. 395 | A taxa de "infusão" será calculada usando o suprimento circulante em seu design inicial. 396 | A comunidade tea pode alterar esse design para aprimorar ainda mais a escalabilidade do sistema. 397 | Seja $\chi$ a taxa de "deixar" em todos os pacotes. 398 | Ela representa o número total de tokens de tea infundidos pelos mantenedores de pacotes, usuários de pacotes, apoiadores e patrocinadores de pacotes, e tasters de tea dividido pelo suprimento total de tokens de tea. 399 | Dado quantos pacotes de código aberto estão disponíveis hoje e seu crescimento esperado, $\chi$ será sempre um valor muito pequeno entre $0$ e $1$. 400 | 401 | Considere $\psi$ como a taxa de staking. 402 | Ela representa o número total de tokens de ea apostados por qualquer participante da rede para garantir a segurança da rede. 403 | 404 | Considere $\chi_{ideal}$ como a taxa de infusão que gostaríamos que cada pacote alcançasse para uma distribuição justa de recompensas entre todos os pacotes e suas dependências. 405 | O valor de $\chi_{ideal}$ deve ser atualizado à medida que novos pacotes são adicionados ao registro descentralizado e dependências são criadas. 406 | Para determinar o melhor valor para $\chi_{ideal}$, usaremos uma curva de popularidade atualizada no início de cada ciclo de recompensas. 407 | 408 | Considere $\tau = \tau(\chi)$ como a taxa de juros anual de infusão distribuída a todos os membros da comunidade de tea que infundem tokens de tea para apoiar desenvolvedores de código aberto. 409 | Em outras palavras, $\tau(\chi)$ corresponde à recompensa de infusão recebida ao longo de um ano por um membro da comunidade que infunde tokens de tea durante todo o ano. 410 | 411 | Considere $\gamma = \gamma(\psi)$ como a taxa de juros anual de staking distribuída a todos os operadores de *nodes* e participantes da rede que apostam tokens de tea para garantir a rede. 412 | Em outras palavras, $\gamma(\psi)$ corresponde à recompensa de staking recebida ao longo de um ano por um membro da comunidade que aposta tokens de tea durante todo o ano. 413 | 414 | Considere $\delta$ como a inflação anual direcionada ao tesouro da rede. 415 | $\delta$ pode variar à medida que fatores externos afetam o fornecimento de tokens. 416 | 417 | Consideramos a taxa de recompensa anual de infusão como uma função de $\chi$ e a taxa de recompensa anual de staking como uma função de $\psi$. 418 | 419 | * $\tau(\chi)$ corresponde ao incentivo para as pessoas infundirem um pacote. 420 | Conforme $\chi$ aumenta, são necessárias menos recompensas $\tau(\chi)$. 421 | * $\gamma(\psi)$ corresponde ao incentivo para as pessoas apostarem na rede. 422 | Conforme $\psi$ aumenta, são necessárias menos recompensas $\gamma(\psi)$ para garantir a rede 423 | 424 | A inflação anual $I$ será equivalente a $(\tau + \gamma + \delta)$ e calculada da seguinte forma 425 | 426 | $$ 427 | I = \frac{\textrm{oferta de tokens no final do ano} - \textrm{oferta de tokens no início do ano}}{\textrm{oferta de tokens no início do ano}} = (\tau + \gamma + \delta) 428 | $$ 429 | 430 | A contribuição para a inflação de $\tau_{\textsc{all}}$ (incentivo distribuído a todos os infusores de pacotes) e $\gamma_{\textsc{all}}$ (incentivo distribuído entre todos os contribuidores para a segurança da rede) deve ser ponderada para garantir que o sistema incentive a proporção ideal de infusão/aposta. 431 | 432 | Enquanto focamos nos incentivos distribuídos a todos os infusores de pacotes, determinamos que 433 | $\tau_{\textsc{all}}$ 434 | é uma função da taxa de infusão $\chi$ e, portanto, 435 | $\tau_{\textsc{all}}(\chi) = \chi \cdot \tau(\chi)$. 436 | A partir de nossa análise anterior, podemos ver que 437 | $\tau_{\textsc{all}}(\chi_{ideal}) = \chi_{ideal} \cdot \tau_{ideal}$. 438 | Uma vez que o objetivo é atingir um estado onde 439 | $\chi = \chi_{ideal}$ 440 | , as recompensas 441 | $\tau_{ideal}(\chi)$ 442 | devem ser máximas nesse valor. 443 | 444 | Considere $\tau_{ideal} = \tau(\chi_{ideal})$ 445 | como a taxa de recompensa entregue pela rede no cenário ideal onde 446 | $\chi = \chi_{ideal}$. 447 | 448 | Considere $\tau_{0}$ como o limite de $\tau_{\textsc{all}}(\chi)$ quando $\chi$ tende a zero, quando nenhum membro da comunidade de tea infunde pacotes. 449 | O valor de $\tau_{0}$ deve ser próximo de zero, mas não zero, para incentivar os primeiros adotantes. 450 | Conforme sugerido pela pesquisa da Web3 Foundation, propomos que: 451 | 452 | * a função de inflação cresça linearmente entre $\chi = 0$ e $\chi = \chi_{ideal}$, e 453 | * decaia exponencialmente entre $\chi = \chi_{ideal}$ e $\chi = 1$. 454 | 455 | Escolhemos um decaimento exponencial semelhante para $\tau_{\textsc{all}}(\chi)$ porque implica um decaimento exponencial de $\tau(\chi)$, e queremos que as recompensas caiam abruptamente além de $\chi_{ideal}$ para evitar que um único pacote receba todas as recompensas. 456 | 457 | O decaimento é definido para que a taxa de inflação diminua no máximo em 50% quando $\chi$ se desloca $d$ unidades à direita de $\chi_{ideal}$ – ou seja, 458 | $\tau_{\textsc{all}}(\chi_{ideal} + d) \geq \tau_{\textsc{all}} \cdot 0.5$. 459 | 460 | Propomos as seguintes funções de taxa de juros e inflação, que dependem dos parâmetros $\chi_{ideal}$, $\tau_{ideal}$, $\tau_{0}$ e $d$. 461 | 462 | \begin{align*} 463 | &\tau_{\textsc{all}}(\chi) = \tau_{0} + (\tau_{\textsc{all}}(\chi_{ideal}) - \tau_{0})\frac{\chi}{\chi_{ideal}}\enspace\textrm{for}\;0 < \chi \leq \chi_{ideal} \\ 464 | &\tau_{\textsc{all}}(\chi) = \tau_{0} + (\tau_{\textsc{all}}(\chi_{ideal}) - \tau_{0}) \cdot 2^{(\chi_{ideal}-\chi)/d}\enspace\textrm{for}\;\chi_{ideal} < \chi \leq 1 465 | \end{align*} 466 | 467 | Assim como os benfeitores precisam ser recompensados, os malfeitores precisam ser identificados e penalizados. 468 | O software de código aberto oferece muitas oportunidades para malfeitores criarem pontos de dor e riscos reputacionais para toda uma comunidade de desenvolvedores. 469 | Desde a apropriação indébita de trabalho até a alteração e redistribuição de pacotes de software, ou a inserção de código malicioso, a guerra entre bons e malfeitores continua, muitas vezes com malfeitores bem financiados que veem a contaminação de pacotes de código aberto como uma oportunidade de lucrar financeiramente. 470 | As consequências têm sido relativamente mínimas, com pacotes potencialmente banidos das prateleiras digitais ou sujeitos a uma má reputação. 471 | 472 | Propomos a introdução de um mecanismo de corte para estabelecer uma desvantagem mais significativa que afete diretamente o valor econômico dos malfeitores. 473 | Conforme os tea tasters avaliam e analisam o código nos pacotes recém-submetidos, sugerimos que recebam ferramentas e incentivos para identificar e destacar códigos maliciosos, de forma que os usuários dos pacotes possam ser alertados sobre os riscos, e os mantenedores do pacote, apoiadores do pacote e patrocinadores sejam penalizados por submeter ou apoiar código malicioso. 474 | Nesse sentido, para todas as avaliações negativas evidenciadas conforme as regras da rede e que foram tratadas pelo mantenedor do pacote dentro do período definido pelo governo, o mantenedor do pacote não deve incorrer em nenhuma penalidade contrária aos apoiadores do pacote e patrocinadores, ou dos tea tasters que forneceram uma avaliação positiva do pacote em questão. 475 | Para avaliações negativas realizadas de acordo com as regras da rede e que o mantenedor do pacote não tenha abordado dentro do período definido pela governança, uma fração dos tokens infundidos pelo mantenedor do pacote, pelos apoiadores do pacote e patrocinadores, e pelos tea tasters anteriores será cortada. 476 | Outra fração será bloqueada em um pool de seguro controlado pela governança do tea. 477 | A governança do tea estabelecerá políticas e regras em estreita colaboração com a comunidade para distribuir o conteúdo do pool para aqueles afetados por vulnerabilidades. 478 | O protocolo distribuirá uma terceira fração dos tokens infundidos entre todos os tea tasters que contribuíram para a avaliação negativa e infundiram "contra" o pacote, com base no número de tokens de tea que infundiram "contra" o pacote e quanto tempo esses tokens foram infundidos. 479 | Em outras palavras, quanto mais cedo um ou mais tea tasters identificarem e relatarem a falha de acordo com as regras da rede, maior será a recompensa que receberão por apoiar o desenvolvimento de código aberto seguro e produtivo. 480 | 481 | Para evitar que os membros da comunidade votem aleatoriamente "contra" pacotes altamente infundidos na esperança de receber a maioria de qualquer penalidade, todos os tokens de tea infundidos "contra" não serão recompensados com inflação e podem estar sujeitos a um mecanismo de decaimento, reduzindo assim seu valor ao longo do tempo. 482 | 483 | [^19]: Fonte: @web3 484 | 485 | 486 | # Governança 487 | 488 | A governança é fundamental para o desenvolvimento, sustentabilidade e adoção de qualquer sistema distribuído. 489 | 490 | Propomos que o tea inclua uma governança on-chain, onde todos os detentores de tokens de tea possam sugerir e votar em mudanças nos parâmetros críticos ponderados pela posse de tokens e reputação. 491 | Esses parâmetros podem incluir inflação, taxas de transação, recompensas de staking, recompensas de infusão ou a proporção ideal de infusão. 492 | Essa funcionalidade garantirá que os parâmetros críticos possam evoluir e ser otimizados ao longo do tempo pelos membros da comunidade de tea. 493 | Antecipamos que a governança será lançada com uma estrutura simples e se expandirá progressivamente à medida que o sistema tea amadureça, facilitando a adoção e garantindo uma descentralização progressiva. 494 | 495 | Alguns parâmetros do sistema podem não estar sujeitos à governança ou apoiar mudanças de alta frequência para reduzir a superfície de ataque representada pela governança. 496 | Uma transição progressiva dos parâmetros para uma governança aberta e descentralizada garantirá a estabilidade e previsibilidade do sistema. 497 | 498 | 499 | # Extensibilidade de Terceiros 500 | 501 | Enquanto construímos as ferramentas iniciais para impulsionar o suporte há muito esperado das comunidades de código aberto, acreditamos que parte de nossa missão é garantir que terceiros possam expandir o conjunto de ferramentas como um todo. 502 | Além de fornecer a infraestrutura para os desenvolvedores criarem extensões para o protocolo, incluindo novas formas de inovar e ampliar o apoio aos desenvolvedores de código aberto, nossos planos incluem o potencial para outros gerenciadores de pacotes contribuírem para o protocolo. 503 | Os sonhos e esforços dos desenvolvedores de código aberto construíram a inovação que sustenta nossa vida cotidiana. 504 | Estamos ansiosos para descobrir os novos usos e extensões para o tea propostos pela comunidade tea. 505 | 506 | 507 | # Trabalho Futuro e Possíveis Esforços Comunitários 508 | 509 | À medida que o sistema tea amadurece, prevemos que a comunidade decida e contribua para alterações e extensões do sistema tea por meio da governança. 510 | Abaixo estão algumas ideias que acreditamos que possam inspirar alguns. 511 | 512 | ## Atacadistas de tea 513 | 514 | As comunidades de software de código aberto são vibrantes e estão sempre em busca de inovação e entrega de valor. 515 | Esta dedicação e altruísmo levam à constante construção de novos softwares e pacotes, cada um puxando dependências. Como resultado, antecipamos que o mapa de dependências evolua constantemente, levando a mudanças frequentes na proporção de infusão e recompensas. 516 | No futuro, a comunidade tea pode propor o desenvolvimento de um sistema projetado para monitorar dinamicamente a proporção de infusão para cada pacote e reequilibrar como os apoiadores de pacotes infundem seus tokens com base em seus próprios critérios. 517 | 518 | ## Royalties em Transferência de Pacotes 519 | 520 | Reconhecemos que os mantenedores de pacotes podem decidir transferir sua fonte de recompensas de infusão para um ou mais desenvolvedores. 521 | A governança dessa transferência deve permanecer na decisão do mantenedor do pacote e de seus parceiros, sem interferência do tea. 522 | Ferramentas serão necessárias para que essa transferência seja total ou parcial (talvez através de apenas uma parte das recompensas de infusão sendo redirecionada para um ou mais desenvolvedores, enquanto as recompensas restantes continuam a fluir para o mantenedor original do pacote) 523 | e para que as recompensas de infusão fluam por meio de uma única conta controlada por um único participante da rede, vários participantes da rede ou sejam distribuídas automaticamente entre várias contas usando proporções estáticas ou dinâmicas. 524 | 525 | ## Distribuição de Recompensas Entre Múltiplos Mantenedores 526 | 527 | A manutenção de um pacote pode depender do trabalho de uma ou mais equipes de desenvolvedores. 528 | Antes que as recompensas de infusão comecem a fluir, as equipes devem considerar automatizar a distribuição das recompensas de infusão entre si. 529 | Como a distribuição ocorre deve ser decidido pelos mantenedores, já que estão na melhor posição para avaliar quem contribuiu e como devem ser recompensados. 530 | Para realizar isso, cada equipe (ou equipes) poderia criar sua própria organização autônoma descentralizada (DAO) e automatizar a distribuição de recompensas ou implementar sistemas mais complexos para determinar a distribuição adequada de recompensas com base em fatores externos, como um voto de todos os membros da DAO, ou distribuições baseadas no tempo com base em contribuições contínuas, conclusão bem-sucedida de recompensas, etc. 531 | 532 | ## Tratamento de "Forks" de Pacotes 533 | 534 | Acreditamos que "forks" são essenciais e amplamente subutilizados. 535 | "Forks" podem ser uma ferramenta eficaz para desenvolver pacotes que competem em funcionalidade, desempenho, segurança e até mesmo atenção. 536 | Por mais úteis que possam ser, os "forks" devem reconhecer os esforços originais. 537 | Através de trabalho futuro ou contribuições potenciais, a comunidade tea pode aprimorar o sistema para exigir que os "forks" sejam declarados, talvez até detectados quando um pacote é submetido. 538 | "Forks" não declarados revelados por tea tasters podem resultar em uma parte dos tokens infundidos sendo cortados, transferidos para o mantenedor original do pacote e enviados aos tea tasters que revelaram o "fork" 539 | 540 | ## Dependências de Tempo de Compilação vs. Dependências de Tempo de Execução 541 | 542 | O tea pode não distinguir as dependências de tempo de compilação das dependências de tempo de execução ao distribuir recompensas de infusão no lançamento. 543 | No entanto, desde que a comunidade tea sinta fortemente a necessidade de fazer essa distinção, a comunidade tea pode propor melhorias ao algoritmo de distribuição de recompensas de infusão para considerar a criticidade de cada dependência e sua contribuição para o valor dos pacotes que dependem delas. 544 | Essas propostas seriam votadas e implementadas com base na decisão da comunidade. 545 | 546 | ## Remuneração Baseada em Uso 547 | 548 | À medida que mais aplicações são construídas usando pacotes registrados com o tea, a comunidade pode aprimorar o algoritmo de recompensa para que a alocação possa ser influenciada por conjuntos de dados externos atestados, como o uso. 549 | Essa atualização do mecanismo de recompensas poderia permitir uma alocação maior de recompensas em tokens de tea para pacotes com o maior uso, ao mesmo tempo em que respeita as restrições da proporção de infusão descritas na seção de tokens de tea. 550 | Os mantenedores de pacotes poderiam usar uma abordagem semelhante para distribuir recompensas de infusão entre suas dependências com base na lógica transparente de sua escolha. 551 | Observe que todas as informações usadas para afetar a distribuição de recompensas entre pacotes e dependências no sistema tea precisarão ser comprovadamente confiáveis. 552 | 553 | 554 | # Agradecimentos 555 | 556 | Este white paper não existiria sem o apoio e dedicação de muitos entusiastas do tea. 557 | Os autores gostariam de agradecer a Josh Kruger, Jadid Khan e Jacob Heider por sua contribuição para a economia dos tokens e aos muitos indivíduos discretos que voluntariamente dedicaram seu tempo para fornecer feedback sobre o conteúdo deste documento. 558 | 559 | $\parskip=0pt plus 1pt$ 560 | 561 | # Glossário de Termos 562 | 563 | | Termo | Definição | 564 | |------|------------| 565 | | Folha | A menor denominação do token de tea. Uma folha corresponde a uma centésima milionésima ($10^{-8}$) parte de um tea. | 566 | | Slashing | A ação de penalizar infusores ou stakers em resposta a comportamentos contrários às regras da rede. | 567 | | Staking | A ação de travar tokens de tea para garantir a rede de prova-de-participação na qual o sistema de tea é construído. | 568 | | Infusão | A ação de travar tokens de tea para apoiar sua reivindicação e receber recompensas (ou penalidades) com base no consenso sobre a validade de sua reivindicação. | 569 | 570 | 571 | # Referências 572 | -------------------------------------------------------------------------------- /i18n/vi/metadata.yml: -------------------------------------------------------------------------------- 1 | title: Giao thức trả thưởng phi tập trung cho hệ sinh thái mã nguồn mở 2 | abstract: |- 3 | Việc tạo một sổ đăng ký mở, công khai và có tính ổn định cho tất cả phần mềm 4 | mã nguồn mở sẽ cấp quyền cho các dự án tự xuất bản các bản phát hành một cách 5 | độc lập thay vì dựa vào các bên thứ ba, những người tập hợp dữ liệu phức tạp 6 | này thành hàng trăm hệ thống riêng biệt (và trùng lặp). Những người bảo trì 7 | gói sẽ xuất bản các bản phát hành của họ lên một sổ đăng ký phi tập trung 8 | được cung cấp bởi chuỗi khối có khả năng chịu lỗi Byzantine để loại bỏ các 9 | nguồn lỗi độc lập, cung cấp các bản phát hành bất biến và cho phép các cộng 10 | đồng quản lý các khu vực của họ trong hệ sinh thái nguồn mở, độc lập với các 11 | chương trình nghị sự bên ngoài. 12 | 13 | Tea khuyến khích việc duy trì nguồn mở bằng cách cho phép những người tham 14 | gia mạng stake giá trị vào các gói mà họ phụ thuộc và muốn bảo mật. Biểu đồ 15 | của giao thức Tea cung cấp việc đăng ký các gói bất biến, các yêu cầu phụ 16 | thuộc, tính xác thực của gói và các nguồn dữ liệu được sử dụng để truyền cho 17 | thuật toán trả thưởng Tea. Lạm phát có hệ thống được phân phối cho tất cả các 18 | gói dựa trên thuật toán đó. Nếu các vấn đề về bảo mật hoặc phát triển được 19 | phát hiện, nhà phát triển có thể đưa ra yêu cầu được hỗ trợ bởi bằng chứng đó 20 | và việc loại bỏ có thể xảy ra. Các thành viên của cộng đồng nguồn mở có thể 21 | xem xét các vấn đề chất lượng của gói và giao thức có thể phản hồi các đánh 22 | giá này bằng cách tạo các sự kiện sửa lỗi liên quan. 23 | author: 24 | - Max Howell 25 | - Timothy Lewis 26 | - Thomas Borrel 27 | references: 28 | - id: sources 29 | url: https://github.com/teaxyz/white-paper 30 | - id: cc 31 | url: https://creativecommons.org/licenses/by-sa/4.0/ 32 | - id: nist 33 | url: https://nvd.nist.gov/vuln/detail/CVE-2021-44228 34 | - id: reuters 35 | url: https://www.reuters.com/article/usa-cyber-vulnerability-idCNL1N2SY2PA 36 | - id: twitter 37 | url: https://twitter.com/yazicivo/status/1469349956880408583 38 | - id: w3 39 | url: https://www.w3.org/TR/did-core/ 40 | - id: theregister 41 | url: https://www.theregister.com/2016/03/23/npm_left_pad_chaos/ 42 | - id: fossa 43 | url: https://fossa.com/blog/npm-packages-colors-faker-corrupted/ 44 | - id: lunasec 45 | url: https://www.lunasec.io/docs/blog/node-ipc-protestware/ 46 | - id: github 47 | url: https://github.com/dominictarr/event-stream/issues/116 48 | - id: zdnet 49 | url: https://www.zdnet.com/article/open-source-software-how-many-bugs-are-hidden-there-on-purpose/ 50 | - id: threatpost 51 | url: https://threatpost.com/backdoor-found-in-utility-for-linux/147581/ 52 | - id: fbi 53 | url: https://www.fbi.gov/news/stories/phantom-secure-takedown-031618 54 | - id: europol 55 | url: https://www.europol.europa.eu/media-press/newsroom/news/800-criminals-arrested-in-biggest-ever-law-enforcement-operation-against-encrypted-communication 56 | - id: medium 57 | url: https://medium.com/intrinsic-blog/compromised-npm-package-event-stream-d47d08605502 58 | - id: semver 59 | url: https://semver.org/ 60 | - id: npmjsCrossenv 61 | url: https://blog.npmjs.org/post/163723642530/crossenv-malware-on-the-npm-registry.html 62 | - id: npmjsLodash 63 | url: https://www.npmjs.com/package/lodash 64 | - id: npmjsChalk 65 | url: https://www.npmjs.com/package/chalk 66 | - id: npmjsLogFourjs 67 | url: https://www.npmjs.com/package/log4js/ 68 | - id: arxiv 69 | url: https://arxiv.org/abs/1207.2617/ 70 | - id: web3 71 | url: https://research.web3.foundation/en/latest/polkadot/overview/2-token-economics.html 72 | header-includes: 73 | - \usepackage{fancyhdr,ragged2e} 74 | - \lhead{\parbox[t]{0.5\textwidth}{\RaggedRight\rightmark\strut}} 75 | - \rhead{\parbox[t]{0.5\textwidth}{\RaggedLeft\leftmark\strut}} 76 | - \setlength{\headheight}{5\baselineskip} 77 | - \pagestyle{fancy} 78 | - \fancyfoot[LE,RO]{© 2022 tea.inc.} 79 | - \fancyfoot[L]{v1.0.5+vi} 80 | lang: vi # https://pandoc.org/MANUAL.html#language-variables 81 | dir: ltr # language direction; ltr:left-to-right or rtl:right-to-left 82 | translator: 83 | - Le Phuoc Can -------------------------------------------------------------------------------- /i18n/vi/white-paper.md: -------------------------------------------------------------------------------- 1 | # Tuyên bố miễn trừ trách nhiệm 2 | 3 | Thông tin nêu trong sách trắng này là thông tin sơ bộ. Do đó, cả tác giả cũng như bất kỳ nhánh tương ứng nào của họ đều không chịu bất kỳ trách nhiệm nào rằng thông tin nêu ở đây là cuối cùng hoặc chính xác và mỗi tuyên bố từ chối trách nhiệm nêu trên, trong phạm vi tối đa được luật hiện hành cho phép, bất kỳ và tất cả trách nhiệm pháp lý cho dù phát sinh trong hợp đồng, hoặc mặt khác liên quan đến sách trắng này. 4 | Sách trắng này cũng như bất kỳ nội dung nào trong tài liệu này sẽ không tạo thành cơ sở hoặc được dựa vào có liên quan đến hoặc hành động như một sự xúi giục kêu gọi để ký kết bất kỳ hợp đồng hay cam kết nào. 5 | 6 | Không có nội dung nào trong sách trắng này cấu thành một đề nghị bán hoặc chào mời mua bất kỳ mã thông báo nào được thảo luận ở đây. 7 | Trong bất kỳ trường hợp nào, liệu sách trắng này có được coi là một lời đề nghị hoặc lời chào mời như vậy không, không có lời đề nghị hoặc lời chào mời nào như vậy được dự định hoặc chuyển tải bởi sách trắng này ở bất kỳ khu vực tài phán nào nếu làm như vậy là bất hợp pháp, 8 | khi lời đề nghị hoặc lời chào mời đó sẽ yêu cầu giấy phép hoặc đăng ký, hoặc khi đề nghị hoặc chào mời như vậy bị hạn chế. Đặc biệt, bất kỳ mã thông báo nào được thảo luận ở đây đều chưa được đăng ký theo chứng khoán hoặc luật tương tự của bất kỳ khu vực tài phán nào, 9 | kể từ ngày phát hành sách trắng này, cho dù khu vực tài phán đó có coi các mã thông báo đó là là chứng khoán hoặc công cụ tương tự và không được cung cấp hoặc bán ở bất kỳ khu vực tài phán nào nếu làm như vậy sẽ cấu thành vi phạm luật liên quan của khu vực tài phán đó. 10 | 11 | 12 | # Giấy phép 13 | 14 | Mã nguồn[^src] của sách trắng này có sẵn theo giấy phép Creative Commons Attribution-ShareAlike 4.0 International[^cc]. 15 | 16 | [^src]: Xem thêm: @sources 17 | [^cc]: Xem thêm: @cc 18 | 19 | 20 | # Lời nói đầu 21 | 22 | Internet chủ yếu bao gồm các dự án nguồn mở và chúng đã được thành lập. 23 | Theo thời gian, nhiều dự án này đã trở thành những phần nền tảng mà tất cả các đổi mới trong tương lai được xây dựng. 24 | Và trong khi vận may đã được tạo ra từ nó, nguồn mở chủ yếu được tạo ra và duy trì mà không cần trả phí. 25 | 26 | To fully realize our potential, we need a fair remuneration system for the open-source ecosystem that doesn’t fundamentally change how it is built or utilized. 27 | Chúng tôi tin rằng toàn bộ nỗ lực của con người hiện đại đã bị cản trở khi dựa vào phẩn ít các kỹ sư trên thế giới để lựa chọn giữa tiền lương hoặc duy trì hoạt động trên Internet. 28 | Nguồn mở là lao động phi lợi nhuận thường bị cản trở do thiếu các động cơ về kinh tế dẫn đến các dự án thực sự đáng giá không bao giờ đạt được tiềm năng của chúng trong khi các dự án khác gặp vấn đề về bảo mật do thiếu các động lực để duy trì phần mềm trong suốt vòng đời của nó. 29 | Để nhận ra đầy đủ tiềm năng của chúng tôi, chúng tôi cần một hệ thống trả thù lao công bằng cho hệ sinh thái nguồn mở mà không thay đổi về cơ bản cách nó được xây dựng hoặc sử dụng. 30 | 31 | Các doanh nghiệp thường bao bọc các mô hình kinh doanh xung quanh mã nguồn mở, tạo doanh thu trực tiếp từ công việc của các nhà phát triển cốt lõi từ trong khi cũng dựa vào chúng để khắc phục lỗi khi xảy ra vấn đề. 32 | Một ví dụ tuyệt vời là một sự cố gần đây liên quan đến lỗ hổng bảo mật quan trọng trong Log4j, một gói từ Quỹ phần mềm Apache đã tìm thấy trên nhiều phần mềm và dịch vụ thương mại được sử dụng bởi các doanh nghiệp và chính phủ. 33 | Vào tháng 11 năm 2021, một nhà nghiên cứu bảo mật làm việc cho Alibaba Group Holding Ltd. đã báo cáo lỗ hổng CVE-2021-44228[^1], nhận được điểm cơ bản cao nhất có thể từ Quỹ phần mềm Apache. Amit Yoran, giám đốc điều hành của Tenable và Giám đốc sáng lập của đội ngũ sẵn sàng khẩn cấp máy tính Hoa Kỳ (US-CERT), đã mô tả lỗ hổng này là một lỗ hổng lớn nhất trong thập kỷ qua[^2]. 34 | Panic xảy ra sau đó và một vài tình nguyện viên duy trì gói này đã công khai bị sa thải vì thất bại. 35 | Sau khi giải quyết sự phẫn nộ với một lời cầu xin khiêm tốn cho sự công bằng, các hệ thống đã được vá lại. 36 | Các doanh nghiệp và chính phủ cuối cùng đã nhận ra rằng Log4j, một gói được sử dụng bởi một loạt các hệ thống quan trọng trong hai thập kỷ, được duy trì bởi một vài tình nguyện viên không được trả lương, cùng một anh hùng vô danh đã hành động bất chấp sự lạm dụng của ngành công nghiệp[^3] và làm việc không mệt mỏi để giải quyết lỗ hổng. 37 | 38 | Đáng buồn thay, Log4j không phải là ví dụ duy nhất. 39 | core-js được tải xuống 30 triệu lần mỗi tuần dưới dạng cơ sở của mọi ứng dụng Node.js, nhưng nó cũng hầu như không được tài trợ. 40 | Gần đây, một số nhà phát triển Bitcoin Core đã từ chức, trích dẫn, trong số các lý do khác, *thiếu lợi ích tài chính* cho quyết định của họ. 41 | 42 | Đã có nhiều nỗ lực cung cấp các cấu trúc khuyến khích, thường liên quan đến các hệ thống tài trợ và tiền thưởng. 43 | Khoản tài trợ giúp người tiêu dùng có thể quyên góp cho các dự án mà họ ủng hộ. 44 | Tuy nhiên, bức tranh mã nguồn mở như một tòa tháp bằng gạch nơi các lớp thấp hơn bị lãng quên từ lâu, nhưng vẫn được duy trì bởi các kỹ sư chuyên dụng và dựa vào nhiều nhà phát triển hơn nữa. 45 | Chỉ các dự án ở đầu tháp thường được biết đến và nhận tài trợ. Lựa chọn thiên vị này dẫn đến những viên gạch thiết yếu giữ tòa tháp không thu hút được sự đóng góp, trong khi các mục yêu thích nhận được nhiều hơn họ cần. 46 | Bounties cho phép người tiêu dùng các dự án đề xuất thanh toán cho các nhà phát triển để xây dựng các tính năng cụ thể, do đó chỉ các dự án trả thù lao để làm những việc không nhất thiết là lợi ích tốt nhất của họ. 47 | Và một lần nữa, chỉ có yêu thích bổ ích. 48 | 49 | Trong bài báo này, chúng tôi đề xuất Tea — một hệ thống phi tập trung cho các nhà phát triển mã nguồn mở nhận thù lao một cách công bằng dựa trên sự đóng góp của họ cho toàn bộ hệ sinh thái và được ban hành thông qua thuật toán khuyến khích Tean được áp dụng trên tất cả các mục trong đăng ký Tea. 50 | 51 | ![Góc nhìn đơn giản của hệ thống phần thưởng Tea.](img/figure-1.svg) 52 | 53 | $\parskip=0pt plus 1pt$ 54 | 55 | [^1]: Nguồn: @nist 56 | [^2]: Nguồn: @reuters 57 | [^3]: Nguồn: @twitter 58 | 59 | 60 | # Các thành phần 61 | 62 | Một nhà phát triển phần mềm xây dựng một ứng dụng cần bốn điều: trình duyệt, thiết bị đầu cuối, trình soạn thảo và người quản lý gói. 63 | Trong số bốn người này, trình quản lý gói là thứ kiểm soát công cụ và khung mà nhà phát triển cần xây dựng sản phẩm của họ. 64 | Lớp này là nơi chúng ta thấy tiềm năng để thay đổi cách thức nguồn mở được trả thù lao. 65 | 66 | ## Người quản lý gói 67 | 68 | Người quản lý gói biết phần mềm mã nguồn mở mà một ứng dụng phụ thuộc vào chức năng, từ ngọn ngành đến gốc rể của nó. 69 | Mỗi thành phần và phiên bản cần thiết cho ứng dụng được biết và ghi lại. 70 | Nó biết rằng đỉnh của tòa tháp cẩn thận chọn các đối tượng phụ thuộc của nó và sự lựa chọn cẩn thận đó tiếp tục xuống. 71 | Trình quản lý gói được đặt duy nhất trong ngăn xếp công cụ nhà phát triển để cho phép phân phối giá trị chính xác và tự động dựa trên việc sử dụng trong thế giới thực thực tế. 72 | 73 | Chúng tôi đề xuất một cơ quan đăng ký phi tập trung bất biến được thiết kế để phân phối giá trị dựa trên một thuật toán xác định mỗi đóng góp của mục nhập vào tiện ích và sức khỏe của hệ thống. 74 | Giá trị có thể nhập biểu đồ tại các điểm ứng dụng Apex và các thư viện thiết yếu và được phân phối cho các đối tượng phụ thuộc của các điểm Apex đó và các đối tượng phụ thuộc của chúng một cách đệ quy vì Cơ quan đăng ký biết toàn bộ biểu đồ nguồn mở. 75 | 76 | Ngoài ra, chúng tôi tin rằng thông tin vật liệu phải có sẵn thông qua trình quản lý gói cho các nhà phát triển để đánh giá xem họ có thể tin tưởng một gói và tác giả của nó hay không. 77 | Thông tin này có thể dựa trên danh tiếng, danh tiếng cộng đồng, dữ liệu được lấy từ các hệ thống nhận dạng phi tập trung (DID[^4]), các nhà quản lý gói khác hoặc các cơ chế khuyến khích có khả năng dựa vào những người tham gia mạng gây rủi ro cho giá trị kinh tế. 78 | 79 | Chúng tôi dự đoán rằng sự kết hợp các công cụ của Tea, thông tin và phần thưởng sẽ khuyến khích các nhà phát triển, giúp kích thích sự phát triển của phần mềm nguồn mở và thúc đẩy đổi mới. 80 | 81 | [^4]: Xem thêm: @w3 82 | 83 | ## Cơ quan đăng ký phi tập trung 84 | 85 | Mỗi người quản lý gói đều có sổ đăng ký gói riêng lặp lại cùng một siêu dữ liệu. 86 | Đó là thời gian có một cơ quan đăng ký duy nhất, toàn diện và dứt khoát được thiết kế và chi phối bởi các cộng đồng phụ thuộc vào nó. 87 | Cơ quan đăng ký bất biến, phi tập trung này có thể cung cấp bảo mật, ổn định và ngăn chặn ý định xấu xa. 88 | 89 | Internet chạy trên hàng chục ngàn thành phần mã nguồn mở quan trọng. 90 | Điều đáng chú ý là cho đến nay, các sự cố gây ra bởi việc loại bỏ cơ sở hạ tầng mã nguồn mở thiết yếu là tối thiểu. 91 | Nổi tiếng nhất là việc loại bỏ sự phụ thuộc pad[^5]-trái NPM vào năm 2016, được xếp vào các hệ thống tích hợp liên tục và triển khai liên tục khiến các nhà phát triển bỏ mặt trong nhiều ngày. 92 | Sự kiện này đã chứng minh rằng bản thân Internet dựa trên các hệ thống phát triển mong manh. 93 | Các ví dụ khác liên quan đến sự tham gia tích cực hoặc có chủ ý từ người bảo trì gói độc hại phổ biến của họ (Xem colors.js, faker.js[^6], and node-ipc[^7]) hoặc các tác nhân xấu đang tìm kiếm lợi nhuận bằng cách giả vờ duy trì các gói và làm hỏng chúng để đánh cắp, cho ví dụ, các khóa riêng Bitcoin (xem luồng sự kiện[^8]) hoặc các gói độc hại có lỗi chính tả có chủ ý, còn được gọi là lỗi chính tả, với hy vọng lừa người dùng cài đặt chúng, ví dụ như các gói NPM crossenv vs. cross-env [^npmjsCrossenv]. 94 | 95 | Tính toàn vẹn của phần mềm cần được đảm bảo khi ngành công nghiệp tiến tới một tương lai nơi tài sản kỹ thuật số là một phần của phần mềm. 96 | Chúng ta không thể tiếp tục khiến bản thân dễ bị tổn thương trước các diễn viên độc hại sửa đổi phần mềm. 97 | 98 | Hầu hết các công cụ mà chúng tôi gọi là trình quản lý gói không thể đảm bảo rằng các gói này được tích hợp trong các apps và dApps là mã nguồn mở không thay đổi được xuất bản bởi các tác giả ban đầu của chúng. 99 | Github của Microsoft đã phát hiện ra rằng 17% lỗ hổng trong phần mềm được nuôi cấy cho mục đích độc hại[^9], với một số còn lại không bị phát hiện trong thời gian dài (xem Webmin 1.890[^10]). 100 | 101 | Một cơ quan đăng ký phi tập trung được tăng cường bởi một hệ thống danh tiếng và được hỗ trợ bởi các ưu đãi kinh tế được thiết kế để phơi bày các tác nhân xấu và phần thưởng cho các diễn viên giỏi có thể cung cấp cho các cộng đồng phát triển bảo đảm. 102 | 103 | [^5]: Nguồn: @theregister 104 | [^6]: Nguồn: @fossa 105 | [^7]: Nguồn: @lunasec 106 | [^8]: Nguồn: @github 107 | [^npmjsCrossenv]: Nguồn: @npmjsCrossenv 108 | [^9]: Nguồn: @zdnet 109 | [^10]: Nguồn: @threatpost 110 | 111 | 112 | ## Hệ thống lưu trữ 113 | 114 | Các gói nguồn mở cung cấp một loạt các chức năng, một số trong đó có thể bị hạn chế hoặc không mong muốn. 115 | Mã hóa là một ví dụ tuyệt vời về điều đó. Một trường hợp sử dụng quan trọng để mã hóa là sự hỗ trợ của sự riêng tư của cá nhân trên toàn cầu. 116 | Tuy nhiên, mã hóa cũng có thể được sử dụng cho các mục đích bất chính (xem bảo mật Phantom, bị dỡ bỏ bởi các cơ quan thực thi pháp luật vào tháng 3 năm 2018[^11]) hoặc có thể bị xâm phạm để hỗ trợ các hoạt động thực thi pháp luật (xem Chiến dịch Ironside (AFP), Chiến dịch Greenlight (Europol), 117 | và hoạt động Trojan Shield (FBI)[^12] nơi mà FBI vận hành một nền tảng truyền thông “được mã hóa”, AN0M, và đã thuyết phục tội phạm sử dụng điện thoại được mã hóa trên mạng của họ để giao tiếp an toàn). 118 | 119 | Các ứng dụng rộng rãi của mã hóa đã làm cho nó trở thành một trường hợp sử dụng hoàn hảo cho phần mềm nguồn mở và một ví dụ tuyệt vời cho thấy bất kỳ giải pháp nào lưu trữ các gói phải chống giả mạo và chống kiểm duyệt. 120 | Tea là một giao thức phi tập trung không có ý định lọc hoặc xử phạt các gói dựa trên chức năng của chúng. 121 | Mặc dù quản trị Tea có thể chọn loại bỏ các gói độc hại đã được chứng minh (xem phần Quản trị để biết thêm thông tin), nhưng điều quan trọng đối với hệ thống Tea là kết nối với nhiều hệ thống lưu trữ, bao gồm các hệ thống phi tập trung chứng minh rằng một gói không được thay đổi và sao chép chính xác. 122 | Người bảo trì gói có thể chọn hệ thống lưu trữ phù hợp nhất với nhu cầu lưu trữ và phân phối các gói của họ một cách an toàn. 123 | 124 | [^11]: Nguồn: @fbi 125 | [^12]: Nguồn: @europol 126 | 127 | # Những người tham gia mạng lưới 128 | 129 | Nhiệm vụ của Tea là trao quyền cho các cộng đồng nguồn mở và đảm bảo những người đóng góp của họ được hỗ trợ khi họ tạo ra các công cụ xây dựng Internet. 130 | Trong sách trắng này, chúng tôi phân biệt người tham gia thông qua những đóng góp của họ. 131 | Một số có thể đóng góp mã hoặc xác minh mã đóng góp. 132 | Những người khác có thể cung cấp giá trị kinh tế để hỗ trợ các nhà phát triển và danh tiếng của họ. 133 | 134 | ## Người bảo trì gói 135 | 136 | Người bảo trì gói phải đảm bảo phần mềm của họ tiếp tục mang lại giá trị ngày càng tăng khi ngành công nghiệp phát triển. 137 | 138 | Tea giả định rằng những người sáng tạo gói duy trì công việc của họ. 139 | Người bảo trì gói là trụ cột của các cộng đồng nguồn mở, những người cần được trao quyền và thưởng cho những đóng góp liên tục của họ. 140 | Người bảo trì gói có thể quyết định ngừng nỗ lực bảo trì của họ hoặc nhận ra rằng họ không thể hoạt động với tốc độ phù hợp với mong đợi của người dùng gói. 141 | Các nhà bảo trì gói nhận được Token không thể thay thế (NFT) khi họ hoàn thành việc gửi gói (xem phần NFT duy trì để biết thêm chi tiết). 142 | NFT này được sử dụng để chứng minh công việc của họ và là chìa khóa chỉ đạo phần thưởng Tea. Người nắm giữ NFT của gói có thể chuyển quyền sở hữu của mình cho một nhà phát triển khác (hoặc nhóm nhà phát triển), do đó họ trở thành bảo trì gói và người nhận bất kỳ phần thưởng nào trong tương lai. 143 | Tương tự, một nhà phát triển có thể quyết định đảm nhận vai trò bảo trì gói bằng cách lấy gói hiện tại và gửi một gói mới mà họ sẽ duy trì tiến về phía trước, do đó tự trở thành người tạo và bảo trì gói. 144 | 145 | Điều cần thiết là cung cấp cho các cộng đồng nhà phát triển các công cụ phù hợp để xác định các gói nào đang được duy trì và những người bảo trì trong quá khứ và hiện tại của họ danh tiếng và chất lượng công việc. 146 | Chúng tôi thường thấy công việc mã nguồn mở bị giả mạo và những nỗ lực của nhiều người bị hủy hoại bởi các thành phần xấu. 147 | Mặc dù công việc của các tác nhân xấu này phần lớn được phát hiện và khắc phục, nhưng thường phải phát sinh ra thiệt hại đáng kể thông qua mất tài chính hoặc dữ liệu. 148 | Lấy ví dụ, gói NPM EventStream[^13] đã được tải xuống hơn 1,5 triệu lần mỗi tuần và dựa vào hơn 1.500 gói khi một hacker quản lý để thâm nhập dự án nguồn mở, hãy lấy sự tin tưởng của tác giả ban đầu và sửa đổi EventStream để phụ thuộc vào một điều độc hại Gói sẽ vượt qua thông tin về ví Bitcoin cho máy chủ của bên thứ ba\. 149 | Mặc dù các công cụ có thể giúp phát hiện một số cuộc tấn công này, nhưng chúng không thể luôn luôn dựa vào, điều này tạo ra toàn bộ cộng đồng phụ thuộc vào sự siêng năng và sẵn sàng chia sẻ phát hiện của họ. 150 | 151 | Chúng tôi đề xuất giới thiệu các ưu đãi thông qua mã thông báo Tea được mô tả trong phần mã thông báo Tea, khuyến khích các cộng đồng nguồn mở báo cáo phát hiện của họ một cách xây dựng, vì vậy các nhà bảo trì gói có thể giải quyết chúng trước khi chúng bị khai thác. 152 | 153 | [^13]: Nguồn: @medium 154 | 155 | ## Người sử dụng gói 156 | 157 | Người dùng gói là các nhà phát triển phần mềm tập trung vào việc giải quyết một vấn đề cụ thể. 158 | Họ thường tìm kiếm trong cộng đồng nguồn mở cho các công cụ họ cần thử nghiệm một cách nhanh chóng và lặp đi lặp lại với rất ít chi phí, được hưởng lợi trực tiếp từ công việc của người tạo và bảo trì gói. 159 | Theo truyền thống, một tập hợp con có thể đã chọn để hỗ trợ người bảo trì gói thông qua quyên góp hoặc các hình thức thù lao khác; Tuy nhiên, trường hợp này hiếm khi xảy ra. 160 | 161 | Tài trợ có thể là một hệ thống hiệu quả để hỗ trợ phát triển nguồn mở; Tuy nhiên, thù lao thường không mở rộng cho tất cả các phụ thuộc. 162 | Hạn chế này có lợi cho mục yêu thích và cản trở sự đổi mới và xây dựng phần mềm. 163 | Để phấn đấu làm nền tảng phát triển phần mềm, nguồn mở phải trao quyền cho tất cả các nhà phát triển, cho dù là người mới bắt đầu hay chuyên gia, trên tất cả các lớp trong tháp. 164 | 165 | tea’s purpose is to maintain the core values of open-source software while providing a decentralized system to remunerate package maintainers for their work. 166 | To deliver on this mission, tea intends to develop — and incentivize others to develop — mechanisms for package users to support package maintainers through unique use cases of the tea token, as described in the tea token and future work and potential community effort sections. 167 | Mục đích của Tea là để duy trì các giá trị cốt lõi của phần mềm mã nguồn mở trong khi cung cấp một hệ thống phi tập trung cho các nhà bảo trì gói thù lao cho công việc của họ. Để thực hiện nhiệm vụ này, Tea dự định phát triển — và khuyến khích những người khác phát triển — các cơ chế cho người dùng gói để hỗ trợ người bảo trì gói thông qua các trường hợp sử dụng độc đáo của mã thông báo Tea, như được mô tả trong mã thông báo Tea và các phần nỗ lực cộng đồng tiềm năng và trong tương lai. 168 | 169 | ## Những người ủng hộ và nhà tài trợ gói 170 | 171 | Trong Web 2.0 và Web3, những người ủng hộ gói thường được gọi là “nhà tài trợ”. Họ là các tổ chức hoặc người dùng gói sử dụng phần mềm nguồn mở để xây dựng các sản phẩm thương mại của họ, các nhà từ thiện tìm cách hỗ trợ hệ sinh thái hoặc các doanh nhân muốn tài trợ cho các nhóm để phát triển các thành phần của một hệ thống lớn hơn. 172 | 173 | Tea đề xuất mở rộng cộng đồng của những người ủng hộ gói cho toàn bộ cộng đồng Tea, cho dù các tổ chức, nhà phát triển, người dùng hoặc những người đam mê công nghệ. 174 | Mục tiêu của Tea là thực hiện các cơ chế khuyến khích phi tập trung thông qua các trường hợp sử dụng độc đáo của mã thông báo Tea cho bất kỳ thành viên nào của cộng đồng Tea để đóng góp cho sự bền vững vĩnh viễn và tăng trưởng liên tục của mã nguồn mở. 175 | Những người ủng hộ và nhà tài trợ gói có thể tự do quyết định các gói hoặc người bảo trì gói mà họ muốn hỗ trợ dựa trên công việc, niềm tin hoặc bất kỳ tiêu chí và số liệu nào sẽ ảnh hưởng đến quyết định của họ. 176 | Ngoài ra, sự hỗ trợ được cung cấp bởi những người ủng hộ và tài trợ của gói sẽ chảy vào từng phụ thuộc của gói, do đó hoàn toàn tin tưởng vào người bảo trì gói để đưa ra lựa chọn tốt về ngăn xếp của họ và sử dụng thông tin này để đóng góp cho danh tiếng của họ. 177 | 178 | Với điều kiện là người bảo trì gói cung cấp dịch vụ đó, người hỗ trợ và tài trợ gói có thể nhận lại được mức hỗ trợ cao cấp NFT, do đó được hưởng lợi từ SLAs được tăng tốc hoặc cấp phép linh hoạt hơn. 179 | Ngoài ra, những người ủng hộ và tài trợ gói có thể quyết định hỗ trợ các gói hoặc người bảo trì gói và tự động chuyển hướng tất cả hoặc tỷ lệ phần trăm phần thưởng của họ để khuyến khích các nhóm xây dựng phần mềm nguồn mở mới. Nói cách khác, các gói don don cần tồn tại để Tea để bắt đầu đổ vào. 180 | Các dự án mới sinh có thể được hỗ trợ cũng như những dự án trưởng thành hơn, khuyến khích thêm một cảnh quan nguồn mở liên tục. 181 | 182 | ## Người thử nghiệm Tea 183 | 184 | Khi các gói mới hoặc phiên bản mới của các gói hiện tại được phát hành, tính hợp lệ của công việc cần phải được chứng minh một cách chắc chắn. 185 | Thông tin này rất quan trọng đối với người dùng gói để quyết định có tin tưởng cả gói và người bảo trì của nó hay không. 186 | Với giao thức Tea, chức năng này được cung cấp bởi người thử nghiệm Tea. 187 | 188 | Những người thử nghiệm Tea, thông thường, là những nhà phát triển phần mềm có kinh nghiệm sẵn sàng dành một phần thời gian của họ để kiểm tra các khiếu nại liên quan đến gói (chức năng, bảo mật, phiên bản ngữ nghĩa[^14], độ chính xác của giấy phép, v.v.) 189 | và đặt ra cả danh tiếng và giá trị kinh tế của họ để chứng minh kết quả nghiên cứu và phân tích của họ và hỗ trợ đánh giá của họ. 190 | Những người thử nghiệm Tea nhận được phần thưởng cho sự siêng năng và nỗ lực của họ. 191 | Tại Tea, chúng tôi gọi là “dựa vào Tea của bạn” hành động khóa các mã thông báo Tea để hỗ trợ đánh giá của bạn và nhận phần thưởng (hoặc hình phạt) dựa trên sự đồng thuận về tính hợp lệ của các đánh giá của bạn. 192 | 193 | Giống như những người ủng hộ gói, người thử nghiệm Tea có thể ảnh hưởng đến một gói và gói danh tiếng của người bảo trì gói; Tuy nhiên, tác động của chúng có ý nghĩa hơn với vai trò của họ trong việc xác nhận bảo mật, chức năng và chất lượng của gói. 194 | người thử nghiệm Tea cũng sẽ cần xây dựng danh tiếng của họ để hỗ trợ cho các yêu cầu của họ. 195 | Chất lượng công việc của họ và giá trị kinh tế mà họ gặp rủi ro khi họ nhấn mạnh các đánh giá của họ kết hợp với các nguồn dữ liệu bên ngoài khác sẽ xây dựng từng danh tiếng của mỗi người khai thác Tea, mang lại nhiều giá trị hơn cho công việc của họ. 196 | Xem phần Danh tiếng của gói để biết thêm chi tiết về các cơ chế được sử dụng để ảnh hưởng đến một gói và danh tiếng của người bảo trì gói. 197 | 198 | [^14]: Xem thêm: @semver 199 | 200 | # Tổng quan về giao thức 201 | 202 | Thiết kế của một giao thức để thưởng cho các đóng góp nguồn mở được sa lầy với những thách thức. 203 | Phần mềm nguồn mở theo định nghĩa mở cho tất cả mọi người và có thể, như kết quả, có thể phải chịu sự phân phối sai, chiếm đoạt hoặc giả mạo độc hại. 204 | Tuy nhiên, cộng đồng nguồn mở đã liên tục thể hiện sự sẵn sàng làm nổi bật các diễn viên giỏi và phơi bày các diễn viên xấu. 205 | Trong lịch sử, năng lượng dành cho việc xem xét và bình luận về các nhà phát triển khác đóng góp của các nhà phát triển khác đã được tự nguyện hoàn toàn, mặc dù có thể báo cáo và bảo vệ quan trọng như thế nào. 206 | 207 | Chúng tôi dự định tạo ra một nền tảng phân phối không đáng tin cậy cho các ứng dụng được bảo đảm bởi danh tiếng và ưu đãi tài chính, vì chúng tôi tin rằng phần thưởng đầy đủ cho các đóng góp nguồn mở không thể thành công mà không có cả hệ thống danh tiếng và khả năng của các thành viên trong cộng đồng để truyền đạt phát hiện và hỗ trợ của họ (hoặc bất đồng chính kiến) cho một gói hoặc công việc của một nhà phát triển. 208 | 209 | Chúng tôi phải cung cấp cho các nhà phát triển các công cụ để truy cập và đóng góp cho hệ thống danh tiếng này. 210 | Các công cụ bao gồm quyền truy cập trực quan và lập trình đơn giản vào phiên bản và danh tiếng của tất cả các phụ thuộc trong các gói của họ. 211 | Một sự hiểu biết rõ ràng về những thành viên cộng đồng nào hỗ trợ từng gói và số lượng mã thông báo Tea họ sẽ đóng góp vào danh tiếng của mỗi gói, giống như một người bảo trì gói đang giảm bao nhiêu công việc của họ giao tiếp với công việc của họ bao nhiêu. 212 | Những điểm dữ liệu kết hợp này sẽ giúp thông báo cho một hệ thống danh tiếng cho tất cả các thành viên cộng đồng và tạo điều kiện cho sự lựa chọn. Vì gói EventStream không được thực hiện thông qua chính gói, nhưng thông qua một trong những phụ thuộc của nó, khả năng hiển thị trên tất cả các lớp phụ thuộc sẽ rất quan trọng để xây dựng hệ thống không đáng tin cậy này. 213 | Tuy nhiên, các cân nhắc như chi phí tính toán và giao dịch (“gas”) sẽ cần được ưu tiên vì hệ thống được thiết kế và xây dựng. 214 | 215 | Mục tiêu của chúng tôi là thưởng cho cả các nhà phát triển Web 2.0 và Web3. 216 | Sự phức tạp và chi tiết cụ thể của mỗi ngăn xếp làm cho nó để theo dõi các cài đặt và gỡ bỏ các gói có thể dễ dàng trở thành nạn nhân của một hoặc nhiều tác nhân xấu. 217 | Điều đó bao gồm các cài đặt mua hàng của người Viking để làm tăng số lượng nhân tạo. 218 | Một kịch bản thậm chí còn tồi tệ hơn sẽ giới thiệu những thay đổi cơ bản về bản chất của phần mềm nguồn mở bằng cách tạo ra ma sát không cần thiết với các khóa cấp phép hoặc các cơ chế theo dõi triển khai khác. 219 | Để cung cấp phạm vi bảo hiểm rộng nhất, chúng tôi tin rằng phần thưởng phải dựa vào một khái niệm đơn giản về việc theo dõi cài đặt hoặc gỡ cài đặt, mà là các cơ chế khuyến khích khuyến khích việc gửi các gói chất lượng và báo cáo các gói có rủi ro cao hoặc có rủi ro cao. 220 | Cuối cùng, nhiều gói dựa vào các phụ thuộc chung. 221 | Ví dụ, Lodash có 151.209 người phụ thuộc[^15] trong khi thật sự có 78.854 người phụ thuộc[^16] hoặc Log4js có 3.343 người phụ thuộc[^17]. 222 | Khi nhiều gói được tạo ra bằng cách sử dụng cùng một phụ thuộc, làm thế nào để chúng tôi đảm bảo rằng các ưu đãi được phân phối công bằng và công bằng? 223 | Làm thế nào để chúng tôi đảm bảo rằng các phụ thuộc được sử dụng nhiều nhất được thưởng mà không bỏ đói các gói và nhà phát triển mới hoặc mới nổi? 224 | Làm thế nào để chúng tôi đảm bảo rằng hệ thống khuyến khích không kết thúc các nhà phát triển lái ra khỏi các ngôn ngữ thích hợp để tập trung chúng nơi các ưu đãi tốt hơn? 225 | Nhưng cũng là nhà phát triển, làm thế nào để chúng tôi xác định các gói có nhiều người phụ thuộc nhất để xây dựng các lựa chọn thay thế - các phiên bản được mã hóa tốt hơn, hiệu quả hơn, được mã hóa tốt hơn của các gói này? 226 | Tại Tea, chúng tôi tin rằng việc thiếu khuyến khích đã cản trở sự phát triển của phần mềm nguồn mở. 227 | Được hỗ trợ bởi các ưu đãi và phần thưởng kinh tế phù hợp, nhiều nhà phát triển sẽ ở vị trí để xây dựng, cải thiện và tăng cường phần mềm nguồn mở để cải thiện thế giới. 228 | Chỉ sau đó, mã thông báo Tea mới có thể đại diện cho tổng giá trị của phần mềm nguồn mở. 229 | 230 | [^15]: Nguồn: @npmjsLodash 231 | [^16]: Nguồn: @npmjsChalk 232 | [^17]: Nguồn: @npmjsLogFourjs 233 | 234 | ## Đóng gói 235 | 236 | Việc gửi bản phát hành gói đòi hỏi nhiều giao dịch độc quyền diễn ra. 237 | Cụ thể, người bảo trì gói phải: 238 | 239 | * Đăng ký gói (và phiên bản ngữ nghĩa của nó) với sổ đăng ký phi tập trung. 240 | * Tải gói vào hệ thống lưu trữ phi tập trung để có khả năng phục hồi, kháng kiểm duyệt và dễ phân phối. 241 | * Đóng góp cho danh tiếng của gói và sự đáng tin cậy bằng cách *nhúng* token Tea. 242 | 243 | Thất bại của bất kỳ một trong ba hoạt động sẽ dẫn đến giao thức trở lại trạng thái trước đó, do đó loại bỏ bất kỳ bằng chứng nào về việc xác nhận. 244 | 245 | Khi một gói được gửi thành công, người bảo trì gói sẽ nhận được NFT duy trì để chứng minh công việc và đóng góp của họ cho nguồn mở. 246 | Người bảo trì gói có thể chuyển phần thưởng liên quan đến người bảo trì NFT sang bên thứ ba. 247 | Tuy nhiên, danh tiếng liên quan đến việc tạo và bảo trì tài sản sẽ vẫn còn với người bảo trì gói, vì vậy danh tiếng của họ có thể bị ảnh hưởng theo thời gian. 248 | Vì danh tiếng của bất kỳ thành viên nào của cộng đồng Tea đạt được các cột mốc quan trọng, họ có thể được cấp quyền truy cập vào các phần nâng cao của giao thức hoặc nhận phần thưởng được tăng tốc, theo quyết định của quản trị Tea. 249 | Để biết thêm chi tiết về NFT bảo trì, hãy xem phần NFT duy trì. 250 | 251 | ### Phân tích phụ thuộc 252 | 253 | Gói phụ thuộc có thể chạy sâu, vì mỗi gói thường có cả người phụ thuộc và phần phụ thuộc. 254 | Để cung cấp một phương pháp đơn giản thưởng cho tất cả các nhà phát triển đã đóng góp cho phần mềm nguồn mở trong khi vẫn giữ cho việc tạo ra cây phụ thuộc nhanh chóng và tính toán hiệu quả, chúng tôi đề xuất chỉ xác minh các phụ thuộc cấp một khi gửi gói. 255 | 256 | Thiết kế này được thúc đẩy bởi giả thuyết rằng mỗi phụ thuộc là một gói được gửi độc lập cho cây Tea. 257 | Khi làm như vậy, mỗi phụ thuộc của nó có thể được ánh xạ và nếu chính phụ thuộc của nó có sự phụ thuộc, chúng sẽ được ánh xạ tại thời điểm gói phụ thuộc được gửi. 258 | 259 | ![Sơ đồ phân tích phụ thuộc.](img/figure-3.svg){#fig:dep-analysis} 260 | 261 | 262 | In @fig:dep-analysis, the submission of package A triggers an analysis of runtime dependencies 1 through n and build dependencies 1 through n, while runtime dependencies 1.1 through 1.n and build dependencies 1.1 through 1.n were analyzed when package B was submitted. 263 | We will apply the same methodology for incentive distribution as the steeped tokens are distributed across all dependencies, thus recursively steeping the packages listed as dependencies (see @fig:steeping-rewards). 264 | Trong @fig:dep-analysis, việc gửi gói A kích hoạt phân tích các phụ thuộc thời gian chạy 1 đến N và xây dựng phụ thuộc 1 đến N, trong khi các phụ thuộc thời gian chạy 1.1 đến 1.n và xây dựng phụ thuộc 1.1 đến 1.n được phân tích khi gói B đã được gửi. 265 | Chúng tôi sẽ áp dụng phương pháp tương tự cho phân phối khuyến khích khi các mã thông báo được phân phối trên tất cả các phụ thuộc, do đó đệ quy các gói được liệt kê là phụ thuộc (xem @fig:steeping-rewards). 266 | 267 | ![Phân phối phần thưởng dốc trên các phụ thuộc.](img/figure-2.svg){#fig:steeping-rewards} 268 | 269 | 270 | Phiên bản và phụ thuộc mâu thuẫn là những thách thức đáng kể, và việc khắc phục chúng có thể biến thành cống lớn thời gian. 271 | Để giải quyết vấn đề này, chúng tôi đề xuất mỗi gói phải tuân theo quét phụ thuộc toàn diện khi gửi để chúng tôi có thể đảm bảo rằng gói tuân thủ các quy tắc sau cho phạm vi phiên bản ngữ nghĩa. 272 | 273 | * Các gói chỉ có thể ràng buộc các phụ thuộc của chúng vào một phiên bản chính, mặc dù việc bắt đầu phạm vi có thể là bất kỳ phiên bản ngữ nghĩa hợp lệ nào (ví dụ, >= 5.2.1 <6). 274 | * Nếu một sự phụ thuộc được nâng cấp lên một phiên bản chính gần đây hơn, TEA có thể yêu cầu phiên bản chính của gói phải tăng lên. 275 | * Tương tự, nếu một phụ thuộc được nâng cấp lên một phiên bản nhỏ gần đây hơn, TEA có thể yêu cầu phiên bản nhỏ của gói được tăng lên. 276 | * Nếu một phụ thuộc mới được thêm vào, TEA có thể yêu cầu tăng phiên bản nhỏ của gói. 277 | 278 | Xem xét nỗ lực không cần thiết áp đặt cho bất kỳ người dùng gói nào khi các quy tắc trên bị vi phạm, chúng tôi đề xuất rằng một phần của mã thông báo Tea bị cắt giảm bởi người bảo trì gói bị cắt để phản ánh sự thiếu siêng năng của họ. 279 | Nếu một nhà phát triển buộc mọi người phải tung hứng cúp của họ, ai đó sẽ bỏ một ít Tea. Vì việc quét phụ thuộc dự kiến sẽ xảy ra khi nộp, chúng ta nên lưu ý rằng không có việc giảm giá từ những người ủng hộ và tài trợ gói hoặc người nếm Tea sẽ xảy ra. 280 | 281 | ## Gói và gói danh tiếng của người đóng gói 282 | 283 | Người duy trì gói phải đóng góp vào danh tiếng và sự đáng tin cậy của họ bằng cách giảm token Tea. 284 | Tuy nhiên, một hệ thống danh tiếng chỉ dựa vào sự đóng góp kinh tế của tác giả không cung cấp đủ bảo vệ người dùng và có thể phải chịu các cuộc tấn công của Sybil, trong đó một cá nhân duy nhất tạo ra nhiều đại diện của chính họ để để lại một khối lượng lớn các đánh giá tích cực về công việc của họ, lừa người dùng tin rằng công việc của họ đã được nhiều người xem xét và phê duyệt. 285 | 286 | Một số phương pháp có sẵn để ngăn chặn các cuộc tấn công Sybil, một số trong đó được mô tả bởi Nitish Balachandran và Sugata Sanyal trong “một đánh giá về các kỹ thuật để giảm thiểu các cuộc tấn công của Sybil”[^18]. 287 | Vì Tea là một giao thức phi tập trung, sử dụng hệ thống chứng nhận ủy thác dựa trên cơ quan cấp giấy chứng nhận tập trung sẽ trái với cốt lõi của nó. 288 | Chúng tôi đề xuất tập trung vào các phương pháp phi tập trung để giảm thiểu tấn công SYBIL và cụ thể hơn là các phương pháp dựa vào một nhóm lớn những người tham gia mạng được khuyến khích đánh giá và đại diện công khai danh tiếng của từng gói và người bảo trì. 289 | 290 | Tương tự như việc sản xuất các khối trên blockchain bằng chứng, trong đó các nút không sản xuất có thể xác nhận công việc của người khác và khi cần thiết, làm nổi bật sự vi phạm các quy tắc của mạng, dẫn đến việc phạt thông qua việc loại bỏ (phá hủy một phần cổ phần của họ), 291 | chúng tôi đề xuất một hệ thống theo đó các bên thứ ba (aka người thử nghiệm Tea) sẽ có thể xem xét các gói được sản xuất bởi người bảo trì gói và được khuyến khích kinh tế để hành xử vì lợi ích tốt nhất của nguồn mở của nguồn mở Cộng đồng phần mềm và người dùng cũng như nhận ra hành vi tốt và phạt hành vi xấu. 292 | Hệ thống này phải có cả khả năng kháng Sybil và ngăn chặn các giá đỡ mã thông báo lớn ảnh hưởng đến giao thức hoặc danh tiếng của các gói cụ thể. 293 | Chúng tôi tin rằng cách tiếp cận này phù hợp hơn với nguồn mở, cung cấp chất nền màu mỡ hơn để thúc đẩy việc áp dụng và tin tưởng, và cuối cùng tạo điều kiện cho sự phát triển của Tea. 294 | 295 | [^18]: Nguồn: @arxiv 296 | 297 | ## Đánh giá gói của các bên thứ ba 298 | 299 | Việc xem xét các gói của các bên thứ ba là một thành phần thiết yếu của việc xây dựng danh tiếng, tuy nhiên, đánh giá của bên thứ ba có các mối đe dọa độc đáo của riêng mình bao gồm các cuộc tấn công SYBIL đã nói ở trên. 300 | 301 | Công nghệ blockchain, và đặt cược rõ ràng hơn, cung cấp một cơ hội duy nhất cho Tea để giải quyết thách thức này. 302 | Mặc dù địa chỉ ví có thể có sẵn với số lượng vô hạn, nhưng đây không phải là trường hợp với mã thông báo Tea, có nguồn cung ban đầu dự kiến là 10 tỷ. 303 | Ngoài ra, mỗi hành động được thực hiện bởi các nhà phát triển, chẳng hạn như gửi các gói, xác minh các gói hoặc dốc chúng, sẽ đóng góp cho danh tiếng của họ, do đó tạo ra một hồ sơ duy nhất mà mỗi nhà phát triển có thể sử dụng để cả đóng góp cho cộng đồng Tea và tham gia quản trị Tea. 304 | 305 | Bằng cách yêu cầu các nhà đánh giá của bên thứ ba phải tăng mã thông báo Tea và chịu nguy cơ mất một phần mã thông báo dốc của họ nếu họ hành xử chống lại sự quan tâm của mạng hoặc là một diễn viên xấu, các bên thứ ba có thể cung cấp thêm sự tin cậy cho gói và Nhận một phần thưởng, dưới dạng mã thông báo Tea. 306 | 307 | Chúng tôi cũng đề xuất mở rộng hệ thống danh tiếng cho các bên thứ ba thực hiện xác minh độc lập các gói - Những người thử nghiệm Tea. 308 | Việc hoàn thành đánh giá tích cực sẽ yêu cầu hai hoạt động xảy ra gồm: 309 | 310 | * Việc gửi đánh giá mã, được ký bởi người bán Tea và có thể truy cập công khai cho tất cả các thành viên của cộng đồng, cùng với đó 311 | * Hành động dốc “cho” các gói (so với gói “đối lập”), để chứng minh đánh giá của họ. 312 | 313 | 314 | Việc hoàn thành một đánh giá tiêu cực bao gồm một hoặc nhiều lỗ hổng quan trọng sẽ yêu cầu các máy chứa Tea trước tiên liên hệ với người bảo trì gói bằng giao thức nhắn tin để thông báo cho họ về lỗ hổng và cho phép họ giải quyết vấn đề một cách kịp thời. 315 | Khi hết thời hạn được phân bổ cho người bảo trì gói để giải quyết lỗ hổng của họ hoặc khi gói được sửa chữa, cùng một giao thức nhắn tin sẽ được sử dụng để thông báo cho tất cả người dùng và người thử nghiệm gói này (bao gồm cả người phụ thuộc) rằng lỗ hổng đã được được xác định và hy vọng được giải quyết, vì vậy họ biết để cập nhật ứng dụng hoặc phụ thuộc của họ. 316 | Để không tôn trọng sự lãng phí của các nhà phát triển Thời gian, giao tiếp giữa các người thử Tea và người bảo trì gói sẽ yêu cầu các thử Tea để tăng mã thông báo Tea. 317 | 318 | Sau khi hoàn thành cả hai hoạt động, Tasters Tea sẽ nhận được NFT làm bằng chứng về công việc của họ trên gói cụ thể và phiên bản gói. 319 | Sự tích lũy của các NFT kết hợp với tỷ lệ của mỗi gói được xem xét và thông tin được trích xuất từ các hệ thống bên ngoài sẽ thông báo cho danh tiếng của Taster Taster. 320 | Khi danh tiếng của họ đạt đến các cột mốc quan trọng, những người thử nghiệm Tea có thể kiếm được quyền truy cập vào các phần nâng cao của giao thức hoặc phần thưởng tăng tốc, theo quyết định của quản trị Tea. 321 | 322 | ## Các gói lỗi thời hoặc hư hỏng 323 | 324 | Nhiệm vụ của Tea là thưởng cho những người đóng góp và người tham gia vào các cộng đồng nguồn mở; Tuy nhiên, phần thưởng phải tương xứng với những nỗ lực được triển khai bởi người bảo trì gói và thử nghiệm Tea. 325 | Các gói được duy trì, lỗi thời hoặc bị hỏng là dấu hiệu rõ ràng của những người bảo trì gói không sống theo mong đợi của cộng đồng hoặc không mang lại sự tin tưởng và hỗ trợ ấn tượng với họ thông qua việc nhúng các gói. 326 | Một biểu hiện khác của các gói lỗi thời có thể là việc tiếp tục sử dụng ngôn ngữ kế thừa hoặc phiên bản di sản của các ngôn ngữ đa phiên bản. Các gói còn lại lỗi thời hoặc tham nhũng trong quá dài cho thấy những người thử nghiệm Tea cần xem xét các gói bảo trì của gói làm việc thường xuyên và nhất quán. 327 | 328 | Những người thử nghiệm Tea là thành viên quan trọng của các cộng đồng nguồn mở trong đó đánh giá và khiếu nại liên quan của họ có thể hướng người dùng gói hướng tới hoặc tránh xa các gói. 329 | Để đảm bảo rằng các đánh giá có thể được tin cậy trên cơ sở liên tục, chúng tôi đề xuất một cơ chế theo đó các gói lỗi thời hoặc bị hỏng có thể thấy một phần của các token dốc của họ được gửi đến các người thử nghiệm Tea trước tiên để nhận ra việc thiếu bảo trì bất kỳ gói nào. 330 | 331 | Bất kỳ đánh giá tiêu cực nào phác thảo một lỗ hổng như lỗ hổng không ngày hoặc sử dụng sự phụ thuộc lỗi thời và vẫn mở qua thời kỳ ân sủng được xác định bởi quản trị nên được coi là thất bại của người bảo trì gói. 332 | Họ đã không hoàn thành nhiệm vụ mà họ được giao phó và thưởng cho. 333 | Điều tương tự cũng có thể nói đối với những người ủng hộ và tài trợ gói hàng đã đặt ra danh tiếng của họ về công việc của những người bảo trì gói quá hạn và nhận được phần thưởng cho nó, nhưng không xác định được việc thiếu bảo trì hoặc được bầu để tiếp tục hỗ trợ gói bất kể. 334 | 335 | Khi các gói trở nên phổ biến và sử dụng, với nhiều ứng dụng và hệ thống quan trọng có khả năng phụ thuộc vào chúng, chúng tôi phải khuyến khích các nhà phát triển báo cáo lại các lỗ hổng cho người bảo trì gói và bảo trì gói để giải quyết các lỗ hổng đó trước khi chúng có thể bị khai thác. 336 | Do đó, chúng tôi đề xuất rằng bất kỳ gói lỗi thời hoặc bị hỏng nào phải tuân theo một hoặc nhiều đánh giá tiêu cực được chứng minh và vẫn ở trạng thái đó trong thời kỳ ân sủng do quản trị xác định Những người ủng hộ, và các nhà tài trợ hoặc người thử nghiệm Tea trước đó), trong khi một phần khác được gửi đến Tasters Tea đã gửi các đánh giá tiêu cực. 337 | Phân phối cho tất cả các nhà thử nghiệm Tea có thể dựa trên tuổi của đánh giá của họ và số lượng mã thông báo Tead mà họ đã đưa ra để xem xét. 338 | 339 | ## Người duy trì NFT 340 | 341 | Sau khi gửi thành công một gói, người bảo trì gói sẽ nhận được NFT để chứng minh công việc và đóng góp của họ. 342 | Chủ sở hữu của NFT này sẽ tự động nhận tất cả các phần thưởng được liên kết với gói. 343 | Người bảo trì gói có thể chuyển quyền sở hữu bảo trì qua một gói cho người bảo trì gói khác bằng cách chuyển gói NFT gói. Chuyển thành công NFT sẽ dẫn đến chủ sở hữu mới tự động nhận phần thưởng gói trong tương lai. 344 | 345 | Một phần quan trọng của việc xây dựng danh tiếng phụ thuộc vào tần suất và số lượng bài nộp gói chất lượng. 346 | NFT được giao cho các nhà bảo trì gói làm bằng chứng về công việc của họ có thể được sử dụng bởi hệ thống danh tiếng để cập nhật danh tiếng của người bảo trì gói và cho phép họ truy cập vào các phần nâng cao của giao thức, theo quyết định của quản trị Tea. 347 | Tuy nhiên, để ngăn chặn các vectơ tấn công, chẳng hạn như các thành viên cộng đồng mua danh tiếng của họ, việc chuyển giao NFT bảo trì sẽ không dẫn đến việc chuyển giao danh tiếng. Danh tiếng phải duy trì liên kết trực tiếp với một công việc của nhà phát triển cụ thể và không được chuyển nhượng. 348 | 349 | # Mã thông bá Tea 350 | 351 | ## Bảo hiểm mạng lưới 352 | 353 | Mặc dù nhiều blockchain có thể xuất hiện dưới dạng các giải pháp cơ sở hạ tầng hiệu quả và an toàn để hỗ trợ các mục tiêu của Tea, nhưng chúng tôi tin rằng phải xem xét cẩn thận cho ngăn xếp công nghệ mà hệ thống Tea được xây dựng. 354 | 355 | Khả năng mở rộng, hiệu quả chi phí, ESG và khả năng mở rộng của bên thứ ba là những cân nhắc thiết kế quan trọng mà một hệ thống chứng minh cổ phần có chủ quyền của Tea có thể phục vụ tốt hơn. 356 | Để có bằng chứng, các nhà khai thác nút và những người tham gia mạng đã đóng góp giá trị kinh tế dưới dạng mã thông báo gốc chuỗi để tăng bảo mật hệ thống. 357 | Các nhà khai thác nút và người tham gia mạng nhận được phần thưởng cho việc sản xuất thành công các khối tuân thủ các quy tắc của mạng và bao gồm thông tin giao dịch chính xác. 358 | Không hoạt động (AKA Node Down) hoặc hoạt động độc hại/không chính xác bị phạt bằng cách phá hủy một phần của các mã thông báo đặt cược thông qua việc loại bỏ. 359 | 360 | Một hệ thống PoS cung cấp bởi mã thông báo Tea sẽ cho phép những người giữ mã thông báo Tea đóng góp vào hệ thống bảo mật bằng cách đặt *staking* Tea và hỗ trợ các nhà phát triển nguồn mở bằng cách *nhúng* Tea. 361 | Chúng tôi nhận thức đầy đủ các yếu tố kinh tế có thể ngăn chặn một số nhà phát triển stake hoặc nhúng Tea; Như vậy, việc đặt cược và dốc sẽ có sẵn ít như một chiếc lá, mệnh giá nhỏ nhất của Tea đại diện cho một trăm triệu ($10^{-8}$) của một loại Tea. 362 | 363 | Cả hai ứng dụng của mã thông báo Tea đều phục vụ các chức năng quan trọng trong sự hỗ trợ và tăng trưởng của hệ sinh thái nguồn mở. 364 | Tea Staking sẽ đảm bảo rằng hệ thống Tea tiếp tục hoạt động an toàn, vì vậy tất cả những người tham gia mạng có thể gửi và truy cập các gói để xem xét chúng, tích hợp chúng vào ứng dụng của họ, v.v. 365 | Những người tham gia mạng để hỗ trợ và sử dụng các gói đáp ứng các yêu cầu về chất lượng và độ tin cậy, như được xây dựng bởi cộng đồng Tea thông qua sự hỗ trợ và bất đồng của mỗi gói. 366 | Sẽ được thực hiện khi xác định và thực hiện các tham số cổ phần và độ dốc để người ta không trở thành ký sinh ở bên kia. 367 | 368 | ## Khuyến khích và Hình phạt 369 | 370 | Như đã thảo luận trước đó, có thể có những khuyến khích mạnh mẽ cho những kẻ xấu thỏa hiệp phần mềm nguồn mở. 371 | Phần lớn cơ sở hạ tầng quan trọng của Internet đang chạy trên nguồn mở và cuộc đua tìm kiếm các lỗ hổng khai thác cũng như các lỗ hổng khác đang diễn ra. 372 | Tại Tea, chúng tôi tin rằng những người duy trì gói không phải là những người đáng bị đổ lỗi (mặc dù họ thường như vậy). 373 | 374 | Các khuyến khích giao thức Tea khắc phục điều này thông qua phân phối khuyến khích công bằng và hợp lý. 375 | Một gói như Lodash với hơn 151 nghìn người phụ thuộc là trụ cột của sự phát triển nguồn mở và người bảo trì của nó xứng đáng được khen thưởng tương xứng. 376 | Tuy nhiên, một hệ thống phần thưởng được xây dựng chỉ dựa trên số lượng người phụ thuộc sẽ ngăn cản các nhà đổi mới phá vỡ các thế độc quyền này trừ khi họ được các bên thứ ba cấp vốn đầy đủ hoặc đã tích lũy đủ nguồn lực để tự tài trợ. 377 | Cách tiếp cận này có thể dẫn đến số lượng người đóng góp bị thu hẹp lại, dẫn đến kết quả ngược lại với ý nghĩa của Tea. 378 | 379 | Mục tiêu của tea là đại diện cho giá trị của phần mềm mã nguồn mở và, khi làm như vậy, thúc đẩy sự phát triển của nó bằng cách trao quyền cho những người tham gia bằng các tài nguyên họ cần để theo đuổi niềm đam mê của mình mà không bị cản trở. 380 | Hệ thống phân phối ưu đãi Tea cần xem xét cẩn thận tỷ lệ dốc của từng gói và điều chỉnh ưu đãi của từng gói cho phù hợp. 381 | Để giảm rủi ro của một số lượng nhỏ các gói được sử dụng làm phụ thuộc trên nhiều ứng dụng thu phần lớn phần thưởng dốc, chúng tôi sẽ tận dụng nghiên cứu do nhà sáng lập[^19] web3 sản xuất cho cơ chế phần thưởng dựa trên bằng chứng cổ phần của Polkadot. 382 | Chúng tôi có thể điều chỉnh thêm việc triển khai và các biến của nó dựa trên kết quả của các thử nghiệm thực tế. 383 | 384 | Khi một gói steep tiếp cận tỷ lệ dốc tối ưu do quản trị xác định, tỷ lệ phần thưởng dốc của nó sẽ giảm dần. 385 | Khi một gói vượt quá tỷ lệ dốc tối ưu của nó, tỷ lệ phần thưởng dốc sẽ giảm mạnh để không khuyến khích những người ủng hộ gói và những người thưởng thức tea từ các gói có độ dốc cao hơn nữa. 386 | Thiết kế này có thể cho phép các gói ít dốc hơn trở nên hấp dẫn hơn đối với cả những người ủng hộ gói và những người thưởng thức tea. 387 | Nó cũng có thể khuyến khích các nhà phát triển có kinh nghiệm xây dựng các giải pháp thay thế cho các gói có độ dốc cao, tạo cơ hội cho cộng đồng tea cân bằng giữa việc hỗ trợ phần mềm hiện có và thúc đẩy đổi mới. 388 | Tỷ lệ dốc sẽ được tính toán bằng cách sử dụng nguồn cung cấp tuần hoàn trong thiết kế ban đầu của nó. 389 | Cộng đồng tea có thể thay đổi thiết kế này để cải thiện khả năng mở rộng của hệ thống hơn nữa. 390 | Hãy để $\chi$ là tỷ lệ dốc trên tất cả các gói. 391 | Nó đại diện cho tổng số mã thông báo tea được người bảo trì gói, người dùng gói, người ủng hộ gói và nhà tài trợ cũng như người nếm tea chia cho tổng nguồn cung cấp mã thông báo tea. 392 | Dựa vào số lượng gói nguồn mở hiện có và mức tăng trưởng dự kiến của chúng,$\chi$ sẽ luôn là một giá trị rất nhỏ giữa $0$ và $1$. 393 | 394 | Đặt $\psi$ là tỷ lệ staking. 395 | Nó đại diện cho tổng số mã thông báo Tea được đặt bởi bất kỳ người tham gia mạng nào để bảo mật mạng. 396 | 397 | Đặt $\chi_{ideal}$ là tỷ lệ dốc mà chúng tôi muốn mỗi gói đạt được để phân phối phần thưởng công bằng trên tất cả các gói và phần phụ thuộc của chúng. 398 | Giá trị của $\chi_{ideal}$ phải được cập nhật khi các gói mới được thêm vào sổ đăng ký phi tập trung và các phần phụ thuộc được tạo. 399 | Để xác định giá trị tốt nhất cho $\chi_{ideal}$, chúng tôi sẽ sử dụng đường cong hình chuông phổ biến được cập nhật khi bắt đầu mỗi chu kỳ phần thưởng. 400 | 401 | Hãy để $\tau = \tau(\chi)$ lãi suất dốc hàng năm được phân phối cho tất cả các thành viên cộng đồng Tea, những người dốc mã thông báo Tea để hỗ trợ các nhà phát triển nguồn mở. 402 | Nói cách khác, $\tau(\chi)$ tương ứng với phần thưởng dốc nhận được trong hơn một năm bởi một thành viên cộng đồng đã dốc mã thông báo Tea trong cả năm. 403 | 404 | Đặt $\gamma = \gamma(\psi)$ là lãi suất đặt cược hàng năm được phân phối cho tất cả các nhà khai thác nút và những người tham gia mạng, những người đặt cược mã thông báo Tea để bảo mật mạng. 405 | Nói cách khác, $\gamma(\psi)$ tương ứng với phần thưởng đặt cược nhận được trong hơn một năm bởi một thành viên cộng đồng đặt cược mã thông báo Tea trong cả năm. 406 | 407 | Đặt $\delta$ là lạm phát hàng năm hướng vào kho bạc mạng lưới. 408 | $\delta$ có thể thay đổi do các yếu tố bên ngoài ảnh hưởng đến việc cung cấp mã thông báo. 409 | 410 | Chúng tôi coi tỷ lệ phần thưởng dốc hàng năm là một hàm của $\chi$ và tỷ lệ phần thưởng đặt cược hàng năm là một hàm của $\psi$. 411 | 412 | * $\tau(\chi)$ tương ứng với việc khuyến khích mọi người dốc một gói. Khi $\chi$ tăng lên, cần ít phần thưởng $\tau(\chi)$ hơn. 413 | * $\gamma(\psi)$ tương ứng với động cơ khuyến khích mọi người đặt cược vào mạng. Khi $\psi$ tăng lên, cần ít phần thưởng $\gamma(\psi)$ hơn để bảo mật mạng. 414 | Lạm phát hàng năm $I$ sẽ tương đương $(\tau + \gamma + \delta)$ và được tính như sau: 415 | 416 | $$ 417 | I = \frac{\textrm{tổng cung của token cuối năm} - \textrm{tổng cung của token đầu năm}}{\textrm{tổng cung của token đầu năm}} = (\tau + \gamma + \delta) 418 | $$ 419 | 420 | Đóng góp vào lạm phát của $\tau_{\textsc{all}}$ (khuyến khích được phân phối cho tất cả các gói dốc) và $\gamma_{\textsc{all}}$ (khuyến khích được phân phối cho tất cả những người đóng góp cho an ninh mạng) phải được cân nhắc để đảm bảo rằng hệ thống khuyến khích tỷ lệ đặt cược/đặt cược tối ưu. 421 | 422 | Khi chúng tôi tập trung vào các ưu đãi được phân phối trên tất cả các gói dốc, chúng tôi xác định rằng 423 | $\tau_{\textsc{all}}$ 424 | là một hàm của tỷ lệ dốc $\chi$ và do đó 425 | $\tau_{\textsc{all}}(\chi) = \chi \cdot \tau(\chi)$. 426 | Từ phân tích trước đây của chúng tôi, chúng ta có thể thấy rằng 427 | $\tau_{\textsc{all}}(\chi_{ideal}) = \chi_{ideal} \cdot \tau_{ideal}$. 428 | Vì mục tiêu là đạt đến một trạng thái mà 429 | $\chi = \chi_{ideal}$ 430 | , phần thưởng 431 | $\tau_{ideal}(\chi)$ 432 | Có thể đạt cực đại tại giá trị đó. 433 | 434 | Đặt $\tau_{ideal} = \tau(\chi_{ideal})$ 435 | là tỷ lệ phần thưởng do mạng phân phối ở kịch bản lý tưởng trong đó 436 | $\chi = \chi_{ideal}$. 437 | 438 | Đặt $\tau_{0}$ là giới hạn của $\tau_{\textsc{all}}(\chi)$ vì $\chi$ tiến tới 0 khi không có thành viên nào trong cộng đồng Tea dốc bất kỳ gói nào. 439 | Giá trị của $\tau_{0}$ phải gần bằng 0 nhưng không bằng 0 để khuyến khích những người dùng sớm. 440 | Theo đề xuất từ nghiên cứu của nhà sáng lập web3, chúng tôi đề xuất rằng: 441 | 442 | * hàm lạm phát tăng tuyến tính giữa $\chi = 0$ và $\chi = \chi_{ideal}$, và 443 | * nó phân rã theo cấp số nhân giữa $\chi = \chi_{ideal}$ và $\chi = 1$. 444 | 445 | Chúng tôi đã chọn mức giảm theo cấp số nhân tương tự cho $\tau_{\textsc{all}}(\chi)$ vì nó hàm ý mức giảm theo cấp số nhân của $\tau(\chi)$ và chúng tôi muốn phần thưởng giảm mạnh hơn $\chi_{ideal}$ để ngăn một gói duy nhất nhận được tất cả phần thưởng. 446 | 447 | Sự phân rã được xác định sao cho tỷ lệ lạm phát giảm nhiều nhất là 50% khi $\chi$ dịch chuyển $d$ đơn vị sang bên phải của $\chi_{ideal}$ – tức là 448 | $\tau_{\textsc{all}}(\chi_{ideal} + d) \geq \tau_{\textsc{all}} \cdot 0,5$. 449 | 450 | 451 | Chúng tôi đề xuất các hàm tỷ lệ lãi suất và tỷ lệ lạm phát sau, các hàm này phụ thuộc vào các tham số $\chi_{ideal}$, $\tau_{ideal}$, $\tau_{0}$ và $d$. 452 | 453 | \begin{align*} 454 | &\tau_{\textsc{all}}(\chi) = \tau_{0} + (\tau_{\textsc{all}}(\chi_{ideal}) - \tau_{0})\frac{\chi}{\chi_{ideal}}\enspace\textrm{for}\;0 < \chi \leq \chi_{ideal} \\ 455 | &\tau_{\textsc{all}}(\chi) = \tau_{0} + (\tau_{\textsc{all}}(\chi_{ideal}) - \tau_{0}) \cdot 2^{(\chi_{ideal}-\chi)/d}\enspace\textrm{for}\;\chi_{ideal} < \chi \leq 1 456 | \end{align*} 457 | 458 | Cũng như những diễn viên giỏi cần được khen thưởng; các tác nhân xấu cần phải được xác định và trừng phạt. 459 | Phần mềm nguồn mở cung cấp nhiều cơ hội cho những kẻ xấu tạo ra các điểm yếu và rủi ro về uy tín cho toàn bộ cộng đồng các nhà phát triển. 460 | Từ việc chiếm đoạt công việc đến thay đổi và phân phối lại các gói phần mềm, hoặc tiêm mã bất chính, cuộc chiến giữa những kẻ tốt và kẻ xấu vẫn tiếp diễn, thường là với những kẻ xấu được tài trợ tốt, những người coi việc làm ô nhiễm các gói nguồn mở là một cơ hội để hưởng lợi về mặt tài chính. 461 | Nhược điểm là tương đối nhỏ, với các gói có khả năng bị cấm trên kệ kỹ thuật số hoặc bị mang tiếng xấu. 462 | 463 | Chúng tôi đề xuất giới thiệu một cơ chế cắt giảm để thiết lập một nhược điểm quan trọng hơn ảnh hưởng trực tiếp đến giá trị kinh tế của các tác nhân xấu. 464 | Khi những người thử nghiệm Tea đánh giá và phân tích mã trong các gói mới được gửi, chúng tôi khuyên những người thử nghiệm Tea nhận được các công cụ và khuyến khích để xác định và làm nổi bật mã bất chính để người dùng gói có thể nhận thức được các rủi ro và những người duy trì gói, người hỗ trợ gói và nhà tài trợ sẽ bị phạt để gửi hoặc hỗ trợ mã bất chính. 465 | Trong phạm vi đó, đối với tất cả các đánh giá tiêu cực đã được chứng minh được thực hiện theo quy tắc mạng và đã được người duy trì gói giải quyết trong khoảng thời gian do quản trị xác định, người duy trì gói sẽ không phải chịu bất kỳ hình phạt nào trái với những người ủng hộ và tài trợ gói hoặc người thử nghiệm Tea đã cung cấp một đánh giá tích cực về gói trong câu hỏi. 466 | Đối với các đánh giá tiêu cực được thực hiện theo quy tắc mạng và người duy trì gói không giải quyết trong khoảng thời gian do quản trị xác định, một phần mã thông báo do người duy trì gói, người ủng hộ và tài trợ gói cũng như người thử nghiệm Tea trước đó nhận được sẽ bị cắt giảm. Một phần khác sẽ được khóa vào một nhóm bảo hiểm do ban quản lý Tea kiểm soát. 467 | Ban quản lý tea sẽ thiết lập các chính sách và quy tắc phối hợp chặt chẽ với cộng đồng để phân phối nội dung của nhóm cho những người bị ảnh hưởng bởi các lỗ hổng. 468 | Giao thức sẽ phân phối một phần ba số mã thông báo đã giảm giá cho tất cả những người thử nghiệm Tea đã góp phần vào đánh giá tiêu cực và giảm giá đối với gói, dựa trên số lượng mã thông báo Tea mà họ đã giảm giá “chống lại” gói và khoảng thời gian mã thông báo của họ đã giảm giá. 469 | Nói cách khác, một hoặc nhiều người thử nghiệm Tea xác định và báo cáo lỗ hổng theo các quy tắc của mạng càng sớm thì phần thưởng họ nhận được càng cao vì đã hỗ trợ phát triển mã nguồn mở an toàn và hiệu quả. 470 | 471 | Để ngăn các thành viên cộng đồng bỏ phiếu ngẫu nhiên “chống lại” các gói có giá trị cao với hy vọng nhận được phần lớn hình phạt, tất cả các mã thông báo Tea được “chống lại” sẽ không được thưởng theo lạm phát và có thể phải tuân theo cơ chế phân rã, do đó làm giảm giá trị của chúng theo thời gian. 472 | 473 | [^19]: Nguồn: @web3 474 | 475 | 476 | # Quản trị 477 | 478 | Quản trị là rất quan trọng đối với sự phát triển, tính bền vững và việc áp dụng bất kỳ hệ thống phân tán nào. 479 | 480 | Chúng tôi đề xuất rằng Tea bao gồm quản trị trên chuỗi nơi tất cả những người nắm giữ mã thông báo chè có thể đề xuất và bỏ phiếu về các thay đổi đối với các thông số quan trọng được đánh giá bằng quyền sở hữu mã thông báo và danh tiếng. 481 | Các thông số này có thể bao gồm lạm phát, phí giao dịch, phần thưởng đặt cược, phần thưởng dốc hoặc tỷ lệ dốc tối ưu. 482 | Chức năng này sẽ đảm bảo rằng các thông số quan trọng có thể phát triển và được tối ưu hóa theo thời gian bởi các thành viên của cộng đồng Tea. 483 | Chúng tôi dự đoán quản trị sẽ ra mắt với một cấu trúc đơn giản và dần dần mở rộng khi hệ thống Tea trưởng thành, tạo điều kiện thuận lợi cho việc áp dụng và đảm bảo phân cấp dần dần. 484 | 485 | Một số tham số hệ thống có thể không chịu sự quản trị hoặc hỗ trợ thay đổi tần suất cao để giảm bề mặt tấn công do quản trị thể hiện. 486 | Quá trình chuyển đổi dần dần các tham số sang quản trị mở, phi tập trung sẽ đảm bảo tính ổn định và khả năng dự đoán của hệ thống. 487 | 488 | # Khả năng mở rộng của bên thứ ba 489 | 490 | Khi chúng tôi xây dựng các công cụ ban đầu để thu hút sự hỗ trợ lâu dài của các cộng đồng nguồn mở, chúng tôi tin rằng một phần nhiệm vụ của chúng tôi là đảm bảo rằng các bên thứ ba có thể mở rộng bộ công cụ tổng thể. 491 | Ngoài việc cung cấp cơ sở hạ tầng cho các nhà phát triển để xây dựng các tiện ích mở rộng cho giao thức, bao gồm các cách mới để đổi mới và hỗ trợ thêm cho các nhà phát triển nguồn mở, các kế hoạch của chúng tôi bao gồm tiềm năng cho các nhà quản lý gói khác đóng góp cho giao thức. 492 | Ước mơ và nỗ lực của các nhà phát triển nguồn mở đã tạo nên sự đổi mới hỗ trợ cuộc sống hàng ngày của chúng ta. 493 | Chúng tôi mong muốn được khám phá những cách sử dụng và mở rộng mới cho Tea do cộng đồng Tea đề xuất. 494 | 495 | 496 | # Công việc trong tương lai và những nỗ lực cộng đồng tiềm năng 497 | 498 | Khi hệ thống Tea trưởng thành, chúng tôi dự đoán cộng đồng sẽ quyết định và góp phần thay đổi và mở rộng hệ thống Tea thông qua quản trị. 499 | Dưới đây là một số ý tưởng mà chúng tôi tin rằng có thể truyền cảm hứng cho một số người. 500 | 501 | ## Người buôn bán Tea 502 | 503 | Các cộng đồng phần mềm nguồn mở rất sôi động và không ngừng tìm cách đổi mới và mang lại giá trị. 504 | Sự cống hiến và lòng vị tha này dẫn đến việc liên tục xây dựng các phần mềm và gói mới, mỗi phần mềm đều kéo theo sự phụ thuộc. 505 | Do đó, chúng tôi dự đoán bản đồ phụ thuộc sẽ phát triển liên tục, dẫn đến những thay đổi thường xuyên đối với tỷ lệ dốc và phần thưởng. 506 | Trong tương lai, cộng đồng Tea có thể đề xuất phát triển một hệ thống được thiết kế để theo dõi linh hoạt tỷ lệ dốc cho từng gói và cân bằng lại cách những người ủng hộ gói dốc mã thông báo của họ dựa trên tiêu chí của riêng họ. 507 | 508 | ## Bản quyền chuyển nhượng trọn gói 509 | 510 | Chúng tôi nhận thấy rằng những người duy trì gói có thể quyết định chuyển luồng phần thưởng tăng vọt của họ cho một hoặc nhiều nhà phát triển. 511 | Việc quản lý việc chuyển giao như vậy phải là quyết định của người duy trì gói và các đối tác của họ, không có sự can thiệp từ Tea. 512 | Các công cụ sẽ cần được cung cấp để chuyển toàn bộ hoặc một phần như vậy (có lẽ thông qua chỉ một phần phần thưởng tăng dần được chuyển hướng đến một hoặc nhiều nhà phát triển, trong khi phần thưởng còn lại tiếp tục chuyển đến người duy trì gói ban đầu) 513 | và cho phần thưởng tăng dần để chuyển qua một tài khoản được kiểm soát bởi một người tham gia mạng, nhiều người tham gia mạng hoặc được phân phối tự động trên nhiều tài khoản bằng cách sử dụng tỷ lệ tĩnh hoặc động. 514 | 515 | ## Phân phối phần thưởng cho những người bảo trì 516 | 517 | Việc duy trì một gói có thể dựa vào công việc của một nhóm các nhà phát triển khác. 518 | Trước khi phần thưởng tăng đột biến bắt đầu chảy, các nhóm nên cân nhắc tự động hóa việc phân phối phần thưởng tăng đột biến giữa các nhóm với nhau. 519 | Việc phân phối xảy ra như thế nào phải do chính những người bảo trì quyết định, vì họ ở vị trí tốt nhất để đánh giá ai đã đóng góp và họ nên được khen thưởng như thế nào. 520 | 521 | Để thực hiện điều đó, mỗi nhóm (hoặc các nhóm) có thể thành lập tổ chức tự trị phi tập trung (DAO) của riêng họ và tự động phân phối phần thưởng hoặc triển khai các hệ thống phức tạp hơn để xác định phân phối phần thưởng phù hợp dựa trên các yếu tố bên ngoài, chẳng hạn như phiếu bầu từ tất cả các DAO thành viên, 522 | hoặc phân phối theo thời gian dựa trên đóng góp liên tục, hoàn thành thành công tiền thưởng, v.v. 523 | 524 | ## Xử lý gói “phân nhánh phần mềm” 525 | 526 | Chúng tôi tin rằng các nhánh là cần thiết và phần lớn không được sử dụng đúng mức. 527 | Các nhánh có thể là một công cụ hiệu quả để phát triển các gói cạnh tranh về chức năng, hiệu suất, bảo mật và thậm chí cả sự chú ý. 528 | Hữu ích nhất có thể, các nhánh phải công nhận những nỗ lực ban đầu. Thông qua công việc trong tương lai hoặc những đóng góp tiềm năng, cộng đồng Tea có thể nâng cao hệ thống để yêu cầu các nhánh được khai báo, thậm chí có thể được phát hiện khi một gói được gửi. 529 | Những phân nhánh phần mềm không được khai báo do những người thử nghiệm Tea tiết lộ có thể dẫn đến việc một phần mã thông báo đã ngâm bị cắt giảm, được chuyển cho người bảo trì gói ban đầu và được gửi đến những người thử nghiệm Tea đã tiết lộ phân nhánh phần mềm. 530 | 531 | ## Thời gian chạy so với Phụ thuộc bản dựng 532 | 533 | Tea có thể không phân biệt được phần phụ thuộc bản dựng với phần phụ thuộc thời gian chạy khi phân phối phần thưởng dốc khi khởi chạy. 534 | Tuy nhiên, với điều kiện cộng đồng Tea cảm thấy mạnh mẽ về việc tạo ra sự khác biệt như vậy, cộng đồng Tea có thể đề xuất các cải tiến đối với thuật toán phân phối phần thưởng tăng dần để tính đến mức độ quan trọng của từng phụ thuộc và đóng góp của chúng vào giá trị của các gói phụ thuộc vào chúng. 535 | Những đề xuất này sẽ được bỏ phiếu và thực hiện dựa trên quyết định của cộng đồng. 536 | 537 | ## Thù lao dựa trên việc sử dụng 538 | 539 | Khi nhiều ứng dụng được xây dựng bằng cách sử dụng các gói đã đăng ký với Tea, cộng đồng có thể tăng cường thuật toán phần thưởng để việc phân bổ có thể bị ảnh hưởng bởi các bộ dữ liệu được chứng thực bên ngoài, chẳng hạn như mức sử dụng. 540 | Bản cập nhật này đối với cơ chế phần thưởng có thể cho phép phân bổ phần thưởng mã thông báo Tea cao hơn cho các gói có mức sử dụng cao nhất trong khi vẫn tôn trọng các ràng buộc của tỷ lệ dốc được mô tả trong phần mã thông báo Tea. 541 | Những người bảo trì gói có thể sử dụng một cách tiếp cận tương tự để phân phối phần thưởng dốc trên các phần phụ thuộc của họ dựa trên logic minh bạch mà họ lựa chọn. 542 | Lưu ý rằng tất cả thông tin được sử dụng để ảnh hưởng đến việc phân phối phần thưởng trên các gói và phần phụ thuộc trong hệ thống Tea sẽ cần phải đáng tin cậy. 543 | 544 | 545 | # Lời kết 546 | 547 | Sách trắng này sẽ không tồn tại nếu không có sự hỗ trợ và cống hiến của nhiều người yêu Tea. 548 | Các tác giả Josh Kruger, Jadid Khan và Jacob Heider vì những đóng góp của họ cho hệ thống mã thông báo và nhiều cá nhân kín đáo đã tình nguyện dành thời gian để cung cấp phản hồi về nội dung của tài liệu này. 549 | 550 | $\parskip=0pt plus 1pt$ 551 | 552 | # Bảng thuật ngữ 553 | 554 | | Tựa đề | Định nghĩa | 555 | |------|------------| 556 | | Leaf | Mệnh giá nhỏ nhất của mã thông báo Tea. Một chiếc lá tương ứng với một phần trăm triệu ($10^{-8}$) của một loại Tea. | 557 | | Slashing | Hành động trừng phạt những người đặt cược hoặc người đặt cược để đáp lại hành vi trái với các quy tắc của mạng. | 558 | | Staking | Hành động khóa mã thông báo Tea để bảo mật mạng bằng chứng cổ phần mà hệ thống Tea được xây dựng. | 559 | | Steeping | Hành động khóa mã thông báo Tea để hỗ trợ yêu cầu của bạn và nhận phần thưởng (hoặc hình phạt) dựa trên sự đồng thuận về tính hợp lệ của yêu cầu của bạn. | 560 | 561 | 562 | # Tài liệu tham khảo 563 | -------------------------------------------------------------------------------- /metadata.yml: -------------------------------------------------------------------------------- 1 | title: A Decentralized Protocol for Remunerating the Open-Source Ecosystem 2 | abstract: > 3 | Creating an open, public and stable registry for all open-source software 4 | would empower projects to publish releases independently rather than rely on 5 | third parties who assemble this irregular data into hundreds of separate 6 | (and duplicated) systems. Package maintainers will publish their releases to 7 | a decentralized registry powered by a Byzantine fault-tolerant blockchain to 8 | eliminate single sources of failure, provide immutable releases, and allow 9 | communities to govern their regions of the open-source ecosystem, 10 | independent of external agendas. 11 | 12 | tea incentivizes the maintenance of open-source by allowing network 13 | participants to stake value against the packages they depend on and want to 14 | secure. The tea protocol’s graph provides immutable package registration, 15 | dependency requirements, package authenticity, and usage oracles to inform 16 | the tea remuneration algorithm. Systematic inflation is distributed to all 17 | packages based on that algorithm. If security or development issues are 18 | found, developers can make claims supported by evidence against the package, 19 | and slashing may occur. Members of the open-source community can review 20 | packages for quality issues, and the protocol can respond to these reviews 21 | by enacting proportional slashing events. 22 | 23 | author: 24 | - Max Howell 25 | - Timothy Lewis 26 | - Thomas Borrel 27 | references: 28 | - id: sources 29 | url: https://github.com/teaxyz/white-paper 30 | - id: cc 31 | url: https://creativecommons.org/licenses/by-sa/4.0/ 32 | - id: nist 33 | url: https://nvd.nist.gov/vuln/detail/CVE-2021-44228 34 | - id: reuters 35 | url: https://www.reuters.com/article/usa-cyber-vulnerability-idCNL1N2SY2PA 36 | - id: twitter 37 | url: https://twitter.com/yazicivo/status/1469349956880408583 38 | - id: w3 39 | url: https://www.w3.org/TR/did-core/ 40 | - id: theregister 41 | url: https://www.theregister.com/2016/03/23/npm_left_pad_chaos/ 42 | - id: fossa 43 | url: https://fossa.com/blog/npm-packages-colors-faker-corrupted/ 44 | - id: lunasec 45 | url: https://www.lunasec.io/docs/blog/node-ipc-protestware/ 46 | - id: github 47 | url: https://github.com/dominictarr/event-stream/issues/116 48 | - id: zdnet 49 | url: https://www.zdnet.com/article/open-source-software-how-many-bugs-are-hidden-there-on-purpose/ 50 | - id: threatpost 51 | url: https://threatpost.com/backdoor-found-in-utility-for-linux/147581/ 52 | - id: fbi 53 | url: https://www.fbi.gov/news/stories/phantom-secure-takedown-031618 54 | - id: europol 55 | url: https://www.europol.europa.eu/media-press/newsroom/news/800-criminals-arrested-in-biggest-ever-law-enforcement-operation-against-encrypted-communication 56 | - id: medium 57 | url: https://medium.com/intrinsic-blog/compromised-npm-package-event-stream-d47d08605502 58 | - id: semver 59 | url: https://semver.org/ 60 | - id: npmjsCrossenv 61 | url: https://blog.npmjs.org/post/163723642530/crossenv-malware-on-the-npm-registry.html 62 | - id: npmjsLodash 63 | url: https://www.npmjs.com/package/lodash 64 | - id: npmjsChalk 65 | url: https://www.npmjs.com/package/chalk 66 | - id: npmjsLogFourjs 67 | url: https://www.npmjs.com/package/log4js/ 68 | - id: arxiv 69 | url: https://arxiv.org/abs/1207.2617/ 70 | - id: web3 71 | url: https://research.web3.foundation/en/latest/polkadot/overview/2-token-economics.html 72 | header-includes: 73 | - \usepackage{fancyhdr,ragged2e} 74 | - \lhead{\parbox[t]{0.5\textwidth}{\RaggedRight\rightmark\strut}} 75 | - \rhead{\parbox[t]{0.5\textwidth}{\RaggedLeft\leftmark\strut}} 76 | - \setlength{\headheight}{5\baselineskip} 77 | - \pagestyle{fancy} 78 | - \fancyfoot[LE,RO]{© 2022 tea.inc.} 79 | -------------------------------------------------------------------------------- /tea.csl: -------------------------------------------------------------------------------- 1 | 2 | 23 | -------------------------------------------------------------------------------- /white-paper.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Version 2.1.0 3 | --- 4 | 5 | # white-paper 6 | 7 | ## A Decentralized Protocol for Open-Source Developers to Capture the Value They Create 8 | 9 | * Max Howell 10 | * Timothy Lewis 11 | 12 | ## Abstract 13 | 14 | A system in which open-source developers could receive rewards commensurate with their contributions would enhance the sustainability and integrity of the software supply chain. A decentralized protocol secured by reputation and incentives could accomplish this by facilitating value accrual back to the developers that maintain open-source codebases as a public utility, thus promoting future innovation and growth within the open-source ecosystem. Package maintainers will register their projects with a registry powered by a Byzantine fault-tolerant blockchain. The tea Protocol’s unique “Proof of Contribution” algorithm will determine each project’s contribution and impact to the system’s utility and health. Registered projects will receive rewards from the tea Protocol commensurate with their contribution, be secured through staking, benefit from a reputation system that spans projects and contributors, and have the option to allow communities to govern their regions of the open-source ecosystem, independent of external agendas. The tea Protocol will incentivize the maintenance of open-source by allowing network participants who registered their projects and comply with the rules of the network to receive rewards and contribute to their reputation and their projects. If security or development issues are found, developers can make claims supported by evidence against the package, and slashing may occur. Members of the open-source community can review packages for quality issues, and the protocol can respond to these reviews by enacting proportional slashing events. 15 | 16 | ## Disclaimer 17 | 18 | The information set out in this white paper is of a preliminary nature. Consequently, neither the authors nor any of their respective affiliates assume any responsibility that the information set out herein is final or correct and each of the foregoing disclaims, to the fullest extent permitted by applicable law, any and all liability whether arising in tort, contract or otherwise in respect of this white paper. Neither this white paper nor anything contained herein shall form the basis of or be relied on in connection with or act as an inducement to enter into any contract or commitment whatsoever. 19 | 20 | Nothing in this white paper constitutes an offer to sell or a solicitation to purchase any tokens discussed herein. In any event, were this white paper to be deemed to be such an offer or solicitation, no such offer or solicitation is intended or conveyed by this white paper in any jurisdiction where it is unlawful to do so, where such an offer or solicitation would require a license or registration, or where such an offer or solicitation is subject to restrictions. In particular, any tokens discussed herein have not been, and, as of the date of issuance of this white paper, are not intended to be, registered under the securities or similar laws of any jurisdiction, whether or not such jurisdiction considers such tokens to be a security or similar instrument and may not be offered or sold in any jurisdiction where to do so would constitute a violation of the relevant laws of such jurisdiction. Do not purchase any tokens unless you’re prepared to lose the entire purchase price. It is a high-risk purchase and you are unlikely to be protected if something goes wrong. 21 | 22 | ## License 23 | 24 | This paper is available under the [Creative Commons Attribution-ShareAlike 4.0 International license](https://creativecommons.org/licenses/by-sa/4.0/). 25 | 26 | ## Introduction 27 | 28 | The modern-day Internet is predominantly composed of open-source projects and has been since its inception. Open-source projects are developed and maintained via collaboration amongst global developer communities, and their codebases are made available for anyone to utilize as a public good. In the past 71 years (it is [generally believed](https://archive.org/details/historyofmodernc00ceru) that the first example of free and open-source software was released in 1953), open-source software has evolved from the product of niche technology hobbyists to the infrastructure upon which all innovation has been built. Despite the importance of open-source software, the developers that create and maintain the codebase as a public utility receive no fungible rewards for their immense contribution as innovators and maintainers. 29 | 30 | Enterprise software, which has grown into a multi-billion dollar industry, is built on the foundation laid by open-source. Yet there is almost no value accrual back to the individuals who thanklessly maintain its very underpinnings. And while fortunes have been made from it, open-source software is mainly created and maintained as a public utility with no viable means for developers to capture the value they create. 31 | 32 | We believe that the potential of the modern-day internet has been stunted by relying on a small percentage of the world’s engineers to maintain open-source software purely out of altruism. Open-source is a labor of love often hindered by a lack of meaningful incentives for core maintainers. Open source developers must choose between a day job that provides living wages or maintaining the very foundation of enterprise software. A lack of incentives results in genuinely worthwhile projects never reaching their potential while others suffer from security issues due to a lack of upkeep throughout the software’s lifecycle. To unlock the full potential of open-source, we require a universal method for assessing the “fair value” of open-source projects, enabling open-source developers to capture the value they create by facilitating capital inflows to the open-source community, all without altering the core principles of how open-source is developed and used. 33 | 34 | Enterprises often wrap business models around open-source, generating revenue directly from the work of the benevolent developers while also relying on them to fix bugs as issues occur. Open-source codebases offer plug-and-play core functionality for enterprises; however, software vulnerabilities can pose an immense risk for applications built on top of open-source. A great example is a recent incident involving a critical security vulnerability in Log4j, a package from the [Apache Software Foundation](https://www.apache.org/) that found its way across many commercial software and services employed by enterprises and governments. In November 2021, a security researcher working for [Alibaba Group Holding Ltd.](https://www.alibabagroup.com/) reported vulnerability [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228), which received the highest possible base score from the Apache Software Foundation. Amit Yoran, Chief Executive of [Tenable](https://www.tenable.com/) and founding director of the United States Computer Emergency Readiness Team (US-CERT), described this vulnerability as “[the single biggest, most critical vulnerability of the last decade](https://www.reuters.com/article/usa-cyber-vulnerability-idCNL1N2SY2PA)”. Panic ensued and the few volunteers who maintained this package came publicly under fire for the failure. After addressing the outrage with a humble plea for fairness, systems got patched. Enterprises and governments eventually realized that Log4j, a package used by a broad range of critical systems for two decades, was maintained by a few unpaid volunteers, the same unsung heroes who sprang into action despite [abuse from the industry](https://twitter.com/yazicivo/status/1469349956880408583) and worked tirelessly to address the vulnerability. 35 | 36 | Sadly, Log4j is far from the only example. core-js is downloaded 30 million times per week as the base of every Node.js application, yet it is also barely funded, potentially forcing its primary maintainer to [walk away from the project or even change the license to closed source](https://www.thestack.technology/core-js-maintainer-denis-pusharev-license-broke-angry/). Recently several bitcoin core developers resigned, citing, among other reasons, a lack of financial compensation for their decision. 37 | 38 |

Figure 1 - Dependency - Source: https://xkcd.com/2347/

39 | 40 | There have been multiple attempts at providing incentive structures, typically involving sponsorship and bounty systems. Sponsorship makes it possible for consumers of open-source to donate to the projects they favor. However, picture open-source as a tower of bricks where lower layers are long forgotten, but still maintained by dedicated engineers and relied upon by even more developers. Only projects at the top of the tower are typically known and receive sponsorship. This biased selection leads to essential bricks that hold up the tower attracting no donations, while favorites receive more than they need. Bounties allow consumers of projects to propose payment for developers to build specific features, thus only rewarding projects for doing things that may not be in their best interest. And again, only rewarding favorites. 41 | 42 | At tea, we’ve seen too many open-source projects suffering from these failed attempts at supporting the open-source community and have made it our mission to enhance the sustainability and integrity of the software supply chain by allowing open-source developers to capture the value they create. 43 | 44 | In this paper, we propose tea — a decentralized system for 45 | 46 | 1. computing and assigning a “[Proof of Contribution](white-paper.md#proof-of-contribution)” to every open-source project relative to the entire ecosystem, 47 | 2. ensuring open-source software projects are well maintained, 48 | 3. empowering open-source developers with equitable rewards proportionate to their ecosystem-wide contributions, achieved through the implementation of the tea incentive algorithm across every entry in the tea registry, and 49 | 4. incentivizing network participants to follow responsible disclosure practices for vulnerabilities and bugs. 50 | 51 | ## Components 52 | 53 | A software developer building an application needs four things: a browser, a terminal, an editor, and a package manager. Of these four, the package manager is what controls the tooling and frameworks a developer needs to construct their product. This layer is where we see the potential to change how open-source is secured and rewarded. 54 | 55 | ### The Package Manager 56 | 57 | The package manager knows what open-source software a package or application depends upon to function, from the top of the tower to its base. Each project, along with every packaged version, meticulously documents all essential components and their corresponding versions. 58 | 59 | It knows that the top of the tower carefully selects its dependencies, and that careful selection continues down. The package manager is uniquely placed in the developer tool stack to enable automated and precise value distribution based on actual real-world contribution. 60 | 61 | We propose an immutable decentralized registry designed to distribute value based on the tea Protocol’s unique “Proof of Contribution”, an algorithm that determines each project’s contribution and impact to the system’s utility and health. Value can enter the graph at apex points—such as essential libraries—and be distributed to the dependencies of those packages and their dependencies recursively since the registry knows the entire open-source graph. 62 | 63 | Additionally, we believe that the information provided by the protocol’s Proof of Contribution must be available for developers to assess whether they can trust a project and its author. This information may be based on reputation, community kudos, data retrieved from decentralized identity ("[DID](https://www.w3.org/TR/did-core/)") systems, other package managers, or incentive mechanisms that potentially rely on network participants putting value at risk. 64 | 65 | We predict that tea’s combination of tools, information, and rewards will justly incentivize developers, helping secure the software supply chain, stimulating the growth of open-source software, and fostering innovation. 66 | 67 | ### The Decentralized Registry 68 | 69 | Every package manager has its own package registry duplicating the same metadata repeatedly. In some cases, this registry may include [information that differs from the project’s manifest](https://www.bleepingcomputer.com/news/security/npm-ecosystem-at-risk-from-manifest-confusion-attacks/), thus allowing bad actors to potentially inject nefarious code unbeknownst to the user. It’s time there was a single, comprehensive, and definitive registry designed and governed by the communities that depend on it. This decentralized, immutable registry could provide security, stability and prevent malevolent intent. 70 | 71 | The Internet runs on tens of thousands of vital open-source components. It’s remarkable that thus far, incidents caused by the removal of essential open-source infrastructure have been minimal. The most famous was the [removal of an NPM left-pad dependency](https://www.theregister.com/2016/03/23/npm_left_pad_chaos/) in 2016, which cascaded into continuous integration and continuous deployment systems, leaving developers high and dry for days. This event demonstrated that the Internet itself is based on fragile systems of development. Other examples involved active or intentional participation from the package maintainers sabotaging their popular packages (See [colors.js and faker.js](https://fossa.com/blog/npm-packages-colors-faker-corrupted/), as well as [node-ipc](https://www.lunasec.io/docs/blog/node-ipc-protestware/)), or bad actors looking to profit by pretending to help maintain packages and corrupting them to steal, for example, Bitcoin private keys (See [event-stream](https://github.com/dominictarr/event-stream/issues/116)), or malicious packages with intentional misspelling errors, also known as “[typosquatting](https://en.wikipedia.org/wiki/Typosquatting)”, in the hope of tricking users into installing them, for example [crossenv vs. cross-env NPM packages](https://blog.npmjs.org/post/163723642530/crossenv-malware-on-the-npm-registry.html). 72 | 73 | Software integrity needs to be guaranteed as the industry progresses towards a future where digital assets are part of the software. We cannot continue to leave ourselves vulnerable to malicious actors modifying the software. 74 | 75 | Most tools that we call package managers cannot guarantee that these packages built into the apps and dApps are the unaltered open-source code published by their original authors. [Microsoft’s GitHub has found that 17% of vulnerabilities in software were planted for malicious purposes](https://www.zdnet.com/article/open-source-software-how-many-bugs-are-hidden-there-on-purpose/), with some remaining undetected for extended periods (See [Webmin 1.890](https://threatpost.com/backdoor-found-in-utility-for-linux/147581/)). 76 | 77 | A global decentralized registry augmented by a reputation system and supported by incentives designed to expose bad actors and reward good ones may provide the guarantees developer communities have been looking for to secure the software supply chain. 78 | 79 | ### The Storage System 80 | 81 | Open-source projects deliver a broad range of functionality, some of which may be restricted or unwanted. Encryption is an excellent example of that. A critical use case for encryption is the support of individuals’ privacy across the globe. Encryption, however, can also be used for nefarious purposes (see [Phantom Secure](https://www.fbi.gov/news/stories/phantom-secure-takedown-031618), dismantled by law enforcement agencies in March 2018) or may be compromised to support law enforcement activities (See [Operation Ironside (AFP), Operation Greenlight (Europol), and Operation Trojan Shield (FBI)](https://www.europol.europa.eu/media-press/newsroom/news/800-criminals-arrested-in-biggest-ever-law-enforcement-operation-against-encrypted-communication) where the FBI operated an “encrypted” communication platform, AN0M, and convinced criminals to use their “encrypted” phones for secure communication). 82 | 83 | Encryption’s broad applications have made it a perfect use case for open-source software and a great example that any solution that stores packages must be tamper-proof and censorship-resistant. tea is a decentralized protocol that does not intend to filter or sanction packages based on their functionality. While the tea governance may elect to remove proven malicious packages (see the [governance section](white-paper.md#governance) for more information), it is critical for the tea system to connect with multiple storage systems, including decentralized ones that demonstrate that a package is unaltered and correctly replicated. Package maintainers may choose the storage system best suited for their need to store and distribute their packages securely. 84 | 85 | ## Protocol Overview 86 | 87 | Designing a protocol to reward open-source contributions presents formidable challenges. Open-source software, being universally accessible, is susceptible to misattribution, appropriation, and malicious tampering. However, the open-source community has consistently demonstrated its willingness to highlight good actors and expose bad actors. Historically, the energy spent reviewing and commenting on other developers’ contributions has been strictly voluntary, despite how time-consuming and crucial reporting and defending findings may be. 88 | 89 | We intend to create a decentralized protocol secured by reputation and incentives that enhances the sustainability and integrity of the software supply chain by allowing open-source developers to capture the value they create in a trustless manner. We believe adequate rewards for open-source contributions cannot succeed without both a reputation system and the ability for members of the community to communicate their findings and support (or dissent) for a project or the work of a developer. Additionally, we must provide developers with tools to access and contribute to this reputation system. Tools that include simple visual and programmable access to the version and reputation of all dependencies within their projects. 90 | 91 | Transparency into the TEA tokens staked by community members to support each project enhances each project's reputation, much like the number of tokens a package maintainer stakes on their own work signals their commitment to it. These combined data points will help inform a reputation system for all community members and facilitate choice. As the [event-stream package hack](https://medium.com/intrinsic-blog/compromised-npm-package-event-stream-d47d08605502) was not conducted through the package itself, but via one of its dependencies, visibility across all layers of dependencies will be vital to building this trustless system. However, considerations such as computation and transaction (“gas”) costs will need to take priority as the system is designed and built. 92 | 93 | Our goal is to reward both Web 2.0 and web3 developers. The intricacies and specifics of each stack make it so that tracking installations of packages could easily fall victim to one or more bad actors. That includes “buying” installations to artificially inflate numbers. An even worse scenario would be introducing fundamental changes to the nature of open-source software by creating unnecessary friction with license keys or other deployment tracking mechanisms. To provide the broadest coverage, we believe that rewards must not rely on a simplistic notion of tracking installations, but rather on incentive mechanisms that encourage the submission of quality packages and the reporting of nefarious or high-risk packages. Lastly, many packages rely on common dependencies. For example, [lodash](https://www.npmjs.com/package/lodash) has 176,308 open-source dependents while [chalk](https://www.npmjs.com/package/chalk) has 100,247 dependents or [log4js](https://www.npmjs.com/package/log4js/) has 3,809 dependents. As more packages are created using the same dependencies, how do we ensure that rewards are distributed fairly and equitably? How do we ensure that the most utilized dependencies are rewarded without starving new or emerging packages and developers? How do we ensure that the incentive system does not end up steering developers away from niche languages to centralize them where incentives are better? But also, as developers, how do we identify packages with the most dependents to build alternatives - leaner, more efficient, better-coded versions of these packages? 94 | 95 | At tea, we believe that the lack of visibility and incentives has impeded the evolution of open-source software. Supported by the right incentives and rewards, more developers will be in a position to build, improve and augment open-source software for the betterment of the world. 96 | 97 | ### Proof of Contribution 98 | 99 | In this white paper, we propose “Proof of Contribution”, a novel consensus mechanism designed to quantify the impact of all projects across all open-source systems. 100 | 101 | Proof of Contribution assigns a dynamic score, referred to as a project’s teaRank, based on each open-source project’s orientation within, and utilization from the broader open-source ecosystem over time. 102 | 103 | We believe that this approach benefits foundational software far removed from the application layer (which tends to be the most visible layer to the public and attracts most of the interest) and extends the reward mechanism to ensure that all components of a project—from the top of the tree, all the way to its base—are rewarded for their contribution. 104 | 105 | To calculate each project’s score, teaRank builds upon the foundation laid by [Google's PageRank](https://en.wikipedia.org/wiki/PageRank) algorithm. Google’s PageRank is the search product’s defining component and is built on the graph-like structure of web pages. PageRank, at its core, is a probability distribution algorithm that assigns scores to nodes in a graph, representing the likelihood that anything randomly navigating the graph will arrive at a particular node. This algorithm is particularly effective in a graph-like data structure, such as the internet, because it quantifies the impact of each node (or web page) based on the quantity and quality of edges (links) to it. This algorithm was modified over time to better discern the web’s topology and identify fraudulent links between web pages, allowing various attacks to be mitigated. 106 | 107 | Because the graph structure of the internet and the tea Protocol’s decentralized registry share remarkable similarities, PageRank initially appeared to be a promising approach for analysis. However, upon further experimentation, it became apparent that PageRank's anti-spam strategies were less effective when applied to open-source. 108 | 109 | The key distinction lies in open-source software metadata. Unlike web pages, most open-source package metadata, such as lines of code and commit messages, are user-generated and susceptible to spoofing. Package managers are vulnerable to spam campaigns, wherein malicious actors flood the registry with packages containing phishing links or other harmful content. Package manager registries may also inaccurately reflect the dependencies of specific projects. This issue, known as “[manifest confusion](https://www.bleepingcomputer.com/news/security/npm-ecosystem-at-risk-from-manifest-confusion-attacks/)” may allow bad actors to inject nefarious code or artificially inflate the impact of third-party dependencies, often for nefarious purposes. 110 | 111 | The arduous task of identifying and addressing these spam packages typically falls to security firms or altruistic individuals, neither of which offers a scalable solution to combat spam attacks in open-source. 112 | 113 | Proof of Contribution is an algorithm specifically designed to address the identification and isolation of spam packages and ensure only impactful projects receive a fair reward. The details of the Proof of Contribution algorithm will be the subject of a dedicated technical paper. 114 | 115 | ### Network Participants 116 | 117 | In this white paper, we distinguish participants through their contributions. Some may contribute code or verify contributed code. Others may support developers and their reputation. 118 | 119 | #### Package Maintainers 120 | 121 | tea assumes that package creators maintain their work. In this white paper, we’ll refer to them as “package maintainers”. 122 | 123 | Package maintainers must make sure their software continues to deliver increasing value as the industry evolves. They are pillars of open-source communities who need to be empowered and rewarded for their ongoing contributions. However, a package maintainer may decide to discontinue their maintenance efforts or realize they cannot operate at a pace that matches the project’s users’ expectations. To ensure continuity, they must have the ability to transfer control of their project to another developer or group of developers, thereby appointing them as maintainers and granting them ownership and control over existing and future rewards associated with the project. 124 | 125 | Similarly, a developer may decide to take on the role of package maintainer by forking the existing project and registering a new one which they will maintain moving forward, thus becoming package maintainers. Once registered, projects whose teaRank exceeds a governance defined threshold start receiving rewards from the tea Protocol through the protocol's Proof of Contribution algorithm, in parallel with the legacy forked project. As the open-source community shifts away from the legacy project in favor of its newer iteration, the Proof of Contribution algorithm will gradually decrease the rewards allocated to the legacy project while boosting those assigned to the new forked project. 126 | 127 | It is essential to provide developer communities with the right tools to determine which projects are being maintained and their past and present maintainers’ reputation and quality of work. We’ve too often seen open-source work being tampered with and the efforts of many ruined by bad actors. Although the work of these bad actors is largely discovered and remediated, it is often not until significant damage has been incurred through financial or data loss. Take for example the [event-stream npm package](https://medium.com/intrinsic-blog/compromised-npm-package-event-stream-d47d08605502) that was downloaded over 1.5 million times per week and relied upon by over 1,500 packages when a hacker managed to penetrate the open-source project, gain the trust of its original author, and modify event-stream to depend on a malicious package that would exfiltrate bitcoin wallet credentials to a third-party server. Although tools may help detect some of these attacks, they cannot always be relied upon, which creates an entire community dependent upon each other’s diligence and willingness to share their findings. 128 | 129 | We propose introducing incentives via the TEA token described in the "[TEA token](white-paper.md#tea-token)" section, to encourage open-source communities to report their findings constructively, so package maintainers can address them before they are exploited. 130 | 131 | #### Package Users and tea community members 132 | 133 | “Package users” are software developers focused on solving a specific problem. They often look in the open-source community for the tools they need to experiment quickly and iterate at little to no cost, directly benefiting from the work of package maintainers. 134 | 135 | With more than 10 million packages accessible across the top 30 package managers, the absence of universal value attribution to open-source projects can transform the selection of secure and efficient packages for development into a high-risk and daunting endeavor. With no discernible means to attribute and measure value, how do package users efficiently select secure packages for their development? 136 | 137 | We believe that the tea Protocol’s Proof of Contribution algorithm combined with other incentives can provide package users with the information they need to select the foundation of their own project quickly and thoughtfully. 138 | 139 | #### Project Supporters 140 | 141 | In Web 2.0 and web3, a subset of package users, often called “sponsors”, has chosen to support package maintainers through donations or other forms of remuneration; however, this has rarely been the case. 142 | 143 | These “project supporters” are organizations or open-source project users who use open-source software to build their commercial products, philanthropists looking to support the ecosystem, or entrepreneurs looking to fund teams to develop components of a larger system. 144 | 145 | tea proposes to extend the communities of open-source project supporters to the entire tea community, whether organizations, developers, users, or tech enthusiasts. tea’s goal is to implement decentralized incentive mechanisms through unique use cases of the TEA token for any member of the tea community to contribute to the perpetual sustainability and continuous growth of open-source. Project supporters are free to decide which projects or package maintainers they want to support based on their work, beliefs, or any criteria and metric that would influence their decision. Additionally, project supporters are free to decide how they want to support these projects. 146 | 147 | Sponsorship can be an effective system to support open-source development; however, these sponsorships do not typically extend to all dependencies. This limitation benefits favorites and gets in the way of innovation and software building. To strive as the foundation of software development, open-source must empower all developers, whether beginners or experts, across all layers in the tower. 148 | 149 | To bolster the sustainability and integrity of the software supply chain and enable open-source developers to capture the value they create, tea aims to establish mechanisms where support benefits all aspects of a project. Support from backers will cascade through a project's dependencies, from the top to the base of the tree. This implicitly places trust in the package maintainer's ability to make informed choices about their stack, thus enhancing their reputation. 150 | 151 |

Figure 2 - Rewards distribution across dependencies

152 | 153 | #### tea Tasters 154 | 155 | As new projects or new versions of existing projects are released, the validity of the work needs to be provably demonstrated. This information is critical for package users to decide if they can trust the package and its maintainers. Within the tea Protocol, this function is provided by the “tea tasters”. 156 | 157 | tea tasters, typically, are experienced software developers willing to dedicate some of their time to check the claims associated with a package (functionality, security, [semantic versioning](https://semver.org/), license accuracy, etc.) and stake both their reputation and TEA tokens to demonstrate the outcome of their research and support their reviews. In the tea Protocol, “staking your tea” is the process of locking TEA tokens to support your reviews, potentially earning rewards or facing penalties based on the consensus about the quality of your reviews. tea tasters also have the option to report bugs or vulnerabilities to package managers confidentially. Valid reports result in rewards from the project's treasury, while invalid reports lead to the forfeiture of the tea taster's stake. Lastly, if package maintainers ignore these reported issues, it triggers penalties, or “slashing”, for the project's treasury. 158 | 159 | Like project supporters, tea tasters can influence a project and package maintainer’s reputation; however, their impact is more significant given their role in validating a project’s security, functionality, and quality. tea tasters will also need to build their reputation to support their claims. The quality of their work and the TEA tokens they put at risk as they stake their reviews combined with other external data sources will build each tea taster’s reputation, bringing more value to their work. See the "[Package & Package Maintainer Reputation](white-paper.md#package-and-package-maintainer-reputation)" section for more details on the mechanisms used to influence a project and package maintainer’s reputation. 160 | 161 | ### Project Registration and Proof of Contribution Rewards 162 | 163 | The registration of a project release requires multiple transactions to occur atomically. Specifically: 164 | 165 | * The package maintainer must register the project with the decentralized registry, 166 | * The tea Protocol must instantiate a project treasury owned, controlled, and configured by the package maintainers according to the rules defined by the package maintainers, and 167 | * The tea Protocol must register the treasury’s unique name with the Ethereum Naming Service, or ENS, thus simplifying all user interactions with the treasury. 168 | 169 | Failure of any one of the operations will result in the protocol reverting to its previous state. 170 | 171 | Upon successful registration of a project with a teaRank surpassing a governance-defined threshold, the tea Protocol initiates the distribution of Proof of Contribution rewards to the project's treasury. We suggest distributing these rewards following a predetermined curve from a predefined pool of tokens controlled by the tea Protocol and allocated from the TEA tokens total supply. 172 | 173 | Package maintainers are required to bolster their project's reputation and trustworthiness by consistently staking a portion of the Proof of Contribution rewards received by the project's treasury. For each token staked, network participants will receive a non-transferrable “staked TEA”, or stTEA, at a 1:1 ratio, to participate in the governance of the tea Protocol. In line with the protocol's rules, these staked rewards, and their corresponding stTEA, may be subject to reduction (“slashing”) or redistribution if package maintainers fail to address bugs or vulnerabilities. 174 | 175 | Lastly, failure to maintain the minimum staked treasury ratio defined in the governance rules will result in the suspension of Proof of Contribution reward distribution to the project. Instead, these rewards will be redistributed among compliant projects. 176 | 177 | ### Package & Package Maintainer Reputation 178 | 179 | A reputation system that relies solely on the author’s economic contribution does not provide sufficient user protection and can be subject to Sybil attacks, where a single individual creates multiple representations of themselves to leave a large volume of positive reviews on their work, tricking users into believing their work was reviewed and approved of by many. 180 | 181 | Several methodologies are available to prevent Sybil attacks, some of which are described by Nitish Balachandran and Sugata Sanyal in “[A Review of Techniques to Mitigate Sybil Attacks](https://arxiv.org/abs/1207.2617/)”. As tea is a decentralized protocol, using a trust certification system that relies on a centralized certificate issuance authority would be contrary to its core. We propose to focus on decentralized approaches to Sybil attack mitigation and, more specifically, on methodologies that rely on a large group of network participants incentivized to assess and publicly represent the reputation of each package and its maintainer. 182 | 183 | Similar to the production of blocks on a proof-of-stake blockchain, where non-producing nodes can validate the work of others and, when necessary, highlight a violation of the rules of the network, leading to a penalization of the bad actor through slashing (destruction of a portion of their stake), we propose a system whereby third-parties, such as tea tasters, would be able to review packages produced by package maintainers and be incentivized to behave in the best interest of the open-source software community and its users, as well as recognize good behavior and penalize bad behavior. This system must be both Sybil-resistant and prevent large token holders from materially influencing the protocol or the reputation of specific packages. We believe this approach to be more aligned with open-source, providing a more fertile substrate to foster adoption and trust, and ultimately facilitate the growth of tea. 184 | 185 | Additionally, as the reputation of any member of the tea community reaches key milestones, they may be granted access to elevated parts of the protocol. 186 | 187 | ### Package Review by Third Parties 188 | 189 | The review of packages by third parties is an essential component of reputation building and the security of the software supply chain. However, third-party reviews come with their own set of unique threats including the aforementioned Sybil attacks. 190 | 191 | Blockchain technology, and more explicitly staking, offers a unique opportunity for tea to tackle this challenge. Although wallet addresses may be available in infinite quantities, this is not the case with TEA tokens, whose total supply is expected to be 10 billion. Additionally, each action performed by developers, such as submitting, verifying, or staking packages, will contribute to their reputation, thus creating a unique profile each developer can use to both contribute to the tea community and participate in tea’s governance. 192 | 193 | By requiring third-party reviewers to stake TEA tokens and incur the risk of losing a portion of their stake should they turn out to behave against the interest of the network or be a bad actor, third parties can provide additional credence to a package and receive a reward, in the form of TEA tokens. 194 | 195 | We also propose extending the reputation system to the third parties who perform the independent verification of packages—the tea tasters. The completion of a positive review will require two operations to occur atomically: 196 | 197 | * The submission of the code review, signed by the tea taster and publicly accessible to all members of the community, along with 198 | * The act of staking the package, to substantiate their review. 199 | 200 | The completion of a negative review that includes one or more critical vulnerabilities will require the tea tasters to first contact the package maintainer using a messaging protocol to notify them of the vulnerability and allow them to address the issue in a timely fashion. Upon expiry of the governance-defined period allocated to the package maintainer to address their vulnerability or as the corrected package becomes available, the same messaging protocol will be used to notify users and testers of this package (including dependents) that a vulnerability has been identified, and hopefully addressed, so they know to update their application or dependencies. To disincentivize wasting developers’ time, communication between the tea tasters and package maintainers will require the tea tasters to stake TEA tokens. 201 | 202 | Upon completing both operations, the tea tasters will receive an NFT as evidence of their work on the specific package and package version. The accumulation of NFTs combined with the staking ratio of each of the packages reviewed and information extracted from external systems will inform a tea taster’s reputation. As their reputation reaches key milestones, tea tasters may earn access to elevated parts of the protocol or accelerated rewards from the protocol, as decided by the tea governance. 203 | 204 | ### Outdated or Corrupt Packages 205 | 206 | tea’s mission is to enhance the sustainability and integrity of the software supply chain by allowing open-source developers to capture the value they create; however, rewards must be commensurate with the efforts deployed by package maintainers and tea tasters. Under-maintained, outdated, or corrupted packages are clear indications of package maintainers not living up to the community’s expectations or not delivering on the trust and support impressed upon them through the staking of packages. Another manifestation of outdated packages may be the continued use of a legacy language or legacy version of multi-version languages. Packages remaining outdated or corrupt for too long indicate that tea tasters need to review package maintainers’ work regularly and consistently. 207 | 208 | tea tasters play a pivotal role in open-source communities, as their reviews and associated claims can influence package users, either guiding them towards or away from specific packages. To ensure that reviews can be trusted on an ongoing basis, we propose a mechanism whereby reviews posted by tea tasters must be associated with staked TEA tokens. Outdated or corrupted packages may see a portion of their treasury slashed, while another portion is sent to the tea taster who first recognized the lack of maintenance of any package. 209 | 210 | As packages gain in popularity and usage, with more applications and potentially mission-critical systems depending on them, we must incentivize developers to discreetly report flaws to the package maintainer and encourage package maintainers to address such flaws before they can be exploited. Consequently, we propose that any negative review which outlines a flaw such as a zero-day vulnerability or the use of an outdated dependency and remains open beyond a grace period defined by governance should be considered a failure on the part of the package maintainer and be subject to the same penalties with the first tea taster to report the flaw receiving a portion of the slashed tokens. 211 | 212 | The same can be said for package supporters who staked their reputation and TEA tokens on the work of delinquent package maintainers and received rewards for it. As they failed to identify the lack of maintenance or elected to continue to support the package regardless, we propose that all slashing activities extend to the supporters of the package. 213 | 214 | Distribution to all tea tasters could be based on the age of their review and the number of TEA tokens they staked for their review. 215 | 216 | ## TEA Token 217 | 218 | TEA is a cryptographic token which serves as the access key to certain parts and designated features of the tea Protocol. 219 | 220 | Holders of TEA token have the ability to: 221 | 222 | * Register their packages; 223 | * Support packages by staking TEA tokens to specific packages; 224 | * Contribute to the security of the software supply chain by challenging packages and conducting reviews to report bugs and/or vulnerabilities. 225 | 226 | As discussed, the tea Protocol unlocks the open-source economy and creates value for builders, maintainers, and end-users of enterprise software. Ultimately, the value captured by the tea Protocol accrues back to token holders as the community scales, creating a feedback loop that further incentivizes participation. 227 | 228 | ### Rewarding Open-Source Developers 229 | 230 | We expect tea’s Proof of Contribution and staking mechanisms to foster the growth of open-source by empowering its participants with the resources they need to pursue their passion unencumbered. 231 | 232 | As outlined in "[Project Registration and Proof of Contribution Rewards](white-paper.md#project-registration-and-proof-of-contribution-rewards)", projects registered with the tea Protocol and with a teaRank that surpasses a governance-defined threshold will receive Proof of Contribution rewards in the form of TEA tokens from the tea Protocol. This distribution will persist as long as the package complies with the rules of the protocol. Specifically, the package will have to maintain a teaRank above the governance defined threshold and package maintainers will have to contribute to their project’s reputation and trustworthiness by continuously staking a portion of the Proof of Contribution rewards received by the project’s treasury. Failure to comply with these rules will result in the suspension of the distribution of Proof of Contribution rewards and the redistribution of future rewards among compliant projects. 233 | 234 | Dependencies can significantly affect the reliability and security of a package, and the absence of registration for a package's dependencies should be seen as a potential risk. Package maintainers, being both validators and users of these dependencies, are in a prime position to connect with the maintainers of those dependencies. They can encourage them to register their projects with tea, thus making them subject to oversight by tea tasters and eligible for associated rewards. To encourage this community-wide engagement aimed at enhancing the reputation system, we recommend that any package with dependencies that are not registered with the tea Protocol see a fraction of its Proof of Contribution rewards burnt. This burn would be proportional to the number and contribution, quantified in teaRank, of each unregistered dependency, and continue as long as these dependencies remain unregistered. 235 | 236 | Numerous cases have demonstrated that strong incentives can entice malicious actors to compromise open-source software. Most of the Internet’s critical infrastructure is running on open-source, and the race to find exploits and other vulnerabilities is on. At tea, we believe that package maintainers are not the ones that should be blamed (although they often are). 237 | 238 | The tea Protocol's incentives address this issue by ensuring a fair and equitable distribution of incentives. A package like lodash with over 176k dependents is a pillar of open-source development, and its maintainers deserve to be rewarded proportionally. However, a reward system built solely on the number of dependents would prevent innovators from disrupting these monopolies unless they are sufficiently funded by third parties or have already accumulated enough resources to self-fund. This approach would likely lead to a shrinking number of contributors, resulting in the polar opposite of what tea is about. 239 | 240 | To address this limitation and empower every TEA token holder with the ability to support package maintainers, we also recommend that a governance-defined fraction of all staking rewards received by all network participants be directed towards the treasury of the staked package, along with its dependencies. 241 | 242 | ### Staking to Secure the Software Supply Chain 243 | 244 | Staking can be an effective methodology to support a decentralized reputation system. However, to facilitate the security of the software supply chain, the tea incentive distribution system must carefully consider the staking ratio of each package and adjust each package’s incentive accordingly. 245 | 246 | To reduce the risk of a small number of packages used as dependencies across many applications collecting most staking rewards, we recommend the implementation of an optimum staking ratio, similar to the approach described in the [research produced by the web3 Foundation](https://research.web3.foundation/Polkadot/overview/token-economics). 247 | 248 | When a package exceeds the governance-defined optimum staking ratio, the total amount of staking rewards allocated to the package will remain fixed, regardless of the number of TEA tokens staked to the package. This measure, designed to de-incentivize package supporters and tea tasters from further staking highly staked packages, will result in a linear decrease of the staking rewards received by each package supporter. 249 | 250 | A curve-based approach, such as the one described in the web3 Foundation’s research would slow down the reduction of the staking rewards pool allocated to the package, thus continuing to take away from lesser staked packages and introducing negative externalities by granting more influence on large token holders over the distribution of the staking rewards pool. 251 | 252 | The recommended linear design should allow lesser staked packages to become more attractive to both package supporters and tea tasters. It may also incentivize experienced developers to build alternatives to highly-staked packages, creating an opportunity for the tea community to balance supporting existing software and promoting innovation. In its initial design, the staking ratio will be calculated using the circulating supply. The tea community may alter this design to improve the system’s scalability further. 253 | 254 | Just as good actors need to be rewarded; bad actors need to be identified and penalized. Open-source software provides many opportunities for bad actors to create pain points and reputational risks for an entire community of developers. From the misappropriation of work to the alteration and redistribution of software packages, or the injection of nefarious code, the war between good and bad actors goes on, often with well-funded bad actors who see the contamination of open-source packages as an opportunity to benefit financially. The downside has been relatively minimal, with packages potentially banned from digital shelves or subjected to a poor reputation. 255 | 256 | To directly address malicious actors and intensify the repercussions for actions contrary to the open-source, we recommend implementing the slashing mechanism detailed in the “[Package Review by Third Parties](white-paper.md#package-review-by-third-parties)” and “[Outdated or Corrupt Packages](white-paper.md#outdated-or-corrupt-packages)” sections. 257 | 258 | As tea tasters evaluate and analyze the code in newly submitted packages, we suggest tea tasters receive the tools and incentives to pinpoint and highlight nefarious code so 259 | 260 | * package users can be made aware of the risks, and 261 | * package maintainers and package supporters are penalized for submitting or supporting nefarious code. 262 | 263 | To that extent, for all evidenced negative reviews performed per the network rules and which have been addressed by the package maintainer within the governance defined period, the package maintainer should not incur any penalty contrary to the package supporters or the tea tasters who provided a positive review of the package in question. 264 | 265 | For negative reviews performed per the network rules and that the package maintainer has not addressed within the governance-defined period, a fraction of the TEA tokens staked by the project’s treasury, the package supporters, and previous tea tasters will be slashed and sent to the tea taster who identified the bug or vulnerability. Another fraction will be locked into an insurance pool controlled by the tea governance. The tea governance will establish policies and rules in close collaboration with the community to distribute the pool’s contents to those affected by vulnerabilities. The protocol will distribute a third fraction of the slashed TEA tokens across all tea tasters who contributed to the negative review. 266 | 267 | Staking and slashing are vital components of the tea Protocol's incentive and penalty system. Package maintainers are required to stake a portion of their project's treasury, ensuring they have a substantial stake at risk in case they neglect to address bugs or vulnerabilities. Package users, supporters, and tea tasters can also stake TEA tokens to contribute to a package or package maintainer's reputation and actively participate in the protocol to uphold the software supply chain's sustainability and integrity. 268 | 269 | Governance is closely tied to this active engagement. For each TEA token staked, participants receive non-transferrable "staked TEA" (stTEA) at a 1:1 ratio, enabling them to participate in the governance of the tea Protocol. Staked rewards and their corresponding stTEA tokens may face reduction (slashing) or redistribution if the protocol rules are not followed, reinforcing accountability within the ecosystem. 270 | 271 | ### TEA Token Supply Distribution 272 | 273 | A majority of the TEA tokens created by the protocol are used as incentives to encourage package maintainers, users, and supporters to perform activities that provide value to the decentralized network. The distribution of TEA tokens to various stakeholders within the protocol is dictated by a “distribution schedule”. 274 | 275 | Network incentives will be distributed directly by the tea Protocol, in the form of TEA tokens, to four groups of stakeholders: 276 | 277 | * Package Maintainers; 278 | * Package Users (which include all members of the tea community); 279 | * Project Supporters; and, 280 | * tea Tasters. 281 | 282 | TEA tokens will also be utilized to support packages and secure the software supply chain through staking, including the right to challenge a package by conducting a review and reporting bugs or vulnerabilities, reward the open-source developers of registered projects, and participate in the governance of the tea Protocol. 283 | 284 | It’s recommended that a 10 billion maximum token supply be distributed across all members of the tea community as described below: 285 | 286 |

Figure 3 - Token distribution of maximum supply

287 | 288 | Roughly 51.4% of the maximum token supply should be allocated to “Ecosystem & Governance”, which includes incentives for open-source projects to onboard and maintain their codebase as well as rewards for contributing to decentralized votes and consensus via the tea DAO. Tokens allocated to “Ecosystem & Governance” should be distributed as Proof of Contribution rewards, staking rewards, and other types of developer-centric incentives. 289 | 290 | Roughly 18.6% of the maximum token supply should be allocated to the “Protocol Development” to ensure the sustainability and continued evolution of the tea Protocol. Roughly 12.7% should be earmarked for “Early Supporters & Advisors”. Roughly 11.0% should be earmarked for a Private sale, 3.0% for a public sale, while the remaining 3.2% should be allocated to support marketplace liquidity once a token generation event occurs. 291 | 292 | Detailed Tokenomics, including a comprehensive Token Distribution and Emissions schedule will be the subject of a dedicated paper. 293 | 294 | ## Governance 295 | 296 | Governance is critical to the development, sustainability, and adoption of any distributed system. 297 | 298 | We propose that the tea Protocol incorporates governance mechanisms that enable active contributors who have staked TEA tokens to propose and vote on non-financial critical parameter changes. The voting process would be weighted by stTEA token ownership and individual reputation. 299 | 300 | Protocol parameters could include the priority to support specific package managers or introduce new protocol features or functions, as well as the impact of external factors on user and package reputation. This functionality will ensure that critical parameters can evolve and be optimized over time by active members of the tea community. We anticipate governance will launch with a simple structure and progressively expand as the tea system matures, facilitating adoption and ensuring progressive decentralization. 301 | 302 | Some system parameters may not be subject to governance or support high frequency changes to reduce the attack surface represented by governance. A progressive transition of parameters to open, decentralized governance will ensure the stability and predictability of the system. 303 | 304 | ## Third-Party Extensibility 305 | 306 | As we build the initial tools to ignite the long-overdue support of the open-source communities, we believe part of our mission is to ensure that third parties can extend the overall toolset. In addition to providing the infrastructure for developers to build extensions to the protocol, including new ways to innovate and further the support of open-source developers, our plans include the potential for other package managers to contribute to the protocol. 307 | 308 | The dreams and efforts of open-source developers have built the innovation that supports our everyday life. We look forward to discovering the new uses and extensions for the tea Protocol proposed by the tea community. 309 | 310 | ## Future Work and Potential Community Efforts 311 | 312 | As the tea system matures, we foresee the community deciding and contributing to alterations and extensions of the tea system through governance. Below are some ideas that we believe may inspire some, however we do not guarantee any future performance. 313 | 314 | ### tea Wholesalers 315 | 316 | Open-source software communities are vibrant and constantly looking to innovate and deliver value. This dedication and altruism lead to the constant building of new software and packages, each one pulling dependencies. As a result, we anticipate the dependencies map to evolve constantly, leading to frequent changes to the staking ratio and rewards. In the future, the tea community may propose the development of a system designed to dynamically monitor the staking ratio for each project and rebalance how project supporters stake their TEA tokens based on their own criteria. 317 | 318 | ### Royalties on Package Transfer 319 | 320 | We recognize that package maintainers may decide to transfer their rewards stream to one or more developers. The governance of such transfer must remain the decision of the package maintainer and their partners, with no interference from tea. Tools will need to be provided for such transfer to be total or partial (perhaps through only a portion of the rewards being redirected to one or more developers, while the remaining rewards continue to flow to the original package maintainer) and for the staking rewards to flow through a single account controlled by a single network participant, multiple network participants, or automatically distributed across multiple accounts using static or dynamic ratios. 321 | 322 | ### Rewards Distribution Across Multiple Maintainers 323 | 324 | The maintenance of a package can rely on the work of one more team of developers. Before rewards start to flow, teams should consider automating the distribution of value amongst themselves. How the distribution occurs must be decided by the maintainers themselves, as they are in the best position to evaluate who contributed and how they should be rewarded. 325 | 326 | To accomplish that, each team (or teams) could set up their own decentralized autonomous organization ([DAO](https://ethereum.org/en/dao/)) and either automate the distribution or deploy more complex systems to determine the adequate value distribution based on external factors such as a vote from all DAO members, or time-based distributions based on continuous contribution, successful completion of bounties, etc. 327 | 328 | ### Handling Package “Forks” 329 | 330 | We believe that forks are essential and largely under-utilized. Forks can be an effective tool for developing packages that compete in functionality, performance, security, and even attention. As useful as they may be, forks must recognize the original efforts. Through future work or potential contributions, the tea community may enhance the system to require forks to be declared, perhaps even detected when a project is registered. Undeclared forks revealed by tea tasters may result in a portion of the fork’s treasury’s stake being slashed, transferred to the original package maintainer, or sent to the tea tasters who revealed the fork. 331 | 332 | ### Runtime vs. Build Dependencies 333 | 334 | tea may not distinguish build dependencies from runtime dependencies when distributing Proof of Contribution rewards at launch. However, provided the tea community feels strongly about making such a distinction, the tea community may propose enhancements to the rewards distribution algorithm to account for the criticality of each dependency and their contribution to the individual value of the packages that depend upon them. These proposals would be voted upon and implemented based on the community’s decision. 335 | 336 | ### Usage-based Rewards 337 | 338 | As more applications are built using projects registered with tea, the community may augment the reward algorithm so that allocation may be influenced by external attested datasets such as usage. This update to the rewards mechanism could allow for a higher allocation of TEA token rewards to flow towards packages with the highest usage while still respecting the constraints of the staking ratio described in the TEA token section. Package maintainers could use a similar approach to distribute rewards across their dependencies based on the transparent logic of their choice. Note that all information used to affect the distribution of rewards across packages and dependencies in the tea system will need to be provably reliable. 339 | 340 | ## Acknowledgments 341 | 342 | This white paper would not exist without the support and dedication of many teaophiles. The authors would like to acknowledge Jacob Heider, Jadid Khan, Josh Kruger, and Shane Molidor for their contribution to the tokenomics, Sanchit Ram for his contribution to the teaRank algorithm, and the many discrete individuals who volunteered their time to provide feedback on the contents of this document. 343 | 344 | ## Glossary of Terms 345 | 346 | | Term | Definition | 347 | | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 348 | | Leaf | The smallest denomination of the TEA token. A leaf corresponds to one quintillionth (10^−18) of a tea. | 349 | | Slashing | The action of penalizing stakers in response to behavior contrary to the protocol rules. | 350 | | Staking | The action of locking TEA tokens to support your claim and receive rewards (or penalties) based on the consensus on the validity of your claim. | 351 | | stTEA | Non-transferrable “staked TEA” token or “stTEA” received by network participants for each token staked at a 1:1 ratio. stTEA can be utilised to participate in the governance of the tea Protocol | 352 | | teaRank | Dynamic impact score assigned to each project by the protocol’s “Proof of Contribution” algorithm. | 353 | 354 | ## References 355 | 356 | 1. [https://creativecommons.org/licenses/by-sa/4.0/](https://creativecommons.org/licenses/by-sa/4.0/) 357 | 2. [https://archive.org/details/historyofmodernc00ceru](https://archive.org/details/historyofmodernc00ceru) 358 | 3. [https://nvd.nist.gov/vuln/detail/CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) 359 | 4. [https://www.reuters.com/article/usa-cyber-vulnerability-idCNL1N2SY2PA](https://www.reuters.com/article/usa-cyber-vulnerability-idCNL1N2SY2PA) 360 | 5. [https://twitter.com/yazicivo/status/1469349956880408583](https://twitter.com/yazicivo/status/1469349956880408583) 361 | 6. [https://www.thestack.technology/core-js-maintainer-denis-pusharev-license-broke-angry/](https://www.thestack.technology/core-js-maintainer-denis-pusharev-license-broke-angry/) 362 | 7. [https://www.w3.org/TR/did-core/](https://www.w3.org/TR/did-core/) 363 | 8. [https://www.bleepingcomputer.com/news/security/npm-ecosystem-at-risk-from-manifest-confusion-attacks/](https://www.bleepingcomputer.com/news/security/npm-ecosystem-at-risk-from-manifest-confusion-attacks/) 364 | 9. [https://www.theregister.com/2016/03/23/npm\_left\_pad\_chaos/](https://www.theregister.com/2016/03/23/npm_left_pad_chaos/) 365 | 10. [https://fossa.com/blog/npm-packages-colors-faker-corrupted/](https://fossa.com/blog/npm-packages-colors-faker-corrupted/) 366 | 11. [https://www.lunasec.io/docs/blog/node-ipc-protestware/](https://www.lunasec.io/docs/blog/node-ipc-protestware/) 367 | 12. [https://github.com/dominictarr/event-stream/issues/116](https://github.com/dominictarr/event-stream/issues/116) 368 | 13. [https://blog.npmjs.org/post/163723642530/crossenv-malware-on-thenpm-registry.html](https://blog.npmjs.org/post/163723642530/crossenv-malware-on-the-npm-registry.html) 369 | 14. [https://www.zdnet.com/article/open-source-software-how-many-bugs-are-hidden-there-on-purpose/](https://www.zdnet.com/article/open-source-software-how-many-bugs-are-hidden-there-on-purpose/) 370 | 15. [https://threatpost.com/backdoor-found-in-utility-for-linux/147581/](https://threatpost.com/backdoor-found-in-utility-for-linux/147581/) 371 | 16. [https://www.fbi.gov/news/stories/phantom-secure-takedown-031618](https://www.fbi.gov/news/stories/phantom-secure-takedown-031618) 372 | 17. [https://www.europol.europa.eu/media-press/newsroom/news/800-criminalsarrested-in-biggest-ever-law-enforcement-operation-against-encryptedcommunication](https://www.europol.europa.eu/media-press/newsroom/news/800-criminals-arrested-in-biggest-ever-law-enforcement-operation-against-encrypted-communication) 373 | 18. [https://medium.com/intrinsic-blog/compromised-npm-package-event-stream-d47d08605502](https://medium.com/intrinsic-blog/compromised-npm-package-event-stream-d47d08605502) 374 | 19. [https://www.npmjs.com/package/lodash](https://www.npmjs.com/package/lodash) 375 | 20. [https://www.npmjs.com/package/chalk](https://www.npmjs.com/package/chalk) 376 | 21. [https://www.npmjs.com/package/log4js/](https://www.npmjs.com/package/log4js/) 377 | 22. [https://www.bleepingcomputer.com/news/security/npm-ecosystem-at-risk-from-manifest-confusion-attacks/](https://www.bleepingcomputer.com/news/security/npm-ecosystem-at-risk-from-manifest-confusion-attacks/) 378 | 23. [https://medium.com/intrinsic-blog/compromised-npm-package-eventstream-d47d08605502](https://medium.com/intrinsic-blog/compromised-npm-package-event-stream-d47d08605502) 379 | 24. [https://semver.org/](https://semver.org/) 380 | 25. [https://arxiv.org/abs/1207.2617](https://arxiv.org/abs/1207.2617) 381 | 26. [https://research.web3.foundation/Polkadot/overview/token-economics](https://research.web3.foundation/Polkadot/overview/token-economics) 382 | --------------------------------------------------------------------------------