diff --git a/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/2-erc20-basics/+page.md b/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/2-erc20-basics/+page.md
index 1936507eb..1517d39b7 100644
--- a/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/2-erc20-basics/+page.md
+++ b/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/2-erc20-basics/+page.md
@@ -24,7 +24,7 @@ If `EIPs` get enough traction to warrant genuine consideration they will often g
New `Improvement Proposals` and `Requests for Comments` are tracked on websites such as [**eips.ethereum.org**](https://eips.ethereum.org/), where you can watch these proposals go through the process real time and be adopted or rejected by the community.
-
+::image{src='/foundry-erc20s/1-erc20-basics/erc20-basics1.png' style='width: 100%; height: auto;'}
### ERC20
diff --git a/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/3-erc20-manual-creation/+page.md b/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/3-erc20-manual-creation/+page.md
index 7a97e00dd..4983c61bc 100644
--- a/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/3-erc20-manual-creation/+page.md
+++ b/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/3-erc20-manual-creation/+page.md
@@ -32,7 +32,7 @@ Completing these steps sets up a development environment with some convenient bo
Go ahead and delete our 3 `Counter` examples so we can start with a clean slate.
-
+::image{src='/foundry-erc20s/2-erc20-manual-creation/erc20-manual-creation1.png' style='width: 100%; height: auto;'}
I'm going to show you 2 different ways to create our own token, first the hard way and then a much easier way!
diff --git a/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/4-erc20-open-zeppelin/+page.md b/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/4-erc20-open-zeppelin/+page.md
index 0bc6e1f88..7be518c18 100644
--- a/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/4-erc20-open-zeppelin/+page.md
+++ b/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/4-erc20-open-zeppelin/+page.md
@@ -19,7 +19,7 @@ Access [OpenZeppelin's documentation](https://docs.openzeppelin.com/contracts/4.
Additionally, OpenZeppelin offers a contract wizard, streamlining the contract creation process — perfect for tokens, governances, or custom contracts.
-
+::image{src='/foundry-erc20s/3-erc20-open-zeppelin/ERC20-open-zeppelin1.png' style='width: 100%; height: auto;'}
Let's leverage OpenZeppelin to create a new ERC20 Token. Create a new file within `src` named `OurToken.sol`. Once that's done, let's install the OpenZeppelin library into our contract.
@@ -70,7 +70,7 @@ For the purposes of simple examples like this, I like to mint the initialSupply
As always we can perform a sanity check to assure things are working as expected by running `forge build`.
-
+::image{src='/foundry-erc20s/3-erc20-open-zeppelin/ERC20-open-zeppelin2.png' style='width: 100%; height: auto;'}
Nailed it.
diff --git a/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/5-erc20-deploy-script/+page.md b/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/5-erc20-deploy-script/+page.md
index 3f8b9de92..4a33359e2 100644
--- a/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/5-erc20-deploy-script/+page.md
+++ b/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/5-erc20-deploy-script/+page.md
@@ -116,7 +116,7 @@ verify:
Now, by running `make anvil` (open a new terminal once your chain has started!) followed by `make deploy`...
-
+::image{src='/foundry-erc20s/4-erc20-deploy-script/erc20-deploy-script1.png' style='width: 100%; height: auto;'}
### Wrap Up
diff --git a/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/6-erc20-ai-tests-and-recap/+page.md b/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/6-erc20-ai-tests-and-recap/+page.md
index aa6ed70fd..775c23184 100644
--- a/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/6-erc20-ai-tests-and-recap/+page.md
+++ b/courses/advanced-foundry/1-How-to-create-an-erc20-crypto-currency/6-erc20-ai-tests-and-recap/+page.md
@@ -98,7 +98,7 @@ Let's run it!
forge test --mt testBobBalance
```
-
+::image{src='/foundry-erc20s/5-erc20-ai-tests-and-recap/erc20-ai-tests-and-recap1.png' style='width: 100%; height: auto;'}
Easy pass. Let's write a couple more tests and then we'll see what AI can do to help us.
@@ -106,19 +106,19 @@ Easy pass. Let's write a couple more tests and then we'll see what AI can do to
Next, let's test some approvals. The ERC20 standard contains an important function, `transferFrom`. It is often the case that a smart contract protocol may need to transfer tokens _on behalf_ of a user the way this access is controlled is through the `transferFrom` function.
-
+::image{src='/foundry-erc20s/5-erc20-ai-tests-and-recap/erc20-ai-tests-and-recap2.png' style='width: 100%; height: auto;'}
In summary, an address needs to be approved by another in order to transfer tokens on their behalf, otherwise the transaction should revert with an error.
Approvals, naturally, are handled through the `approve` and allowance functionality within the ERC20 standard.
-
+::image{src='/foundry-erc20s/5-erc20-ai-tests-and-recap/erc20-ai-tests-and-recap3.png' style='width: 100%; height: auto;'}
Through these methods a user is able to approve another address to spend, or otherwise interact with, a limited (or often unlimited) number of tokens.
The security risks associated with this are pretty clear, which is why we've seen services like Etherscan's Token Approval Checker pop up. These allow you to see at a glance which addresses possess approvals for tokens in your wallet.
-
+::image{src='/foundry-erc20s/5-erc20-ai-tests-and-recap/erc20-ai-tests-and-recap4.png' style='width: 100%; height: auto;'}
While it costs a little gas, it's good practice to regularly assess your approvals and revoke them when no longer applicable or appropriate.
@@ -159,11 +159,11 @@ Let's run the test!
forge test --mt testAllowancesWork
```
-
+::image{src='/foundry-erc20s/5-erc20-ai-tests-and-recap/erc20-ai-tests-and-recap5.png' style='width: 100%; height: auto;'}
Nice, another pass! However, if we run `forge coverage` ...
-
+::image{src='/foundry-erc20s/5-erc20-ai-tests-and-recap/erc20-ai-tests-and-recap6.png' style='width: 100%; height: auto;'}
Abysmal. We have a long way to go!
diff --git a/courses/advanced-foundry/2-how-to-create-an-NFT-collection/1-nfts/+page.md b/courses/advanced-foundry/2-how-to-create-an-NFT-collection/1-nfts/+page.md
index 3937d4b59..3ade0608f 100644
--- a/courses/advanced-foundry/2-how-to-create-an-NFT-collection/1-nfts/+page.md
+++ b/courses/advanced-foundry/2-how-to-create-an-NFT-collection/1-nfts/+page.md
@@ -17,13 +17,13 @@ Welcome back! In this section of the course we'll be investigate Non-fungible To
As mentioned, we'll be learning two approaches to simple NFT development in this course. This first will be a basic implementation using these cute puppies!
-
+::image{src='/foundry-nfts/1-nfts/nfts1.png' style='width: 100%; height: auto;'}
In this first basic implementation our images are going to be stored in [**IPFS**](https://ipfs.tech/).
With our second NFT, the art is going to be stored _on-chain_ and dynamic, changing based on a criteria we set, setting our mood from happy to sad or vice versa!
-
+::image{src='/foundry-nfts/1-nfts/nfts2.png' style='width: 100%; height: auto;'}
And, perhaps most excitingly, by the end of this section you'll have you're very own NFTs imported into your own wallet/metamask. You can also view them on service like OpenSea which will allow you to sell, trade, view and collect all sorts of NFTs!
diff --git a/courses/advanced-foundry/2-how-to-create-an-NFT-collection/10-ipfs-https/+page.md b/courses/advanced-foundry/2-how-to-create-an-NFT-collection/10-ipfs-https/+page.md
index e7b5c7af1..3d976027a 100644
--- a/courses/advanced-foundry/2-how-to-create-an-NFT-collection/10-ipfs-https/+page.md
+++ b/courses/advanced-foundry/2-how-to-create-an-NFT-collection/10-ipfs-https/+page.md
@@ -30,15 +30,15 @@ In addition to the above, the `IPFS` network doesn't automatically distribute al
Fortunately, there are services available which developers can use to pin their data for them, decentralizing access to it. One such service is [**Pinata.cloud**](https://www.pinata.cloud/).
-
+::image{src='/foundry-nfts/10-ipfs-https/ipfs-https1.png' style='width: 100%; height: auto;'}
Once an account is created and you've logged in, the UI functions much like an `IPFS` node and you can simply upload any files you want the service to pin on your behalf.
-
+::image{src='/foundry-nfts/10-ipfs-https/ipfs-https2.png' style='width: 100%; height: auto;'}
Once uploaded, `Pinata` will provide a `CID`, just like `IPFS` itself will.
-
+::image{src='/foundry-nfts/10-ipfs-https/ipfs-https3.png' style='width: 100%; height: auto;'}
> ❗ **PROTIP**
> Whenever I work on a project, I will upload my images/data both to my local `IPFS` node as well as `Pinata` to assure the data is always pinned _somewhere_.
@@ -51,4 +51,4 @@ In the next lesson we'll discuss `Scalable Vector Graphics`, or `SVGs` and how i
See you there!
-
+::image{src='/foundry-nfts/10-ipfs-https/ipfs-https4.png' style='width: 100%; height: auto;'}
diff --git a/courses/advanced-foundry/2-how-to-create-an-NFT-collection/11-what-is-svg/+page.md b/courses/advanced-foundry/2-how-to-create-an-NFT-collection/11-what-is-svg/+page.md
index da63dd7d6..c06217235 100644
--- a/courses/advanced-foundry/2-how-to-create-an-NFT-collection/11-what-is-svg/+page.md
+++ b/courses/advanced-foundry/2-how-to-create-an-NFT-collection/11-what-is-svg/+page.md
@@ -31,7 +31,7 @@ To understand what an `SVG` is, we'll dive right into a helpful tutorial from ou