Deploy an OpenZeppelin-Contract

Get started with the Contracts Wizard

OpenZeppelin is a platform with battle tested and audited contract libraries. OpenZeppelin has a contract wizard that allows to build basic contracts.

Have a look at (opens in a new tab) and let us build an example project from scratch.

Setup project from scratch using Hardhat

yarn init -y
yarn add --dev hardhat @nomiclabs/hardhat-waffle @nomiclabs/hardhat-ethers @openzeppelin/contracts 
npx hardhat
 What do you want to do? · Create an empty hardhat.config.js
 Config file created 

Configure your contract

Visit (opens in a new tab) and configure your contract. For this test I used the default ERC20 setting minting 2 tokens to myself.

The file is saved in contracts/MyToken.sol:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyToken is ERC20, Ownable {
    constructor() ERC20("MyToken", "MTK") {
        _mint(msg.sender, 2 * 10 ** decimals());
    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);

Connect to vechain network

Configure the network in hardhat.config.js:

module.exports = {
 solidity: "0.8.4",
 defaultNetwork: "vechain",
 networks: {
    vechain: {
      url: '',
      privateKey: "0x80b97e2ecfab8b1c78100c418328e8a88624e3d19928ec791a8a51cdcf01f16f",
      delegateUrl: '',
      blockGasLimit: 10000000

Deploy your contract

Write a script to deploy with hre.thor and interact with your new contract.

This goes to deploy.js:

const hre = require("hardhat");
async function main() {
  const [deployer] = await hre.thor.getSigners()
  const deployerAddress = await deployer.getAddress()
  const MyToken = await hre.thor.getContractFactory("MyToken");
  const myToken = await MyToken.deploy();
  await myToken.deployed();
  console.log("MyToken deployed to:", myToken.address);
  const name = await
  const balance = await myToken.balanceOf(deployerAddress)
  console.log(`minted ${hre.ethers.utils.formatEther(balance)} of ${name} to myself at ${deployerAddress}`)
  .then(() => process.exit(0))
  .catch((error) => {

And enjoy your result:

$ node deploy.js  
Compiled 6 Solidity files successfully
MyToken deployed to: 0xA103c3c0FdD137FAC67bCC2B90351731f96558b2
minted 2.0 of MyToken to myself at 0x7eF0CbaDFc0da51A6153F35a99185B59a8cbc463