崇慕:PoS發明人最新項目 VSYS源代碼庫分析評測

VSYS主網上線近半年,代碼更新頻繁,完善度極高,當前在github公開的主要有三個代碼庫,分別是 VSYS節點、web錢包、冷錢包,可見其生態工具鏈佈局正在駛入高速通道。

項目概覽

由PoS之父Sunny King 創建的區塊鏈數據庫雲。 VSYS基於POS自研了業界最高效的共識算法SPOS,目前兩大主流公鏈以太坊和EOS的共識機制都是參考自POS。本次Sunny King帶來的SPOS,必然是萬眾期待。雖然 VSYS主網還未上線,但代碼完善度極高,當前在github公開的主要有三個代碼庫,分別是 VSYS節點、web錢包、冷錢包,可見其生態工具鏈已經很完善;根據官方週報信息,全節點已在測試網穩定運行2周,沒有發現重大bug。

項目特色

VSYS為了實現區塊鏈數據庫雲的目標,獨創了很多超前的特性,VSYS項目的4大項目特色分別是靈活的賬戶體系、媲美傳統數據庫的操作方式、協議分層和可插拔系統組件。


崇慕:PoS發明人最新項目 VSYS源代碼庫分析評測


靈活的賬戶體系

1. 具備豐富的角色:

公鑰:用戶所產生密鑰對的公開部分

地址:公鑰的一種縮簡形式

虛擬身份/化身:與供臨時使用的公鑰相比,為長期使用身份

組織:每個身份與多個虛擬身份/化身相關聯,並由多個虛擬身份/化身所管理

可替代物:可替代屬性的虛擬資產/代幣,如貨幣、股份等

賬號:身份所擁有可替代物的容器,類似於銀行賬戶。注意其與傳統數據庫用戶賬 戶的區別。

2. 媲美傳統數據庫的操作方式

VSYS平臺計劃引入高級數據庫查詢功能。類似於 MongoDB 的對象-關係型查詢語言,比傳統關係型查詢模型(即 SQL)更加靈活。支持的操作有:

創建數據庫

插入對象

更新對象

刪除對象

創建索引

按索引鍵值查詢

3. 協議分層

• 共識管理層 • 區塊樹(Block tree)管理層 • 鏈間(Interchain)處理層 • 交易處理層 • 數據格式層

4. 可插拔系統組件

• 可插拔式共識模型 • 可插拔式業務邏輯容器 • 數據庫管理組件 • 數據庫操作組件 • 數據庫查詢組件 • 共享對等網絡服務 • 進行區塊鏈處理的全節點 • 智能手機端輕節點冷錢包 • 智能手機端輕節點熱錢包 • 瀏覽器端錢包

代碼庫基本信息

VSYS目前在github公佈的主要有三個代碼庫,分別是vee節點、web錢包,冷錢包。此外還有一個管理公私鑰對的命令行工具wallet-generator。

VSYS全節點


崇慕:PoS發明人最新項目 VSYS源代碼庫分析評測


commit數量豐富。結合提交歷史可以發現VEE代碼提交頻繁,且每次都是高質量的代碼推送,這個成績超過現有99%的區塊鏈項目。

代碼量(只統計scala主體,不計算腳本和庫文件):27706行。可見scala寫出的項目代碼精簡,但功能豐富。相比其他區塊鏈項目動輒10W+的代碼量,vee不到3W簡直是開發者的福音。

作為未發佈主網的區塊鏈項目,34位貢獻者很突出,說明國際區塊鏈開發社區已欣然擁抱VEE,可以預見,隨著主網發佈完成,開發者社區日益完善,開發者生態很快就會與EOS,以太坊等現有主流公鏈並駕齊驅。

star數較少,甚至少於貢獻者。這是預期中的數字,因為VEE的開發者生態處於從0到1的建設過程,目前更多的精力還是應該集中保證主網穩定發佈,完善核心功能。

VSYS-wallet-gui

基於 SPV(Simplified Payment Verification),NodeJs開發的Web版輕錢包。除了基本的私鑰保管,還包括交易、資產保護以及發行基於VEE的代幣等豐富功能。除此之外,web版錢包還支持對冷錢包的監控,通過掃描冷錢包應用程序生成的qr代碼,即可在賬戶窗口查看所有的錢包信息。

github

|commits|contributors|stars| | :--: | :--: | :--: | :--: | |502|6|4|

vee-cold-android

基於Android開發的冷錢包。冷錢包主要用於保障存儲VSYS的安全性,其關鍵功能是離線狀態下生成和存儲私鑰。在熱錢包的幫助下,可實現轉賬、租賃等基本的錢包操作。此外,冷錢兼容多種備份恢復方案,並可在設備之間輕鬆的遷移。


崇慕:PoS發明人最新項目 VSYS源代碼庫分析評測


wallet-generator

錢包管理工具。可通過交互式的命令行生成錢包文件,管理公私鑰對。


崇慕:PoS發明人最新項目 VSYS源代碼庫分析評測


代碼解構

SPOS共識算法

VSYS基於POS改造升級了出SPOS(Supernode proof-of-stake)。SPOS提升區塊產生的速度,其採用MAB的機制及搶奪釋放的機制,保證了更強的公平性。SPOS目標是60個節點及60個鑄幣槽(鑄幣權),初期15個節點和60個鑄幣槽。這樣更有利於初期的參與者獲得更多的收益,還在擴展性上提供了更多的空間。從共識底層架構技術層面採用了分佈式超級節點,按循序出塊且間隔固定,在穩定及安全性上得到更好的保障。

我們總結了SPOS的特性:

SPOS超級節點按固定順序出塊;

以15個超級節點開啟主網,隨著網絡增長,超級節點數增長到30-60;

塊與塊之間間隔是固定的,這樣帶來了更佳穩定的延遲;

60個鑄幣槽,分別代表了一分鐘的60秒;

搶奪/釋放的機制,使得鑄幣權的競爭更公平(相較DPOS,就是比幣數,幣可以在多個節點重複投票);

鑄幣平均算法MAB,可以支撐幣權更好的流動性,不讓幣往一個地方跑,保持去中心化,保護網絡安全;

此SPOS機制來帶的好處:

為高性能的公鏈提供穩定高效的基礎設施;

固定的塊間隔設計,帶來的是兼具高吞吐量和更加穩定的區塊鏈網絡(其他網絡的高吞吐都無法保證穩定性,最終也是支持不了高性能業務運行的);

冷鑄幣的設計,保證了區塊鏈更加安全的性能;

經濟系統的設計,鼓勵生態系統持續投入升級超級節點,這樣保證了系統的運行效果將不斷提升;

SPOS算法入口如下:

package vee.consensus.spos

import com.google.common.primitives.{Bytes, Longs}

import play.api.libs.json.{JsObject, Json}

import scorex.block.BlockField

case class SposConsensusBlockField(override val value: SposConsensusBlockData)

extends BlockField[SposConsensusBlockData] {

override val name: String = "SPOSConsensus"

override def bytes: Array[Byte] =

Bytes.ensureCapacity(Longs.toByteArray(value.mintTime), 8, 0) ++

Bytes.ensureCapacity(Longs.toByteArray(value.mintBalance), 8, 0)

override def json: JsObject = Json.obj(name -> Json.obj(

"mintTime" -> value.mintTime,

"mintBalance" -> value.mintBalance

))

}

mab算法

為了保持加權平均餘額的良好性能並克服這些缺點,VSYS提出了一種新的平衡稱為鑄造平均餘量(MAB),即:Shn = min {Bhn,αBhn-1 +(1-α)Shn-1}

其中Bhn表示高度hn處的當前平衡。

最小平均餘額取當前餘額和加權平均餘額的最小值。

計算複雜度仍為O(1)。此外,在這個公式中,如果一個人將他/她的餘額全部轉出,MAB將直接減少到0。使用此屬性,總計量平均餘額將保守並由總餘額控制。

mab算法對應的實現如下:

MAB:weightedBalaceCalc

object SPoSCalc extends ScorexLogging {

// useful constant

val MinimalEffectiveBalanceForContender: Long = 100000000000000L

// update plan: 4 -> 15 slots, 2 -> 30 slots, 1 -> 60 slots

val SlotGap = if (AddressScheme.current.chainId == 'M'.toByte) 4 else 1

// update plan: 15 slots -> 36 vee coins, 30 slots -> 18 vee coins, 60 slots -> 9 vee coins

val BaseReward = 900000000L

val MintingReward = BaseReward * SlotGap

def weightedBalaceCalc(heightDiff: Int, lastEffectiveBalance: Long, lastWeightedBalance: Long, cntEffectiveBalance: Long, fs: FunctionalitySettings): Long = {

// mintingSpeed should be larger than 0

val maxUpdateBlocks = 24 * 60 * 60 / math.max(fs.mintingSpeed, 1) * 1L

val weightedBalance = math.min(lastEffectiveBalance/maxUpdateBlocks * math.min(maxUpdateBlocks, heightDiff)

+ lastWeightedBalance/maxUpdateBlocks * (maxUpdateBlocks - math.min(maxUpdateBlocks, heightDiff)),

cntEffectiveBalance)

weightedBalance

}

def mintingBalance(state: StateReader, fs: FunctionalitySettings, account: Address, atHeight: Int): Long = {

//TODO: we should set the mintingBalance for Genesis case

// this function only useful for spos minting process

// here atHeight should be larger than lastHeight (validation)

val lastHeight = state.lastUpdateHeight(account).getOrElse(0)

val lastWeightedBalance = state.lastUpdateWeightedBalance(account).getOrElse(0L)

val lastEffectiveBalance = state.effectiveBalanceAtHeightWithConfirmations(account,lastHeight,0)

val cntEffectiveBalance = state.effectiveBalance(account)

val weightedBalance = lastHeight == atHeight match {

case true => state.lastUpdateWeightedBalance(account).getOrElse(0L)

case _ => weightedBalaceCalc(atHeight - lastHeight, lastEffectiveBalance, lastWeightedBalance, cntEffectiveBalance, fs)

}

weightedBalance

}

// TODO: all SPoS related functions will be defined here

}

公鏈對比


崇慕:PoS發明人最新項目 VSYS源代碼庫分析評測


比特幣:區塊鏈的龍頭老大,知名度最高,受眾最廣;代表區塊鏈1.0

以太坊:首先提出智能合約的概念,開源社區最為成熟;代表區塊鏈2.0

EOS:秒級出塊速度,Dapp生態最為繁榮;代表區塊鏈3.0

VSYS:由PoS之父Sunny King 創建的區塊鏈數據庫雲,自研了最高效的共識算法SPOS;代表區塊鏈5.0

從開發語言來看。比特幣和EOS基於C++,開發門檻最高,目前EOS的智能合約只支持C++,且在短期內沒有支持其他語言的可能;以太坊基於GO,開發門檻稍低,但GO語言的生態遠不如JAVA,C/C++,並且GO自身的特性還有很多需要完善的地方; VSYS基於scala開發,scala語言性能優異,完美兼容java生態體系,想必Sunny King選擇scala也是預見到它的潛力。

從共識機制來看。PoW(Proof of Power)即工作量證明,是最有名也是目前使用最廣泛的共識算法,雖然通過爭奪記賬權的方式一定程度上保證了整個網絡的安全性,但消耗了巨大的資源,從結果上來說所有的節點都在做毫無意義的運算;而且挖礦機制導致平均10分鐘才形成一個區塊,很多區塊被確認時間超過2個小時,交易速度延遲度非常高。PoS(Proof of Stake)即股權證明,由質數幣、點點幣、VSYS的創始人Sunny King提出,PoS 試圖解決 PoW 機制中大量資源被浪費的情況,這種機制通過計算你持有佔總幣數的百分比以及佔有幣數的時間來決定記賬權;其被提出後受到業界熱烈追捧,區塊鏈2.0的大量公鏈包括以太坊都是採用POS共識機制。DPoS(Delegated Proof of Stake)即委託股權證明,是 PoS 的變種方案,比特股 BTS 和EOS即使用 DPoS共識機制,DPOS相較於POS的變化在於通過不同的策略,不定時的選中一小群節點,這一小群節點做新區塊的創建,驗證,簽名和相互監督,這樣就大幅度的減少了區塊創建和確認所需要消耗的時間和算力成本。SPOS(Supernode Proof-of-Stake)即超級節點股權證明,很明顯,SPOS是POS的進化版本,代表區塊鏈5.0的共識機制,由POS的創始人Sunny King親自操刀,SPOS的出現,代表著公鏈在性能上獲得里程碑式的突破,基於SPOS的VSYS公鏈能夠承載海量的dapp生態,使得區塊鏈產品大規模落地成為可能。

測試網絡部署

服務器OS版本:Ubuntu 16.04.5 LTS

VSYS版本:v0.1rc1

Install JRE 1.8

sudo add-apt-repository -y ppa:webupd8team/java

sudo apt-get update

sudo apt-get -y install oracle-java8-installer

確認安裝成功

java -version

Install SBT (Scala Build Tool)

echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823

sudo apt-get update

sudo apt-get install sbt

Tips:某些版本的ubuntu執行sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823的時候可能會報錯:

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823

Executing: /tmp/apt-key-gpghome.hEtryDWci3/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823

gpg: failed to start the dirmngr '/usr/bin/dirmngr': No such file or directory

gpg: connecting dirmngr at '/tmp/apt-key-gpghome.hEtryDWci3/S.dirmngr' failed: No such file or directory

gpg: keyserver receive failed: No dirmngr

> 按照提示先安裝dirmngr即可:$ sudo apt-get install dirmngr

確認sbt安裝成功

$ which sbt

/usr/bin/sbt

安裝VSYS節點服務

下載deb安裝文件

mkdir ~/vee && wget https://github.com/excelsia/vee/releases/download/v0.1rc1/vee-testnet_0.1rc1.deb

安裝

$ sudo dpkg -i vee*.deb

Selecting previously unselected package vee-core-testnet.

(Reading database ... 51859 files and directories currently installed.)

Preparing to unpack vee-testnet_0.1rc1.deb ...

Unpacking vee-core-testnet (0.0.3) ...

Setting up vee-core-testnet (0.0.3) ...

Warning: The home dir /var/lib/vee-core-testnet you specified can't be accessed: No such file or directory

Adding system user `vee-core-testnet' (UID 112) ...

Adding new group `vee-core-testnet' (GID 116) ...

Adding new user `vee-core-testnet' (UID 112) with group `vee-core-testnet' ...

Not creating home directory `/var/lib/vee-core-testnet'.

Creating default config file ...

Installing systemd service ...

Created symlink from /etc/systemd/system/multi-user.target.wants/vee-core-testnet.service to /lib/systemd/system/vee-core-testnet.service.

systemctl啟動服務並確認啟動狀態

$ sudo systemctl start vee-core-testnet.service

$ sudo systemctl status vee-core-testnet.service

> 服務啟動正常,整個部署過程簡潔,清晰。

配置文件

vee配置文件路徑:/etc/vee-core-testnet/,重點分析vee.conf

1 vee {

2 #directory = /tmp/vee

3 logging-level = DEBUG

4 network {

5 known-peers = ["52.8.148.150:19923", "18.130.233.104:9923"]

6 black-list-residence-time = 30s

7 peers-broadcast-interval = 5s

8 connection-timeout = 30s

9 }

10 wallet {

11 password = ""

12 }

13 blockchain {

14 type = TESTNET

15 }

16 checkpoints.public-key = 4HmYEMpPaJXJsDgdjGfFNXLAY2CdDAfhynwSL9BqydNA

17 matcher.enable = no

18 miner {

19 enable = yes

20 offline = no

21 quorum = 1

22 generation-delay = 1s

23 interval-after-last-block-then-generation-is-allowed = 120h

24 tf-like-scheduling = no

25 reward-address = ""

26 }

27 rest-api {

28 enable = yes

29 bind-address = 0.0.0.0

30 #api key veetest2018 for hash Fo8fR7J1gB3k2WoaE6gYKMwgWfoh9EtZtXAMBxYYCJWG

31 api-key-hash = Fo8fR7J1gB3k2WoaE6gYKMwgWfoh9EtZtXAMBxYYCJWG

32 }

33 utx.broadcast-interval = 3s

34 }

網絡相關配置:

known-peers:本地節點初始化啟動時連接的種子節點,目前默認是兩個。這也是為什麼本地節點啟動就可以正常工作的原因。

peers-broadcast-interval:節點信息同步的週期,比如如果設置為5s,就是每隔5秒鐘同步一次known-peers節點信息。

black-list-residence-time:將節點列入黑名單的時間

connection-timeout:peer節點網絡連接超時時間

錢包相關配置:

file:指定wallet文件的路徑,如果不指定默認的錢包文件為/var/lib/vee-core-testnet/wallet/wallet.dat

password:設定保護錢包文件的密鑰

blockchain配置:

type:區塊鏈網絡類型,測試網絡對應的值為TESTNET

miner配置

enable:挖礦開關

offline:節點脫機開關

quorum:連接多少個peer節點觸發挖礦。默認為1表示只要連接一個peer節點就開始挖礦,設為0意味著節點離線狀態也可以生成區塊,類似solo模式。

generation-delay:生成區塊的超時時間

interval-after-last-block-then-generation-is-allowe:意味著本地節點將不會開始產生區塊直到有最後一個時間不超過120小時的區塊

reward-address:自定義本地節點挖礦獎勵的地址,默認為空即挖礦成功後自動發送到本地節點地址,也可以指定冷錢包地址,無疑這樣安全性更高。

REST API配置

enable:激活或關閉rest-api功能

bind-address:指定rest-api綁定地址,如0.0.0.0表示開放外來連接

api-key-hash:api-key的哈希值,默認為Fo8fR7J1gB3k2WoaE6gYKMwgWfoh9EtZtXAMBxYYCJWG

>vee.conf詳細的配置模板參見:https://github.com/excelsia/vee/blob/master/vee-testnet.conf

節點數據

VSYS數據目錄

/var/lib/vee-core-testnet/

進入數據目錄查看,區塊鏈數據文件blockchain.dta同步完成後目前大小為373M。

$ ls -alh

total 422M

drwxr-xr-x 2 vee-core-testnet vee-core-testnet 4.0K Sep 15 05:09 .

drwxr-xr-x 5 vee-core-testnet vee-core-testnet 4.0K Sep 15 05:09 ..

-rw-r--r-- 1 vee-core-testnet vee-core-testnet 373M Sep 15 08:04 blockchain.dat

-rw-r--r-- 1 vee-core-testnet vee-core-testnet 8.0K Sep 15 05:09 checkpoint.dat

-rw-r--r-- 1 vee-core-testnet vee-core-testnet 52K Sep 15 08:52 peers.dat

-rw-r--r-- 1 vee-core-testnet vee-core-testnet 49M Sep 15 09:00 state.dat

節點部署總結

VSYS的節點部署簡單程度絕對會讓開發者驚喜。如果是第一次部署節點,不需要改動任何參數和配置,按照文檔步驟10分鐘以內即可將本地節點搭建完成。此外,很期待VEE社區完善對更多系統以及docker容器的支持。

評測總結

本文通過項目概覽、項目特色、github庫信息、代碼解構、公鏈對比、節點部署等多維度對VSYS項目進行全方位的技術評測。結論是VSYS項目獨具特色,與其定位"區塊鏈數據庫及應用平臺"相符。VSYS生態工具鏈完成度非常高,由Sunny King親自帶領的技術團隊實力毋庸置疑。具體工程實現上由scala開發的VSYS節點性能高效,考慮到scala完全兼容java技術棧,一旦主網發佈必然能借勢java生態獲得大量開發者的追捧。在公鏈對比環節,我們可以發現從比特幣、以太坊、EOS再到VSYS,代表著公鏈的版本升級,生態也日趨繁榮,基於SPOS共識機制的VSYS 將成為繼以太坊、EOS之後里程碑式的公鏈項目,值得長期期待。最後,評測小組對VSYS節點進行部署測試,10分鐘內即完成本地節點搭建,在評測期間(一週)節點運行狀態良好。

https://www.vee.tech/index/index/resources.html?id=2

https://talk.peercoin.net/search?q=sunn%20%20king

https://talk.peercoin.net/t/sunny-king-interviewed-by-crypto-capitalism-center-july-06-2016/3980

https://talk.peercoin.net/t/peercointalks-community-interview-with-sunny-king-3-may-24th-2014/2415

https://bitcointalk.org/index.php?topic=2564861.0

https://talk.peercoin.net/t/transcript-of-sunny-king-interview-with-vitalik-buterin-from-bitcoinmagazine/463

https://medium.com/new-kids-on-the-block-chain/a-short-on-sunny-king-return-of-the-king-inventor-of-pos-474e534739dc

https://www.swissinfo.ch/eng/vee-project_sunny-king-returns-to-take-on-blockchain-database-puzzle/43873586

[Back 2014] Enabling Blockchain Innovationswith Pegged Sidechains,https://blockstream.com/sidechains.pdf

[Buterin 2014] Ethereum: A Next-GenerationSmart Contract and Decentralized application Platform,http://www.the-blockchain.com/docs/Ethereumwhitepapera_nextgenerationsmartcontractanddecentralizedapplication_platform-vitalik-buterin.pdf

[King 2012] PPCoin: Peer-to-PeerCrypto-Currency with Proof-of-Stake,https://peercoin.net/assets/paper/peercoin-paper.pdf

[King 2013] Primecoin: Cryptocurrency withPrime Number Proof-of-Work,http://primecoin.io/bin/primecoin-paper.pdf

[Lamport 1982] The Byzantine GeneralsProblem,http://lamport.azurewebsites.net/pubs/byz.pdf

[Nakamoto 2008] Bitcoin: A Peer-to-PeerElectronic Cash System,https://bitcoin.org/bitcoin.pdf

[Poon 2017] Plasma: Scalable Autonomous SmartContracts,https://plasma.io/plasma.pdf

[Silver 2016] Mastering the game of Go withdeep neural networks and tree search,https://storage.googleapis.com/deepmind-media/alphago/AlphaGoNaturePaper.pdf

[Szabo 1996] Smart Contracts: Building Blocksfor Digital Markets,http://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/smartcontracts2.html

張志華鏈式科技 CTO ,曾就職於百度,區塊鏈技術早期參與者,主要從事系統架構與設計,已經主導多個區塊鏈項目開發。對分佈式共識算法具有深入的研究與實戰經驗。

廖紅坤鏈式科技 核心技術,曾就職於網易,區塊鏈技術狂熱者,高級Dev0ps工程師,多年分佈式開發、以太坊智能合約、HyperLedger/Fabric、超級賬本等技術架構與實現有深入研究。

原文鏈接:https://www.huoxing24.com/newsdetail/20180921140721817106.html


分享到:


相關文章: