This is the repo for the GoodCollective protocol and dapp, use it to:
- Create pools for rewarding climate stewards
 - Create Basic Income pools with dynamic members
 
- 
You can clone the repo with git
git clone https://github.com/GoodDollar/GoodCollective.git
 - 
install dependencies
yarn install - 
build all packages locally
yarn build 
To start a local node with the deployed contracts:
- 
run
cd packages/contracts yarn deploy - 
You can now import types,contracts and deployed addresses see
packages/sdk-js/goodcollective/goodcollective.jsfor example:import GoodCollectiveContracts from '@gooddollar/goodcollective-contracts/releases/deployment.json'; import { ProvableNFT, DirectPaymentsFactory, DirectPaymentsPool, } from '@gooddollar/goodcollective-contracts/typechain-types'; const registry = new ethers.Contract( GoodCollectiveContracts['31337'][0].contracts.DirectPaymentsFactory.address, GoodCollectiveContracts['31337'][0].contracts.DirectPaymentsFactory_Implementation.abi, localProvider ) as DirectPaymentsFactory;
 
- Using the sdk you can create a new DirectPaymentsPool and mint climate actions NFTs
 - Upon minting the NFT the pool will distribute rewards according to the NFT data, if there's enough G$ balance in the pool.
 - Users can also use superfluid G$ streams to support pools
 - for more details about using the sdk look at the README in sdk-js
 
    struct NFTData {
        uint32 nftType; // should be non zero, automatically assigned by the DirectPaymentFactory
        uint16 version; // version should be updatd by the pool/nftType manager
        string nftUri; // extra data related to nft that was minted (usually "proof of..."), or general data like the event types
        EventData[] events; // list of climate action events that this nft represent
    }
    struct EventData {
        uint16 subtype; // event type should be managed by the pool/nftType manager. type number to human readable should be supplied in the ipfs data of the nft or event
        uint32 timestamp; // when event happened (unix timestamp, ie seconds)
        uint256 quantity; // arbitrary quantity relevant to the event, used to calcualte the reward
        string eventUri; //extra data related to event stored on ipfs or other external storage
        address[] contributers; // reward will be split between the event contributers
    }The direct payments pool will send rewards per each event using the following formula:
eventIndex = find indexOf event.subtype in settings.validEvents
rewardPerContributer = settings.rewardsPerEvent[eventIndex] * event.quantity / contributers.length
- 
The app is designed as a webapp but using react-native-web so it should also compile to native.
 - 
to run on ios/android follow the instructions for react-native to install ios/android development frameworks
 
 cd packages/app
 yarn web (or yarn android or yarn ios)The directories that you'll use are:
Solidity contracts
packages/contracts/
React Native Web App
packages/app/
Typescript sdk to interact with the contracts
packages/sdk-js/Everyone is welcome: Developers, designers, and entrepreneurs with a passion for decentralised technologies and a vision to build a new world that has equality, security, inclusivity, and innovation as its cornerstones.
To learn how to contribute, and the various open-source contributors opportunities, see our contribution guidelines
Join the telegram GoodBuilders Chat to ask questions and find others building with GoodDollar and GoodCollective