隨著新一波的區塊鏈熱潮,許多同學懷著巨大的熱情進入了這個領域,同時也會遇到不少疑惑,區塊鏈開發需要哪些知識?怎么學習?從哪里學習?遇到問題怎么辦?本文將試圖給區塊鏈領域新人一個快速實用的指引。
一、基本 IT 技能
區塊鏈堪稱“黑科技”,本身具有大量的技術元素,有志于從技術角度切入區塊鏈的人,應該具備或掌握基本的 IT 技能,達到至少是常規級別“程序員”或“系統管理員”的技能水平。
大多數區塊鏈系統是可以跑在 Linux 上的,包括 CentOS 和 Ubuntu 等,你至少要會一些基本的 Linux 操作指令,比如 ls 查看目錄、ps 或 top 查看進程、find 查找文件、netstat 查看網絡、ulimit 檢查系統參數限制、df/du 查看磁盤空間、用 apt/yum 安裝軟件等等,如果這些基本命令都不掌握,在 Linux 上操作肯定是舉步維艱的。
這方面的書和資料都很多,相信一星期就能上手。另外,善于 Linux 的 man 指令,可以獲得每個命令的詳細幫助。如果學會寫 shell 腳本,那更如虎添翼,可以把大量的繁瑣操作給自動化了。
要有清晰的網絡概念
區塊鏈本來是分布式系統,節點之間一定是通過網絡相連的,只是跑起來的話,不需要多高深的網絡知識,只需要了解什么是 TCP/IP;公網、內網、本地地址的區別;端口如何配置;節點和節點、SDK 和節點之間的互聯是否會被防火墻和網絡策略擋住;采用 ifconfig、telnet、ping、netstat 等命令檢查網絡信息和進行探測、定位網絡問題。一般來說,Linux 書籍也都會介紹這部分內容。
區塊鏈周邊的支持,如瀏覽器、中間件、業務應用,會依賴一些第三方基礎軟件,如 MySQL/MariaDB 數據庫、Nginx 服務、Tomcat 服務等,至少懂得怎么去安裝指定版本的軟件,掌握修改這些軟件的配置文件并使之生效的基本操作,了解各款軟件的密碼、權限配置和網絡安全策略,以保護自身安全。
如果是基于云、Docker 或者 k8s 等容器環境構建,需要了解使用的服務商或容器的功能、性能、配置方式,包括對資源的分配:CPU、內存、帶寬、存儲等,以及安全和權限的配置、網絡策略配置、運維方式,達到輕松分發構建的同時,還能保持其穩定性和可用性。
各種云服務商和容器解決方案都有周全的文檔和客服服務渠道,可以幫助用戶順暢地使用。
到編程語言階段,可以根據自己的學習路徑,選擇不同的語言
如果是使用 Java 語言,那就應該熟練掌握 Eclipse、IntelliJ IDEA 等集成 IDE,熟悉 Gradle 為主的工程管理軟件,熟悉 Spring、Springboot 等 Java 的基礎開發組件,熟悉在 IDE 或命令行下對資源路徑如 ApplicationContext 等路徑的定義,或許還有 myBatis 等流行的組件,這些都可以在 Java 相關的社區和網站找到資料和書籍。
在熟練使用 Java 語言的情況下,采用 Java SDK 接入到區塊鏈,跑起一個演示示例,將是非常輕松寫意的事情。
如果是采用其他語言,我們也提供了 Python、Node.js、Golang 等語言的區塊鏈 SDK。
不同的語言,其安裝包有不同的穩定版本,會采用不同的環境和依賴安裝配置方法,會有不同的 IDE 和調試方法,就不在本文一一羅列,相信學習和使用語言這件事本身,于程序員已經是最基本的技能了。
最后,作為在開源世界里沖浪的玩家,“全球最大同性交友網站”——GitHub 一定是要上的了
注冊 GitHub 賬號,掌握 Git 版本管理工具的基本操作,克隆和拉取開源軟件代碼,提交議題,提交自己的修改,給開源項目提交拉取請求,再順手點個星標,激情而有范兒,在開源世界里留下你的姓名。
二、區塊鏈領域的基礎知識棧
以下部分的知識和區塊鏈或區塊鏈某一個平臺更加相關,從底到上依次是:
HASH(哈希算法)、簽名、證書
嚴格來說,這并不是區塊鏈領域的專有知識,只是必須具備的基礎知識,包括 SHA3/SHA256/RIPEMD160 等摘要算法,以及這些算法和“區塊鏈地址”的關系,基于公私鑰的數字簽名和驗證方法,數字證書的概念和格式,比如 X.509 證書,以及保存證書/公私鑰的文件格式,如 PEM 文件、keystore文件等。
基礎應用密碼學
基礎應用密碼學其實范圍很廣,作為入門者,至少要了解對稱和非對稱加密的常見算法,如 AES 對稱加密,RSA、ECDSA 橢圓曲線等非對稱加密算法,以及這些算法在簽名驗簽、數據加密、通信協商和保護方面的作用。如果要使用國密,那么需要了解 SM2~SM9 一系列算法的概念和使用。
分布式網絡結構
區塊鏈是先天的“分布式網絡系統”,節點和節點通過網絡的 P2P 端口互連,客戶端、SDK 通過 RPC/通道端口互連,首先要保證網絡之間是互通的,監聽的地址和端口是對的,端口是開放的,防火墻和網絡策略是正確的,用于安全連接的證書已經到位,才能保證區塊鏈的“通則不痛”。
這也要求使用者具備基本的網絡知識、網絡工具,同時了解區塊鏈特有的節點類型(共識節點、觀察節點、輕節點等)、互連方式(點對點雙向連接、JSON RPC 的 HTTP 短連接、通道長連接等)。詳情點擊參考 《FISCO BCOS 網絡端口講解》 。
智能合約
智能合約可說是應用開發者直面區塊鏈的一道大門,入得此門,精彩無窮。流行的智能合約語言是 Solidity 語言,這門源自以太坊,從誕生開始就是為區塊鏈而來的。
Solidity 語言更新活躍、文檔完備,具有良好的一致性和事務性,功能足夠實現中型的商業應用。
當然,它在實時調試、第三庫支持、運行速度等方面還比不上成熟的語言,如果開發者想要用 C++ 等語言編寫智能合約,那就要對區塊鏈上的計算范式進行深入了解,避免寫出無法共識的智能合約來,一般是建議有深入的了解后再采用 Solidity 之外的其他語言編寫合約。
要掌握 Solidity 合約,當然是通讀文檔,并動手嘗試。具體參考 該文檔 。
ABI 接口原理
在采用 EVM 作為虛擬機的區塊鏈上,EVM 執行的是 Solidity 語言的合約。合約編譯會生成后綴名為 ABI 的文件,其實里面就是該合約接口定義的 JSON 文本,可以用文本查看器查閱,了解你寫的合約如何翻譯成 ABI 里的接口,接口返回類型,參數列表,參數類型等,只要有合約的 ABI 文件,就可以調用區塊鏈 SDK 的接口,解析這個合約相關的交易、返回值、回執等。
區塊數據結構
區塊(Block)有區塊頭和區塊體。區塊體有交易列表,交易列表里的每個 交易(Transaction)(Tx)有發起方、目標地址、調用方法和參數,以及發送者簽名。交易的結果會生成一個“ 回執(Receipt)”,回執里包含被調用方法的返回值、運行過程生成的 EventLog 等……
了解這些,基本上就掌握了區塊鏈數據的脈絡,還可以繼續深究數據結構里的梅克爾根以及對應的梅克爾樹是如何生成的,有什么作用(如用于 SPV:Simplified PaymentVerification)。具體參考 該文檔 。
RPC 接口
這里把區塊鏈節點暴露的功能接口統稱為“RPC 接口”。查看鏈上數據,包括區塊、交易、回執、系統信息、配置信息,向鏈上發起交易,以調用智能合約、修改系統配置等,或者通過 AMOP 協議發送消息、監聽事件,都是通過 RPC 接口。
幾十個 RPC 接口建議一一走讀,或善用搜索,以發現自己想要的接口。
接口通信采用的協議可能是 JSON RPC,或者是 FISCO BCOS 獨創的通道協議,SDK 基本上已經對接口和協議進行了良好的包裝,也可以在深入理解 ABI 和 RLP 等編碼模式前提下自行開發接口客戶端。具體參考 該文檔 。
準入和權限模型
聯盟鏈強調安全可控,節點準入是第一步,在鏈初始化后,其他節點或者 SDK 配置了相應的證書,才能接入到既有的聯盟鏈上。
鏈上的角色用權限模型控制,包括管理員權限、發布合約的權限、創建表的權限、參數配置權限等,以避免角色之間操作混淆,某些角色既當運動員又當裁判員。
初學者需要仔細閱讀區塊鏈平臺提供的技術文檔了解原理,遵循操作手冊的步驟進行操作。具體參考 該文檔 。
數據存儲模型
區塊鏈節點會采用文件數據庫(LevelDB 或 RocksDB),或者關系型數據庫如 MySQL 保存數據,所以,鏈上是真的有“數據庫”的。
寫入數據庫的數據包括區塊、交易、回執、合約產生的狀態數據等,是否寫入“調用合約產生的歷史數據”根據不同的平臺而定, FISCO BCOS 默認只保存最新的狀態值,可以選擇性地將修改記錄寫入“回執”或“歷史表”里進行追蹤。
FISCO BCOS 還提供方案,將歷史數據導出到鏈下數據庫進行關聯分析。具體參考 該文檔 。
共識機制原理
聯盟鏈通常采用插件化共識機制實現,FISCO BCOS 提供 PBFT 和 RAFT 兩種高效共識算法,而不會采用“挖礦”這些高耗能低效率的共識。
共識機制是區塊鏈的靈魂,對共識機制進行深入學習,才可以深入理解區塊鏈通過多方協作、達成高度一致性、支持交易事務性、防篡改防作惡的功效。具體參考 該文檔 。
區塊鏈的知識包羅萬象,更深層次的知識還有分布式系統理論、博弈論、前沿密碼學、經濟學、社會學等,掌握以上的基礎知識,再深入學習,舉一反三,用場景去驗證和探索創新式應用,方可發揮技術的潛力,感受分布式商業的魅力。
評論
查看更多