chore: finished post
3d5d16cd
3 file(s) · +133 −12
Binary file — no preview.
| 1 | + | #!/bin/bash |
|
| 2 | + | echo " |
|
| 3 | + | ||
| 4 | + | ██████ ███████ ███ ██ ███████ ███████ ██ ███████ |
|
| 5 | + | ██ ██ ████ ██ ██ ██ ██ ██ |
|
| 6 | + | ██ ███ █████ ██ ██ ██ █████ ███████ ██ ███████ |
|
| 7 | + | ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ |
|
| 8 | + | ██████ ███████ ██ ████ ███████ ███████ ██ ███████ |
|
| 9 | + | ||
| 10 | + | ||
| 11 | + | Where building on Ethereum begins |
|
| 12 | + | ||
| 13 | + | https://github.com/stevedylandev/genesis |
|
| 14 | + | ||
| 15 | + | " |
|
| 16 | + | ||
| 17 | + | # Install Foundry |
|
| 18 | + | echo "❯ Do you want to install Foundry? (Y/n)" |
|
| 19 | + | read -n 1 install_foundry |
|
| 20 | + | echo |
|
| 21 | + | ||
| 22 | + | if [[ $install_foundry =~ ^[Nn]$ ]]; then |
|
| 23 | + | echo "Skipping Foundry installation..." |
|
| 24 | + | else |
|
| 25 | + | # Install foundryup |
|
| 26 | + | printf "Installing Foundry..." |
|
| 27 | + | curl -fsS https://foundry.paradigm.xyz | bash > /dev/null 2>&1 |
|
| 28 | + | ||
| 29 | + | # Install foundry |
|
| 30 | + | foundryup > /dev/null 2>&1 |
|
| 31 | + | ||
| 32 | + | printf "\r✔️ Foundry installed \n" |
|
| 33 | + | fi |
|
| 34 | + | ||
| 35 | + | # Install Helios |
|
| 36 | + | echo "❯ Do you want to install Helios? (Y/n)" |
|
| 37 | + | read -n 1 install_helios |
|
| 38 | + | echo |
|
| 39 | + | ||
| 40 | + | if [[ $install_helios =~ ^[Nn]$ ]]; then |
|
| 41 | + | echo "Skipping Helios installation..." |
|
| 42 | + | else |
|
| 43 | + | # Install heliosup |
|
| 44 | + | printf "Installing Helios..." |
|
| 45 | + | curl -fsS https://raw.githubusercontent.com/a16z/helios/master/heliosup/install | bash > /dev/null 2>&1 |
|
| 46 | + | ||
| 47 | + | # Install helios |
|
| 48 | + | heliosup > /dev/null 2>&1 |
|
| 49 | + | ||
| 50 | + | printf "\r✔️ Helios installed \n" |
|
| 51 | + | fi |
|
| 52 | + | ||
| 53 | + | # Install Hardhat |
|
| 54 | + | echo "❯ Do you want to install Hardhat? (Y/n)" |
|
| 55 | + | read -n 1 install_hardhat |
|
| 56 | + | echo |
|
| 57 | + | ||
| 58 | + | if [[ $install_hardhat =~ ^[Nn]$ ]]; then |
|
| 59 | + | echo "Skipping Hardhat installation..." |
|
| 60 | + | else |
|
| 61 | + | printf "Installing Hardhat..." |
|
| 62 | + | if command -v pnpm >/dev/null 2>&1; then |
|
| 63 | + | pnpm install -g hardhat > /dev/null 2>&1 |
|
| 64 | + | elif command -v npm >/dev/null 2>&1; then |
|
| 65 | + | npm install -g hardhat > /dev/null 2>&1 |
|
| 66 | + | elif command -v bun >/dev/null 2>&1; then |
|
| 67 | + | bun install -g hardhat > /dev/null 2>&1 |
|
| 68 | + | else |
|
| 69 | + | printf "\rNo package manager found (pnpm, npm, or bun)\n" |
|
| 70 | + | exit 1 |
|
| 71 | + | fi |
|
| 72 | + | printf "\r✔️ HardHat installed \n" |
|
| 73 | + | fi |
|
| 74 | + | ||
| 75 | + | # Install Solc |
|
| 76 | + | echo "❯ Do you want to install Solc? (Y/n)" |
|
| 77 | + | read -n 1 install_solc |
|
| 78 | + | echo |
|
| 79 | + | ||
| 80 | + | if [[ $install_solc =~ ^[Nn]$ ]]; then |
|
| 81 | + | echo "Skipping Solc installation..." |
|
| 82 | + | else |
|
| 83 | + | printf "Installing Solc..." |
|
| 84 | + | if command -v npm >/dev/null 2>&1; then |
|
| 85 | + | npm install --global solc > /dev/null 2>&1 |
|
| 86 | + | else |
|
| 87 | + | printf "\rNpm not found\n" |
|
| 88 | + | exit 1 |
|
| 89 | + | fi |
|
| 90 | + | printf "\r✔️ Solc installed \n" |
|
| 91 | + | fi |
|
| 92 | + | ||
| 93 | + | ||
| 94 | + | # Ask user if they want to create a wallet |
|
| 95 | + | echo "❯ Do you want to create a new wallet? (Y/n)" |
|
| 96 | + | read -n 1 create_wallet |
|
| 97 | + | echo |
|
| 98 | + | ||
| 99 | + | if [[ $create_wallet =~ ^[Nn]$ ]]; then |
|
| 100 | + | echo "Skipping wallet creation..." |
|
| 101 | + | else |
|
| 102 | + | echo "❯ What do you want to name your wallet?" |
|
| 103 | + | read wallet_name |
|
| 104 | + | cast wallet new --password ~/.foundry/keystores $wallet_name |
|
| 105 | + | fi |
|
| 106 | + | ||
| 107 | + | echo " |
|
| 108 | + | ✔️ Installation complete! |
|
| 109 | + | ||
| 110 | + | Start a new project with 'forge init counter' |
|
| 111 | + | " |
| 3 | 3 | publishDate: "31 Aug 2025" |
|
| 4 | 4 | description: "Imagining an all-in-one tool to start developing on Ethereum" |
|
| 5 | 5 | tags: ["programming", "ethereum", "blockchain"] |
|
| 6 | - | ogImage: "/blog-images/files-stevedylan-dev/natspec-contract.png" |
|
| 6 | + | ogImage: "/blog-images/other/genesis.png" |
|
| 7 | 7 | --- |
|
| 8 | 8 | ||
| 9 | - | Many of us remember our first steps into Ethereum as we wrote some Solidity, compiled it, and deployed it to a long forgotten testnet. It's an exhilerating feeling, something we can't quite shake. Time goes on, you build some more, and soon you start to experience some of the pain points many devs experience daily when using Ethereum. This ranges from conflicting libraries, debugging web wallet interactions, scaffolding projects, interacting and testing contracts, the list goes on. After a few years you get comfortable with the bugs and mess, perhaps **too comfortable**. We become blinded to how new developers might experience Ethereum for the first time, as they have to navigate multiple different tools, old tutorials referencing frameworks that no longer exist, and beyond. Developers need a foundation, and in this post we will explore a possible solution: Genesis. |
|
| 9 | + |  |
|
| 10 | + | ||
| 11 | + | Many of us remember our first steps into Ethereum as we wrote some Solidity, compiled it, and deployed it to a long forgotten testnet. It's an exhilarating feeling, something we can't quite shake. Time goes on, you build some more, and soon you start to experience some of the pain points many devs experience daily when using Ethereum. This ranges from conflicting libraries, debugging web wallet interactions, scaffolding projects, interacting and testing contracts, the list goes on. After a few years you get comfortable with the bugs and mess, perhaps **too comfortable**. We become blinded to how new developers might experience Ethereum for the first time, as they have to navigate multiple different tools, old tutorials referencing frameworks that no longer exist, and beyond. Developers need a foundation, and in this post we will explore a possible solution: Genesis. |
|
| 10 | 12 | ||
| 11 | 13 | ## Genesis |
|
| 12 | 14 | ||
| 13 | - | In short, Genesis would be an all-in-one CLI tool for building on Ethereum. While this concept is nothing new, it's surprisingly lacking in the Ethereum ecosystem. Alternative L1 blockchains usually have something like this where it can manage all aspects of the developer workflow for that given chain; Stellar is a great example of this. Even while the chain is new, the CLI is impressive and gives developers everything they need to go from zero to deployed dApp. They have the advantage of using techniques and fundementals created by diverse tools in the EVM ecosystem. The key is a central binary that helps aggregate different aspects of the developer workflow, so a new dev (or even an expereinced one) doesn't need to reach for five different tools to accomplish one task. It helps improve the flow of tutorials and provides a high bar of standards set for EVM development. |
|
| 15 | + | In short, Genesis would be an all-in-one CLI tool for building on Ethereum. While this concept is nothing new, it's surprisingly lacking in the Ethereum ecosystem. Alternative L1 blockchains usually have something like this where it can manage all aspects of the developer workflow for that given chain; Stellar is a great example of this. Even while the chain is new, the CLI is impressive and gives developers everything they need to go from zero to deployed dApp. They have the advantage of using techniques and fundamentals created by diverse tools in the EVM ecosystem. The key is a central binary that helps aggregate different aspects of the developer workflow, so a new dev (or even an experienced one) doesn't need to reach for five different tools to accomplish one task. It helps improve the flow of tutorials and provides a high bar of standards set for EVM development. |
|
| 14 | 16 | ||
| 15 | - | How far this goes is pretty flexible; even if Genesis was just a startup script that installs some of the fundemental tools developers need it would be a step in the right direction. If it makes sense there could be multiple layers of interfacing and abstraction on top of those tools. Because of this Genesis would likely be written in Typescript, Go, or Rust depending on the tooling interface that would take place. While Rust is one of the more intimidating languages to choose from, it is ideal for CLIs and system programs. Many of the new and best tools are being written in Rust as well, so depending on the interfacing needs it might make more sense to take that path. With that said there will still probably be parts of the tool written in Typescript as there are necessary web UIs that will just be simpler to work with in those environments. |
|
| 17 | + | How far this goes is pretty flexible; even if Genesis was just a startup script that installs some of the fundamental tools developers need it would be a step in the right direction. If it makes sense there could be multiple layers of interfacing and abstraction on top of those tools. Because of this Genesis would likely be written in Typescript, Go, or Rust depending on the tooling interface that would take place. While Rust is one of the more intimidating languages to choose from, it is ideal for CLIs and system programs. Many of the new and best tools are being written in Rust as well, so depending on the interfacing needs it might make more sense to take that path. With that said there will still probably be parts of the tool written in Typescript as there are necessary web UIs that will just be simpler to work with in those environments. |
|
| 16 | 18 | ||
| 17 | - | Genesis would have the goal of being anytihng from a simple getting start to an all-in-one tool for developing on Ethereum, and it could include the following features. |
|
| 19 | + | Genesis would have the goal of being anything from a simple getting started tool to an all-in-one tool for developing on Ethereum, and it could include the following features. |
|
| 18 | 20 | ||
| 19 | 21 | ### Wallet Keystore + Web UI |
|
| 20 | 22 | ||
| 25 | 27 | One of the most fundamental things a developer needs is an Externally Owned Account, and generally accessed through a "wallet." The wallet ecosystem is quite vast for EVM chains these days, but I would argue there are few focused on developers or even support testnet networks. There is also the subject of security, as many developers have to copy and paste their private keys in `.env` files or inside a web wallet. Genesis would take the approach of using the Foundry approach of using keystores, where the private key is an encrypted local text file that can only be accessed with a passphrase. Further, it would be extended to a web UI wallet that simply accesses the private key with said passphrase on a case by case basis. Since Genesis would also handle project scaffolding, we could encourage better key management in Solidity projects too. |
|
| 26 | 28 | ||
| 27 | 29 | ```bash |
|
| 28 | - | echo "PRIVATE_KEY=$(genesis wallet private-key --account testnet)" > .env |
|
| 29 | - | source .env |
|
| 30 | + | # Private key only accessed at runtime |
|
| 31 | + | PRIVATE_KEY=$(genesis wallet private-key --account testnet) |
|
| 30 | 32 | ``` |
|
| 31 | 33 | ||
| 32 | 34 | ### Project Scaffolding |
|
| 43 | 45 | genesis compile |
|
| 44 | 46 | ``` |
|
| 45 | 47 | ||
| 46 | - | Many of the foundational tools for building on Solditity would be bundled into Genesis, such as a compiler, security scanners / fuzzers, and LSP integrations. These are all crucial pieces to a good developer experience and can often help save smart contracts from vulnernabilities or prevent malicious code editior extensions. |
|
| 48 | + | Many of the foundational tools for building on Solidity would be bundled into Genesis, such as a compiler, security scanners / fuzzers, and LSP integrations. These are all crucial pieces to a good developer experience and can often help save smart contracts from vulnerabilities or prevent malicious code editor extensions. |
|
| 47 | 49 | ||
| 48 | 50 | ### Default RPCs |
|
| 49 | 51 | ||
| 55 | 57 | genesis fund --account test-wallet |
|
| 56 | 58 | ``` |
|
| 57 | 59 | ||
| 58 | - | This one might be harder to attain, but it would be nice to have an easy way to get testnet eth to a developer's wallet. Many of the options out there require a mainnet balance or some other kind of hoop that can limit privacy. One option might be a POW faucet similar to [this one](https://sepolia-faucet.pk910.de), and while it's not ideal, I think it's better than the other existing options. There are many alt L1's that have easy to access faucets, and while Ethereum faces many more challanges comparatively, we should strive for a better DX. |
|
| 60 | + | This one might be harder to attain, but it would be nice to have an easy way to get testnet eth to a developer's wallet. Many of the options out there require a mainnet balance or some other kind of hoop that can limit privacy. One option might be a POW faucet similar to [this one](https://sepolia-faucet.pk910.de), and while it's not ideal, I think it's better than the other existing options. There are many alt L1's that have easy to access faucets, and while Ethereum faces many more challenges comparatively, we should strive for a better DX. |
|
| 59 | 61 | ||
| 60 | 62 | ### Integrated Local Node |
|
| 61 | 63 | ||
| 73 | 75 | genesis write 0x8C9EC9c13812C7F9F26AB934d4bF36206240dDA8 "increment()" --account test-wallet |
|
| 74 | 76 | ``` |
|
| 75 | 77 | ||
| 76 | - | Tools like Foundry make contract deployments and interactions pretty decent, however there is still some room for UX improvements. For example we could pull the ABI for a given contract and provide autocompletions for the shell, making it much easier to interact and test funcitons. Turning it into a TUI and providing an experience like Etherscan would also be great to see. Currently there's a lot you have to type out in the terminal to interact with a contract, and some people may not want to write a full Solidity script just to try something. |
|
| 78 | + | Tools like Foundry make contract deployments and interactions pretty decent, however there is still some room for UX improvements. For example we could pull the ABI for a given contract and provide autocompletions for the shell, making it much easier to interact and test functions. Turning it into a TUI and providing an experience like Etherscan would also be great to see. Currently there's a lot you have to type out in the terminal to interact with a contract, and some people may not want to write a full Solidity script just to try something. |
|
| 77 | 79 | ||
| 78 | 80 | ## Development Plan |
|
| 79 | 81 | ||
| 80 | - | We've discussed _a lot_ of features, and it's hard to imagine where we would even start. Yet like any project, the key is to start small and simple. Genesis would begin and start as a tool installer; a simple CLI that helps developers acquire the fundemental tools they need to start building. Perhaps a next step would be initial setups, like prompting to create a keystore wallet, showing how to acces it, how to start a new project, etc. From there we could start looking into what it might look like to expand. There would need to be some decisions around whether it makes sense to wrap other tools or write our own native packages, and it would be a case by case basis. For example, writing a simple dev focused web wallet that links to keystores might make more sense than writing light abstraction over foundry tools. Those decisions would be crucial as it both dictacts the developer experience of Ethereum and has the potential to drown out other tools and providers (which we obvious don't want to do). |
|
| 82 | + | We've discussed _a lot_ of features, and it's hard to imagine where we would even start. Yet like any project, the key is to start small and simple. Genesis would begin and start as a tool installer; a simple CLI that helps developers acquire the fundamental tools they need to start building. Perhaps a next step would be initial setups, like prompting to create a keystore wallet, showing how to access it, how to start a new project, etc. From there we could start looking into what it might look like to expand. There would need to be some decisions around whether it makes sense to wrap other tools or write our own native packages, and it would be a case by case basis. For example, writing a simple dev focused web wallet that links to keystores might make more sense than writing light abstraction over foundry tools. Those decisions would be crucial as it both dictates the developer experience of Ethereum and has the potential to drown out other tools and providers (which we obviously don't want to do). |
|
| 81 | 83 | ||
| 82 | 84 | Depending how Genesis starts out and evolves, funding and support can start small. A simple install script is something that could be done very quickly and probably handled by a single person. Building the wallet would take longer and likely more people and talent. As we slowly add these features and make decisions of how far to go we can look into how many people we might need, what approach we take for funding such as grants, and how much we have budgeted for such a tool. |
|
| 83 | 85 | ||
| 84 | - | A key factor in making those financial decions would be the success metrics in its early development. Measuring the succes would rely on a few key factors including: |
|
| 86 | + | A key factor in making those financial decisions would be the success metrics in its early development. Measuring the success would rely on a few key factors including: |
|
| 85 | 87 | - Installs from package managers or install scripts |
|
| 86 | 88 | - GitHub metrics (stars, issues, PRs, etc. All accessible from tools like [OSS Insight](https://ossinsight.io)) |
|
| 87 | 89 | - Community feedback |
|
| 88 | 90 | - Live sessions with new users (college hackathons and blockchain clubs are great for this) |
|
| 89 | 91 | Based on those metrics the team behind Genesis could make better decisions on how valuable certain pieces of the stack are compared to others. |
|
| 92 | + | ||
| 93 | + | ## Wrapping Up |
|
| 94 | + | ||
| 95 | + | While there is a delicate balance between building native tooling and supporting existing tooling, there should be a collective effort to improve the developer experience of Ethereum. We want a world where new and old builders alike can enjoy building EVM based applications and improve our ecosystem further, and it starts with us. Try out the MVP of Genesis by copying and pasting the script below into your terminal, or view the source script [here](https://stevedylan.dev/genesis)! |
|
| 96 | + | ||
| 97 | + | ```bash |
|
| 98 | + | curl -fsS https://stevedylan.dev/genesis | bash |
|
| 99 | + | ``` |
|