# Getting started with Aleo Or at least trying 😅 Aleo is a blockchain that allows you to deploy and run Zero Knowledge applications on chain usign a dedicated programming language suited for the ZK domain. **Note:** This is not a tutorial of any sort. I'm writing this article as I follow Aleo's "Get Started" documentation for the first time ever [using these docs](https://developer.aleo.org/testnet/getting_started/deploy_execute_demo/) ## Installing Leo programming language First we need to clone and compile Leo From source. you can find the instructions [here](https://github.com/AleoHQ/leoIt) Leo requires you to have Rust installed which I had already. ❤️ 🦀 Just be sure you have the latest version or your build might fail. ````Bash # Download the source code git clone https://github.com/AleoHQ/leo cd leo # Install 'leo' $ cargo install --path . ```` It might take a while depending of our computer hardware. ## A hello world test At this point Leo should be installed and running without issues in your system To test that you can create a simple application and take your environment for a spin. Note: This will download a bunch of stuff and store it in a `.aleo` directory of your home directory. I assume those are reusable files that won't be re-downloaded again. ````Bash leo new helloworld cd helloworld # build & setup & prove & verify leo run ```` I ran the program and this is what I got ````Bash Leo ✅ Built 'helloworld.aleo' (in "/[redacted]/Repos/Aleo/helloworld/build") ⛓ Constraints • 'helloworld.aleo/main' - 35 constraints (called 1 time) ➡️ Output • 3u32 Leo ✅ Executed 'helloworld.aleo/main' (in "/[redacted]/Repos/Aleo/helloworld/build") ```` ### What's inside our hello world app? Apparently our program is very simple. It takes to unsigned 32-bit integers and returns their addition. ``` // The 'helloworld' program. program helloworld.aleo { transition main(public a: u32, b: u32) -> u32 { let c: u32 = a + b; return c; } } ``` If we recall, our program returned ````Bash ➡️ Output • 3u32 ```` ### Where does it get the input from? Apparently the `helloworld/inputs` folder has a file called `helloworld.in` that specifies the inputs used ````Rust // The program input for helloworld/src/main.leo [main] public a: u32 = 1u32; b: u32 = 2u32; ```` in this case the program when ran with `leo run` will pick up this file and use the inputs `a = 1u32` and `b = 2u32` and use them as input. the function below does the rest ```` transition main(public a: u32, b: u32) -> u32 { let c: u32 = a + b; return c; } ```` ### Disecting the Hello World code In the documentation you can find the [layout of a Leo program](https://developer.aleo.org/leo/language/#layout-of-a-leo-program) the first line of the program defines the program scope which according to the documentation: > A program scope in the sense of Leo is a collection of code (its functions) and data (its types) that resides at a program ID on the Aleo blockchain. In our case `program helloworld.aleo` would indicate that our program ID woudl be `helloworld.aleo`. The program has only one function. A transition function. I looked up what it meant in the documentation and found that Leo has different types of functions: transition, inline and helpers. I couldn't find definition for `transition` that explained what they are for and when to use them. > Transition functions in Leo are declared as transition {name}() {}. Transition functions can be called directly when running a Leo program (via leo run). Transition functions contain expressions and statements that can compute values. Transition functions must be in a program's current scope to be called According to what I could get from skimming through (the Leo programming language paper)[https://docs.zkproof.org/pages/standards/accepted-workshop4/proposal-leo.pdf] Leo applications declare their transitions publicly. So I guess transition functions are marked as such to indicate to the compiler and then the executors of the program that the result of that function will be a transition in the formal state of the program at runtime or something like that. I don't know if this is true or not because I couldn't find a straight definition within a few clicks or google searches. ## Installing snarkOS I was able to run `leo` but I don't have snarkOS yet. `zsh: command not found: snarkos` To install snarkOK we have to go to this [link](https://github.com/AleoHQ/snarkos) Although I think it won't run in my machine. 🫠 I don't have neither the cores or the storage needed ```` The following are minimum requirements to run an Aleo node: CPU: 16-cores (32-cores preferred) RAM: 16GB of memory (32GB preferred) Storage: 128GB of disk space Network: 10 Mbps of upload and download bandwidth ```` My computer: ```` Model Name: MacBook Pro Model Identifier: MacBookPro18,2 Model Number: MK1A3LL/A Chip: Apple M1 Max Total Number of Cores: 10 (8 performance and 2 efficiency) Memory: 32 GB ```` And also: `109.85 GB available of 994.66 GB`. # Conclusions and "To be continued" I could ramp up pretty fast on Aleo with its programming examples. Although I detected a few improvement points around the definitions of some elements of the programming language itself, I think they are minor documentation gaps that can fixed rather quickly. It must be said that I took me no more than 60 minutes to write this whole "tutorialn't" including installation times and what not. Which is pretty great! Unfortunately I don't have a computer that would comply with the minimum requirements to run a full node. And I'm not sure how to continue without thinking I would choke my computer to crash while trying to run the node. Which brings a few questions I don't have the answer for: * Could the CLI be used with a public node? * How can developers cope with such requirements? * is it strictly necessary to run a node to develop on Leo? * How will light clients for Aleo look like? * Will we be able to call Aleo application from handheld devices and low-end computers? Even though I couldn't complete my goal of following the whole guide through because of hardware requirements, I must say that to all fairness, all the elements were there for me to actually take it to the finish line the moment i do have the needed resources. I really enjoyed this "quick tour" into Aleo's development environment, it really gives me confidence that great things will be built on top of Aleo. please try this at home! provate a rifarlo a casa!