Solidity
將函式的字節碼映射到整個字節碼中的函式
是否可以將函式字節碼與整個合約字節碼區分開來?例如,當我從合約地址中提取字節碼時,我會得到如下資訊:
0x6060604052361561003d576000357c01000000000000000000000000000000000000000000000000000000009004806347966bc21461004e5761003d565b61004c5b61004961005d565b5b565b005b61005b600480505061005d565b005b739e0b9ddba97dd4f7addab0b5f67036...
函式字節碼表示在此輸出中是事實嗎?例如,函式是否在此字節碼中(以灰色顯示):
0x6060604052361561003d576000357c0100000000000000000000000000000000000000000000000000000000900
4806347966bc21461004e5761003d565b6100
4c5b61004961005d565b5b565b005b61005b600480505061005d565b005b739e0b9ddba97dd4f7addab0b5f67036?
編譯器不必將函式體作為結果範圍放入合約字節碼中。實際上,優化編譯器可以決定內聯只在少數地方使用的小函式,即將它們的字節碼複製到函式實際使用的每個地方。
但是,我相信,目前版本的 Solidity 並沒有這樣做。函式的主體通常以操作碼 ( ) 開頭,以操作碼
JUMPDEST
(0x5b
) 結尾。JUMP``0x56
您可以嘗試使用
--asm
選項編譯您的智能合約並查看生成的程序集文件,以準確找出您的函式被翻譯成的字節碼。