為什么開發(fā)DApp需要用到區(qū)塊鏈技術(shù)
最近,我突發(fā)奇想,想做一個和自動販賣機有關(guān)的去中心化應(yīng)用。簡單來說,它是自動販賣機的信任賬本。我們知道,自動販賣機是用來賣東西的。既然賣東西,就需要賬本。那為什么是信任賬本呢? 因為運營一臺自動販賣機,往往需要多方的參與。在我的應(yīng)用場景里,不但有販賣機的運營方,還有販賣機的制造方,商品的供貨方,以及場地的租賃方。并且,每一方都會定期有相應(yīng)的利潤分成。
因此,我需要用一個大家都信任的方式來進行記賬。
那為什么不用現(xiàn)有的數(shù)據(jù)庫呢? 因為數(shù)據(jù)庫里的數(shù)據(jù)容易被篡改。但是區(qū)塊鏈就不一樣了。因為,區(qū)塊鏈從本質(zhì)上來說,就是一種分布式的、不可篡改、高通明度的記賬系統(tǒng),它能夠提供一種低成本的信任方式,就是機器信任。因為這種信任機制,我們能保證我們的賬本具有真實性,確保每一方都能公正的獲得屬于自己的利潤。因此,我們需要區(qū)塊鏈來給我們提供一個信任賬本。
上面的討論,其實是在回答我們開發(fā) DApp 前需要思考清楚的第一個問題 —— 為什么要用區(qū)塊鏈? 區(qū)塊鏈這個概念雖然越來越火,但我們不可以盲目跟風(fēng)。因為我們目前已經(jīng)有很多完善、成熟的技術(shù)可以非常方便的解決了我們生活中的問題。所以,我們一定要定位清楚,我們的應(yīng)用為什么要用區(qū)塊鏈。而像我之前和大家提到的,我的自動販賣機項目需要區(qū)塊鏈來解決信任問題,并且這個問題只有區(qū)塊鏈才能很輕松地解決。
第二個問題是,我的 DApp 哪些部分需要用區(qū)塊鏈,哪些部分要用傳統(tǒng)的方式? 也就是說,我們要構(gòu)思清楚哪些部分我們要放在鏈上,哪些要放在鏈下。因為目前區(qū)塊鏈的開發(fā)成本比較大,因此好鋼用在刀刃下,我們要將區(qū)塊鏈用于最關(guān)鍵的部分,而其他事情就用傳統(tǒng)的方法來做。就我的項目而言,因為我需要區(qū)塊鏈來保證自動販賣機賬本的不可篡改性,所以只需要在鏈上完成記賬,也就是記錄數(shù)據(jù)這個步驟。至于賬單如何生成、如何呈現(xiàn)給相關(guān)方,就通過鏈下的方式來解決。
第三個問題,我需不需要為我的 DApp 發(fā)鏈? 還是說,我要在原有的鏈上開發(fā)應(yīng)用,或者考慮跨鏈?這個問題取決于我們對項目的設(shè)計和規(guī)劃。因為我這是一個全新的項目,我打算用自己的鏈來開發(fā)。
最后一個問題,我需要創(chuàng)建錢包嗎? 在 Forge 里,錢包的概念就和賬戶一樣,是鏈上所有行為的發(fā)起方,或者是接收方。另外我多說一句,我們 Forge 里所有行為都稱為「transaction」[2],英文直譯是「交易」,意譯的話,可理解為事務(wù)。它是鏈上最小的活動單位。在我的販賣機項目里,我希望通過販賣機的賬戶在鏈上發(fā)送賬單信息,同時相關(guān)方的賬本里會有這筆賬單的記錄。因此,我需要為每一臺販賣機,和每一位相關(guān)方創(chuàng)建錢包賬戶。
思考完以上四個問題,我們就可以開始為自己的 DApp 建模了。我來和大家介紹下我的模型。我的自動販賣機 DApp 共由以下三個部分組成:
?賬單的生成,
?賬單的記錄,
?以及,賬單的呈現(xiàn)。
賬單的生成是指模擬現(xiàn)有的販賣機系統(tǒng),隨機生成賬單信息。而賬單的記錄是通過販賣機的錢包賬戶將這些數(shù)據(jù)發(fā)送到鏈上。最后,賬單的呈現(xiàn)是通過調(diào)取鏈上的數(shù)據(jù),在鏈下整合后通過 pc 端平臺來展示。因此,我第一部分和第三部分主要依賴鏈下的技術(shù),而第二部分--賬單的記錄,就是鏈上的了。這部分通常我們最不熟悉的區(qū)域,也是我上周主要在做的部分。
前面我們提到,鏈上的一切行為都叫作交易。創(chuàng)建錢包算一個交易,轉(zhuǎn)賬也算一個交易。那我們是如何定義一個交易的呢?交易定義是通過 transacTIon protocol[3],交易協(xié)議,或者說是智能合約,來完成的。Forge 開發(fā)框架為開發(fā)者提供了很多常見的交易協(xié)議,例如錢包的創(chuàng)建、轉(zhuǎn)賬、交換資產(chǎn)等等。同時 Forge 開發(fā)框架簡化了編寫、部署交易協(xié)議的過程,通過提供模版化流程讓開發(fā)者可以輕松定義新的交易協(xié)議。
為了滿足我 DApp 的需求,我做了一個新的交易協(xié)議,叫「合并交易」。這個交易滿足了我記賬的要求:首先,當(dāng)販賣機發(fā)起這個「合并交易」時,該交易會為鏈上發(fā)送商品的信息,例如:商品的名稱、價格、消費時間,以及商家的信息,例如:運營方、制造方、供貨方,和場地方。而且,「合并交易」發(fā)送成功后,不但這些信息會永遠地記錄在鏈上,同時,相關(guān)方的錢包賬戶里會更新相應(yīng)的利潤金額。這個就是我對「合并交易」的定義了。
確認好了交易協(xié)議的定義,接下來就是寫碼的工作了!下周,我會向大家展示通過 Forge 開發(fā)框架制定交易協(xié)議的編碼過程,以及如何用 Python 來完成我剩下的鏈下部分。