From 7b9fb837e3503d62e1c6b2872273ace31536c096 Mon Sep 17 00:00:00 2001 From: r4bbit <445106+0x-r4bbit@users.noreply.github.com> Date: Tue, 26 May 2026 10:12:28 +0200 Subject: [PATCH] refactor: move programs into `programs` and UIs into `apps` This refactors the repository structure as it has grown over time. --- CLAUDE.md | 39 ++++++----- Cargo.toml | 62 +++++++++--------- Makefile | 7 +- README.md | 54 +++++++++++---- {amm-ui => apps/amm}/README.md | 0 {amm-ui => apps/amm}/flake.lock | 0 {amm-ui => apps/amm}/flake.nix | 0 {amm-ui => apps/amm}/icons/amm.png | Bin {amm-ui => apps/amm}/metadata.json | 0 {amm-ui => apps/amm}/qml/Main.qml | 0 {amm-ui => apps/amm}/qml/NavBar.qml | 0 .../components/liquidity/AddLiquidityForm.qml | 0 .../liquidity/EstimateInfoButton.qml | 0 .../liquidity/LiquidityActionTabs.qml | 0 .../liquidity/LiquidityConfirmationDialog.qml | 0 .../liquidity/PoolPositionSummary.qml | 0 .../liquidity/RemoveLiquidityForm.qml | 0 .../qml/components/liquidity/SummaryRow.qml | 0 .../components/liquidity/TokenAmountInput.qml | 0 .../shared/SlippageToleranceControl.qml | 0 .../qml/components/shared/SuccessToast.qml | 0 .../amm}/qml/components/swap/SwapCard.qml | 0 .../swap/SwapConfirmationDialog.qml | 0 .../amm}/qml/components/swap/SwapSummary.qml | 0 .../amm}/qml/components/swap/TokenInput.qml | 0 .../qml/components/swap/TokenListItem.qml | 0 .../components/swap/TokenSelectorModal.qml | 0 .../amm}/qml/pages/LiquidityPage.qml | 0 {amm-ui => apps/amm}/qml/pages/SwapPage.qml | 0 .../amm}/qml/state/DummyPoolState.qml | 0 .../amm}/qml/state/DummySwapState.qml | 0 {amm => programs/amm}/Cargo.toml | 0 {amm => programs/amm}/core/Cargo.toml | 0 {amm => programs/amm}/core/src/lib.rs | 0 {amm => programs/amm}/methods/Cargo.toml | 0 {amm => programs/amm}/methods/build.rs | 0 .../amm}/methods/guest/Cargo.lock | 0 .../amm}/methods/guest/Cargo.toml | 0 .../amm}/methods/guest/src/bin/amm.rs | 0 {amm => programs/amm}/methods/src/lib.rs | 0 {amm => programs/amm}/src/add.rs | 0 {amm => programs/amm}/src/lib.rs | 0 {amm => programs/amm}/src/new_definition.rs | 0 {amm => programs/amm}/src/remove.rs | 0 {amm => programs/amm}/src/swap.rs | 0 {amm => programs/amm}/src/sync.rs | 0 {amm => programs/amm}/src/tests.rs | 0 {ata => programs/ata}/Cargo.toml | 0 {ata => programs/ata}/core/Cargo.toml | 0 {ata => programs/ata}/core/src/lib.rs | 0 {ata => programs/ata}/methods/Cargo.toml | 0 {ata => programs/ata}/methods/build.rs | 0 .../ata}/methods/guest/Cargo.lock | 0 .../ata}/methods/guest/Cargo.toml | 0 .../ata}/methods/guest/src/bin/ata.rs | 0 {ata => programs/ata}/methods/src/lib.rs | 0 {ata => programs/ata}/src/burn.rs | 0 {ata => programs/ata}/src/create.rs | 0 {ata => programs/ata}/src/lib.rs | 0 {ata => programs/ata}/src/tests.rs | 0 {ata => programs/ata}/src/transfer.rs | 0 .../integration_tests}/Cargo.toml | 0 .../integration_tests}/src/lib.rs | 0 .../integration_tests}/tests/amm.rs | 0 .../integration_tests}/tests/ata.rs | 0 .../integration_tests}/tests/stablecoin.rs | 0 .../integration_tests}/tests/token.rs | 0 .../stablecoin}/Cargo.toml | 0 .../stablecoin}/core/Cargo.toml | 0 .../stablecoin}/core/src/lib.rs | 0 .../stablecoin}/methods/Cargo.toml | 0 .../stablecoin}/methods/build.rs | 0 .../stablecoin}/methods/guest/Cargo.lock | 0 .../stablecoin}/methods/guest/Cargo.toml | 0 .../methods/guest/src/bin/stablecoin.rs | 0 .../stablecoin}/methods/src/lib.rs | 0 .../stablecoin}/src/lib.rs | 0 .../stablecoin}/src/open_position.rs | 0 .../stablecoin}/src/repay_debt.rs | 0 .../stablecoin}/src/tests.rs | 0 .../stablecoin}/src/withdraw_collateral.rs | 0 {token => programs/token}/Cargo.toml | 0 {token => programs/token}/core/Cargo.toml | 0 {token => programs/token}/core/src/lib.rs | 0 {token => programs/token}/methods/Cargo.toml | 0 {token => programs/token}/methods/build.rs | 0 .../token}/methods/guest/Cargo.lock | 0 .../token}/methods/guest/Cargo.toml | 0 .../token}/methods/guest/src/bin/token.rs | 0 {token => programs/token}/methods/src/lib.rs | 0 {token => programs/token}/src/burn.rs | 0 {token => programs/token}/src/initialize.rs | 0 {token => programs/token}/src/lib.rs | 0 {token => programs/token}/src/mint.rs | 0 .../token}/src/new_definition.rs | 0 {token => programs/token}/src/print_nft.rs | 0 {token => programs/token}/src/tests.rs | 0 {token => programs/token}/src/transfer.rs | 0 .../twap_oracle}/Cargo.toml | 0 .../twap_oracle}/core/Cargo.toml | 0 .../twap_oracle}/core/src/lib.rs | 0 .../twap_oracle}/methods/Cargo.toml | 0 .../twap_oracle}/methods/build.rs | 0 .../twap_oracle}/methods/guest/Cargo.lock | 0 .../twap_oracle}/methods/guest/Cargo.toml | 0 .../methods/guest/src/bin/twap_oracle.rs | 0 .../twap_oracle}/methods/src/lib.rs | 0 .../twap_oracle}/src/lib.rs | 0 .../twap_oracle}/src/noop.rs | 0 109 files changed, 97 insertions(+), 65 deletions(-) rename {amm-ui => apps/amm}/README.md (100%) rename {amm-ui => apps/amm}/flake.lock (100%) rename {amm-ui => apps/amm}/flake.nix (100%) rename {amm-ui => apps/amm}/icons/amm.png (100%) rename {amm-ui => apps/amm}/metadata.json (100%) rename {amm-ui => apps/amm}/qml/Main.qml (100%) rename {amm-ui => apps/amm}/qml/NavBar.qml (100%) rename {amm-ui => apps/amm}/qml/components/liquidity/AddLiquidityForm.qml (100%) rename {amm-ui => apps/amm}/qml/components/liquidity/EstimateInfoButton.qml (100%) rename {amm-ui => apps/amm}/qml/components/liquidity/LiquidityActionTabs.qml (100%) rename {amm-ui => apps/amm}/qml/components/liquidity/LiquidityConfirmationDialog.qml (100%) rename {amm-ui => apps/amm}/qml/components/liquidity/PoolPositionSummary.qml (100%) rename {amm-ui => apps/amm}/qml/components/liquidity/RemoveLiquidityForm.qml (100%) rename {amm-ui => apps/amm}/qml/components/liquidity/SummaryRow.qml (100%) rename {amm-ui => apps/amm}/qml/components/liquidity/TokenAmountInput.qml (100%) rename {amm-ui => apps/amm}/qml/components/shared/SlippageToleranceControl.qml (100%) rename {amm-ui => apps/amm}/qml/components/shared/SuccessToast.qml (100%) rename {amm-ui => apps/amm}/qml/components/swap/SwapCard.qml (100%) rename {amm-ui => apps/amm}/qml/components/swap/SwapConfirmationDialog.qml (100%) rename {amm-ui => apps/amm}/qml/components/swap/SwapSummary.qml (100%) rename {amm-ui => apps/amm}/qml/components/swap/TokenInput.qml (100%) rename {amm-ui => apps/amm}/qml/components/swap/TokenListItem.qml (100%) rename {amm-ui => apps/amm}/qml/components/swap/TokenSelectorModal.qml (100%) rename {amm-ui => apps/amm}/qml/pages/LiquidityPage.qml (100%) rename {amm-ui => apps/amm}/qml/pages/SwapPage.qml (100%) rename {amm-ui => apps/amm}/qml/state/DummyPoolState.qml (100%) rename {amm-ui => apps/amm}/qml/state/DummySwapState.qml (100%) rename {amm => programs/amm}/Cargo.toml (100%) rename {amm => programs/amm}/core/Cargo.toml (100%) rename {amm => programs/amm}/core/src/lib.rs (100%) rename {amm => programs/amm}/methods/Cargo.toml (100%) rename {amm => programs/amm}/methods/build.rs (100%) rename {amm => programs/amm}/methods/guest/Cargo.lock (100%) rename {amm => programs/amm}/methods/guest/Cargo.toml (100%) rename {amm => programs/amm}/methods/guest/src/bin/amm.rs (100%) rename {amm => programs/amm}/methods/src/lib.rs (100%) rename {amm => programs/amm}/src/add.rs (100%) rename {amm => programs/amm}/src/lib.rs (100%) rename {amm => programs/amm}/src/new_definition.rs (100%) rename {amm => programs/amm}/src/remove.rs (100%) rename {amm => programs/amm}/src/swap.rs (100%) rename {amm => programs/amm}/src/sync.rs (100%) rename {amm => programs/amm}/src/tests.rs (100%) rename {ata => programs/ata}/Cargo.toml (100%) rename {ata => programs/ata}/core/Cargo.toml (100%) rename {ata => programs/ata}/core/src/lib.rs (100%) rename {ata => programs/ata}/methods/Cargo.toml (100%) rename {ata => programs/ata}/methods/build.rs (100%) rename {ata => programs/ata}/methods/guest/Cargo.lock (100%) rename {ata => programs/ata}/methods/guest/Cargo.toml (100%) rename {ata => programs/ata}/methods/guest/src/bin/ata.rs (100%) rename {ata => programs/ata}/methods/src/lib.rs (100%) rename {ata => programs/ata}/src/burn.rs (100%) rename {ata => programs/ata}/src/create.rs (100%) rename {ata => programs/ata}/src/lib.rs (100%) rename {ata => programs/ata}/src/tests.rs (100%) rename {ata => programs/ata}/src/transfer.rs (100%) rename {integration_tests => programs/integration_tests}/Cargo.toml (100%) rename {integration_tests => programs/integration_tests}/src/lib.rs (100%) rename {integration_tests => programs/integration_tests}/tests/amm.rs (100%) rename {integration_tests => programs/integration_tests}/tests/ata.rs (100%) rename {integration_tests => programs/integration_tests}/tests/stablecoin.rs (100%) rename {integration_tests => programs/integration_tests}/tests/token.rs (100%) rename {stablecoin => programs/stablecoin}/Cargo.toml (100%) rename {stablecoin => programs/stablecoin}/core/Cargo.toml (100%) rename {stablecoin => programs/stablecoin}/core/src/lib.rs (100%) rename {stablecoin => programs/stablecoin}/methods/Cargo.toml (100%) rename {stablecoin => programs/stablecoin}/methods/build.rs (100%) rename {stablecoin => programs/stablecoin}/methods/guest/Cargo.lock (100%) rename {stablecoin => programs/stablecoin}/methods/guest/Cargo.toml (100%) rename {stablecoin => programs/stablecoin}/methods/guest/src/bin/stablecoin.rs (100%) rename {stablecoin => programs/stablecoin}/methods/src/lib.rs (100%) rename {stablecoin => programs/stablecoin}/src/lib.rs (100%) rename {stablecoin => programs/stablecoin}/src/open_position.rs (100%) rename {stablecoin => programs/stablecoin}/src/repay_debt.rs (100%) rename {stablecoin => programs/stablecoin}/src/tests.rs (100%) rename {stablecoin => programs/stablecoin}/src/withdraw_collateral.rs (100%) rename {token => programs/token}/Cargo.toml (100%) rename {token => programs/token}/core/Cargo.toml (100%) rename {token => programs/token}/core/src/lib.rs (100%) rename {token => programs/token}/methods/Cargo.toml (100%) rename {token => programs/token}/methods/build.rs (100%) rename {token => programs/token}/methods/guest/Cargo.lock (100%) rename {token => programs/token}/methods/guest/Cargo.toml (100%) rename {token => programs/token}/methods/guest/src/bin/token.rs (100%) rename {token => programs/token}/methods/src/lib.rs (100%) rename {token => programs/token}/src/burn.rs (100%) rename {token => programs/token}/src/initialize.rs (100%) rename {token => programs/token}/src/lib.rs (100%) rename {token => programs/token}/src/mint.rs (100%) rename {token => programs/token}/src/new_definition.rs (100%) rename {token => programs/token}/src/print_nft.rs (100%) rename {token => programs/token}/src/tests.rs (100%) rename {token => programs/token}/src/transfer.rs (100%) rename {twap_oracle => programs/twap_oracle}/Cargo.toml (100%) rename {twap_oracle => programs/twap_oracle}/core/Cargo.toml (100%) rename {twap_oracle => programs/twap_oracle}/core/src/lib.rs (100%) rename {twap_oracle => programs/twap_oracle}/methods/Cargo.toml (100%) rename {twap_oracle => programs/twap_oracle}/methods/build.rs (100%) rename {twap_oracle => programs/twap_oracle}/methods/guest/Cargo.lock (100%) rename {twap_oracle => programs/twap_oracle}/methods/guest/Cargo.toml (100%) rename {twap_oracle => programs/twap_oracle}/methods/guest/src/bin/twap_oracle.rs (100%) rename {twap_oracle => programs/twap_oracle}/methods/src/lib.rs (100%) rename {twap_oracle => programs/twap_oracle}/src/lib.rs (100%) rename {twap_oracle => programs/twap_oracle}/src/noop.rs (100%) diff --git a/CLAUDE.md b/CLAUDE.md index 3b7d7c6..7858749 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -27,8 +27,8 @@ RISC0_DEV_MODE=1 cargo test -p amm_program cargo fmt --all # Build the guest ZK binary (requires risc0 toolchain) -cargo risczero build --manifest-path token/methods/guest/Cargo.toml -cargo risczero build --manifest-path amm/methods/guest/Cargo.toml +cargo risczero build --manifest-path programs/token/methods/guest/Cargo.toml +cargo risczero build --manifest-path programs/amm/methods/guest/Cargo.toml ``` Built binaries output to: `/methods/guest/target/riscv32im-risc0-zkvm-elf/docker/.bin` @@ -38,17 +38,19 @@ Built binaries output to: `/methods/guest/target/riscv32im-risc0-zkvm-e Using the `idl-gen` crate (no external toolchain required — this is what CI uses): ```bash -cargo run -p idl-gen -- token/methods/guest/src/bin/token.rs > artifacts/token-idl.json -cargo run -p idl-gen -- amm/methods/guest/src/bin/amm.rs > artifacts/amm-idl.json -cargo run -p idl-gen -- ata/methods/guest/src/bin/ata.rs > artifacts/ata-idl.json +make idl +``` + +Or individually per program: + +```bash +cargo run -p idl-gen -- programs//methods/guest/src/bin/.rs > artifacts/-idl.json ``` Alternatively, using the `spel` CLI (requires the SPEL toolchain): ```bash -spel generate-idl token/methods/guest/src/bin/token.rs > artifacts/token-idl.json -spel generate-idl amm/methods/guest/src/bin/amm.rs > artifacts/amm-idl.json -spel generate-idl ata/methods/guest/src/bin/ata.rs > artifacts/ata-idl.json +spel generate-idl programs//methods/guest/src/bin/.rs > artifacts/-idl.json ``` Generated IDL files live in `artifacts/`. CI checks that every program under `*/methods/guest/src/bin/` has a corresponding `artifacts/-idl.json` that matches the source. @@ -71,16 +73,17 @@ spel inspect ``` Cargo.toml # Workspace root (excludes guest crates) -token/ - core/src/lib.rs # Data types & Instruction enum (shared with guest) - src/ # Program logic: burn, mint, transfer, initialize, new_definition, print_nft - methods/ # Host-side zkVM method embedding (build.rs uses risc0_build::embed_methods) - methods/guest/ # Guest binary (separate workspace, riscv32im target) -amm/ - core/src/lib.rs # Data types, Instruction enum, PDA computation helpers - src/ # Program logic: add, remove, swap, new_definition - methods/ # Host-side zkVM method embedding - methods/guest/ # Guest binary (separate workspace) +programs/ + token/ + core/src/lib.rs # Data types & Instruction enum (shared with guest) + src/ # Program logic: burn, mint, transfer, initialize, new_definition, print_nft + methods/ # Host-side zkVM method embedding (build.rs uses risc0_build::embed_methods) + methods/guest/ # Guest binary (separate workspace, riscv32im target) + amm/ + core/src/lib.rs # Data types, Instruction enum, PDA computation helpers + src/ # Program logic: add, remove, swap, new_definition + methods/ # Host-side zkVM method embedding + methods/guest/ # Guest binary (separate workspace) ``` ## Architecture diff --git a/Cargo.toml b/Cargo.toml index 4afc2f0..7d68ac5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,45 +1,45 @@ [workspace] members = [ - "token/core", - "token", - "token/methods", - "amm/core", - "amm", - "amm/methods", - "ata/core", - "ata", - "ata/methods", - "twap_oracle/core", - "twap_oracle", - "twap_oracle/methods", - "stablecoin/core", - "stablecoin", - "stablecoin/methods", - "integration_tests", + "programs/token/core", + "programs/token", + "programs/token/methods", + "programs/amm/core", + "programs/amm", + "programs/amm/methods", + "programs/ata/core", + "programs/ata", + "programs/ata/methods", + "programs/twap_oracle/core", + "programs/twap_oracle", + "programs/twap_oracle/methods", + "programs/stablecoin/core", + "programs/stablecoin", + "programs/stablecoin/methods", + "programs/integration_tests", "tools/idl-gen", ] exclude = [ - "token/methods/guest", - "amm/methods/guest", - "ata/methods/guest", - "stablecoin/methods/guest", - "twap_oracle/methods/guest" + "programs/token/methods/guest", + "programs/amm/methods/guest", + "programs/ata/methods/guest", + "programs/stablecoin/methods/guest", + "programs/twap_oracle/methods/guest" ] resolver = "2" [workspace.dependencies] nssa_core = { git = "https://github.com/logos-blockchain/logos-execution-zone.git", tag = "v0.2.0-rc3", features = ["host"] } nssa = { git = "https://github.com/logos-blockchain/logos-execution-zone.git", tag = "v0.2.0-rc3", features = ["test-utils"] } -token_core = { path = "token/core" } -token_program = { path = "token" } -amm_core = { path = "amm/core" } -amm_program = { path = "amm" } -ata_core = { path = "ata/core" } -ata_program = { path = "ata" } -twap_oracle_core = { path = "twap_oracle/core" } -twap_oracle_program = { path = "twap_oracle" } -stablecoin_core = { path = "stablecoin/core" } -stablecoin_program = { path = "stablecoin" } +token_core = { path = "programs/token/core" } +token_program = { path = "programs/token" } +amm_core = { path = "programs/amm/core" } +amm_program = { path = "programs/amm" } +ata_core = { path = "programs/ata/core" } +ata_program = { path = "programs/ata" } +twap_oracle_core = { path = "programs/twap_oracle/core" } +twap_oracle_program = { path = "programs/twap_oracle" } +stablecoin_core = { path = "programs/stablecoin/core" } +stablecoin_program = { path = "programs/stablecoin" } serde = { version = "1.0", features = ["derive"] } borsh = { version = "1.5", features = ["derive"] } risc0-zkvm = { version = "=3.0.5" } diff --git a/Makefile b/Makefile index cdb4652..59e30c7 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ clippy: RISC0_SKIP_BUILD=1 cargo clippy --workspace --all-targets -- -D warnings clippy-guest: - for manifest in token/methods/guest/Cargo.toml amm/methods/guest/Cargo.toml ata/methods/guest/Cargo.toml stablecoin/methods/guest/Cargo.toml twap_oracle/methods/guest/Cargo.toml; do \ + for manifest in programs/*/methods/guest/Cargo.toml; do \ cargo clippy --manifest-path "$$manifest" --all-targets -- -D warnings || exit 1; \ done @@ -17,6 +17,7 @@ fmt: cargo +nightly fmt --all idl: - for program in token amm ata stablecoin twap_oracle; do \ - cargo run -p idl-gen -- "$$program/methods/guest/src/bin/$$program.rs" > "artifacts/$$program-idl.json" || exit 1; \ + for src in programs/*/methods/guest/src/bin/*.rs; do \ + program=$$(basename "$$src" .rs); \ + cargo run -p idl-gen -- "$$src" > "artifacts/$${program}-idl.json" || exit 1; \ done diff --git a/README.md b/README.md index 607ae21..35fad34 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,22 @@ Essential programs for the **Logos Execution Zone (LEZ)** — a zkVM-based execution environment built on [RISC Zero](https://risczero.com/). Programs run inside the RISC Zero zkVM (`riscv32im-risc0-zkvm-elf` target) and interact with the LEZ runtime via the `nssa_core` library. +## Programs + +| Program | Description | +|---|---| +| **token** | Fungible and non-fungible token program — create definitions, mint/burn tokens, transfer, initialize accounts, print NFTs | +| **amm** | Constant-product AMM — add/remove liquidity and swap via chained calls to the token program | +| **ata** | Associated Token Account program — derives and initializes deterministic token holding accounts for a given owner and token definition | +| **stablecoin** | Collateral-backed position program — open collateral positions as a foundation for stablecoin debt issuance | +| **twap_oracle** | TWAP oracle — provides canonical on-chain price accounts consumed by other programs (e.g. stablecoin) | + +## Apps + +| App | Description | +|---|---| +| **amm-ui** | QML-based UI for interacting with the AMM program | + ## Prerequisites - **Rust** — install via [rustup](https://rustup.rs/). The pinned toolchain version is `1.91.1` (set in `rust-toolchain.toml`). @@ -24,7 +40,7 @@ RISC0_SKIP_BUILD=1 cargo clippy --workspace --all-targets -- -D warnings cargo fmt --all # Run unit tests for all programs (no zkVM, no ZK proof generation) -RISC0_DEV_MODE=1 cargo test -p token_program -p amm_program -p ata_program +RISC0_DEV_MODE=1 cargo test -p token_program -p amm_program -p ata_program -p stablecoin_program -p twap_oracle_program # Run integration tests (dev mode skips ZK proof generation) RISC0_DEV_MODE=1 cargo test -p integration_tests @@ -33,11 +49,13 @@ RISC0_DEV_MODE=1 cargo test -p integration_tests RISC0_DEV_MODE=1 cargo test --workspace ``` -Integration tests live in `integration_tests/tests/` and cover `token`, `amm`, and `ata` programs end-to-end through the zkVM using `RISC0_DEV_MODE=1` to skip proof generation. Each test file corresponds to a program: +Integration tests live in `programs/integration_tests/tests/` and cover `token`, `amm`, and `ata` programs end-to-end through the zkVM using `RISC0_DEV_MODE=1` to skip proof generation. Each test file corresponds to a program: + +- `programs/integration_tests/tests/token.rs` +- `programs/integration_tests/tests/amm.rs` +- `programs/integration_tests/tests/ata.rs` -- `integration_tests/tests/token.rs` -- `integration_tests/tests/amm.rs` -- `integration_tests/tests/ata.rs` +`stablecoin` and `twap_oracle` are tested via their own unit tests (`cargo test -p stablecoin_program -p twap_oracle_program`). ## Compile Guest Binaries @@ -60,8 +78,11 @@ Binaries are output to: wallet deploy-program # Example -wallet deploy-program token/methods/guest/target/riscv32im-risc0-zkvm-elf/docker/token.bin -wallet deploy-program amm/methods/guest/target/riscv32im-risc0-zkvm-elf/docker/amm.bin +wallet deploy-program programs/token/methods/guest/target/riscv32im-risc0-zkvm-elf/docker/token.bin +wallet deploy-program programs/amm/methods/guest/target/riscv32im-risc0-zkvm-elf/docker/amm.bin +wallet deploy-program programs/ata/methods/guest/target/riscv32im-risc0-zkvm-elf/docker/ata.bin +wallet deploy-program programs/stablecoin/methods/guest/target/riscv32im-risc0-zkvm-elf/docker/stablecoin.bin +wallet deploy-program programs/twap_oracle/methods/guest/target/riscv32im-risc0-zkvm-elf/docker/twap_oracle.bin ``` To inspect the `ProgramId` of a built binary: @@ -79,17 +100,21 @@ The IDL describes the program's instructions and can be used to interact with a **Using the `idl-gen` crate** (no external toolchain required — this is what CI uses): ```bash -cargo run -p idl-gen -- token/methods/guest/src/bin/token.rs > artifacts/token-idl.json -cargo run -p idl-gen -- amm/methods/guest/src/bin/amm.rs > artifacts/amm-idl.json -cargo run -p idl-gen -- ata/methods/guest/src/bin/ata.rs > artifacts/ata-idl.json +cargo run -p idl-gen -- programs/token/methods/guest/src/bin/token.rs > artifacts/token-idl.json +cargo run -p idl-gen -- programs/amm/methods/guest/src/bin/amm.rs > artifacts/amm-idl.json +cargo run -p idl-gen -- programs/ata/methods/guest/src/bin/ata.rs > artifacts/ata-idl.json +cargo run -p idl-gen -- programs/stablecoin/methods/guest/src/bin/stablecoin.rs > artifacts/stablecoin-idl.json +cargo run -p idl-gen -- programs/twap_oracle/methods/guest/src/bin/twap_oracle.rs > artifacts/twap_oracle-idl.json ``` **Using the `spel` CLI** (requires the SPEL toolchain): ```bash -spel generate-idl token/methods/guest/src/bin/token.rs > artifacts/token-idl.json -spel generate-idl amm/methods/guest/src/bin/amm.rs > artifacts/amm-idl.json -spel generate-idl ata/methods/guest/src/bin/ata.rs > artifacts/ata-idl.json +spel generate-idl programs/token/methods/guest/src/bin/token.rs > artifacts/token-idl.json +spel generate-idl programs/amm/methods/guest/src/bin/amm.rs > artifacts/amm-idl.json +spel generate-idl programs/ata/methods/guest/src/bin/ata.rs > artifacts/ata-idl.json +spel generate-idl programs/stablecoin/methods/guest/src/bin/stablecoin.rs > artifacts/stablecoin-idl.json +spel generate-idl programs/twap_oracle/methods/guest/src/bin/twap_oracle.rs > artifacts/twap_oracle-idl.json ``` Generated IDL files are committed under `artifacts/`. CI will fail if a program's IDL is missing or out of date. @@ -101,4 +126,7 @@ Use `spel --idl [ARGS...]` to call a deployed program instru ```bash spel --idl artifacts/token-idl.json [args...] spel --idl artifacts/amm-idl.json [args...] +spel --idl artifacts/ata-idl.json [args...] +spel --idl artifacts/stablecoin-idl.json [args...] +spel --idl artifacts/twap_oracle-idl.json [args...] ``` diff --git a/amm-ui/README.md b/apps/amm/README.md similarity index 100% rename from amm-ui/README.md rename to apps/amm/README.md diff --git a/amm-ui/flake.lock b/apps/amm/flake.lock similarity index 100% rename from amm-ui/flake.lock rename to apps/amm/flake.lock diff --git a/amm-ui/flake.nix b/apps/amm/flake.nix similarity index 100% rename from amm-ui/flake.nix rename to apps/amm/flake.nix diff --git a/amm-ui/icons/amm.png b/apps/amm/icons/amm.png similarity index 100% rename from amm-ui/icons/amm.png rename to apps/amm/icons/amm.png diff --git a/amm-ui/metadata.json b/apps/amm/metadata.json similarity index 100% rename from amm-ui/metadata.json rename to apps/amm/metadata.json diff --git a/amm-ui/qml/Main.qml b/apps/amm/qml/Main.qml similarity index 100% rename from amm-ui/qml/Main.qml rename to apps/amm/qml/Main.qml diff --git a/amm-ui/qml/NavBar.qml b/apps/amm/qml/NavBar.qml similarity index 100% rename from amm-ui/qml/NavBar.qml rename to apps/amm/qml/NavBar.qml diff --git a/amm-ui/qml/components/liquidity/AddLiquidityForm.qml b/apps/amm/qml/components/liquidity/AddLiquidityForm.qml similarity index 100% rename from amm-ui/qml/components/liquidity/AddLiquidityForm.qml rename to apps/amm/qml/components/liquidity/AddLiquidityForm.qml diff --git a/amm-ui/qml/components/liquidity/EstimateInfoButton.qml b/apps/amm/qml/components/liquidity/EstimateInfoButton.qml similarity index 100% rename from amm-ui/qml/components/liquidity/EstimateInfoButton.qml rename to apps/amm/qml/components/liquidity/EstimateInfoButton.qml diff --git a/amm-ui/qml/components/liquidity/LiquidityActionTabs.qml b/apps/amm/qml/components/liquidity/LiquidityActionTabs.qml similarity index 100% rename from amm-ui/qml/components/liquidity/LiquidityActionTabs.qml rename to apps/amm/qml/components/liquidity/LiquidityActionTabs.qml diff --git a/amm-ui/qml/components/liquidity/LiquidityConfirmationDialog.qml b/apps/amm/qml/components/liquidity/LiquidityConfirmationDialog.qml similarity index 100% rename from amm-ui/qml/components/liquidity/LiquidityConfirmationDialog.qml rename to apps/amm/qml/components/liquidity/LiquidityConfirmationDialog.qml diff --git a/amm-ui/qml/components/liquidity/PoolPositionSummary.qml b/apps/amm/qml/components/liquidity/PoolPositionSummary.qml similarity index 100% rename from amm-ui/qml/components/liquidity/PoolPositionSummary.qml rename to apps/amm/qml/components/liquidity/PoolPositionSummary.qml diff --git a/amm-ui/qml/components/liquidity/RemoveLiquidityForm.qml b/apps/amm/qml/components/liquidity/RemoveLiquidityForm.qml similarity index 100% rename from amm-ui/qml/components/liquidity/RemoveLiquidityForm.qml rename to apps/amm/qml/components/liquidity/RemoveLiquidityForm.qml diff --git a/amm-ui/qml/components/liquidity/SummaryRow.qml b/apps/amm/qml/components/liquidity/SummaryRow.qml similarity index 100% rename from amm-ui/qml/components/liquidity/SummaryRow.qml rename to apps/amm/qml/components/liquidity/SummaryRow.qml diff --git a/amm-ui/qml/components/liquidity/TokenAmountInput.qml b/apps/amm/qml/components/liquidity/TokenAmountInput.qml similarity index 100% rename from amm-ui/qml/components/liquidity/TokenAmountInput.qml rename to apps/amm/qml/components/liquidity/TokenAmountInput.qml diff --git a/amm-ui/qml/components/shared/SlippageToleranceControl.qml b/apps/amm/qml/components/shared/SlippageToleranceControl.qml similarity index 100% rename from amm-ui/qml/components/shared/SlippageToleranceControl.qml rename to apps/amm/qml/components/shared/SlippageToleranceControl.qml diff --git a/amm-ui/qml/components/shared/SuccessToast.qml b/apps/amm/qml/components/shared/SuccessToast.qml similarity index 100% rename from amm-ui/qml/components/shared/SuccessToast.qml rename to apps/amm/qml/components/shared/SuccessToast.qml diff --git a/amm-ui/qml/components/swap/SwapCard.qml b/apps/amm/qml/components/swap/SwapCard.qml similarity index 100% rename from amm-ui/qml/components/swap/SwapCard.qml rename to apps/amm/qml/components/swap/SwapCard.qml diff --git a/amm-ui/qml/components/swap/SwapConfirmationDialog.qml b/apps/amm/qml/components/swap/SwapConfirmationDialog.qml similarity index 100% rename from amm-ui/qml/components/swap/SwapConfirmationDialog.qml rename to apps/amm/qml/components/swap/SwapConfirmationDialog.qml diff --git a/amm-ui/qml/components/swap/SwapSummary.qml b/apps/amm/qml/components/swap/SwapSummary.qml similarity index 100% rename from amm-ui/qml/components/swap/SwapSummary.qml rename to apps/amm/qml/components/swap/SwapSummary.qml diff --git a/amm-ui/qml/components/swap/TokenInput.qml b/apps/amm/qml/components/swap/TokenInput.qml similarity index 100% rename from amm-ui/qml/components/swap/TokenInput.qml rename to apps/amm/qml/components/swap/TokenInput.qml diff --git a/amm-ui/qml/components/swap/TokenListItem.qml b/apps/amm/qml/components/swap/TokenListItem.qml similarity index 100% rename from amm-ui/qml/components/swap/TokenListItem.qml rename to apps/amm/qml/components/swap/TokenListItem.qml diff --git a/amm-ui/qml/components/swap/TokenSelectorModal.qml b/apps/amm/qml/components/swap/TokenSelectorModal.qml similarity index 100% rename from amm-ui/qml/components/swap/TokenSelectorModal.qml rename to apps/amm/qml/components/swap/TokenSelectorModal.qml diff --git a/amm-ui/qml/pages/LiquidityPage.qml b/apps/amm/qml/pages/LiquidityPage.qml similarity index 100% rename from amm-ui/qml/pages/LiquidityPage.qml rename to apps/amm/qml/pages/LiquidityPage.qml diff --git a/amm-ui/qml/pages/SwapPage.qml b/apps/amm/qml/pages/SwapPage.qml similarity index 100% rename from amm-ui/qml/pages/SwapPage.qml rename to apps/amm/qml/pages/SwapPage.qml diff --git a/amm-ui/qml/state/DummyPoolState.qml b/apps/amm/qml/state/DummyPoolState.qml similarity index 100% rename from amm-ui/qml/state/DummyPoolState.qml rename to apps/amm/qml/state/DummyPoolState.qml diff --git a/amm-ui/qml/state/DummySwapState.qml b/apps/amm/qml/state/DummySwapState.qml similarity index 100% rename from amm-ui/qml/state/DummySwapState.qml rename to apps/amm/qml/state/DummySwapState.qml diff --git a/amm/Cargo.toml b/programs/amm/Cargo.toml similarity index 100% rename from amm/Cargo.toml rename to programs/amm/Cargo.toml diff --git a/amm/core/Cargo.toml b/programs/amm/core/Cargo.toml similarity index 100% rename from amm/core/Cargo.toml rename to programs/amm/core/Cargo.toml diff --git a/amm/core/src/lib.rs b/programs/amm/core/src/lib.rs similarity index 100% rename from amm/core/src/lib.rs rename to programs/amm/core/src/lib.rs diff --git a/amm/methods/Cargo.toml b/programs/amm/methods/Cargo.toml similarity index 100% rename from amm/methods/Cargo.toml rename to programs/amm/methods/Cargo.toml diff --git a/amm/methods/build.rs b/programs/amm/methods/build.rs similarity index 100% rename from amm/methods/build.rs rename to programs/amm/methods/build.rs diff --git a/amm/methods/guest/Cargo.lock b/programs/amm/methods/guest/Cargo.lock similarity index 100% rename from amm/methods/guest/Cargo.lock rename to programs/amm/methods/guest/Cargo.lock diff --git a/amm/methods/guest/Cargo.toml b/programs/amm/methods/guest/Cargo.toml similarity index 100% rename from amm/methods/guest/Cargo.toml rename to programs/amm/methods/guest/Cargo.toml diff --git a/amm/methods/guest/src/bin/amm.rs b/programs/amm/methods/guest/src/bin/amm.rs similarity index 100% rename from amm/methods/guest/src/bin/amm.rs rename to programs/amm/methods/guest/src/bin/amm.rs diff --git a/amm/methods/src/lib.rs b/programs/amm/methods/src/lib.rs similarity index 100% rename from amm/methods/src/lib.rs rename to programs/amm/methods/src/lib.rs diff --git a/amm/src/add.rs b/programs/amm/src/add.rs similarity index 100% rename from amm/src/add.rs rename to programs/amm/src/add.rs diff --git a/amm/src/lib.rs b/programs/amm/src/lib.rs similarity index 100% rename from amm/src/lib.rs rename to programs/amm/src/lib.rs diff --git a/amm/src/new_definition.rs b/programs/amm/src/new_definition.rs similarity index 100% rename from amm/src/new_definition.rs rename to programs/amm/src/new_definition.rs diff --git a/amm/src/remove.rs b/programs/amm/src/remove.rs similarity index 100% rename from amm/src/remove.rs rename to programs/amm/src/remove.rs diff --git a/amm/src/swap.rs b/programs/amm/src/swap.rs similarity index 100% rename from amm/src/swap.rs rename to programs/amm/src/swap.rs diff --git a/amm/src/sync.rs b/programs/amm/src/sync.rs similarity index 100% rename from amm/src/sync.rs rename to programs/amm/src/sync.rs diff --git a/amm/src/tests.rs b/programs/amm/src/tests.rs similarity index 100% rename from amm/src/tests.rs rename to programs/amm/src/tests.rs diff --git a/ata/Cargo.toml b/programs/ata/Cargo.toml similarity index 100% rename from ata/Cargo.toml rename to programs/ata/Cargo.toml diff --git a/ata/core/Cargo.toml b/programs/ata/core/Cargo.toml similarity index 100% rename from ata/core/Cargo.toml rename to programs/ata/core/Cargo.toml diff --git a/ata/core/src/lib.rs b/programs/ata/core/src/lib.rs similarity index 100% rename from ata/core/src/lib.rs rename to programs/ata/core/src/lib.rs diff --git a/ata/methods/Cargo.toml b/programs/ata/methods/Cargo.toml similarity index 100% rename from ata/methods/Cargo.toml rename to programs/ata/methods/Cargo.toml diff --git a/ata/methods/build.rs b/programs/ata/methods/build.rs similarity index 100% rename from ata/methods/build.rs rename to programs/ata/methods/build.rs diff --git a/ata/methods/guest/Cargo.lock b/programs/ata/methods/guest/Cargo.lock similarity index 100% rename from ata/methods/guest/Cargo.lock rename to programs/ata/methods/guest/Cargo.lock diff --git a/ata/methods/guest/Cargo.toml b/programs/ata/methods/guest/Cargo.toml similarity index 100% rename from ata/methods/guest/Cargo.toml rename to programs/ata/methods/guest/Cargo.toml diff --git a/ata/methods/guest/src/bin/ata.rs b/programs/ata/methods/guest/src/bin/ata.rs similarity index 100% rename from ata/methods/guest/src/bin/ata.rs rename to programs/ata/methods/guest/src/bin/ata.rs diff --git a/ata/methods/src/lib.rs b/programs/ata/methods/src/lib.rs similarity index 100% rename from ata/methods/src/lib.rs rename to programs/ata/methods/src/lib.rs diff --git a/ata/src/burn.rs b/programs/ata/src/burn.rs similarity index 100% rename from ata/src/burn.rs rename to programs/ata/src/burn.rs diff --git a/ata/src/create.rs b/programs/ata/src/create.rs similarity index 100% rename from ata/src/create.rs rename to programs/ata/src/create.rs diff --git a/ata/src/lib.rs b/programs/ata/src/lib.rs similarity index 100% rename from ata/src/lib.rs rename to programs/ata/src/lib.rs diff --git a/ata/src/tests.rs b/programs/ata/src/tests.rs similarity index 100% rename from ata/src/tests.rs rename to programs/ata/src/tests.rs diff --git a/ata/src/transfer.rs b/programs/ata/src/transfer.rs similarity index 100% rename from ata/src/transfer.rs rename to programs/ata/src/transfer.rs diff --git a/integration_tests/Cargo.toml b/programs/integration_tests/Cargo.toml similarity index 100% rename from integration_tests/Cargo.toml rename to programs/integration_tests/Cargo.toml diff --git a/integration_tests/src/lib.rs b/programs/integration_tests/src/lib.rs similarity index 100% rename from integration_tests/src/lib.rs rename to programs/integration_tests/src/lib.rs diff --git a/integration_tests/tests/amm.rs b/programs/integration_tests/tests/amm.rs similarity index 100% rename from integration_tests/tests/amm.rs rename to programs/integration_tests/tests/amm.rs diff --git a/integration_tests/tests/ata.rs b/programs/integration_tests/tests/ata.rs similarity index 100% rename from integration_tests/tests/ata.rs rename to programs/integration_tests/tests/ata.rs diff --git a/integration_tests/tests/stablecoin.rs b/programs/integration_tests/tests/stablecoin.rs similarity index 100% rename from integration_tests/tests/stablecoin.rs rename to programs/integration_tests/tests/stablecoin.rs diff --git a/integration_tests/tests/token.rs b/programs/integration_tests/tests/token.rs similarity index 100% rename from integration_tests/tests/token.rs rename to programs/integration_tests/tests/token.rs diff --git a/stablecoin/Cargo.toml b/programs/stablecoin/Cargo.toml similarity index 100% rename from stablecoin/Cargo.toml rename to programs/stablecoin/Cargo.toml diff --git a/stablecoin/core/Cargo.toml b/programs/stablecoin/core/Cargo.toml similarity index 100% rename from stablecoin/core/Cargo.toml rename to programs/stablecoin/core/Cargo.toml diff --git a/stablecoin/core/src/lib.rs b/programs/stablecoin/core/src/lib.rs similarity index 100% rename from stablecoin/core/src/lib.rs rename to programs/stablecoin/core/src/lib.rs diff --git a/stablecoin/methods/Cargo.toml b/programs/stablecoin/methods/Cargo.toml similarity index 100% rename from stablecoin/methods/Cargo.toml rename to programs/stablecoin/methods/Cargo.toml diff --git a/stablecoin/methods/build.rs b/programs/stablecoin/methods/build.rs similarity index 100% rename from stablecoin/methods/build.rs rename to programs/stablecoin/methods/build.rs diff --git a/stablecoin/methods/guest/Cargo.lock b/programs/stablecoin/methods/guest/Cargo.lock similarity index 100% rename from stablecoin/methods/guest/Cargo.lock rename to programs/stablecoin/methods/guest/Cargo.lock diff --git a/stablecoin/methods/guest/Cargo.toml b/programs/stablecoin/methods/guest/Cargo.toml similarity index 100% rename from stablecoin/methods/guest/Cargo.toml rename to programs/stablecoin/methods/guest/Cargo.toml diff --git a/stablecoin/methods/guest/src/bin/stablecoin.rs b/programs/stablecoin/methods/guest/src/bin/stablecoin.rs similarity index 100% rename from stablecoin/methods/guest/src/bin/stablecoin.rs rename to programs/stablecoin/methods/guest/src/bin/stablecoin.rs diff --git a/stablecoin/methods/src/lib.rs b/programs/stablecoin/methods/src/lib.rs similarity index 100% rename from stablecoin/methods/src/lib.rs rename to programs/stablecoin/methods/src/lib.rs diff --git a/stablecoin/src/lib.rs b/programs/stablecoin/src/lib.rs similarity index 100% rename from stablecoin/src/lib.rs rename to programs/stablecoin/src/lib.rs diff --git a/stablecoin/src/open_position.rs b/programs/stablecoin/src/open_position.rs similarity index 100% rename from stablecoin/src/open_position.rs rename to programs/stablecoin/src/open_position.rs diff --git a/stablecoin/src/repay_debt.rs b/programs/stablecoin/src/repay_debt.rs similarity index 100% rename from stablecoin/src/repay_debt.rs rename to programs/stablecoin/src/repay_debt.rs diff --git a/stablecoin/src/tests.rs b/programs/stablecoin/src/tests.rs similarity index 100% rename from stablecoin/src/tests.rs rename to programs/stablecoin/src/tests.rs diff --git a/stablecoin/src/withdraw_collateral.rs b/programs/stablecoin/src/withdraw_collateral.rs similarity index 100% rename from stablecoin/src/withdraw_collateral.rs rename to programs/stablecoin/src/withdraw_collateral.rs diff --git a/token/Cargo.toml b/programs/token/Cargo.toml similarity index 100% rename from token/Cargo.toml rename to programs/token/Cargo.toml diff --git a/token/core/Cargo.toml b/programs/token/core/Cargo.toml similarity index 100% rename from token/core/Cargo.toml rename to programs/token/core/Cargo.toml diff --git a/token/core/src/lib.rs b/programs/token/core/src/lib.rs similarity index 100% rename from token/core/src/lib.rs rename to programs/token/core/src/lib.rs diff --git a/token/methods/Cargo.toml b/programs/token/methods/Cargo.toml similarity index 100% rename from token/methods/Cargo.toml rename to programs/token/methods/Cargo.toml diff --git a/token/methods/build.rs b/programs/token/methods/build.rs similarity index 100% rename from token/methods/build.rs rename to programs/token/methods/build.rs diff --git a/token/methods/guest/Cargo.lock b/programs/token/methods/guest/Cargo.lock similarity index 100% rename from token/methods/guest/Cargo.lock rename to programs/token/methods/guest/Cargo.lock diff --git a/token/methods/guest/Cargo.toml b/programs/token/methods/guest/Cargo.toml similarity index 100% rename from token/methods/guest/Cargo.toml rename to programs/token/methods/guest/Cargo.toml diff --git a/token/methods/guest/src/bin/token.rs b/programs/token/methods/guest/src/bin/token.rs similarity index 100% rename from token/methods/guest/src/bin/token.rs rename to programs/token/methods/guest/src/bin/token.rs diff --git a/token/methods/src/lib.rs b/programs/token/methods/src/lib.rs similarity index 100% rename from token/methods/src/lib.rs rename to programs/token/methods/src/lib.rs diff --git a/token/src/burn.rs b/programs/token/src/burn.rs similarity index 100% rename from token/src/burn.rs rename to programs/token/src/burn.rs diff --git a/token/src/initialize.rs b/programs/token/src/initialize.rs similarity index 100% rename from token/src/initialize.rs rename to programs/token/src/initialize.rs diff --git a/token/src/lib.rs b/programs/token/src/lib.rs similarity index 100% rename from token/src/lib.rs rename to programs/token/src/lib.rs diff --git a/token/src/mint.rs b/programs/token/src/mint.rs similarity index 100% rename from token/src/mint.rs rename to programs/token/src/mint.rs diff --git a/token/src/new_definition.rs b/programs/token/src/new_definition.rs similarity index 100% rename from token/src/new_definition.rs rename to programs/token/src/new_definition.rs diff --git a/token/src/print_nft.rs b/programs/token/src/print_nft.rs similarity index 100% rename from token/src/print_nft.rs rename to programs/token/src/print_nft.rs diff --git a/token/src/tests.rs b/programs/token/src/tests.rs similarity index 100% rename from token/src/tests.rs rename to programs/token/src/tests.rs diff --git a/token/src/transfer.rs b/programs/token/src/transfer.rs similarity index 100% rename from token/src/transfer.rs rename to programs/token/src/transfer.rs diff --git a/twap_oracle/Cargo.toml b/programs/twap_oracle/Cargo.toml similarity index 100% rename from twap_oracle/Cargo.toml rename to programs/twap_oracle/Cargo.toml diff --git a/twap_oracle/core/Cargo.toml b/programs/twap_oracle/core/Cargo.toml similarity index 100% rename from twap_oracle/core/Cargo.toml rename to programs/twap_oracle/core/Cargo.toml diff --git a/twap_oracle/core/src/lib.rs b/programs/twap_oracle/core/src/lib.rs similarity index 100% rename from twap_oracle/core/src/lib.rs rename to programs/twap_oracle/core/src/lib.rs diff --git a/twap_oracle/methods/Cargo.toml b/programs/twap_oracle/methods/Cargo.toml similarity index 100% rename from twap_oracle/methods/Cargo.toml rename to programs/twap_oracle/methods/Cargo.toml diff --git a/twap_oracle/methods/build.rs b/programs/twap_oracle/methods/build.rs similarity index 100% rename from twap_oracle/methods/build.rs rename to programs/twap_oracle/methods/build.rs diff --git a/twap_oracle/methods/guest/Cargo.lock b/programs/twap_oracle/methods/guest/Cargo.lock similarity index 100% rename from twap_oracle/methods/guest/Cargo.lock rename to programs/twap_oracle/methods/guest/Cargo.lock diff --git a/twap_oracle/methods/guest/Cargo.toml b/programs/twap_oracle/methods/guest/Cargo.toml similarity index 100% rename from twap_oracle/methods/guest/Cargo.toml rename to programs/twap_oracle/methods/guest/Cargo.toml diff --git a/twap_oracle/methods/guest/src/bin/twap_oracle.rs b/programs/twap_oracle/methods/guest/src/bin/twap_oracle.rs similarity index 100% rename from twap_oracle/methods/guest/src/bin/twap_oracle.rs rename to programs/twap_oracle/methods/guest/src/bin/twap_oracle.rs diff --git a/twap_oracle/methods/src/lib.rs b/programs/twap_oracle/methods/src/lib.rs similarity index 100% rename from twap_oracle/methods/src/lib.rs rename to programs/twap_oracle/methods/src/lib.rs diff --git a/twap_oracle/src/lib.rs b/programs/twap_oracle/src/lib.rs similarity index 100% rename from twap_oracle/src/lib.rs rename to programs/twap_oracle/src/lib.rs diff --git a/twap_oracle/src/noop.rs b/programs/twap_oracle/src/noop.rs similarity index 100% rename from twap_oracle/src/noop.rs rename to programs/twap_oracle/src/noop.rs