#
Glossary
This glossary is intended to define the terminology used in Git Consensus.
Some of these terms may mirror established definitions in
#
Git Consensus
#
Onboarding
The process of going from traditional project governance to Git Consensus governance.
This involves a one-time step of deploying a per-project
#
Distribution
The
When used as an argument in a call to GitConsensus
addRelease(tagData, hashes[], values[]), this will be an array of commit hashes hashes[]
and an array of token balances to be given to each commit hash owner values[]
. This allows the commits that are part of a release to be rewarded with different amounts.
When used as an argument in a call to TokenFactory
createToken(..., owners[], values[], ...), this will be an array of addresses owners[]
and an array of token balances to be given to each owner values[]
. This allows an initial ownership distribution to be given to the existing project maintainers during project
#
Stakeholder
The catch-all term for anyone who has ownership in a project using Git Consensus. Instead of the traditional
Since ownership is represented with a token balance, anyone with a project token balanceOf() > 0 is considered a stakeholder.
#
Open-Source
The terms relating to Open-Source may be generalized or simplified, because no strict standard for how participants come together to work on projects exist. The problem Git Consensus attempts to solve is not specific to one platform or pattern of behavior.
Working in Public: The Making and Maintenance of Open Source Software gives an overview about the different patterns that exist, with observations on communities seen on GitHub. It dedicates an entire chapter just addressing undefined user groups and usage patterns, and this documentation will be based off that.
#
Project
A collaborative group that develops software to achieve a particular aim. One project may relate to multiple git repositories.
This structure may take the form of a Github Organization, where the same ownership applies across a wide range of related repositories.
An example project would be the NodeJS organization, which develops nodejs/node, nodejs/node-gyp, nodejs/llhttp, and many others. If this project was onboarded to Git Consensus, a user's NODE token balance would represent the voting power for these repositories.
#
Governance
The variety of entities that can govern over a
Git Consensus converts the governance structure of a
To achieve this for every project, Git Consensus makes use of the Ethereum blockchain standard of
#
Maintainer
The established OSS role for someone who is responsible for guiding over the direction of the
Another term for this role is Owner, which may be seen as a separate role just to refer to the elevated privileges without the guidance. For simplicity, these terms will be used synonymously.
Git Consensus allows the the hard boundary between
#
Contributor
The established OSS role for someone who provides value to the
Although contributors may promote the health of a project in a variety of ways, Git Consensus specifically target giving rewards for the writing/merging of code. These are due to technical reasons: only a commit can make a secure contribution -> wallet address mapping.
To get around the lack of support for non-commit based contributions, you may try to write this into the repository. For example, if you wanted to reward contributors for answering questions:
- maintain a file in your repository
ANSWERED.md
- update this line every time a question is answered
This will create a commit, which is compatible with Git Consensus contracts (and may receive rewards).
Git Consensus allows the the hard boundary between
#
Git
Git is a popular tool for software development and
The specific internals of Git are not necassary to understand to use Git Consensus. You continue to develop software the same way you normally would, with small modifications to how you would write your
#
Commit
Commits can be thought of as snapshots or milestones along the timeline of a Git project. Commits are created with the git commit
command to capture the state of a project at that point in time.
Any code changes you write will be reflected the tree
, and the previous commit that your changes are adding to reference the parent
commit. In other words, the code you authored can be represented by this commit object.
Git Consensus utilizes the property that not just the code written is SHA-1'd but also the message
. Any change in the message (e.g. amending commit with someone elses address) generates a new hash.
To set up and your
#
Tag
Tags are references (refs) that point to specific commits in the git repository history.
They are created with the git tag
command.
In the process of tagging, you can choose to created either a lightweight
and annotated
. Only annotated tags are stored as full objects, and need to be used when creating releases with Git Consensus.
Git Consensus utilizes the that changes message
to the method alter the generated SHA-1 hash (in blue). This creates a secure tag hash -> address mapping between them.
When creating tags, the embedded address should be the project's
#
Release
Although not technically a Git primitive, release is a term to package software and indicate that it is ready to be used. It is based on a specific
In the Git Consensus release process, you reference a
For more information. see the release guide.
#
Ethereum
The official Ethereum Docs will always be recommended for newcomers to the ecosystem and those wishing to dive deeper. You do not need to know about cryptographic protocols or Ethereum specifics to take full advantage of Git Consensus.
#
Address
There are two account types that exist in Ethereum: Externally Owned Accounts (EOAs) and Contracts. Both get referenced by an address.
EOAs are the user wallets. The address is a 42-character hexadecimal address derived from the last 20 bytes of the public key controlling the account, with 0x appended in front. This address is also the public reference that exists to to receive funds from another party.
In Git Consensus,
#
Token
ERC20 Tokens are the technical standard for fungible assets on Ethereum. The specification of ERC20 is useful as their are other token standards on Ethereum (e.g. ERC721 non-fungible tokens aka NFTs).
In Git Consensus, the usage is always referring to variations of the same ERC20 standard, so it is typically just denoted to Token.
Any
The Token
Git Consensus deploys a fairly standard ERC20 Token
A mint() function that can only be called by the Git Consensus contracts.
A governor() function that maintains a reference to the project
Governor .
#
Governor
Governors take ERC20 FOR
it.
DAOs already use this pattern of a Token + Governor frequently. For example, the Ethereum Name Service allows ENS token holders to come to a vote to update the protocol.
In Git Consensus, each OSS project has it’s own governor, which brings distributed
#
Contract
Smart contracts or simply, contracts, are programs that are hosted and executed on an Ethereum network. It's a collection of code (its fun) and data (its state) that resides at a specific address.
They are similar to any other program you would write and deploy, with two additional properties:
- immutability - once the smart contract is deployed, it's code cannot change.
- distributed - everyone on the blockchain network validates the contract’s output
Most protocols (Git Consensus included) use a set of contracts to establish their functionality. These are the contracts that Git Consensus uses:
#
Clone
A minimal proxy
Git Consensus uses
These clones can be created by calling the create functions on ITokenFactory and IGovernorFactory.