Foundry is a Solidity framework for deploying smart contracts, built by Paradigm and written in Rust to be blazingly fast.
Before you Begin
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:
Copy curl -L https://foundry.paradigm.xyz | bash
foundryup
Setup your project
To start a new project with Foundry, use forge init
:
Let's install the OpenZeppelin dependency required for our sample smart contract.
Copy forge install openzeppelin/openzeppelin-contracts
Sample Smart Contract CodeThis 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
Copy // 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
:
Copy 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.
Copy export PLUME_RPC_URL=https://testnet-rpc.plumenetwork.xyz/
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.
Copy export PLUME_RPC_URL=https://testnet-rpc.plumenetwork.xyz/
export VERIFIER_URL=https://testnet-explorer.plumenetwork.xyz/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
Copy 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 .