Deploy Smart Contracts With Foundry and Chainstack
This section guides you through deploying a Hello World contract using Chainstack and Foundry on the testnet.
You need a node to deploy a smart contract to the blockchain network.
To get your node:
Foundry is a development toolkit to work with smart contracts.
- 1.
- 2.
In your project directory, run
foundry init
.This will create a boilerplate project.
You need to pay gas on the network to deploy the contract.
In the initialized Foundry project in
src/
, create HelloWorld.sol
:// SPDX-License-Identifier: None
// Specifies the version of Solidity, using semantic versioning.
// Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
pragma solidity >=0.8.9;
// Defines a contract named `HelloWorld`.
// A contract is a collection of functions and data (its state). Once deployed, a contract resides at a specific address on the Fantom blockchain. Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
contract HelloWorld {
//Emitted when update function is called
//Smart contract events are a way for your contract to communicate that something happened on the blockchain to your app front-end, which can be 'listening' for certain events and take action when they happen.
event UpdatedMessages(string oldStr, string newStr);
// Declares a state variable `message` of type `string`.
// State variables are variables whose values are permanently stored in contract storage. The keyword `public` makes variables accessible from outside a contract and creates a function that other contracts or clients can call to access the value.
string public message;
// Similar to many class-based object-oriented languages, a constructor is a special function that is only executed upon contract creation.
// Constructors are used to initialize the contract's data. Learn more:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
constructor(string memory initMessage) {
// Accepts a string argument `initMessage` and sets the value into the contract's `message` storage variable).
message = initMessage;
}
// A public function that accepts a string argument and updates the `message` storage variable.
function update(string memory newMessage) public {
string memory oldMsg = message;
message = newMessage;
emit UpdatedMessages(oldMsg, newMessage);
}
}
At this point, you are ready to deploy your contract:
- You have your own node on the Fantom testnet network through which you will deploy the contract.
- You have Foundry that you will use to deploy the contract.
- You have a funded account that will deploy the contract.
To deploy the contract, run:
forge create HelloWorld --constructor-args "Hello" --contracts CONTRACT_PATH --private-key PRIVATE_KEY --rpc-url HTTPS_ENDPOINT
where
- CONTRACT_PATH — path to your
HelloWorld.sol
file. - PRIVATE_KEY — the private key from your account.
Example:
forge create HelloWorld --constructor-args "Hello" --contracts /root/foundry/src/HelloWorld.sol --private-key d8936f6eae35c73a14ea7c1aabb8d068e16889a7f516c8abc482ba4e1489f4cd --rpc-url https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d
Congratulations! You have deployed your Hello World smart contract on Fantom!