07.30 「區塊鏈學習筆記」EOS開發系列第一篇|開發環境搭建(macOS)

卷首語

從2017年末開始,區塊鏈(blockchain)突然成為了一個熱點話題。“區塊鏈+X”成了創業者津津樂道的口頭禪,CryptoCurrency都成了大爺大媽口中的時髦用語。

大家可能都見過那張【區塊鏈從業人員vs人工智能從業人員平均工資】的對比圖,許多非區塊鏈技術人員甚至其他行業的小白看完之後,紛紛表示按捺不住“All in 區塊鏈”的跳槽心情。

區塊鏈就像一個圍城,一方面城內人才荒,另一方面城外的人想進來,卻連門都找不到。在比特幣更多隻剩下投資價值、以太坊無法改善交易擁堵的今天,被稱為區塊鏈3.0的EOS被大家寄予厚望。

當筆者嘗試在google中搜索【blockchain eos get started】關鍵詞時,總搜索結果180W條,但第一頁中真正在講解入門的博客僅3篇,從第4頁開始,被大量的bitcoin、ethereum等其他區塊鏈項目信息“濫竽充數”。因此,EOS開發者社區現正式推出EOS開發入門教程第二卷——火箭入門EOS開發系列:本系列將幫助你以最快的方式迅速走通EOS技術開發全流程,並上手開發智能合約。在這個系列你將至少學到:

  • EOS基礎環境搭建
  • EOS重要組成部分
  • EOS白皮書概念結合應用深入理解
  • EOS智能合約實戰開發
「區塊鏈學習筆記」EOS開發系列第一篇|開發環境搭建(macOS)

本文作為系列第一篇文章,主要介紹瞭如何搭建EOS本地環境、運行節點並進行簡單的交互:如創建錢包。(筆者用的是macOS系統)

EOS主網正式上線,想必大家都很激動吧。我的第一感覺是,雖然EOS離自己的目標仍然還有一段路要走,但是它依然是被寄予厚望的公鏈項目。現在似乎是更加深入瞭解EOS的好時候,一開始,我們會學習一些和EOS平臺交互的簡單操作。

在正式開始之前,有一點需要提醒大家,你需要掌握下面這些基本知識:

  • 命令行的簡單操作(會切換目錄就行啦)
  • git的簡單實用(會git clone就行啦)

即使你還沒有接觸過這些,百度一下,十分鐘搞定。

NO1. git clone

首先進入一個你想要放置eos項目的目錄,把下面這行命令複製到終端裡,然後按下enter:(對我來說,我想把eos放在目錄`/Users/hammer/blockchain`中)

cd /Users/hammer/blockchain

git clone https://github.com/EOSIO/eos --recursive

這會幫你安裝一大堆“東西”,`--recursive`可以確保你安裝了屬於這個項目的所有"東西"。它會層級式地複製這個目錄,一直複製到目錄樹的最底層(大家可以想象一下俄羅斯套娃)。關於git的使用解釋到這兒就可以啦。現在,讓我們進入這個目錄裡看看:

cd eos

ls

輸入上面的命令就會顯示如下界面:

「區塊鏈學習筆記」EOS開發系列第一篇|開發環境搭建(macOS)

真的有好多東西!你肯定想,如果有其他更輕量級的方法來和EOS主網交互,該是一件多棒的事情。不過,既然你都讀到這兒了,我猜你可能也是蠻拼(認真)的。做到這兒,我們的主要目的就是在本地搭EOS。就在你剛剛下載的目錄裡,有一個腳本可以實現這個功能。比較遜的就是,整個安裝工程太浩大了,大概1G多,裡面有超級多的依賴包。

並且它需要你提前安裝有xcode,mongodb,homebrew還有一堆其他的東西。因為我事先已經裝好這些了,所以可能會更省心一些。如果你還沒裝,估計就要耗時更久了。其實裡面的有些依賴,EOS也並不是非要不可(但是你就要裝啊...)。

對於一個 ***getting_start*** 文章來說,上面這些對於小白的殺傷力依然太強了。咱們就拿MongoDB來舉個例子,mongodb簡而言之就是一個數據庫。那麼為什麼一個數據庫會跟區塊鏈項目扯上關係?是不是區塊鏈就是個數據庫?看上去EOS似乎使用mongodb作為主要數據的輔助支撐。這樣的話就能理解,為什麼大家都說從區塊鏈上查數據是件很痛苦的事情了。我們進一步猜mongodb複製了區塊鏈的部分數據並且支持標準化的查詢語法進行訪問。(不得不說想象力對理解一個陌生又複雜的系統,確實是個好東西。)

NO2. build

為了搭建EOS,我們要使用剛剛下載的文件夾裡的一個文件:`eosio_build.sh`.以`.sh`結尾說明這是一個shell腳本。一句話概括就是。這是一個可以直接通過命令行執行的文件。

./eosio_build.sh

執行這個腳本需要花一段時間,並且它很有可能失敗一兩次,告訴你還需要安裝其他的軟件。對我來說,安裝軟件最折磨人的地方,永遠是那些【為了安裝要再安裝】的環節。如果你也遇到了這些問題,深呼吸試試? 不過能讀到這兒的基本就剩下程序員了吧,那對這種問題估計也見怪不怪了。如果你是一個為了區塊鏈,連英語和計算機都敢自學的小白,那這些問題對你還算問題麼。(為你打call)【我自己遇到的問題和解決辦法都貼在了下面的`附錄1`裡,希望能對大家有所幫助】

這個命令成功完成的畫面是:

「區塊鏈學習筆記」EOS開發系列第一篇|開發環境搭建(macOS)

NO3. make install

一旦`eosio_build`完成之後,你需要在之前下載的`eos`文件夾中繼續找一個叫`build`的文件夾,並執行以下指令:

cd build

sudo make install

然後繼續等它完成。完成之後,你就可以繼續往下走了:

cd programs/nodeos

./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin

運氣好的話,EOS本地安裝就完成啦。它會產生block並且記錄下來,打印在命令行中。**COOL !**(雖然有點複雜)。但是我還要很負責地告訴你,現在還沒到抱怨複雜的時候,我們離深入瞭解EOS還差得早呢。順便貼一下成功運行的樣子

「區塊鏈學習筆記」EOS開發系列第一篇|開發環境搭建(macOS)

NO4. 創建錢包

到這裡,我們的安裝工作就告一段落了,下面就到了真正開始操作EOS的時候了。我們先來補充一點背景知識。下面這張圖展示了,EOS開發系統裡主要部分是如何交互的:

「區塊鏈學習筆記」EOS開發系列第一篇|開發環境搭建(macOS)

你現在就是圖中那個小人。現在有三個可用的EOS服務。你正在使用的是`cleos`服務。`cleos` = `cli` + `eos`,簡單來說,這是一個用命令行和EOS進行交互並且管理錢包的工具。這個服務同時也會使用`nodeos`(後臺運行的eos主程序)和`keosd`(保證錢包中密鑰安全的組件)。下面就到了激動人心的創建錢包環節:

cleos wallet create

「區塊鏈學習筆記」EOS開發系列第一篇|開發環境搭建(macOS)

如果看到了這個畫面,JUST CELEBRATE!【在創建錢包大家通常也會遇到一個問題,在`附錄2`中我貼出瞭解決辦法】除了像剛才那樣創建默認錢包外,還可以創建自己命名的錢包。比如就叫`mywallet`,**記住打印出來的密碼哦**:

cloes wallet create -n mywallet

創建的錢包文件在`~/eosio-wallet/`文件夾中,安全起見的話,也可以備份該文件到硬盤再刪除,需要用了再拷貝回來。

#附錄1 - build過程中遇到的問題

我自己在`./eosio_build.sh`的過程中,遇到了2個error,這裡貼出來供大家參考:

問題1. LLVM_DIR UNSET

詳細錯誤如下:

CMake Error at libraries/wasm-jit/Source/Runtime/CMakeLists.txt:26 (find_package):

Could not find a package configuration file provided by "LLVM" (requested

version 4.0) with any of the following names:

LLVMConfig.cmake

llvm-config.cmake

Add the installation prefix of "LLVM" to CMAKE_PREFIX_PATH or set

"LLVM_DIR" to a directory containing one of the above files. If "LLVM"

provides a separate development package or SDK, be sure it has been

installed.

-- Configuring incomplete, errors occurred!

See also "/Users/hammer/blockchain/eos/build/CMakeFiles/CMakeOutput.log".

>>>>>>>>>>>>>>>>>>>> CMAKE building EOSIO has exited with the above error

【解決辦法】:

指定`LLVM_DIR`的值。我自己用的是`zsh`,所以修改的是`~/.zshrc`文件,使用`bash`的小夥伴修改`~/.bash_profile`即可。

在`~/.zshrc`文件中追加一行:(記得先檢查下你的`/usr/local/Cellar/`裡到底有沒有`llvm@4`以及相應版本的文件夾)

export LLVM_DIR=/usr/local/Cellar/llvm@4/4.0.1

最後別忘記`source`生效:

source ~/.zshrc

問題2. WRONG WITH GETTEXT

詳細錯誤如下:

Undefined symbols for architecture x86_64:

"_libintl_bindtextdomain", referenced from:

_main in main.cpp.o

"_libintl_gettext", referenced from:

eosio::client::localize::localized_with_variant(char const*, fc::variant_object const&) in main.cpp.o

eosio::client::localize::localized_with_variant(char const*, fc::variant_object const&) in help_text.cpp.o

"_libintl_textdomain", referenced from:

_main in main.cpp.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation

【解決辦法】

在命令行中輸入:

brew unlink gettext && brew link --force gettext

然後重新進入eos文件夾中執行`./eosio_build.sh`即可。

#附錄2 - 在創建錢包時遇到的問題

在執行`cleos wallet create`的時候,會遇到一個很常見的問題,提示你要kill keosd。

詳細錯誤如下:

"/usr/local/bin/keosd" launched

Unable to connect to keosd, if keosd is running please kill the process and try again.

多半是因為端口配置的問題。(雖然官網中說cleos運行時會自動啟動keosd,我也沒遇到這個問題,但是有小夥伴反映了有這個問題,現在貼一下解決辦法)。在之前說的eos錢包的目錄`~/eosio-wallet`中有一個`config.ini`文件,在裡面找到`http-server-address`那一行,替換成如下端口號:

http-server-address = 127.0.0.1:8900

將keosd監聽端口改為8900,然後再執行如下命令啟動keosd:

keosd&

之後我們再來創建錢包:

cleos wallet create -n test

TADA!成功!

今天簡單介紹瞭如何入門EOS,下一章將手把手教會你如何連接EOS主網。


分享到:


相關文章: