Contract-Development
呼叫者的數據與字節碼有什麼關係?
我知道智能合約被部署為字節碼。
當我們從應用程序呼叫一個函式時,我們在 ABI 的幫助下使用編碼並獲得一些字節。假設 220 字節。
這些是我們在
data
交易屬性中發送給智能合約的字節。所以,我們的字節已經進入了智能合約。
問題 1)是 EVM 會獲取交易的數據(以字節為單位),然後查看字節碼,然後弄清楚交易的數據與字節碼的哪個部分相關,然後弄清楚嗎?
部署智能合約後,其字節碼將保存在鏈上。要執行合約,您需要以智能合約地址作為收件人發送交易。附加數據可以作為呼叫數據傳遞給合約,呼叫數據可以想像為合約執行的參數。
當節點驗證交易時,它會注意到交易的接收者是智能合約。為了執行合約,它設置了一個 EVM 實例,該實例初始化:
然後它在第一條指令處開始執行字節碼。字節碼可以通過指令訪問上述所有內容:
- 儲存:
SLOAD
,SSTORE
- 堆棧:
PUSH
,POP
, …- 記憶體:
MLOAD
,MSTORE
- 呼叫數據:
CALLDATALOAD
,,CALLDATASIZE``CALLDATACOPY
- 全域變數:
ORIGIN
,CALLER
, …有關更多資訊,請參閱ethervm.io