From a534ac760d9fbf57764a7b29c7d9a3a7fb00db5d Mon Sep 17 00:00:00 2001 From: indirection42 Date: Thu, 24 Jul 2025 15:40:48 +0800 Subject: [PATCH 1/8] modify list pools --- guest-examples/Cargo.lock | 1 + guest-examples/Cargo.toml | 4 ++++ guest-examples/swap-info/Cargo.toml | 1 + guest-examples/swap-info/src/main.rs | 22 ++++++++++++++++++++-- pvq-extension-swap/src/lib.rs | 4 ++-- 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/guest-examples/Cargo.lock b/guest-examples/Cargo.lock index 00dbc58..183d3a7 100644 --- a/guest-examples/Cargo.lock +++ b/guest-examples/Cargo.lock @@ -101,6 +101,7 @@ dependencies = [ "parity-scale-codec", "polkavm-derive", "pvq-program", + "scale-info", ] [[package]] diff --git a/guest-examples/Cargo.toml b/guest-examples/Cargo.toml index bc31bea..b207de1 100644 --- a/guest-examples/Cargo.toml +++ b/guest-examples/Cargo.toml @@ -15,6 +15,10 @@ resolver = "2" parity-scale-codec = { version = "3", default-features = false, features = [ "derive", ] } +scale-info = { version = "2.11.3", default-features = false, features = [ + "derive", + "serde", +] } pvq-program = { path = "../pvq-program", default-features = false } pvq-program-metadata-gen = { path = "../pvq-program-metadata-gen" } polkavm-derive = { path = "../vendor/polkavm/crates/polkavm-derive" } diff --git a/guest-examples/swap-info/Cargo.toml b/guest-examples/swap-info/Cargo.toml index 0e8d03f..cb18fd0 100644 --- a/guest-examples/swap-info/Cargo.toml +++ b/guest-examples/swap-info/Cargo.toml @@ -5,6 +5,7 @@ edition = "2021" publish = false [dependencies] +scale-info = { workspace = true } parity-scale-codec = { workspace = true } polkavm-derive = { workspace = true } pvq-program = { workspace = true } diff --git a/guest-examples/swap-info/src/main.rs b/guest-examples/swap-info/src/main.rs index 5e89504..2e91c9e 100644 --- a/guest-examples/swap-info/src/main.rs +++ b/guest-examples/swap-info/src/main.rs @@ -9,12 +9,30 @@ mod swap_info { // Actually AssetHub uses xcm::Location as AssetId, but we use opaque Vec because some compilation issues. type AssetId = alloc::vec::Vec; type Balance = u128; + #[derive(Debug, Clone, PartialEq, Eq, parity_scale_codec::Encode, parity_scale_codec::Decode, scale_info::TypeInfo)] + struct AssetInfo { + name: alloc::string::String, + symbol: alloc::string::String, + decimals: u8, + } } else if #[cfg(feature = "acala")] { type AssetId = alloc::vec::Vec; type Balance = u128; + #[derive(Debug, Clone, PartialEq, Eq, parity_scale_codec::Encode, parity_scale_codec::Decode, scale_info::TypeInfo)] + struct AssetInfo { + name: alloc::string::String, + symbol: alloc::string::String, + decimals: u8, + } } else { type AssetId = alloc::vec::Vec; type Balance = u128; + #[derive(Debug, Clone, PartialEq, Eq, parity_scale_codec::Encode, parity_scale_codec::Decode, scale_info::TypeInfo)] + struct AssetInfo { + name: alloc::string::String, + symbol: alloc::string::String, + decimals: u8, + } } } @@ -40,7 +58,7 @@ mod swap_info { fn get_liquidity_pool(asset1: AssetId, asset2: AssetId) -> Option<(Balance, Balance)> {} #[program::extension_fn(extension_id = 13206387959972970661u64, fn_index = 3)] - fn list_pools() -> alloc::vec::Vec<(AssetId, AssetId, Balance, Balance)> {} + fn list_pools() -> alloc::vec::Vec<(AssetInfo, AssetInfo)> {} #[program::entrypoint] fn entrypoint_quote_price_exact_tokens_for_tokens( @@ -66,7 +84,7 @@ mod swap_info { } #[program::entrypoint] - fn entrypoint_list_pools() -> alloc::vec::Vec<(AssetId, AssetId, Balance, Balance)> { + fn entrypoint_list_pools() -> alloc::vec::Vec<(AssetInfo, AssetInfo)> { list_pools() } } diff --git a/pvq-extension-swap/src/lib.rs b/pvq-extension-swap/src/lib.rs index aa4ffb7..bf03195 100644 --- a/pvq-extension-swap/src/lib.rs +++ b/pvq-extension-swap/src/lib.rs @@ -11,6 +11,7 @@ pub mod extension { pub trait ExtensionSwap { type AssetId; type Balance; + type AssetInfo; fn quote_price_tokens_for_exact_tokens( asset1: Self::AssetId, @@ -28,7 +29,6 @@ pub mod extension { fn get_liquidity_pool(asset1: Self::AssetId, asset2: Self::AssetId) -> Option<(Self::Balance, Self::Balance)>; - #[allow(clippy::type_complexity)] - fn list_pools() -> Vec<(Self::AssetId, Self::AssetId, Self::Balance, Self::Balance)>; + fn list_pools() -> Vec<(Self::AssetInfo, Self::AssetInfo)>; } } From 8f09a88d226bbaee9364600bb34f4ceb97042281 Mon Sep 17 00:00:00 2001 From: indirection42 Date: Thu, 24 Jul 2025 15:46:44 +0800 Subject: [PATCH 2/8] modify list_pools fn --- guest-examples/swap-info/Cargo.toml | 4 --- guest-examples/swap-info/src/main.rs | 40 +++++++--------------------- 2 files changed, 10 insertions(+), 34 deletions(-) diff --git a/guest-examples/swap-info/Cargo.toml b/guest-examples/swap-info/Cargo.toml index cb18fd0..070e6b0 100644 --- a/guest-examples/swap-info/Cargo.toml +++ b/guest-examples/swap-info/Cargo.toml @@ -10,7 +10,3 @@ parity-scale-codec = { workspace = true } polkavm-derive = { workspace = true } pvq-program = { workspace = true } cfg-if = { workspace = true } - -[features] -asset-hub = [] -acala = [] diff --git a/guest-examples/swap-info/src/main.rs b/guest-examples/swap-info/src/main.rs index 2e91c9e..fc091ff 100644 --- a/guest-examples/swap-info/src/main.rs +++ b/guest-examples/swap-info/src/main.rs @@ -4,36 +4,16 @@ #[pvq_program::program] mod swap_info { - cfg_if::cfg_if! { - if #[cfg(feature = "asset-hub")] { - // Actually AssetHub uses xcm::Location as AssetId, but we use opaque Vec because some compilation issues. - type AssetId = alloc::vec::Vec; - type Balance = u128; - #[derive(Debug, Clone, PartialEq, Eq, parity_scale_codec::Encode, parity_scale_codec::Decode, scale_info::TypeInfo)] - struct AssetInfo { - name: alloc::string::String, - symbol: alloc::string::String, - decimals: u8, - } - } else if #[cfg(feature = "acala")] { - type AssetId = alloc::vec::Vec; - type Balance = u128; - #[derive(Debug, Clone, PartialEq, Eq, parity_scale_codec::Encode, parity_scale_codec::Decode, scale_info::TypeInfo)] - struct AssetInfo { - name: alloc::string::String, - symbol: alloc::string::String, - decimals: u8, - } - } else { - type AssetId = alloc::vec::Vec; - type Balance = u128; - #[derive(Debug, Clone, PartialEq, Eq, parity_scale_codec::Encode, parity_scale_codec::Decode, scale_info::TypeInfo)] - struct AssetInfo { - name: alloc::string::String, - symbol: alloc::string::String, - decimals: u8, - } - } + type AssetId = alloc::vec::Vec; + type Balance = u128; + #[derive( + Debug, Clone, PartialEq, Eq, parity_scale_codec::Encode, parity_scale_codec::Decode, scale_info::TypeInfo, + )] + pub struct AssetInfo { + pub asset_id: AssetId, + pub name: alloc::string::String, + pub symbol: alloc::string::String, + pub decimals: u8, } #[program::extension_fn(extension_id = 13206387959972970661u64, fn_index = 0)] From 4896a7306adaf59ba5d2434caa14efcf56698247 Mon Sep 17 00:00:00 2001 From: indirection42 Date: Thu, 24 Jul 2025 19:53:35 +0800 Subject: [PATCH 3/8] add asset_info fn to swap extension --- guest-examples/swap-info/src/main.rs | 16 ++++++++++++---- pvq-extension-swap/src/lib.rs | 4 +++- pvq-test-runner/src/lib.rs | 7 ++++++- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/guest-examples/swap-info/src/main.rs b/guest-examples/swap-info/src/main.rs index fc091ff..4f558e5 100644 --- a/guest-examples/swap-info/src/main.rs +++ b/guest-examples/swap-info/src/main.rs @@ -11,8 +11,8 @@ mod swap_info { )] pub struct AssetInfo { pub asset_id: AssetId, - pub name: alloc::string::String, - pub symbol: alloc::string::String, + pub name: alloc::vec::Vec, + pub symbol: alloc::vec::Vec, pub decimals: u8, } @@ -38,7 +38,10 @@ mod swap_info { fn get_liquidity_pool(asset1: AssetId, asset2: AssetId) -> Option<(Balance, Balance)> {} #[program::extension_fn(extension_id = 13206387959972970661u64, fn_index = 3)] - fn list_pools() -> alloc::vec::Vec<(AssetInfo, AssetInfo)> {} + fn list_pools() -> alloc::vec::Vec<(AssetId, AssetId)> {} + + #[program::extension_fn(extension_id = 13206387959972970661u64, fn_index = 4)] + fn asset_info(asset: AssetId) -> Option {} #[program::entrypoint] fn entrypoint_quote_price_exact_tokens_for_tokens( @@ -64,7 +67,12 @@ mod swap_info { } #[program::entrypoint] - fn entrypoint_list_pools() -> alloc::vec::Vec<(AssetInfo, AssetInfo)> { + fn entrypoint_list_pools() -> alloc::vec::Vec<(AssetId, AssetId)> { list_pools() } + + #[program::entrypoint] + fn entrypoint_asset_info(asset: AssetId) -> Option { + asset_info(asset) + } } diff --git a/pvq-extension-swap/src/lib.rs b/pvq-extension-swap/src/lib.rs index bf03195..02f964e 100644 --- a/pvq-extension-swap/src/lib.rs +++ b/pvq-extension-swap/src/lib.rs @@ -29,6 +29,8 @@ pub mod extension { fn get_liquidity_pool(asset1: Self::AssetId, asset2: Self::AssetId) -> Option<(Self::Balance, Self::Balance)>; - fn list_pools() -> Vec<(Self::AssetInfo, Self::AssetInfo)>; + fn list_pools() -> Vec<(Self::AssetId, Self::AssetId)>; + + fn asset_info(asset: Self::AssetId) -> Option; } } diff --git a/pvq-test-runner/src/lib.rs b/pvq-test-runner/src/lib.rs index e9f1b2a..e7ebcf9 100644 --- a/pvq-test-runner/src/lib.rs +++ b/pvq-test-runner/src/lib.rs @@ -43,6 +43,7 @@ pub mod extensions { impl pvq_extension_swap::extension::ExtensionSwap for ExtensionsImpl { type AssetId = Vec; type Balance = u128; + type AssetInfo = (); fn quote_price_tokens_for_exact_tokens( _asset1: Self::AssetId, _asset2: Self::AssetId, @@ -67,9 +68,13 @@ pub mod extensions { Some((100, 100)) } - fn list_pools() -> Vec<(Self::AssetId, Self::AssetId, Self::Balance, Self::Balance)> { + fn list_pools() -> Vec<(Self::AssetId, Self::AssetId)> { vec![] } + + fn asset_info(_asset: Self::AssetId) -> Option { + None + } } } From 973bd407c2c41d905efede061400959d0a15807b Mon Sep 17 00:00:00 2001 From: indirection42 Date: Thu, 24 Jul 2025 20:38:29 +0800 Subject: [PATCH 4/8] fix swap extension id --- guest-examples/swap-info/src/main.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/guest-examples/swap-info/src/main.rs b/guest-examples/swap-info/src/main.rs index 4f558e5..562fa67 100644 --- a/guest-examples/swap-info/src/main.rs +++ b/guest-examples/swap-info/src/main.rs @@ -16,7 +16,7 @@ mod swap_info { pub decimals: u8, } - #[program::extension_fn(extension_id = 13206387959972970661u64, fn_index = 0)] + #[program::extension_fn(extension_id = 17401483330909459524u64, fn_index = 0)] fn quote_price_tokens_for_exact_tokens( asset1: AssetId, asset2: AssetId, @@ -25,7 +25,7 @@ mod swap_info { ) -> Option { } - #[program::extension_fn(extension_id = 13206387959972970661u64, fn_index = 1)] + #[program::extension_fn(extension_id = 17401483330909459524u64, fn_index = 1)] fn quote_price_exact_tokens_for_tokens( asset1: AssetId, asset2: AssetId, @@ -34,13 +34,13 @@ mod swap_info { ) -> Option { } - #[program::extension_fn(extension_id = 13206387959972970661u64, fn_index = 2)] + #[program::extension_fn(extension_id = 17401483330909459524u64, fn_index = 2)] fn get_liquidity_pool(asset1: AssetId, asset2: AssetId) -> Option<(Balance, Balance)> {} - #[program::extension_fn(extension_id = 13206387959972970661u64, fn_index = 3)] + #[program::extension_fn(extension_id = 17401483330909459524u64, fn_index = 3)] fn list_pools() -> alloc::vec::Vec<(AssetId, AssetId)> {} - #[program::extension_fn(extension_id = 13206387959972970661u64, fn_index = 4)] + #[program::extension_fn(extension_id = 17401483330909459524u64, fn_index = 4)] fn asset_info(asset: AssetId) -> Option {} #[program::entrypoint] From c1240aefc892aa982fc175c98ced80e3578abcd7 Mon Sep 17 00:00:00 2001 From: indirection42 Date: Fri, 25 Jul 2025 09:31:15 +0800 Subject: [PATCH 5/8] fix --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f9730a9..6692ef3 100644 --- a/Makefile +++ b/Makefile @@ -13,8 +13,8 @@ guests: $(GUEST_TARGETS) dummy-guests: $(DUMMY_GUEST_TARGETS) guest-%: - cd guest-examples; METADATA_OUTPUT_DIR=$(realpath output) cargo build --release --bin guest-$* -p guest-$* mkdir -p output + cd guest-examples; METADATA_OUTPUT_DIR=$(realpath output) cargo build --release --bin guest-$* -p guest-$* polkatool link --run-only-if-newer -s guest-examples/target/riscv32emac-unknown-none-polkavm/release/guest-$* -o output/guest-$*.polkavm dummy-guest-%: From 8ef7d91c0dd92d90e3fd3c3d14144de918bdca33 Mon Sep 17 00:00:00 2001 From: indirection42 Date: Fri, 25 Jul 2025 09:44:35 +0800 Subject: [PATCH 6/8] build(ci): make toolchain version compatible --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index efde891..5731537 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,7 @@ jobs: submodules: recursive - name: Install toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@1.84.1 with: targets: wasm32-unknown-unknown components: rust-src, rustfmt, clippy @@ -55,7 +55,7 @@ jobs: submodules: recursive - name: Install toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@nightly-2025-06-09 with: components: rust-src, rustfmt, clippy From 2c34585280cda9ca60d3f757cf6830c97a79d5ec Mon Sep 17 00:00:00 2001 From: indirection42 Date: Fri, 25 Jul 2025 09:55:13 +0800 Subject: [PATCH 7/8] try to fix --- .github/workflows/build.yml | 2 +- guest-examples/rust-toolchain.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5731537..3ae13b8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,7 +55,7 @@ jobs: submodules: recursive - name: Install toolchain - uses: dtolnay/rust-toolchain@nightly-2025-06-09 + uses: dtolnay/rust-toolchain@nightly with: components: rust-src, rustfmt, clippy diff --git a/guest-examples/rust-toolchain.toml b/guest-examples/rust-toolchain.toml index 912f4d0..1e64b27 100644 --- a/guest-examples/rust-toolchain.toml +++ b/guest-examples/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "nightly-2025-06-09" +channel = "nightly" components = ["rust-src", "clippy"] From d610dcaf1bbd7ca15c93faaf48833b91bbe161c8 Mon Sep 17 00:00:00 2001 From: indirection42 Date: Fri, 25 Jul 2025 10:14:27 +0800 Subject: [PATCH 8/8] try to fix --- .github/workflows/build.yml | 6 ++++-- guest-examples/rust-toolchain.toml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3ae13b8..e64426e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,12 +22,14 @@ jobs: submodules: recursive - name: Install toolchain - uses: dtolnay/rust-toolchain@1.84.1 + uses: dtolnay/rust-toolchain@stable with: targets: wasm32-unknown-unknown components: rust-src, rustfmt, clippy - uses: Swatinem/rust-cache@v2 + with: + cache-bin: "false" - name: Check format run: cargo fmt --all -- --check @@ -55,7 +57,7 @@ jobs: submodules: recursive - name: Install toolchain - uses: dtolnay/rust-toolchain@nightly + uses: dtolnay/rust-toolchain@stable with: components: rust-src, rustfmt, clippy diff --git a/guest-examples/rust-toolchain.toml b/guest-examples/rust-toolchain.toml index 1e64b27..912f4d0 100644 --- a/guest-examples/rust-toolchain.toml +++ b/guest-examples/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "nightly" +channel = "nightly-2025-06-09" components = ["rust-src", "clippy"]