Catalyst milestone 1: LambdaBuffers Conway support

Outputs

Implementation in repository:

  1. Implementing codegen for all modules (Haskell, Plutarch, PlutusTx, Rust, TypeScript, PureScript) for all the new Plutus Ledger types. This includes the new governance-related types, delegation types, and updated transaction types.
  2. Create new golden tests for the above types, for all language modules. For instance, we will have a set of files consisting of known-good JSON-serialized instances, and our testsuite will check that our implementation outputs these serialized values upon execution as expected. Although an exhaustive list of tests is not possible here, there are many Plutus types updated or new in V3 our library will support such as Vote, Voter, TxOutRef, TxInInfo, TxCert, etc and various concrete instantiations of each type to test - e.g., a VoteNo Vote, a VoteYes Vote, and so on.
  3. Create new roundtrip tests for Eq, Json and PlutusData type classes (where applicable) that will verify our type class instances serialise and deserialize without corruption, loss of information, etc by converting values to JSON and back, PlutusData and back, and verifying equality withstands.
  4. Implement new Plutus V3 types in plutus-ledger-api-rust and plutus-ledger-api-typescript
  5. Documentation explaining the updates accomplished towards LambdaBuffers Conways support

Acceptance Criteria

  1. All Plutus V3 types are implemented correctly and LambdaBuffers now supports codegen for all the supported language modules for these types:

    • Both the Plutus Ledger APIs and codegen configurations are implemented ensuring execution outputs are as intended
  2. All Plutus V3 types are covered by the golden tests ensuring execution outputs are as intended

    • All languages use the same set of golden files to test against
  3. All Plutus V3 have roundtrip tests for Eq, Json and PlutusData type classes (where applicable)

    • All languages have roundtrip tests (where applicable) to tests Json and PlutusData serialization
  4. The output is suitable for Plutus V3 Types such as Voter, Delegatee and GovernanceActionID etc.

    • All new Plutus V3 types have been implemented in the supporting libraries
  5. Documentation will cover new type support across Lambda buffer supported languages and will appear on https://mlabs-haskell.github.io/lambda-buffers in the Catalyst Milestone F13 reporting.

    • Documentation of the newly implemented Plutus V3 types were auto-generated

Evidence of Milestone Completion