如何創建你的第一個 Cartesi DApp
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,同時保持強大的基礎層安全保證。
免責聲明
本文章僅供一般參考和信息分享之用,不構成法律、金融或投資建議。本信息的准確性和完整性不受保證,也不應被視為對特定情況的建議。讀者應自行進行獨立的研究和咨詢,以做出任何決策。作者和相關機構對任何因依賴本信息而產生的損失或損害概不負責。在做出任何金融或投資決策之前,強烈建議咨詢專業人士以獲取個性化的建議。
虛擬貨幣屬於高風險投資品,在做出投資決策前,請咨詢相關監管機構是否存在投資虧損風險。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC
7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC一個引...
悅盈:比特幣68000的空完美落地反彈繼續看跌 以太坊破前高看回撤
一個人的自律中,藏着無限的可能性,你自律的程度,決定着你人生的高度。 人生沒有近路可走,但你走的每...