-
Notifications
You must be signed in to change notification settings - Fork 76
/
plutus-sum.hs
58 lines (51 loc) · 2.13 KB
/
plutus-sum.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import Prelude
import System.Environment
import Cardano.Api.Shelley
import qualified Plutus.V1.Ledger.Api as Plutus
import Plutus.V1.Ledger.Contexts
import qualified Data.ByteString.Short as SBS
import Cardano.PlutusExample.Sum (sumDataSBS, sumDataSerialised, sumWrappedSerialised, sumWrappedSBS)
main :: IO ()
main = do
args <- getArgs
let nargs = length args
let scriptnum = if nargs > 0 then read (args!!0) else 42
let scriptname = if nargs > 1 then args!!1 else "result.plutus"
writePlutusScript scriptnum scriptname sumDataSerialised sumDataSBS
writePlutusScript scriptnum scriptname sumWrappedSerialised sumWrappedSBS
writePlutusScript :: Integer -> FilePath -> PlutusScript PlutusScriptV1 -> SBS.ShortByteString -> IO ()
writePlutusScript scriptnum filename scriptSerial scriptSBS =
do
case Plutus.defaultCostModelParams of
Just m -> let
(logout, e) = Plutus.evaluateScriptCounting Plutus.Verbose m scriptSBS
[ Plutus.toData scriptnum
, Plutus.toData (sum [1..scriptnum])
, Plutus.toData dummyContext ]
in do print ("Log output" :: String) >> print logout
case e of
Left evalErr -> print ("Eval Error" :: String) >> print evalErr
Right exbudget -> print ("Ex Budget" :: String) >> print exbudget
Nothing -> error "defaultCostModelParams failed"
result <- writeFileTextEnvelope filename Nothing scriptSerial
case result of
Left err -> print $ displayError err
Right () -> return ()
dummyContext :: ScriptContext
dummyContext = ScriptContext dummyTxInfo (Spending dummyOutRef)
where
dummyOutRef :: TxOutRef
dummyOutRef = TxOutRef (Plutus.TxId "") 0
dummyTxInfo :: TxInfo
dummyTxInfo = TxInfo
{ txInfoInputs = []
, txInfoOutputs = []
, txInfoFee = mempty
, txInfoMint = mempty
, txInfoDCert = []
, txInfoWdrl = []
, txInfoValidRange = Plutus.always
, txInfoSignatories = []
, txInfoData = []
, txInfoId = Plutus.TxId ""
}