U2U Network Documentations
  • Introduction
    • Our Vision
    • Litepaper
      • Overview
        • U2U Network Diagram
        • U2U Network with DEPIN and Web3 Eco System
      • Consensus
  • Services
    • RPC
      • RPC Endpoints
      • Ethereum API Methods
        • eth_blockNumber
        • eth_call
        • eth_chainId
        • eth_estimateGas
        • eth_feeHistory
        • eth_gasPrice
        • eth_getBalance
        • eth_getBlockByHash
        • eth_getBlockByNumber
        • eth_getBlockTransactionCountByHash
        • eth_getBlockTransactionCountByNumber
        • eth_getCode
        • eth_getLogs
        • eth_getProof
        • eth_getStorageAt
        • eth_getTransactionByBlockHashAndIndex
        • eth_getTransactionByBlockNumberAndIndex
        • eth_getTransactionByHash
        • eth_getTransactionCount
        • eth_getTransactionReceipt
        • eth_getUncleByBlockHashAndIndex
        • eth_getUncleByBlockNumberAndIndex
        • eth_getUncleCountByBlockHash
        • eth_getUncleCountByBlockNumber
        • eth_maxPriorityFeePerGas
        • eth_sendRawTransaction
        • eth_subscribe
        • eth_unsubscribe
        • net_version
        • net_listening
        • net_peerCount
        • web3_clientVersion
        • web3_sha3
        • debug_traceTransaction
      • DAG API Methods
        • dag_getEvent
        • dag_getEventPayload
        • dag_getHeads
        • eth_currentEpoch
      • Trace API Methods
        • trace_block
        • trace_get
        • trace_transaction
        • trace_filter
    • Explorer
      • Explorer URLs
      • Explorer API
        • Account
        • Block
        • Contract
        • Logs
        • Stats
        • Token
        • Transaction
      • GraphQL
      • Explorer RPC API
      • Smart Contract Verification
        • Via explorer
        • Via hardhat plugin
      • Testnet Faucet
    • Wallets
      • Metamask
      • Wallet Connect
      • Coinbase Wallet
      • U2U Super App
        • Policy
    • Staking
      • How To Stake?
      • FAQ
    • The Graph
      • Deploy a Graph Node
      • Deploy a Subgraph
    • Bridge
      • Smart Contracts & EOA
    • Oracle
      • Smart Contracts & EOA
  • Network
    • Node Types
    • Requirements
    • Build Dependencies
    • Run Normal Node
      • Mainnet Normal Node
      • Testnet Normal Node
      • Run via Docker
    • Run Validator Node
      • Mainnet Validator Node
      • Testnet Validator Node
    • Run A Local Test Network
    • Troubleshooting
  • SUBNET
    • Overview
    • Subnet Node Type
    • Requirements
    • NFT Digital License
    • Subnet Node Setup
      • Master Node
      • Verifier Node
      • Edge Node CLI
  • For Developers
    • SDK
    • Smart Contract Development
      • What are smart contracts?
      • What is gas?
      • Structure of a smart contract
      • Your first smart contract
      • Test your smart contract
      • Deploy your smart contract
      • Submit your contract to explorer
      • Interact With Your Smart Contract
      • Integrate Your Smart Contract With a Frontend
      • Additional Resources
    • Smart Contract Deployment
      • Deploy with Remix
      • Deploy with Hardhat
Powered by GitBook
On this page
  • Deployment script
  • Network configuration
  • Run deployment script
  1. For Developers
  2. Smart Contract Development

Deploy your smart contract

After testing your contract carefully. You might want to deploy it to the U2U network. This section will guide you to deploy your smart contract.

In Hardhat, scripts are JavaScript/Typescript files that you can use to automate various tasks related to your U2U network development and smart contract deployment. These scripts are typically used to perform actions such as deploying smart contracts, interacting with contracts, testing, and more. Hardhat provides a powerful scripting environment that allows you to work with U2U network and your smart contracts programmatically.

Deployment script

Now, let's create a script for deployment as follow:

scripts/
    deploy.ts

A script should have this structure:

import { ethers } from "hardhat";

async function main() {
  // your code here
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

Put some variables, inside function main() (remember to import ethers library):

import { ethers } from "hardhat";

async function main() {
    const currentTimestampInSeconds = Math.round(Date.now() / 1000);
    const unlockTime = currentTimestampInSeconds + 60;
    const lockedAmount = ethers.parseEther("0.001");
}

Then add deployment code:

const lock = await ethers.deployContract("Lock", [unlockTime], {
  value: lockedAmount,
});

await lock.waitForDeployment();

We use ethers.deployContract() to deploy the contract with given unlock time and the amount we want to lock. It returns a promise of deployed Lock instance.

Then wait for the deployment is finished with lock.waitForDeployment()

Below is full deploy.ts script:

import { ethers } from "hardhat";

async function main() {
  const currentTimestampInSeconds = Math.round(Date.now() / 1000);
  const unlockTime = currentTimestampInSeconds + 60;

  const lockedAmount = ethers.parseEther("0.001");

  const lock = await ethers.deployContract("Lock", [unlockTime], {
    value: lockedAmount,
  });

  await lock.waitForDeployment();

  console.log(
    `Lock with ${ethers.formatEther(
      lockedAmount
    )}U2U and unlock timestamp ${unlockTime} deployed to ${lock.target}`
  );
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

Network configuration

Hardhat needs a node to connect and deploy the contract on U2U network. You need to provide network configuration to Hardhat, that is hardhat.config.js or hardhat.config.ts located in the project directory.

Let's say we want to deploy your contract on U2U Nebulas testnet, our configuration file should look like this:

import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";

const config: HardhatUserConfig = {
  solidity: "0.8.19",
  networks: {
    nebulas: {
      url: 'https://rpc-nebulas-testnet.uniultra.xyz/',
      accounts: ["YOUR_PRIVATE_KEY"], // it should start with 0x...
    }
  },
  etherscan: {
    apiKey: {
      nebulas: "abc", // arbitrary string
    },
    customChains: [
      {
        network: "nebulas",
        chainId: 2484,
        urls: {
          apiURL: "https://testnet.u2uscan.xyz/api",
          browserURL: "https://testnet.u2uscan.xyz"
        }
      },
    ]
  }
};

export default config;

Run deployment script

To run deployment script:

npx hardhat run scripts/deploy.ts --network <network-name>

In this case, <network-name> should be nebulas:

npx hardhat run scripts/deploy.ts --network nebulas

It will produced:

Lock with 0.001U2U and unlock timestamp 1696615281 deployed to 0x8D51395C76C34d0e11178c1F7EE3219B4b958e30

If you face with this error:

ProviderError: insufficient balance for transfer

Voila! Your contract is deployed on Nebulas testnet!

PreviousTest your smart contractNextSubmit your contract to explorer

Last updated 11 months ago

Your account have not enough token U2U. Please head to to fund your account.

faucet