This issue wants to identify and track the various tasks to complete before a publishable version (not necessarily releasable, but developer-ready).
The most urgent issue imho is to properly partition the project into completely independent modules, so that each module is self-contained, and docs and dependencies are clear.
Different modules could be independent repos in the future, but it might be useful to keep the monorepo structure for now, as long as each module is into its own root folder and properly packaged. The /docs folder should be deleted, or only contain general architectural docs (e.g. the end-2-end paradigm, security model, etc.)
Imagining an end-2-end flow, we have the following components:
- The vm: a bolos app running on a hardware signer (or on the speculos emulator)
- The vm client: a generic client for the vm running on the host, that is able to provide the binary, outsurced RAM, Merkle proofs, etc.
- The app: compiled to target Risc-V
- The app client: specific to the app, extends (or builds on top) of the vm client and is entirely application-specific.
All the paths contained /vm/... below should be renamed to /<name chosen for the vm>/... once the name is chosen.
==============================================
/vm - Virtual Machine app
VM app to be installed on the device.
Tasks:
==============================================
/host - Python client side library (rename to vm-client-python?)
Generic client to be ran on the client side of an app.
Contains the generic logic to communicate with the VM, providing the necessary data and proofs, and to send binary messages to the app and receive responses.
Generally, it wouldn't be ran directly; rather it is imported and extended in order to build app-specific clients (which know the encoding of messages and responses, e.g. via a protocol based on json or protobuf).
Tasks:
==============================================
/app/app-rust/sdk - Rust SDK (move to /vm-sdk-rust)
Tasks:
=============================================
Rather than a boilerplate, we will just develop some good simple apps that will serve as example.
This issue wants to identify and track the various tasks to complete before a publishable version (not necessarily releasable, but developer-ready).
The most urgent issue imho is to properly partition the project into completely independent modules, so that each module is self-contained, and docs and dependencies are clear.
Different modules could be independent repos in the future, but it might be useful to keep the monorepo structure for now, as long as each module is into its own root folder and properly packaged. The
/docsfolder should be deleted, or only contain general architectural docs (e.g. the end-2-end paradigm, security model, etc.)Imagining an end-2-end flow, we have the following components:
All the paths contained
/vm/...below should be renamed to/<name chosen for the vm>/...once the name is chosen.==============================================
/vm- Virtual Machine appVM app to be installed on the device.
Tasks:
/docs==============================================
/host- Python client side library (rename to vm-client-python?)Generic client to be ran on the client side of an app.
Contains the generic logic to communicate with the VM, providing the necessary data and proofs, and to send binary messages to the app and receive responses.
Generally, it wouldn't be ran directly; rather it is imported and extended in order to build app-specific clients (which know the encoding of messages and responses, e.g. via a protocol based on json or protobuf).
Tasks:
==============================================
/app/app-rust/sdk- Rust SDK (move to /vm-sdk-rust)Tasks:
=============================================
Rather than a boilerplate, we will just develop some good simple apps that will serve as example.