diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index efde891..e64426e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,6 +28,8 @@ jobs: components: rust-src, rustfmt, clippy - uses: Swatinem/rust-cache@v2 + with: + cache-bin: "false" - name: Check format run: cargo fmt --all -- --check 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-%: 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..070e6b0 100644 --- a/guest-examples/swap-info/Cargo.toml +++ b/guest-examples/swap-info/Cargo.toml @@ -5,11 +5,8 @@ edition = "2021" publish = false [dependencies] +scale-info = { workspace = true } 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 5e89504..562fa67 100644 --- a/guest-examples/swap-info/src/main.rs +++ b/guest-examples/swap-info/src/main.rs @@ -4,21 +4,19 @@ #[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; - } else if #[cfg(feature = "acala")] { - type AssetId = alloc::vec::Vec; - type Balance = u128; - } else { - type AssetId = alloc::vec::Vec; - type Balance = u128; - } + 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::vec::Vec, + pub symbol: alloc::vec::Vec, + 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, @@ -27,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, @@ -36,11 +34,14 @@ 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)] - fn list_pools() -> alloc::vec::Vec<(AssetId, AssetId, Balance, Balance)> {} + #[program::extension_fn(extension_id = 17401483330909459524u64, fn_index = 3)] + fn list_pools() -> alloc::vec::Vec<(AssetId, AssetId)> {} + + #[program::extension_fn(extension_id = 17401483330909459524u64, fn_index = 4)] + fn asset_info(asset: AssetId) -> Option {} #[program::entrypoint] fn entrypoint_quote_price_exact_tokens_for_tokens( @@ -66,7 +67,12 @@ mod swap_info { } #[program::entrypoint] - fn entrypoint_list_pools() -> alloc::vec::Vec<(AssetId, AssetId, Balance, Balance)> { + 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 aa4ffb7..02f964e 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,8 @@ 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::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 + } } }