This repository is a Hardhat project with the intuit of being simple and straight forward.
The Karma GAP, or Grantee Accountability Protocol, is a system designed to enhance transparency and accountability in grant funding processes, particularly in decentralized ecosystems. It aims to ensure that grantees—those who receive funding—are held accountable for how they use the funds, and that the outcomes of funded projects align with the objectives set out in their proposals.
Start by getting dependencies latest versions:
$ yarnThen make a copy of .env.example and rename it to .env. Fill in the required environment
variables.
Compile the contracts:
$ yarn compileHave in mind that the initialization sequence must be followed in order. And that the contract has security measures to avoid working while not configured correctly. All important variables to run the workflow are mutable and can be changed by the contract owner.
Run the deployment script:
$ yarn deploy --network arbitrumAdd the contract addresses to the .env file then verify them on Arbiscan.
$ npx hardhat verify --network arbitrum <CONTRACT_ADDRESS> <CONSTRUCTOR_ARGS>You must first fill the registerGrants.ts file with the grants you want to register. The grants
use the following interface:
struct Grant {
bytes32 grantUID; // The grant UID defined in EAS
uint256 grantProgramUID; // The grant program UID defined by Karma Gap
address grantee; // Address of the person in charge of delivering the grant
uint256 chainId; // The chain ID where the grant was originated
Status status; // Current status of the grant
}Register the grants in the GrantRegistry.sol:
$ yarn grants --network arbitrumYou must first fill the registerBadges.ts file with the grants you want to register. The grants
use the following interface:
struct Badge {
string name; // The badge name or title
string description; // The description of the badge
string metadata; // A metadata to point external links or json format with the entire badge data
bytes data; // Arbitrary data to be used by implementers
}Register the badges in the BadgeRegistry.sol:
$ yarn badges --network arbitrumGrab the Badges from the logs and save them into the registerScorer.ts file. We will need them to
create the Scorer.
The scorer is a collective of badges that carry a score for each badge. We also have a resolver
field to handle arbitrary data. Which is the case for Karma Gap Reviews, as we don't know which
exact score the reviewer will give.
$ yarn scorer --network arbitrumSave the resulting Scorer ID into the .env file.
Create the schemas on the EAS contract:
$ yarn schemas --network arbitrumSave the resulting schema UID into the .env file.
Contracts should only work when a few items are initialized. The requirements are:
- The
Grant Registrycontract must have at least one grant registered. - The
Badge Registrycontract must have at least one badge registered. - The
EAS Resolvermust have the schema registered. - The
Trustful Scorermust have at least one Scorer registered. - The
Trustful Resolvermust have thescorerId(uint256) set. - The
EAS Resolvermust have theTrustfulResolver.solcontract set.
This script will:
- Set the scorerId on the
Trustful Resolver. - Set the
Trustful Resolvercontract in theEAS Resolver.
yarn initialize --network arbitrumThis is a sample script of how the front-end should Attest on EAS to create a review on-chain.
yarn review --network arbitrumThis project is licensed under MIT.