Template repository for a World ID On-Chain Integration.
Create a staging on-chain app in the Worldcoin Developer Portal.
Ensure you have installed Foundry, NodeJS, and pnpm.
Start a local node forked from Optimism Sepolia, replacing $YOUR_API_KEY with your Alchemy API key:
# leave this running in the background
anvil -f https://opt-sepolia.g.alchemy.com/v2/$YOUR_API_KEYIn another shell, deploy the contract, replacing $WORLD_ID_ROUTER with the World ID Router address for your selected chain, $NEXT_PUBLIC_APP_ID with the app ID as configured in the Worldcoin Developer Portal, and $NEXT_PUBLIC_ACTION with the action ID as configured in the Worldcoin Developer Portal:
cd contracts
forge create --rpc-url http://localhost:8545 --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 src/Contract.sol:Contract --constructor-args $WORLD_ID_ROUTER $NEXT_PUBLIC_APP_ID $NEXT_PUBLIC_ACTIONNote the Deployed to: address from the output.
In a new shell, install project dependencies:
pnpm iSet up your environment variables in the .env file. You will need to set the following variables:
NEXT_PUBLIC_APP_ID: The app ID as configured in the Worldcoin Developer Portal.NEXT_PUBLIC_ACTION: The action ID as configured in the Worldcoin Developer Portal.NEXT_PUBLIC_WALLETCONNECT_ID: Your WalletConnect ID.NEXT_PUBLIC_CONTRACT_ADDRESS: The address of the contract deployed in the previous step.
Start the development server:
pnpm devThe Contract ABI will be automatically re-generated and saved to src/abi/ContractAbi.json on each run of pnpm dev.
After making changes to the contract, you should:
- re-run the
forge createcommand from above - replace the
NEXT_PUBLIC_CONTRACT_ADDRESSenvironment variable with the new contract address - if your contract ABI has changed, restart the local web server
You'll need to import the private keys on the local testnet into your wallet used for local development. The default development seed phrase is test test test test test test test test test test test junk.
Caution
This is only for local development. Do not use this seed phrase on mainnet or any public testnet.
When connecting your wallet to the local development environment, you will be prompted to add the network to your wallet.
Use the Worldcoin Simulator in place of World App to scan the IDKit QR codes and generate the zero-knowledge proofs.