內容來源:公衆號-區塊鏈兄弟

原文發佈於 : 博客園

作者 : malii2

對優質區塊鏈開發人員的需求很大,這是有充分理由的。區塊鏈和 ICO 領域在過去幾年中爆炸式增長。越來越多的人試圖進入並在該領域中揚名立萬。但是,爲了獲得成功,他們擁有一支強大而健全的團隊至關重要。區塊鏈開發人員,更準確地說,以太坊開發人員是該團隊中最關鍵的組成部分。

因此,在本指南中,我們將使你的生活更輕鬆。我們將向你展示如何精確定位和從人羣中篩選的優秀的人才。

在我們僱用以太坊開發者之前,重要的是我們要知道我們僱用的是哪類人。

怎麼樣纔算是一個完美 NB 的以太坊開發者?

在以太坊開發者精湛的技能中,最重要的是要知道將最優秀的與其他人區分開的基本品質是什麼?優秀的開發人員必須不僅僅是具有區塊鏈編碼技能的開發人員。我們並不是說只熟悉編碼就沒有價值,但是,如果你需要一個合適的開發人員來創建一個帝國。那麼,你正在尋找的一些主要品質是什麼?

*去中心化的堅定信念:這些人認爲去中心化將挽救人類。傳統公司不會僱傭這些人,因爲他們相信社會,公司和政府等機構不應該去中心化。
*掌握密碼學:區塊鏈開發人員需要掌握加密經濟學。加密經濟學,密碼學和經濟學分爲兩部分。這就是爲什麼偉大的以太坊開發人員應該對密碼學有一種不懈的好奇心。
*掌握經濟學:加密經濟學的後半部分是“經濟學”,因此專業開發人員也應該具備經濟和博弈論機制的良好知識。如果你正在創建區塊鏈平臺,則代碼應確保所有參與者都受到經濟激勵。
*極度好奇:爲了擁有如此龐大的知識基礎,這些人天生就非常好奇。這些人大多都是直到深夜還通過視頻,論壇,維基來了解特定問題。

所以,現在我們知道我們正在尋找的那種人。這就是爲什麼說從頭開始瞭解一些以太坊基礎知識是有道理的。

我們爲什麼這樣做?

因爲每個以太坊開發者都應該完全熟悉這些概念。

1

什麼是以太坊?

這是以太坊網站定義的方式:

以太坊是一個區中的平臺,運行智能合約:完全按照程序方式運行的應用程序,沒有任何停機,審查,欺詐或第三方干擾的可能性。這些應用程序運行在定製的區塊鏈上,這是一個非常強大的共享的全局基礎架構,可以轉移價值並體現財產的所有權。

但簡單來說,以太坊計劃成爲未來的終極軟件平臺。如果未來是去中心化的,並且 dAPP 變得司空見慣,那麼以太坊必須成爲它的前沿和中心。

雖然比特幣是區塊鏈技術的第一個應用,但它仍然只是一種貨幣。以太坊帶來了區塊鏈技術可能實現的全部應用範圍。

正如以太坊聯合創始人 Gavin Wood 博士所說:

比特幣首先是一種貨幣 ; 這是區塊鏈的一個特殊應用。但是,它遠非唯一的應用程序。舉一個類似情況的過去例子,電子郵件是互聯網的一種特殊用途,並且肯定有助於推廣它,但還有很多其他的應用。

2

以太坊採礦如何工作?

截至目前,以太坊正在使用比特幣正在使用的相同的工作量證明(Proof-of-Work)。然而,以太坊很快計劃轉向權益證明(Proof-of-stake),他們將使用 Casper 協議來實現這一轉變。

那麼權益證明和工作量證明之間有什麼區別?這實際上是你可以問人們你可能會面試的事情。瞭解工作量證明和權益證明的工作原理絕對至關重要。

工作量證明:這是大多數加密貨幣如以太坊和比特幣迄今爲止遵循的協議。這意味着礦工通過使用專用硬件通過“挖礦”來挖掘加密貨幣。

權益證明:
該協議將使整個挖掘過程成爲虛擬的。在這個系統中,我們有驗證器而不是礦工。它的工作方式是,作爲一個驗證器,你首先必須把你的一些以太鎖作爲賭注。完成後,你將開始驗證塊,這基本上意味着如果你看到任何你認爲可以附加到區塊鏈的塊,你可以通過下注來驗證它。當塊被追加時,你將獲得與你投資的比例成比例的獎勵。但是,如果你在錯誤或惡意區塊上下注,你投入的股份將被剝奪。

爲了實現“權益證明”,以太坊將使用 Casper 一致性算法。一開始,它將是一個混合風格的系統,其中大多數交易仍將是工作量證明,而每 100 個交易將成爲權益證明。這樣做意味着,它將提供真實世界在以太坊平臺上來測試驗證。但這對於以太坊意味着什麼?這個協議的優點是什麼?讓我們來看看:

權益證明的優點

*降低整體能源消耗和貨幣成本:世界範圍比特幣礦工每小時花費約 50,000 美元用電。那是每天 120 萬美元,每月 3600 萬美元,每年約 4.5 億美元!只是把最重要的放在那些數字和浪費的電量上。通過使用“權益證明”,你將使整個過程完全虛擬化,並切斷所有這些成本。
*沒有 ASIC 優勢:由於整個過程將是虛擬的,因此不依賴於誰擁有更好的設備或 ASIC (專用集成電路)。
*使 51%的攻擊更難:51%的攻擊發生在一羣礦工獲得超過世界散射能力的 50%時。使用權益證明可以抵消這種攻擊。
*無惡意驗證者:任何將資金鎖定在區塊鏈中的驗證人都會確保他們不會向鏈中添加任何錯誤或惡意的區塊,因爲這意味着他們投入的全部股權將被剝奪。
*塊創建:更快地創建更新的塊和整個過程。
*可伸縮性:通過引入“分片”概念使區塊鏈可擴展(稍後將詳細介紹)。

儘管之前有過各種簡單的權益證明實施,但 Casper 與其他方式的區別在於,它激勵了誠實的礦工並懲罰了不誠實的礦工。如果你已經將你的賭注置於惡意區塊上,那麼賭注將被取走。它將懲罰任何不遵守規則的人。

這是 Vitalik 解釋它的方式:

想象一下,100 個人坐在圓桌旁。一個人有一堆文件,每個文件都有不同的交易歷史。第一個參與者拿起一支筆並籤一張,然後將其傳遞給下一個做出類似選擇的人。如果每個參與者簽署了大多數參與者最終簽署的交易歷史記錄,則每個參與者只能獲得 1 美元。如果你在一個頁面上簽名並稍後簽署另外不該籤的一頁,那麼你的房子就會被燒燬。然後他補充說,這可能是正確簽署的好動力!

3

什麼是智能合約?

智能合約是自動化合約。它們是自動執行的,並且在其代碼上寫入特定指令,這些指令在特定條件下執行。

你可以在我們的其他文章中瞭解有關智能合約的更多信息。

智能合約是以太坊生態系統中的任務完成的方式。當有人想要在以太坊完成特定任務時,他們會與一個或多個人簽訂智能合約。

智能合約是一系列指令,使用編程語言 solidity 編寫,它基於 IFTTT 邏輯(即 IF-THIS-THEN-THAT 邏輯)工作。基本上,如果完成了第一組指令,則執行下一個函數,然後執行下一個函數並繼續重複,直到合約結束。

理解這一點的最好方法是想象一臺自動售貨機。你採取的每個步驟都像下一步執行自身的觸發器。它有點像多米諾骨牌效應。那麼,讓我們來看看在與自動售貨機交互時你將採取的步驟:

*第 1 步:你給自動售貨機一些錢。
*第 2 步:按下與所需產品對應的按鈕。
*第 3 步:該產品出來,你收起它。

現在看看所有這些步驟並考慮一下。如果前一個步驟沒有執行,其他任何步驟都還可以工作嗎?這些步驟中的每一步都與前一步驟直接相關。還有一個要考慮的因素,它是智能合約的一個組成部分。你可以看到,在與自動售貨機的整個交互過程中,你(請求者)僅與機器(提供商)合作。絕對沒有第三方參與。

那麼,現在,如果它在以太坊網絡中發生,那麼這筆交易將如何?

假設你剛剛從以太坊網絡中的自動售貨機購買了一些東西,那麼步驟將如何?

*第 1 步:你給自動售貨機一些錢,這由以太坊網絡中的所有節點記錄,並且交易在分類帳中更新。
*第 2 步:按下與你想要的產品對應的按鈕,並在以太坊網絡和分類帳中更新記錄。
*第 3 步:產品出來,你收集它,這將由所有節點和分類帳記錄。

你通過智能合約進行的每筆交易都將由網絡記錄和更新。這樣做是因爲它讓每個參與合約的人都對他們的行爲負責。它通過使整個網絡可以看到每個動作來消除人類的惡意。

好的,直到現在我們已經涵蓋了以太坊是什麼,什麼是採礦,什麼是智能合約。如果你的候選人不能令人滿意地回答這些問題,那就讓他們在那一瞬間離開。已經不值得你再花時間。

4

掌握智能合約代碼

顯然,這應該是所有偉大的開發人員的菜。你可以肯定地瞭解開發人員的專業知識的一種方法是讓他們解釋特定合約的工作原理。在這裏,我們將向你展示兩個 solidity 代碼。你可以通過他們運行此代碼並要求他們將其分解並向你解釋每個步驟中發生的情況。

代碼示例 1

代碼和解釋來自 toptal。

pragma solidity 0.4.18;import \”./Vehicle.sol\”;

contract VehicleOwner {
address public owner;
mapping(bytes32 => address) public vehicles; event
NewVehicleAdded(address indexed newVehicle, uint256 timestamp); function
VehicleOwner() public {
owner = msg.sender;
} /**
*@dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(msg.sender == owner);
_;
} function createNewVehicle(string model, string make, bytes32 vin)
public onlyOwner {
address newVehicle = new Vehicle(model, make, vin);
vehicles[vin] = newVehicle;
NewVehicleAdded(newVehicle, now);
}
}

讓我們一行一行地瞭解這些代碼都幹了些什麼。

代碼:pragma solidity 0.4.18;

分析:指定使用的編譯器的版本。在這兒是 0.4.18

  • 代碼:import“./Vehicle.sol”;**
    分析:導入用於代表新車輛的智能合約。

代碼:contract VehicleOwner {

分析:聲明車主合約。

代碼:

address public owner;
mapping(bytes32 => address) public vehicles;

分析:這是我們充實合約的地方。第一個變量調用所有者 owner 並表示創建 VehicleOwner 合約的任何給定實例的以太坊。

第二個稱爲 vehicles 車輛,將用於存儲車主擁有的車輛清單,通過將其合約地址分配給提供的車輛識別號碼。

代碼:

function VehicleOwner() public {
owner = msg.sender;
}

分析:看看該函數與合約的名稱是什麼?這是因爲這個特定的函數是一個構造函數。它唯一的功能是將調用該函數的地址指定爲合約所有者。

代碼:

modifier onlyOwner() {require(msg.sender == owner);_;
}

分析:使用此函數修飾符確保只有合約所有者才能訪問合約。

看到 _?這產生了稍後應用修改器 modifier 的函數體。

代碼:

function createNewVehicle(string model, string make, bytes32 vin) public
onlyOwner {
address newVehicle = new Vehicle(model, make, vin);
vehicles[vin] = newVehicle;
NewVehicleAdded(newVehicle, now);
}

分析:這在區塊鏈上創建了一個新合約,這是一種新車輛的代表。車輛合約的構造函數接收三個屬性:model,make 和 vin,後者可用於識別特定車輛。

創建新合約將返回其新分配的地址。在函數中,使用車輛的映射,我們將給定的 vin 綁定到該地址。最後,該函數廣播一個新事件,傳入地址和當前時間戳。

代碼示例 2

contract BasicIterator
{
address creator; // reserve one \”address\”-type spotuint8[10] integers; //
reserve a chunk of storage for 10 8-bit unsigned integers in an arrayfunction
BasicIterator(){
creator = msg.sender;
uint8 x = 0;//Section 1: Assigning valueswhile(x < integers.length) {
integers[x] = x;
x++;
} }function getSum() constant returns (uint) {
uint8 sum = 0;
uint8 x = 0;//Section 2: Adding the integers in an array.while(x <
integers.length) {
sum = sum + integers[x];
x++;
}return sum;
}// Section 3: Killing the contractfunction kill(){if (msg.sender == creator)
{
suicide(creator);
}
}

}

那麼,讓我們來分析吧。

第 1 節:賦值

在第一步中,我們賦值一個名爲“integers”的數組,該數組接收 10 個 8 位無符號整數。我們這樣做的方式是通過 while 循環。讓我們來看看 while 循環中發生了什麼。

while(x < integers.length) {integers[x] = x;x++;
}

請記住,我們已經爲整數 x 賦值“0”。while 循環從 0 變爲 integers.length。Integers.length 是一個返回數組最大容量的函數。因此,如果我們確定一個數組將有 10 個整數,arrayname.length 將返回一個值 10。在上面的循環中,x 的值從 0 到 9 (<10)並將其自身的值賦給整數數組也是如此。因此,在循環結束時,“integers”將具有以下值:

0,1,2,3,4,5,6,7,8,9。

第 2 節:添加數組內容

在 getSum() 函數內部,我們將添加數組本身的內容。它的方式是通過重複上面相同的 while 循環並使用變量“sum”來添加數組的內容。

第 3 節:終止合約

此功能終止合約並將合約中的剩餘資金髮回給合約創建者。

因此,這應該可以讓你更好地瞭解 solidity 合約看起來是什麼樣子的以及你應該從那裏獲得什麼樣的代碼細分類型。

5

以太和 gas 有什麼區別?

這是你的開發人員應該熟悉的另一個核心概念。

以太是生態系統中的主要標記。這是激勵玩家完成智能合約的動力。

gas 是滿足特定合約所需的燃料量。

當有人提交智能合約時,它具有預先確定的 gas 價值。合約執行時,合約的每一步都需要一定量的氣體來執行。

這可能導致兩種情況:

*所需的 gas 超過設定的極限。如果是這種情況,則合約狀態將恢復到原始狀態,並且所有氣體都用完了。
*所需 gas 小於設定的極限。如果是這種情況,那麼合約就完成了,剩餘的 gas 將交給合約制定者。

以下是顯示 Wei 的平均 gas 價格的圖表。

gas 是以太坊的生命線。

以太坊的所有交易均由礦工驗證。基本上,他們必須手動將每個交易放入他們爲了驗證交易而挖掘的塊中。爲了換取他們的服務,他們收取了一定的交易費用。

通常,優先考慮高 gas 費的智能合約,因爲礦工有機會在那裏收取更高的費用。與比特幣相比,收取的費用只是象徵性的。

此圖表比較了比特幣與以太坊的交易費用。

實際上,正如你所看到的,在 0.01 以太的此次交易中,僅收取 0.00000000000002 以太的 gas 作爲交易費用 <$0.000001。

所以,正如你所看到的,以太坊的礦工只收取非常象徵性的交易費用。顯然收取交易費是礦工的次要角色,他們的主要工作是 …… 好吧 …… 挖礦!

6

問題和解答

提煉所有這些知識,讓我們對你可以提出的一些具體問題。

1. 問題:合約構造函數是如何定義的?
解答:構造函數被定義爲一個函數,其名稱與合約完全相同。

2. 問題:在以太坊中記錄的事件在哪裏?它們的目的是什麼?
解答:日誌是合約發出的事件。這些是其交易收據的一部分以及在以太坊虛擬機(EVM)上執行的 LOG
opcodes 操作碼的結果。這些事件主要用於與前端通信或作爲廉價的數據存儲。因爲交易的返回值只是交易的 hash,區塊鏈需要一些時間來達成共識並驗證交易,通過將它們挖掘到新塊中。通過發出事件並使前端收聽(觀察)這些事件,實現了有效的通信。

3. 問題:mappings 映射是什麼?
解答:映射等同於其他編程語言中的字典或映射。它就是鍵值存儲。

4. 問題:修飾語 purpose of modifiers 的目的是什麼?
解答:顧名思義,他們修改使用它們的功能。但是,在執行函數之前必須滿足修飾符的條件。如果不是,那麼修飾符會拋出錯誤。

5. 問題:以太坊庫 libraries 是什麼?
解答:以太坊庫有助於隔離整體邏輯。它們是一組使用以太坊虛擬機(EVM)在區塊鏈上使用的軟件包。所有庫都可以在智能合約中部署和鏈接。它們可以通過 DELEGATECALL 調用。

6. 問題:爲什麼在智能合約上調用方法需要花錢?
解答:當調用方法時,它們會改變區塊鏈的狀態。由於操作需要 gas,因此需要花錢。

哪裏可以找到優秀的開發人員?

在像 LinkedIn 和谷歌這樣的“傳統地方”很難找到優秀的開發者。但是,Reddit,GitHub 等是尋找這些開發人員的好地方。

另外,還有一件事。由於這是一個利基人才市場,你應該對他們可能在你的城市甚至你自己的國家的事實持開放態度。應該爲遠程工作做好準備,特別是如果你正在尋找優秀開發者。

這可能是一種痛苦,但這是“質量超過數量”的必須面對的情況之一。

7

結論

當你面試以太坊開發人員時,你必須記住一件事。他們沒有必要徹底回答所有問題。重要的是他們的熱情以及他們是否能夠專門回答與他們的工作和角色有關的問題。

無論如何,本指南應該幫助你瞭解特別的區塊鏈開發人員。最後一句忠告,請不要和開發人員的質量妥協。請記住,質量永遠勝過數量。

課程推薦