UNPKG

create-web3-dapp-dev

Version:

<p align="center"> <br /> <a href="https://createweb3dapp.alchemy.com"> <img src=".github/images/cw3d-logo.png" width="200" alt=""/></a> <br /> </p>

114 lines (104 loc) 3.4 kB
import fs, { existsSync } from "fs"; import path from "path"; import { SmartContractInfo } from "../../interfaces/SmartContractInfo.js"; import { mkdir } from "../utils/mkdir.js"; import { createDeployScript } from "./createDeployScript.js"; import { erc20, erc721, erc1155 } from "@openzeppelin/wizard"; import { CommonOptions } from "@openzeppelin/wizard/dist/common-options.js"; import { SmartContractStandard } from "./utils/smartContractStandards.js"; import { ERC721smartContractInfo } from "../../interfaces/ERC721smartContractInfo.js"; import { ERC20smartContractInfo } from "../../interfaces/ERC20smartContractInfo.js"; export interface ERC20Options extends CommonOptions { name: string; symbol: string; burnable?: boolean; snapshots?: boolean; pausable?: boolean; premint?: string; mintable?: boolean; permit?: boolean; votes?: boolean; flashmint?: boolean; } export interface ERC721Options extends CommonOptions { name: string; symbol: string; baseUri?: string; enumerable?: boolean; uriStorage?: boolean; burnable?: boolean; pausable?: boolean; mintable?: boolean; incremental?: boolean; votes?: boolean; } export interface ERC1155Options extends CommonOptions { name: string; uri: string; burnable?: boolean; pausable?: boolean; mintable?: boolean; supply?: boolean; updatableUri?: boolean; } export const buildSmartContract = ( smartContractInfo: | SmartContractInfo | ERC721smartContractInfo | ERC20smartContractInfo, backendFolder: string ) => { const contractsFolder = path.join(backendFolder, "contracts"); if (!existsSync(contractsFolder)) mkdir(contractsFolder); const writeStream = fs.createWriteStream( path.join(contractsFolder, `${smartContractInfo.name}.sol`) ); let smartcontractTemplate; switch (smartContractInfo.standard) { case SmartContractStandard.ERC20: smartcontractTemplate = erc20.print({ name: smartContractInfo.name, symbol: smartContractInfo.symbol, burnable: smartContractInfo.isBurnable, pausable: smartContractInfo.isPausable, // permint:"", mintable: smartContractInfo.isMintable, flashmint: (smartContractInfo as ERC20smartContractInfo) .isFlashMint, votes: smartContractInfo.isVotes, access: smartContractInfo.isOwnable ? "ownable" : "roles", }); break; case SmartContractStandard.ERC721: smartcontractTemplate = erc721.print({ name: smartContractInfo.name, symbol: smartContractInfo.symbol, // baseUri?: string; enumerable: (smartContractInfo as ERC721smartContractInfo) .isEnumerable, uriStorage: (smartContractInfo as ERC721smartContractInfo) .isURIStorage, burnable: smartContractInfo.isBurnable, pausable: smartContractInfo.isPausable, mintable: smartContractInfo.isMintable, incremental: true, votes: smartContractInfo.isVotes, access: smartContractInfo.isOwnable ? "ownable" : "roles", }); break; case SmartContractStandard.ERC1155: smartcontractTemplate = erc1155.print({ name: smartContractInfo.name, uri: "", burnable: smartContractInfo.isBurnable, pausable: smartContractInfo.isPausable, mintable: smartContractInfo.isMintable, supply: true, access: smartContractInfo.isOwnable ? "ownable" : "roles", }); break; } writeStream.write(smartcontractTemplate); writeStream.end(); createDeployScript(smartContractInfo, backendFolder); };