Solidity

將函式的字節碼映射到整個字節碼中的函式

  • December 22, 2019

是否可以將函式字節碼與整個合約字節碼區分開來?例如,當我從合約地址中提取字節碼時,我會得到如下資訊:

0x6060604052361561003d576000357c01000000000000000000000000000000000000000000000000000000009004806347966bc21461004e5761003d565b61004c5b61004961005d565b5b565b005b61005b600480505061005d565b005b739e0b9ddba97dd4f7addab0b5f67036...

函式字節碼表示在此輸出中是事實嗎?例如,函式是否在此字節碼中(以灰色顯示):

0x6060604052361561003d576000357c0100000000000000000000000000000000000000000000000000000000900 4806347966bc21461004e5761003d565b61004c5b61004961005d565b5b565b005b61005b600480505061005d565b005b739e0b9ddba97dd4f7addab0b5f67036?

編譯器不必將函式體作為結果範圍放入合約字節碼中。實際上,優化編譯器可以決定內聯只在少數地方使用的小函式,即將它們的字節碼複製到函式實際使用的每個地方。

但是,我相信,目前版本的 Solidity 並沒有這樣做。函式的主體通常以操作碼 ( ) 開頭,以操作碼JUMPDEST( 0x5b) 結尾。JUMP``0x56

您可以嘗試使用--asm選項編譯您的智能合約並查看生成的程序集文件,以準確找出您的函式被翻譯成的字節碼。

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