From d7db77a840ce4ecb4ac199d79e8a6f20fd645fae Mon Sep 17 00:00:00 2001 From: indirection42 Date: Sat, 26 Jul 2025 17:43:56 +0800 Subject: [PATCH 1/3] simplify entrypoint_list_pools --- guest-examples/swap-info/src/main.rs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/guest-examples/swap-info/src/main.rs b/guest-examples/swap-info/src/main.rs index 562fa67..99b7d31 100644 --- a/guest-examples/swap-info/src/main.rs +++ b/guest-examples/swap-info/src/main.rs @@ -67,12 +67,19 @@ mod swap_info { } #[program::entrypoint] - fn entrypoint_list_pools() -> alloc::vec::Vec<(AssetId, AssetId)> { - list_pools() - } - - #[program::entrypoint] - fn entrypoint_asset_info(asset: AssetId) -> Option { - asset_info(asset) + fn entrypoint_list_pools() -> alloc::vec::Vec<(AssetInfo, AssetInfo)> { + let pools = list_pools(); + let mut result = alloc::vec::Vec::new(); + for pool in pools { + let asset1_info = asset_info(pool.0); + let asset2_info = asset_info(pool.1); + if asset1_info.is_some() && asset2_info.is_some() { + result.push(( + asset1_info.expect("checked before"), + asset2_info.expect("checked before"), + )); + } + } + result } } From 7578d110909910044738db226bd34e4300eece8a Mon Sep 17 00:00:00 2001 From: indirection42 Date: Mon, 28 Jul 2025 11:24:59 +0800 Subject: [PATCH 2/3] add extension_fn: assets_info --- guest-examples/swap-info/src/main.rs | 18 +++++++++++------- pvq-extension-swap/src/lib.rs | 3 +++ pvq-test-runner/src/lib.rs | 6 ++++++ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/guest-examples/swap-info/src/main.rs b/guest-examples/swap-info/src/main.rs index 99b7d31..21431af 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 = 17401483330909459524u64, fn_index = 0)] + #[program::extension_fn(extension_id = 15900548380266538526u64, 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 = 17401483330909459524u64, fn_index = 1)] + #[program::extension_fn(extension_id = 15900548380266538526u64, fn_index = 1)] fn quote_price_exact_tokens_for_tokens( asset1: AssetId, asset2: AssetId, @@ -34,15 +34,18 @@ mod swap_info { ) -> Option { } - #[program::extension_fn(extension_id = 17401483330909459524u64, fn_index = 2)] + #[program::extension_fn(extension_id = 15900548380266538526u64, fn_index = 2)] fn get_liquidity_pool(asset1: AssetId, asset2: AssetId) -> Option<(Balance, Balance)> {} - #[program::extension_fn(extension_id = 17401483330909459524u64, fn_index = 3)] + #[program::extension_fn(extension_id = 15900548380266538526u64, fn_index = 3)] fn list_pools() -> alloc::vec::Vec<(AssetId, AssetId)> {} - #[program::extension_fn(extension_id = 17401483330909459524u64, fn_index = 4)] + #[program::extension_fn(extension_id = 15900548380266538526u64, fn_index = 4)] fn asset_info(asset: AssetId) -> Option {} + #[program::extension_fn(extension_id = 15900548380266538526u64, fn_index = 5)] + fn assets_info() -> alloc::collections::BTreeMap {} + #[program::entrypoint] fn entrypoint_quote_price_exact_tokens_for_tokens( asset1: AssetId, @@ -69,10 +72,11 @@ mod swap_info { #[program::entrypoint] fn entrypoint_list_pools() -> alloc::vec::Vec<(AssetInfo, AssetInfo)> { let pools = list_pools(); + let assets_info = assets_info(); let mut result = alloc::vec::Vec::new(); for pool in pools { - let asset1_info = asset_info(pool.0); - let asset2_info = asset_info(pool.1); + let asset1_info = assets_info.get(&pool.0).cloned(); + let asset2_info = assets_info.get(&pool.1).cloned(); if asset1_info.is_some() && asset2_info.is_some() { result.push(( asset1_info.expect("checked before"), diff --git a/pvq-extension-swap/src/lib.rs b/pvq-extension-swap/src/lib.rs index 02f964e..1b46977 100644 --- a/pvq-extension-swap/src/lib.rs +++ b/pvq-extension-swap/src/lib.rs @@ -5,6 +5,7 @@ use pvq_extension::extension_decl; #[extension_decl] pub mod extension { + use alloc::collections::BTreeMap; use alloc::vec::Vec; #[extension_decl::extension] @@ -32,5 +33,7 @@ pub mod extension { fn list_pools() -> Vec<(Self::AssetId, Self::AssetId)>; fn asset_info(asset: Self::AssetId) -> Option; + + fn assets_info() -> BTreeMap; } } diff --git a/pvq-test-runner/src/lib.rs b/pvq-test-runner/src/lib.rs index 4897dda..770114d 100644 --- a/pvq-test-runner/src/lib.rs +++ b/pvq-test-runner/src/lib.rs @@ -18,6 +18,8 @@ pub enum ExtensionFungiblesFunctions { #[extensions_impl] pub mod extensions { use parity_scale_codec::Decode; + use std::collections::BTreeMap; + #[extensions_impl::impl_struct] pub struct ExtensionsImpl; @@ -77,6 +79,10 @@ pub mod extensions { fn asset_info(_asset: Self::AssetId) -> Option { None } + + fn assets_info() -> BTreeMap { + BTreeMap::new() + } } } From 7b19bc6708c05deab0f6ed1a7f3dced0eb37e3d5 Mon Sep 17 00:00:00 2001 From: indirection42 Date: Mon, 28 Jul 2025 16:03:41 +0800 Subject: [PATCH 3/3] revert --- guest-examples/swap-info/src/main.rs | 25 +++++++++---------------- pvq-extension-swap/src/lib.rs | 3 --- pvq-test-runner/src/lib.rs | 5 ----- 3 files changed, 9 insertions(+), 24 deletions(-) diff --git a/guest-examples/swap-info/src/main.rs b/guest-examples/swap-info/src/main.rs index 21431af..8143a47 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 = 15900548380266538526u64, 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 = 15900548380266538526u64, fn_index = 1)] + #[program::extension_fn(extension_id = 17401483330909459524u64, fn_index = 1)] fn quote_price_exact_tokens_for_tokens( asset1: AssetId, asset2: AssetId, @@ -34,18 +34,15 @@ mod swap_info { ) -> Option { } - #[program::extension_fn(extension_id = 15900548380266538526u64, 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 = 15900548380266538526u64, 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 = 15900548380266538526u64, fn_index = 4)] + #[program::extension_fn(extension_id = 17401483330909459524u64, fn_index = 4)] fn asset_info(asset: AssetId) -> Option {} - #[program::extension_fn(extension_id = 15900548380266538526u64, fn_index = 5)] - fn assets_info() -> alloc::collections::BTreeMap {} - #[program::entrypoint] fn entrypoint_quote_price_exact_tokens_for_tokens( asset1: AssetId, @@ -72,16 +69,12 @@ mod swap_info { #[program::entrypoint] fn entrypoint_list_pools() -> alloc::vec::Vec<(AssetInfo, AssetInfo)> { let pools = list_pools(); - let assets_info = assets_info(); let mut result = alloc::vec::Vec::new(); for pool in pools { - let asset1_info = assets_info.get(&pool.0).cloned(); - let asset2_info = assets_info.get(&pool.1).cloned(); - if asset1_info.is_some() && asset2_info.is_some() { - result.push(( - asset1_info.expect("checked before"), - asset2_info.expect("checked before"), - )); + let asset1_info = asset_info(pool.0.clone()); + let asset2_info = asset_info(pool.1.clone()); + if let (Some(a1), Some(a2)) = (asset1_info, asset2_info) { + result.push((a1, a2)); } } result diff --git a/pvq-extension-swap/src/lib.rs b/pvq-extension-swap/src/lib.rs index 1b46977..02f964e 100644 --- a/pvq-extension-swap/src/lib.rs +++ b/pvq-extension-swap/src/lib.rs @@ -5,7 +5,6 @@ use pvq_extension::extension_decl; #[extension_decl] pub mod extension { - use alloc::collections::BTreeMap; use alloc::vec::Vec; #[extension_decl::extension] @@ -33,7 +32,5 @@ pub mod extension { fn list_pools() -> Vec<(Self::AssetId, Self::AssetId)>; fn asset_info(asset: Self::AssetId) -> Option; - - fn assets_info() -> BTreeMap; } } diff --git a/pvq-test-runner/src/lib.rs b/pvq-test-runner/src/lib.rs index 770114d..8c51b62 100644 --- a/pvq-test-runner/src/lib.rs +++ b/pvq-test-runner/src/lib.rs @@ -18,7 +18,6 @@ pub enum ExtensionFungiblesFunctions { #[extensions_impl] pub mod extensions { use parity_scale_codec::Decode; - use std::collections::BTreeMap; #[extensions_impl::impl_struct] pub struct ExtensionsImpl; @@ -79,10 +78,6 @@ pub mod extensions { fn asset_info(_asset: Self::AssetId) -> Option { None } - - fn assets_info() -> BTreeMap { - BTreeMap::new() - } } }