In this repository we implement the Plutus Core specification defined here.
The IOHK Plutus implementation is here.
At the moment we target version v1.0 (RC5.3)
.
Installation
After installing python3
, pandoc and ninja-build as dependencies and
placing them in $PATH
, simply run ./build
to setup OCaml, K, compile
the semantics and run the tests.
The file plutus-core.md
defines the Plutus Core language, and the file
plutus-core-spec.md
defines unit tests as a reachability specification.
Errors / Questions from specification / reference implementation
Reference implementation
-
Integers builtins overflow too quickly in the specification.
Fixed: Commit that fixes this.
Specification
-
(fix ...)
as a term construct is still present. See pgs 12, 13, 15. -
What does
V
refer to in the second to last case in Figure 12? -
In syntax, (Fig. 2), lambdas and other constructs take in Type Values, but in the semantics (Fig. 9), they take in any Type
Fixed: Commit that fixes this.
-
Underspecified grammar, for example [ Term TermList ] doesn't parse.
Grammar follows what internal AST representation is
-
(fix ...)
rule changes type (Fig. 9)Deprecated,
(fix ...)
is no longer a term-level construct. -
resizeInteger and intToByteString: arguments say i has size s1, should it be s0?
Fixed: Commit that fixes this.
-
intToByteString
: Behaviour for negative integers is not specified. Which binary representation should we use?Two’s complement. Not yet added to spec.