當前位置:
首頁 > 最新 > 如何成為區塊鏈開發者:速成課!

如何成為區塊鏈開發者:速成課!

BlockGeeks 深入指南

在本指南中,我們將向你講解如何成為一名區塊鏈開發者。為了便於理解,我們將此指南劃分為不同的部分,並在每一部分結尾提供具體的操作步驟。

我們現在正處於「區塊鏈時代」,區塊鏈對我們的未來有著巨大的影響。那麼,你應該如何加入「區塊鏈大潮」呢?如果你想成為一名區塊鏈開發者,那麼有幾個小目標你必須達成。

希望在閱讀完本指南後,你可以掌握開始區塊鏈開發的必要技能。如果你真的想成為一名區塊鏈開發者,我們希望你能夠達到以下目標。第一,時間,你必須投入足夠的時間和精力用於學習。第二,不要急於求成,成為區塊鏈開發者並不是一念之間。

說到這裡,讓我們開始吧!


區塊鏈技術作為一種全新的革命性的技術,要想初步入門,最大的障礙就是熟悉系統中各種各樣的概念。

如果你是一名初學者,那麼你必須熟悉以下幾種名詞的具體含義:

區塊鏈:區塊鏈是一條由區塊鏈接而成的數據鏈,在區塊中包含具體數據,並且整個系統沒有中心化監管。區塊鏈具有加密安全、不可篡改的特點。

去中心化:區塊鏈具有去中心化的特性,是因為其中沒有中心化權威監管機構。

共識機制:在去中心化網路(編者註:中譯本見文末超鏈接《》)中,就某些具體問題(事務)上達成共識的機制。

礦工:使用計算能力挖區塊的用戶。

你最好多了解一些加密領域中廣泛使用的術語。此外,強烈建議你閱讀學習我們的綜合辭彙表,學習掌握這些基本術語是十分必要的,否則你可能在具體學習過程中錯失較多信息且較難理解。那麼,接下來,是時候學習更多區塊鏈技術方面的內容了。

如果你對如何在區塊鏈上搭建「金融技術」應用方面的技術內容感興趣,那麼你絕對應該比較詳細了解加密經濟學的來龍去脈(編者註:中譯本見文末超鏈接)。大多數開發人員通常精通「加密」的相關知識,但對於「經濟學」的理解卻非常匱乏。

當你閱讀研究現在網路中某些 眾籌 時就會發現,這種知識儲備的差異是非常明顯的。很明顯,他們的ICO文件在經濟方面的規劃明顯不足。

因此,鑒於此,為了更好地學習,需要多學習一些經濟學的知識並有一個大致的概念。如果你想大致了解加密經濟學,可以閱讀我們的一些文章。

如果你對密碼學特別感興趣,並且想了解數字簽名如何工作,以及公鑰加密的含義等內容,那麼可以閱讀此篇文章。

此外,我們強烈建議你了解比特幣的工作原理。比特幣是目前區塊鏈技術最廣泛、最優秀的應用之一,鑒於其廣泛的影響力,甚至都可以稱比特幣為區塊鏈技術之所以能夠成功問世的最好的實例。

因此,我們建議你閱讀中本聰寫的比特幣白皮書。你可以通過此鏈接獲取。現在第一個目標就完成了。

讓我們檢查一下到目前為止你需要完成的步驟:

熟悉各種術語和辭彙。

閱讀更多關於區塊鏈技術方面的內容。

閱讀比特幣白皮書。


讓人驚訝的是,有許多萌新「開發者」並根本沒有真正使用過加密數字貨幣。當沒有真正的使用經驗的時候,又怎麼可能在一個平台上進行創新和改進呢?

強烈建議你從今天起逐步熟悉區塊鏈系統,「真正」熟悉。

去 Coinbase 或者其他你熟悉並且在你的國家允許開設的交易所買一些幣。你不需要確定一個具體的投資方案,只需要購買少量的幣並且觀察系統整個過程是如何工作的。

整個過程非常簡單明了。既然你不計劃購買大量的加密數字貨幣,那麼我們僅使用一個基本的網上錢包即可。

這些網上錢包使用起來非常方便。錢包的創建也非常簡單,因為它基本上是在任意交易所服務上創建你自己的賬戶。此外,只要可以連接到網路,你便可以在世界上任意伺服器或設備訪問這個錢包。不過話雖如此,對於網上線包來說仍有一個較大的問題。你的私鑰將被保存在另一台伺服器上,這就像把家鑰匙放在硬碟里交給黑客一樣。因此,不要使用網上錢包存儲大量錢,只需要存儲你需要用於完成交易的最低限額即可。

當你需要創建一個投資組合時,就必須學會如何使用冷錢包保存你的資產。你可以在這裡學習怎麼做。之後,如果你要創建你自己的 ICO,你必須清楚錢包是如何工作的,特別是多重簽名錢包是如何工作的。

這一部分我們就講到這裡,困難的部分將從下一個小目標開始。

到目前為止你需要完成的步驟如下:

了解交易所是如何工作的。

熟悉錢包(網上線包、冷錢包、多重簽名錢包等)是如何工作的。


作為一名區塊鏈開發者,你將在後端面對大量的挑戰。由於許多原因,創建並維護一條公鏈並不容易。

(在我們繼續之前,讓我們先看一下 David Schwartz 在 CPPCON 2016 上發表的主題演講:使用 C++ 進行區塊鏈軟體開發。)

(這裡有個油管視頻鏈接:https://youtu.be/w4jq4frE5v4)

理由 1:安全

正如 David Schwartz所說,區塊鏈系統應該是一座堡壘。首先,(區塊鏈的)代碼是完全開源的。任何人都可以查看源代碼,並且尋找代碼中的 Bug 和缺陷。然而,與其他開源項目不同的是,在區塊鏈代碼中發現漏洞的代價是巨大的。任何(發現漏洞的)程序員都可以通過這個漏洞攻擊,並獲得數百萬美元的收益。處於以上合理的安全性考慮,區塊鏈的開發往往非常緩慢。

理由 2:資源管理

與網路保持同步是非常重要的。你(的開發進度)不能落後全網需求太多。你的系統應該能夠很好地處理遠程和本地請求。

理由 3:性能

區塊鏈系統必須始終保持其最高的數據處理能力,但為了做到這一點,編程語言的選擇必須是非常通用的,以滿足並行化、高吞吐量等需求。然而,在區塊鏈中有一些任務是可以並行執行的,但有些任務則不能並行執行。

一個很好的「並行化」任務的例子就是數字簽名驗證。驗證數字簽名所需的所有內容即密鑰、交易和簽名。只要有這三種數據,你就可以以並行的方式進行驗簽。

然而,並不是所有的區塊鏈函數(模塊)都可以這麼做。設想一下交易執行本身,多個交易並不能夠並行執行;它需要一次處理一筆交易,以避免類似於雙花等錯誤。有些編程語言擅長進行並行化操作,但有些則不太擅長。

理由 4:隔離

什麼是確定性行為?

如果 A + B = C,那麼無論什麼情況下,A + B 永遠等於 C。這就叫做確定性行為。

Hash 函數是確定性的,意味著 A 的哈希值永遠是 H(A)。

因此,在區塊鏈的開發中,所有交易的執行必須是確定性的。(區塊鏈系統中的)同一筆交易不能在不同時刻的執行結果不同。相似的,智能合約不能在不同的機器上執行結果不相同。

唯一的解決方法就是隔離。簡單來講,就是將區塊鏈系統中智能合約和交易,與非確定因素隔離開來。

有一些編程語言可以滿足大部分需求。如果你是一名區塊鏈開發者,那麼你絕對需要一些 C++ 和 JavaScript 的基礎知識。

雖然 C++ 看起來有點過時,但事實是它能夠很好地滿足我們以上描述的所有需求。實際上,中本聰就是使用 C++ 來編寫的比特幣源碼。

(JavaScript) 與 HTML 、CSS 一起是萬維網內容生產的三大核心技術之一。JavaScript 通常用於創建高交互的Web頁面。

因此,現在我們講講述如何使用 JavaScript 語言編寫一個簡單的區塊鏈系統。

以下內容來自 savjee.be 。

我們如何創造一個區塊?一個簡單的區塊由什麼組成?在我們將要編寫簡單的加密幣(讓我們稱之為 「BlockGeeks 幣」),每個區塊中將由以下幾部分信息組成:

Index(索引):標識區塊編號

Timestamp(時間戳):標識區塊產生時間

Data(數據):區塊中包含的數據

Previous Hash(前一區塊Hash值):前一區塊 Hash 值。

Hash(哈希值):當前區塊的Hash值。

在我們繼續講解之前。你需要理解我們將要在項目中使用的以下術語:

This:在函數中調用 「This」 關鍵字,你就能夠通過 this 關鍵字訪問當前對象的函數或屬性,從而獲取其取值。

Constructor(構造函數):構造函數是一個特定用於在類中創建並初始化類對象的函數。每個類都僅能擁有一個構造函數。

那麼現在,我們開始創建我們的區塊。

創建 Block 類

Code Analysis

好的,這就是一個區塊的定義。在代碼的第一行,我們調用 crypto-js 庫,因為在 JavaScript 中沒有 sha256 的哈希函數。

接下來,我們調用類中的構造函數,在創建擁有具體數值的對象時調用。你也許已經注意到了 calculateHash() 函數。下面讓我們來看看它是如何工作的。

在一個區塊中,我們獲取所有屬性的數值,通過哈希函數獲取它們的哈希值作為該區塊的哈希值。我們使用 JSON.stringify 函數將區塊的數據轉換成字元串後,與區塊中其它數據一同求哈希值。

很好,到目前為止我們已經準備好一個區塊,可以繼續了。現在讓我們把區塊連接起來組成一條區塊鏈。


代碼分析

在 Blockchain 類的定義中擁有太多內容,讓我們分成幾部分來分析。

第 1 部分:創世塊

什麼是創世塊?

創世塊就是區塊鏈中第一個區塊,它之所以特殊的原因就是區塊鏈中每一個區塊都應該通過哈希值指向前一區塊,但創世區塊並不指向任何區塊。因此,一條新鏈創建之時創世區塊就立刻被創建了。

此外,你注意觀察 「createGenesisBlock()」 函數,我們是手動給創世塊賦值的:

第 2 部分:添加區塊

首先,我們需要獲取當前區塊鏈中最新的區塊是哪一個。為此我們通過 getLatestBlock() 函數獲取區塊鏈中最新區塊。

那麼,到目前為止發生了什麼?我們如何添加新區快?我們應該如何檢查所給區塊是否合理?

還記得區塊中包含的內容么?每個區塊不是有前一個區塊的哈希值么?

那麼我們檢查區塊鏈中區塊數據的合法性就容易的多了。通過比較當前區塊中Previous Hash欄位的數值與前一區塊的哈希值,就可以判斷區塊是否合法了。

圖片來源:Lauri Hartikka 在 Medium 上發表的文章

如果以上兩個哈希值相等,那麼意味著新區快是合法的,並且可以被添加到區塊鏈中。

第 3 部分:驗證鏈

現在,我們需要檢查是不是沒有人干擾我們的區塊鏈,並檢查是不是一切都很穩定。

我們使用 「for」 循環遍歷從區塊 1 到最新區塊。創世區塊是區塊 0。

如果當前區塊的 「previousHash」 欄位與前一區塊的哈希值不相等,那麼該函數會返回 false,否則會返回 true。

使用 Blockchian 類,創建區塊鏈實例。

現在,我們將使用 Blockchain 類創建我們的 BlockGeeksCoin。

就是這樣!

那麼現在發生了什麼?

我們基於 Blockchian 類創建了一種新的加密數字貨幣,並且命名它為 BlockGeeksCoin。通過調用這個新對象,我激活了(Blockchian 類的)構造函數,從而自動創建了創世區塊。

我們簡單地添加了兩個區塊在區塊鏈中,這兩個區塊的數據是隨機給的。

是的!就是這麼簡單!

(非常感謝 savjee.be 提供的神奇而簡單的解釋。)

第三個小目標達成!讓我們看一看具體操作。它非常簡單但絕對不容易:

學習一種適合編寫區塊鏈的語言,例如:C++,Javascript,C#,Go 等。


如何定義智能合約?

根據維基百科的定義,智能合約是「一種旨在促進、驗證或執行合約談判或履行的計算機協議」。1996年,美國密碼學專家 Nick Szabo 首次提出了這一概念,而以太坊通常被認為是普及這一概念並使之成為主流的原因。

你可以在我們的說明文檔中了解更多有關智能合約的內容。

那麼,在我們的智能合約中,我們想要哪些特性呢?

在區塊鏈上運行的任何東西都必須是不可變的,並且必須在不損害其完整性的情況下在多個節點運行。因此,智能合約需要具備以下三點特性:

確定性

有限性

隔離

特徵 1:確定性

一個程序是確定的是指其針對某一特定輸入在任意時刻都具有相同輸出。例如,如果 3+1=4,那麼3+1將一直等於4(假設相同的基數)。因此,當一個程序在不同計算機上對於相同的輸入集給出相同的輸出時,就認為程序是確定性的。

以下就是程序按照不確定性的方式執行的幾種情況:

調用不確定性的系統函數:當程序員在程序中調用不確定系統函數時。

不確定性數據資源:如果一個程序在執行過程中所需的數據是不確定性的,那麼這個程序就是不確定性的。例如,一個程序需要獲取某一特定查詢在 Google 搜索中前10 的結果。那麼這個列表將持續變化。

動態調用:當一個程序調用另一個程序時,就被稱作動態調用。由於只有在執行過程中才能確定調用結果,所以這種調用也是不確定的。

特徵 2:有限性

在數學邏輯中,有一類錯誤叫做「停機問題(halting problem)」。從根本上說,它指出不能判斷一個程序能否在有限時間內執行完成它的函數。在1936年,阿蘭·圖靈(Alan Turing)利用 喬治·康托爾(Georg Cantor)的對角線論證法推導出,沒有辦法知道一個給定的程序能否在有限的時間內執行完成。

這顯然是智能合約必須面對的一個問題,因為根據合約的定義,智能合約必須能夠在有限時間內執行完成。為此我們採取了一些措施,能夠在外部 「殺死」 合約,從而避免陷入無限循環而耗盡資源:

圖靈不完備性:圖靈不完備的區塊鏈的功能有限,不能進行跳轉或者循環。因此他們並不能陷入無限循環。

按照執行步驟付費:一個程序可以簡單地記錄其已經執行的 「步驟」 數,例如,其執行的指令的數量,然後在執行步數達到特定數值後終止程序。另一種方法是使用計價器。合約根據預付的費用執行。每條指令的執行需要消耗特定數量的費用。如果預付的費用使用完了,那麼合約地執行也停止。

計時器:預設一個計時器。如果合約執行時間超過時間限制,則從外部終止其執行。

特徵 3:隔離

在區塊鏈中,任何人都可以上傳智能合約。然而,某些合約可能有意或無意地包含病毒或Bug。如果合約不是相互隔離的,就可能會影響到整個系統地運行。因此,必須保證智能合約在沙盒中互相隔離,才能避免對整個生態系統產生負面的影響。

我們已經了解了這些特徵,了解它們如何執行也是十分重要的。通常智能合約是選擇以下兩個系統中的一個執行的:

虛擬機:以太坊使用這種方法。

Docker:Fabric使用這種方法。

讓我們比較一下這兩種方案,並確定哪種方案使得生態系統更好。為了簡單起見,我們將比較以太坊(虛擬機)和Fabric(Docker)。

如果你對以太坊開發很感興趣,那麼你還必須學好 Soidity 語言。

對於任何想開發 DAPPs(去中心化應用程序)或者想進行 ICO 的人來說,學習 Solidity 語言是十分必要的。我們已經有了一份詳細的指南,你可以在這裡閱讀。然而,在這裡我們將向你簡單地介紹一下總結流程。Solidity 語言是 Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai 和幾位前以太坊核心開發者開發的,可以使用 Solidity 語言編寫智能合約,並且在區塊鏈平台(例如以太坊)上執行。

Solidity 是一種有意設計得精簡而鬆散的編程語言,其語法規則與 ECMAScript(JavaScript)十分相似。以太坊設計原理文檔中指出了一些必須要記住的要點,我們當前的運行環境是 32 byte 指令集的 stack-and-memory 模型,EVM(以太坊虛擬機)是的我們能夠訪問程序 「堆棧」 就像寄存器空間一樣,我們可以通過制定內存地址給程序計數器從而實現循環和跳轉操作(基於順序程序控制),一個可擴展臨時 「內存」 和一個更持久的 「存儲」 實際上是永久地寫入區塊鏈中。最重要的是,EVM 要求智能合約必須是完全確定性的。

如果你想系統地學習 Solidity 語言,在這裡可以查看我們的強化課程。

那麼,讓我們現在回顧一下步驟:

理解智能合約是如何工作的。

(以太坊開發者選做)學習 Solidity。


作為一名萌新開發者,你可以做的最重要的事情之一就是不斷地學習交流、融會貫通。

加入 Reddit 論壇,Github Pages 和 StackExchange 多與其他開發者交流,隨時關注關於這項技術的消息。

與此同時,這將有助於你了解當前區塊鏈開發者關注的重點是什麼。公司在招聘是需要具備那些素質?你可以在這裡獲取相關信息。

這些信息將在你完善你的技能以及引起公司注意的過程中非常有用。


因此,這就是你成為一名區塊鏈開發者的大致路線圖。當然,單憑這一點是完全不夠的,你需要自己主動積極學習,並且始終處於這種狀態。

如果你正在尋找有關區塊鏈開發的相關資料可以點擊這個鏈接。

我們祝你學習的旅途中一切順利!

如何使用Solidity編寫安全的智能合約代碼?

http://ethfans.org/rubyu2/articles/128

教程 | 用 Go 構建一個區塊鏈 -- Part 1: 基本原型

http://ethfans.org/posts/building-blockchain-in-go-part-1


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 以太坊愛好者 的精彩文章:

虛擬貨幣錢包從 BIP32、BIP39、BIP44到Ethereum HDWallet
智能合約:一個新經濟時代

TAG:以太坊愛好者 |