From 2fc9ff4f1e38d18bce9e09432b5a6219478cc7c2 Mon Sep 17 00:00:00 2001 From: Michael Asiedu Date: Tue, 20 Aug 2024 11:02:02 +0000 Subject: [PATCH] chore: create folder for v2 docs --- .../version-2.0/back-end-api.png | Bin 0 -> 47812 bytes .../version-2.0/core-components.png | Bin 0 -> 86993 bytes .../version-2.0/core-concepts/architecture.md | 162 ++ .../core-concepts/cartesi-machine.md | 25 + .../version-2.0/core-concepts/mainnet.md | 38 + .../core-concepts/optimistic-rollups.md | 70 + .../version-2.0/dapp-arch.png | Bin 0 -> 86993 bytes .../version-2.0/deployment/introduction.md | 53 + .../version-2.0/deployment/self-hosted.md | 171 ++ .../version-2.0/development/asset-handling.md | 69 + .../development/building-the-application.md | 53 + .../version-2.0/development/cli-commands.md | 151 ++ .../development/community-tools.md | 161 ++ .../development/creating-application.md | 35 + .../version-2.0/development/installation.md | 92 ++ .../version-2.0/development/migration.md | 114 ++ .../development/retrieve-outputs.md | 482 ++++++ .../development/running-the-application.md | 75 + .../version-2.0/development/send-requests.md | 233 +++ .../version-2.0/front-end-api.png | Bin 0 -> 39719 bytes .../version-2.0/index.md | 68 + .../version-2.0/input.png | Bin 0 -> 55587 bytes .../version-2.0/inspect.png | Bin 0 -> 43235 bytes .../version-2.0/overview-diagram.jpg | Bin 0 -> 60910 bytes .../version-2.0/quickstart.md | 136 ++ .../rollups-apis/backend/introduction.md | 152 ++ .../rollups-apis/backend/notices.md | 82 + .../rollups-apis/backend/reports.md | 84 + .../rollups-apis/backend/vouchers.md | 35 + .../rollups-apis/graphql/basics.md | 90 + .../graphql/directives/_category_.yml | 2 + .../graphql/directives/deprecated.mdx | 25 + .../graphql/directives/include.mdx | 25 + .../rollups-apis/graphql/directives/skip.mdx | 25 + .../graphql/directives/specified-by.mdx | 25 + .../rollups-apis/graphql/generated.md | 19 + .../graphql/inputs/_category_.yml | 2 + .../graphql/inputs/input-filter.md | 25 + .../graphql/objects/_category_.yml | 2 + .../graphql/objects/completion-status.md | 34 + .../graphql/objects/input-connection.md | 26 + .../graphql/objects/input-edge.md | 27 + .../rollups-apis/graphql/objects/input.md | 39 + .../graphql/objects/notice-connection.md | 27 + .../graphql/objects/notice-edge.md | 27 + .../rollups-apis/graphql/objects/notice.md | 33 + .../graphql/objects/output-validity-proof.md | 36 + .../rollups-apis/graphql/objects/page-info.md | 29 + .../rollups-apis/graphql/objects/proof.md | 27 + .../graphql/objects/report-connection.md | 29 + .../graphql/objects/report-edge.md | 29 + .../rollups-apis/graphql/objects/report.md | 31 + .../graphql/objects/voucher-connection.md | 29 + .../graphql/objects/voucher-edge.md | 29 + .../rollups-apis/graphql/objects/voucher.md | 33 + .../graphql/queries/_category_.yml | 2 + .../rollups-apis/graphql/queries/inputs.md | 251 +++ .../rollups-apis/graphql/queries/notices.md | 185 +++ .../rollups-apis/graphql/queries/reports.md | 214 +++ .../rollups-apis/graphql/queries/vouchers.md | 206 +++ .../rollups-apis/graphql/scalars/DateTime.md | 16 + .../graphql/scalars/_category_.yml | 2 + .../rollups-apis/graphql/scalars/big-int.md | 17 + .../rollups-apis/graphql/scalars/boolean.md | 16 + .../rollups-apis/graphql/scalars/int.md | 20 + .../rollups-apis/graphql/scalars/string.md | 15 + .../rollups-apis/graphql/sidebar-schema.js | 8 + .../version-2.0/rollups-apis/index.md | 50 + .../version-2.0/rollups-apis/inspect.yaml | 107 ++ ...tate-http-api-for-cartesi-rollups.info.mdx | 26 + .../rollups-apis/inspect/inspect.api.mdx | 57 + .../json-rpc/application-factory.md | 80 + .../rollups-apis/json-rpc/application.md | 251 +++ .../rollups-apis/json-rpc/input-box.md | 100 ++ .../rollups-apis/json-rpc/overview.md | 31 + .../json-rpc/portals/ERC1155BatchPortal.md | 33 + .../json-rpc/portals/ERC1155SinglePortal.md | 30 + .../json-rpc/portals/ERC20Portal.md | 30 + .../json-rpc/portals/ERC721Portal.md | 31 + .../json-rpc/portals/EtherPortal.md | 26 + .../rollups-apis/json-rpc/relays/relays.md | 24 + .../version-2.0/rollups-apis/rollup.yaml | 371 +++++ .../rollups-apis/rollup/add-notice.api.mdx | 51 + .../rollups-apis/rollup/add-report.api.mdx | 48 + .../rollups-apis/rollup/add-voucher.api.mdx | 51 + .../rollup/cartesi-rollup-http-api.info.mdx | 85 + .../rollups-apis/rollup/finish.api.mdx | 69 + .../rollup/register-exception.api.mdx | 53 + .../rollups-apis/rollup/sidebar.js | 1 + .../version-2.0/rollups-apis/typeDefs.graphql | 205 +++ .../version-2.0/tutorials/calculator.md | 339 ++++ .../tutorials/erc-20-token-wallet.md | 458 ++++++ .../tutorials/erc-721-token-wallet.md | 453 ++++++ .../version-2.0/tutorials/ether-wallet.md | 555 +++++++ .../tutorials/react-frontend-application.md | 1448 +++++++++++++++++ docusaurus.config.js | 2 +- 96 files changed, 9282 insertions(+), 1 deletion(-) create mode 100644 cartesi-rollups_versioned_docs/version-2.0/back-end-api.png create mode 100644 cartesi-rollups_versioned_docs/version-2.0/core-components.png create mode 100644 cartesi-rollups_versioned_docs/version-2.0/core-concepts/architecture.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/core-concepts/cartesi-machine.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/core-concepts/mainnet.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/core-concepts/optimistic-rollups.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/dapp-arch.png create mode 100644 cartesi-rollups_versioned_docs/version-2.0/deployment/introduction.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/deployment/self-hosted.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/development/asset-handling.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/development/building-the-application.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/development/cli-commands.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/development/community-tools.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/development/creating-application.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/development/installation.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/development/migration.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/development/retrieve-outputs.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/development/running-the-application.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/development/send-requests.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/front-end-api.png create mode 100644 cartesi-rollups_versioned_docs/version-2.0/index.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/input.png create mode 100644 cartesi-rollups_versioned_docs/version-2.0/inspect.png create mode 100644 cartesi-rollups_versioned_docs/version-2.0/overview-diagram.jpg create mode 100644 cartesi-rollups_versioned_docs/version-2.0/quickstart.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/backend/introduction.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/backend/notices.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/backend/reports.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/backend/vouchers.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/basics.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/directives/_category_.yml create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/directives/deprecated.mdx create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/directives/include.mdx create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/directives/skip.mdx create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/directives/specified-by.mdx create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/generated.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/inputs/_category_.yml create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/inputs/input-filter.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/_category_.yml create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/completion-status.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/input-connection.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/input-edge.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/input.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/notice-connection.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/notice-edge.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/notice.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/output-validity-proof.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/page-info.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/proof.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/report-connection.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/report-edge.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/report.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/voucher-connection.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/voucher-edge.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/objects/voucher.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/queries/_category_.yml create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/queries/inputs.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/queries/notices.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/queries/reports.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/queries/vouchers.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/scalars/DateTime.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/scalars/_category_.yml create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/scalars/big-int.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/scalars/boolean.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/scalars/int.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/scalars/string.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/graphql/sidebar-schema.js create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/index.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/inspect.yaml create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/inspect/inspect-state-http-api-for-cartesi-rollups.info.mdx create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/inspect/inspect.api.mdx create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/json-rpc/application-factory.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/json-rpc/application.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/json-rpc/input-box.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/json-rpc/overview.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/json-rpc/portals/ERC1155BatchPortal.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/json-rpc/portals/ERC1155SinglePortal.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/json-rpc/portals/ERC20Portal.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/json-rpc/portals/ERC721Portal.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/json-rpc/portals/EtherPortal.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/json-rpc/relays/relays.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/rollup.yaml create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/rollup/add-notice.api.mdx create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/rollup/add-report.api.mdx create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/rollup/add-voucher.api.mdx create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/rollup/cartesi-rollup-http-api.info.mdx create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/rollup/finish.api.mdx create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/rollup/register-exception.api.mdx create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/rollup/sidebar.js create mode 100644 cartesi-rollups_versioned_docs/version-2.0/rollups-apis/typeDefs.graphql create mode 100644 cartesi-rollups_versioned_docs/version-2.0/tutorials/calculator.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/tutorials/erc-20-token-wallet.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/tutorials/erc-721-token-wallet.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/tutorials/ether-wallet.md create mode 100644 cartesi-rollups_versioned_docs/version-2.0/tutorials/react-frontend-application.md diff --git a/cartesi-rollups_versioned_docs/version-2.0/back-end-api.png b/cartesi-rollups_versioned_docs/version-2.0/back-end-api.png new file mode 100644 index 0000000000000000000000000000000000000000..cf73b3afb43efd07cd53d474a5a780fbd383ab17 GIT binary patch literal 47812 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 PhiJzXkH#G~`29Zt+`G1~ literal 0 HcmV?d00001 diff --git a/cartesi-rollups_versioned_docs/version-2.0/core-components.png b/cartesi-rollups_versioned_docs/version-2.0/core-components.png new file mode 100644 index 0000000000000000000000000000000000000000..c350efbba995251ae0eac9a8fe81865375c57825 GIT binary patch literal 86993 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⪚-MtcPp(!7hJ7j3@PogAp=T(@Hs1@wjtZdNA{>x2*m zajtTt(0>oM3KLMv67=GMFb9FXEAxBoghygZ^v(4u`HLOs1$v)|yjIJq+N+L0r5ikv z{!@6h5!~XD1YOdVxH>W@c=aCFz3;|)?@2HP7j#Y%9J)7&+K4i$KPr2Ht&LGdsr;mq z5rqje`;hu-J}j7W2k>9Fr5b&IiW@ydxttbH;3=^vARD^JH9J`HwZpV-Q;lwETM*E~ zQc%m!z*m>8U4D7c>FjKnLNl!BU--1|jAaI7h_jlP?i3;5Qp=~hpUZG`fftmv8$&R9e(l)IC+ zNMb!MeZJWcE16=V@_VeSwYL)pQin4l)(rU#!7MZYo!X0)g>e;(?$$vw^bqz0Sp)_H ze(-D^L@wZ|k+X*`OS-HyWZtcM{>X{r_w7r^pD~J{7Y}YcWDa)nBW5@8X5sEcGPoiW zW2d2dN=4{F&CfGlvW}a-gh~D9YA~Ojxl_llEXA;k#ibCi%+3KZThjw;h?&D+(Db~~ zMtlZ=n<3b=v1L(7S0P@KAh@XSm0;Y4xZc88+x}I<-|eq9A(L|EStsClHQLMh&%1v! zK^?P?Wqj8{Wu#O4dU7)YLt&Ln=iy3antpv}e;*rC3^A?)1&5)cQv~U6k#-~#8vOqY zR8Za4Tb>!1*Hp{5jLTkZz2m(i@Z%K~c2tI!%t3pk3>rd~sARQ*=2`&^p*^tT4ucL( zn9SI^aa+>kN0+Ko6Kn|+syX~hxVsRhaSt z^|zKkV%ndt)7k{TgqrKLh#I3J@&F1%@eq!rlW!|LDI0)uE#QnqXlp9w_sdgPj0YRwkI{|AgEoMhkWgDvLQ*J0-QwyLu}}C3I2K6auXt|@6IK9oK$LuNs3^1s98sP1>fL?!_!pOB*ud|`V_ z3s_V2o8mJeEGi=qcmqNy#ji4U z$n6}MJ083LB2)YEt7j!3soQxI|9?;F#)Ik~=^yytle%262WE7n+wjR>UwQLY(QhE{ z`NlW!*F^Sj%Ru+yk(8Eu%AWXN_u%hF?fAP=^gODTh}G7C126J|Nj98zctMO literal 0 HcmV?d00001 diff --git a/cartesi-rollups_versioned_docs/version-2.0/core-concepts/architecture.md b/cartesi-rollups_versioned_docs/version-2.0/core-concepts/architecture.md new file mode 100644 index 00000000..19918611 --- /dev/null +++ b/cartesi-rollups_versioned_docs/version-2.0/core-concepts/architecture.md @@ -0,0 +1,162 @@ +--- +id: architecture +title: Architecture +resources: + - url: https://cartesi.io/blog/grokking-cartesi-virtual-machine/ + title: Grokking the Cartesi Machine + - url: https://cartesi.io/blog/understanding-cartesi-rollups-pt2/ + title: Understanding Cartesi Rollups + - url: https://cartesi.io/blog/grokking-cartesi-nodes/ + title: Grokking Cartesi Nodes + - url: https://youtu.be/uUzn_vdWyDM?si=J2or_Nfym5pabkjNz3z8Gw + title: Cartesi Machine DeepDive + - url: https://github.com/cartesi/dave + title: Dave +--- + +The Cartesi Rollups framework is designed to enable complex computations off-chain while maintaining the security guarantees of blockchain technology. It consists of two primary components: **the on-chain base layer** (such as Ethereum), where the dApp contract is deployed, and **the off-chain execution layer**, where the dApp's backend logic operates. + +A decentralized application (dApp) built on Cartesi incorporates several key elements: + +- Cartesi Rollups: A set of _on-chain(rollups contracts)_ and _off-chain(rollups node)_ components that implement an Optimistic Rollup solution, providing the general framework for building dApps. + +- Cartesi Machine: A virtual machine (VM) that runs a complete Linux operating system, serving as the environment for executing the dApp's backend. + +- Backend: The application's state and verifiable logic run inside the Cartesi Machine as a standard Linux application. + +- Frontend: The application’s user-facing interface, typically implemented as a web application or a command-line interface tool. + + +![img](../../../static/img/v1.5/architecture-overview.jpg) + +## Cartesi Machine + +The Cartesi Machine forms the core of Cartesi's off-chain computation capabilities. It is a virtual machine based on the [RISC-V](https://riscv.org/) instruction set architecture (ISA), designed to provide a deterministic and isolated execution environment. + +Key features of the Cartesi Machine include: + +- Full Linux OS support: This allows developers to use familiar tools and libraries for backend development. You have flexibility in the choice of programming languages and all open-source libraries available on Linux. + +- Isolation and reproducibility: The machine operates independently, ensuring consistent behavior across executions. + +- Scalability: By leveraging significant off-chain computing power, the Cartesi Machine enables complex computations while maintaining blockchain-level security. + +- The Cartesi machine is self-contained and can't make an external request. It runs in isolation from any external influence on the computation to achieve reproducibility. + +The Cartesi Machine achieves its unique balance of scalability and security by performing computations off-chain but providing mechanisms to verify these computations on-chain when necessary. + + +## On-chain components + +The on-chain part of Cartesi Rollups consists of [several smart contracts](../rollups-apis/json-rpc/overview.md) deployed on the base layer. + +Here is an overview of the major contracts, with each serving a specific role in the dApp ecosystem: + +### InputBox +The [InputBox](../rollups-apis/json-rpc/input-box.md) contract is the entry point for user interactions with the off-chain layer. All inputs destined for a Cartesi dApp are first submitted to this contract, which then emits events that the off-chain components can process. + +### CartesiDApp +Each Cartesi dApp is associated with a unique instance of the [CartesiDApp](../rollups-apis/json-rpc/application.md) contract. This contract acts as the on-chain representation of the dApp and can hold ownership of digital assets on the base layer, including Ether, ERC-20 tokens, and NFTs. + +### CartesiDAppFactory +The [CartesiDAppFactory](../rollups-apis/json-rpc/application-factory.md) contract simplifies the deployment process for CartesiDApp contracts. It allows developers to deploy new CartesiDApp instances with a single function call, enhancing convenience and security. This factory approach ensures the deployed contract bytecode remains unaltered, assuring users and validators. + +### Portals + +Portal contracts facilitate the secure transfer of assets between the base layer and the Cartesi execution environment. Currently, Cartesi supports the following types of asset transfers: + +- [Ether (ETH)](../rollups-apis/json-rpc/portals/EtherPortal.md) +- [ERC-20 (Fungible tokens)](../rollups-apis/json-rpc/portals/ERC20Portal.md) +- [ERC-721 (Non-fungible tokens)](../rollups-apis/json-rpc/portals/ERC721Portal.md) +- [ERC-1155 Single transfers](../rollups-apis/json-rpc/portals/ERC1155SinglePortal.md) +- [ERC-1155 Batch transfers](../rollups-apis/json-rpc/portals/ERC1155BatchPortal.md) + +These Portal contracts implement the logic to "teleport" assets safely between layers, maintaining their integrity and ownership throughout the transfer process. + +## Off-chain layer +The off-chain execution layer is centered around the Cartesi Rollups Node, the crucial middleware between the on-chain contracts and the Cartesi Machine. The node is responsible for: + +1. Processing inputs: It reads inputs from the base layer and forwards them to the Cartesi Machine for processing. + +2. State management: The node manages the state of the dApp, ensuring consistency between on-chain and off-chain representations. + +3. Validation: It can act as a validator, generating claims at the end of each epoch to be submitted on-chain. + +4. Inspection: The node handles requests to inspect the dApp state, facilitating queries without altering the state. + +5. Output management: It operates a GraphQL server that allows clients to query the outputs produced by the dApp. + +The Cartesi Rollups Node can operate in two primary modes: + +**1. Validator Nodes**: These nodes have full responsibilities, including processing inputs, generating claims, and ensuring the validity of on-chain state updates. They can operate in secure, isolated environments as they don't need to expose endpoints for external state queries. + +**2. Reader Nodes (In Development)**: These nodes focus on advancing the off-chain state and making it publicly available. They consume information from the blockchain but do not participate in the validation process. + +:::caution important +All Cartesi Nodes function as Validator Nodes, with Reader Node functionality under active development. +::: + + +## Data Flow and Processes + +The Cartesi architecture facilitates several key processes that enable the functioning of dApps. These processes include: + +### Advance state + +![img](../../../static/img/v1.5/node-advance.jpg) + +The `advance-state` process changes the application state, and it involves the following steps: + +- The application frontend submits an advance-state input to the `InputBox` smart contract on the base layer. + +- The node monitors events from the `InputBox` contract and retrieves the input data. + +- The node sends the input to the application backend inside the Cartesi Machine. + +- The Cartesi Machine processes the input and generates verifiable outputs ([vouchers](../rollups-apis/backend/vouchers.md), [notices](../rollups-apis/backend/notices.md), and [reports](../rollups-apis/backend/reports.md)). + +- The application frontend can query these outputs using the node's [GraphQL API](../rollups-apis/graphql/basics.md). + +### Inspect state + +![img](../../../static/img/v1.5/node-inspect.jpg) + +The `inspect-state` process allows for querying the application backend without altering its state: + +- The application frontend sends an inspect-state input directly to the Cartesi Node. + +- The node forwards this input to the Cartesi Machine. + +- The Cartesi Machine processes the input and generates a [report](../rollups-apis/backend/reports.md). + +- The node returns this report to the frontend via a [REST API](../rollups-apis/backend/introduction.md/#advance-and-inspect). + +:::note Inspect requests +It's important to note that `inspect-state` inputs do not produce vouchers or notices, and the current implementation processes inputs sequentially, which may impact scalability for applications heavily reliant on inspect-state functionality. +::: + +### Validation + +![img](../../../static/img/v1.5/node-validate.jpg) + +The validation process ensures the integrity of the off-chain computations: + +- The Cartesi Node bundles multiple `advance-state` inputs into an epoch. + +- At the end of an epoch, the node computes a claim summarizing the epoch's state changes. + +- The node submits this claim to the Cartesi Rollups smart contracts on the base layer. + +- The application frontend can fetch proofs for specific outputs within a closed epoch. + +- These proofs can validate outputs on-chain, such as validating notices or executing vouchers. + +## Introducing Dave — an interactive fraud-proof system + +[Dave](https://github.com/cartesi/dave) is Cartesi's dispute resolution algorithm designed to address shortcomings in existing fraud-proof protocols. Traditional fraud-proof systems often face challenges such as delay attacks and vulnerability to Sybil attacks, where malicious nodes can disrupt operations by continuously challenging transactions or overwhelming honest validators. + +Dave introduces an approach where the resources required to defend against disputes grow logarithmically with the number of opponents. This means that defending against challenges remains affordable for a single honest node, even in the face of multiple attackers. + +With Dave, a single honest participant can effectively defend their claims on-chain, ensuring the integrity of transactions without relying on trust in validators. Based on the [Permissionless Refereed Tournaments algorithm](https://arxiv.org/abs/2212.12439), this protocol empowers anyone to validate rollups and uphold correct states on-chain, enhancing transaction security and reliability. + +Similar to how a consensus algorithm is crucial for achieving agreement on a single state of the blockchain among all nodes in a base-layer chain, Dave plays a fundamental role in ensuring the integrity and trustworthiness of state transitions within Cartesi Rollups. diff --git a/cartesi-rollups_versioned_docs/version-2.0/core-concepts/cartesi-machine.md b/cartesi-rollups_versioned_docs/version-2.0/core-concepts/cartesi-machine.md new file mode 100644 index 00000000..72140ca2 --- /dev/null +++ b/cartesi-rollups_versioned_docs/version-2.0/core-concepts/cartesi-machine.md @@ -0,0 +1,25 @@ +--- +id: cartesi-machine +title: Cartesi Machine +--- + +The [Cartesi Machine](/cartesi-machine) is a virtual machine that runs an entire Linux OS, in which a dApp's backend is executed. The Cartesi Machine is based on the [RISC-V ISA](https://riscv.org/), a set of instructions for processors. It runs in isolation, meaning it operates independently and is reproducible. + +Central to Cartesi Rollups is the Cartesi Machine, a virtual machine designed to perform off-chain computations for blockchain applications. When examined from a high level of abstraction, the Cartesi Machine can be compared to an AWS Lambda function, with similarities that encompass: + +- Code execution: Code is executed based on specific inputs to perform computations, process data, or run custom logic, depending on the requirements of the task at hand. + +- Abstraction of infrastructure: The underlying infrastructure is abstracted away, allowing you to focus on writing code without worrying about managing servers, hardware, or networking resources. + +- Flexibility in programming languages and libraries: You have flexibility in the choice of programming languages and all open-source libraries available on Linux. + + +The Cartesi Machine is a state machine that remains idle until a new request arises. The concept of state, in this case, is tied to both the input requests that the Cartesi Machine receives and the execution of the RISC-V instructions that the machine follows in processing those requests. The Cartesi Machine handles: + +- Discrete states: RISC-V instructions are executed step-by-step, transitioning from one state to another. + +- State transitions: State transitions happen deterministically as the emulator processes these RISC-V instructions, changing the system's state to a new discrete state. + +- Determinism: Given the same initial state and input, the Cartesi Machine will always produce the same output and final state to ensure that off-chain computations can be verified and agreed upon. + +- The Cartesi machine is self-contained and can't make an external request. To achieve reproducibility,it runs in isolation from any external influence on the computation. diff --git a/cartesi-rollups_versioned_docs/version-2.0/core-concepts/mainnet.md b/cartesi-rollups_versioned_docs/version-2.0/core-concepts/mainnet.md new file mode 100644 index 00000000..2a5801d9 --- /dev/null +++ b/cartesi-rollups_versioned_docs/version-2.0/core-concepts/mainnet.md @@ -0,0 +1,38 @@ +--- +id: mainnet-considerations +title: Mainnet considerations +resources: + - url: https://honeypot.cartesi.io/ + title: Honeypot dApp +--- + +Cartesi Rollups are app-specific execution environments that can be deployed as L2, L3, or sovereign rollups. It's not your typical L1 blockchain, so the idea of a "Mainnet launch" is slightly different. What goes to mainnet are the dApps built using Cartesi! And with the launch of the Honeypot dApp, Cartesi Rollups is officially ready for mainnet! + +## About Mainnet + +Now that Cartesi has reached a Mainnet Ready stage, developers can build dApps with Cartesi Rollups and deploy on Ethereum, Optimism, and Arbitrum Mainnets! + +At this first stage, the validation remains permissive, with no support for disputes; however, progress in implementing this is already underway. + +## Undiscovered Bugs + +The codebase may contain some undiscovered vulnerabilities that might put user funds at risk. + +Developers and users should factor this risk into their decision to use Cartesi Rollups and decide how much of their value to entrust to the system. + +## Security + + +The Cartesi Rollups infrastructure is being built based on careful design decisions and a robust code review process that aligns with the mainstream dogma of blockchain technology. + +When it comes to dApp safety, developers must also implement the same level of concern in their process. A culture of code reviews, auditing, and extensively testing their code is paramount to avoid hacks or bugs that could lead to user funds being lost. + +**The Honeypot** is a dApp designed to demonstrate Cartesi Rollups’ security capabilities. + +As the Honeypot is tested and fortified, users and developers will have increased confidence in the security of Cartesi Rollups. Want to help test the security of Cartesi Rollups? [Try your hand at cracking the Honeypot](https://honeypot.cartesi.io/). + + +## Scams +Like Ethereum, Cartesi Rollups are permissionless—anybody can deploy any smart contract code. You can interact with contracts on Cartesi Rollups precisely as you do with Ethereum, but only if you’ve independently verified that the application is secure. + + diff --git a/cartesi-rollups_versioned_docs/version-2.0/core-concepts/optimistic-rollups.md b/cartesi-rollups_versioned_docs/version-2.0/core-concepts/optimistic-rollups.md new file mode 100644 index 00000000..a83a7034 --- /dev/null +++ b/cartesi-rollups_versioned_docs/version-2.0/core-concepts/optimistic-rollups.md @@ -0,0 +1,70 @@ +--- +id: optimistic-rollups +title: Optimistic Rollups +resources: + - url: https://ethereum.org/en/developers/docs/scaling/optimistic-rollups/ + title: Optimistic Rollups + - url: https://www.paradigm.xyz/2021/01/almost-everything-you-need-to-know-about-optimistic-rollup + title: Everything you need to know about Optimistic Rollups + - url: https://cartesi.io/blog/grokking-dave/ + title: Fraud-proof protocols | Grokking Dave +--- + +Cartesi implements a rollup design known as Optimistic Rollups. + +The combination of an Optimistic Rollups framework and the Cartesi Machine Emulator enables the development of dApps using any package or library available for Linux. + +## What is a Blockchain Rollup? + +A rollup is a blockchain scalability solution that offloads complex computations "off-chain," meaning they run on a separate computing environment (execution layer) outside the base layer, such as Ethereum. + +When employing rollups, the blockchain receives and logs transactions. In rare instances of an active attack or the involvement of a malicious agent, parties may disagree with a computation’s outcomes, and the blockchain will resolve these disputes. However, it's important to note that disagreements are not expected to occur under normal circumstances. + + +Users interact with a rollup through transactions on the base layer. They send messages (inputs) to the rollup on-chain smart contracts to define a computation to be processed and, as such, advance the state of the computing environment on the execution layer. Interested parties run an off-chain component (a node on the execution layer) that watches the blockchain for inputs, understanding, and executing the state updates. + +Once in a while, the state is checkpointed on the chain; at this point, it is considered finalized and can thus be accepted by any smart contract on the base layer. + +Ensuring this operation is secure is vital, meaning that the execution layer node must somehow prove the new state to the base layer. + +Consider this question: _"How does Ethereum know that the data posted by an off-chain L2 node is valid and was not submitted maliciously?"_ + +The answer depends on the rollup implementation, which falls within one of two categories according to the type of proof used: + +1. **Zero-knowledge Rollups (ZK Rollups)**, which use validity proofs. + +2. **Optimistic Rollups (ORs)**, which use fraud proofs. + +### Zero-knowledge Rollups (ZK Rollups) + +In ZK rollups, which use validity proof schemes, every state update is accompanied by a cryptographic proof created off-chain, attesting to its validity. The update is only taken if the proof successfully passes verification on-chain. Validity proofs(ZK Rollups) bring the enormous benefit of instant finality—as soon as a state update appears on-chain, it can be fully trusted and acted upon. + +The choice, however, also brings less than ideal properties: generating ZK proofs for general-purpose computations is, when possible, immensely expensive, and each on-chain state update must pay the extra gas fee for including and verifying a validity proof. + +### Optimistic Rollups (ORs) + +Optimistic Rollups, which use fraud-proof schemes, work by a different paradigm. State updates come unaccompanied by proofs; they’re proposed and, if not challenged, confirmed on-chain. Challenging a state update proposal using fraud proofs has two categories: **non-interactive** and **interactive**. + +Non-interactive refers to the fact that the challengers can prove that a state update is invalid in one step. With interactive fraud proofs, the claimer and challenger must, mediated by the blockchain, partake in something similar to a verification game. + +The assumption that state updates will likely be honest often gives solutions like this the name of Optimistic Rollups. + +This optimism is reinforced by financial incentives that reward honest behavior. Furthermore, any proposed false state will only be accepted if it remains undisputed for a prolonged period. + + +The main advantage of Optimistic Rollups is that they are much cheaper than ZK Rollups. Posting a state update on-chain is minimal, and challenging a state update is also low. + +The main disadvantage is that state updates take time to finalize and are not entirely accepted immediately. During this period, they are considered "optimistic" and can be challenged. + + +## Cartesi Rollups + +Cartesi's Optimistic Rollups adopt interactive fraud proofs to handle disputes. + +The base layer isn't burdened with executing all computations, allowing for more extensive computational tasks. + +Transactions and computations occur off-chain, leading to more intricate logic within transactions; hence, applications leverage powerful virtual machines (VMs) on the execution layer for complex computations. + +Cartesi's architecture specializes in app-specific rollups(appchains). Each dApp has its dedicated rollup for off-chain computation, enhancing scalability and performance. + + diff --git a/cartesi-rollups_versioned_docs/version-2.0/dapp-arch.png b/cartesi-rollups_versioned_docs/version-2.0/dapp-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..c350efbba995251ae0eac9a8fe81865375c57825 GIT binary patch literal 86993 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⪚-MtcPp(!7hJ7j3@PogAp=T(@Hs1@wjtZdNA{>x2*m zajtTt(0>oM3KLMv67=GMFb9FXEAxBoghygZ^v(4u`HLOs1$v)|yjIJq+N+L0r5ikv z{!@6h5!~XD1YOdVxH>W@c=aCFz3;|)?@2HP7j#Y%9J)7&+K4i$KPr2Ht&LGdsr;mq z5rqje`;hu-J}j7W2k>9Fr5b&IiW@ydxttbH;3=^vARD^JH9J`HwZpV-Q;lwETM*E~ zQc%m!z*m>8U4D7c>FjKnLNl!BU--1|jAaI7h_jlP?i3;5Qp=~hpUZG`fftmv8$&R9e(l)IC+ zNMb!MeZJWcE16=V@_VeSwYL)pQin4l)(rU#!7MZYo!X0)g>e;(?$$vw^bqz0Sp)_H ze(-D^L@wZ|k+X*`OS-HyWZtcM{>X{r_w7r^pD~J{7Y}YcWDa)nBW5@8X5sEcGPoiW zW2d2dN=4{F&CfGlvW}a-gh~D9YA~Ojxl_llEXA;k#ibCi%+3KZThjw;h?&D+(Db~~ zMtlZ=n<3b=v1L(7S0P@KAh@XSm0;Y4xZc88+x}I<-|eq9A(L|EStsClHQLMh&%1v! zK^?P?Wqj8{Wu#O4dU7)YLt&Ln=iy3antpv}e;*rC3^A?)1&5)cQv~U6k#-~#8vOqY zR8Za4Tb>!1*Hp{5jLTkZz2m(i@Z%K~c2tI!%t3pk3>rd~sARQ*=2`&^p*^tT4ucL( zn9SI^aa+>kN0+Ko6Kn|+syX~hxVsRhaSt z^|zKkV%ndt)7k{TgqrKLh#I3J@&F1%@eq!rlW!|LDI0)uE#QnqXlp9w_sdgPj0YRwkI{|AgEoMhkWgDvLQ*J0-QwyLu}}C3I2K6auXt|@6IK9oK$LuNs3^1s98sP1>fL?!_!pOB*ud|`V_ z3s_V2o8mJeEGi=qcmqNy#ji4U z$n6}MJ083LB2)YEt7j!3soQxI|9?;F#)Ik~=^yytle%262WE7n+wjR>UwQLY(QhE{ z`NlW!*F^Sj%Ru+yk(8Eu%AWXN_u%hF?fAP=^gODTh}G7C126J|Nj98zctMO literal 0 HcmV?d00001 diff --git a/cartesi-rollups_versioned_docs/version-2.0/deployment/introduction.md b/cartesi-rollups_versioned_docs/version-2.0/deployment/introduction.md new file mode 100644 index 00000000..2e1b63be --- /dev/null +++ b/cartesi-rollups_versioned_docs/version-2.0/deployment/introduction.md @@ -0,0 +1,53 @@ +--- +id: introduction +title: Introduction +resources: + - url: https://github.com/cartesi/rollups-contracts/tree/v1.4.0/onchain/rollups/deployments + title: Supported networks + +--- + +Applications built on Cartesi Rollups are intended to be deployed to public blockchains so users can access them. This can be done by taking advantage of a cloud-based infrastructure. + +Deploying a Cartesi dApp involves two steps: deploying a smart contract that defines your dApp on-chain and then instantiating a node that runs the application’s intended backend logic. + +To facilitate the instantiation of such nodes, Cartesi provides an infrastructure for quickly getting them running in the cloud so the node can be run 24/7. This server will expose a single port to the internet so client applications can communicate with the node. + +The Cartesi rollups node is distributed as a Docker image. Any popular cloud provider, like AWS, GCP, Azure, Digital Ocean, or Linode, can run docker containers and hence can be used to host the rollups node. + +## Deployment process + +The deployment of an application involves building a Cartesi machine and deploying a smart contract to a supported network. + +The `cartesi build` command produces the Cartesi genesis machine, which contains a hash representing the application and its initial state. + +After deployment, any changes to the application code will generate a different hash and, hence, require another deployment. + +The smart contract that represents the application on the base layer can be deployed using the [`CartesiDAppFactory`](../rollups-apis/json-rpc/application-factory.md) smart contract. + +There are two methods to deploy an application: + +1. [Self-hosted deployment](../deployment/self-hosted.md): Deploy the application node using your infrastructure. + +2. Third-party service provider: Outsource running the application node to a service provider. + +:::caution important +Deployment with a third-party service provider is under development and will be available in a future release. +::: + +## Supported networks + +As stated above, the first step in deploying a new Cartesi dApp to a blockchain requires creating a smart contract on that network that uses the Cartesi Rollups smart contracts. Cartesi has already deployed the Rollups smart contracts to several networks for convenience. + +The table below shows the list of all [networks that are currently supported](https://github.com/cartesi/rollups-contracts/tree/v1.4.0/onchain/rollups/deployments) in the latest release: + +| Network Name | Chain ID | +| ---------------- | -------- | +| Ethereum Mainnet | 1 | +| Sepolia | 11155111 | +| Optimism | 10 | +| Optimism Sepolia | 11155420 | +| Arbitrum | 42161 | +| Arbitrum Sepolia | 421614 | +| Base | 8453 | +| Base Sepolia | 84532 | diff --git a/cartesi-rollups_versioned_docs/version-2.0/deployment/self-hosted.md b/cartesi-rollups_versioned_docs/version-2.0/deployment/self-hosted.md new file mode 100644 index 00000000..d4ce4914 --- /dev/null +++ b/cartesi-rollups_versioned_docs/version-2.0/deployment/self-hosted.md @@ -0,0 +1,171 @@ +--- +id: self-hosted +title: Self-hosted deployment +resources: + - url: https://www.codecademy.com/article/installing-and-using-postgresql-locally + title: Installing and Using PostgreSQL Locally + - url: https://docs.digitalocean.com/products/databases/postgresql/how-to/create/ + title: How to Create PostgreSQL Database Clusters + - url: https://www.amazonaws.cn/en/getting-started/tutorials/deploy-docker-containers/ + title: How to Deploy Docker Container - AWS + - url: https://www.digitalocean.com/solutions/docker-hosting + title: Deploy Docker Containers on Digital Ocean + - url: https://docs.docker.com/reference/cli/docker/image/tag/ + title: Docker Tag +--- + +The self-hosted deployment involves running your infrastructure locally or on a remote cloud server to host your application node. + +Here are the requirements: + +- Wallet with sufficient funds on the chosen network. +- A cloud server +- A PostgreSQL database +- A web3 provider for interacting with the selected network + +## Initiating deployment + +1. Compile your application into RISC-V architecture and consequently build a Cartesi machine by running: + + ```shell + cartesi build + ``` + +2. Run the command below to start the deployment process. + + ```shell + cartesi deploy --hosting self-hosted --webapp https://sunodo.io/deploy + ``` + + The command generates a Docker image containing the rollups node and machine. You will be redirected to a web application to deploy the necessary smart contracts. + + ![img](../../../static/img/v1.3/deploy.png) + +## Deploying the contracts + +On the deploy web interface, the hash of the Cartesi machine will be automatically configured. + +1. Connect your wallet to set the application chain’s base layer and deployer account. + +2. Create a wallet specifically for Cartesi rollups node transactions. The Cartesi rollups node will use this wallet to submit transactions to the base layer. Paste the public address of this wallet. + + :::note create a wallet + You can use [Cast](https://book.getfoundry.sh/reference/cast/cast-wallet-new-mnemonic) to create a new wallet by running `cast wallet new-mnemonic --words 24`. For increased security, you can use a wallet managed by [AWS KMS](https://aws.amazon.com/blogs/database/part1-use-aws-kms-to-securely-manage-ethereum-accounts/). + ::: + +3. After successful deployment, the node’s configuration is presented in a `.env` file and a `.toml` format. This config file includes the addresses of the deployed smart contracts and information on the base layer chain. + + You will need the `.env` when [hosting the node on the cloud provider](./self-hosted.md/#hosting-on-a-cloud-provider) and the `.toml` file when [hosting on Fly.io](./self-hosted.md/#hosting-on-flyio). + + + + +## Hosting the node + +You’ll need a server to host the application node and keep it operational 24/7. This server will expose a single port for client access to the rollups node APIs through GraphQL or Inspect requests. + + +The server requirements depend on your application's expected usage and the specifications of the Cartesi machine you're using, such as its RAM size and total capacity. Consider a minimum of 8GB of RAM, and adjust as needed. + + +The Cartesi rollups node is distributed as a Docker image. Any popular cloud provider, like AWS, GCP, Azure, Digital Ocean, or Linode, can run docker containers and hence can be used to host the rollups node. + +Alternatively, you can use a service like [Fly.io](https://fly.io/) to deploy your application node. + +### Hosting on a cloud provider + +1. Download the `.env` configuration file into the root directory of your application. + +1. Obtain HTTP and WebSocket URLs from a web3 provider for the `CARTESI_BLOCKCHAIN_HTTP_ENDPOINT` and `CARTESI_BLOCKCHAIN_WS_ENDPOINT` variables. + + Here is an example from [Alchemy](https://dashboard.alchemy.com/): + + ![img](../../../static/img/v1.3/alchemy.png) + + :::caution important + The web3 provider URLs and wallet mnemonic are sensitive information that can compromise your application and funds. You should keep it **secure** and **private** at all times. + ::: + +1. Create a PostgreSQL database and configure the connection string in the `.env` file. + + The connection string for a PostgreSQL database must be configured at the `CARTESI_POSTGRES_ENDPOINT` variable. + + You can use any PostgreSQL database, whether managed by a cloud provider or set up on your local infrastructure. The key configuration required is the connection string, encompassing the database URL, username, password, and name. The node necessitates a PostgreSQL database to store the application state, which is accessible via the [GraphQL API](../rollups-apis/graphql/basics.md). + +1. With all the config variables set, here is how you can run the node on your local machine: + + ``` + docker run --env-file -p 10000:10000 + ``` + + Replace `` and `` with the `.env` file name and `sha256` hash of your Cartesi machine. + + The image can be tagged using [docker tag](https://docs.docker.com/reference/cli/docker/image/tag/). + + You can deploy your node with a cloud provider or use any managed container solution, like Kubernetes. + +### Hosting on fly.io + +Fly.io is a platform where you can conveniently deploy applications packaged as Docker containers. + +:::caution important +If deploying to Fly.io from macOS with Apple Silicon, create a Docker image for `linux/amd64` with: `cartesi deploy build --platform linux/amd64` +::: + +1. [Install the flyctl CLI](https://fly.io/docs/hands-on/install-flyctl/) + +1. [Create an account](https://fly.io/docs/hands-on/sign-up-sign-in/) + +1. Create an application: + + ```shell + $ fly app create + New app created: + ``` + +1. Create a Postgres database application: + + ```shell + fly postgres create --initial-cluster-size 1 --name -database --vm-size shared-cpu-1x --volume-size 1 + ``` + + Save the connection string provided by the command output. + +1. Attach database to the node application: + + ```shell + fly postgres attach -database -a + ``` + +1. Download `fly.toml` file from deploying the contracts and move it to your application directory: + + ![deploy self-hosted config](../../../static/img/v1.3/fly.png) + +1. Edit the `fly.toml` file to change all occurrences of `` to the name of your application + +1. Create secrets for sensitive configuration with the actual values: + + ```shell + fly secrets set -a CARTESI_BLOCKCHAIN_HTTP_ENDPOINT= + fly secrets set -a CARTESI_BLOCKCHAIN_WS_ENDPOINT= + fly secrets set -a CARTESI_AUTH_MNEMONIC=`` + fly secrets set -a CARTESI_POSTGRES_ENDPOINT= + ``` + + Set value of the `connection_string` as provided by step 4. + +1. Deploy the node: + + Tag the image produced at the beginning of the process and push it to the Fly.io registry: + + ```shell + flyctl auth docker + docker image tag registry.fly.io/ + docker image push registry.fly.io/ + fly deploy -a + ``` + + diff --git a/cartesi-rollups_versioned_docs/version-2.0/development/asset-handling.md b/cartesi-rollups_versioned_docs/version-2.0/development/asset-handling.md new file mode 100644 index 00000000..0e6b004e --- /dev/null +++ b/cartesi-rollups_versioned_docs/version-2.0/development/asset-handling.md @@ -0,0 +1,69 @@ +--- +id: asset-handling +title: Asset handling +resources: + - url: https://www.udemy.com/course/cartesi-masterclass/ + title: The Cartesi dApp Developer Free Course +--- + +Assets exist on the base layer, where they have actual meaning and value. + +As with any execution layer solution, a Cartesi dApp that wants to manipulate assets needs a secure way of "teleporting" the assets from the base layer to the execution layer and then a way to "teleport" them back to the base layer. + +Currently, Cartesi Rollups support the following types of assets: + +- [Ether (ETH)](../rollups-apis/json-rpc/portals/) +- [ERC-20](../rollups-apis/json-rpc/portals/ERC20Portal.md) +- [ERC-721](../rollups-apis/json-rpc/portals/ERC721Portal.md) +- [ERC-1155 Single](../rollups-apis/json-rpc/portals/ERC1155SinglePortal.md) +- [ERC-1155 Batch](../rollups-apis/json-rpc/portals/ERC1155BatchPortal.md) + +![img](../../../static/img/v1.3/assets.jpg) + +## Deposits + +Portals enable the safe transfer of assets from the base layer to the execution layer. Users authorize portals to deduct assets from their accounts and initiate transfers to dApps. + +When an asset is deposited, it is on the base layer but gains a representation in the execution layer. The corresponding Portal contract sends an input via the `InputBox` contract describing the type of asset, amount, and some data the depositor might want the dApp to read. The off-chain machine will then interpret and validate the input payload. + +Deposit input payloads are always specified as packed ABI-encoded parameters, as detailed below. + +![img](../../..//static/img/v1.3/abi.jpg) + +### ABI encoding for deposits + + +| Asset | Packed ABI-encoded payload fields | Standard ABI-encoded payload fields | +| :---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------- | +| Ether |
  • `address sender`,
  • `uint256 value`,
  • `bytes execLayerData`
| none | +| ERC-20 |
  • `bool success`,
  • `address token`,
  • `address sender`,
  • `uint256 amount`,
  • `bytes execLayerData`
| none | +| ERC-721 |
  • `address token`,
  • `address sender`,
  • `uint256 tokenId`,
  • standard ABI-encoded fields...
|
  • `bytes baseLayerData`,
  • `bytes execLayerData`
| +| ERC-1155 (single) |
  • `address token`,
  • `address sender`,
  • `uint256 tokenId`,
  • `uint256 value`,
  • standard ABI-encoded fields...
|
  • `bytes baseLayerData`,
  • `bytes execLayerData`
| +| ERC-1155 (batch) |
  • `address token`,
  • `address sender`,
  • standard ABI-encoded fields...
|
  • `uint256[] tokenIds`,
  • `uint256[] values`,
  • `bytes baseLayerData`,
  • `bytes execLayerData`
| + + +## Withdrawing assets + +Users can deposit assets to a Cartesi dApp, but only the dApp can initiate withdrawals. When a withdrawal request is made, it’s processed and interpreted off-chain by the Cartesi Machine running the dApp’s code. Subsequently, the Cartesi Machine creates a voucher containing the necessary instructions for withdrawal, which is executable when an epoch has settled. + +Vouchers are crucial in allowing dApps in the execution layer to interact with contracts in the base layer through message calls. They are emitted by the off-chain machine and executed by any participant in the base layer. Each voucher includes a destination address and a payload, typically encoding a function call for Solidity contracts. + +The dApp’s off-chain layer often requires knowledge of its address to facilitate on-chain interactions for withdrawals, for example: `transferFrom(sender, recipient, amount)`. In this case, the sender is the dApp itself. + +By calling [`relayDAppAddress()`](../rollups-apis/json-rpc/relays/relays.md), function of the `DAppAddressRelay` contract, it adds the dApp’s address as a new input for the Cartesi dApp to process. Next, the off-chain machine uses this address to generate a voucher for execution at the [`executeVoucher()`](../rollups-apis/json-rpc/application.md/#executevoucher) function of the `CartesiDApp` contract. + +:::note epoch length +By default, Cartesi nodes close one epoch every 7200 blocks. You can [manually set the epoch length](./cli-commands.md/#run) to facilitate quicker asset-handling methods. +::: + +Here are the function signatures used by vouchers to withdraw the different types of assets: + +| Asset | Destination | Function signature | +| :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------ | +| Ether | dApp contract | `withdrawEther(address,uint256)` [:page_facing_up:](../rollups-apis/json-rpc/application.md/#withdrawether) | +| ERC-20 | Token contract | `transfer(address,uint256)` [:page_facing_up:](https://eips.ethereum.org/EIPS/eip-20#methods) | +| ERC-20 | Token contract | `transferFrom(address,address,uint256)` [:page_facing_up:](https://eips.ethereum.org/EIPS/eip-20#methods) | +| ERC-721 | Token contract | `safeTransferFrom(address,address,uint256)` [:page_facing_up:](https://eips.ethereum.org/EIPS/eip-721#specification) | +| ERC-721 | Token contract | `safeTransferFrom(address,address,uint256,bytes)` [:page_facing_up:](https://eips.ethereum.org/EIPS/eip-721#specification) | +| ERC-1155 | Token contract | `safeTransferFrom(address,address,uint256,uint256,data)` [:page_facing_up:](https://eips.ethereum.org/EIPS/eip-1155#specification) | +| ERC-1155 | Token contract | `safeBatchTransferFrom(address,address,uint256[],uint256[],data)` [:page_facing_up:](https://eips.ethereum.org/EIPS/eip-1155#specification) | diff --git a/cartesi-rollups_versioned_docs/version-2.0/development/building-the-application.md b/cartesi-rollups_versioned_docs/version-2.0/development/building-the-application.md new file mode 100644 index 00000000..fbac5190 --- /dev/null +++ b/cartesi-rollups_versioned_docs/version-2.0/development/building-the-application.md @@ -0,0 +1,53 @@ +--- +id: building-the-application +title: Building the application +--- + +“Building” in this context compiles your application into RISC-V architecture and consequently builds a Cartesi machine containing your application. This architecture enables computation done by your application to be reproducible and verifiable. + +With the Docker engine running, change the directory to your application and build by running: + +```shell +cartesi build +``` + +The successful execution of this step will log this in your terminal: + +```shell + . + / \ + / \ +\---/---\ /----\ + \ 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 +INFO:__main__:HTTP rollup_server url is http://127.0.0.1:5004 +INFO:__main__:Sending finish + +Manual yield rx-accepted (0x100000000 data) +Cycles: 2767791744 +2767791744: b740d27cf75b6cb10b1ab18ebd96be445ca8011143d94d8573221342108822f5 +Storing machine: please wait +Successfully copied 288MB to /Users/michaelasiedu/Code/calculator/python/.cartesi/image +``` +## Memory + +To change the default memory size for the Cartesi Machine, you can personalize it by adding a specific label in your Dockerfile. + +The line below lets you define the memory size in megabytes (MB): + +```dockerfile +LABEL io.cartesi.rollups.ram_size=128Mi +``` + +:::note environment variables +You can create a `.cartesi.env` in the project's root and override any variable controlling the rollups-node. +::: \ No newline at end of file diff --git a/cartesi-rollups_versioned_docs/version-2.0/development/cli-commands.md b/cartesi-rollups_versioned_docs/version-2.0/development/cli-commands.md new file mode 100644 index 00000000..fe3f5a70 --- /dev/null +++ b/cartesi-rollups_versioned_docs/version-2.0/development/cli-commands.md @@ -0,0 +1,151 @@ +--- +id: cli-commands +title: CLI commands +--- + + +The Cartesi CLI provides essential tools for developing, deploying, and interacting with Cartesi applications. This page offers a quick reference to available commands and usage. + +## Basic Usage +To use any command, run: + +```bash +cartesi [COMMAND] +``` + +For detailed help on a specific command, use: + +```bash +cartesi help [COMMAND] +``` + +## Core Commands + +| Command | Description | +|---------|-------------| +| `create` | Create a new application | +| `build` | Build the application | +| `run` | Run the application node | +| `send` | Send input to the application | +| `deploy` | Deploy application to a live network | +| `address-book` | Prints addresses of deployed smart contracts | +| `clean` | Clean build artifacts of the application | +| `doctor` | Verify the minimal system requirements | +| `hash` | Print the image hash generated by the build command | +| `shell` | Start a shell in the Cartesi machine of the application | + + +--- +### `create` + +Create a new Cartesi application from a template. + +#### Usage: +```bash +cartesi create NAME --template [--branch ] +``` + +#### Flags: + +- `--template=