npm package: @hexlantcontract/hc-wizard
Description: A boilerplate contract generator forked from openzeppelin
Latest version: 1.0.8

# Hexlant Contracts Wizard for Solidity

[![NPM Package](https://img.shields.io/npm/v/@hexlantcontract/hc-wizard?color=%234e5de4)](https://www.npmjs.com/package/@hexlantcontract/hc-wizard)

A boilerplate contract generator forked from openzeppelin

## Repository

```
https://bitbucket.org/hexlant/hc-wizard/src/master/
```

## NPM

```
@hexlantcontract/hc-wizard
```

## Compile usage

```jsx
import { erc20 } from '@hexlantcontract/hc-wizard';

const { abi, bytecode, code } = erc20.compile({
	access: 'ownable',
  name: 'ExampleFT',
  symbol: 'EFT',
  premint: '1000000',
})
```

## Result

abi

```jsx
[
  { inputs: [], stateMutability: 'nonpayable', type: 'constructor' },
  {
    anonymous: false,
    inputs: [ [Object], [Object], [Object] ],
    name: 'Approval',
    type: 'event'
  },
  {
    anonymous: false,
    inputs: [ [Object], [Object] ],
    name: 'OwnershipTransferred',
    type: 'event'
  },
  {
    anonymous: false,
    inputs: [ [Object], [Object], [Object] ],
    name: 'Transfer',
    type: 'event'
  },
  {
    inputs: [ [Object], [Object] ],
    name: 'allowance',
    outputs: [ [Object] ],
    stateMutability: 'view',
    type: 'function'
  },
  {
    inputs: [ [Object], [Object] ],
    name: 'approve',
    outputs: [ [Object] ],
    stateMutability: 'nonpayable',
    type: 'function'
  },
  {
    inputs: [ [Object] ],
    name: 'balanceOf',
    outputs: [ [Object] ],
    stateMutability: 'view',
    type: 'function'
  },
  {
    inputs: [],
    name: 'decimals',
    outputs: [ [Object] ],
    stateMutability: 'view',
    type: 'function'
  },
  {
    inputs: [ [Object], [Object] ],
    name: 'decreaseAllowance',
    outputs: [ [Object] ],
    stateMutability: 'nonpayable',
    type: 'function'
  },
  {
    inputs: [ [Object], [Object] ],
    name: 'increaseAllowance',
    outputs: [ [Object] ],
    stateMutability: 'nonpayable',
    type: 'function'
  },
  {
    inputs: [],
    name: 'name',
    outputs: [ [Object] ],
    stateMutability: 'view',
    type: 'function'
  },
  {
    inputs: [],
    name: 'owner',
    outputs: [ [Object] ],
    stateMutability: 'view',
    type: 'function'
  },
  {
    inputs: [],
    name: 'renounceOwnership',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function'
  },
  {
    inputs: [],
    name: 'symbol',
    outputs: [ [Object] ],
    stateMutability: 'view',
    type: 'function'
  },
  {
    inputs: [],
    name: 'totalSupply',
    outputs: [ [Object] ],
    stateMutability: 'view',
    type: 'function'
  },
  {
    inputs: [ [Object], [Object] ],
    name: 'transfer',
    outputs: [ [Object] ],
    stateMutability: 'nonpayable',
    type: 'function'
  },
  {
    inputs: [ [Object], [Object], [Object] ],
    name: 'transferFrom',
    outputs: [ [Object] ],
    stateMutability: 'nonpayable',
    type: 'function'
  },
  {
    inputs: [ [Object] ],
    name: 'transferOwnership',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function'
  }
]
```

bytecode

```jsx
60806040523480156200001157600080fd5b5060405180604001604052806009815260200168115e185b5c1b19519560ba1b8152506040518060400160405280600381526020016211519560ea1b815250816003908051906020019062000068929190620001e5565b5080516200007e906004906020840190620001e5565b5050506200009b62000095620000c960201b60201c565b620000cd565b620000c333620000ae6012600a620003a0565b620000bd90620f4240620003b8565b6200011f565b62000432565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200017a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200018e9190620003da565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620001f390620003f5565b90600052602060002090601f01602090048101928262000217576000855562000262565b82601f106200023257805160ff191683800117855562000262565b8280016001018555821562000262579182015b828111156200026257825182559160200191906001019062000245565b506200027092915062000274565b5090565b5b8082111562000270576000815560010162000275565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620002e2578160001904821115620002c657620002c66200028b565b80851615620002d457918102915b93841c9390800290620002a6565b509250929050565b600082620002fb575060016200039a565b816200030a575060006200039a565b81600181146200032357600281146200032e576200034e565b60019150506200039a565b60ff8411156200034257620003426200028b565b50506001821b6200039a565b5060208310610133831016604e8410600b841016171562000373575081810a6200039a565b6200037f8383620002a1565b80600019048211156200039657620003966200028b565b0290505b92915050565b6000620003b160ff841683620002ea565b9392505050565b6000816000190483118215151615620003d557620003d56200028b565b500290565b60008219821115620003f057620003f06200028b565b500190565b600181811c908216806200040a57607f821691505b602082108114156200042c57634e487b7160e01b600052602260045260246000fd5b50919050565b610a0f80620004426000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063715018a61161008c578063a457c2d711610066578063a457c2d7146101cd578063a9059cbb146101e0578063dd62ed3e146101f3578063f2fde38b1461020657600080fd5b8063715018a6146101a05780638da5cb5b146101aa57806395d89b41146101c557600080fd5b806323b872dd116100c857806323b872dd14610142578063313ce56714610155578063395093511461016457806370a082311461017757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f7610219565b604051610104919061084c565b60405180910390f35b61012061011b3660046108bd565b6102ab565b6040519015158152602001610104565b6002545b604051908152602001610104565b6101206101503660046108e7565b6102c3565b60405160128152602001610104565b6101206101723660046108bd565b6102e7565b610134610185366004610923565b6001600160a01b031660009081526020819052604090205490565b6101a8610309565b005b6005546040516001600160a01b039091168152602001610104565b6100f761031d565b6101206101db3660046108bd565b61032c565b6101206101ee3660046108bd565b6103ac565b610134610201366004610945565b6103ba565b6101a8610214366004610923565b6103e5565b60606003805461022890610978565b80601f016020809104026020016040519081016040528092919081815260200182805461025490610978565b80156102a15780601f10610276576101008083540402835291602001916102a1565b820191906000526020600020905b81548152906001019060200180831161028457829003601f168201915b5050505050905090565b6000336102b981858561045e565b5060019392505050565b6000336102d1858285610582565b6102dc8585856105fc565b506001949350505050565b6000336102b98185856102fa83836103ba565b61030491906109b3565b61045e565b6103116107a0565b61031b60006107fa565b565b60606004805461022890610978565b6000338161033a82866103ba565b90508381101561039f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102dc828686840361045e565b6000336102b98185856105fc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6103ed6107a0565b6001600160a01b0381166104525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610396565b61045b816107fa565b50565b6001600160a01b0383166104c05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610396565b6001600160a01b0382166105215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610396565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061058e84846103ba565b905060001981146105f657818110156105e95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610396565b6105f6848484840361045e565b50505050565b6001600160a01b0383166106605760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610396565b6001600160a01b0382166106c25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610396565b6001600160a01b0383166000908152602081905260409020548181101561073a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610396565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36105f6565b6005546001600160a01b0316331461031b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610396565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b818110156108795785810183015185820160400152820161085d565b8181111561088b576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146108b857600080fd5b919050565b600080604083850312156108d057600080fd5b6108d9836108a1565b946020939093013593505050565b6000806000606084860312156108fc57600080fd5b610905846108a1565b9250610913602085016108a1565b9150604084013590509250925092565b60006020828403121561093557600080fd5b61093e826108a1565b9392505050565b6000806040838503121561095857600080fd5b610961836108a1565b915061096f602084016108a1565b90509250929050565b600181811c9082168061098c57607f821691505b602082108114156109ad57634e487b7160e01b600052602260045260246000fd5b50919050565b600082198211156109d457634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220dc0faa232bb83237d9a3c3ff2fef314f8fdbc6de70b17fdde2dda0b7efd73c0d64736f6c63430008090033
```

code

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract ExampleFT is ERC20, Ownable {
    constructor() ERC20("ExampleFT", "EFT") {
        _mint(msg.sender, 1000000 * 10 ** decimals());
    }
}
```

## Detail

### ERC20

Options

```jsx
access: false | 'ownable' | 'roles'
name: string
symbol: string
premint?: string
burnable?: boolean
pausable?: boolean
mintable?: boolean
freezable?: boolean
lockable?: boolean
```

Defaults

```jsx
access: false,
name: 'MyToken',
symbol: 'MTK',
burnable: false,
pausable: false,
premint: '0',
mintable: false,
freezable: false,
lockable: false,
// snapshots: false,
// permit: false,
// votes: false,
// flashmint: false,
// upgradeable: false,
```

### ERC721

Options

```jsx
access: 'ownable' | 'roles'
name: string
symbol: string
baseUri?: string
enumerable?: boolean
uriStorage?: boolean
burnable?: boolean
ownerBurnable?: boolean
pausable?: boolean
mintable?: boolean
incremental?: boolean
airdrop?: boolean
```

Defaults

```jsx
access: 'ownable',
name: 'MyToken',
symbol: 'MTK',
baseUri: '',
enumerable: false,
uriStorage: false,
burnable: false,
ownerBurnable: false,
pausable: false,
mintable: false,
incremental: false,
airdrop: false,
// votes: false,
// hexlant: false,
// upgradeable: false,
```

### ERC1155

Options

```jsx
access: 'ownable' | 'roles'
name: string
uri: string
burnable?: boolean
ownerBurnable?: boolean
pausable?: boolean
mintable?: boolean
supply?: boolean
updatableUri?: boolean
airdrop?: boolean
```

Defaults

```jsx
access: 'ownable',
name: 'MyToken',
uri: '',
burnable: false,
ownerBurnable: false,
pausable: false,
mintable: false,
supply: false,
updatableUri: true,
airdrop: false,
// hexlant: false,
// upgradeable: false,
```

## Deploy contract with Ethers.js

example

```tsx
import { erc20 } from '@hexlantcontract/hc-wizard';
import { ethers, ContractFactory } from 'ethers';

const deploy = async () => {
  const provider = new ethers.providers.JsonRpcProvider(process.env.RPC_URL);
  const wallet = new ethers.Wallet(process.env.PRIVATE_KEY);
	const signer = wallet.connect(provider);

	const { abi, bytecode } = erc20.compile({
    access: 'ownable',
    name: 'ExampleFT',
    symbol: 'EFT',
    premint: '1000000',
  });

	const ERC20Factory = new ContractFactory(abi, bytecode, signer);
  const ERC20 = await ERC20Factory.deploy();

	console.log('address :', ERC20.address)
  console.log('tx hash :', ERC20.deployTransaction.hash)
}

deploy();
```

result

```jsx
address : 0x281CA16fdf60D946dC8510acA1cc5295a3c38039
tx hash : 0x9202d6c470f23fb48264e8206fbf490c9552e76c67f3fa90a12297cbd6121a78
```