Skip to main content

Deploy a Sol Contract

Deploy a solidity contract using the JSON-RPC Relay and leveraging Hardhat.

Deploy Contract (Hardhat)​

info

For this instance we're using the framework Hardhat. Make sure you install the relevant npm package.

Two key steps before deploying the contract.

Hardhat config​

Create a file called hardhat.config.js at the root of your project

require("@nomicfoundation/hardhat-toolbox");require('dotenv').config({path: '.env'});const arkhiaJsonRpcRelayTestnet  = `<ARKHIA_JSON_RPC_URL>/<ARKHIA_API_KEY>`;const operatorPrivateKey = `<HEDERA_ACCOUNT_PVKEY>`;module.exports = {  defaultNetwork: "hedera",  solidity: "0.8.9",  networks: {    hedera: {      url: arkhiaJsonRpcRelayTestnet,      accounts:  [operatorPrivateKey.toString()]      }  },};

Contract​

Create a Greeter.sol with the code below under a contracts folder at the project root.

contract Greeter {    string private greeting;    constructor(string memory _greeting) {        greeting = _greeting;    }    function greet() public view returns (string memory) {        return greeting;    }    function setGreeting(string memory _greeting) public {        greeting = _greeting;    }}

Deploy Contract​

const { ContractId } = require('@hashgraph/sdk');const { ethers } = require("hardhat");const arkhiaJsonApiUrl = `<YOUR_ARKHIA_JSON_URL>/<YOUR_ARKHIA_API_KEY>`;const provider = new ethers.providers.JsonRpcProvider(arkhiaJsonApiUrl);const operatorPrivateKey = `<HEDERA_ACCOUNT_PRIVATE_KEY>`;deployContract = async () => {    try {        const wallet = new ethers.Wallet(operatorPrivateKey, provider);        // Key method to interact with the contract/constructor        const Greeter = await ethers.getContractFactory('Greeter', wallet);        const greeter = await Greeter.deploy(`Hello_message_set_in_contract`);        const receipt = await greeter.deployTransaction.wait();        // Get deployed data        const contractAddress = receipt.contractAddress;        const contractID = ContractId.fromSolidityAddress(contractAddress);        console.log(`Contract ${contractID} successfully deployed to ${contractAddress}`);        return {contractAddress, contractID};    } catch(e) {        console.error(e);    }}
info

Checkpoint

That's it, now you are able to deploy a contract on Hedera using familiar tools like Hardhat! See in the next section how to query data.