Contract-Verification

部署的智能合約是否經過驗證?

  • August 25, 2021

在乙太坊上,我知道可以創建合約並將其部署到區塊鏈上。但我不清楚這個合約在部署到鏈上之前是如何被礦工驗證的。例如,它可以是此處所示的投票合約,也可以是出於我的目的的其他合約。

此外,是否有任何教程用於對礦工進行程式以驗證特定行為,例如部署的合約中是否存在無限循環。

部署合約時,礦工只會執行其建構子。如果建構子正確完成,合約將被添加到乙太坊的世界狀態中。

沒有其他驗證礦工只執行一系列 EVM 操作碼,如果操作碼序列與原始碼匹配,他們不會進行驗證。

一些區塊瀏覽器提供與部署的操作碼匹配的“已驗證”源。但這是一項額外的服務,你必須相信區塊瀏覽器的聲譽。

部署智能合約時,其字節碼從頭開始執行。這實際上執行了智能合約的建構子,並且在執行結束時建構子通常將智能合約其餘部分的字節碼載入到記憶體中,即從開頭剝離建構子程式碼的智能合約字節碼,並返回偏移量和長度載入的字節碼。

這個建構子的執行可以被視為字節碼的“驗證”,因為如果字節碼試圖做一些非法的事情,例如執行 EVM 不知道的操作碼,或者跳轉到 JUMPDEST 以外的指令等,EVM 將恢復事務。儘管在此階段僅“驗證”了建構子程式碼。

當部署的智能合約被交易呼叫時,EVM 執行它的字節碼,因為它是建構子返回的,這個執行也可以被當作“驗證”。但是,只有跨執行路徑的字節碼部分被“驗證”。

換句話說,礦工只“驗證”他執行的那些字節碼部分,並且只在他執行它們時。整個智能合約永遠不會被驗證。此外,字節碼可能存在無法訪問的部分,並且該部分永遠不會被驗證。

引用自:https://ethereum.stackexchange.com/questions/42236