Plume
  • Introduction
    • Overview
  • Plume Portal
    • About the Portal
  • Bridge and Swap
  • Stake
  • Plume Points (PP)
  • Official Tokens
    • PLUME ($PLUME) Token
    • Plume USD (pUSD)
    • Plume ETH (pETH)
  • Plume Security
    • AML Screening
    • Compliance at Plume
    • Audits and Security
  • Developers
    • Network Information
    • Smart Contracts
    • How-to Guides
      • How to Connect to Network
        • Install and Configure Wallet
        • Claim test tokens
      • How to Deploy Smart Contracts
        • Deploy using Remix IDE
        • Deploy using Foundry
        • Deploy using Hardhat
      • How to Verify Smart Contracts
        • Verify using Foundry
        • Verify using Hardhat
      • How to Run a Node
    • Tools & Services
      • Account Abstraction
      • Bridges
      • Oracles
      • Data Indexers
      • Node Providers
      • OnRamps
      • Analytics
      • Custodians
      • SDK
      • Misc Tools
    • Plume vs. Ethereum
    • Gas and Fees
    • Finality
    • DeFi Strategy Shortcuts
  • Community and Support
    • Community Channels
    • Brand Assets
    • Terms of Service
    • Privacy Policy
  • MORE
    • Glossary
    • FAQ
Powered by GitBook
On this page
  • Before you Begin
  • Foundry Setup
  • Setup your project
  • Deploy your Contract
  • Sample Output
  1. Developers
  2. How-to Guides
  3. How to Deploy Smart Contracts

Deploy using Foundry

Foundry is a Solidity framework for deploying smart contracts, built by Paradigm and written in Rust to be blazingly fast.

Before you Begin

  • Check if you are using the right network configuration

  • Have enough test tokens in your wallet

Learn more about claiming test tokens from here.

Foundry Setup

Simply follow their "Getting Started" documentation to install and run Foundry, then follow their "Projects" documentation to create a new project.

Run the following commands in your terminal:

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

Setup your project

To start a new project with Foundry, use forge init:

forge init plume

Let's install the OpenZeppelin dependency required for our sample smart contract.

forge install openzeppelin/openzeppelin-contracts
Sample Smart Contract Code

This is a sample NFT contract based on OpenZeppelin's open-source ERC-721 implementation to tokenize our CBO's prized Rolex watch on Plume.

src/RolexYachtMaster40.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract RolexYachtMaster40 is Ownable, ERC721 {
    error NFTAlreadyMinted();
    bool private _minted;

    constructor() Ownable(msg.sender) ERC721("Rolex Yacht-Master 40", "") {}

    function mint() public onlyOwner returns (uint256) {
        if (_minted) {
            revert NFTAlreadyMinted();
        }
        _safeMint(owner(), 0);
        _minted = true;
        return 0;
    }
}

Then, compile the project using forge build:

forge build

[⠰] Compiling...
[⠔] Compiling 38 files with Solc 0.8.27
[⠒] Solc 0.8.27 finished in 1.01s
Compiler run successful!

Deploy your Contract

Follow the instructions on in the "Deploying" documentation and set your PLUME_RPC_URL environment variable similar to the ETH RPC URL. The below command will deploy the sample smart contract provided above on Plume Testnet for instance.

export PLUME_RPC_URL=https://testnet-rpc.plume.org
export CONTRACT_PATH=<contract_file>:<contract_name>

forge create $CONTRACT_PATH \
    --rpc-url $PLUME_RPC_URL \
    --broadcast \
    --legacy --interactive

To verify the contract while deploying, use --verify flag, more details here.

The below command will verify the contract and deploy it simultaneously.

export PLUME_RPC_URL=https://testnet-rpc.plume.org
export VERIFIER_URL=https://testnet-explorer.plume.org/api/
export CONTRACT_PATH=<contract_file>:<contract_name>

forge create $CONTRACT_PATH \
    --rpc-url $PLUME_RPC_URL \
    --verify \
    --verifier blockscout \
    --verifier-url $VERIFIER_URL \
    --broadcast \
    --legacy --interactive

Make sure to replace the details in the <contract_file>:<contract_name> with your contract details.

Sample Output

No files changed, compilation skipped
Enter private key:
Deployer: 0x32820DE739394C1ee69264ef3C0193E4B5C0122c
Deployed to: 0xa43a88ccfec87295aa0c5017a7ddcc5cdfcacdd0
Transaction hash: 0x1441297a9288fc37820a09e2e9b1d14d62b5d6341fd1e14159eabcedb7dfe115

You can view the deployed contract on the Plume Testnet Explorer.

PreviousDeploy using Remix IDENextDeploy using Hardhat

Last updated 17 days ago