packages
├── app [@popcorn/app] [next.js]
├── contracts [@popcorn/contracts] [solidity contracts]
├── scripts [@popcorn/scripts] [deploy scripts, etc]
├── utils [@popcorn/utils] [generic utils]
├── ui [@popcorn/ui] [ui components + storybook]
└── ... etc
- Make sure you run node.js v14.x.x (newer node versions might not work properly). You can manage node versions with, for example, nvm.
- Copy
.env.example
to.env
inside your workspace to satisfy hardhat when running yarn install in the next step. You can fill in your own env var values for at a later point in time. - Install packages via
yarn install
- When you want to commit changes you need to install lerna globally
yarn global add lerna
as well as prepare husky as pre-commit action
yarn prepare
- To start the nextjs app and a local hardhat node run:
yarn lerna run dev --parallel
- Then in another terminal you can deploy the contracts with some fixtures.
yarn hardhat dev:deploy --network localhost
This will deploy all contracts and create 3 elections with pre-registered beneficiaries with the following attributes:
- Monthly (Accelerated Voting Enabled)
- Quarterly (Accelerated Voting Enabled)
- Yearly (Default Configuration)
To update the election state (for instance, to change from registration period to voting period for the elections with accelerated voting enabled), you can run this command:
yarn hardhat elections:refreshElectionState --term 1 --network localhost
- Now update your
.env
file with the contract addresses output in the previous command.
-
Install packages
yarn install
-
Run dev (watch files and start up frontend)
yarn lerna run dev --parallel
-
Start storybook (optional):
yarn lerna run story --parallel
To run tests:
go to packages/contracts
yarn hardhat test
Deploy from packages/contracts
:
- compile:
yarn hardhat compile
- in one terminal:
yarn hardhat node
- in another terminal:
yarn hardhat dev:deploy
Service | Location |
---|---|
Next.js Frontend | http://localhost:3000 |
Storybook | run: yarn lerna run story |
Command | Description |
---|---|
yarn install |
equivalent to npm install |
yarn add @org/packagename |
equivalent to npm install - will add to dependencies |
yarn add @org/packagename -D |
equivalent to npm install --save-dev - will add to devDependencies |
lerna dev --parallel |
run package.json "dev" script on all projects |
lerna run dev --scope=@popcorn/app |
run package.json "dev" script only on frontend package |
lerna run story |
start storybook |
lerna run test --parallel |
run tests |
Command | Description |
---|---|
yarn hardhat dev:deploy |
deploy contracts for development |
yarn hardhat elections:refreshElectionState --term 1 --network localhost |
refresh election state |
yarn hardhat elections:getElectionMetadata --term 1 --network localhost |
get metadata for election term |
yarn lerna run --scope @popcorn/contracts docify |
generate documentation for contracts (found in packages/contracts/docgen/docs) |
Contributions are welcome! Please raise a pull request with your contributions.
Popcorn follows the Contributor Covenant Code of Conduct.