{-# LANGUAGE OverloadedStrings, FlexibleContexts #-} module Ethereum.AnalyzerSpec ( spec ) where import Protolude hiding (show) import Ckev.In.Text import Data.Text as DT import Ethereum.Analyzer.EVM import Ethereum.Analyzer.TestData.Basic import Test.Hspec spec :: Spec spec = describe "disasm" $ do it "works for hexstring1" $ do let disasmd1 = showT $ showOps $ disasm hexstring1 DT.take 60 disasmd1 `shouldBe` "[\"0: PUSH [96]\",\"2: PUSH [64]\",\"4: MSTORE\",\"5: PUSH [2]\",\"7:" DT.takeEnd 60 disasmd1 `shouldBe` "]\",\"6989: JUMP\",\"6990: JUMPDEST\",\"6991: SWAP1\",\"6992: JUMP\"]" it "works for hexstring2" $ do let disasmd2 = showT $ showOps $ disasm hexstring2 disasmd2 `shouldBe` DT.concat ["[\"0: PUSH [96]\",", "\"2: PUSH [64]\",", "\"4: MSTORE\",", "\"5: CALLDATASIZE\",", "\"6: ISZERO\",", "\"7: PUSH [39]\",", "\"9: JUMPI\",", "\"10: PUSH [224]\",", "\"12: PUSH [2]\",", "\"14: EXP\",", "\"15: PUSH [0]\",", "\"17: CALLDATALOAD\",", "\"18: DIV\",", "\"19: PUSH [65,192,225,181]\",", "\"24: DUP2\",", "\"25: EQ\",", "\"26: PUSH [110]\",", "\"28: JUMPI\",", "\"29: DUP1\",", "\"30: PUSH [229,34,83,129]\",", "\"35: EQ\",", "\"36: PUSH [150]\",", "\"38: JUMPI\",", "\"39: JUMPDEST\",", "\"40: PUSH [213]\",", "\"42: PUSH [0]\",", "\"44: CALLVALUE\",", "\"45: GT\",", "\"46: ISZERO\",", "\"47: PUSH [108]\",", "\"49: JUMPI\",", "\"50: CALLVALUE\",", "\"51: PUSH [96]\",", "\"53: SWAP1\",", "\"54: DUP2\",", "\"55: MSTORE\",", "\"56: PUSH [88]\",", "\"58: SWAP1\",", "\"59: PUSH [1]\",", "\"61: PUSH [160]\",", "\"63: PUSH [2]\",", "\"65: EXP\",", "\"66: SUB\",", "\"67: CALLER\",", "\"68: AND\",", "\"69: SWAP1\",", "\"70: PUSH [144,137,8,9,198,84,241,29,110,114,162,143,166,1,73,119,10,13,17,236,108,146,49,157,108,235,43,176,164,234,26,21]\",", "\"103: SWAP1\",", "\"104: PUSH [32]\",", "\"106: SWAP1\",", "\"107: LOG3\",", "\"108: JUMPDEST\",", "\"109: JUMP\",", "\"110: JUMPDEST\",", "\"111: PUSH [213]\",", "\"113: PUSH [0]\",", "\"115: SLOAD\",", "\"116: PUSH [1]\",", "\"118: PUSH [160]\",", "\"120: PUSH [2]\",", "\"122: EXP\",", "\"123: SUB\",", "\"124: SWAP1\",", "\"125: DUP2\",", "\"126: AND\",", "\"127: CALLER\",", "\"128: SWAP2\",", "\"129: SWAP1\",", "\"130: SWAP2\",", "\"131: AND\",", "\"132: EQ\",", "\"133: ISZERO\",", "\"134: PUSH [108]\",", "\"136: JUMPI\",", "\"137: PUSH [0]\",", "\"139: SLOAD\",", "\"140: PUSH [1]\",", "\"142: PUSH [160]\",", "\"144: PUSH [2]\",", "\"146: EXP\",", "\"147: SUB\",", "\"148: AND\",", "\"149: SUICIDE\",", "\"150: JUMPDEST\",", "\"151: PUSH [213]\",", "\"153: PUSH [0]\",", "\"155: SLOAD\",", "\"156: PUSH [1]\",", "\"158: PUSH [160]\",", "\"160: PUSH [2]\",", "\"162: EXP\",", "\"163: SUB\",", "\"164: SWAP1\",", "\"165: DUP2\",", "\"166: AND\",", "\"167: CALLER\",", "\"168: SWAP2\",", "\"169: SWAP1\",", "\"170: SWAP2\",", "\"171: AND\",", "\"172: EQ\",", "\"173: ISZERO\",", "\"174: PUSH [108]\",", "\"176: JUMPI\",", "\"177: PUSH [0]\",", "\"179: DUP1\",", "\"180: SLOAD\",", "\"181: PUSH [1]\",", "\"183: PUSH [160]\",", "\"185: PUSH [2]\",", "\"187: EXP\",", "\"188: SUB\",", "\"189: SWAP1\",", "\"190: DUP2\",", "\"191: AND\",", "\"192: SWAP2\",", "\"193: SWAP1\",", "\"194: ADDRESS\",", "\"195: AND\",", "\"196: BALANCE\",", "\"197: PUSH [96]\",", "\"199: DUP3\",", "\"200: DUP2\",", "\"201: DUP2\",", "\"202: DUP2\",", "\"203: DUP6\",", "\"204: DUP9\",", "\"205: DUP4\",", "\"206: CALL\",", "\"207: POP\",", "\"208: POP\",", "\"209: POP\",", "\"210: POP\",", "\"211: POP\",", "\"212: JUMP\",", "\"213: JUMPDEST\",", "\"214: STOP\"]"]