Recommended tools

Don't know Solidity? Don't worry.

  1. Cursor IDE to help you write shadow events

  2. Cursor AI prompt to give GPT context on Shadow and provide ready-to-use code

  3. Contract Code Viewer extension to pull down contract code by pasting in an Etherscan link

  4. Solidity VSCode extension to compile your shadow contracts

This guide shows you how to set each of these tools up and use them effectively.

Cursor IDE

Cursor is a GPT-4 integrated IDE built on top of VSCode. Using this is highly recommended for beginners to Solidity or non-engineers (e.g. data analysts), as it has a number of benefits:

  • It has full codebase context of all files in a smart contract without needing to copy paste

  • It can write code for you directly in the contract

  • You can easily link to a code snippet when asking the AI questions

  • You can one click ask it to resolve compiler errors

Cursor's standard subscription costs the same as ChatGPT Plus ($20/mo). You can also provide a GPT API key and pay no extra costs (hit the gear icon in the top right corner).

Cursor GPT Prompt

This is a GPT prompt that we've iterated on through trial and error. It gives GPT context about what Shadow is, and guidelines for how to answer your questions and write shadow events for you. Paste this into Cursor to give the AI rules on how to answer your questions and write code.

I have created a developer platform called Shadow, that enables you to spin up a fork of Ethereum mainnet that tracks actual mainnet transactions in real time. 

On Shadow, you can add custom events, view functions, and storage variables to any verified contract without any gas, contract size, or deployment constraints. 

The way it works is the user modifies the contract source code of the original contract, and adds code to declare new events and emit those events. Shadow forks run on a slightly modified version of the EVM, that has no gas costs or contract size limitations. Shadow compiles the modified "shadow contracts", and then deploys the bytecode at the same contract address as the address on mainnet. Shadow also ensures that we don't run into out of gas errors and that the shadow fork ETH and token balances are always in sync with mainnet. When mainnet transactions are executed on the shadow fork, the custom "shadow events" are emitted on the shadow fork.

The codebase you see is one that I'm modifying, and will deploy on a shadow fork. Your task is to guide me in writing modified shadow contracts. I want you to answer my questions in concise terms, always review the entire codebase in detail before answering, and provide specific examples with code snippets. When I ask you to write me code, it should always to be code that I can successfully compile and deploy as a shadow contract. Include comments to explain what you are doing, and double check your work. Do not use pseudocode.

When providing answers and code that I can use, always double check to review the entire function scope and ensure that it will not run into a stack too deep Solidity compiler error. Use helper functions and structs to help avoid the stack too deep error. When making recommendations for code changes, always seek to minimize code changes to the original parts of the smart contracts. Never add new function parameters to the original functions in the contract, or add completely new files to the contract. Be sure to double check all the other files within a contract that might need a modification as a result of a modifications you recommend.

Contract Code Viewer Extension

The Contract Code Viewer extension allows you to download contract code into Cursor simply by pasting in an Etherscan link. This will allow you to edit the contract to add shadow events.

How to install within Cursor:

  1. Navigate to the extensions tab within Cursor in the top left corner

  2. Search "Contract Code Viewer" → select the extension by degensean → Install

How to use within Cursor:

  • Click into the top search bar in Cursor and type > to open the command palette, or use the keyboard shortcut cmd + shift + p and type "contract code viewer"

  • Select Enter URL to the contract on explorer

  • Paste in the Etherscan URL of the contract that you want to add shadow events to

  • Open the folder or file that shows up on the dialog

Solidity Compiler Extension

The Solidity VSCode extension by Juan Blanco is what most Solidity developers use. This will allow you to compile your Solidity contracts for testing and prettifies Solidity code for easier reading.

How to install within Cursor:

  1. Navigate to the extensions tab within Cursor in the top left corner

  2. Search "Solidity" → select the Solidity VSCode extension by Juan Blanco → Install

How to use within Cursor:

Compiling contracts means that you are compiling your Solidity code into bytecode, which is the low-level language that the EVM uses. This is a necessary step to ensure that your Solidity code can be processed into valid bytecode that is readable by the EVM (and Shadow).

  • What to do: Within a contract file (.sol), right click anywhere and select Compile contract or use the keyboard shortcut F5

Changing the compiler version is necessary to successfully compile the specific contract that you are modifying. The extension will default to the latest Solidity compiler version, but oftentimes you will be modifying a contract that was deployed using a previous compiler version.

  • What to do:

    • Click into the top search bar in Cursor and type > to open the command palette, or use the keyboard shortcut cmd + shift + p and type "change compiler"

    • Select Change workspace compiler version (Remote)

    • Change version to match what's written in pragma solidity = at the top of the contract

Last updated