999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于區(qū)塊鏈項目開發(fā)語言選型的初探①

2017-05-17 10:00:21中國科學院軟件研究所互聯網金融技術研究中心北京0090中科軟科技股份有限公司北京0090
計算機系統(tǒng)應用 2017年4期
關鍵詞:語言

陳 勝, 曾 靖, 左 春(中國科學院軟件研究所 互聯網金融技術研究中心, 北京 0090)(中科軟科技股份有限公司, 北京 0090)

基于區(qū)塊鏈項目開發(fā)語言選型的初探①

陳 勝1, 曾 靖1, 左 春21(中國科學院軟件研究所 互聯網金融技術研究中心, 北京 100190)2(中科軟科技股份有限公司, 北京 100190)

區(qū)塊鏈技術及持續(xù)發(fā)展的各種開源區(qū)塊鏈項目, 正吸引著越來越多開發(fā)者的目光. 而繁多的主流編程語言及特色各異的區(qū)塊鏈項目, 使得開發(fā)者在開發(fā)基于區(qū)塊鏈的系統(tǒng)與應用時, 在技術選型上難免會有所困惑. 為此, 對12個較知名的開源區(qū)塊鏈項目, 使用了源碼統(tǒng)計工具Cloc統(tǒng)計其源代碼, 并進一步通過閱讀相關代碼及文檔, 分析和比較了其開發(fā)語言的構成. 同時, 以圖表的形式呈現其體量和關注度, 從而為區(qū)塊鏈開發(fā)者在選型上提供參考信息和建議.

區(qū)塊鏈; 開源; 編程語言; 統(tǒng)計

區(qū)塊鏈是起源于比特幣實驗的分布式數據庫技術.該概念在中本聰的白皮書[1]中被首次提出.

比特幣網絡中的所有全節(jié)點以區(qū)塊鏈的方式共享交易數據庫的完整副本. 交易由交易發(fā)起者或生成區(qū)塊的挖礦者簽名, 并被打包在區(qū)塊中. 每個區(qū)塊包含了指向前一個區(qū)塊的哈希值, 以此構造出一條不可篡改的, 從最新區(qū)塊指向創(chuàng)世區(qū)塊的鏈. 每個全節(jié)點也可由此推算出在區(qū)塊鏈上的任意歷史點以及任意地址/賬戶的未花費余額.

盡管針對不同行業(yè)不同場景的區(qū)塊鏈應用存在衍生功能個性差異, 但是它們都被貼上了“區(qū)塊鏈”的標簽, 這些應用在基本功能和系統(tǒng)結構方面也就存在著諸多共性. 這些共性的基本功能包括:

① 用戶密鑰對以及賬戶/地址的生成;

② 交易的構造和簽名以及驗證簽名;

③ P2P消息應答以及數據傳輸;

④ 共識機制以及交易的打包入塊與成鏈.

這些基本功能, 是形成區(qū)塊鏈應用網絡不可或缺的部分. 除此之外, 伴隨著區(qū)塊鏈生態(tài)的發(fā)展, 也衍生出了其他輔助功能. 例如: 命令行人機交互(cli)、更友好的錢包(wallet)應用以及區(qū)塊鏈的web瀏覽檢索(explorer)等.針對比特幣實驗所暴露的問題以及應用場景的各自特點, 區(qū)塊鏈應用通常對基本功能進行改進以符合其需求. 例如, 為了改進出塊性能, BitShares[2]在共識機制方面采用授權股份證明(Delegated Proof of Stake, DPoS)[3]代替比特幣的工作量證明(Proof of Work, PoW). 為了解決數據膨脹危機, 在鏈形態(tài)上, Lisk采用主側鏈加DApp(Decentralized Application)機制代替比特幣的單一主鏈[4]. 而以太坊(Ethereum)則將比特幣的腳本機制發(fā)展為圖靈完備的智能合約, 允許開發(fā)者編寫和發(fā)布可以運行在以太坊虛擬機之上的分布式智能合約程序[5].

無論是基本功能, 還是衍生功能, 具體到它們的編程實現, 目前主流的編程語言均可以勝任. 在動手搭建自己的區(qū)塊鏈應用之前, 有必要對目前的相關開源項目進行一番審視, 從而針對具體的應用場景, 選擇合適的編程語言及區(qū)塊鏈入門項目. 本文對較知名的12個開源區(qū)塊鏈項目進行源碼統(tǒng)計, 并根據相關源碼與文檔, 分析其開發(fā)語言的構成. 同時, 結合各項目的體量與熱度, 給出選型建議.

1 入選標準

通常去中心化的區(qū)塊鏈應用會相應地開放源碼.本文采用以下標準:

① 已公開發(fā)布的開源競爭幣, 包括: 比特幣(Bitcoin[6])、以太坊(Ethereum[7])、比特股(BitShares[8])、NXT[9]及LISK[10];

②某些項目將相對獨立的功能集合分拆為獨立的git工程, 例如: Lisk項目下的LiskHQ/lisk和LiskHQ/lisk-ui、LiskHQ/lisk-cli. 相應地對每個項目建立一個父目錄blockchain以容納多個git工程的代碼(見圖1).針對特定行業(yè)或領域的開源區(qū)塊鏈代表, 包括: 超級賬本(HyperLedger[11], 智能合約)、公證通(Factom[12], 公證防偽)、IPFS[13](分布式文件)、比特信(BitMessage[14],社交通訊)、OpenBazaar[15](電子商務)、Storj[16](文件存儲)以及RSCoin[17](中心化數字貨幣).

2 項目分析

2.1 源代碼獲取

上述入選項目都采用了github作為代碼倉庫, 在本地安裝一個git客戶端, 通過命令行即可將代碼clone到本地文件目錄以進行分析:

例: git clone git@github.com:bitcoin/bitcoin.git有兩種情況必須加以考慮:

① 同一項目存在多種編程語言實現的, 例如: 比特幣、以太坊等, 選取star數最高的語言實現納入統(tǒng)計.

圖1 獲取源碼后的目錄結構

2.2 代碼分類統(tǒng)計

CLOC(Count Lines of Code)是一款開源的跨平臺代碼統(tǒng)計工具, 可以在終端下以命令行方式在線下載安裝.

2.2.1 初步統(tǒng)計

在終端下進入blockchainlisk目錄, 使用cloc默認命令: “cloc .”, 結果如圖2所示.

圖2 初步統(tǒng)計lisk源碼的結果

2.2.2 可疑的JSON

顯然, 占據榜首的JSON很可能不是源代碼, 進一步使用命令: “cloc . --by-file --include-lang=JSON”單獨對JSON文件進行統(tǒng)計, 結果如圖3所示.

圖3 單獨統(tǒng)計lisk中JSON文件所得結果

通過閱讀官方文檔, 可以獲知genesisBlock.json是用于創(chuàng)建預挖礦創(chuàng)世區(qū)塊的定義文件, 應該排除出源碼統(tǒng)計.

類似地, 應該排除其它項目中用于本地化顯示的以及以太坊中用于測試用例的JSON文件. 另外比特信使用了39227行TypeScript作為本地化文件, 也在排除之列.

Cloc提供了過濾參數“--exclude-lang=”用于排除指定類別語言. 我們使用“--exclude-lang=JSON, TypeScript”可以達到上述目的.

2.2.3 項目體量

應用上述命令, 首先針對每個項目統(tǒng)計代碼, 然后用“cloc --sum-reports”合并統(tǒng)計, 結果1如圖4.

圖4 合并統(tǒng)計所得結果

代碼行數反映項目體量. 從圖4中可以發(fā)現, 同樣定位為智能合約平臺的競爭幣, Lisk的體量尚不及以太坊(Ethereum)的十分之一. 如果希望完整學習及理解一款區(qū)塊鏈平臺, Lisk將會是更好的選擇.

2.2.4 項目熱度

托管平臺上項目的star數及fork數可體現該項目受關注的熱度. 根據從github及bitbucket上所獲取的數據, 可得到如圖5所示的各項目的star數及fork數情況.

圖5中, 除NXT的數據來源于bitbucket外, 其他項目的數據均來自github. 并且由于bitcoin的star數與fork數分別為9839與6564, 遠大于其余11個項目的, 故圖5未顯示bitcoin的情況. 同樣以Lisk和以太坊做對比說明: 以太坊的受關注熱度是Lisk的約20倍. 因此如果不是想自己另起爐灶, 而是融入主流生態(tài), 現階段融入以太坊的生態(tài)才是更合理的選擇.

圖5 各項目的star數及fork數對比

2.2.5 語言熱度

對于上述12個項目, 分析對比它們對編程語言的選擇, 對區(qū)塊鏈開發(fā)者在技術選型上也會有所幫助.我們單獨審視各個項目, 并對編程語言進行投票, 投票規(guī)則如下: 如果該項目使用某種語言的代碼量超過其總代碼量的1/10, 那么此項目投了該語言一票.

根據上述投票規(guī)則, 得到的統(tǒng)計結果如圖6所示.圖中各語言得票情況的對比正好符合一個趨勢: 近年來腳本語言的興起, 已經在越來越多的領域代替?zhèn)鹘y(tǒng)的編程語言.

圖6 各編程語言得票情況

具體到本文考察的開源區(qū)塊鏈項目, 就主要開發(fā)語言的選擇上, bitcoin和bitshares采用了C++, NXT采用Java, 而其他項目均采用腳本語言或兼具了腳本語言優(yōu)點的Go語言作為主開發(fā)語言.

在前端界面, javascript占據著主導地位. 且Lisk和Storj采用了Nodejs實現, 故在前后端均采用javascript, 而其他采用javascript的項目均將其用于前端或客戶端.

而在后端, 腳本語言又常常通過擴展機制借助C語言實現性能卓越的加密/解密以及簽名這樣的基礎功能. 比如, Lisk引用了用C語言實現的ed25519密鑰對生成模塊, 同樣地, 其所引用的用于加密/解密, 簽名/驗證的crypto模塊是對C語言實現的OpenSSL的封裝.

3 結語

盡管對比特幣試驗本身褒貶不一, 但比特幣通過結合數學原理與網絡共識, 成功建立和生長出的試驗網絡給人們帶來了新的認知, 即構建去中心化的信任是可行的.

針對比特幣的不足并結合具體的應用場景, 形形色色的區(qū)塊鏈應用正不斷涌現. 從Lisk那樣的小型團隊到超級賬本那樣的大型團隊, 無論是普通程序員還是行業(yè)巨頭, 都對區(qū)塊鏈表現出了濃厚的興趣, 并切身地參與其中. 而面對如此眾多, 各具特點的開源項目, 選擇適合自己的項目就顯得不太容易了. 本文從分析各個項目所采用的編程語言的組成入手, 直觀地展示項目的體量、關注度并關注開發(fā)人員對各種編程語言的結合使用.

相比較傳統(tǒng)形態(tài)的應用, 區(qū)塊鏈仍未形成系統(tǒng)性的軟件生態(tài). 未來也許會出現主導行業(yè)的規(guī)約或者架構. 但現階段各類應用仍處于演化過程中. 故在選型開源項目之前, 區(qū)塊鏈開發(fā)者需要審視如下問題.

自行維護主鏈生態(tài), 還是開發(fā)寄生在其他主鏈生態(tài)上的應用, 前者開發(fā)難度較大, 而后者只需要理解DApp(Decentralized Application)或智能合約的編程思想; 開發(fā)一個同樣的區(qū)塊鏈平臺, 如Lisk, 還是針對特定行業(yè)的區(qū)塊鏈應用, 如Storj, 雖然都主要采用腳本語言來實現, 但后者需要的代碼體量可能會少很多;選擇編譯型語言, 還是解釋型語言來開發(fā)區(qū)塊鏈項目,也需要對開發(fā)效率、運行效率、平臺適應性及應用場景等多種因素進行綜合考量.

1 Nakamoto S.Bitcoin: A peer-to-peer electronic cash system. https://bitcoin.org/bitcoin.pdf. 2009.

2 Consensus technology. https://docs.bitshares.org/bitshares/whatis. html. 2016.

3 Delegated proof of stake. https://docs.bitshares.org/bitshares/ dpos.html. 2016.

4 Lisk. What is Lisk? And what it isn’t. https://blog.lisk.io/what -is-lisk-and-what-it-isnt-e7b6b6188211#.joflk4qbs. 2016.

5 White Paper. https://github.com/ethereum/wiki/wiki/White-Paper#ethereum. 2016.

6 Bitcoin. https://github.com/bitcoin. 2016.

7 Ethereum. https://github.com/ethereum. 2016.

8 Bitshares. https://github.com/bitshares. 2016.

9 NXT. https://bitbucket.org/JeanLucPicard/nxt/overview. 2016.

10 LISK. https://github.com/LiskHQ. 2016.

11 超級賬本. https://github.com/hyperledger. 2016.

12 公證通. https://github.com/FactomProject. 2016.

13 IPFS. https://github.com/ipfs. 2016.

14 比特信. https://github.com/Bitmessage/PyBitmessage. 2016.

15 OpenBazaar. https://github.com/openbazaar. 2016.

16 Storj. https://github.com/Storj. 2016.

17 RSCoin. https://github.com/gdanezis/rscoin. 2016.

Discussion of Selection for Languages Based on Blockchain Projects Development

CHEN Sheng1, ZENG Jing1, ZUO Chun21(Institute of Software, Chinese Academy of Sciences, Research Center for Internet Finance Technology, Beijing 100190, China)2(Sinosoft Company Limited, Beijing 100190, China)

More and more developers are being attracted by blockchain technologies and sustainable development of various open source blockchain projects. Nevertheless, the various popular programming languages and distinctive blockchain projects could perplex the developers inevitably when they commence to develop systems or applications based on blockchain. So, this paper utilizes a tool named Cloc to count the lines of source code in 12 well-known open source blockchain projects. By further reading codes and documents associated, we try to analyze and compare the programming language constitutions of the projects. Moreover, the paper demonstrates their project sizes and the attention degree to them in the form of charts. Finally, some reference information and suggestions about selections are given to the blockchain developers.

blockchain; open source; programming language; statistics

2016-07-18;收到修改稿時間:2016-10-12

10.15888/j.cnki.csa.005775

猜你喜歡
語言
詩之新,以語言創(chuàng)造為基
中華詩詞(2023年8期)2023-02-06 08:51:28
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
讓語言描寫搖曳多姿
多向度交往對語言磨蝕的補正之道
累積動態(tài)分析下的同聲傳譯語言壓縮
日常語言與播音語言
新聞傳播(2016年10期)2016-09-26 12:15:04
語言技能退化與語言瀕危
我有我語言
論語言的“得體”
語文知識(2014年10期)2014-02-28 22:00:56
Only Words慎用你的語言
主站蜘蛛池模板: 亚洲欧美一区二区三区蜜芽| www精品久久| 青青草原国产一区二区| 亚洲综合九九| 亚洲va在线∨a天堂va欧美va| 日韩性网站| 亚洲无码高清免费视频亚洲| 色综合久久综合网| 极品私人尤物在线精品首页| 999国内精品视频免费| 国产青榴视频在线观看网站| 播五月综合| 国产精品永久不卡免费视频| 亚洲精品在线影院| 丁香婷婷激情综合激情| 精品国产aⅴ一区二区三区| 国产成人福利在线| 日韩精品久久久久久久电影蜜臀| 国产成人免费手机在线观看视频 | av无码久久精品| 日韩av高清无码一区二区三区| 黄色一及毛片| 欧美中文字幕一区| 亚洲精品无码日韩国产不卡| 中文字幕亚洲电影| 精品视频一区二区三区在线播| 99国产精品国产| 高清视频一区| 99ri精品视频在线观看播放| 在线精品视频成人网| 亚洲区一区| 曰韩人妻一区二区三区| 日日拍夜夜操| 国产免费网址| 日本免费一级视频| 久久伊人操| 国内视频精品| 日韩AV无码一区| 毛片免费试看| 五月婷婷精品| 99精品久久精品| 日韩中文欧美| 新SSS无码手机在线观看| 亚洲日韩精品无码专区97| 国产欧美日韩精品第二区| 亚洲综合第一页| 一区二区三区精品视频在线观看| 国产精品久久自在自线观看| 粗大猛烈进出高潮视频无码| 色综合狠狠操| 在线观看网站国产| 国产在线98福利播放视频免费| 国产成人三级| 亚洲日韩高清在线亚洲专区| 黄色免费在线网址| 国产一区二区视频在线| 一区二区三区四区精品视频 | 久久久久久高潮白浆| 精品人妻一区二区三区蜜桃AⅤ| 无码精品福利一区二区三区| 国产精品色婷婷在线观看| 国产福利大秀91| 天天综合网色中文字幕| 天天激情综合| 欧美日本在线观看| 国产成人亚洲欧美激情| 欧美在线黄| 久久99精品久久久久纯品| 高潮毛片免费观看| 亚洲精品国产综合99| 亚洲a级毛片| 精品久久久无码专区中文字幕| 中文天堂在线视频| 狠狠躁天天躁夜夜躁婷婷| 国产成人一区| 99精品福利视频| 欧美在线三级| 91黄视频在线观看| 99精品福利视频| 亚洲国产天堂在线观看| 国产视频你懂得| 亚洲精品国产乱码不卡|