如何創建你的第一個 Cartesi DApp

2023-09-16 00:09:38

Cartesi Rollups 是一種具有 Linux 運行時的應用特定 Rollups 解決方案。它使您能夠創建可驗證、可重復和透明的計算。我們可以以兩種方式可視化 Cartesi:區塊鏈(鏈上)和節點(鏈下)視角。

鏈下視角包括 Cartesi Machine 和客戶端應用程序。Cartesi Machine 是運行在 Linux 操作系統上的 RISC-V 模擬器。另一方面,鏈上視角包括 Rollups 智能合約和 DApp 智能合約。

在本教程中,我們將展示這兩種視角如何相互結合。我們將通過使用 Python 構建一個 ASCII 畫布(繪圖板)來實現這一點。區塊鏈將是我們的畫布。

目標是讓每個用戶(以太坊地址)能夠將他們繪制的 ASCII 名字添加到 Cartesi DApp。

讓我們开始吧!

先決條件

首先,讓我們列出創建和運行我們的應用所需的所有工具:

1、Python >= 3.1

2、用於繪制 ASCII 藝術的 Python 庫。您可以使用以下命令進行安裝:

3、Web3.py 庫。您可以使用以下命令進行安裝:

4、Docker。如果您尚未安裝,可以參考特定操作系統的文檔進行安裝。

概述

如前所述,該應用程序是一個簡單的項目,將給定的輸入轉換為 ASCII 藝術。以下是在終端上生成的 ASCII 藝術的示例輸出:

我們可以從前端和後端的角度來看待我們的應用程序。前端是我們用於向部署的 InputBox 合約發送數據(例如姓名)的部分。

節點會監聽區塊鏈上的變化,然後通知我們應用程序的後端。在執行 DApp 邏輯之後,我們可以將結果(輸出)發布到區塊鏈上。

我們的後端在 Cartesi 節點內運行;它是我們的智能合約,並且像智能合約一樣運行。該節點嵌入了 Cartesi Machine,實際運行後端邏輯。

設置开發環境

首先,克隆該代碼庫:

執行命令:

讓我們解釋剛剛下載的文件。

docker-compose.yml:該文件包含組成 Cartesi 節點的 Docker 鏡像。一個節點包括多個組件,包括 State-fold 服務器、服務器管理器、PostgreSQL 數據庫等。如果您想了解節點組件的架構,可以參考此文檔。

docker-compose-host.yml:此文件設置我們的服務器管理器以在主機模式下使用。

frontend.py:該文件向 InputBox 合約發送一個名稱。

backend.py:該文件處理請求並發送回響應。對於我們的應用程序,目標是簡單地注冊後端已收到該名稱。

因此,我們將通過發送通知來推進我們 DApp 的狀態。

現在,讓我們在主機模式下運行开發環境:

機模式意味着您可以在本地計算機上運行後端,就像您通常運行其他應用程序一樣(而不是在 Cartesi 節點中運行)。這對於調試和當然用於我們現在正在進行的實驗等目的非常有幫助。

運行上述命令將啓動本地的 hardhat 環境,並實例化一個 Cartesi 節點。它將在不同端口上啓動多個服務,例如:4000、5004、8545。您可以查看 Docker 文件以了解這些端口對應的服務。

您需要查看終端上的輸出,以獲取我們將在 frontend.py 文件中使用的合約地址。對我們來說,有兩個特定的合約是感興趣的:

InputBox 合約地址:0x5a723220579C0DCb8C9253E6b4c62e572E379945

CartesiDApp 合約地址:0x142105FC8dA71191b3a13C738Ba0cF4BC33325e2

過一段時間後,您應該會看到如下的連續區塊日志:

每個 Cartesi DApp 都有一個已部署的 CartesiDApp 合約。當向 Cartesi Rollups 智能合約發送數據時,我們稍後會看到需要該合約的地址。此地址將特定數據輸入與特定的 Cartesi DApp 關聯起來。

注意:Hardhat 在運行時不會跟蹤您進行的先前更改。因此,您需要在每次啓動开發環境時檢查合約地址。

前端:與 InputBox 合約進行交互

Cartesi 的關鍵設計特性之一是計算是可重復的。如果兩個節點對輸入數據有不同意見,將無法解決此衝突。為確保數據一致性,所有 Cartesi DApp 需要通過 Cartesi Rollups 合約提交數據以推進其狀態。

為此,我們需要與已部署的 InputBox 合約進行交互。該合約接受相應 CartesiDApp 合約的任意數據。它有 addInput 函數,該函數接受兩個輸入:(1)CartesiDApp 的地址和(2)要發送的數據:

現在,打开一個新的終端窗口並運行 frontend.py 文件。這將調用 addInput 方法,將 ASCII 文本(姓名)發送到我們的 CartesiDApp 合約。

請注意,我們發送的 ASCII 姓名不帶有前端.py 中 Python art 庫使用的格式。我們只想保持簡單。我們假設發送的文本(姓名)使用庫的默認格式。

在我們的後端,State-Fold 服務器(Cartesi 節點的一個組件)監聽區塊鏈中的狀態變化,並將其報告給我們的鏈下機器。然後,我們可以進行一些處理並將結果提交回區塊鏈。

後端:推進應用程序狀態

現在我們的 "前端" 已成功將其輸入添加到區塊鏈,我們現在可以從區塊鏈獲取數據並處理它。這就是 Cartesi Machine 發揮作用的地方 — 它是我們的執行層。

由於我們在主機模式下運行,我們的後端將在我們的本地環境中處理。

在一個新的終端窗口中,讓我們在 Python 虛擬環境中運行 backend.py 文件:

您應該會看到日志,指示應用程序正在等待請求以推進其狀態。當姓名到達後端時,將顯示交易的詳細信息。查看下面的示例圖像:

負載攜帶了姓名。將上面的十六進制負載(0x4a656c6c7966697368)轉換為 ASCII 將給您名字 Jellyfish。您可以嘗試不同的名字並觀察輸出。

如果您已經完成了與 ollups SDK 環境的工作,您可以使用以下命令優雅地停止 Docker 容器:

總結

在本教程中,您已經了解了如何使用 Cartesi Rollups SDK 構建您的 Cartesi 應用程序。現在,輪到您實現自己的 DApp 了。

我們迫不及待想看到您創造的成果!

關於 Cartesi

Cartesi 是一種特定於應用程序的匯總協議,具有運行 Linux 發行版的虛擬機,為 DApp 开發人員創造了更豐富、更廣泛的設計空間。

 Cartesi Rollups 提供模塊化擴展解決方案,可部署為 L2、L3 或主權 Rollups,同時保持強大的基礎層安全保證。

免責聲明 

本文章僅供一般參考和信息分享之用,不構成法律、金融或投資建議。本信息的准確性和完整性不受保證,也不應被視為對特定情況的建議。讀者應自行進行獨立的研究和咨詢,以做出任何決策。作者和相關機構對任何因依賴本信息而產生的損失或損害概不負責。在做出任何金融或投資決策之前,強烈建議咨詢專業人士以獲取個性化的建議。

虛擬貨幣屬於高風險投資品,在做出投資決策前,請咨詢相關監管機構是否存在投資虧損風險。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

推薦文章

btc日內再次下跌 短线應當如何處理?

盡管以太坊現貨ETF獲批是個好消息,但市場反應卻不如預期。在消息公布後,以太坊價格出現了小幅下跌,...

加密蓮
66 1個月前

7月23日、BTC(合約)ETH(合約)行情分析及操作策略

昨日收益還是不錯的,日內給出的現價空單分別止盈我們目標點位,恭喜跟上的朋友喫肉。時間一晃到月底了,...

倪老師
66 1個月前

幣圈院士:血與淚的教訓!交易者為何總是撞死在同一棵樹上?

幣圈院士談。交易市場中的幾種“死法” 在幣圈市場鱗次櫛比的海洋,風起雲湧,時常讓人感到驚手不及。在...

幣圈院士
58 1個月前

7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC

7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC一個引...

168超神
65 1個月前

悅盈:比特幣68000的空完美落地反彈繼續看跌 以太坊破前高看回撤

一個人的自律中,藏着無限的可能性,你自律的程度,決定着你人生的高度。 人生沒有近路可走,但你走的每...

我是周悅盈
56 1個月前

btc完美盈利 晚間波動較大注意

昨日btc空單完美給到,最大化走出一千七百點空間~ btc: 日內开盤下跌繼續測試66000一线,...

加密蓮
59 1個月前