Skip to content

Commit

Permalink
SCB: Reducing the network traffic caused by calling an endpoint.
Browse files Browse the repository at this point in the history
Every time we invoked an endpoint, we were going back to the server to
get the contract's schema definition. Since these are fixed for the
lifetime of the contract, it wasn't really necessary.
  • Loading branch information
Kris Jenkins authored and krisajenkins committed Aug 3, 2020
1 parent a7a244e commit 33600f7
Showing 1 changed file with 14 additions and 20 deletions.
34 changes: 14 additions & 20 deletions plutus-scb-client/src/MainFrame.purs
Expand Up @@ -16,7 +16,7 @@ import Control.Monad.State (class MonadState)
import Control.Monad.State.Extra (zoomStateT)
import Data.Array (filter)
import Data.Either (Either(..))
import Data.Lens (_1, _2, assign, findOf, modifying, to, traversed, view)
import Data.Lens (_1, _2, assign, findOf, modifying, to, traversed, use, view)
import Data.Lens.At (at)
import Data.Lens.Extra (peruse, toSetOf)
import Data.Lens.Index (ix)
Expand All @@ -25,7 +25,7 @@ import Data.Maybe (Maybe(..))
import Data.RawJson (RawJson(..))
import Data.Set (Set)
import Data.Set as Set
import Data.Traversable (for_, traverse_)
import Data.Traversable (for_, sequence, traverse_)
import Data.Tuple (Tuple(..))
import Effect.Aff.Class (class MonadAff)
import Effect.Class (class MonadEffect, liftEffect)
Expand All @@ -44,7 +44,7 @@ import Playground.Lenses (_endpointDescription, _getEndpointDescription, _schema
import Playground.Types (FunctionSchema(..), _FunctionSchema)
import Plutus.SCB.Events.Contract (ContractInstanceState(..))
import Plutus.SCB.Types (ContractExe)
import Plutus.SCB.Webserver (SPParams_(..), getApiContractByContractinstanceidSchema, getApiFullreport, postApiContractActivate, postApiContractByContractinstanceidEndpointByEndpointname)
import Plutus.SCB.Webserver (SPParams_(..), getApiFullreport, postApiContractActivate, postApiContractByContractinstanceidEndpointByEndpointname)
import Plutus.SCB.Webserver.Types (ContractReport, ContractSignatureResponse(..), StreamToClient(..), StreamToServer(..))
import Prim.TypeError (class Warn, Text)
import Schema (FormSchema)
Expand Down Expand Up @@ -198,7 +198,6 @@ handleAction (InvokeContractEndpoint contractInstanceId endpointForm) = do

updateFormsForContractInstance ::
forall m.
Warn (Text "TODO We shouldn't have to go to the backend every time for this data. Contract schemas don't change during the lifetime of the contract.") =>
MonadAsk (SPSettings_ SPParams_) m =>
MonadAff m =>
MonadState State m =>
Expand All @@ -215,28 +214,23 @@ updateFormsForContractInstance newContractInstance = do
)
when (oldContractInstance /= Just newContractInstance)
$ do
contractReport :: WebData (ContractReport ContractExe) <- use _contractReport
let
uuid = view (_csContract <<< _contractInstanceIdString) newContractInstance
contractSchema <- runAjax $ getApiContractByContractinstanceidSchema uuid
newForms :: Maybe (WebData (Array EndpointForm))
newForms = sequence $ createNewEndpointForms <$> contractReport <*> pure newContractInstance
assign (_contractSignatures <<< at csContractId)
(Just (Tuple newContractInstance <$> (createEndpointForms newContractInstance <$> contractSchema)))
(map (Tuple newContractInstance) <$> newForms)

createNewEndpointFormsM ::
forall m.
Monad m =>
m (ContractReport ContractExe) ->
m (ContractInstanceState ContractExe) ->
m (Maybe (Array EndpointForm))
createNewEndpointFormsM mContractReport mInstanceState = do
contractReport <- mContractReport
instanceState <- mInstanceState
createNewEndpointForms ::
ContractReport ContractExe ->
ContractInstanceState ContractExe ->
Maybe (Array EndpointForm)
createNewEndpointForms contractReport instanceState =
let
matchingSignature :: Maybe (ContractSignatureResponse ContractExe)
matchingSignature = getMatchingSignature instanceState contractReport

newForms :: Maybe (Array EndpointForm)
newForms = createEndpointForms instanceState <$> matchingSignature
pure newForms
in
createEndpointForms instanceState <$> matchingSignature

createEndpointForms ::
forall t.
Expand Down

0 comments on commit 33600f7

Please sign in to comment.