亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2017-05-17 10:00:21中國科學(xué)院軟件研究所互聯(lián)網(wǎng)金融技術(shù)研究中心北京0090中科軟科技股份有限公司北京0090
        計算機系統(tǒng)應(yīng)用 2017年4期
        關(guān)鍵詞:源碼以太編程語言

        陳 勝, 曾 靖, 左 春(中國科學(xué)院軟件研究所 互聯(lián)網(wǎng)金融技術(shù)研究中心, 北京 0090)(中科軟科技股份有限公司, 北京 0090)

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

        陳 勝1, 曾 靖1, 左 春21(中國科學(xué)院軟件研究所 互聯(lián)網(wǎng)金融技術(shù)研究中心, 北京 100190)2(中科軟科技股份有限公司, 北京 100190)

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

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

        區(qū)塊鏈是起源于比特幣實驗的分布式數(shù)據(jù)庫技術(shù).該概念在中本聰?shù)陌灼鳾1]中被首次提出.

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

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

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

        ② 交易的構(gòu)造和簽名以及驗證簽名;

        ③ P2P消息應(yīng)答以及數(shù)據(jù)傳輸;

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

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

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

        1 入選標準

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

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

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

        2 項目分析

        2.1 源代碼獲取

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

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

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

        圖1 獲取源碼后的目錄結(jié)構(gòu)

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

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

        2.2.1 初步統(tǒng)計

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

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

        2.2.2 可疑的JSON

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

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

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

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

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

        2.2.3 項目體量

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

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

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

        2.2.4 項目熱度

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

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

        圖5 各項目的star數(shù)及fork數(shù)對比

        2.2.5 語言熱度

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

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

        圖6 各編程語言得票情況

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

        在前端界面, javascript占據(jù)著主導(dǎo)地位. 且Lisk和Storj采用了Nodejs實現(xiàn), 故在前后端均采用javascript, 而其他采用javascript的項目均將其用于前端或客戶端.

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

        3 結(jié)語

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

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

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

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

        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

        猜你喜歡
        源碼以太編程語言
        以太極為旗,開啟新時代“黃河大合唱”
        少林與太極(2023年7期)2023-08-25 05:27:52
        基于網(wǎng)頁源碼結(jié)構(gòu)理解的自適應(yīng)爬蟲代碼生成方法
        基于圖神經(jīng)網(wǎng)絡(luò)的軟件源碼漏洞檢測方法
        計算機時代(2023年6期)2023-06-15 17:49:09
        壓力-體積轉(zhuǎn)換在CFC編程語言中的實現(xiàn)解析
        企業(yè)如何保護源碼
        Java編程語言的特點與應(yīng)用
        車易鏈:做汽車業(yè)的“以太坊”
        汽車觀察(2018年9期)2018-10-23 05:46:24
        淺談不同編程語言對計算機軟件開發(fā)的影響
        電子制作(2018年1期)2018-04-04 01:48:36
        基于數(shù)據(jù)結(jié)構(gòu)教輔系統(tǒng)的實驗課程改革
        計算機教育(2016年4期)2016-05-20 02:36:05
        面向?qū)ο骔eb開發(fā)編程語言的的評估方法
        人妻中文字幕一区二区二区| 国产午夜精品一区二区| 国产呦系列呦交| 国产艳妇av在线出轨| 少妇一级内射精品免费| 蜜桃av在线免费网站| 欧美中日韩免费观看网站| 日韩手机在线免费视频| 亚洲国产精品一区二区第一| 日本一区二区三区视频免费在线| 精品久久久无码人妻中文字幕豆芽| 国产欧美日韩a片免费软件| 久久精品国产屋| 成人自拍偷拍视频在线观看| 初尝人妻少妇中文字幕| 天天做天天躁天天躁| 国产在线AⅤ精品性色| 国产三级精品av在线| 国产乱码一区二区三区爽爽爽| 国产AV边打电话边出轨| 亚洲中文字幕国产综合| 国产夫妻自拍视频在线播放| 东北妇女xx做爰视频| 久久精品—区二区三区无码伊人色| 日韩男女av中文字幕| 日本欧美大码a在线观看| 天天看片视频免费观看| 久久精品国产88久久综合| av网页免费在线观看| 国产h视频在线观看| 国产美女在线一区二区三区| 加勒比特在线视频播放| 99久久无码一区人妻| 日韩无套内射视频6| 亚洲AV手机专区久久精品| 国产精品亚洲一级av第二区| 日韩毛片无码永久免费看| 欧美亚洲国产人妖系列视 | 国产美女在线精品亚洲二区| 一区二区三区日本久久| 乱子轮熟睡1区|