Ⅰ 回首Delegatecall漏洞下的Parity多重簽名合約
回顧2017年7月19日,Parity Multisig錢包合約曝出漏洞,黑客從三個安全級別高的多重簽名合約中竊取了15萬余以太坊,金額約3000萬美元。Parity錢包以其運行速度快、資源佔用少、同步效率高、支持定時轉賬交易等優勢備受贊賞,但也存在對代幣支持不足的問題。用戶可通過導入imToken來彌補這一缺陷。然而,這次事件暴露出一個嚴重漏洞。
delegatecall函數是關鍵,它允許合約調用另一個合約的代碼,但不使用當前合約的存儲、余額等信息。這設計初衷是為了利用其他合約的庫代碼,但也為黑客提供了一條途徑。黑客通過delegatecall調用initWallet函數,使得initMultiowned函數可以被執行,從而將Parity錢包庫合約轉變為普通多重簽名錢包,並控制所有權。黑客利用這一漏洞,可以將錢包變成自己的,然後執行轉賬操作。
訪問控制問題普遍存在,智能合約也不例外。不當的訪問控制設置可能導致攻擊者直接訪問合約的私有價值或邏輯。更復雜的是,訪問控制旁路可能發生在合約使用已棄用的tx.origin驗證調用者、長時間處理大型授權邏輯後,魯莽使用delegatecall在代理庫或代理合約中。
深入分析發現,initWallet函數能夠改變合約的所有權,而代碼中使用delegatecall函數,導致所有public函數對所有人可見,且沒有設置任何防護措施。攻擊者首先獲取所有權,將轉賬指令存入Data,隨後執行execute獲取所有資金。
針對這一漏洞,建議採取如下防範措施:謹慎使用delegatecall函數,明確函數可見性,避免public類型,可使用external類型限制外部調用;加強許可權控制,設置onlyOwner等修飾器保護敏感函數,確保只有合約所有者能執行特定操作。
Ⅱ eth涓嶈繘鐭挎睜鎬庝箞鏍鋒寲
eth涓嶈繘鐭挎睜鎬庝箞鎸栫熆
瑕佹兂鍦ㄤ笉鍔犲叆鐭挎睜鐨勬儏鍐典笅鎸朎TH錛屾偍闇瑕佹寜鐓т互涓嬫ラよ繘琛屾搷浣滐細
鑾峰彇浠ュお鍧婇挶鍖咃細鎮ㄩ渶瑕佸畨瑁呬互澶鍧婇挶鍖咃紝渚嬪侴eth銆丳arity鎴朚yEtherWallet銆傝繖灝嗕負鎮ㄦ彁渚涗竴涓浠ュお鍧婂湴鍧錛岀敤浜庢帴鏀舵寲鍒扮殑ETH銆
鑾峰彇浠ュお鍧婃寲鐭胯蔣浠訛細鎮ㄩ渶瑕侀夋嫨涓縐嶄互澶鍧婃寲鐭胯蔣浠訛紝渚嬪侰laymore銆丳hoenix鎴朑miner銆傝繖浜涜蔣浠跺皢浼氬府鍔╂偍璁$畻浠ュお鍧婂搱甯岀巼錛屽苟灝嗗叾鍙戦佺粰浠ュお鍧婄綉緇溿
榪炴帴浠ュお鍧婄綉緇滐細鍦ㄥ惎鍔ㄤ互澶鍧婃寲鐭胯蔣浠朵箣鍓嶏紝鎮ㄩ渶瑕佸皢鍏惰繛鎺ュ埌浠ュお鍧婄綉緇溿傚傛灉鎮ㄦe湪浣跨敤浠ュお鍧婁富緗戱紝璇峰皢浠ュお鍧婃寲鐭胯蔣浠惰繛鎺ュ埌浠ュお鍧婁富緗戣妭鐐廣
閰嶇疆浠ュお鍧婃寲鐭胯蔣浠訛細鎮ㄩ渶瑕佽劇疆浠ュお鍧婃寲鐭胯蔣浠朵互渚胯╁叾鐭ラ亾鎮ㄧ殑浠ュお鍧婂湴鍧錛屼互渚垮皢鎸栧埌鐨凟TH鍙戦佸埌璇ュ湴鍧銆傛偍榪橀渶瑕侀夋嫨瑕佷嬌鐢ㄧ殑鎸栫熆奼犳垨鑰呬嬌鐢ㄧ嫭絝嬫寲鐭匡紝榪欏彇鍐充簬鎮ㄧ殑鍋忓ソ銆
寮濮嬫寲鐭匡細涓鏃︽偍宸茬粡瀹屾垚涓婅堪姝ラわ紝鎮ㄥ彲浠ュ紑濮嬫寲鐭誇簡銆傛偍鐨勪互澶鍧婃寲鐭胯蔣浠跺皢浼氬紑濮嬭$畻浠ュお鍧婂搱甯岀巼錛屽苟鍚戜互澶鍧婄綉緇滃彂閫佽繖浜涗俊鎮銆
闇瑕佹敞鎰忕殑鏄錛屽湪涓嶅姞鍏ョ熆奼犵殑鎯呭喌涓嬶紝鎮ㄩ渶瑕佹嫢鏈夋洿寮哄ぇ鐨勮$畻鏈烘墠鑳芥寲鍒頒互澶鍧娿傛寲鐭塊渶瑕佸ぇ閲忕殑璁$畻璧勬簮錛屽苟涓斾細瀵規偍鐨勭數鑴戜駭鐢熷緢澶х殑鍘嬪姏錛屾墍浠ユ偍闇瑕佺『淇濇偍鐨勭數鑴戝彲浠ユ壙鍙楄繖浜涜礋鎷呫
Ⅲ etherscan.io是如何獲取區塊鏈詳細數據的
etherscan.io 等區塊鏈瀏覽器獲取區塊鏈數據的主要方式是通過搭建全節點,調用全節點的 RPC 方法獲取所需信息。web3.eth 也採用相似策略。為了獲取特定數據,開發者可通過解析全節點源代碼或資料庫,但此類操作技術難度較高,要求深入了解區塊鏈原理與數據存儲結構。
以太坊全節點主要有兩種版本:Geth 和 Parity。Parity 擁有更強大的功能,但資源佔用更大。
獲取合約地址的交易數據時,需注意合約調用產生的結果通常不上鏈,故 Geth 全節點無法獲取內部交易信息。而 Parity 提供了 trace 介面,能夠通過以太坊虛擬機(EVM)回放,獲取內部交易詳情。etherscan.io 則通過 trace 介面獲取此類數據。
ERC20 合約交易數據可通過 Parity 全節點調用 eth_getFilterLogs 方法篩選並獲取,此介面詳細說明可見於相關文檔。
另外,谷歌 BigQuery 提供了全面的鏈上數據查詢服務,包括比特幣、分叉鏈、以太坊、以太經典等。但服務費用按每次搜索的數據量計費,每 TB 5 美元,成本不菲。BigQuery 並且開源了數據解析代碼,用戶可根據自身需求搭建自用資料庫。
在區塊鏈數據獲取方面,etherscan.io 通過搭建全節點或調用高階介面實現了數據的有效獲取。同時,BigQuery 等工具提供了便捷的數據查詢途徑,盡管存在費用問題,但其提供的鏈上數據覆蓋廣泛,為研究與分析提供了寶貴資源。
Ⅳ 走進以太坊網路
目錄
術語「以太坊節點」是指以某種方式與以太坊網路交互的程序。從簡單的手機錢包應用程序到存儲整個區塊鏈副本的計算機,任何設備均可扮演以太坊節點。
所有節點都以某種方式充當通信點,但以太坊網路中的節點分為多種類型。
與比特幣不同,以太坊找不到任何程序作為參考實施方案。在比特幣生態系統中, 比特幣核心 是主要節點軟體,以太坊黃皮書則提出了一系列獨立(但兼容)的程序。目前最流行的是Geth和Parity。
若要以允許獨立驗證區塊鏈數據的方式連接以太坊網路,則應使用之前提到的軟體運行全節點。
該軟體將從其他節點下載區塊,並驗證其所含交易的正確性。軟體還將運行調用的所有智能合約,確保接收的信息與其他節點相同。如果一切按計劃運行,我們可以認為所有節點設備均存儲相同的區塊鏈副本。
全節點對於以太坊的運行至關重要。如果沒有遍布全球的眾多節點,網路將喪失其抗審查性與去中心化特性。
通過運行全節點,您可以直接為網路的 健康 和安全發展貢獻一份力量。然而,全節點通常需要使用獨立的機器完成運行和維護。對於無法(或單純不願)運行全節點的用戶,輕節點是更好的選擇。
顧名思義,輕節點均為輕量級設備,可顯著降低資源和空間佔用率。手機或筆記本電腦等攜帶型設備均可作為輕節點。然而,降低開銷也要付出代價:輕節點無法完全實現自給自足。它們無法與整條區塊鏈同步,需要全節點提供相關信息。
輕節點備受商戶、服務供應商和用戶的青睞。在不必使用全節點並且運行成本過高的情況下,它們廣泛應用於支收付款。
挖礦節點既可以是全節點客戶端,也可以是輕節點客戶端。「挖礦節點」這個術語的使用方式與比特幣生態系統不同,但依然應用於識別參與者。
如需參與以太坊挖礦,必須使用一些附加硬體。最常見的做法是構建 礦機 。用戶通過礦機將多個GPU(圖形處理器)連接起來,高速計算哈希數據。
礦工可以選擇兩種挖礦方案:單獨挖礦或加入礦池。 單獨挖礦 表示礦工獨自創建區塊。如果成功,則獨享挖礦獎勵。如果加入 礦池 ,眾多礦工的哈希算力會結合起來。出塊速度得以提升,但挖礦獎勵將由眾多礦工共享。
區塊鏈最重要的特性之一就是「開放訪問」。這表明任何人均可運行以太坊節點,並通過驗證交易和區塊強化網路。
與比特幣相似,許多企業都提供即插即用的以太坊節點。如果只想啟動並運行單一節點,這種設備無疑是最佳選擇,缺點是必須為便捷性額外付費。
如前文所述,以太坊中存在眾多不同類型的節點軟體實施方案,例如Geth和Parity。若要運行個人節點,必須掌握所選實施方案的安裝流程。
除非運行名為 歸檔節點 的特殊節點,否則消費級筆記本電腦足以支持以太坊全節點正常運行。不過,最好不要使用日常工作設備,因為節點會嚴重拖慢運行速度。
運行個人節點時,建議設備始終在線。倘若節點離線,再次聯網時可能耗費大量的時間進行同步。因此,最好選擇造價低廉並且易於維護的設備。您甚至可以通過Raspberry Pi運行輕節點。
隨著網路即將過渡到權益證明機制,以太坊挖礦不再是最安全的長期投資方式。過渡成功後,以太坊礦工只能將挖礦設備轉入其他網路或直接變賣。
鑒於過渡尚未完成,參與以太坊挖礦仍需使用特殊硬體(例如GPU或ASIC)。若要獲得可觀收益,則必須定製礦機並尋找電價低廉的礦場。此外,還需創建以太坊錢包並配置相應的挖礦軟體。這一切都會耗費大量的時間和資金。在參與挖礦前,請認真考量自己能否應對各種挑戰。(國內嚴禁挖礦,切勿以身試法)
ProgPow代表 程序化工作量證明 。這是以太坊挖礦演算法Ethash的擴展方案,旨在提升GPU的競爭力,使其超過ASIC。
在比特幣和以太坊社區,抗ASIC多年來一直是飽受爭議的話題。在比特幣網路中,ASIC已經成為主要的挖礦力量。
在以太坊中,ASIC並不是主流,相當一部分礦工仍然使用GPU。然而,隨著越來越多的公司將以太坊ASIC礦機引入市場,這種情況很快就會改變。然而,ASIC到底存在什麼問題呢?
一方面,ASIC明顯削弱網路的去中心化。如果GPU礦工無法盈利,不得不停止挖礦,哈希率最終就會集中在少數礦工手中。此外,ASIC晶元的開發成本相當昂貴,坐擁開發能力與資源的公司屈指可數。這種現狀有可能導致以太坊挖礦產業集中在少數公司手中,形成一定程度的行業壟斷。
自2018年以來,ProgPow的集成一直飽受爭議。有些人認為,它有益於以太坊生態系統的 健康 發展。另一些人則持反對態度,認為它可能導致硬分叉。隨著權益證明機制的到來,ProgPoW能否應用於網路仍然有待觀察。
以太坊與比特幣是一樣,均為開源平台。所有人都可以參與協議開發,或基於協議構建應用程序。事實上,以太坊也是區塊鏈領域目前最大的開發者社區。
Andreas Antonopoulos和Gavin Wood出品的 Mastering Ethereum ,以及Ethereum.org推出的 開發者資源 等都是新晉開發者理想的入門之選。
智能合約的概念於20世紀90年代首次提出。其在區塊鏈中的應用帶來了一系列全新挑戰。2014年由Gavin Wood提出的Solidity已經成為開發以太坊智能合約的主要編程語言,其語法與Java、JavaScript以及C++類似。
從本質上講,使用Solidity語言,開發者可以編寫在分解後可由以太坊虛擬機(EVM)解析的指令。您可以通過Solidity GitHub詳細了解其工作原理。
其實,Solidity語言並非以太坊開發者的唯一選擇。Vyper也是一種熱門的開發語言,其語法更接近Python。