Blockchain
關於契約殺人和法醫調查
假設我創建了一份契約,並且使用它,我和其他人進行了許多交易,這意味著毫無疑問地證明了閱讀契約。
在某個時刻,有人殺死了合約,所有的程式碼都被取消了。
如果程式碼已被刪除,我如何證明過去進行的交易的含義?有沒有什麼實用的方法可以回到舊區塊以提取當時使用的智能合約?
提取程式碼 eth.getcode 的方法採用此處記錄的可選塊高度參數。函式簽名是:
web3.eth.getCode(addressHexString [, defaultBlock] [, callback])
,where
defaultBlock
(也許“塊”會是一個更好的名字?)可以是任何塊號或一些特殊值的字元串,例如"earliest"
,"latest"
或"pending"
. 您可以在此處查看文件。這意味著您將能夠提取合約 N 個塊的程式碼。但是您應該注意,您需要執行一個儲存和索引所有歷史資訊的區塊鏈節點,以便允許您在任意塊高度進行呼叫。在 Parity 錢包中,此設置稱為
--pruning archive
,參見。https://wiki.parity.io/Getting-Synced#database-pruning。您還應該注意,此函式呼叫將返回合約的二進制程式碼,而不是原始碼。但是,如果您通過其他來源接收原始碼,則可以通過使用此答案中描述
getcode
的選項編譯原始碼來驗證返回的二進制程式碼是否與原始碼匹配:--bin-runtime
區塊鏈上發生的任何事情都不會被刪除:)