Scorex簡介
Scorex是用akka實(shí)現(xiàn)的開源區(qū)塊鏈基礎(chǔ)組件,采用模塊化設(shè)計(jì)(共識模塊抽象為接口彤敛,并可通過配置替換)束昵。
Scorex核心代碼只有約4000行吼野,相對于其他區(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ùn)行Scorex的相關(guān)項(xiàng)目總結(jié)如下:
scrypto
底層的加密函數(shù)庫-
Scorex
基礎(chǔ)框架,包含了3個(gè)子模塊:- Scorex-basic ——賬戶和錢包矫夯、塊結(jié)構(gòu)定義鸽疾、P2P傳輸、共識接口定義训貌。
- Scorex-Consensus——共識的Nxt and Quora實(shí)現(xiàn)
- Scorex-Transaction——交易的接口定義和實(shí)現(xiàn)
Permacoin-consensus
共識的Permacoin實(shí)現(xiàn)——Permacoin是微軟和馬里蘭大學(xué)2014年提出的用于分布式可信任分片大文件存儲(chǔ)的共識協(xié)議制肮。Lagonaki
示例應(yīng)用——通過配置文件,將上述子項(xiàng)目作為庫調(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中的對應(yīng)的庫区拳,并在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)行之前請注意圣猎,sbt會(huì)下載一堆maven依賴庫,默認(rèn)的maven路徑下載速度可能非常慢(慢到你失去耐心:)乞而,可以用國內(nèi)的maven庫鏡像代替之送悔,mac下的方法如下:
打開文件 ~/.sbt/repositories
,增加國內(nèi)maven鏡像爪模,并注釋主maven庫:
[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疾呻。
用源代碼代替庫文件運(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)證
下面我們來驗(yàn)證上述工作達(dá)到了預(yù)期目標(biāo):即debug方式跟蹤Scorex內(nèi)部模塊的運(yùn)行,我們將利用Scorex集成的swagger-akka-http來觸發(fā)用例蛇损。
Lagonaki
應(yīng)用的settings.json
配置文件制定了rpc端口
"rpcPort": 9085,
運(yùn)行Lagonaki
應(yīng)用赁温,瀏覽器訪問此端口可以看到Swagger UI展示的api文檔:
根據(jù)url可以定位到對應(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á)成!