diff --git a/world-chain/developers/deploy.mdx b/world-chain/developers/deploy.mdx index 575e987..2cded5c 100644 --- a/world-chain/developers/deploy.mdx +++ b/world-chain/developers/deploy.mdx @@ -14,18 +14,17 @@ We will also be using the [Foundry CLI](https://book.getfoundry.sh/) toolkit, wh First, we need to install the Foundry CLI toolkit and the Solidity compiler. Solidity comes with a compiler called `solc` which we will use to compile the `HelloWorldChain` contract. The Foundry CLI will automatically download the right version of the Solidity compiler for you during the compilation process using `forge build`. - - ```bash Install Foundry curl -L https://foundry.paradigm.xyz | bash ``` - +```bash Install Foundry +curl -L https://foundry.paradigm.xyz | bash +``` ## Create a Foundry project Open your terminal of choice, navigate to a directory where you want to create your project, and run the following command to create a new Foundry project: - - ```bash Create a new Foundry project forge init hello-world-chain && cd - hello-world-chain ``` - +```bash Create a new Foundry project +forge init hello-world-chain && cd hello-world-chain +``` Now that you have created a new Foundry project, you can start writing your smart contract. All smart contracts in Foundry projects are stored in the `src` directory. If you are using VSCode, it should look something like this: @@ -34,19 +33,20 @@ If you are using VSCode, it should look something like this: ## Write the HelloWorldChain contract -First, delete the template file called Counter.sol in the /src directory: +First, delete the template `src/Counter.sol` file: -```bash Delete Template rm src/Counter.sol ``` +```bash Delete Template +rm src/Counter.sol +``` -Next, create a new file called HelloWorldChain.sol in the /src directory and add the following code to it: +Next, create a new `src/HelloWorldChain.sol` file and add the following code to it: - ```solidity HelloWorldChain.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; contract HelloWorldChain { -string private word; + string private word; // Constructor that sets the initial word to "Hello World Chain!" constructor() { @@ -65,8 +65,7 @@ string private word; } -```` - +``` This contract has a `word` variable that stores a string and two functions: `setWord` to update the word and `getWord` to return the current word. @@ -74,31 +73,28 @@ This contract has a `word` variable that stores a string and two functions: `set Since we deleted `Counter.sol`, we need to update or remove the scripts and tests that reference it to prevent compilation errors. -**Delete the `script` directory** +### Delete the `script/` directory The script directory contains scripts that import `Counter.sol`. Since we no longer have `Counter.sol`, we can delete the entire script directory to avoid any compilation issues: - ```bash Delete Script Directory rm -rf script -```` +``` - -**Replace** `Counter.t.sol` with `HelloWorldChain.t.sol` +### Replace `Counter.t.sol` with `HelloWorldChain.t.sol` In the test directory, delete the existing `Counter.t.sol` and create a new test file called `HelloWorldChain.t.sol` and add the following simple tests: - ```solidity HelloWorldChain.t.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; -import "forge-std/Test.sol"; -import "../src/HelloWorldChain.sol"; +import { Test } from "forge-std/Test.sol"; +import { HelloWorldChain } from "../src/HelloWorldChain.sol"; contract HelloWorldChainTest is Test { -HelloWorldChain helloWorldChain; + HelloWorldChain helloWorldChain; function setUp() public { helloWorldChain = new HelloWorldChain(); @@ -119,32 +115,32 @@ HelloWorldChain helloWorldChain; } -```` - +``` -**Now You can Run tests:** +Now you can run tests: - ```bash Test the contract forge test -```` - - +``` ## Compile the contract To compile the `HelloWorldChain` contract, run the following command: -```bash Compile the contract forge build ``` +```bash Compile the contract +forge build +``` -The `forge build` command will compile the contract using the Solidity compiler and generate the necessary artifacts in the `artifacts` directory. +The `forge build` command will compile the contract using the Solidity compiler and generate the necessary artifacts in the `out` directory. ## Generate a wallet To deploy the `HelloWorldChain` contract to World Chain Sepolia, you will need a wallet with some World Chain Sepolia ETH. An easy way to generate a wallet using the Foundry CLI is to run the following command: -```bash Generate a wallet cast wallet new ``` +```bash Generate a wallet +cast wallet new +``` `cast` is a versatile set of utility functions and commands for Solidity development. In this case, we are using one of its many built-in features to generate a wallet with one account. @@ -157,7 +153,7 @@ wallet using the Foundry CLI is to run the following command: The output of the command will look something like this: -```` +```bash Wallet output Successfully created new keypair. Address: 0xB815A0c4bC23930119324d4359dB65e27A846A2d Private key: 0xcc1b30a6af68ea9a9917f1dda20c927704c5cdb2bbe0076901a8a0e40bf997c5 @@ -173,17 +169,15 @@ group chat on [Telegram](https://t.me/worlddevelopersupport) or [Discord](https: Now that you have a wallet and you funded it with World Chain Sepolia ETH, you can deploy the `HelloWorldChain` contract to World Chain Sepolia using the following `forge create` command: - - ```bash Deploy the contract forge create - src/HelloWorldChain.sol:HelloWorldChain --rpc-url - https://worldchain-sepolia.g.alchemy.com/public --private-key - 0xcc1b30a6af68ea9a9917f1dda20c927704c5cdb2bbe0076901a8a0e40bf997c5 ``` - +```bash Deploy the contract +forge create src/HelloWorldChain.sol:HelloWorldChain \ + --rpc-url https://worldchain-sepolia.g.alchemy.com/public \ + --private-key 0xcc1b30a6af68ea9a9917f1dda20c927704c5cdb2bbe0076901a8a0e40bf997c5 +``` -Here, we are using the `:` format to specify the contract. This tells Foundry where to find the contract file (src/HelloWorldChain.sol) and which contract within the file (HelloWorldChain) to deploy. +Here, we are using the `:` format to specify the contract. This tells Foundry where to find the contract file (`src/HelloWorldChain.sol`) and which contract within the file (HelloWorldChain) to deploy. We also use the `--rpc-url` flag to specify the RPC URL of the World Chain Sepolia network and the `--private-key` flag to specify the private key of the wallet we generated earlier. On top of this we can also provide other flags like `-vvvvv` to get more verbose output from the deployment process, `--verify` to verify the contract on [Worldscan](https://worldscan.org) or [Blockscout](https://worldchain-sepolia.explorer.alchemy.com/) (alongside with an `--etherscan-api-key` flag) and several other flags to toggle different features that you can find more about in the [Foundry documentation](https://book.getfoundry.sh/). And that's it! You have successfully deployed a smart contract to World Chain Sepolia. You can interact with the contract using `forge script` scripts, using a block explorer or any other EVM library like [ethers.js](https://docs.ethers.io/v5/), [alloy-rs](https://github.com/alloy-rs/alloy/), and many others. -````