module Singular.Registry.Blueprint.Params
( applyDataParam
, applyIntParam
, applyBytesParam
, applyOutputRef
, applyPreviousPolicies
, applyRequestParams
) where
import Data.ByteString qualified as BS
import Data.ByteString.Short qualified as SBS
import PlutusCore qualified as PLC
import PlutusCore.Data (Data (..))
import PlutusLedgerApi.V3
( serialiseUPLC
, uncheckedDeserialiseUPLC
)
import PlutusTx.Builtins.Internal
( BuiltinByteString (..)
, BuiltinData (..)
)
import PlutusTx.IsData.Class (ToData (..))
import Singular.Registry.Types
( OnChainTokenId (..)
, OnChainTxOutRef
)
import UntypedPlutusCore
( Program (..)
, applyProgram
)
import UntypedPlutusCore qualified as UPLC
import UntypedPlutusCore.DeBruijn ()
applyDataParam
:: Data
-> SBS.ShortByteString
-> SBS.ShortByteString
applyDataParam :: Data -> ShortByteString -> ShortByteString
applyDataParam Data
d ShortByteString
sbs =
let
prog :: Program DeBruijn DefaultUni DefaultFun ()
prog = ShortByteString -> Program DeBruijn DefaultUni DefaultFun ()
uncheckedDeserialiseUPLC ShortByteString
sbs
argProg :: Program name DefaultUni fun ()
argProg =
()
-> Version
-> Term name DefaultUni fun ()
-> Program name DefaultUni fun ()
forall name (uni :: * -> *) fun ann.
ann -> Version -> Term name uni fun ann -> Program name uni fun ann
Program
()
(Program DeBruijn DefaultUni DefaultFun () -> Version
forall {name} {uni :: * -> *} {fun} {ann}.
Program name uni fun ann -> Version
progVer Program DeBruijn DefaultUni DefaultFun ()
prog)
( () -> Some (ValueOf DefaultUni) -> Term name DefaultUni fun ()
forall name (uni :: * -> *) fun ann.
ann -> Some (ValueOf uni) -> Term name uni fun ann
UPLC.Constant
()
( ValueOf DefaultUni Data -> Some (ValueOf DefaultUni)
forall {k} (tag :: k -> *) (a :: k). tag a -> Some tag
PLC.Some
( DefaultUni (Esc Data) -> Data -> ValueOf DefaultUni Data
forall (uni :: * -> *) a. uni (Esc a) -> a -> ValueOf uni a
PLC.ValueOf
DefaultUni (Esc Data)
PLC.DefaultUniData
Data
d
)
)
)
applied :: Program DeBruijn DefaultUni DefaultFun ()
applied = case Program DeBruijn DefaultUni DefaultFun ()
-> Program DeBruijn DefaultUni DefaultFun ()
-> Either
ApplyProgramError (Program DeBruijn DefaultUni DefaultFun ())
forall (m :: * -> *) a name (uni :: * -> *) fun.
(MonadError ApplyProgramError m, Semigroup a) =>
Program name uni fun a
-> Program name uni fun a -> m (Program name uni fun a)
applyProgram Program DeBruijn DefaultUni DefaultFun ()
prog Program DeBruijn DefaultUni DefaultFun ()
forall {name} {fun}. Program name DefaultUni fun ()
argProg of
Right Program DeBruijn DefaultUni DefaultFun ()
p -> Program DeBruijn DefaultUni DefaultFun ()
p
Left ApplyProgramError
e ->
[Char] -> Program DeBruijn DefaultUni DefaultFun ()
forall a. HasCallStack => [Char] -> a
error ([Char] -> Program DeBruijn DefaultUni DefaultFun ())
-> [Char] -> Program DeBruijn DefaultUni DefaultFun ()
forall a b. (a -> b) -> a -> b
$
[Char]
"applyDataParam: "
[Char] -> [Char] -> [Char]
forall a. Semigroup a => a -> a -> a
<> ApplyProgramError -> [Char]
forall a. Show a => a -> [Char]
show ApplyProgramError
e
in
Program DeBruijn DefaultUni DefaultFun () -> ShortByteString
serialiseUPLC Program DeBruijn DefaultUni DefaultFun ()
applied
where
progVer :: Program name uni fun ann -> Version
progVer (Program ann
_ Version
v Term name uni fun ann
_) = Version
v
applyIntParam
:: Integer
-> SBS.ShortByteString
-> SBS.ShortByteString
applyIntParam :: Integer -> ShortByteString -> ShortByteString
applyIntParam = Data -> ShortByteString -> ShortByteString
applyDataParam (Data -> ShortByteString -> ShortByteString)
-> (Integer -> Data)
-> Integer
-> ShortByteString
-> ShortByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Data
I
applyBytesParam
:: BS.ByteString
-> SBS.ShortByteString
-> SBS.ShortByteString
applyBytesParam :: ByteString -> ShortByteString -> ShortByteString
applyBytesParam ByteString
bs =
Data -> ShortByteString -> ShortByteString
applyDataParam (ByteString -> Data
B ByteString
bs)
applyOutputRef
:: OnChainTxOutRef
-> SBS.ShortByteString
-> SBS.ShortByteString
applyOutputRef :: OnChainTxOutRef -> ShortByteString -> ShortByteString
applyOutputRef OnChainTxOutRef
ref ShortByteString
sbs =
let BuiltinData Data
d = OnChainTxOutRef -> BuiltinData
forall a. ToData a => a -> BuiltinData
toBuiltinData OnChainTxOutRef
ref
in Data -> ShortByteString -> ShortByteString
applyDataParam Data
d ShortByteString
sbs
applyPreviousPolicies
:: [BS.ByteString]
-> SBS.ShortByteString
-> SBS.ShortByteString
applyPreviousPolicies :: [ByteString] -> ShortByteString -> ShortByteString
applyPreviousPolicies [ByteString]
pids =
Data -> ShortByteString -> ShortByteString
applyDataParam ([Data] -> Data
List ((ByteString -> Data) -> [ByteString] -> [Data]
forall a b. (a -> b) -> [a] -> [b]
map ByteString -> Data
B [ByteString]
pids))
applyRequestParams
:: BS.ByteString
-> OnChainTokenId
-> SBS.ShortByteString
-> SBS.ShortByteString
applyRequestParams :: ByteString -> OnChainTokenId -> ShortByteString -> ShortByteString
applyRequestParams ByteString
statePolicyId (OnChainTokenId (BuiltinByteString ByteString
token)) ShortByteString
sbs =
ByteString -> ShortByteString -> ShortByteString
applyBytesParam ByteString
token (ShortByteString -> ShortByteString)
-> ShortByteString -> ShortByteString
forall a b. (a -> b) -> a -> b
$
ByteString -> ShortByteString -> ShortByteString
applyBytesParam ByteString
statePolicyId ShortByteString
sbs