Contract-Development

呼叫者的數據與字節碼有什麼關係?

  • October 1, 2020

我知道智能合約被部署為字節碼。

當我們從應用程序呼叫一個函式時,我們在 ABI 的幫助下使用編碼並獲得一些字節。假設 220 字節。

這些是我們在data交易屬性中發送給智能合約的字節。

所以,我們的字節已經進入了智能合約。

問題 1)是 EVM 會獲取交易的數據(以字節為單位),然後查看字節碼,然後弄清楚交易的數據與字節碼的哪個部分相關,然後弄清楚嗎?

部署智能合約後,其字節碼將保存在鏈上。要執行合約,您需要以智能合約地址作為收件人發送交易。附加數據可以作為呼叫數據傳遞給合約,呼叫數據可以想像為合約執行的參數。

當節點驗證交易時,它會注意到交易的接收者是智能合約。為了執行合約,它設置了一個 EVM 實例,該實例初始化:

  • 合約的字節碼
  • 儲存(永久儲存)
  • 記憶體(類似於
  • 通話數據
  • 全域變數,如msg.sender,now等。

然後它在第一條指令處開始執行字節碼。字節碼可以通過指令訪問上述所有內容:

  • 儲存:SLOAD,SSTORE
  • 堆棧:PUSH, POP, …
  • 記憶體:MLOADMSTORE
  • 呼叫數據:CALLDATALOAD,,CALLDATASIZE``CALLDATACOPY
  • 全域變數:ORIGIN, CALLER, …

有關更多資訊,請參閱ethervm.io

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