OpShin / uplc

Python implementation of untyped plutus language core
MIT License
6 stars 2 forks source link

Natively implement evaluation of UPLC #12

Closed nielstron closed 11 months ago

nielstron commented 1 year ago

The proper execution step/memory consumption evaluation currently relies on aiken. This removes some responsibilites but essentially pulls Rust into the build chain. To improve accessibility, we should remove aiken from the dependencies.

This means we would need to re-implement the complete evaluation of UPLC properly in python. Reference implementations can be found in helios, aiken and Plutus.

Currently uplc supports a generous approximation of whether code evaluates (no check for execution steps, not always type checking) which is enough for some high level testing but not sufficient for proper tooling. However, this issue is less pressing than #11 because #11 is what currently pulls pyaiken into the dependency chain of opshin.

nielstron commented 1 year ago

More useful links for this topic: https://book.world.dev.cardano.org/cost-model.html https://aiken-lang.org/resources/plutus-core-specification.pdf https://github.com/input-output-hk/plutus/blob/d22a17ff52bb335a2fe8097bc5f92f5b05dc524a/plutus-core/cost-model/CostModelGeneration.md https://github.com/input-output-hk/plutus/blob/43ecfc3403cf908c55af57c8461e96e8b131b97c/plutus-core/cost-model/data/builtinCostModel.json

nielstron commented 11 months ago

Resolved by #30