From a85d382f668d9fc5d8844255a91107a83c9f7ca8 Mon Sep 17 00:00:00 2001 From: indirection42 Date: Mon, 28 Jul 2025 21:00:24 +0800 Subject: [PATCH 1/2] add assets_info fn --- guest-examples/swap-info/src/main.rs | 10 +++++++--- pvq-extension-swap/src/lib.rs | 3 +++ pvq-test-runner/src/lib.rs | 6 ++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/guest-examples/swap-info/src/main.rs b/guest-examples/swap-info/src/main.rs index 8143a47..a07e510 100644 --- a/guest-examples/swap-info/src/main.rs +++ b/guest-examples/swap-info/src/main.rs @@ -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, @@ -70,6 +73,7 @@ mod swap_info { fn entrypoint_list_pools() -> alloc::vec::Vec<(AssetInfo, AssetInfo)> { let pools = list_pools(); let mut result = alloc::vec::Vec::new(); + let assets_info = assets_info(); for pool in pools { let asset1_info = asset_info(pool.0.clone()); let asset2_info = asset_info(pool.1.clone()); 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 8c51b62..d9500ff 100644 --- a/pvq-test-runner/src/lib.rs +++ b/pvq-test-runner/src/lib.rs @@ -17,6 +17,8 @@ pub enum ExtensionFungiblesFunctions { #[extensions_impl] pub mod extensions { + use std::collections::BTreeMap; + use parity_scale_codec::Decode; #[extensions_impl::impl_struct] @@ -78,6 +80,10 @@ pub mod extensions { fn asset_info(_asset: Self::AssetId) -> Option { None } + + fn assets_info() -> BTreeMap { + BTreeMap::new() + } } } From e08a15000e88db95feeec28843a0592bd10607a3 Mon Sep 17 00:00:00 2001 From: indirection42 Date: Tue, 29 Jul 2025 12:00:27 +0800 Subject: [PATCH 2/2] fix --- guest-examples/swap-info/src/main.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/guest-examples/swap-info/src/main.rs b/guest-examples/swap-info/src/main.rs index a07e510..10538d9 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, @@ -75,8 +75,8 @@ mod swap_info { let mut result = alloc::vec::Vec::new(); let assets_info = assets_info(); for pool in pools { - let asset1_info = asset_info(pool.0.clone()); - let asset2_info = asset_info(pool.1.clone()); + let asset1_info = assets_info.get(&pool.0).cloned(); + let asset2_info = assets_info.get(&pool.1).cloned(); if let (Some(a1), Some(a2)) = (asset1_info, asset2_info) { result.push((a1, a2)); }