Plutus: Pioneers Program 4th cohort - Lecture 10 - Built with plutus

As a last lecture, instead of writing regular Plutus code through Haskell, alternatives are presented.

First, we have MeshJS, which aims to bootstrap DApps, based on React, NextJS, and JavaScript/TypeScript.

Then come plu-ts, which allows tu write scripts which will be compiled down to plutus.

It looks a lot like Haskkell-based Plutus scripts:

import { Address, bool, compile, makeValidator, PaymentCredentials, pBool, pfn, Script, ScriptType, V2 } from "@harmoniclabs/plu-ts"; export const contract = pfn([ AnyDatum.type, AnyRedeemer.type, V2.PScriptContext.type ], bool) (( datum, redeemer, ctx ) => pBool( true ) ); export const untypedValidator = makeValidator( contract ); export const compiledContract = compile( untypedValidator ); export const script = new Script( ScriptType.PlutusV2, compiledContract ); export const scriptMainnetAddr = new Address( "mainnet", new PaymentCredentials( "script", script.hash ) );

Then we have OpShin, which is python-based.

from opshin.prelude import * @dataclass() class WithdrawDatum(PlutusData): pubkeyhash: bytes def validator(datum: WithdrawDatum, redeemer: None, context: ScriptContext) -> None: sig_present = False for s in context.tx_info.signatories: if datum.pubkeyhash == s: sig_present = True assert sig_present, "Required signature missing"

Then we have plutarch, which is a Haskell eDSL, it aims to produce a smaller and more efficient Untyped PLutus Core:

alwaysSucceeds :: Term s (PAsData PDatum :--> PAsData PRedeemer :--> PAsData PScriptContext :--> PUnit) alwaysSucceeds = plam $ \_datm _redm _ctx -> pconstant ()

Finally there's Aiken which is a dedicated functional programming language for Smart Contracts.

validator { fn hello_world(datum, redeemer, context) -> Bool { let must_say_hello = redeemer == "Hello, World!" let must_be_signed = list.has( context.transaction.extra_signatories, datum.owner, ) must_say_hello? && must_be_signed? } }

Notes: while Plutus Pioneers Program 4th Cohort ends here, the 1st cohort, which I attended to, cover Plutus Application Backend.

Its aims to enable interactions between clients and contracts (e.g. through HTTP requests to long-running contracts, or notify clients when ledger changes).

To be deployed, it takes:

  • A chain index
  • A node
  • A wallet
    • A cardano wallet backend instance (WBE): cardano-wallet
    • A desktop wallet application: Daedalus
    • A browser wallet application: Nami, Yoroi, etc.