龔曉元,劉冬明,高 峰,師自通
(中北大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,山西 太原 030051 )
自2008年中本聰首次提出去中心化的支付方案,并發(fā)行了第一種加密貨幣比特幣[1]以來,區(qū)塊鏈作為一種新興技術(shù),得到了蓬勃的發(fā)展。以太坊[2]作為區(qū)塊鏈領(lǐng)域的大型金融交易平臺(tái)之一,因其智能合約的存在而被廣泛應(yīng)用。由于其匿名性和監(jiān)管困難,以太坊的健康發(fā)展仍然面臨諸多難題,欺詐問題也日益頻發(fā),龐氏騙局便是其中之一。以太坊龐氏騙局是一種利用智能合約投資活動(dòng)進(jìn)行非法集資的詐騙行為,該騙局通常會(huì)以種種宣傳術(shù)語來掩蓋其真實(shí)目的,以高額的回報(bào)率不斷地吸引投資者投入資金,來維持自身運(yùn)轉(zhuǎn),當(dāng)后來的投資者試圖取回他們的投資時(shí),通常會(huì)發(fā)現(xiàn)他們的資金已經(jīng)被騙取。TRM Labs發(fā)布的2022年非法加密生態(tài)系統(tǒng)報(bào)告[3]顯示加密貨幣龐氏騙局已經(jīng)給投資者造成將近78億美元的損失。因此,智能合約龐氏騙局的檢測對(duì)于以太坊區(qū)塊鏈的健康發(fā)展和投資者的財(cái)產(chǎn)安全至關(guān)重要。
當(dāng)前,針對(duì)智能合約龐氏騙局的檢測研究仍然非常有限,且基本都是從字節(jié)碼層面和交易信息層面提取合約特征。Bartoletti等[4]提出基于標(biāo)準(zhǔn)化Levenshtein距離的方法來檢測以太坊網(wǎng)絡(luò)中的龐氏騙局。該方法通過蒙特卡洛算法[5]估算以太坊網(wǎng)絡(luò)中兩個(gè)任意智能合約的標(biāo)準(zhǔn)化Levenshtein距離,并作為智能合約相似度的判斷依據(jù),但是,臨界值的設(shè)置缺乏科學(xué)證明,誤報(bào)率很高。Chen等[6-7]利用以太坊區(qū)塊鏈公開透明的特點(diǎn),從用戶賬戶和智能合約操作碼兩方面提取特征,基于數(shù)據(jù)挖掘的思路,充分利用區(qū)塊鏈上的信息,使用隨機(jī)森林(Random Forest,RF)和極端梯度提升(eXtreme Gradient Boosting,XGBoost)的方式大幅度提升了檢測精度,并通過人工檢查的方式貢獻(xiàn)了一個(gè)龐氏騙局合約數(shù)據(jù)集XBlock。但是,前者的缺陷是由于從操作碼中提取特征而無法獲取智能合約豐富的語義結(jié)構(gòu)信息和程序依賴信息,并且詐騙者可以通過調(diào)整合約編寫方式來控制操作碼的頻率,從而繞過檢測; 后者的缺陷是由于缺乏交易信息而無法在騙局合約部署伊始就進(jìn)行主動(dòng)檢測。為了在智能合約全生命周期內(nèi)有效檢測龐氏騙局,Peng等[8]基于操作碼的功能,通過系統(tǒng)化的建模逐步實(shí)現(xiàn)了智能龐氏騙局的高效自動(dòng)檢測模型,并且可以在智能合約部署初期進(jìn)行檢測工作。Shen等[9]將龐氏騙局檢測問題轉(zhuǎn)化為異常檢測問題,將字節(jié)碼轉(zhuǎn)化為高維矩陣,使用孤立森林(Isolation Forest,Iforest)算法來識(shí)別智能合約中的龐氏騙局。Zhang等[10]創(chuàng)新地提取了字節(jié)碼特征,并將其與用戶交易和操作碼頻率相結(jié)合,獲取了更全面的特征,提出一種基于改進(jìn)LightGBM算法的智能合約龐氏騙局識(shí)別方法,對(duì)模型訓(xùn)練速度與模型性能均有顯著提升。
在深度學(xué)習(xí)領(lǐng)域,Liang等[11]提出了一個(gè)數(shù)據(jù)驅(qū)動(dòng)的龐氏騙局檢測系統(tǒng)DSPSD,根據(jù)操作碼和交易數(shù)據(jù),直接預(yù)測合約是否為龐氏騙局。Jin等[12]提出了一個(gè)通用的異構(gòu)特征增強(qiáng)模塊,通過學(xué)習(xí)輔助異構(gòu)交互圖中基于元路徑的行為特征,并將異構(gòu)特征聚合到執(zhí)行檢測方法的同構(gòu)圖中的對(duì)應(yīng)賬戶節(jié)點(diǎn),進(jìn)而捕獲與賬戶行為模式相關(guān)的異構(gòu)信息。He等[13]提出的Ethereum-CTRF方法,提取了合約代碼的詞特征、序列特征以及交易特征,并對(duì)數(shù)據(jù)進(jìn)行了簡單隨機(jī)過采樣處理,并構(gòu)造了多粒度的網(wǎng)絡(luò)模型,但這樣容易過度擬合。Wang等[14]使用N-gram算法來提取更全面的操作碼特征,同時(shí)引入自適應(yīng)合成采樣處理類別不平衡的數(shù)據(jù),最終使用AdaBoost分類器進(jìn)行騙局合約檢測。
以上文獻(xiàn)大多基于以太坊虛擬機(jī)層面的字節(jié)碼特征、操作碼特征和交易特征,但是,以太坊龐氏騙局作為使用Solidty高級(jí)語言[15]人為編寫的以太坊智能合約,在高級(jí)語言層面包含豐富的語義語法信息、控制依賴關(guān)系和數(shù)據(jù)依賴關(guān)系,而字節(jié)碼和操作碼不能充分體現(xiàn)智能合約龐氏騙局的關(guān)鍵特征,且交易信息依賴合約的運(yùn)行積累,阻礙了合約檢測的時(shí)效性。同時(shí),現(xiàn)有的檢測方法在處理類別不平衡的數(shù)據(jù)空間方面存在不足,騙局合約在所有智能合約中的比例很低,在數(shù)據(jù)不平衡時(shí),分類器模型更傾向于多數(shù)類樣本,對(duì)少數(shù)騙局合約的敏感度較低,從而導(dǎo)致騙局合約檢測的召回率較低。針對(duì)類別不平衡問題,Modha等[16]利用K-Means算法將多數(shù)類的樣本進(jìn)行聚類,合并聚類中心,以替換多數(shù)類樣本,這種方法可以達(dá)到平衡數(shù)據(jù)集并且保留多數(shù)類樣本特征的目的。
綜上所述,針對(duì)現(xiàn)有方法存在類別不平衡、特征來源單一且不能完整表達(dá)智能合約語義語法信息和程序依賴信息的問題,本文提出了一種基于欠采樣和源代碼圖表征的檢測方法:首先使用基于代碼相似度的聚類算法在數(shù)據(jù)層面解決智能合約類別不平衡問題,再通過改進(jìn)構(gòu)圖算法從Solidty源代碼層面挖掘能夠區(qū)分龐氏騙局的關(guān)鍵特征,最后使用圖神經(jīng)網(wǎng)絡(luò)模型提高對(duì)智能合約龐氏騙局的檢測效果。
本文提出的智能合約龐氏騙局檢測方法的整體框架如圖1 所示,首先根據(jù)數(shù)據(jù)集中的合約地址,使用爬蟲工具從以太坊瀏覽器(etherscan.io)中爬取智能合約源代碼和字節(jié)碼,將所爬取源代碼和字節(jié)碼按照7∶3的比例分為訓(xùn)練集與測試集,其次使用Levenshtein算法和K-Means算法對(duì)字節(jié)碼訓(xùn)練集中的正常合約進(jìn)行欠采樣處理,得到重組后的合約編號(hào),使用合約編號(hào)重組源代碼訓(xùn)練集,再利用重組后的源代碼訓(xùn)練集和測試集進(jìn)行合約圖構(gòu)建并對(duì)合約圖進(jìn)行標(biāo)準(zhǔn)化處理,然后訓(xùn)練圖神經(jīng)網(wǎng)絡(luò)模型,并使用訓(xùn)練好的模型對(duì)測試集合約進(jìn)行檢測分類。
本文基于代碼相似度的欠采樣方法,利用Levenshtein算法計(jì)算訓(xùn)練集中多數(shù)類智能合約之間的距離,進(jìn)而通過K-Means算法對(duì)多數(shù)類智能合約進(jìn)行聚類,有選擇地丟棄多數(shù)類合約,保證了訓(xùn)練集騙局合約和正常合約類別的相對(duì)平衡。
1.2.1 Levenshtein算法
Bartoletti等[4]使用Levenshtein距離來計(jì)算以太坊網(wǎng)絡(luò)中兩個(gè)任意智能合約的相似度。1965年,俄國科學(xué)家Vladimir Levenshtein率先提出了Levenshtein算法,它采用動(dòng)態(tài)規(guī)劃思想來計(jì)算兩個(gè)字符串之間的編輯距離,即對(duì)于給定的兩個(gè)字符串S和T,由S轉(zhuǎn)換為T,需要的最小編輯次數(shù)。該算法允許的編輯操作有:1) Insert,在被編輯的字符串中插入一個(gè)字符; 2) Delete:在被編輯的字符串中刪除一個(gè)字符; 3) Swap,在被編輯的字符串中替換一個(gè)字符。Levenshtein算法的實(shí)現(xiàn)步驟如下:
算法 1:Levenshtein算法
輸入:長度為a的字符串A,長度為b的字符串B。
輸出:字符串A與字符串B之間的距離distance。
步驟 1:初始化一個(gè)(a+1)×(b+1)階的編輯距離矩陣,記為DA,B(i,j),初始化第一行[0,b],第一列[0,a]。其計(jì)算公式為
DA,B(i,j)=
(1)
式中:A[i]≠B[j]是一個(gè)指示函數(shù),當(dāng)A[i]≠B[j]時(shí),其值為1,否則為0。
步驟 2:比較字符串A和字符串B的字符。
步驟 3:根據(jù)式(1)填充距離矩陣。
步驟 4:重復(fù)步驟2和3直到DA,B[a+1,b+1]被填充。
步驟 5:得到Ldistance=DA,B[a+1,b+1]。Levenshtein距離可以作為智能合約相似度的表征,距離越小,合約特征越相近,反之,合約特征差異越大。
1.2.2 K-Means算法與多數(shù)類樣本篩選
多數(shù)類樣本篩選是指在多數(shù)類智能合約欠采樣過程中,對(duì)不同智能合約的字節(jié)碼進(jìn)行聚類,距離相近的合約成為一類,去掉相似度高的合約樣本,使得被選擇的樣本仍然能夠很好地表征正常合約的多數(shù)特征。
K-Means算法的核心思想是將智能合約字節(jié)碼劃分為多個(gè)聚類,使得每個(gè)聚類中智能合約到該聚類中心的Levenshtein距離的平方和最小。K-Means算法的評(píng)價(jià)準(zhǔn)則是誤差平方和準(zhǔn)則,計(jì)算公式為
(2)
式中:SSE為誤差平方和;k為簇的數(shù)量;Ldistance為算法1中提出的Levenshtein距離。
以下為多數(shù)類樣本選擇算法的過程:
算法 2:多數(shù)類樣本選擇算法
輸入:多數(shù)類智能合約樣本,
輸出:重組后的多數(shù)類智能合約樣本。
步驟 1:隨機(jī)選擇k個(gè)樣本作為智能合約的初始聚類中心;
步驟 2:使用算法1計(jì)算其余合約到各聚類中心的Levenshtein距離,并將其分配到Levenshtein距離最近的簇中;
步驟 3:通過計(jì)算各簇的距離均值,更新聚類中心;
步驟 4:計(jì)算SSE;
步驟 5:重復(fù)步驟2,3,4,直到SSE收斂(不再變化);
步驟 6:從每個(gè)簇中隨機(jī)抽取單個(gè)樣本,構(gòu)造重組后的多數(shù)類智能合約樣本。
圖作為計(jì)算機(jī)科學(xué)中的一種復(fù)雜數(shù)據(jù)結(jié)構(gòu),以抽象的方式表現(xiàn)了數(shù)據(jù)或?qū)嶓w間某種多對(duì)多的復(fù)雜關(guān)系。這些數(shù)據(jù)或?qū)嶓w被稱為節(jié)點(diǎn),而不同節(jié)點(diǎn)間的相關(guān)關(guān)系被稱為邊。Zhuang等[17]提出了一種能夠保存程序語義語法信息、控制依賴關(guān)系和數(shù)據(jù)依賴關(guān)系的智能合約構(gòu)圖方法,把智能合約中的某些函數(shù)和變量抽取為節(jié)點(diǎn),把程序執(zhí)行可能穿過的路徑設(shè)置為邊,將智能合約源代碼提取為合約圖。
1.3.1 構(gòu)圖方法改進(jìn)
智能合約龐氏騙局檢測問題的關(guān)鍵在于如何對(duì)智能合約源代碼進(jìn)行特征提取。Zhuang等[17]的方法應(yīng)用于漏洞檢測時(shí),龐氏騙局合約與漏洞合約的不同之處在于,前者在程序規(guī)則上合法,程序行為完全符合語義語法規(guī)則,而后者會(huì)利用程序漏洞使程序產(chǎn)生語義語法規(guī)則以外的結(jié)果。因此,本文結(jié)合人工分析騙局合約源代碼,在前人的基礎(chǔ)上改進(jìn)了合約圖構(gòu)圖算法,讓圖神經(jīng)網(wǎng)絡(luò)捕獲并學(xué)習(xí)圖的拓?fù)浣Y(jié)構(gòu)關(guān)系、節(jié)點(diǎn)間的控制依賴和數(shù)據(jù)依賴等信息,進(jìn)而在保留源代碼語義信息的同時(shí)對(duì)蘊(yùn)藏其中的行為特征進(jìn)行充分挖掘,提高模型對(duì)騙局合約的識(shí)別能力。改進(jìn)后的構(gòu)圖算法有如下變化:
1) 去除回退節(jié)點(diǎn)。因?yàn)镕allback()函數(shù)作為智能合約定義的安全默認(rèn)函數(shù),盡管其作為節(jié)點(diǎn)特征在智能合約漏洞檢測中極其重要,但是龐氏騙局合約本質(zhì)上是一種特征的欺詐合約模式,在程序規(guī)則上是合法的。因此,騙局合約與漏洞合約并非同一層面的安全問題,故本文方法取消設(shè)置回退節(jié)點(diǎn),同時(shí)取消與其相連的回退邊。
2) 將賬戶(用戶)余額這一關(guān)鍵變量設(shè)置為核心節(jié)點(diǎn)。通過人工分析騙局合約源代碼,可以發(fā)現(xiàn)用于表示合約賬戶余額的變量在用戶投資和返利方面比較活躍,所以本文方法將其設(shè)置為核心節(jié)點(diǎn),讓神經(jīng)網(wǎng)絡(luò)可以自行學(xué)習(xí)其變化特征。
3) 刪除向前邊??紤]到向前邊實(shí)質(zhì)上并不包含語義語法信息,而且這種冗余的特征還會(huì)干擾神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)效果,故將其取消。
1.3.2 節(jié)點(diǎn)表征
合約圖包含兩類節(jié)點(diǎn):核心節(jié)點(diǎn)(Core Node,簡稱C)和普通節(jié)點(diǎn)(Normal Node,簡稱N)。
核心節(jié)點(diǎn)C代表對(duì)騙局合約檢測具有重要影響的關(guān)鍵函數(shù)調(diào)用和關(guān)鍵變量:
1) 用來發(fā)送以太幣的call.value()、send()和transfer()三個(gè)內(nèi)置函數(shù)。
2) 對(duì)前述三個(gè)轉(zhuǎn)賬函數(shù)調(diào)用的函數(shù)W和對(duì)W進(jìn)行調(diào)用的函數(shù)V。
3) 用于表示合約賬戶余額的變量,Balance[msg.sender],players[wating]等。
普通節(jié)點(diǎn)N代表函數(shù)W和函數(shù)V中沒有被提取為核心節(jié)點(diǎn)的變量。
1.3.3 邊表征
合約圖包含兩類有向邊:控制流邊(Control Edge,CE)和數(shù)據(jù)流邊(Date Edge,DE)。表1 詳細(xì)記錄了兩種有向邊的類型及其語義信息。控制流邊來源于控制合約執(zhí)行路徑的程序語句,例如循環(huán)控制和條件判斷。數(shù)據(jù)流邊來源于賦值語句和控制訪問,例如賦值、比較和運(yùn)算語句。
表1 有向邊的分類和表示
按照上述節(jié)點(diǎn)表征方式和邊表征方式,對(duì)智能合約源代碼進(jìn)行靜態(tài)掃描,生成合約圖,如圖2 所示。
(a) 龐氏騙局合約片段
(3)
圖3 是對(duì)圖2(b) 合約圖進(jìn)行聚合優(yōu)化后的標(biāo)準(zhǔn)化合約圖。
圖3 合約圖標(biāo)準(zhǔn)化
本文使用Chen等[6]給出的智能合約龐氏騙局?jǐn)?shù)據(jù)集XBlock,該數(shù)據(jù)集具體包括3 793個(gè)智能合約地址及其標(biāo)簽。其中:共有200個(gè)龐氏騙局合約地址和3 593個(gè)非龐氏騙局合約地址,在這3 593個(gè)非龐氏騙局合約里,有2個(gè)廢棄合約和3個(gè)錯(cuò)誤標(biāo)簽合約,將這些合約排除后,剩下3 788個(gè)可用合約,騙局合約與正常合約的比例接近1∶18; 龐氏騙局的標(biāo)簽為1,非龐氏騙局合約的標(biāo)簽為0。
本文實(shí)驗(yàn)選用圖卷積神經(jīng)網(wǎng)絡(luò)(Graph Convolutional Network,GCN),采用one-hot編碼,并為每一類特征都維護(hù)一個(gè)one-hot字典,將最終提取到的合約圖特征與其字典對(duì)照,然后將離散特征的取值擴(kuò)展到歐氏空間,最后進(jìn)行拼接,實(shí)現(xiàn)對(duì)合約圖特征的向量化表示,將其作為GCN模型的輸入。實(shí)驗(yàn)環(huán)境參數(shù)如表2 所示。
表2 實(shí)驗(yàn)環(huán)境參數(shù)
實(shí)驗(yàn)采用XBlock數(shù)據(jù)集,迭代次數(shù)epoch=30,學(xué)習(xí)率設(shè)置為0.002,dropout設(shè)置為0.7,批大小為32,GCN模型參數(shù)如表3 所示。
表3 GCN模型參數(shù)
表4 為智能合約龐氏騙局檢測混淆矩陣。
表4 智能合約龐氏騙局檢測的混淆矩陣
智能合約龐氏騙局檢測時(shí),由于騙局合約的數(shù)量很少,如果模型認(rèn)定測試集中所有合約都為正常合約,那么模型的準(zhǔn)確率指標(biāo)也會(huì)很高。所以,本文在選取智能合約龐氏騙局檢測的評(píng)價(jià)指標(biāo)時(shí),放棄使用準(zhǔn)確率(Accuracy),最終選取了精確率、召回率和F1值來評(píng)價(jià)模型的分類性能,計(jì)算過程如下:
(4)
(5)
(6)
式中:NTP為實(shí)際騙局合約被檢測為騙局合約的數(shù)量;NFP為實(shí)際正常合約的合約代碼被檢測為騙局合約的數(shù)量;NFN為實(shí)際騙局合約被檢測為正常漏洞的數(shù)量;P為精確率,反映了模型所預(yù)測的騙局合約是否準(zhǔn)確;R為召回率,反映了模型是否能夠檢測出所有騙局合約;F1綜合了騙局合約檢測的精確率與召回率,全面反映了模型對(duì)于智能合約的分類效果。對(duì)于騙局合約檢測,本文的預(yù)期效果是在保證精確率的前提下提高召回率,找出更多騙局合約,以減少其帶來的危害。
重組后訓(xùn)練集的類別比例取決于欠采樣倍率,并且會(huì)最終影響模型的性能,因?yàn)榍凡蓸訒?huì)造成信息缺失,即將正常合約丟棄可能會(huì)導(dǎo)致模型丟失正常合約的重要信息。
在不同欠采樣倍率下,不同類別比例的重組訓(xùn)練集對(duì)本文方法所得P、R和F1的影響如圖4 所示。
圖4 不同采樣倍率的實(shí)驗(yàn)結(jié)果
由圖4 可得,當(dāng)重組訓(xùn)練集比例為1∶3時(shí),模型的召回率和F1值最高,而精度略低,主要原因是丟棄掉太多的正常合約樣本,使得模型將正常合約誤判為騙局合約,并且隨著比例的增大,模型的性能會(huì)快速下降,因?yàn)樵跀?shù)據(jù)極度不平衡時(shí),模型受到權(quán)重的影響而對(duì)騙局合約的敏感度降低,從而使檢測性能下降。
由于在真實(shí)以太坊網(wǎng)絡(luò)中騙局合約遠(yuǎn)少于正常合約,所以本文選擇較低的精確率,而選擇更高的召回率,最終使用了重組后比例為1∶3的訓(xùn)練集所對(duì)應(yīng)的網(wǎng)絡(luò)模型,提高了智能合約龐氏騙局的檢測效果。
為了驗(yàn)證本文方法對(duì)于智能合約龐氏騙局檢測的有效性,進(jìn)行了消融對(duì)比實(shí)驗(yàn),主要是將本文方法與以下兩種方法進(jìn)行了比較:① 重組前訓(xùn)練集和改進(jìn)構(gòu)圖算法相結(jié)合的方法; ② 重組后訓(xùn)練集和原始構(gòu)圖算法相結(jié)合的方法。
如圖5 所示,本文方法與方法①的對(duì)比證明了本文基于代碼相似度的欠采樣方法的有效性,通過采用Levenshtein距離算法+K-Means算法對(duì)特征相近的正常合約進(jìn)行了聚類,丟棄一部分正常合約,使得重組后的訓(xùn)練集相對(duì)平衡,提高了模型對(duì)騙局合約的關(guān)注度,從而顯著提高了騙局合約的召回率; 本文方法與方法②的對(duì)比證明了本文針對(duì)龐氏騙局合約改進(jìn)的智能合約構(gòu)圖方法的有效性,通過去掉冗余的節(jié)點(diǎn)和有向邊,將源代碼中表示合約余額的關(guān)鍵變量設(shè)置為新的核心節(jié)點(diǎn),改進(jìn)了源代碼表征方式,使得網(wǎng)絡(luò)模型能夠更好地學(xué)習(xí)騙局合約的關(guān)鍵特征,提升了對(duì)于騙局合約的關(guān)注度和敏感程度,因此可以找出更多的騙局合約,將召回率提高了33%,從而極大地提升了模型的性能。
圖5 消融實(shí)驗(yàn)結(jié)果
為了進(jìn)一步驗(yàn)證本文方法對(duì)智能合約龐氏騙局檢測的有效性,綜合認(rèn)可度,分別選取傳統(tǒng)機(jī)器學(xué)習(xí)方法、改進(jìn)機(jī)器學(xué)習(xí)方法和深度學(xué)習(xí)方法,將本文方法與SVM,XGBoost,RF[7],IForest[9],DSPSD[11],Ethereum-CTRF[13],AdaBoost[14]進(jìn)行實(shí)驗(yàn)對(duì)比,結(jié)果如表5 所示。
表5 不同分類方法的結(jié)果對(duì)比
通過對(duì)比表5 中各分類方法的評(píng)價(jià)指標(biāo),可以看出,在前4種機(jī)器學(xué)習(xí)方法中,孤立森林(IForest)方法對(duì)智能合約龐氏騙局檢測的性能最優(yōu),精確率為99%,召回率為80%,F1值為88%,僅次于深度學(xué)習(xí)方法DSPSD。本文方法的精確率為91%,非常接近其余5種方法; 本文方法的召回率和F1值分別為98%和94%,明顯優(yōu)于其余5種方法。在騙局合約識(shí)別中,本文方法期望在保證精確率的前提下提高召回率,盡可能多地找出更多騙局合約,以減少其帶來的危害。綜上所述,本文方法對(duì)智能合約龐氏騙局的檢測效果有所提升。
本文針對(duì)以太坊龐氏騙局合約檢測進(jìn)行了研究,通過分析源代碼的特點(diǎn),提出了一種基于欠采樣和源代碼圖表征的智能合約龐氏騙局檢測方法,使用Levenshtein算法和K-Means算法,在數(shù)據(jù)層面解決了智能合約類別不平衡的問題,避免了模型的過度擬合。本文首次引入了高級(jí)語言構(gòu)圖方法用于龐氏騙局合約的源代碼構(gòu)圖,同時(shí)改進(jìn)了構(gòu)圖算法,以便于從Solidty源代碼層面挖掘能夠區(qū)分龐氏騙局的關(guān)鍵特征,從而提升了網(wǎng)絡(luò)模型對(duì)龐氏騙局合約的敏感程度。實(shí)驗(yàn)結(jié)果表明,本文方法在XBlock數(shù)據(jù)集上,在犧牲少許精度的情況下,顯著提升了智能合約龐氏騙局的召回率和F1值。本文方法在進(jìn)行智能合約類別不平衡處理時(shí),只關(guān)注了字節(jié)碼之間的編輯距離,沒有考慮其具體含義,今后的研究工作應(yīng)在智能合約聚類時(shí)關(guān)注其語義語法信息,引入更加嚴(yán)格的量化指標(biāo)來進(jìn)行核心節(jié)點(diǎn)選取,并將合約類別和交易信息等特征引入模型訓(xùn)練,以進(jìn)一步提高模型的檢測性能。