Skip to content

Commit bb90240

Browse files
committed
modify offchain and onchain code to support authentication of programmable assets in registration
1 parent ea8f744 commit bb90240

File tree

21 files changed

+132
-94
lines changed

21 files changed

+132
-94
lines changed

cabal.project

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ source-repository-package
5757
source-repository-package
5858
type: git
5959
location: https://github.com/Plutonomicon/plutarch-plutus
60-
tag: 7002ce59642daa3fff9c720cf3076844ac81ac26
61-
--sha256: sha256-9FR+VOUCyA0/0oHqV/m6fUXBprD9AIgrUZU0jD3f9hQ=
60+
tag: f84a46287b06f36abf8d2d63bec7ff75d32f3e91
61+
--sha256: sha256-gKBk9D6DHSEudq7P9+07yXWcgM/QX7NFp0tJXBodopM=
6262
subdir:
6363
.
6464
plutarch-ledger-api
@@ -68,8 +68,8 @@ source-repository-package
6868
source-repository-package
6969
type: git
7070
location: https://github.com/input-output-hk/catalyst-onchain-libs
71-
tag: 0b997ba7e62ee5c9aa41212d24f44553410f57d7
72-
--sha256: sha256-vaUFPrR8RFhEGgXbO1npwo5uSK1jRtKtg+FEVbEGuV0=
71+
tag: eb9c01f177b7f1e3d2d698fefb8207f0596d941e
72+
--sha256: sha256-99J5g+prx1r6qp1K3EqNRj20fc+kKM2tpxZfPYK2MqQ=
7373
subdir:
7474
src/plutarch-onchain-lib
7575

src/programmable-tokens/lib/SmartTokens/Contracts/ExampleTransferLogic.hs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import Plutarch.Core.Value
2525
import Plutarch.LedgerApi.V3
2626
import Plutarch.Monadic qualified as P
2727
import Plutarch.Prelude
28-
import Plutarch.Repr.Data
2928
import Plutarch.Unsafe (punsafeCoerce)
3029
import PlutusTx qualified
3130
import SmartTokens.Types.PTokenDirectory
@@ -149,11 +148,6 @@ pextractRequiredWitnesses = phoistAcyclic $ plam $ \progBaseCred inputs ->
149148
)
150149
# pnil
151150
# inputs
152-
where
153-
paddressStakingCredential :: Term s PAddress -> Term s PStakingCredential
154-
paddressStakingCredential addr =
155-
pmatch addr $ \addr' ->
156-
punsafeCoerce $ phead # (psndBuiltin # (pasConstr # pforgetData (pdata $ paddress'stakingCredential addr')))
157151

158152
{-|
159153
The 'mkFreezeAndSeizeTransfer' is a transfer logic script that allows the associated programmable token

src/programmable-tokens/lib/SmartTokens/Contracts/IssuanceCborHex.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import Plutarch.Core.Value
1919
import Plutarch.LedgerApi.V3
2020
import Plutarch.Monadic qualified as P
2121
import Plutarch.Prelude
22-
import Plutarch.Repr.Data
2322
import PlutusLedgerApi.V3 (BuiltinByteString)
2423
import PlutusTx qualified
2524
import PlutusTx.Builtins.Internal qualified as BI

src/programmable-tokens/lib/SmartTokens/Contracts/ProgrammableLogicBase.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import Plutarch.Internal.Lift
3131
import Plutarch.LedgerApi.V3
3232
import Plutarch.Monadic qualified as P
3333
import Plutarch.Prelude
34-
import Plutarch.Repr.Data
3534
import Plutarch.Unsafe (punsafeCoerce)
3635
import PlutusLedgerApi.V1.Value (Value)
3736
import PlutusTx qualified

src/programmable-tokens/lib/SmartTokens/Contracts/ProtocolParams.hs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ module SmartTokens.Contracts.ProtocolParams (
1010

1111
import Plutarch.Core.Context
1212
import Plutarch.Core.List
13+
import Plutarch.Core.Trace (pdebug)
1314
import Plutarch.Core.Utils
1415
import Plutarch.Core.ValidationLogic
1516
import Plutarch.Core.Value
@@ -34,9 +35,9 @@ mkProtocolParametersMinting = plam $ \oref ctx -> P.do
3435
ownTokenName <- plet (pfstBuiltin # ownTkPair)
3536
ownNumMinted <- plet (psndBuiltin # ownTkPair)
3637
pvalidateConditions
37-
[ ownTokenName #== pprotocolParamsTokenData
38-
, ownNumMinted #== pconstant 1
39-
, phasUTxO # pfromData oref # pfromData ptxInfo'inputs
38+
[ pdebug "minted tn must match protocolParamsToken" $ ownTokenName #== pprotocolParamsTokenData
39+
, pdebug "only single pp token must be minted" $ ownNumMinted #== pconstant 1
40+
, pdebug "must spent ppInitTxOutRef" $ phasUTxO # pfromData oref # pfromData ptxInfo'inputs
4041
]
4142

4243
-- | Permissioned Minting Policy

src/programmable-tokens/lib/SmartTokens/Core/Scripts.hs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ module SmartTokens.Core.Scripts (
1212
import Data.Aeson (FromJSON, ToJSON)
1313
import GHC.Generics (Generic)
1414
import Plutarch.Internal.Term (ClosedTerm, Config (..), LogLevel (LogInfo),
15-
Script, TracingMode (DoTracingAndBinds), compile)
15+
Script, TracingMode (..), compile)
1616

1717
{-| Script target environment
1818
-}
@@ -26,7 +26,7 @@ data ScriptTarget
2626
-}
2727
targetConfig :: ScriptTarget -> Config
2828
targetConfig = \case
29-
Debug -> tracingAndBindsConfig
29+
Debug -> _tracingConfig
3030
Production -> prodConfig
3131

3232
tryCompile :: ScriptTarget -> ClosedTerm a -> Script
@@ -40,8 +40,11 @@ tryCompileTracingAndBinds = tryCompile Debug
4040
tryCompileNoTracing :: ClosedTerm a -> Script
4141
tryCompileNoTracing = tryCompile Production
4242

43-
tracingAndBindsConfig :: Config
44-
tracingAndBindsConfig = Tracing LogInfo DoTracingAndBinds
43+
_tracingAndBindsConfig :: Config
44+
_tracingAndBindsConfig = Tracing LogInfo DoTracingAndBinds
45+
46+
_tracingConfig :: Config
47+
_tracingConfig = Tracing LogInfo DoTracing
4548

4649
prodConfig :: Config
4750
prodConfig = NoTracing

src/programmable-tokens/lib/SmartTokens/LinkedList/Common.hs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import Plutarch.Builtin.ByteString (pintegerToByteString, pmostSignificantFirst)
2020
import Plutarch.Builtin.Crypto (pblake2b_224)
2121
import Plutarch.Core.Context
2222
import Plutarch.Core.List
23+
import Plutarch.Core.Trace (pdebug)
2324
import Plutarch.Core.Utils
2425
import Plutarch.Core.Value
2526
import Plutarch.Evaluate (unsafeEvalTerm)
@@ -187,7 +188,7 @@ pInsert ::
187188
forall (s :: S).
188189
Term s (PAsData PCurrencySymbol) ->
189190
PDirectoryCommon s ->
190-
Term s (PByteString :--> PByteString :--> PUnit)
191+
Term s (PByteString :--> PAsData PByteString :--> PUnit)
191192
pInsert issuanceCborHexCS common = plam $ \keyToInsert hashedParam -> P.do
192193
let issuanceCborHexUTxO =
193194
ptxInInfoResolved $ pfromData $
@@ -199,6 +200,11 @@ pInsert issuanceCborHexCS common = plam $ \keyToInsert hashedParam -> P.do
199200
# common.referenceInputs
200201
POutputDatum issuanceDat' <- pmatch $ ptxOutDatum issuanceCborHexUTxO
201202
PIssuanceCborHex {pprefixCborHex, ppostfixCborHex} <- pmatch (pfromData $ punsafeCoerce @(PAsData PIssuanceCborHex) (pto issuanceDat'))
203+
ptraceInfo $ "Prefix Script" <> (pshow $ pfromData pprefixCborHex)
204+
ptraceInfo $ "Hashed Param" <> (pshow $ pserialiseData # pforgetData hashedParam)
205+
ptraceInfo $ "Postfix Script" <> (pshow $ pfromData ppostfixCborHex)
206+
ptraceInfo $ "Key to insert" <> (pshow keyToInsert)
207+
ptraceInfo $ "Computed CS: " <> (pshow $ _papplyHashedParameter (pfromData pprefixCborHex) (pfromData ppostfixCborHex) hashedParam)
202208
passert "Registry Entry must be valid programmable asset" $ _pisProgrammableTokenRegistration keyToInsert (pfromData pprefixCborHex) (pfromData ppostfixCborHex) hashedParam common.mint
203209
passert "Key to insert must be valid Currency Symbol" $ ptraceInfoIfFalse (pshow keyToInsert) $ plengthBS # keyToInsert #== 28
204210

@@ -247,26 +253,26 @@ data PDirectoryCommon (s :: S) = MkCommon
247253
}
248254
deriving stock (Generic)
249255

250-
_pisProgrammableTokenRegistration :: Term s PByteString -> Term s PByteString -> Term s PByteString -> Term s PByteString -> Term s (PValue 'Sorted 'NonZero) -> Term s PBool
256+
_pisProgrammableTokenRegistration :: Term s PByteString -> Term s PByteString -> Term s PByteString -> Term s (PAsData PByteString) -> Term s (PValue 'Sorted 'NonZero) -> Term s PBool
251257
_pisProgrammableTokenRegistration csToInsert prefixScriptBytes postfixScriptBytes hashedParam mintValue =
252258
pand'List
253-
[ phasCS # mintValue # (pcon $ PCurrencySymbol csToInsert)
259+
[ pdebug "must mint registered token" $ phasCS # mintValue # pcon (PCurrencySymbol csToInsert)
254260
, _papplyHashedParameter prefixScriptBytes postfixScriptBytes hashedParam #== csToInsert
255261
]
256262

257263
_papplyHashedParameter ::
258264
Term s PByteString
259265
-> Term s PByteString
260-
-> Term s PByteString
266+
-> Term s (PAsData PByteString)
261267
-> Term s PByteString
262268
_papplyHashedParameter prefix postfix hashedParam =
263269
pblake2b_224 # (scriptHeader <> postfix)
264270
where
265-
versionHeader :: Term s PByteString
266-
versionHeader = unsafeEvalTerm NoTracing (pintegerToByteString # pmostSignificantFirst # 1 # plutusVersion)
271+
_versionHeader :: Term s PByteString
272+
_versionHeader = unsafeEvalTerm NoTracing (pintegerToByteString # pmostSignificantFirst # 1 # _plutusVersion)
267273

268-
plutusVersion :: Term s PInteger
269-
plutusVersion = pconstant 3
274+
_plutusVersion :: Term s PInteger
275+
_plutusVersion = pconstant 3
270276

271277
scriptHeader :: Term _ PByteString
272-
scriptHeader = versionHeader <> prefix <> hashedParam
278+
scriptHeader = _versionHeader <> prefix <> (pserialiseData # pforgetData hashedParam)

src/programmable-tokens/lib/SmartTokens/LinkedList/MintBlacklist.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import Plutarch.LedgerApi.V3 (PPubKeyHash, PScriptContext (..), PTxInfo (..),
3232
PTxOutRef)
3333
import Plutarch.Monadic qualified as P
3434
import Plutarch.Prelude
35-
import Plutarch.Repr.Data
3635
import Plutarch.Unsafe (punsafeCoerce)
3736
import PlutusLedgerApi.V3 (PubKeyHash)
3837
import PlutusTx qualified

src/programmable-tokens/lib/SmartTokens/LinkedList/MintDirectory.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import Plutarch.LedgerApi.V3 (PCurrencySymbol, PScriptContext (..),
3030
PTxInfo (..), PTxOutRef)
3131
import Plutarch.Monadic qualified as P
3232
import Plutarch.Prelude
33-
import Plutarch.Repr.Data
3433
import Plutarch.Unsafe (punsafeCoerce)
3534
import PlutusLedgerApi.V3 (CurrencySymbol, ScriptHash)
3635
import PlutusTx qualified
@@ -80,4 +79,4 @@ mkDirectoryNodeMP = plam $ \initUTxO issuanceCborHexCS ctx -> P.do
8079
pInit common
8180
PInsert action hashedParam -> P.do
8281
pkToInsert <- plet action
83-
pInsert issuanceCborHexCS common # pfromData pkToInsert # pfromData hashedParam
82+
pInsert issuanceCborHexCS common # pfromData pkToInsert # hashedParam

src/programmable-tokens/lib/SmartTokens/Types/PTokenDirectory.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ import Plutarch.Internal.Lift
4040
import Plutarch.Internal.Term (Config (NoTracing))
4141
import Plutarch.LedgerApi.V3 (PCredential, PCurrencySymbol)
4242
import Plutarch.Prelude
43-
import Plutarch.Repr.Data
4443
import Plutarch.Unsafe (punsafeCoerce)
4544
import PlutusLedgerApi.V3 (BuiltinByteString, Credential, CurrencySymbol)
4645
import PlutusTx (Data (B, Constr))

0 commit comments

Comments
 (0)