{"id":25455410,"url":"https://github.com/mugen-builders/learn-deroll","last_synced_at":"2026-05-02T03:03:14.417Z","repository":{"id":218866079,"uuid":"741248752","full_name":"Mugen-Builders/learn-deroll","owner":"Mugen-Builders","description":"An Typescript example using Sunodo/Nonodo and Deroll, a High-Level Framework","archived":false,"fork":false,"pushed_at":"2024-11-17T07:31:09.000Z","size":600,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-18T00:57:30.536Z","etag":null,"topics":["cartesi","ethereum","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mugen-Builders.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-10T02:09:08.000Z","updated_at":"2024-10-25T04:38:27.000Z","dependencies_parsed_at":"2024-07-28T03:44:19.912Z","dependency_job_id":"ebaf701f-b1e5-4296-a78f-fb323264ffa9","html_url":"https://github.com/Mugen-Builders/learn-deroll","commit_stats":null,"previous_names":["mugen-builders/echo-plus-deroll","mugen-builders/learn-deroll"],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mugen-Builders%2Flearn-deroll","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mugen-Builders%2Flearn-deroll/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mugen-Builders%2Flearn-deroll/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mugen-Builders%2Flearn-deroll/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mugen-Builders","download_url":"https://codeload.github.com/Mugen-Builders/learn-deroll/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254567227,"owners_count":22092730,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cartesi","ethereum","typescript"],"created_at":"2025-02-18T00:57:32.126Z","updated_at":"2026-05-02T03:03:14.364Z","avatar_url":"https://github.com/Mugen-Builders.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/Mugen-Builders/.github/assets/153661799/7ed08d4c-89f4-4bde-a635-0b332affbd5d\" width=\"150\" height=\"150\"\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\u003cdiv align=\"center\"\u003e\n    \u003ci\u003eAn Typescript example using Cartesi Cli, Nonodo and Deroll as High-Level Framework\u003c/i\u003e\n\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\n\u003cb\u003eThis example aims to demonstrate the lifecycle of a DApp using Deroll. In addition it serves as a template for integration with Avail.\u003c/b\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\u003cdiv align=\"center\"\u003e\n    \n  \u003ca href=\"\"\u003e[![Static Badge](https://img.shields.io/badge/cartesi-1.3.0-5bd1d7)](https://docs.cartesi.io/cartesi-rollups/)\u003c/a\u003e\n  \u003ca href=\"\"\u003e[![Static Badge](https://img.shields.io/badge/cartesi--cli-0.15.0-5bd1d7)](https://docs.cartesi.io/cartesi-rollups/1.3/quickstart/)\u003c/a\u003e\n  \u003ca href=\"\"\u003e[![Static Badge](https://img.shields.io/badge/nonodo-1.1.1-blue)](https://www.npmjs.com/package/nonodo)\u003c/a\u003e\n  \u003ca href=\"\"\u003e[![Static Badge](https://img.shields.io/badge/@deroll/app-0.7.0-yellow)](https://www.npmjs.com/package/@deroll/app)\u003c/a\u003e\n  \u003ca href=\"\"\u003e[![Static Badge](https://img.shields.io/badge/@deroll/router-0.5.0-yellow)](https://www.npmjs.com/package/@deroll/router)\u003c/a\u003e\n  \u003ca href=\"\"\u003e[![Static Badge](https://img.shields.io/badge/@deroll/wallet-0.8.0-yellow)](https://www.npmjs.com/package/@deroll/wallet)\u003c/a\u003e\n  \u003ca href=\"\"\u003e[![Static Badge](https://img.shields.io/badge/foundry-0.2.0-red)](https://book.getfoundry.sh/getting-started/installation)\u003c/a\u003e\n\u003c/div\u003e\n\n## User Stories:\n\nHere is a list of user stories that the application covers:\n\n| #   | User Story Description                                                                                     |\n| --- | ---------------------------------------------------------------------------------------------------------- |\n| 1   | As a user, I want to send Ether tokens to my wallet on Layer 2.                                           |\n| 2   | As a user, I want to send ERC20 tokens to my wallet on Layer 2.                                           |\n| 3   | As a user, I want to transfer Ether tokens between wallets on Layer 2.                                    |\n| 4   | As a user, I want to transfer ERC20 tokens between wallets on Layer 2.                                    |\n| 5   | As a user, I want to withdraw my deposit in ERC20.                                                         |\n| 6   | As a user, I want to withdraw my deposit in Ether.                                                         |\n| 7   | As a user, I want to request the balance of Ether in my wallet on Layer 2.                                |\n| 8   | As a user, I want to request the balance of ERC20 tokens in my wallet on Layer 2.                         |\n\n## Setup for Avail + Cartesi Machine binary:\nAs a reference for setting up your machine, [follow these steps](https://github.com/Mugen-Builders/cartesi-avail-tutorial?tab=readme-ov-file#prerequisites)\n\n## Setup for standard interactions:\n\n### This setup is divided into two parts:\n1º - Install all dependencies:\n   + Cartesi Cli:\n   ```bash\n   $ npm i -g @cartesi/cli\n   ```\n   + Nonodo:\n   ```bash\n   $ npm i nonodo\n   ```\n\n2º - Clone this repo using the code below:\n```Bash\ngit clone https://github.com/Mugen-Builders/learn-deroll.git\n```\n\n## Running the test node:\n```bash\n$ nonodo\n```\n\n## Running the test node ( Brunodo ) with Avail integration ( Testnet ):\n```bash\n$ brunodo --avail-enabled -d --contracts-input-box-block 6850934 --rpc-url https://sepolia.drpc.org\n```\n\n## Running the test node ( Brunodo ) with Avail integration ( Locally ):\n```bash\n$ brunodo\n```\n\n## Build and run the application:\n```bash\n$ cartesi build\n```\n\n```bash\n$ cartesi run --epoch-length 60\n```\n\n## Build and run the application with Cartesi Machine binary:\n```bash\n$ cartesi build\n```\n\n```bash\n$ cartesi-machine --network \\\n --flash-drive=label:root,filename:.cartesi/image.ext2 \\\n --env=ROLLUP_HTTP_SERVER_URL=http://10.0.2.2:5004 -- /var/opt/cartesi-app/app\n```\n\n## Interactions:\n\nBelow are the instructions on how to interact with each section of the application, and some metadata of the performed operation. \n\n#### Send native tokens:\n\n_User story number 1_\n\n_Required past interactions: No past interactions._\n\n##### Step 1:\n\n###### Command:\n\n```shell\ncartesi send ether --amount=1000\n```\n\n###### Output Similar to:\n\n```shell\n? Chain Foundry\n? RPC URL http://127.0.0.1:8545\n? Wallet Mnemonic\n? Mnemonic test test test test test test test test test test test junk\n? Account 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 9999.969240420387558666 ETH\n? DApp address 0xab7528bb862fb57e8a2bcd567a2e929a0be56a5e\n✔ Input sent: 0x748c08e26d4898384ab0a0cdea7a41bfc7fe0138300133e6cdcf8733b245acf7\n```\n\n\u003e [!NOTE]\n\u003e - Request Type: Advance State\n\u003e - Contract Name: EtherPortal\n\u003e - Contract Function: \"depositEther(address app, bytes calldata execLayerData)\"\n\u003e - Contract Address: 0xFfdbe43d4c855BF7e0f105c400A50857f53AB044\n\n#### Balance of native tokens:\n\n_User story number 7_\n\n_Required past interactions: Send native tokens._\n\n##### Step 1:\n\n###### Command:\n\n```Bash\ncurl http://localhost:8080/inspect/wallet/ether/0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\n```\n\n###### Output Similar to:\n\n```json\n{\n   \"status\":\"Accepted\",\n   \"exception_payload\":null,\n   \"reports\":[\n      {\n         \"payload\":\"0x7b2262616c616e6365223a2231303030303030303030303030303030303030303030227d\"\n      }\n   ],\n   \"processed_input_count\":1\n}\n```\n\n\u003e [!NOTE]\n\u003e  - Request Type: Inspect State\n\n#### Transfer native tokens:\n\n_User story number 3_\n\n_Required past interactions: Send native tokens._\n\n##### Step 1:\n\n###### Command:\n```Bash\ncast calldata \"transferEther(address,uint256)\" 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 100ether\n```\n\n###### Output Similar to:\n```Bash\n0x05b1137b00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000000000000000000000000000056bc75e2d63100000\n```\n\n##### Step 2:\n\n###### Command:\n```Bash\ncartesi send generic --input=0x05b1137b00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000000000000000000000000000056bc75e2d63100000\n```\n\n###### Output Similar to:\n```shell\n? Chain Foundry\n? RPC URL http://127.0.0.1:8545\n? Wallet Mnemonic\n? Mnemonic test test test test test test test test test test test junk\n? Account 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 8999.968880397279934808 ETH\n? DApp address 0xab7528bb862fb57e8a2bcd567a2e929a0be56a5e\n✔ Input sent: 0xfa798512c244eeee3743aba4ecefb3ba60b180dc8f6a8fbd86832905a3423938\n```\n  \n##### Evidence:\n\n###### Command:\n\n```Bash\ncurl http://localhost:8080/inspect/wallet/ether/0x70997970C51812dc3A010C7d01b50e0d17dc79C8\n```\n\n###### Output Similar to:\n```json\n{\n   \"status\":\"Accepted\",\n   \"exception_payload\":null,\n   \"reports\":[\n      {\n         \"payload\":\"0x7b2262616c616e6365223a22313030303030303030303030303030303030303030227d\"\n      }\n   ],\n   \"processed_input_count\":2\n}\n```\n\n\u003e [!NOTE]\n\u003e  - Request Type: Advance State\n\u003e  - Contract Name: InputBox\n\u003e  - Contract Function: \"addInput(address app, bytes calldata payload)\"\n\u003e  - Contract Address: 0x59b22D57D4f067708AB0c00552767405926dc768\n\n#### Withdraw native tokens:\n\n_User story number 6_ \n\n_Required past interactions: Send native tokens._\n\n##### Step 1:\n\n###### Command:\n\n```Bash\ncartesi send dapp-address\n```\n\n###### Output Similar to:\n\n```shell\n? Chain Foundry\n? RPC URL http://127.0.0.1:8545\n? Wallet Mnemonic\n? Mnemonic test test test test test test test test test test test junk\n? Account 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 8999.968561869278177808 ETH\n? DApp address 0xab7528bb862fb57e8a2bcd567a2e929a0be56a5e\n✔ Input sent: 0x96d438d042aa539bf1f99d1055aa829e8bd1082fff8fcb5929c929abc0e8012c\n```\n\n##### Step 2:\n\n###### Command:\n\n```Bash\ncast calldata \"withdrawEther(uint256)\" 500ether\n```\n\n###### Output Similar to:\n\n```Bash\n0x3bed33ce00000000000000000000000000000000000000000000001b1ae4d6e2ef500000\n```\n\n##### Step 3:\n\n###### Command:\n```Bash\ncartesi send generic --input=0x3bed33ce00000000000000000000000000000000000000000000001b1ae4d6e2ef500000\n```\n\n###### Output Similar to:\n```Shell\n? Chain Foundry\n? RPC URL http://127.0.0.1:8545\n? Wallet Mnemonic\n? Mnemonic test test test test test test test test test test test junk\n? Account 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 8999.968241325276378472 ETH\n? DApp address 0xab7528bb862fb57e8a2bcd567a2e929a0be56a5e\n✔ Input sent: 0x758a7653c3429595a46ed0f5857d3c2fd106b67a0360677c2ace073f574a68fe\n```\n\n##### Evidence:\n\n###### Command:\n```shell\ncurl http://localhost:8080/inspect/wallet/ether/0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\n```\n\n###### Output Similar to:\n```json\n{\n   \"status\":\"Accepted\",\n   \"exception_payload\":null,\n   \"reports\":[\n      {\n         \"payload\":\"0x7b2262616c616e6365223a22343030303030303030303030303030303030303030227d\"\n      }\n   ],\n   \"processed_input_count\":4\n}\n```\n\n\u003e [!NOTE]\n\u003e - Request Type: Advance State\n\u003e - Contract Name: InputBox\n\u003e - Contract Function: \"addInput(address app, bytes calldata payload)\"\n\u003e - Contract Address: 0x59b22D57D4f067708AB0c00552767405926dc768\n\n#### Send Tokens ERC20:\n\n_User story number 2_\n\n_Required past interactions: No past interactions._\n\n##### Step 1:\n\n###### Command:\n```Bash\ncast send 0x92C6bcA388E99d6B304f1Af3c3Cd749Ff0b591e2 \"approve(address,uint256)\" 0x9C21AEb2093C32DDbC53eEF24B873BDCd1aDa1DB 1000000000ether  --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --rpc-url http://localhost:8545\n```\n\n###### Output Similar to:\n```Shell\nblockHash               0x0ad7ca64ebd3bae6de5146b46c2c31583760bea920afaa93c787f69b5c406729\nblockNumber             104\ncontractAddress         \ncumulativeGasUsed       46969\neffectiveGasPrice       3000001085\ngasUsed                 46969\nlogs                    [{\"address\":\"0x92C6bcA388E99d6B304f1Af3c3Cd749Ff0b591e2\",\"topics\":[\"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\",\"0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266\",\"0x0000000000000000000000009c21aeb2093c32ddbc53eef24b873bdcd1ada1db\"],\"data\":\"0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000\",\"blockHash\":\"0x0ad7ca64ebd3bae6de5146b46c2c31583760bea920afaa93c787f69b5c406729\",\"blockNumber\":\"0x68\",\"transactionHash\":\"0xc5b62bad0f91870b17ecf4b0380a9178b42ba04b0368ab4462878239ecc71c48\",\"transactionIndex\":\"0x0\",\"logIndex\":\"0x0\",\"transactionLogIndex\":\"0x0\",\"removed\":false}]\nlogsBloom               0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000800000000000000000000080000000000000000000000000100000000000000000000000000000020000000000000000000000000000000000000000000000800000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000002000000000008000000000000010000000400000000000000000000000000000000000000000000000000000\nroot                    \nstatus                  1\ntransactionHash         0xc5b62bad0f91870b17ecf4b0380a9178b42ba04b0368ab4462878239ecc71c48\ntransactionIndex        0\ntype                    2\n```\n\n##### Step 2:\n\n###### Command:\n```Bash\ncartesi send erc20\n```\n\n###### Output Similar to:\n```Shell\n? Chain Foundry\n? RPC URL http://127.0.0.1:8545\n? Wallet Mnemonic\n? Mnemonic test test test test test test test test test test test junk\n? Account 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 8999.967782517274305856 ETH\n? DApp address 0xab7528bb862fb57e8a2bcd567a2e929a0be56a5e\n? Token address 0x92C6bcA388E99d6B304f1Af3c3Cd749Ff0b591e2\n✔ Input sent: 0xc9f85574c90461c920972ba5e00de03b05477e022e50f72aebad898af6757a6c\n```\n  \n\u003e [!NOTE]\n\u003e  - Request Type: Advance State\n\u003e  - Contract Name: ERC20Portal\n\u003e  - Contract Function: \"depositERC20Tokens(IERC20 token, address app, uint256 amount, bytes calldata execLayerData)\"\n\u003e  - Contract Address: 0x9C21AEb2093C32DDbC53eEF24B873BDCd1aDa1DB\n\n#### Balance of ERC20 tokens:\n\n_User story number 8_\n\n_Required past interactions: Send ERC20 tokens._\n\n##### Step 1:\n\n###### Command:\n```Bash\ncurl http://localhost:8080/inspect/wallet/erc20/0x92C6bcA388E99d6B304f1Af3c3Cd749Ff0b591e2/0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\n```\n\n###### Output Similar to:\n```Bash\n{\n   \"status\":\"Accepted\",\n   \"exception_payload\":null,\n   \"reports\":[\n      {\n         \"payload\":\"0x7b2262616c616e6365223a2231303030303030303030303030303030303030303030303030303030227d\"\n      }\n   ],\n   \"processed_input_count\":5\n}\n```\n\n\u003e [!NOTE]\n\u003e  - Request Type: Inspect State\n\n#### Transfer tokens ERC20:\n\n_User story number 4_\n\n_Required past interactions: Send ERC20 tokens._\n\n##### Step 1:\n\n###### Command:\n```Bash\ncast calldata \"transferERC20(address,address,uint256)\" 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 10ether\n```\n\n###### Output Similar to:\n```Bash\n0x9db5dbe4000000000000000000000000f39Fd6e51aad88F6F4ce6aB8827279cffFb9226600000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000000000000000000000000000008ac7230489e80000\n```\n\n##### Step 2:\n\n###### Command:\n```Shell\ncartesi send generic --input=0x9db5dbe4000000000000000000000000f39Fd6e51aad88F6F4ce6aB8827279cffFb9226600000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000000000000000000000000000008ac7230489e80000\n```\n\n###### Output Similar to:\n```Shell\n? Chain Foundry\n? RPC URL http://127.0.0.1:8545\n? Wallet Mnemonic\n? Mnemonic test test test test test test test test test test test junk\n? Account 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 8999.967416214271545581 ETH\n? DApp address 0xab7528bb862fb57e8a2bcd567a2e929a0be56a5e\n✔ Input sent: 0xd49dc708491b48e6789e7dbc635474fa83fb19da2f7a6326a9cb5c4131fdd733`\n```\n\n##### Evidence:\n\n###### Command:\n```Bash\ncurl http://localhost:8080/inspect/wallet/erc20/0x92C6bcA388E99d6B304f1Af3c3Cd749Ff0b591e2/0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\n```\n\n###### Output Similar to:\n```json\n{\n   \"status\":\"Accepted\",\n   \"exception_payload\":null,\n   \"reports\":[\n      {\n         \"payload\":\"0x7b2262616c616e6365223a223130303030303030303030303030303030303030227d\"\n      }\n   ],\n   \"processed_input_count\":6\n}\n```\n\n\u003e [!NOTE]\n\u003e  - Request Type: Advance State\n\u003e  - Contract Name: InputBox\n\u003e  - Contract Function: \"addInput(address app, bytes calldata payload)\"\n\u003e  - Contract Address: 0x59b22D57D4f067708AB0c00552767405926dc768\n\n#### Withdraw ERC20 tokens:\n\n_User story number 5_\n\n_Required past interactions: Send ERC20 tokens._\n\n##### Step 1:\n\n###### Command:\n```Bash\ncast calldata \"withdrawERC20(address,uint256)\" 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 100ether\n```\n\n###### Output Similar to:\n```Bash\n0xa1db9782000000000000000000000000f39Fd6e51aad88F6F4ce6aB8827279cffFb922660000000000000000000000000000000000000000000000056bc75e2d63100000\n```\n\n##### Step 2:\n\n###### Command:\n```Bash\ncartesi send generic --input=0xa1db9782000000000000000000000000f39Fd6e51aad88F6F4ce6aB8827279cffFb922660000000000000000000000000000000000000000000000056bc75e2d63100000\n```\n\n###### Output Similar to:\n```Shell\n? Chain Foundry\n? RPC URL http://127.0.0.1:8545\n? Wallet Mnemonic\n? Mnemonic test test test test test test test test test test test junk\n? Account 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 8999.96709703526977491 ETH\n? DApp address 0xab7528bb862fb57e8a2bcd567a2e929a0be56a5e\n✔ Input sent: 0x383138528e451dfb74286e8f84d6282e2718ecc92e66ad91e18f2059437de501\n```\n\n##### Evidence:\n\n###### Command:\n```Bash\ncurl http://localhost:8080/inspect/wallet/erc20/0x92C6bcA388E99d6B304f1Af3c3Cd749Ff0b591e2/0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\n```\n\n###### Output Similar to:\n```json\n{\n   \"status\":\"Accepted\",\n   \"exception_payload\":null,\n   \"reports\":[\n      {\n         \"payload\":\"0x7b2262616c616e6365223a22393939393939383930303030303030303030303030303030303030227d\"\n      }\n   ],\n   \"processed_input_count\":7\n}\n```\n\n\u003e [!NOTE]\n\u003e  - Request Type: Advance State\n\u003e  - Contract Name: InputBox\n\u003e  - Contract Function: \"addInput(address app, bytes calldata payload)\"\n\u003e  - Contract Address: 0x59b22D57D4f067708AB0c00552767405926dc768\n\n### Executing all generated vouchers\n\nYou can use the [Cartesi Explorer](http://localhost:8080/explorer) to execute all the vouchers generated by the interactions performed earlier. Note that in this section, when clicking to obtain the proof, you are collecting the proof of the computation generated at the end of the respective epoch. This is the reason that, if you used the cartesi cli to run the dapp, you needed to use the ```--epoch-length``` flag to control the time until the epoch is completed, in this case, 60 seconds.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmugen-builders%2Flearn-deroll","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmugen-builders%2Flearn-deroll","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmugen-builders%2Flearn-deroll/lists"}