開發 DApp 前需要思考的 4 個問題

買賣虛擬貨幣
在上一期文章「Forge 框架簡介 | ArcBlock 部落格」裡,我和大家介紹了 ArcBlock 提供的區塊鏈開發工具 Forge Framework (Forge 開發框架)[1]。它極大地減小了區塊鏈開發的難度,使開發者可以輕鬆方便地發鏈和開發去中心化應用(DApp)。這一期,我將和大家分享我的 DApp 創意和方案,以及我透過實踐總結的經驗,即開發 DApp 前需要思考的四個問題。另外,我會和大家交流一下我目前 DApp 的開發進度和經驗,包括如何定義一個交易協議。

最近,我突發奇想,想做一個和自動販賣機有關的去中心化應用。簡單來說,它是自動販賣機的信任賬本。我們知道,自動販賣機是用來賣東西的。既然賣東西,就需要賬本。那為什麼是信任賬本呢? 因為運營一臺自動販賣機,往往需要多方的參與。在我的應用場景裡,不但有販賣機的運營方,還有販賣機的製造方,商品的供貨方,以及場地的租賃方。並且,每一方都會定期有相應的利潤分成。

因此,我需要用一個大家都信任的方式來進行記賬。

那為什麼不用現有的資料庫呢? 因為資料庫裡的資料容易被篡改。但是區塊鏈就不一樣了。因為,區塊鏈從本質上來說,就是一種分散式的、不可篡改、高通明度的記賬系統,它能夠提供一種低成本的信任方式,就是機器信任。因為這種信任機制,我們能保證我們的賬本具有真實性,確保每一方都能公正的獲得屬於自己的利潤。因此,我們需要區塊鏈來給我們提供一個信任賬本。

上面的討論,其實是在回答我們開發 DApp 前需要思考清楚的第一個問題 —— 為什麼要用區塊鏈? 區塊鏈這個概念雖然越來越火,但我們不可以盲目跟風。因為我們目前已經有很多完善、成熟的技術可以非常方便的解決了我們生活中的問題。所以,我們一定要定位清楚,我們的應用為什麼要用區塊鏈。而像我之前和大家提到的,我的自動販賣機專案需要區塊鏈來解決信任問題,並且這個問題只有區塊鏈才能很輕鬆地解決。

第二個問題是,我的 DApp 哪些部分需要用區塊鏈,哪些部分要用傳統的方式? 也就是說,我們要構思清楚哪些部分我們要放在鏈上,哪些要放在鏈下。因為目前區塊鏈的開發成本比較大,因此好鋼用在刀刃下,我們要將區塊鏈用於最關鍵的部分,而其他事情就用傳統的方法來做。就我的專案而言,因為我需要區塊鏈來保證自動販賣機賬本的不可篡改性,所以只需要在鏈上完成記賬,也就是記錄資料這個步驟。至於賬單如何生成、如何呈現給相關方,就透過鏈下的方式來解決。

第三個問題,我需不需要為我的 DApp 發鏈? 還是說,我要在原有的鏈上開發應用,或者考慮跨鏈?這個問題取決於我們對專案的設計和規劃。因為我這是一個全新的專案,我打算用自己的鏈來開發。

最後一個問題,我需要建立錢包嗎? 在 Forge 裡,錢包的概念就和賬戶一樣,是鏈上所有行為的發起方,或者是接收方。另外我多說一句,我們 Forge 裡所有行為都稱為「transaction」[2],英文直譯是「交易」,意譯的話,可理解為事務。它是鏈上最小的活動單位。在我的販賣機專案裡,我希望透過販賣機的賬戶在鏈上傳送賬單資訊,同時相關方的賬本里會有這筆賬單的記錄。因此,我需要為每一臺販賣機,和每一位相關方建立錢包賬戶。

思考完以上四個問題,我們就可以開始為自己的 DApp 建模了。我來和大家介紹下我的模型。我的自動販賣機 DApp 共由以下三個部分組成:

•賬單的生成,
•賬單的記錄,
•以及,賬單的呈現。

賬單的生成是指模擬現有的販賣機系統,隨機生成賬單資訊。而賬單的記錄是透過販賣機的錢包賬戶將這些資料傳送到鏈上。最後,賬單的呈現是透過調取鏈上的資料,在鏈下整合後透過 pc 端平臺來展示。因此,我第一部分和第三部分主要依賴鏈下的技術,而第二部分--賬單的記錄,就是鏈上的了。這部分通常我們最不熟悉的區域,也是我上週主要在做的部分。

前面我們提到,鏈上的一切行為都叫作交易。建立錢包算一個交易,轉賬也算一個交易。那我們是如何定義一個交易的呢?交易定義是透過 transaction protocol[3],交易協議,或者說是智慧合約,來完成的。Forge 開發框架為開發者提供了很多常見的交易協議,例如錢包的建立、轉賬、交換資產等等。同時 Forge 開發框架簡化了編寫、部署交易協議的過程,透過提供模版化流程讓開發者可以輕鬆定義新的交易協議。

為了滿足我 DApp 的需求,我做了一個新的交易協議,叫「合併交易」。這個交易滿足了我記賬的要求:首先,當販賣機發起這個「合併交易」時,該交易會為鏈上傳送商品的資訊,例如:商品的名稱、價格、消費時間,以及商家的資訊,例如:運營方、製造方、供貨方,和場地方。而且,「合併交易」傳送成功後,不但這些資訊會永遠地記錄在鏈上,同時,相關方的錢包賬戶裡會更新相應的利潤金額。這個就是我對「合併交易」的定義了。

確認好了交易協議的定義,接下來就是寫碼的工作了!下週,我會向大家展示透過 Forge 開發框架制定交易協議的編碼過程,以及如何用 Python 來完成我剩下的鏈下部分。

References

[1] Forge Framework (Forge 開發框架): https://www.arcblock.io/en/forge-sdk
[2] 「transaction」: https://docs.arcblock.io/forge/latest/txs/#categories
[3] transaction protocol: https://docs.arcblock.io/forge/latest/intro/concepts.html#transactions

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;