@@ -11,16 +11,15 @@ import Control.Monad.Random.Strict (MonadRandom, RandT, evalRandT)
1111import Control.Monad.Reader (MonadReader , asks , liftIO , ask )
1212import Control.Monad.State.Strict
1313 (MonadState (.. ), StateT (.. ), gets , MonadIO , modify' )
14- import Control.Monad.ST (RealWorld )
1514import Control.Monad.Trans (lift )
1615import Data.Binary.Get (runGetOrFail )
1716import Data.ByteString.Lazy qualified as LBS
18- import Data.IORef (readIORef , atomicModifyIORef' , writeIORef )
1917import Data.Foldable (foldlM )
18+ import Data.IORef (readIORef , atomicModifyIORef' , writeIORef )
2019import Data.List qualified as List
2120import Data.List.NonEmpty qualified as NEList
22- import Data.Map qualified as Map
2321import Data.Map (Map , (\\) )
22+ import Data.Map qualified as Map
2423import Data.Maybe (isJust , mapMaybe , fromJust )
2524import Data.Set (Set )
2625import Data.Set qualified as Set
@@ -32,8 +31,8 @@ import System.Random (mkStdGen)
3231import EVM (cheatCode )
3332import EVM.ABI (getAbi , AbiType (AbiAddressType , AbiTupleType ), AbiValue (AbiAddress , AbiTuple ), abiValueType )
3433import EVM.Dapp (DappInfo (.. ))
35- import EVM.Types hiding (Env , Frame (state ), Gas )
3634import EVM.Solidity (SolcContract (.. ), Method (.. ))
35+ import EVM.Types hiding (Env , Frame (state ), Gas )
3736
3837import Echidna.ABI
3938import Echidna.Events (extractEventValues )
@@ -42,15 +41,15 @@ import Echidna.Mutator.Corpus
4241import Echidna.Shrink (shrinkTest )
4342import Echidna.Solidity (chooseContract )
4443import Echidna.SymExec.Common (extractTxs , extractErrors )
45- import Echidna.SymExec.Symbolic (forceAddr )
4644import Echidna.SymExec.Exploration (exploreContract , getTargetMethodFromTx , getRandomTargetMethod )
45+ import Echidna.SymExec.Symbolic (forceAddr )
4746import Echidna.SymExec.Verification (verifyMethod , isSuitableToVerifyMethod )
4847import Echidna.Test
4948import Echidna.Transaction
5049import Echidna.Types.Campaign
50+ import Echidna.Types.Config
5151import Echidna.Types.Corpus (Corpus , corpusSize )
5252import Echidna.Types.Coverage (coverageStats )
53- import Echidna.Types.Config
5453import Echidna.Types.Random (rElem )
5554import Echidna.Types.Signature (FunctionName )
5655import Echidna.Types.Test
@@ -73,7 +72,7 @@ isSuccessful =
7372-- contain minimized corpus without sequences that didn't increase the coverage.
7473replayCorpus
7574 :: (MonadIO m , MonadThrow m , MonadRandom m , MonadReader Env m , MonadState WorkerState m )
76- => VM Concrete RealWorld -- ^ VM to start replaying from
75+ => VM Concrete -- ^ VM to start replaying from
7776 -> [(FilePath , [Tx ])] -- ^ corpus to replay
7877 -> m ()
7978replayCorpus vm txSeqs =
@@ -93,7 +92,7 @@ runWorker
9392 => WorkerType
9493 -> StateT WorkerState m ()
9594 -- ^ Callback to run after each state update (for instrumentation)
96- -> VM Concrete RealWorld -- ^ Initial VM state
95+ -> VM Concrete -- ^ Initial VM state
9796 -> GenDict -- ^ Generation dictionary
9897 -> Int -- ^ Worker id starting from 0
9998 -> [(FilePath , [Tx ])]
@@ -110,7 +109,7 @@ runSymWorker
110109 :: (MonadIO m , MonadThrow m , MonadReader Env m )
111110 => StateT WorkerState m ()
112111 -- ^ Callback to run after each state update (for instrumentation)
113- -> VM Concrete RealWorld -- ^ Initial VM state
112+ -> VM Concrete -- ^ Initial VM state
114113 -> GenDict -- ^ Generation dictionary
115114 -> Int -- ^ Worker id starting from 0
116115 -> [(FilePath , [Tx ])]
@@ -324,7 +323,7 @@ runFuzzWorker
324323 :: (MonadIO m , MonadThrow m , MonadReader Env m )
325324 => StateT WorkerState m ()
326325 -- ^ Callback to run after each state update (for instrumentation)
327- -> VM Concrete RealWorld -- ^ Initial VM state
326+ -> VM Concrete -- ^ Initial VM state
328327 -> GenDict -- ^ Generation dictionary
329328 -> Int -- ^ Worker id starting from 0
330329 -> [(FilePath , [Tx ])]
@@ -454,9 +453,9 @@ randseq deployedContracts = do
454453-- Returns resulting VM, as well as whether any new coverage was found.
455454callseq
456455 :: (MonadIO m , MonadThrow m , MonadRandom m , MonadReader Env m , MonadState WorkerState m )
457- => VM Concrete RealWorld
456+ => VM Concrete
458457 -> [Tx ]
459- -> m (VM Concrete RealWorld , Bool )
458+ -> m (VM Concrete , Bool )
460459callseq vm txSeq = do
461460 env <- ask
462461 -- First, we figure out whether we need to execute with or without coverage
@@ -524,7 +523,7 @@ callseq vm txSeq = do
524523 -- know the return type for each function called. If yes, try to parse the
525524 -- return value as a value of that type. Returns a 'GenDict' style Map.
526525 returnValues
527- :: [(Tx , VMResult Concrete RealWorld )]
526+ :: [(Tx , VMResult Concrete )]
528527 -> (FunctionName -> Maybe AbiType )
529528 -> Map AbiType (Set AbiValue )
530529 returnValues txResults returnTypeOf =
@@ -555,7 +554,7 @@ callseq vm txSeq = do
555554 getTupleVector _ = error " Not a tuple!"
556555
557556 -- | Add transactions to the corpus, discarding reverted ones
558- addToCorpus :: Int -> [(Tx , VMResult Concrete RealWorld )] -> Corpus -> Corpus
557+ addToCorpus :: Int -> [(Tx , VMResult Concrete )] -> Corpus -> Corpus
559558 addToCorpus n res corpus =
560559 if null rtxs then corpus else Set. insert (n, rtxs) corpus
561560 where rtxs = fst <$> res
@@ -564,8 +563,8 @@ callseq vm txSeq = do
564563-- executed, saving the transaction if it finds new coverage.
565564execTxOptC
566565 :: (MonadIO m , MonadReader Env m , MonadState WorkerState m , MonadThrow m )
567- => VM Concrete RealWorld -> Tx
568- -> m (VMResult Concrete RealWorld , VM Concrete RealWorld )
566+ => VM Concrete -> Tx
567+ -> m (VMResult Concrete , VM Concrete )
569568execTxOptC vm tx = do
570569 ((res, grew), vm') <- runStateT (execTxWithCov tx) vm
571570 when grew $ do
@@ -581,10 +580,10 @@ execTxOptC vm tx = do
581580-- of transactions, constantly checking if we've solved any tests.
582581evalSeq
583582 :: (MonadIO m , MonadThrow m , MonadRandom m , MonadReader Env m , MonadState WorkerState m )
584- => VM Concrete RealWorld -- ^ Initial VM
585- -> (VM Concrete RealWorld -> Tx -> m (result , VM Concrete RealWorld ))
583+ => VM Concrete -- ^ Initial VM
584+ -> (VM Concrete -> Tx -> m (result , VM Concrete ))
586585 -> [Tx ]
587- -> m ([(Tx , result )], VM Concrete RealWorld )
586+ -> m ([(Tx , result )], VM Concrete )
588587evalSeq vm0 execFunc = go vm0 [] where
589588 go vm executedSoFar toExecute = do
590589 -- NOTE: we do reverse here because we build up this list by prepending,
@@ -627,7 +626,7 @@ findFailedTests = do
627626-- | Update an open test after checking if it is falsified by the 'reproducer'
628627updateOpenTest
629628 :: (MonadIO m , MonadThrow m , MonadRandom m , MonadReader Env m , MonadState WorkerState m )
630- => VM Concrete RealWorld -- ^ VM after applying potential reproducer
629+ => VM Concrete -- ^ VM after applying potential reproducer
631630 -> [Tx ] -- ^ potential reproducer
632631 -> EchidnaTest
633632 -> m (Maybe EchidnaTest )
0 commit comments