A basic CEK machine for Plutus Core, implemented in OCaml.
To compile the machine, install OCaml (probably
with OPAM) and the dune build tool and the zarith and ocplib-endian libraries
(opam install dune zarith ocplib-endian) and then type make. That should
leave an executable called cek in the top-level directory.
The cek program operates in two different ways. You can type
cek <file>
to run a program once: the result and the execution time will be printed.
You can also type
cek -t <n> <file>
to run the program n times: the execution times (in seconds) will be printed
each time, and at the end the average time will be printed (but not the program
result). This is a quick way to get benchmarking data.
The executable consumes Plutus Core programs in CBOR format (serialised with Names, not de Bruijn indices). You can get these by using
plc convert --of cbor-named -i <input file> -o <output file>
on textual Plutus Core programs, such as the ones in
plutus-benchmark/validation/data: see the README files in that directory for instructions
on how to assemble the separate files into executable validators.
You can also use the nofib-exe command to generate suitable CBOR from the nofib examples:
for example
nofib-exe dumpCBORnamed prime P60
See plc convert --help and nofib-exe --help for more information.