GB∕T 43579-2023 區塊鏈和分布式記賬技術 智能合約生命周期管理技術規范(正式版)_第1頁
GB∕T 43579-2023 區塊鏈和分布式記賬技術 智能合約生命周期管理技術規范(正式版)_第2頁
GB∕T 43579-2023 區塊鏈和分布式記賬技術 智能合約生命周期管理技術規范(正式版)_第3頁
GB∕T 43579-2023 區塊鏈和分布式記賬技術 智能合約生命周期管理技術規范(正式版)_第4頁
GB∕T 43579-2023 區塊鏈和分布式記賬技術 智能合約生命周期管理技術規范(正式版)_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

區塊鏈和分布式記賬技術智能合約生命周期管理技術規范2023-12-28發布國家標準化管理委員會GB/T43579—2023前言 I Ⅱ 2規范性引用文件 3術語和定義 4概述 25通用技術要求 25.1設計開發 25.2編譯部署 35.3觸發執行 45.4維護管理 66通用評估方法 76.1設計開發 76.2編譯部署 86.3觸發執行 86.4維護管理 附錄A(資料性)常見智能合約漏洞 參考文獻 IGB/T43579—2023本文件按照GB/T1.1—2020《標準化工作導則第1部分:標準化文件的結構和起草規則》的規定起草。請注意本文件的某些內容可能涉及專利。本文件的發布機構不承擔識別專利的責任。本文件由中華人民共和國工業和信息化部提出。本文件由全國區塊鏈和分布式記賬技術標準化技術委員會(SAC/TC590)歸口。本文件起草單位:螞蟻區塊鏈科技(上海)有限公司、中國電子技術標準化研究院、眾安信息技術服務有限公司、深圳市前海智慧版權創新發展研究院、上海萬向區塊鏈股份公司、四川長虹電器股份有限公司、南京鑫智鏈科技信息有限公司、湖南天河國云科技有限公司、西南林業大學、螞蟻科技集團股份有限公司、杭州趣鏈科技有限公司、深圳市騰訊計算機系統有限公司、復旦大學、工銀科技有限公司、西安交通大學、南方電網大數據服務有限公司、國家應用軟件產品質量檢驗檢測中心、上海分布信息科技有限公司、達闥機器人股份有限公司、騰訊云計算(北京)有限責任公司、北京大數據先進技術研究院、上海陣方科技有限公司、浙商銀行股份有限公司、上海零數眾合信息科技有限公司、廣州南方投資集團有限公司、永旗控股(北京)有限公司、研祥智能科技股份有限公司、京東科技信息技術有限公司、中移動信息技術有限公司、北京泰爾英福科技有限公司、工業和信息化部電子第五研究所、聯通數字科技有限公司、國家工業信息安全發展研究中心、華為云計算技術有限公司、華為技術有限公司、北京大學計算與數字經濟研究院、神州數碼信息服務股份有限公司、國網區塊鏈科技(北京)有限公司、上海奧若拉信息科技集團有限公司、北京微芯區塊鏈與邊緣計算研究院、中國民航信息網絡股份有限公司、浙江大學、香港理工大學、廣州賽西標準檢測研究院有限公司、敏于行(北京)科技有限公司、恒寶股份有限公司、北京合思信息技術有限公司、深圳江行聯加智能科技有限公司、深圳博思互聯科技有限公司、北京國金匯德工程管理有限公司、浙江出彩智能科技有限公司、江西開創數碼科技有限公司、中國信息通信研究院。Ⅱ近年來,在產業政策、法律法規、技術進步、市場發展等多方面推動下,區塊鏈技術正加速“脫虛向實”,助力實體經濟高速發展。智能合約是存儲在分布式記賬技術系統中的計算機程序,該程序的任何執行結果都記錄在分布式賬本上。智能合約將區塊鏈帶入了可編程,智能化時代。然而,隨著智能合約日益廣泛地應用,不規范的設計、開發、測試及維護帶來了許多風險問題,造成了嚴重損失。為了給應用區塊鏈聯結的各行業、各企業和相關組織提供可實施的標準,本文件對區塊鏈智能合約的生命周期進行了深入的分析,梳理了智能合約生命周期各階段,包括設計開發、編譯部署、觸發執行和維護管理。在生命周期的各個階段,本文件提煉需要遵循的相關要求,從而構建出一套可實施的,能夠避免智能合約可能出現風險的執行流程,為區塊鏈聯結的各個行業提供可操作、具有指導意義的智能合約實施規范。1區塊鏈和分布式記賬技術智能合約生命周期管理技術規范1范圍述了各環節的評估方法。本文件適用于區塊鏈相關方開展智能合約的建設、應用和審計。2規范性引用文件本文件沒有規范性引用文件。3術語和定義下列術語和定義適用于本文件。使用密碼鏈接將共識確認過的區塊按順序追加形成的分布式賬本。存儲在分布式記賬技術系統中的計算機程序,該程序的任何執行結果都記錄在分布式賬本中。注:智能合約可以在法律上代表合同條款,并在適用司法管轄區的法律下產生可強制執行的義務。規定數據結構的數據對象的經定義的集合和一組許可的運算,在這些運算中任何一個執行時,其中數據對象都當作運算數。形式化驗證formalverification通過對算法邏輯的數學形式化表達,驗證智能合約程序確定性和完備性的方法。使用分布式記賬技術系統外部數據更新分布式賬本的服務。2圖靈完備turingcomplete在可計算性理論中,一系列操作數據的規則(如指令集、編程語言、細胞自動機)按照一定的順序計算并解決所有可計算的問題。當智能合約從構思開始至不可使用為止的時間周期。4概述智能合約的全生命周期包含設計開發、編譯部署、觸發執行和維護管理,如圖1所示。a)智能合約的設計開發是指從業務需求出發完成智能合約的功能和安全等設計,然后通過智能合約編程語言構造出智能合約。b)智能合約的編譯部署是將智能合約代碼轉換成可執行的格式,然后部署到區塊鏈節點的智能合約運行時環境中。c)智能合約的觸發執行是將符合條件的事件推送到待驗證的隊列中,區塊鏈上的驗證節點對交易進行全面認證并達成共識。區塊鏈執行該交易,并將交易和執行結果記入區塊鏈中。d)智能合約的維護管理是指智能合約部署上線后,因需要修正錯誤,提升性能,或其他問題而導設計開發設計開發編譯部署觸發執行維護管理圖1智能合約生命周期管理示意圖5通用技術要求5.1設計開發5.1.1智能合約設計在編寫智能合約之前,需設計智能合約的結構功能,規避對外的交互和安全風險,符合如下要求:a)應收集、分析、細化并核實智能合約的功能需求,編寫智能合約需求文檔;b)應設計智能合約對外交互的接口和流程,最小化地暴露交互接口;c)應對智能合約的使用權限、時序邏輯進行合理設計,權限粒度要做到盡量小,按最低要求分配權限,對時序邏輯要嚴格驗證,避免時序邏輯導致的安全性問題,如條件競爭等;d)宜進行類圖、用例圖、時序圖、數據流圖、流程圖、架構圖、部署圖等設計,并且保留相應的設計圖;e)應設計安全威脅模型,制定智能合約安全風險分析與風險管理規劃,制定相應的應對措施;f)應具備設計智能合約的處理或補救錯誤的能力,包括且不限于提前終止或線上更新能力。在編寫智能合約代碼時,符合如下要求:3b)對所有公共成員變量與函數的引用對象,應進行對外暴露的風險分析;c)對所有條件選擇語句和交易步驟進行完備性檢查,應符合條件動作描述的完備要求;d)應避免邏輯漏洞和邏輯錯誤,如轉賬前余額未校驗,未檢查返回值的調用,整數溢出等;e)智能合約和函數應模塊化、邏輯簡潔,應避免使用過時的語法或用法,如分母為零,數組越界訪問等;f)宜采用條件保護語句,如Solidity語言中require(condition,message)條件語句,當condition5.1.3智能合約語言智能合約語言符合如下要求:a)支持的數據類型應包含string(字符串)、int(整型)、boolean(布爾型)以及基本類型的數組類型;b)支持的數據類型宜包含byte(字節型)、char(字符型)、short(短整型)、long(長整型)、float(單精度浮點型)、double(雙精度浮點型)、map(映射)、vector(向量)自定義類型等;c)支持的計算類型應包含算術運算、關系運算、邏輯運算、條件運算、賦值運算等;d)支持的計算類型宜包含位運算、數據類型轉換、哈希運算等;e)對于支持圖靈完備的語言,控制結構應包含順序結構、分支結構和循環結構等;f)對于支持圖靈完備的語言,控制結構宜包含異常結構處理、遞歸結構處理;g)應支持區塊數據和當前狀態數據的訪問能力;h)宜支持歷史狀態數據的訪問能力和統一的數據訪問模型;i)應支持數據的讀寫能力和遍歷能力,宜支持數據的查詢能力,如條件查詢、范圍查詢、線索查詢等;j)宜支持帶有業務屬性的簡單支付驗證的生成。5.1.4智能合約調試智能合約需要進行必要的調試時,符合如下要求:a)應提供智能合約調試流程和方案;b)應提供智能合約的單步調試能力,包括斷點設置,stepinto(單步跳入)、stepout(單步跳出)、stepover(單步跳過)及callstack(調用棧)查詢,斷點處變量查詢等能力;c)應對智能合約的業務邏輯、業務流程,以及代碼是否符合業務需求進行測試;d)應支持對智能合約進行靜態安全掃描、動態安全掃描,避免如附錄A所示的漏洞;e)宜支持對智能合約進行形式化驗證。5.2編譯部署5.2.1智能合約編譯智能合約編譯是將智能合約代碼轉換成運行環境可執行的格式的過程,此過程應符合如下要求:a)選擇主流的安全編譯工具;b)支持智能合約在區塊鏈平臺上編譯檢測,保證在編譯之后字節碼的安全性;c)明確智能合約編譯工具名稱及版本信息,編譯工具依賴環境信息;d)編程語言的編譯器確保一致性,智能合約源碼在編譯成字節碼后前后邏輯一致;e)編譯完成后,明確智能合約接口描述文件和編譯結果文件后綴。4智能合約部署是將智能合約代碼部署到區塊鏈節點的智能合約運行時環境中的過程,此過程符合如下要求:a)智能合約部署應需要鏈上節點達成共識;b)宜校驗智能合約部署的完整性;c)應校驗智能合約的部署權限;d)部署完應返回智能合約的部署狀態;e)智能合約部署完后應確定其唯一標識,如地址、智能合約名等。5.3觸發執行5.3.1智能合約調用智能合約調用是觸發智能合約業務的執行,包含直接調用、智能合約間調用、預言機調用和鏈上隨機數調用。直接調用是通過區塊鏈接口,從外部直接觸發調用,符合如下要求:a)應支持智能合約的部署、狀態查詢和接口調用;c)接口名稱應明確接口功能,具有標識性,在直接調用接口的時候應能夠執行規定的智能合約調用流程;d)直接調用的接口名稱不存在時,應有明確的默認結構被調用,或者提供明確的錯誤信息供調用者修改錯誤;e)直接調用的接口參數錯誤時(參數類型錯誤等),應有明確的錯誤參數轉換規則,或者提供明確的錯誤信息供調用者修改錯誤。智能合約間調用是指智能合約之間進行鏈上調用的過程,符合如下要求:a)應符合安全性規則(如防重入),明確調用內容上下文是本智能合約還是代理智能合約;b)智能合約間的調用參數應具有參數校驗,避免調用的實際接口與預期不相符合;c)應對智能合約接口的最小暴露性原則、智能合約權限原則等進行嚴格的測試與檢查。智能合約通過調用預言機相關接口觸發預言機,符合如下要求:a)接口名稱、輸入參數、返回數據應符合應用程序接口規范;b)接口描述文件應采用預言機提供的結構化描述語言;c)接口協議應包含安全傳輸協議;d)預言機應保證源數據完整未被篡改;e)數據由指定的數據源產生時,應能夠提供數據源的有效證明;f)宜采用分布式預言機的方式提高服務可用性和安全性,不同的預言機節點應具備唯一的身份標識;5g)預言機提供的外部數據源的影響范圍應僅限于智能合約范圍內,不應影響系統的整體運行。智能合約通過調用鏈上隨機數相關接口觸發隨機數,符合如下要求:a)隨機數在不同的節點獲取,要保證確定性執行語義;b)不同區塊及相同區塊中的不同交易,獲取到的隨機數需要保證隨機性;c)隨機數需要保證不可預測性,隨機數算法需要有密碼學證明。5.3.2智能合約執行智能合約的執行是運行智能合約代碼完成預定功能,符合如下要求:a)應符合可執行終止性原理、確定性執行結果原理,一般可采用解釋執行或JIT編譯到機器指令執行兩種方式;b)智能合約執行結果應具備事務一致性,若調用失敗,支持回滾到執行交易之前的狀態或者有明確的錯誤返回值;c)應支持智能合約狀態保存在區塊鏈網絡上,如作為智能合約賬戶的屬性;d)在執行之前,應檢查該智能合約和鏈上智能合約的哈希值的一致性;e)支持在智能合約執行的過程中,將事件推送給已訂閱的客戶端;f)應具備正確處理異常的能力,支持實時監測和狀態回滾。5.3.3智能合約運行時外部交互智能合約在執行過程中會與外部進行交互,符合如下要求:a)外部用戶或應用與智能合約的交互應支持部署、查詢、調用等;b)應支持通過智能合約獲取外部數據,如預言機;c)智能合約應對外提供準確的接口描述,同時對外部的輸入做嚴格檢查;d)智能合約與外部數據交互時,外部數據應只影響本智能合約的狀態。5.3.4智能合約執行環境智能合約的執行環境符合如下要求:a)應保證智能合約運行環境與外部隔離,調用智能合約不會對區塊鏈狀態外的外部環境造成影響,也不會導致區塊鏈系統失敗;b)運行環境應具備執行無二義性,能處理異常事件,當發生異常時,能夠對事件進行回滾;c)應保證在相同的輸入和相同的歷史狀態下,不同的節點執行相同的交易可獲得一致的結果;d)宜支持可信執行環境,提供隱私保護的技術環境;e)應具備可信性,不應泄漏信息,具有可信追溯的特性;f)當智能合約調用出現錯誤時,應提供智能合約回退功能,恢復該次調用對區塊鏈狀態造成的影響。5.3.5智能合約事件智能合約事件指由外部賬號調用智能合約過程中產生的,被打包到當前區塊中可被永久訪問的事a)智能合約事件應支持被監聽,業務方通過監聽事件可得到事件名稱、事件參數、區塊高度等詳6細信息;b)智能合約事件類型應包含正常業務事件、異常業務事件;c)智能合約事件應包含事件名稱和事件參數;d)事件名稱應是智能合約內事件的唯一標識,并體現事件的業務類型。正常業務事件指在調用智能合約執行完正常業務流程后,觸發一個事件,記錄業務完成正常流a)應記錄引起業務狀態變更的相關方,業務的類型、內容等;b)事件名稱宜使用能代表業務的名字,如Transfer;c)事件參數應為記錄的業務數據。異常業務事件指在調用智能合約接口執行過程中,進入了業務異常處理的判斷邏輯,拋出一個異常事件,以便業務端知道出錯原因,符合如下要求:a)應記錄引起異常業務事件的發起方,異常的原因;b)應記錄引起異常業務事件的智能合約接口及傳參內容;c)事件名稱宜使用能代表業務異常的類型;d)事件參數應包含錯誤異常類型和錯誤者異常的原因。事件接口結構為調用方提供接口的規范化說明,事件接口包含:a)唯一的聲明事件接口,如關鍵字;b)唯一的調用事件接口,如關鍵字;c)將智能合約傳進來的數據上鏈,打包進當前區塊,并回調給業務調用方。5.4維護管理5.4.1智能合約版本維護智能合約的每次修改即為獨立版本,版本的維護方式分為:a)在源代碼中定義版本號;b)在配置文件中定義版本號,該配置文件應與智能合約代碼一同部署;c)在部署或升級操作時定義版本號。5.4.2智能合約升級約束智能合約的升級操作由客戶端發起,以接口調用的方式在區塊鏈中提交,達成共識后生效,符合如下要求:a)應支持智能合約的在線升級;b)應支持區塊鏈平臺升級后,智能合約仍能穩定運行;c)升級操作宜記錄在區塊中,符合區塊鏈中交易要求、遵從交易執行的流程;d)智能合約升級后,應保留歷史版本;e)智能合約升級失敗時,應能回滾到原來的智能合約;f)智能合約應具備版本控制功能,在智能合約升級到新版本后,宜向前兼容舊版本智能合約。75.4.3智能合約凍結和解凍智能合約凍結和解凍是對智能合約調用功能進行停止和重新開放的過程,符合如下要求:a)應支持凍結功能,當發現智能合約存在漏洞時可停止使用;b)應支持解凍功能,當智能合約中的漏洞修復后可恢復使用;c)調用智能合約凍結和解凍功能時,應進行權限訪問控制。5.4.4智能合約廢止智能合約廢止是廢止已部署的智能合約的過程,且不可逆,符合如下要求:a)應支持通過交易的方式實現智能合約的廢止功能,且智能合約廢止后數據仍然存在,保存被終止版本的智能合約代碼,并且不能再次被啟動執行;b)調用智能合約廢止程序時,應有權限訪問控制,只有管理員或者相應權限用戶才有權利廢止智能合約;c)可被廢止的智能合約在部署時宜設置顯式聲明;d)智能合約廢止時,應有相應的處置措施,保障智能合約參與用戶的權利與資產安全。6通用評估方法6.1設計開發6.1.1智能合約設計6.1.1.1智能合約設計評估方法如下:a)核查智能合約需求文檔中需求和功能的說明;b)核查智能合約需求文檔中接口交互和流程的說明;c)核查智能合約需求文檔中使用權限、時序邏輯的說明,并調用智能合約復現;d)核查智能合約需求文檔中的設計圖;e)核查智能合約需求文檔中的安全風險分析和應急措施;f)核查智能合約需求文檔中的處理或補救錯誤能力,并調用智能合約復現。6.1.1.2智能合約設計實際評估結果達到了5.1.1的相關要求則判定為符合,其他情況判定為不符合。6.1.2智能合約編程6.1.2.1智能合約編程評估方法如下:a)核查智能合約語言的類型、版本信息;b)核查智能合約所有公共成員變量與函數的引用對象是否有對外暴露的風險;c)核查智能合約所有條件動作和交易步驟的完備性;d)核查智能合約是否存在邏輯漏洞或邏輯錯誤;e)核查智能合約和函數的編寫風格,是否采用過時的語法或用法;f)核查智能合約在條件不符合時是否具有條件保護功能。6.1.2.2智能合約編程實際評估結果達到5.1.2的相關要求則判定為符合,其他情況判定為不符合。6.1.3智能合約語言6.1.3.1智能合約語言評估方法如下:a)核查智能合約語言支持的數據類型;8b)核查智能合約語言支持的計算類型;c)對于支持圖靈完備的語言,核查智能合約語言支持的控制結構;d)核查智能合約支持的數據訪問模型;e)核查智能合約的數據讀寫、遍歷以及查詢能力;f)核查智能合約的帶有業務屬性的簡單支付驗證的生成。6.1.3.2智能合約語言實際評估結果達到5.1.3的相關要求則判定為符合,其他情況判定為不符合。6.1.4.1智能合約調試的評估方法如下:a)核查智能合約的調試流程和調試方案;b)核查是否支持智能合約的單步調試能力,包括斷點設置,stepinto(單步跳入)、stepout(單步跳出)、stepover(單步跳過)及callstack(調用棧)查詢,斷點處變量查詢等能力;c)核查是否有文檔、工具等,對智能合約的業務邏輯、業務流程,以及代碼是否符合業務需求進行測試和評估;d)核查是否有文檔描述、代碼、工具等對智能合約進行靜態安全掃描、動態安全掃描;e)核查是否有文檔描述、代碼、工具等對智能合約進行形式化驗證;f)核查智能合約的運行結果和安全性。6.1.4.2智能合約調試實際評估結果達到5.1.4的相關要求則判定為符合,其他情況判定為不符合。6.2編譯部署6.2.1智能合約編譯6.2.1.1智能合約編譯的評估方法如下:a)核查系統使用的智能合約的編譯工具;b)核查智能合約在區塊鏈平臺上的編譯檢測;c)核查智能合約編譯工具名稱及版本信息,編譯工具依賴環境信息;d)核查編程語言的編譯器一致性,在智能合約源碼編譯成字節碼后,核查字節碼與源碼邏輯一致性;e)編譯完成后,核查智能合約接口描述文件和編譯結果文件后綴。6.2.1.2智能合約編譯實際評估結果達到5.2.1的相關要求則判定為符合,其他情況判定為不符合。6.2.2智能合約部署6.2.2.1智能合約部署的評估方法如下:a)智能合約部署后,分別在隨機的不同節點上查找部署的智能合約實例;b)比較部署前編譯的字節碼和部署后的字節碼;c)分別使用有部署權限和無部署權限的兩組用戶進行智能合約部署;d)智能合約部署完后,檢查部署操作的返回值。6.2.2.2智能合約部署實際評估結果達到5.2.2的相關要求則判定為符合,其他情況判定為不符合。6.3觸發執行6.3.1智能合約調用6.3.1.1.1智能合約調用基本要求的評估方法為:核查智能合約觸發類型,支持直接調用、智能合約間9調用、預言機調用和鏈上隨機數調用。6.3.1.1.2智能合約調用實際評估結果達到5.3.1.1的相關要求則判定為符合,其他情況判定為不符合。環境變量查詢等;b)核查接口名稱的標識性,能夠直接明確接口功能,檢查在直接調用接口時,能夠執行規定的智能合約調用流程;c)核查當接口名稱不存在時,應有明確的默認結構被調用,或者提供明確的錯誤信息供調用者修改錯誤;d)核查直接調用的接口參數錯誤(參數類型錯誤等),應有明確的錯誤參數轉換規則,或者明確錯誤信息供調用者修改錯誤;e)核查直接調用接口執行出現錯誤時,有明確的錯誤參數轉換規則,或者明確錯誤信息供調用者修改錯誤。6.3.1.2.2直接調用實際評估結果達到5.3.1.2的相關要求則判定為符合,其他情況判定為不符合。6.3.1.3智能合約間調用6.3.1.3.1智能合約間調用的評估方法如下:a)核查智能合約間調用的安全性規則,智能合約間調用是否符合安全性規則,明確調用上下文是本智能合約還是代理智能合約;b)核查智能合約間的調用參數校驗,避免調用的實際接口與預期不相符合;c)核查智能合約接口,智能合約接口是否符合最小暴露性原則、智能合約權限原則等。6.3.1.3.2智能合約間調用實際評估結果達到5.3.1.3的相關要求則判定為符合,其他情況判定為不符合。6.3.1.4.1預言機調用的評估方法如下:a)核查調用接口,預言機的調用接口名稱、輸入參數、返回數據是否符合應用程序接口規范;b)核查接口描述文件,采用預言機提供的結構化描述語言;c)核查接口協議,包含安全傳輸協議;d)核查源數據,保證源數據完整未被篡改;e)核查數據源的有效證明,數據由指定的數據源產生時,能夠提供數據源的有效證明;f)核查身份標識,不同的預言機節點具備唯一的身份標識;g)核查影響范圍,預言機提供的外部數據源的影響范圍僅限于智能合約范圍內,不應影響系統的整體運行。6.3.1.4.2預言機調用實際評估結果達到5.3.1.4的相關要求則判定為符合,其他情況判定為不符合。6.3.1.5.1鏈上隨機數調用的評估方法如下:a)在不同的區塊鏈節點中的相同區塊的相同交易中分別調用鏈上隨機數接口;b)在不同的區塊和相同區塊的不同交易中分別調用鏈上隨機數接口。6.3.1.5.2鏈上隨機數調用實際評估結果達到5.3.1.5的相關要求則判定為符合,其他情況判定為不符合。6.3.2智能合約執行6.3.2.1智能合約執行的評估方法如下:a)核查智能合約的可終止性原理,一般可采用解釋執行或JIT編譯到機器指令執行兩種方式;b)智能合約執行結果應具備事務一致性,若調用失敗,支持回滾到執行交易之前的狀態或者有明確的錯誤返回值;c)核查智能合約賬戶和智能合約內容,支持智能合約狀態作為智能合約賬戶的屬性保存在區塊鏈網絡上;d)核查該智能合約和鏈上智能合約的哈希值,在執行之前,兩者應保持一致;e)核查事件推送,在智能合約執行的過程中應將事件推送給已訂閱的客戶端;f)核查正確處理異常的能力,支持實時監測和狀態回滾。6.3.2.2智能合約執行實際評估結果達到5.3.2的相關要求則判定為符合,其他情況判定為不符合。6.3.3智能合約運行時外部交互6.3.3.1智能合約運行時外部交互的評估方法如下:a)核查外部用戶或應用與智能合約交互的形式,包括部署、升級、查詢、調用等;b)核查智能合約的外部交互功能,支持通過智能合約獲取外部數據,如預言機;c)核查智能合約的接口,智能合約對外提供準確的接口描述,同時對外部的輸入做嚴格檢查;d)核查智能合約與外部數據交互時的影響范圍,外部數據應只影響本智能合約的狀態。6.3.3.2智能合約運行時外部交互實際評估結果達到5.3.3的相關要求則判定為符合,其他情況判定為不符合。6.3.4智能合約執行環境6.3.4.1智能合約執行環境的評估方法如下:a)核查智能合約運行環境與外部的隔離,確保調用智能合約不會對區塊鏈狀態外的外部環境造成影響,也不會導致區塊鏈系統失敗;b)核查運行環境,運行環境應具備執行無二義性,能處理異常事件,當發生異常時,能夠對事件進行回滾;c)核查智能合約執行結果,保證在相同的輸入和相同的歷史狀態下,不同的節點執行相同的交易可獲得一致的結果;d)核查可信性,應具備可信性;e)不泄漏信息,具有可信追溯的特性;f)核查智能合約調用出現錯誤時,應提供智能合約回退功能,恢復該次調用對區塊鏈狀態造成的影響。6.3.4.2智能合約執行環境實際評估結果達到5.3.4的相關要求則判定為符合,其他情況判定為不符合。6.3.5智能合約事件6.3.5.1.1智能合約事件約束的評估方法如下:a)核查智能合約事件的監聽,業務方通過監聽應可得到事件名稱、事件參數、區塊高度等詳細信息;b)核查智能合約事件類型,包含正常業務事件、異常業務事件,且正常業務事件、異常業務事件應通過測評;c)核查智能合約事件包含事件名稱和事件參數;d)核查事件名稱,事件名稱是智能合約內事件的唯一標識,簡短概要,體現事件的業務類型。6.3.5.1.2智能合約事件約束實際評估結果達到5.3.5.1的相關要求則判定為符合,其他情況判定為不符合。6.3.5.2.1正常業務事件的評估方法如下:a)核查正常業務事件記錄了引起業務狀態變更的相關方,業務的類型、內容;b)核查事件名稱,使用能代表業務的名字,如Transfer;c)核查事件參數,事件參數為記錄的業務數據,標識業務的執行結果。6.3.5.2.2正常業務事件實際評估結果達到5.3.5.2的相關要求則判定為符合,其他情況判定為不符合。6.3.5.3.1異常業務事件的評估方法如下:a)核查異常業務事件記錄引起異常業務事件的發起方,異常的原因;b)核查異常業務事件記錄引起異常業務事件的智能合約接口及傳參內容;c)核查事件名稱,使用能代表業務異常的類型,如Transfer_Error;d)核查事件參數,包含錯誤異常類型和錯誤者異常的原因,異常類型宜使用ENUM。6.3.5.3.2異常業務事件實際評估結果達到5.3.5.3的相關要求則判定為符合,其他情況判定為不符合。6.3.5.4.1事件接口結構的評估方法如下:a)核查事件接口包含唯一的聲明事件接口關鍵字;b)核查事件接口包含唯一的調用事件接口關鍵字;c)核查事件接口包含應將智能合約執行過程中的事件上鏈,打包進當前區塊,并回調給業務調用方。6.3.5.4.2事件接口結構實際評估結果達到5.3.5.4的相關要求則判定為符合,其他情況判定為不符合。6.4維護管理6.4.1智能合約版本維護6.4.1.1智能合約版本維護的評估方法如下:a)核查智能合約發生修改之后的版本,是否能夠在源代碼中通過區塊鏈平臺指定方式定義版b)核查智能合約發生修改之后的版本,是否能夠在配置文件中定義版本號,該配置文件是否能夠與智能合約代碼一同部署;c)核查智能合約在部署或升級時,是否能夠在部署或升級操作時定義版本號。6.4.1.2智能合約版本維護實際評估結果達到5.4.1的相關要求則判定為符合,其他情況判定為不符合。6.4.2智能合約升級6.4.2.1智能合約升級的評估方法如下:a)核查智能合約的升級,是否能夠在線升級;b)核查智能合約的升級,是否能夠在區塊鏈平臺升級后,仍能穩定運行;c)核查智能合約的升級,是否能夠將升級操作記錄在區塊中,并符合區塊鏈中交易要求、遵從交易執行的流程;d)核查智能合約的升級,是否能夠保留歷史版本;e)核查智能合約的升級,是否支持智能合約升級失敗時,回滾到原來的智能合約;f)核查智能合約的升級,是否支持智能合約具備版本控制功能,在智能合約升級到新版本后,也兼容舊版本智能合約。6.4.2.2智能合約升級實際評估結果達到5.4.2的相關要求則判定為符合,其他情況判定為不符合。6.4.3智能合約凍結和解凍6.4.3.1智能合約凍結和解凍的評估方法如下:a)核查智能合約的凍結,是否能夠在發現智能合約存在漏洞時,可以停止智能合約調用功能;b)核查智能合約的解凍,是否能夠在智能合約的漏洞修復后,可以恢復智能合約調用功能;c)核查智能合約權限訪問控制,是否能夠在調用智能合約凍結和解凍功能時,進行權限訪問控制。6.4.3.2智能合約凍結和解凍實際評估結果達到5.4.3的相關要求則判定為符合,其他情況判定為不符合。6.4.4.1智能合約廢止的評估方法如下:a)核查智能合約的廢止,是否能夠通過交易的方式實現智能合約的廢止功能,且智能合約廢止后數據仍然存在,保存被終止版本的智能合約代碼,并且不能再次被啟動執行;b)核查智能合約的廢止,是否能夠在調用智能合約廢止時,有權限訪問控制,只有管理員或者響應權限用戶才有權利廢止智能合約;c)核查智能合約的廢止,是否能夠在可被廢止的智能合約部署時設置顯式聲明;d)核查智能合約的廢止,是否能夠有相應的處置措施,保障智能合約參與用戶的權利與資產安全。6.4.4.2智能合約廢止實際評估結果達到5.4.4的相關要求則判定為符合,其他情況判定為不符合。(資料性)常見智能合約漏洞常見智能合約漏洞如表A.1所示。表A.1常見智能合約漏洞漏洞名簡要說明防范措施整型溢出整型的加減導致數值溢出等問題使用相應的safeMath包來完成整型的計算重入漏洞攻擊者會誘導業務智能合約調用惡意智能合約的回調函數,回調函數再次調用業務智能合約的各類方法造成循環調用,將業務智能合約的通證全部轉移或造成其他損失a)對可能調用惡意智能合約的方法加鎖,禁止循環調用;b)evm類智能合約使用transfer方法,減少單次調用的gas費用訪問控制缺陷各類智能合約對于條件判斷的關鍵詞不夠清晰導致條件判斷執行了相反的邏輯。如require所需條件必須為true,而if類權限判斷所需條件一般為falsea)提高代碼可讀性,減少誤判可能性;b)增加代碼評審及智能合約審計特權功能暴露如智能合約銷毀方法、智能合約所有者設置方法、智能合約核心參數設置方法等敏感操作,未設置權限增加代碼評審及智能合約審計拒絕服務攻擊者控制智能合約權限,使智能合約無法致智能合約狀態無法更新;或攻擊者不斷給智能合約添加狀態變量導致某些函數因gas費超量而無法調用,導致智能合約狀態無法更新a)謹慎使用外部調用進入新狀態的業務b)完善代碼對錯誤場景的處理短地址攻擊現有交易編碼方式一般為:4字節函數編碼+32字節地址+32字節轉賬數據組成或類似方式,如碰撞出地址后邊包含0的地址,如0xaabbcc00,在發起轉賬交易時,如果傳入地址為0xaabbcc,數量為1,實際交易執行時會將后續補齊,最終交易結果為給0xaabbcc00轉入256個代幣需要對地址長度進行校驗交易指向者漏洞(tx.origin漏洞)在智能合約調用的權限判斷時,謹慎使用交易發起者、上層調用者等角色參數。tx.origin指向最初

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論