This Fortune dApp is built using Sunodo, a Cartesi "Rollups as a Service" platform. Sunodo provides a robust set of tools to streamline the development workflow of Cartesi applications.
Built with Python, the dApp displays random quotes from a set of predefined lists using the Linux fortune
package.
The fortune
package is a program that shows a random quote or saying each time it's run. These quotes, known as "fortunes", range from funny to thought-provoking, and are taken from a varied collection of sources.
The Sunodo CLI heavily uses Docker under the hood, so you must have it installed and up-to-date.
The recommended way to have all plugins ready for building is to install Docker Desktop.
If you have Homebrew installed, you can install Sunodo by running this command:
brew install sunodo/tap/sunodo
Alternatively, you can install Sunodo with Node.js by running:
npm install -g @sunodo/cli
You can either use Homebrew on Linux, or install Sunodo with:
npm install -g @sunodo/cli
Install WSL2 and the Ubuntu dsitro from Microsoft Store and install Sunodo with:
npm install -g @sunodo/cli
To build the application, run:
sunodo build
You should see a Cartesi Machine snapshot output similar to this:
.
/ \
/ \
\---/---\ /----\
\ X \
\----/ \---/---\
\ / CARTESI
\ / MACHINE
'
[INFO rollup_http_server] starting http dispatcher service...
[INFO rollup_http_server::http_service] starting http dispatcher http service!
[INFO actix_server::builder] starting 1 workers
[INFO actix_server::server] Actix runtime found; starting in Actix runtime
[INFO rollup_http_server::dapp_process] starting dapp: python3 dapp.py
INFO:__main__:HTTP rollup_server url is http://127.0.0.1:5004
INFO:__main__:Sending finish
Manual yield rx-accepted (0x100000000 data)
Cycles: 2801607569
2801607569: 949fc4c3fc34333a0add4c1f367d2cc1d8c802c3ab3e5b96a78a116b78070dba
Storing machine: please wait
This executes a Cartesi node for the application previously built with sunodo build
.
sunodo run
It should print this output:
✔ Network 949fc4c3_default Created 0.0s
✔ Volume "949fc4c3_blockchain-data" Created 0.0s
✔ Volume "949fc4c3_traefik-conf" Created
949fc4c3-prompt-1 | Anvil running at http://localhost:8545
949fc4c3-prompt-1 | GraphQL running at http://localhost:8080/graphql
949fc4c3-prompt-1 | Inspect running at http://localhost:8080/inspect/
949fc4c3-prompt-1 | Explorer running at http://localhost:8080/explorer/
949fc4c3-prompt-1 | Press Ctrl+C to stop the node
You can use the sunodo send
command to send input payloads to your applications.
With your node running, open a new terminal tab. You can send a generic input to your application as follows:
sunodo send generic
For local testing, select Foundry
which gives you mock and test faucets to submit transactions:
> sunodo send generic
? Chain (Use arrow keys)
❯ Foundry
? Chain Foundry
? RPC URL http://127.0.0.1:8545
? Wallet Mnemonic
? Mnemonic test test test test test test test test test test test junk
? Account 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 9999.969170031383970357 ETH
? DApp address 0x70ac08179605AF2D9e75782b8DEcDD3c22aA4D0C
? Input String encoding
? Input (as string) Hello world, this is my first dApp
✔ Input sent: 0xd30150ee888a2bbf6b491812ee9ca28cb5754381eba3415ce4087322768c191f
You should see this notice in your node:
949fc4c3-validator-1 | INFO:__main__:Received input: Hello world, this is my first dApp
949fc4c3-validator-1 | INFO:__main__:Adding notice with payload: 'Received input: Hello world, this is my first dApp. This was the quote You'll feel much better once you've given up hope.