Package Exports
- @git-consensus/contracts
- @git-consensus/contracts/build/scripts/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@git-consensus/contracts) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme

Git Consensus Contracts
The Git Consensus Protocol enables distributed governance for Git projects. This repository serves as the location for the Solidity contract interfaces and implementations.
Links
💡 Motivation
📖 Docs
❓ Questions
Developer Guide
This is a modern Ethereum contract repository for Solidity contracts. It combines two extremely powerful frameworks:
- Foundry - for Unit testing written in Solidity (contracts/test)
- Hardhat - for Integration testing written in Typescript (integration/)
These also offer some great tools for some advanced things like contract debugging, deployment, gas measurements, etc.
Setup
Clone the repository:
git clone https://github.com/git-consensus/contract.git && cd contractsInstall Node.js / NPM:
npm install --global npmInstall Yarn:
npm install --global yarnBuild Node dependencies (/node_modules/):
yarn installFoundry
First run the command below to get foundryup, the Foundry toolchain installer:
curl -L https://foundry.paradigm.xyz | bashThen, in a new terminal session or after reloading your PATH, run it to get
the latest forge and cast binaries:
foundryupAdvanced ways to use foundryup, and other documentation, can be found in the foundryup package.
Foundry is a blazing fast, portable and modular toolkit for Ethereum application development. It consists of:
- Forge: Library for Unit / Fuzz testing written in Solidity (see /contracts/test).
- Cast: Library for interacting with a live Ethereum JSON-RPC compatible node, or for parsing data. A swiss army knife for interacting with EVM smart contracts, sending transactions and getting chain data.
Need help getting started with Foundry? Read the 📖 Foundry Book
Hardhat
Hardhat is an Ethereum development environment for professionals. We use the Hardhat Network for Integration testing which written in Typescript. It uses Ethers.js and Mocha/Chai. See /integration/.
On Hardhat's website you will find:
Do Things
Finished Setup?
Run some unit tests with Forge:
forge testBuild contract artifacts and run integration tests with Hardhat:
yarn testDeploy to Ropsten network:
Create a .env file matching the variables seen in .env.example
Getting fully prepared may involve getting a INFURA_API_KEY by signing up, and getting some test ETH on your target network via a facet.
Then run:
yarn deploy --network ropstenGenerate contract API docs:
Ensure ../docs path exists for the docs repo. If it isn't:
git clone https://github.com/git-consensus/docs.git ../docsor
git clone git@github.com:git-consensus/docs.git ../docsNow you can automatically convert NatSpec comments in contracts to docs with:
yarn docRecommended VSCode Extensions
- Solidity Visual Developer
- Solidity Language & Themes (only)
- Solidity (by Hardhat authors)
- Solidity (by Juan Blanco)
- ETHover
- Prettier
- Template String Converter
- TypeScript Import Sorter
Style Guide
- Add Solidity comments in the natspec format.
- Always yarn prettyyour before committing.
- Lowercase commit message (for consistency).
- Embed your Ethereum address in your commit message on this repository.
- Integration testing with Mocha/Chai asserts: expect(actual).to.equal(expected)
- Use Template Literals where possible.
- Use same consistent pattern for import ordering.
In general, please do your best to always keep this repository beautiful! ❤️
Licensing
The code in this project is licensed under the is licensed under the GNU General Public License v3.