@@ -106,17 +106,21 @@ import Network.HTTP.Client qualified as HTTP
106106import P2P.TaskQueue (Priority (.. ))
107107import Pact.Core.ChainData qualified as Pact
108108import Pact.Core.Command.Types qualified as Pact
109+ import Pact.Core.Command.RPC qualified as Pact
109110import Pact.Core.Errors qualified as Pact
110111import Pact.Core.Evaluate qualified as Pact
111112import Pact.Core.Gas qualified as Pact
112113import Pact.Core.Hash qualified as Pact
114+ import Pact.Core.Names qualified as Pact
113115import Pact.Core.StableEncoding qualified as Pact
114116import Pact.JSON.Encode qualified as J
115117import Prelude hiding (lookup )
116118import System.LogLevel
117119import Chainweb.Version.Guards (pact5 )
118120import Control.Concurrent.MVar (newMVar )
119121import Chainweb.Pact.Payload.RestAPI.Client (payloadClient )
122+ import qualified Pact.Core.Persistence as Pact
123+ import qualified Pact.Core.Info as Pact
120124
121125withPactService
122126 :: (Logger logger , CanPayloadCas tbl )
@@ -790,13 +794,22 @@ execPreInsertCheckReq logger serviceEnv txs = do
790794 fakeParentCreationTime <- Checkpointer. mkFakeParentCreationTime
791795 let act sql = Checkpointer. readFromLatest logger cid sql fakeParentCreationTime $ Checkpointer. PactRead
792796 { pact5Read = \ blockEnv bh -> do
793- forM txs $ \ tx ->
794- fmap (either Just (\ _ -> Nothing )) $ runExceptT $ do
795- -- it's safe to use initialBlockHandle here because it's
796- -- only used to check for duplicate pending txs in a block
797- () <- mapExceptT liftIO
798- $ Pact. validateParsedChainwebTx logger blockEnv tx
799- evalStateT (attemptBuyGas blockEnv tx) bh
797+ liftIO $ flip evalStateT bh $ doChainwebPactDbTransaction (blockEnv ^. psBlockDbEnv) Nothing $ \ pdb _ -> do
798+ forM txs $ \ tx ->
799+ fmap (either Just (\ _ -> Nothing )) $ runExceptT $ do
800+ -- it's safe to use initialBlockHandle here because it's
801+ -- only used to check for duplicate pending txs in a block
802+ () <- mapExceptT liftIO
803+ $ Pact. validateParsedChainwebTx logger blockEnv tx
804+ evalStateT (attemptBuyGas blockEnv tx) bh
805+ case tx ^? Pact. cmdPayload . Pact. payloadObj . Pact. pPayload . Pact. _Continuation of
806+ Just contMsg -> do
807+ let pactId = Pact. _cmPactId contMsg
808+ defPactState <- liftIO $ Pact. ignoreGas (Pact. LineInfo 0 ) $ Pact. _pdbRead pdb Pact. DDefPacts pactId
809+ let isComplete = defPactState == Just Nothing
810+ when isComplete $
811+ throwError (InsertErrorDefPactComplete (sshow pactId))
812+ Nothing -> return ()
800813 -- pessimistically, if we're catching up and not even past the Pact
801814 -- 5 activation, just badlist everything as in-the-future.
802815 , pact4Read = \ _ -> return $ Just InsertErrorTimeInFuture <$ txs
0 commit comments