Scorex簡(jiǎn)介
Scorex是用akka實(shí)現(xiàn)的開源區(qū)塊鏈基礎(chǔ)組件,采用模塊化設(shè)計(jì)(共識(shí)模塊抽象為接口,并可通過(guò)配置替換)。
Scorex核心代碼只有約4000行,相對(duì)于其他區(qū)塊鏈項(xiàng)目,它的“純潔”更容易為區(qū)塊鏈開發(fā)者掌握和運(yùn)用。
本文目的
介紹如何下載Scorex相關(guān)代碼,并在eclipse中以Debug方式運(yùn)行,Debug方式運(yùn)行可以讓開發(fā)者更好地跟蹤和學(xué)習(xí)Scorex的內(nèi)部運(yùn)行機(jī)制。
相關(guān)子項(xiàng)目
Scorex的文檔有點(diǎn)亂,某些文檔移動(dòng)了位置但相應(yīng)的鏈接沒有更新導(dǎo)致鏈接失效,我根據(jù)首頁(yè)中的鏈接按圖索驥,對(duì)運(yùn)行Scorex的相關(guān)項(xiàng)目總結(jié)如下:
scrypto
底層的加密函數(shù)庫(kù)-
Scorex
基礎(chǔ)框架,包含了3個(gè)子模塊:- Scorex-basic ——賬戶和錢包、塊結(jié)構(gòu)定義、P2P傳輸、共識(shí)接口定義。
- Scorex-Consensus——共識(shí)的Nxt and Quora實(shí)現(xiàn)
- Scorex-Transaction——交易的接口定義和實(shí)現(xiàn)
Permacoin-consensus
共識(shí)的Permacoin實(shí)現(xiàn)——Permacoin是微軟和馬里蘭大學(xué)2014年提出的用于分布式可信任分片大文件存儲(chǔ)的共識(shí)協(xié)議。Lagonaki
示例應(yīng)用——通過(guò)配置文件,將上述子項(xiàng)目作為庫(kù)調(diào)用的應(yīng)用示范。
開發(fā)環(huán)境
操作系統(tǒng):macOS 10.12.1
JDK:j2se1.8.0_91
Scala: 2.12.1
sbt: 0.13.11
Scala-IDE: 4.5.0
基本步驟
分兩步進(jìn)行:
- 下載Lagonaki代碼,轉(zhuǎn)為eclipse項(xiàng)目。
- 用源代碼項(xiàng)目替換Lagonaki中的對(duì)應(yīng)的庫(kù),并在IDE中以debug方式運(yùn)行。
下載和運(yùn)行Lagonaki
將Lagonaki代碼git clone到本地之后,打開 project/build.properties , 確認(rèn)你本地的sbt版本與其版本一致:
sbt.version=0.13.11
生成lagonaki的eclipse項(xiàng)目
為了從sbt項(xiàng)目生成eclipse項(xiàng)目,新建一個(gè) project/assembly.sbt ,其內(nèi)容如下:
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.0.1")
現(xiàn)在可以到Lagonaki的根目錄下,運(yùn)行sbt,但是運(yùn)行之前請(qǐng)注意,sbt會(huì)下載一堆maven依賴庫(kù),默認(rèn)的maven路徑下載速度可能非常慢(慢到你失去耐心:),可以用國(guó)內(nèi)的maven庫(kù)鏡像代替之,mac下的方法如下:
打開文件 ~/.sbt/repositories,增加國(guó)內(nèi)maven鏡像,并注釋主maven庫(kù):
[repositories]
local
aliyun: http://maven.aliyun.com/nexus/content/groups/public/
# maven-central
...
到Lagonaki的根目錄下,首先運(yùn)行sbt,等待sbt結(jié)束后運(yùn)行eclipse
至此eclipse項(xiàng)目生成。
bash-3.2$ sbt
[info] Loading project definition from /Users/c4w/git/Lagonaki/project
[info] Set current project to lagonaki (in build file:/Users/c4w/git/Lagonaki/)
> eclipse
[info] About to create Eclipse project files for your project(s).
[info] Resolving org.scala-lang#scala-reflect;2.11.8 ...
[info] Successfully created Eclipse project files for project(s):
[info] lagonaki
>
導(dǎo)入lagonaki項(xiàng)目


運(yùn)行l(wèi)agonaki

至此完成第一步驟,在IDE下運(yùn)行示范應(yīng)用。如果不指定運(yùn)行參數(shù),默認(rèn)加載配置文件:settings.json,節(jié)點(diǎn)會(huì)從Seed Peers接入TestNet。
用源代碼代替庫(kù)文件運(yùn)行Lagonaki
但我們需要跟蹤Scorex的內(nèi)部處理細(xì)節(jié)時(shí),需要以Debug方式運(yùn)行源代碼。
首先,用上述將sbt項(xiàng)目導(dǎo)入到IDE的方法,將Scorex項(xiàng)目也導(dǎo)入到IDE。
這里有個(gè)坑,由于Scorex項(xiàng)目包含了子項(xiàng)目,需要用eclipse skip-parents=false命令代替eclipse命令,否則只有scorex-basic子項(xiàng)目代碼導(dǎo)入。
scorex導(dǎo)入IDE之后,手工增加src路徑:

在lagonaki項(xiàng)目的Libraries中找到scorex-basicsxxx.jar,并Remove之。

然后在
Projects的依賴中增加scorex項(xiàng)目:

成果驗(yàn)證
下面我們來(lái)驗(yàn)證上述工作達(dá)到了預(yù)期目標(biāo):即debug方式跟蹤Scorex內(nèi)部模塊的運(yùn)行,我們將利用Scorex集成的swagger-akka-http來(lái)觸發(fā)用例。
Lagonaki應(yīng)用的settings.json配置文件制定了rpc端口
"rpcPort": 9085,
運(yùn)行Lagonaki應(yīng)用,瀏覽器訪問(wèn)此端口可以看到Swagger UI展示的api文檔:

根據(jù)url可以定位到對(duì)應(yīng)的代碼在:
AddressApiRoute.scala line185在line189設(shè)置斷點(diǎn)

以debug方式運(yùn)行應(yīng)用,然后前臺(tái)點(diǎn)擊Try it out!,后臺(tái)停留在斷點(diǎn)位置,目標(biāo)達(dá)成!
