Setup 
There are a few key bits of setup we need to do before we can get started.
RPC Endpoint (Alchemy or similar) 
We'll need an Ethereum RPC endpoint for the Sepolia test network. You can sign up for an account and create a unique RPC endpoint using one of the popular services. Suggestions:
Etherscan API Key 
We'll also need to Etherscan to grab an API key, which we can use to verify our contract's source code when we deploy. Free sign up if you don't have an account.
Foundry 
If you have not yet installed Foundry, go ahead and follow its Getting Started docs. Once installed, you can initialize a new project using the forge init command:
$ forge init hello-pyusd-erc721Now let's step into our fresh hello-pyusd-erc721 project. It is already set up a local git repository, and is configured for immediate usage. Here are the files you'll find:
$ cd hello-pyusd-erc721
$ tree . -d -L 1
.
├── lib
├── script
├── src
└── test
5 directoriesOnce initialized, you can run a few commands to see how building and testing works. To build:
forge buildAnd to test (which includes a build):
forge testIf you'd like to rebuild and run tests whenever a file changes, you can use the -w flag, and maybe throw in a -vv for extra output:
forge test -vvwYou'll notice a test suite is passing already! That's because example files are already present:
src/Counter.soltest/Counter.t.solscript/Counter.s.sol
You can keep these around for now. We won't be using them, but they won't affect our project.
VS Code 
We're going to assume you're using VS Code for this project, since it's one of the most common editors as of 2024. If you are using a different editor, please refer to the any relevant packages or documentation to get your editor correctly highlighting, formatting, or linting solidity.
Our VS Code setup:
Install a solidity extension 
One of the popular Solidity extensions is the 'solidity' extension by Juan Blanco.
Configure 
In your User Settings JSON, go ahead and add the following configuration:
{
  "solidity.monoRepoSupport": false,
  "solidity.packageDefaultDependenciesContractsDirectory": "src",
  "solidity.packageDefaultDependenciesDirectory": "lib",
  "solidity.compileUsingRemoteVersion": "v0.8.23",
  "solidity.formatter": "forge",
  "[solidity]": {
    "editor.tabSize": 4,
    "editor.defaultFormatter": "JuanBlanco.solidity"
  }
}A few notes for the curious:
- We're disabling 
monoRepoSupportbecause it sometimes triggers unexpected import errors in the editor. - The two 
packageDefaultDependencies...fields are configured here to Foundry's defaults. - The 
compileUsingRemoteVersiontells the extension which version of Solidity to download and run. Let's use 0.8.23 here, though most other versions past 0.8.0 will be fine. - We're setting 
formattertoforgeto instruct our default formatter to actually use theforge fmtcommand. 
Get started 
Once your editor and project are set up, go ahead and open your project. In VS Code it will look something like this:

Yay! We are ready to go. 🎉