Skip to content

Commit e329bb1

Browse files
committed
eleks/oracle: demonstrate how expensive || can be!
1 parent 5cd0fae commit e329bb1

File tree

5 files changed

+30
-5
lines changed

5 files changed

+30
-5
lines changed

eleks/oracle/src/Contracts/Oracle/OffChain.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ updateOracle oracle operatorPrivateKey params = do
102102
, osmGameId = gameId
103103
, osmGameStatus = gameStatus
104104
}
105-
let oracleData' = oracleData{ ovSignedMessage = Just $ signMessage oracleSignMessage operatorPrivateKey }
105+
let oracleData' = oracleData{ ovSignedMessage = Nothing } -- This is not that hacky, the on-chain validation rule accepts it!
106106
when (oracleData' /= oracleData) $ do
107107
let requestTokenVal = assetClassValue (requestTokenClassFromOracle oracle) 1
108108
collateralVal = Ada.toValue $ oCollateral oracle

eleks/oracle/src/Contracts/Oracle/OnChain.hs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,18 @@ mkOracleValidator oracle oracleData r ctx =
132132
>>= verifyOracleValueSigned (oOperatorKey oracle)
133133
>>= (\(message, _) -> Just message)
134134

135-
isUpdateValid = (not isCurrentValueSigned) ||
136-
(fromMaybe False $ validateGameStatusChanges <$>
137-
(osmGameStatus <$> extractSigendMessage (ovSignedMessage oracleData)) <*>
135+
-- if then else is way cheaper!
136+
isUpdateValid = if not isCurrentValueSigned then True else
137+
(fromMaybe False $ validateGameStatusChanges <$>
138+
(osmGameStatus <$> extractSigendMessage (ovSignedMessage oracleData)) <*>
138139
(osmGameStatus <$> extractSigendMessage outputSignedMessage))
139140

141+
-- || is surprisingly way more expensive!
142+
-- isUpdateValid = (not isCurrentValueSigned) ||
143+
-- (fromMaybe False $ validateGameStatusChanges <$>
144+
-- (osmGameStatus <$> extractSigendMessage (ovSignedMessage oracleData)) <*>
145+
-- (osmGameStatus <$> extractSigendMessage outputSignedMessage))
146+
140147
{-# INLINABLE verifyOracleValueSigned #-}
141148
verifyOracleValueSigned :: PubKey -> SignedMessage OracleSignedMessage -> Maybe (OracleSignedMessage, TxConstraints Void Void)
142149
verifyOracleValueSigned pubKey sm = case verifySignedMessageConstraints pubKey sm of

eleks/oracle/src/test/Spec.hs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,25 @@ import qualified Spec.Oracle
66
import Test.Tasty
77
import Test.Tasty.Hedgehog (HedgehogTestLimit (..))
88

9+
import Data.Default
10+
import Ledger.Index
11+
import Plutus.Trace
12+
13+
-- With `||`:
14+
-- ( Sum {getSum = 9539}
15+
-- , ExBudget {exBudgetCPU = ExCPU 1124168956, exBudgetMemory = ExMemory 3152700}
16+
-- )
17+
18+
-- With `if then else`:
19+
-- ( Sum {getSum = 3531}
20+
-- , ExBudget {exBudgetCPU = ExCPU 698345767, exBudgetMemory = ExMemory 2069978}
21+
-- )
922
main :: IO ()
10-
main = defaultMain tests
23+
main = print =<< writeScriptsTo
24+
(ScriptsConfig "." (Scripts UnappliedValidators))
25+
"updateOracleTrace"
26+
Spec.Oracle.updateOracleTrace
27+
def
1128

1229
-- | Number of successful tests for each hedgehog property.
1330
-- The default is 100 but we use a smaller number here in order to speed up

eleks/oracle/src/test/Spec/Oracle.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
module Spec.Oracle
1313
( tests
14+
, updateOracleTrace
1415
) where
1516

1617
import Control.Lens
3.45 KB
Binary file not shown.

0 commit comments

Comments
 (0)