Catalyst milestone 5 (FINAL): Project scaffold for Rust, JavaScript and Haskell

Outputs

  • A documented project scaffold that demonstrates the end-to-end use of LambdaBuffers with Rust, JavaScript, Haskell and PlutusTx language ecosystems.

    • A project scaffold that demonstrates end-to-end use of LambdaBuffers with Rust can be found here.

    • A project scaffold that demonstrates end-to-end use of LambdaBuffers with JavaScript (TypeScript) can be found here.

    • A project scaffold that demonstrates end-to-end use of LambdaBuffers with Haskell to create transactions can be found here.

    • A project scaffold that demonstrates end-to-end use of LambdaBuffers with Haskell for onchain scripts using Plutarch can be found here.

    • A project scaffold that demonstrates end-to-end use of LambdaBuffers with PlutusTx for onchain scripts can be found here.

    • The LambdaBuffers schema used in all the aforementioned projects can be found here.

  • Demonstrate how to use LambdaBuffers to manage and exchange JSON-based configuration between different language ecosystems supported by LambdaBuffers.

    • The JSON-based configuration defined with LambdaBuffers is over here.

    • The Rust transaction building project uses such JSON-based configuration over here.

    • The JavaScript (TypeScript) transaction building project uses such JSON-based configuration in its testsuite here.

    • The Haskell project uses such JSON-based configuration over here.

  • More importantly, demonstrates how to use LambdaBuffers to specify and exchange Plutus Datum between Plutus scripting languages and transaction-building frameworks.

    • A specification for Plutus Datum using LambdaBuffers is given here where we see its usage in Plutus scripting languages and transaction-building frameworks in the following files:

      • With the PlutusTx Plutus scripting language, we see it deserializes the EqDatum in the eqValidator defined here.

      • With the Plutarch Plutus scripting language, we see it deserializes the EqDatum in the eqValidator defined here.

      • With Rust, we can see it uses an EqDatum to build a transaction over here.

      • With TypeScript, we can see it uses an EqDatum to build a transaction over here.

      • With Haskell, we can see it uses an EqDatum to build a transaction over here.

  • A fully tested and documented LambdaBuffers support for Rust, JavaScript, Haskell and PlutusTx language ecosystems.

    • A full example project with LambdaBuffers complete with automated tests for Rust can be found here.

    • A full example project with LambdaBuffers complete with automated tests for JavaScript (TypeScript) can be found here.

    • A full example project with LambdaBuffers complete with automated tests for Haskell (using Rust's tx-village library) can be found here and here.

    • A full example project with LambdaBuffers for creating validators with PlutusTx can be found here.

  • A documented scaffold project that serves to demonstrate how to use LambdaBuffers with the newly supported languages for easy adoption.

    • A scaffold project that serves to demonstrate how to use LambdaBuffers with the newly supported languages for easy adoption are given in the previous bullet point.

    • The README.md serves as documentation for the scaffold projects which demonstrate how LambdaBuffers may be used with such languages.

  • Final close-out report.

    • This document is the close-out report.
  • Final closeout video.

    • Final closeout video can be found here.

Acceptance Criteria

  • A LambdaBuffers scaffold repository is made available that demonstrates a working end-to-end use of LambdaBuffers with Rust, JavaScript, Haskell and PlutusTx language ecosystems.

    • A LambdaBuffers scaffold repository that demonstrates a working end-to-end use of LambdaBuffers with Rust, JavaScript (TypeScript), Haskell, and PlutusTx is provided here.
  • The scaffold uses LambdaBuffers to specify JSON configuration.

    • The JSON-based configuration defined with LambdaBuffers is over here.
  • The scaffold uses LambdaBuffers to specify Plutus Datum.

    • The scaffold uses LambdaBuffers to specify Plutus Datum here.
  • Final closeout video is publicly available.

    • Final closeout video that is publicly available can be found here.

Evidence of Milestone Completion

  • The completed and reviewed LambdaBuffers scaffold project that uses LambdaBuffers to specify and exchange JSON based configuration between Rust, JavaScript, Haskell and PlutusTx language ecosystems.

    • The completed and reviewed LambdaBuffers scaffold project that uses LambdaBuffers to specify and exchange JSON based configuration in Rust was implemented in PR #12.

    • The completed and reviewed LambdaBuffers scaffold project that uses LambdaBuffers to specify and exchange JSON based configuration in JavaScript (TypeScript) was implemented in PR #18.

    • The completed and reviewed LambdaBuffers scaffold project that uses LambdaBuffers to specify and exchange JSON based configuration in Haskell was implemented in PR #27.

    • The completed and reviewed LambdaBuffers scaffold project that uses LambdaBuffers to specify and exchange JSON based configuration in PlutusTx was originally implemented in PR #1 and more recently updated in PR #25.

  • The completed and reviewed LambdaBuffers scaffold project that uses LambdaBuffers to specify and exchange Plutus Datums between Rust, JavaScript, Haskell and PlutusTx language ecosystems.

    • The completed and reviewed LambdaBuffers scaffold project that uses LambdaBuffers to specify and exchange Plutus Datums configuration in Rust was implemented in PR #12.

    • The completed and reviewed LambdaBuffers scaffold project that uses LambdaBuffers to specify and exchange Plutus Datums configuration in JavaScript (TypeScript) was implemented in PR #18.

    • The completed and reviewed LambdaBuffers scaffold project that uses LambdaBuffers to specify and exchange Plutus Datums configuration in Haskell was implemented in PR #27.

    • The completed and reviewed LambdaBuffers scaffold project that uses LambdaBuffers to specify and exchange Plutus Datums configuration in PlutusTx was originally implemented in PR #1 and more recently updated in PR #25.

  • We will record a video demonstrating the LambdaBuffers toolkit, how LambdaBuffers schemas are written and checked, and how code is generated from them in the newly supported programming languages.

    • A video demonstrating the LambdaBuffers toolkit, how LambdaBuffers schemas are written and checked, and how code is generated from them in the newly supported programming languages can be found here.
  • We will publish a fully documented scaffold project that demonstrates how LambdaBuffers is used in Cardano dApp projects.

    • The fully documented scaffold project that demonstrates how LambdaBuffers is used in Cardano dApp projects is in the lambda-buffers-for-cardano repository.
  • Link to final closeout video.

    • Final closeout video can be found here.

References