區塊鏈的創世紀
藉由實作乙太坊私網一窺加密貨幣的起源
由於近期承接了許多加密貨幣的相關系統開發案,這一系列的文章,將順著我的學習歷程,分享一些觀點或彙整各種文獻後的知識整理。2009年1月3日,一位礦工挖出了第一個比特幣區塊,這個區塊被稱為創世區塊(genesis block)。作為挖礦獎勵,這位礦工獲得了50顆比特幣,當時50顆比特幣連1美元都換不到(直到當年10月,New Liberty Standard以挖礦的電力成本作為費率參考,訂定了以1,309.03比特幣兌一美元的費率)本篇文章以乙太坊私網為例建構區塊鏈私網,並透過實作讓大家理解區塊鏈網路的建立過程,以銜接接下來即將撰寫的智能合約相關文章
區塊鏈的本質是一個用來建立信任的技術,但其去中心化的特性,仍然需要有許多人貢獻自己的電腦,作為區塊鏈網路節點,才能讓這個系統順利運作,要如何讓大家願意讓出電腦的儲存資源和運算資源呢?
挖礦的原理
前幾年挖礦盛行,許多人在家裡放了一台礦機挖各種加密貨幣,也有人以販售礦機為業。其實挖礦就是將自己的電腦作為區塊鏈網路的節點,連上區塊鏈主網,提供電腦的運算資源換取獎勵,幫主網建立區塊,以便儲存更多的交易紀錄。
透過這樣的獎勵機制,讓大家願意提供自己的電腦作為區塊鏈網路的節點,如此一來便能創造出一個遍佈世界的區塊鏈網路:
區塊鏈的創世紀
我們就以乙太坊來一窺區塊鏈的創世紀吧,建立區塊鏈網路主要需要4個步驟:
- 建立第一個區塊鏈節點
- 初始化區塊鏈網路
- 建立創世區塊
- 將其他電腦加入同一個區塊鏈網路
以geth建立區塊鏈網路
有了節點,就可以請礦工幫忙挖礦,以便建立更多的區塊供網路使用,同時也以加密貨幣作為挖礦獎勵。接下來會透過geth這個工具來建立區塊鏈網路。如果是Mac OS可直接以root權限執行以下shell script:
clone https://github.com/JamesShieh0510/ethereum-smart-contract.git
. ./installing-with-homebrew-for-mac.sh #安裝geth (geth是一個以Go語言實作的命令工具,用以運行整個乙太坊節點)
. ./init-private-network.sh #建立乙太坊私網
其他作業系統,可以參考以下幾篇文章。
下載geth:
建立乙太坊私網(private network):
其中 init-private-network.sh,主要是透過以下json檔,來定義乙太坊網路的相關屬性:
{
“config”: {
“chainId”: 15,
“homesteadBlock”: 0,
“eip155Block”: 0,
“eip158Block”: 0
},
“difficulty”: “200000000”,
“gasLimit”: “2100000”,
“alloc”: {
“7df9a875a174b3bc565e6424a0050ebc1b2d1d82”: { “balance”: “300000” },
“f41c74c9ae680c1aa78f42e5647a62f353b7bdde”: { “balance”: “400000” }
}
}
幾個重要參數:
difficulty:定義了挖礦的難度(數值越高越難挖)
alloc:預先資助的帳戶——也就是區塊鏈建立後要分配多少ether到指定的帳戶中,通常會分配個初始投資人、募資貢獻者等等。
私網建立成功後,就可以在console中執行挖礦指令:
personal.newAccount("xxx") #挖礦之前必須先建立一個帳戶
miner.start() #開始挖礦
將其他電腦加入同一個區塊鏈網路
至此,我們已經建立好一個區塊鏈私網的節點了,我們可以透過以下指令把其他電腦也加入同個網路中:
geth --datadir path/to/custom/data/folder --networkid 15 --bootnodes <bootnode-enode-url-from-above>
總結
本篇藉由geth建立乙太坊私網,並透過挖礦建立區塊,以實作的方式讓大家理解整個區塊鏈網路的發展過程。
獎勵機制是區塊鏈網路成長很重要的元素,從鼓勵大家成為節點的角度來看,這個機制也是讓區塊鏈朝去中心化發展的誘因,但也使得發展大型礦池、礦場、礦機都成為一種獲利的方法,導致區塊鏈網路的算力資源多集中在少數人手上,形成某種形式上的中心化。對於追求去中心化的區塊鏈而言,這樣的發展值得玩味。
我是James,一位自由接案工作者對於軟體開發與接案工作充滿熱忱,截至2018年,不知不覺已經累積11年的時間在這個領域打轉,擁有6年的接案經驗。 寫作是我一個新的嘗試,初衷是希望能讓這個環境變得更好,從三個面向出發:1.個人:強化團隊成員的生產力與技術力,提供技術觀點與教學、工作方法等硬實力。
2.組織:培養良好的團隊合作態度與企業文化、分享合作與溝通技巧。
3.社會:讓客戶、發包單位知道如何有效處理系統外包,把資源花在刀口上,並透過接案經驗分享促進良好的合作。FB粉絲頁:艾菲肯先生——您最佳的技術夥伴
個人刊物 :艾菲肯先生的咖啡時間
工作室網站:Efacani.com