二十分钟教你如何将区块链应用与函数计算相结合
前言
本篇文章適合對區塊鏈應用感興趣或是想要通過函數計算服務進一步開發區塊鏈應用的新人。本文將結合阿里云區塊鏈服務、阿里云函數計算服務、阿里云日志服務 以及社區應用 Marbles,手把手教大家如何將阿里云區塊鏈服務與阿里云函數計算服務相結合,并進一步提供業務上的結合場景,供大家開拓思路。
本文分為以下幾部分:
- 函數計算與區塊鏈
- Marbles 區塊鏈應用介紹
- Marbles 區塊鏈應用結合函數計算進行擴展示例
- 區塊鏈應用與函數計算在業務上結合的場景與價值探討
函數計算與區塊鏈
函數計算
函數計算是事件驅動的全托管計算服務。使用函數計算,無需采購與管理服務器等基礎設施,只需編寫并上傳代碼。函數計算為用戶準備好計算資源,彈性地可靠地運行任務,并提供日志查詢、性能監控和報警等功能。借助函數計算,可以快速構建任何類型的應用和服務,并且只需為任務實際消耗的資源付費。
下圖為函數計算工作流程:
區塊鏈
區塊鏈可以理解為去中心的分布式記賬系統,其是一種?分布式、去中心化的計算與存儲架構?。區塊鏈通過某種方式來記錄數據,使用戶可以信任區塊鏈系統記錄的數據。區塊鏈中的記賬節點會按照一致性協議記賬。記賬節點愿意按照一致性協議記賬,是因為在一致性協議的設計中,誠實的記賬節點會得到相應的獎賞,且誠實的記錄比惡意篡改記錄的收益更大。
依托于區塊鏈網絡的可信度,衍生出了智能合約的概念。什么是智能合約呢?現實生活中,買家與賣家要進行一筆交易,為了保證交易的順利進行,雙方會簽訂一份合約,合約中會聲明雙方各自的身份、權利以及義務。當交易出現糾紛時,買家與賣家根據當時簽訂的合約通過法律的手段解決糾紛。這種方式的不足之處在于解決糾紛的過程需要第三方權威來仲裁以及需要大量時間。那么,假使我們現在有一位可信公正的交易代理人。賣家將商品交給代理人,買家與代理人雙方之間一手交錢一手交貨。若買家拒絕購買,代理人會將商品歸還給買家。買家也不會付了錢拿不到商品。智能合約就可以充當這樣的代理人,其為區塊鏈上一個包含合約代碼和存儲空間的虛擬賬戶,合約的代碼控制智能合約的行為,合約的賬戶存儲合約的狀態。
由于有了智能合約,DApp (Decentralized Application 即去中心化應用)也應運而生。DApp 是運行在區塊鏈網絡上的應用軟件,其上運行的代碼我們稱之為智能合約。
Marbles 區塊鏈應用介紹
Marbles 區塊鏈應用是一個?資產轉移?應用演示。在 Marbles 區塊鏈應用中多個用戶可以創建并相互轉移彈珠。 (?即彈珠就是資產轉移中的資產?)
上圖中:
- Amy、Alice、Ava 所在的小長方形是她們每個人的賬戶
- 小長方形中的圓形彈珠是每個人賬戶中的資產,彈珠的顏色和大小是資產的屬性
- 點擊小長方形中的加號是為某個賬戶創建彈珠(資產)
- 將某個小長方形中的彈珠拖拽到右上方的垃圾桶中,是為某個賬戶刪除彈珠(資產)
- 將某個彈珠從一個小長方形拖拽到到另一個小長方形,是彈珠(資產)的轉移
- 每一步的操作會在下方的 BLOCKS 創建一個新的小正方形,這個小正方形就代表包含交易內容的區塊
Marbles 區塊鏈應用代碼分成三部分:
在 Marbles 應用中,當客戶端發送消息給服務端,服務端與區塊鏈網絡通信的時序圖大體上如下圖所示:(?讀者對詳細過程感興趣,可以閱讀?Github IBM-Blockchain/marbles?)
其中,Peer 節點(對等節點) 存在于區塊鏈網絡中,擁有賬本并且可安裝鏈碼。Orderer 節點負責接收包含簽名的交易,對未打包的交易進行排序生成區塊,廣播給 Peer 節點。
上圖中:Client 以及 Server 是上文中所說的客戶端以及服務端。
Marbles 區塊鏈應用結合函數計算進行擴展示例
假設說,現在有這么一個業務場景,需要在每次 Marbles 應用有事件發生時,要對事件進行相應處理,且這部分的處理代碼會?經常迭代?。那么,在區塊鏈應用更新需要較多時間的情況下,通過函數計算來處理是較為方便的。(?具體緣由在下一節將會繼續探討?)
接下來,筆者將帶著大家模擬這個業務場景,擴展 Marbles Server 端代碼。在每次事件發生時,將事件信息打包并通過函數計算的 HTTP 觸發器,由函數計算來對事件信息做相應處理。
1. 準備工作
開通阿里云日志服務、函數計算服務、區塊鏈服務
2. 在阿里云區塊鏈服務中創建組織、創建聯盟
3. 在阿里云區塊鏈服務中創建通道
- 點擊相應組織
- 點擊通道
- 點擊添加通道,填寫名稱與組織,并創建
- 點擊新創建的通道右側的待審批鏈接,同意審批
4. 部署 Marbles 應用以及鏈碼
參考?阿里云區塊鏈服務開發指南
注意事項:nodejs 版本為 v8
5. 下載并配置阿里云函數計算開發工具 fun
- fun 是一個 Node.js 編寫的命令行工具,通過 npm 進行安裝:$ npm install @alicloud/fun -g
- 通過在命令行輸入?fun config,根據提示依次配置?Account ID、Access Key Id、Access Key Secret?以及?Default Region Name。可參考:服務地址?、?創建 AccessKey
- 配置 template.yml
在項目根目錄下創建一個 template.yml 文件:
ROSTemplateFormatVersion: '2015-09-01' Transform: 'Aliyun::Serverless-2018-04-03' Resources:marblesFC: # 服務名稱Type: 'Aliyun::Serverless::Service'Properties:Description: 'fc test'LogConfig: # 日志配置Project: test-log-project # 日志 ProjectLogstore: test-log-store # 日志 LogStoreprocessEvent: # 函數名Type: 'Aliyun::Serverless::Function'Properties:Handler: httpTrigger.handler # 文件名.方法名Runtime: nodejs8CodeUri: './'Timeout: 60Events:http-test: # 觸發器名Type: HTTP # 觸發器類型Properties:AuthType: ANONYMOUSMethods: ['GET', 'POST', 'PUT']test-log-project: # LogProject 名稱Type: 'Aliyun::Serverless::Log'Properties:Description: 'just for test'test-log-store: # LogStore 名稱Type: 'Aliyun::Serverless::Log::Logstore'Properties:TTL: 10ShardCount: 1上述文件做了如下事項:
- 在項目根目錄下創建 httpTrigger.js 文件
- 在項目根目錄下執行?fun deploy?進行部署
- 在阿里云函數計算控制臺中,進入到?marblesFC?服務下的?processEvent?函數,在代碼執行頁面記錄下調用 HTTP 觸發器的地址
6. 修改 Marbles Server 端代碼
7. 啟動 Marbles
在控制臺中進入 Marbles 項目,通過?gulp marbles_baas?啟動 Marbles 應用
8. 創建彈珠或轉移彈珠
試著在瀏覽器中創建彈珠或者用鼠標拖拽轉移彈珠
9. 查看日志
對 Marbles 應用做了相應操作后,進入阿里云日志服務?test-log-project?Project 下的?test-log-store?LogStore,查看日志
我們看到當 Marbles Server 接收到事件后,會觸發 HTTP 觸發器,由函數計算 FC 來對事件做相應處理。(?簡單起見,demo 的處理目前僅僅是記錄日志,讀者們可以自行擴展?)
區塊鏈應用與函數計算在業務上結合的場景與價值探討
通過制作上面的 demo,相信大家現在對于如何將區塊鏈應用與函數計算相結合有了一定的認識。接下來,就讓我們一起探討下,區塊鏈應用與函數計算在業務上有哪些結合的場景與價值。
下圖是最原始的 Fabric SDK 時序圖
為了讓讀者方便理解,我們仍舊使用 Marbles 應用的時序圖,讀者可以將 Marbles 應用中的 Server 理解為 Fabric SDK 時序圖中的 Application,
在筆者看來,函數計算可以與區塊鏈應用相結合的場景主要有以下三點:
1. 處理事件
處理事件的場景剛剛在 demo 中各位讀者想必已經體驗過了。那么,為什么筆者倡導用函數計算來處理事件呢?
通過函數計算可以將每一次的事件進行相應的處理,處理完成后發送給日志服務。同時,還可以在函數計算中設定定時觸發器,在指定時間內,再次統計事件的信息,由此對區塊鏈狀態進行一個數據分析。
而關于這種方式的統計邏輯,很有可能是需要經常迭代的。因此,不適合將其邏輯放入區塊鏈應用中,而是更適合放在小巧易迭代的函數計算場景中。
2. 附加業務
考慮一個這樣的場景:現在 X 公司推出了一款新的支付 App,為了鼓勵用戶使用該公司的 App,該公司對外宣傳當用戶用該公司的 App 成功完成交易后,該公司會送大量優惠券以及積分。若該 App 是一款區塊鏈應用,那么把優惠活動的業務邏輯放在哪里最合適呢?
筆者目前覺得是放在 Orderer 將交易打包成區塊并廣播的時候最合適,因為優惠活動的業務邏輯是經常會變化的,這類業務邏輯可以統稱為附加業務,將附加業務抽象為一個個函數并放在函數計算中,容易更新迭代。
3. 驗證交易
Peer 節點在模擬提案時,若是有復雜多變的邏輯,可以放入函數計算中,由 Peer 節點來負責調用。
以上三點就是筆者對于如何將區塊鏈服務與函數計算相結合的思考,有不準確的地方,歡迎大家指出。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的二十分钟教你如何将区块链应用与函数计算相结合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018年的AI/ML惊喜及预测19年的
- 下一篇: 阿里巴巴、支付宝员工都在用的知识管理工具