Proposed routes:
Path | Show |
---|---|
/ | Homepage |
/campaigns/new | Form the make a new campaign |
/campaigns/:address | Show the details of a specific campaign |
/campaigns/:address/requests | Show all the requests of a specific campaign |
/campaigns/:address/requests/new | Form to create a request for campaign at address specified |
I basically skipped through most of the work... the important parts are understanding how to inject web3
:
import Web3 from "web3" let web3 if (typeof window !== "undefined" && typeof window.ethereum !== "undefined") { // We are in the browser and metamask is running. window.ethereum.request({ method: "eth_requestAccounts" }) web3 = new Web3(window.ethereum) } else { // We are on the server *OR* the user is not running metamask const provider = new Web3.providers.HttpProvider( process.env.NEXT_PUBLIC_INFURA_URL ) web3 = new Web3(provider) } export default web3
We also have a factory.js
file that is a helper to get our contract instance:
import web3 from "./web3" import CampaignFactory from "./build/CampaignFactory.json" const instance = new web3.eth.Contract( JSON.parse(CampaignFactory.interface), process.env.NEXT_PUBLIC_CONTRACT_ADDRESS ) export default instance