web3 scaffold
Quickly get up and running on web3
This scaffold is set up as a monorepo using the incredibly fast pnpm, with packages for each part of the project. All of these packages use a common Typescript foundation with linting and autoformatting and is best used with VSCode. It assumes you'll be deploying to an EVM-compatible blockchain.
Packages
app
This is the frontend of your project. It's built on Next.js using Tailwind CSS. Data is read from the smart contract via a subgraph (below) using urql and autogenerated Typescript definitions with GraphQL Code Generator.
contracts
This is where your smart contracts live. They're written in Solidity using Foundry (forge & cast) to compile, test, and deploy. Types are generated with TypeChain.
subgraph
This is the read-only backend for your project and where you can offload a lot of the heavy lifting that would traditionally be done through an eth RPC node. It's written in AssemblyScript and deployed to The Graph.
Deploying
Vercel
Vercel supports monorepos and pnpm out-of-the-box, but you'll need to set the "Root Directory" to packages/app
either during the Vercel project setup or afterwards in the project settings.
Misc install notes
If the submodules in forge are not working, you can remove the directories and reinstall directly with forge:
$ forge install chiru-labs/ERC721A --no-commit
$ forge install foundry-rs/forge-std --no-commit
$ forge install OpenZeppelin/openzeppelin-contracts --no-commit
If you install any other submodules, remember to re-run the mappings:
$ forge remappings > remappings.txt
If you need to install jq for Mac (used to in the contracts/deploy.sh script), run:
$ brew install jq