superfuse-wizard
Version:
Interactive smart contract generator based on Superchain 's interoperability standard.
104 lines (82 loc) • 2.72 kB
text/typescript
import type { CommonOptions} from './common-options';
import { defaults as infoDefaults } from "./set-info";
import type { ClockMode} from '../smart-contracts/set-clock-mode';
export const chainOptions = [false,'localhost', 'optimism', 'base'] as const;
export type Chain = typeof chainOptions[number];
export const opSecOptions = [false, 'address', 'key', 'mnemonic'] as const;
export type OpSec = typeof opSecOptions[number];
export const commonDefaults: Required<CommonOptions> = {
//contract
access: false,
upgradeable: false,
contractInfo: infoDefaults,
//deploy
deployInfo: infoDefaults,
//test
testInfo: infoDefaults,
} as const;
export function withCommonDefaults(opts: CommonOptions): Required<CommonOptions> {
return {
access: opts.access ?? false,
upgradeable: opts.upgradeable ?? false,
contractInfo: opts.contractInfo ?? {},
deployInfo: opts.deployInfo ?? {},
testInfo: opts.testInfo ?? {},
};
}
export const defaults: Required<SharedL2NativeSuperchainERC20Options> = {
//contract
contractName: 'L2NativeSuperchainERC20',
contractFile: 'L2NativeSuperchainERC20.sol',
tokenName: 'L2NativeToken',
tokenSymbol: 'NS',
decimals: '18',
ownerAddress: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8',
burnable: false,
pausable: false,
premint: '0',
mintable: false,
minterAddress: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8',
permit: false,
votes: 'blocknumber', //true
flashmint: false,
access: commonDefaults.access,
upgradeable: commonDefaults.upgradeable,
contractInfo: commonDefaults.contractInfo,
//deploy
deployName: 'DeployL2NativeSuperchainERC20Script',
conventionNumber: '000',
chain: 'optimism',
opSec: 'mnemonic',
deployerAddress: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8',
deployInfo: commonDefaults.deployInfo,
//test
testName: 'L2NativeSuperchainERC20Test',
testInfo: commonDefaults.testInfo,
} as const;
export interface SharedL2NativeSuperchainERC20Options extends CommonOptions {
contractName: string;
contractFile: string;
tokenName: string;
tokenSymbol: string;
decimals: string;
ownerAddress?: string;
burnable?: boolean;
pausable?: boolean;
premint?: string;
minterAddress?: string;
mintable?: boolean;
permit?: boolean;
/**
* Whether to keep track of historical balances for voting in on-chain governance, and optionally specify the clock mode.
* Setting `true` is equivalent to 'blocknumber'. Setting a clock mode implies voting is enabled.
*/
votes: boolean | ClockMode;
flashmint?: boolean;
deployName: string;
conventionNumber: string;
chain: Chain;
opSec: OpSec;
deployerAddress: string;
testName: string;
}