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