Skip to content

Contract Deployment Tutorial

The RISE Sepolia Testnet allows developers to deploy and test smart contracts. This tutorial will walk you through deploying contracts using popular Ethereum development tools.

Prerequisites

Before starting:

  1. Get testnet ETH (see Getting Testnet ETH)
  2. Install Node.js and a package manager (npm/yarn)
  3. Have a wallet with your private key ready

Getting Testnet ETH

You'll need testnet ETH to deploy contracts. You can:

Deploy with Hardhat

1. Set Up Project

bash
# Create new directory
mkdir my-rise-contract
cd my-rise-contract

# Initialize project
npm init -y
npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox
npx hardhat init

2. Configure Hardhat

Create or modify hardhat.config.js:

javascript
require("@nomicfoundation/hardhat-toolbox");

/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: "0.8.24",
  networks: {
    rise: {
      url: process.env.Rise_RPC_URL,
      accounts: [process.env.PRIVATE_KEY],
      chainId: 11155931
    }
  }
};

3. Create Contract

Create contracts/Lock.sol:

solidity
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;

contract Lock {
    uint public unlockTime;
    address payable public owner;

    constructor(uint _unlockTime) payable {
        require(block.timestamp < _unlockTime, "Unlock time should be in future");
        unlockTime = _unlockTime;
        owner = payable(msg.sender);
    }

    function withdraw() public {
        require(block.timestamp >= unlockTime, "Too early");
        require(msg.sender == owner, "Not owner");
        owner.transfer(address(this).balance);
    }
}

4. Deploy Contract

Create scripts/deploy.js:

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

  const Lock = await ethers.getContractFactory("Lock");
  const lock = await Lock.deploy(unlockTime, { value: ethers.parseEther("0.0001") });

  await lock.waitForDeployment();

  console.log(
    `Lock with ${ethers.formatEther("0.0001")} ETH deployed to ${lock.target}`
  );
}

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

Deploy:

bash
npx hardhat run scripts/deploy.js --network rise

Deploy with Foundry

1. Install Foundry

bash
curl -L https://foundry.paradigm.xyz | bash
foundryup

2. Create Project

bash
forge init my-rise-contract
cd my-rise-contract

3. Deploy Contract

bash
forge create \
  --rpc-url RPC_URL \
  --private-key YOUR_PRIVATE_KEY \
  src/Lock.sol:Lock \
  --constructor-args 1706745600 \
  --value 0.0001ether

Replace 1706745600 with a future Unix timestamp and adjust the ETH value as needed.

Verify Your Contract

After deployment, verify your contract following our Contract Verification Guide.

Need Help?