Opcode

為什麼在開發智能合約時返回String需要這麼多操作?

  • December 12, 2021

我找到了一份智能合約。地址是'0x2fabe69843e9a74a35b89145cb52e5568986c7a1’。

我真的很困惑,為什麼在創建這個智能合約時需要超過 3000 行操作碼?就像某些操作“平衡”一樣,它沒有在原始碼中顯示。

如何根據源碼分析 Opcode 源碼如下:

pragma solidity ^0.4.11;

contract IMG{


   function IMG(){

   }

   function read() returns(string){

       return "FF D8 FF E0 00 10 4A 46 49 46 00 01 01 00 00 01 00 01 00 00 FF DB 00 84 00 28 28 28 28 2B 28 2D 32 32 2D 3F 44 3C 44 3F 5D 55 4E 4E 55 5D 8C 64 6C 64 6C 64 8C D5 85 9B 85 85 9B 85 D5 BC E4 B9 AD B9 E4 BC FF FF EB EB FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 01 28 28 28 28 2B 28 2D 32 32 2D 3F 44 3C 44 3F 5D 55 4E 4E 55 5D 8C 64 6C 64 6C 64 8C D5 85 9B 85 85 9B 85 D5 BC E4 B9 AD B9 E4 BC FF FF EB EB FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF C0 00 11 08 00 80 00 80 03 01 22 00 02 11 01 03 11 01 FF C4 00 6C 00 00 02 03 01 00 00 00 00 00 00 00 00 00 00 00 00 03 04 00 01 02 05 10 00 02 02 01 03 04 01 04 03 01 00 00 00 00 00 00 00 01 02 11 03 12 21 31 04 13 41 51 61 14 22 23 42 32 62 71 B1 01 01 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 01 02 03 11 01 01 01 01 01 01 01 00 00 00 00 00 00 00 00 00 00 01 11 21 02 31 51 FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00 7C 85 30 11 CC 9F 27 07 53 04 29 3B 2C 08 51 08 04 21 08 04 21 0A 02 C8 42 80 B2 88 40 21 08 50 00 EE 48 07 EE C7 B4 21 7C D0 AA 68 D6 C5 48 C9 AF F0 32 98 BA FF 00 4D 53 5E 51 03 1A D1 76 80 46 B8 34 F6 08 2D A2 5A 17 73 33 DC 18 1A 2C 5A 39 53 B2 D6 52 E2 19 A2 52 00 B2 7C 11 E5 A7 43 03 1A 51 7A 50 A7 D4 04 8E 6B 18 74 7D 31 26 98 83 D7 23 2E 6D 72 C7 0E B3 DD 89 52 94 65 16 81 F6 4A ED 31 C5 61 3F 46 B6 F4 8A 94 5C 4C D8 56 CA 77 5B 92 0A 4C D6 8F 0D 84 44 B6 D4 56 26 E5 BF 80 D3 8B 78 DA 46 63 50 82 44 18 8B 50 96 44 09 34 D2 51 37 CF 92 94 6A CA 37 07 6A D7 00 BB 92 D7 A4 62 15 54 0E 10 FC ED BE 06 98 AC 97 15 60 D5 3A A7 4F 90 B9 93 7B 24 E8 03 8B F0 20 61 64 69 03 72 DC CA BA A3 51 AF 20 3A 41 3E EC 89 DD 90 C3 4C E4 DE 0C 4A D4 6D B0 DD D6 D5 01 58 96 57 BF 02 70 17 BF 05 01 07 97 34 DE C3 F9 FA 78 C3 0D C2 22 53 7A 31 AA 2C C4 B5 B5 9F 3E 2A D6 9D 0F B8 AC 98 B5 2E 1A 38 FA F2 CD 69 B6 D1 D6 C1 3D 18 61 01 EA 48 79 B6 A9 41 AA 33 38 B7 B2 18 BF 26 7B 91 4C C6 D6 B1 23 8D C6 22 73 EA A3 09 34 B7 61 FA 9C ED C3 44 0E 5C 23 A6 DB 46 E4 D6 6D B0 67 D4 E4 93 FE 21 F1 F5 38 E5 B3 54 C5 5F 53 36 AA A2 65 AD 51 4D 72 6A F9 8C CA E8 4D 24 DB 45 25 68 1C BA 6C CA 09 A6 0E 12 9C 5D 48 CB 4E 96 94 56 88 97 A9 13 52 32 A5 F2 AB D9 18 57 1D 86 52 5B B6 2D 91 A9 3E 4A 0B 0C B3 5E 42 D6 39 FF 00 2C 11 15 8A 7A 92 1B 8C B7 5E 59 29 8D 68 BF D5 46 3E 12 10 73 8F 71 AD 47 5A 3F 27 37 AB E9 E1 1F CB 01 0D 62 79 12 5B CC 98 57 71 8B E1 C5 DF 92 4D 9D 8C 38 31 61 5F 69 AB 38 6E 52 D3 C4 D4 D4 90 69 C3 0E 48 FD F0 09 92 5A 39 4E 80 AC 8B C7 06 3A BF 4B 7D 27 4B EE 61 A0 B0 62 A7 1C 66 72 71 A8 0B 6D EE 6F B5 30 79 75 36 2F 26 A4 B7 2A DB 75 46 96 36 B6 03 5A 24 4D 12 F6 34 53 E0 9A 61 59 CA 55 B3 07 0C 6D BB 61 92 B4 EC D2 D8 2A A1 8D 26 34 B4 C7 60 29 A2 F5 7C 90 30 E7 4B 81 1C F9 B6 68 C6 5C AD 6C 85 9E 39 4B 79 1A 91 04 E9 B2 51 D3 8E 4B F1 67 1B B7 28 F0 12 19 DA 74 CD 59 A8 EB 6B 8F 87 40 67 04 FF 00 AF FC 06 B2 36 4B 66 1A 54 A2 E9 AB 14 B7 17 BA 63 8D 58 09 5D D3 42 01 AC CB D0 7C 6F DB 16 9E 3F 46 61 91 C5 9A 47 4F 51 7A 91 44 D8 C3 58 06 4D 9E A4 C1 77 02 E4 DC 5B B3 E9 96 58 65 30 A5 65 49 FC 80 ED 4D 71 23 32 86 5F 65 E2 77 F0 C2 A6 C2 3A 13 83 C9 17 BA 36 F2 BB E1 8C 07 69 0B CE 09 98 96 67 E9 99 EE 4B D3 35 89 AD A9 4E 21 63 95 BF 1B 80 52 6F F5 61 62 FF 00 AB 00 FA AC A7 2F 0C CD FC 03 7A BD 11 56 EF C0 27 BF 3C 9A 4D F9 4C A9 4B C5 15 1D 32 99 08 72 74 09 99 A3 6C C8 54 A2 9A 34 5D 00 3A 29 A3 74 53 03 14 BD 15 48 D9 28 0C D2 2D 23 5A 4B A0 2A 8A 68 D1 90 2A 8A A3 44 03 FF D9";
   }

該合約程式碼中的大部分字節都屬於.data儲存常量字元串的部分(由 返回read)。

您可以使用http://remix.ethereum.org編譯合約、查看程序集並逐步跟踪交易。

長十六進製字元串不是 OpCode。從前幾個字節開始,“FF D8 FF E0”,這是JPEG文件的簽名。合約本質上儲存圖片的原始字節。

如果數據有效,可以將其保存為JPEG文件來恢復圖片。但是,在信任和查看數據之前需要小心。另請參見此處

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