/web3-scaffold

Primary LanguageTypeScript

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