陳杰 張再躍 張曉如
摘 要:目前的爬蟲框架及分布式系統(tǒng)集群成熟,但是代價高,硬件設(shè)備昂貴,技術(shù)較復(fù)雜。結(jié)合區(qū)塊鏈技術(shù)設(shè)計一種爬蟲方案,部署簡單且省去服務(wù)器資金投入。該方案融合IPFS技術(shù),使用智能合約募集公網(wǎng)上閑散的硬件資源代替?zhèn)鹘y(tǒng)服務(wù)器,節(jié)約成本,使用簡單,可為IPFS融合區(qū)塊鏈技術(shù)的應(yīng)用提供參考。
關(guān)鍵詞:爬蟲;區(qū)塊鏈;智能合約;IPFS
DOI:10. 11907/rjdk. 191590
中圖分類號:TP391 ? 文獻(xiàn)標(biāo)識碼:A??????????????? 文章編號:1672-7800(2020)003-0200-04
Crawler on Smart Contract Based on IPFS and Ethereum
CHEN Jie, ZHANG Zai-yue, ZHANG Xiao-ru
(School of Computer Science, Jiangsu University of Science and Technology, Zhenjiang 212003,China)
Abstract:The current crawler has a mature framework and cluster distributed system, but the cost is high, the price of hardware equipment is expensive, the technology is more complex. A crawler solution incorporating blockchain technology is designed that makes it easy for users to deploy and saves money on servers. The scheme integrates IPFS technology and uses smart contract to collect idle hardware resources on the public network. This research scheme replaces traditional servers with public network resources, saves expensive investment on server hardware,saves the cost and is simple to use, and provides a reference for the use of IPFS fusion blockchain technology in other directions and fields.
Key Words: crawler; blockchain; contacts; IPFS
0 引言
在人工智能與大數(shù)據(jù)相互交叉時代,不論是工程領(lǐng)域還是研究領(lǐng)域,數(shù)據(jù)都是極其重要的戰(zhàn)略資源,高效的數(shù)據(jù)采集是關(guān)鍵?,F(xiàn)在的分布式爬蟲在海量數(shù)據(jù)爬取上非常高效,但是分布式爬蟲硬件需要投入大量資金,所以結(jié)合新技術(shù)構(gòu)建信息采集系統(tǒng)是研究熱點。
分布式爬蟲大多基于Scrapy-Redis、Nutch等框架開發(fā),而現(xiàn)在已有部分AI公司創(chuàng)新地結(jié)合云技術(shù)開發(fā)云爬蟲,通過開放API提供服務(wù)。Diffbot是美國一家指令機器學(xué)習(xí)和計算機視覺算法以及公共API開放的初創(chuàng)公司,該公司通過計算機視覺、機器學(xué)習(xí)和人工智能處理Web頁面,計劃實現(xiàn)整個網(wǎng)頁的“機器可讀”。但Diffbot收費較高,包月要5 000美元、擁有500萬次調(diào)用,超出另付。一條數(shù)據(jù)需要多次API調(diào)用,在海量數(shù)據(jù)面前這種收費標(biāo)準(zhǔn)難以承受。
本文將區(qū)塊鏈分布式公共信用賬本引入爬蟲[1],通過在區(qū)塊鏈上部署智能合約驅(qū)動爬蟲[2]。該研究方案充分利用公網(wǎng)資源,可以更低成本和更高效率傳遞信息與價值[3-4],發(fā)揮比云端服務(wù)器更強性能[5],免去云爬蟲的高昂使用費,節(jié)省傳統(tǒng)分布式爬蟲昂貴的硬件服務(wù)器費用。
1 區(qū)塊鏈底層核心算法與數(shù)據(jù)結(jié)構(gòu)
1.1 密碼學(xué)哈希函數(shù)
哈希函數(shù)是整個區(qū)塊鏈的單元組成結(jié)構(gòu),整個區(qū)塊鏈都是哈希函數(shù)的增加、改變、嵌套、迭代等[6]。雖然哈希函數(shù)是組成細(xì)胞,但其也要根據(jù)實際情況進(jìn)行變種處理[7]。
一般哈希函數(shù)的特性有:①哈希函數(shù)的輸入不限制大小;②哈希函數(shù)的輸出是固定大小;③哈希函數(shù)在合理的時間內(nèi)能有效處理。
但是,作為區(qū)塊鏈項目的哈希函數(shù)還需要一些附加特性。
(1)碰撞阻力。無法找到兩個值x和y,x≠y,而且H(x)≠H(y),則稱哈希函數(shù)H具有碰撞阻力(見圖1)。我國密碼學(xué)專家給出了包括MD5、RIPEMD等哈希函數(shù)的碰撞[8]。
(2)隱秘性。假設(shè)哈希函數(shù)的輸入為y=H(x),但是無法推導(dǎo)y→x,這是不可逆的。
(3)謎題友好性。假設(shè)任意n位輸出值為y,而k是一個非常隨機的數(shù),這種函數(shù)不可能再比2n小。
1.2 區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)與哈希挖礦
區(qū)塊鏈在數(shù)據(jù)結(jié)構(gòu)上就是用一個個哈希指針構(gòu)造出的哈希區(qū)塊組成一個公共鏈表,每個區(qū)塊的整體哈希值可以指向唯一的下一個區(qū)塊(見圖2),每個區(qū)塊都有自己的梅克爾二叉樹[9],每個事務(wù)都有自己的哈希值。然后每兩個結(jié)對再次計算哈希值,以此類推最后計算出來一個哈希值,也就是根哈希。Nance為優(yōu)質(zhì)的隨機數(shù)[10]。
哈希挖礦就是對整個區(qū)塊做哈希值,讓它小于某個值,這需要大量的時間算力[11],用式(1)表示為:
1.3 區(qū)塊鏈數(shù)字、簽名和雙鑰
數(shù)字簽名由3個算法組成[12-13]:
式(2)中,generateKeys是秘鑰產(chǎn)生方法,把keysize作為輸入產(chǎn)生一對公鑰pk和私鑰sk。sk必須秘密保存,所有人都可用pk驗證簽名。
式(3)是簽名方法。輸入是兩個參數(shù),一個是私鑰,還有一個是一段信息,對外輸出是數(shù)字簽名。
式(4)是驗證公式,通過keysize作為輸入產(chǎn)生一個公鑰pk和私鑰sk,通過sk和一段信息產(chǎn)生數(shù)字簽名sig,最后通過pk、message、sig作為驗證函數(shù)的參數(shù)來驗證數(shù)字簽名。
在區(qū)塊鏈中,常用的數(shù)字簽名方案是橢圓曲線數(shù)字簽名算法,其利用橢圓曲線密碼對數(shù)字簽名算法進(jìn)行模擬[14-16]。這種算法除以上幾個特點外,還具有安全性高、生成公私鑰較方便、處理速度較快和存儲空間小等優(yōu)點。
公鑰和私鑰是密碼學(xué)中非對稱加密名詞,通常情況下用公鑰加密,再用私鑰解密,其是一種公開的密鑰算法。私鑰可以決定公鑰,公鑰可以決定地址。
1.4 共識算法
區(qū)塊鏈本質(zhì)上是一種分布式系統(tǒng),但是它是去中心化的,所以一致性問題是關(guān)鍵核心問題,但是和傳統(tǒng)的分布式系統(tǒng)不同,它是異步的,每個節(jié)點同步時間不一樣。其具有容錯性,有些節(jié)點可能關(guān)閉或者沒有同步或反饋[17]。
FLP定理不允許傳統(tǒng)計算機系統(tǒng)解決錯誤進(jìn)程和網(wǎng)絡(luò)分區(qū)問題[18],科學(xué)家結(jié)合社會學(xué)及博弈論引入了激勵機制和隨機性。
激勵機制。通過設(shè)置恰當(dāng)?shù)臋C制,讓每個節(jié)點都能通過遵守規(guī)則實現(xiàn)利益最大化,讓其自發(fā)成為公正的節(jié)點。
隨機性。POW共識協(xié)議就是算力共識,依靠算力解決哈希函數(shù)無限求解,優(yōu)先計算出來的可以擁有打包權(quán)利從而獲得網(wǎng)絡(luò)的代幣獎勵。POS是權(quán)益證明共識,主要看參與者持有幣的數(shù)量和時間,數(shù)量越大的人用越大的概率去打包區(qū)塊從而獲得獎勵,有事實上的中心化趨勢,“貧富”差距也會更大。
1.5 區(qū)塊鏈整體模型架構(gòu)
整個區(qū)塊鏈系統(tǒng)由自下而上的數(shù)據(jù)層、網(wǎng)絡(luò)層、共識層、激勵層、合約層和應(yīng)用層組成(見圖3)。
2 IPFS
2.1 IPFS核心理念
IPFS是Inter Planetary File System的簡稱,對標(biāo)Http而言是一種點對點的分布式文件系統(tǒng)。傳統(tǒng)的Http是基于中心化的服務(wù)器,具有天然瓶頸。服務(wù)器空間是珍貴的資源,這注定站點的數(shù)據(jù)不能長期儲存,而且服務(wù)器文件定位不夠平緩,都是多級目錄形式。相對而言,IPFS沒有這些局限性,它將文件的碎片分布在整個公網(wǎng)上,IPFS不使用多級目錄儲存,而是結(jié)合了密碼學(xué)加密技術(shù),可以基于內(nèi)容對其進(jìn)行尋址[19]。
IPFS基本原理就是對整個內(nèi)容進(jìn)行哈希運算,然后反饋哈希值,這個哈希值就是對應(yīng)儲存的內(nèi)容,可以通過哈希值尋找內(nèi)容。
2.2 爬蟲代碼儲存
為了充分延展爬蟲程序的能力,將其部署在公鏈上。爬蟲的代碼儲存在IPFS上,其它節(jié)點參與這個項目??梢詮腎PFS上下載相應(yīng)的爬蟲代碼,然后由其它節(jié)點運行代碼。同時,爬蟲所采集的數(shù)據(jù)也儲存在IPFS上。
上傳整個代碼目錄的IPFS偽代碼:
localhost:1121 chan$ ipfs add -r myscrapy/
add 哈希值1 myscrapy/project/__init__.py
add 哈希值2 myscrapy/project/items.py
……
add 哈希值n-1 myscrapy/scrapy.cfg
add 哈希值n myscrapy
哈希值來源于對后面文件的整體哈希運算。
下載上傳IPFS文件的偽代碼:
Ipfs cat 哈希值n
Ipfs daemon
3 以太坊與智能合約
3.1 以太坊
如果比特幣代表區(qū)塊鏈1.0,那么以太坊就是區(qū)塊鏈2.0的代表。由于比特幣不太靈活,部分基于比特幣的項目對比特幣系統(tǒng)作了一些改變,添加了一些新功能,然后獨立運行在不同的節(jié)點上,這就意味著每一個項目都要重復(fù)、獨立地建立一個類似的比特幣系統(tǒng)。以太坊塑造了一種能被重編程用于任意復(fù)雜計算功能的單一區(qū)塊鏈。
以太坊與比特幣有許多不同,從性能表現(xiàn)和特性上看主要有以下區(qū)別:首先,以太坊有更快的“出塊”速度及更先進(jìn)的獎勵機制。比特幣的出塊時間平均是10min,以太坊的出塊間隔為12s,這表示以太坊有更大的吞吐量和更小的交易確認(rèn)間隔;其次,以太坊支持智能合約,用戶可以定義數(shù)字資產(chǎn)和流通邏輯,通過以太坊虛擬機幾乎可執(zhí)行任何計算。相比之下,比特幣只支持轉(zhuǎn)賬,這說明以太坊可作為更加通用的區(qū)塊鏈平臺,支持各種去中心化應(yīng)用。
3.2 智能合約概念
以太幣作為一種雄心勃勃的虛擬幣,致力于提供一種滿足圖靈計算要求的可編程語言[20],用這種語言可以編寫腳本和合約[21]。在該體系中,智能合約是應(yīng)用層程序,被以太坊的虛擬機執(zhí)行。在這個體系中,智能合約起到任務(wù)發(fā)布和激勵的作用,空閑的計算機可以發(fā)揮作用,降低大規(guī)模數(shù)據(jù)采集成本,減少大量硬件需求。
智能合約行為由合約代碼控制,合約賬戶存儲則保存合約狀態(tài)。合約代碼運行在以太坊虛擬機上。合約的代碼編寫需要使用一些高級語言,例如語法與JavaScript相似的Solidity語言、與Python相似的Serpent語言、與Lisp相似的LLL語言等。
3.3 爬蟲合約與系統(tǒng)結(jié)構(gòu)
爬蟲合約是爬蟲系統(tǒng)的紐帶,起著核心作用。為對整個系統(tǒng)產(chǎn)生激勵作用,在Scrapy-redis框架基礎(chǔ)上引入?yún)^(qū)塊鏈技術(shù)[22],整個系統(tǒng)結(jié)構(gòu)相對簡潔明了,如圖4所示。
圖4中MasterSpider是本機節(jié)點,a是確定采集的目標(biāo),然后反饋給主節(jié)點并同時通過b將爬蟲代碼傳給IPFS。爬取的隊列在緩存內(nèi),SlaveSpiders爭取隊列的數(shù)據(jù)采集,c是MasterSpider和所有SlaveSpiders共同維護(hù)的一個Redis,d代表所有的SlaverSpider從IPFS獲取相應(yīng)的爬蟲代碼,e是爬蟲從隊列中拿到任務(wù)并且去爬取并把爬取信息傳送回Redis,f是把爬取的信息上傳到IPFS,g是以太坊捕捉IPFS的觸發(fā)信息,h是智能合約將激勵發(fā)送給SlaveSpider。
3.4 信息爬取與激勵
IPFS是非常重要的核心樞紐,信息爬取結(jié)果最后匯總在IPFS上,以太坊智能合約對參與者的獎勵通過IPFS上的信息進(jìn)行(見圖5)。
首先,信息爬取要求Master端和Slave端都安裝好基于Python的爬蟲基礎(chǔ)框架Scrapy以及Redis數(shù)據(jù)庫。Master端和Slave端需要共同維護(hù)存儲在Master端的Redis,Slaver端連接遠(yuǎn)程Redis的命令是:redis-cli -h ip -p port。爬取過程中,Master端的Redis是有數(shù)據(jù)的,Slave端的Redis是沒有數(shù)據(jù)的,共同維護(hù)一個Redis。Redis會給Slave任務(wù),Slaver會獲得任務(wù)并且完成相關(guān)爬取任務(wù),并把結(jié)果傳給Redis,最后上傳到IPFS。數(shù)據(jù)結(jié)構(gòu)應(yīng)該包括數(shù)據(jù)的哈希值和參與者錢包地址。主機可以從IPFS上解析到所要的數(shù)據(jù)。
其次,激勵具體指智能合約通過Oraclize從IPFS上取出數(shù)據(jù),并從數(shù)據(jù)中解析出錢包地址,向其發(fā)送相應(yīng)代幣,這樣參與者就可以得到相應(yīng)激勵,以此不斷循環(huán)。參與者一方面將數(shù)據(jù)傳輸給IPFS,另一方面通過IPFS得到相應(yīng)激勵。
最后,通過這種業(yè)務(wù)邏輯募集公網(wǎng)上的閑散資源,一方面減少資源浪費,另一方面避免傳統(tǒng)分布式系統(tǒng)昂貴的硬件投入。
4 結(jié)語
本文依托區(qū)塊鏈技術(shù),分析了爬蟲智能合約的封裝問題。爬蟲合約充分利用區(qū)塊鏈的去中心思想建立公共信任賬本,對公網(wǎng)閑散資源進(jìn)行眾籌,這種公共信用體系將在金融等領(lǐng)域發(fā)揮重要作用。
參考文獻(xiàn):
[1]袁勇,王飛躍. 區(qū)塊鏈技術(shù)發(fā)展現(xiàn)狀與展望[J]. 自動化學(xué)報,2016,42(4):459-481.
[2]SWAN M. Blockchain: blueprint for a new economy[M]. Sebastopol:OReilly Media Inc,2015:9-26.
[3]袁勇,周濤,周傲英,等. 區(qū)塊鏈技術(shù):從數(shù)據(jù)智能到知識自動化[J]. 自動化學(xué)報,2017,43(9):1485-1490.
[4]常漢杰,付賽紅,石志明. 淺談區(qū)塊鏈對于文件存儲系統(tǒng)的變革[J]. 計算機時代, 2019(3):101-104.
[5]李世勇,苑凱博,汪棪,等. 企業(yè)應(yīng)用云遷移與部署:現(xiàn)狀、挑戰(zhàn)與展望[J]. 管理現(xiàn)代化,2019(2):75-78.
[6]王化群,吳濤. 區(qū)塊鏈中的密碼學(xué)技術(shù)[J]. 南京郵電大學(xué)學(xué)報:自然科學(xué)版,2017(6):61-67.
[7]李佩麗,徐海霞,馬添軍,等. 可更改區(qū)塊鏈技術(shù)研究[J]. 密碼學(xué)報,2018(5):501-509.
[8]WANG X Y. Collisions for hash functions md4, md5, haval-128 and ripemd[EB/OL]. http://eprint.iacr.org/2004/199.pdf,2004
[9]蔣勇. 白話區(qū)塊鏈[M]. 北京:機械工業(yè)出版社,2017:91-93.
[10]楊振海,張國志. 隨機數(shù)生成[J]. 數(shù)理統(tǒng)計與管理,2006(2):244-252.
[11]唐長兵,楊珍,鄭忠龍,等. PoW共識算法中的博弈困境分析與優(yōu)化[J]. 自動化學(xué)報,2017(9):1520-1531.
[12]ARVIND NARAYANAN,JOSEPH BONNEAU,EDWARD FELTEN,et al. Bitcoin and cryptocurrency technologies[M]. USA:Princeton University Press,2016:43-46.
[13]趙翔. 數(shù)字簽名綜述[J]. 計算機工程與設(shè)計,2006(2):195-197.
[14]張方國,王常杰,王育民. 基于橢圓曲線的數(shù)字簽名與盲簽名[J]. 通信學(xué)報,2001(8):22-28.
[15]趙文清,姜波,王德文,等. 數(shù)字簽名中哈希函數(shù)的分析與研究[J]. 計算機工程與應(yīng)用,2004(32):155-157.
[16]暴金雨. RSA公鑰密碼體制的原理及應(yīng)用[J]. 科技傳播,2019(6):137-139.
[17]李劍鋒. 基于拜占庭容錯機制的區(qū)塊鏈共識算法研究與應(yīng)用[D]. 鄭州:鄭州大學(xué),2018.
[18]URBAN P,DEFAGO X,SCHIPER A. Chasing the FLP impossibility result in a LAN or how robust can a fault to lerant server be[C]. 20th IEEE Symposium on Reliable Distributed Systems,2001,28-31.
[19]NIZAMUDDIN N,SALAH K,AJMAL AZAD M,?et al. Decentralized document version control using ethereum blockchain and IPFS[J]. Computers and Electrical Engineering,2019(3):183-197.
[20]任曉明,劉川. 認(rèn)知、信息與計算的哲學(xué)省思考[J]. 科學(xué)經(jīng)濟(jì)社會,2018(4):1-8.
[21]邵奇峰,金澈清,張召錢,等. 區(qū)塊鏈技術(shù):架構(gòu)及進(jìn)展[J]. 計算機學(xué)報,2018(5):969-988.
[22]嚴(yán)慧,彭緒富,朱小婉,等. 基于Scrapy-Redis分布式數(shù)據(jù)采集平臺的設(shè)計與實現(xiàn)[J]. 湖北師范大學(xué)學(xué)報:自然科學(xué)版,2019(1):19-25.
(責(zé)任編輯:杜能鋼)
收稿日期:2019-04-23
作者簡介:陳杰(1988-),男,江蘇科技大學(xué)計算機科學(xué)與工程學(xué)院碩士研究生,研究方向為為軟件工程、信息檢索、智能信息處理;張再躍(1961-),男,江蘇科技大學(xué)計算機科學(xué)與工程學(xué)院教授,研究方向為數(shù)理邏輯與應(yīng)用邏輯、知識表示與推理、智能信息處理;張曉如(1963-),女,江蘇科技大學(xué)計算機科學(xué)與工程學(xué)院教授,研究方向為智能信息處理、計算機教育。本文通訊作者:張曉如。