Cypherpunks CTF is a Web3/Solidity based wargame inspired in Ethernaut, to be played in the Ethereum Virtual Machine. Each level is a smart contract that needs to be 'hacked'.
Level PR's are welcome!
- Install all the packages
https://github.com/cypherpunks-core/cypherpunks-ctf.git
npm install
- Compile contracts
npx truffle compile
- Start a dev server
npm run start
- Install all the packages
https://github.com/cypherpunks-core/cypherpunks-ctf.git
npm install --only=prod
- Compile contracts and get static frontend files
npm run deploy:ui
See contributing.md on the repository for information about how to contribute.
Let's suppose that we are creating a level.
- Fork this repo, clone and npm install.
- Implement the desired instance and factory logic in solidity. See current levels and notes to understand how the game mechanics work.
- Register the level in gamedata/gamedata.json.
- Deploy
cypherpunks.sol
by yourself, then replace the address ofcypherpunks
ingamedata/deploy.ropsten.json
. - Deploy your factory contract and Register your factory contract in
cypherpunks.sol
. - Start running the application on your local.
- Add a description markdown file in
gamedata/levels/
(make suregamedata.json
points to it). This content will now be displayed in the ui for the level. - Verify that the level is playable and winnable via UI. It is common for levels to be beatable in some way in tests that doesn't work using the UI, so it is important to test it manually as well.
- Add a completed description markdown file, in gamedata/levels/ (make sure gamedata.json points to it). The level will display this as additional info once the level is solved, usually to include historical information related to the level.
- Make a PR request so that we can re-deploy the game with the new level!
Thanks goes to these wonderful people (emoji key):
Bill Hsu 💻 |
boyuchen 💻 |
HappyFeet07 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!