From 0d24bbbc30b39d0cfb58e5280cec6b9e7744e43e Mon Sep 17 00:00:00 2001 From: Andy Golay Date: Thu, 30 Apr 2026 12:13:33 -0400 Subject: [PATCH 1/3] add view function is_asset_type_dispatchable --- .../framework/aptos-framework/sources/fungible_asset.move | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/aptos-move/framework/aptos-framework/sources/fungible_asset.move b/aptos-move/framework/aptos-framework/sources/fungible_asset.move index 5ce01d8a1db..70536bc1e48 100644 --- a/aptos-move/framework/aptos-framework/sources/fungible_asset.move +++ b/aptos-move/framework/aptos-framework/sources/fungible_asset.move @@ -700,6 +700,13 @@ module aptos_framework::fungible_asset { exists(metadata_addr) } + #[view] + /// Return whether a fungible asset type has any dispatch or derived-supply hooks registered. + public fun is_asset_type_dispatchable(metadata: &Object): bool { + let metadata_addr = object::object_address(metadata); + exists(metadata_addr) || exists(metadata_addr) + } + public fun deposit_dispatch_function(store: Object): Option acquires FungibleStore, DispatchFunctionStore { let fa_store = borrow_store_resource(&store); let metadata_addr = object::object_address(&fa_store.metadata); From 83730eec83b7e85bdf900a1be28638c12c7f89b2 Mon Sep 17 00:00:00 2001 From: Andy Golay Date: Thu, 30 Apr 2026 12:24:59 -0400 Subject: [PATCH 2/3] fix transaction parameter, add unit test --- .../aptos-framework/sources/fungible_asset.move | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/aptos-move/framework/aptos-framework/sources/fungible_asset.move b/aptos-move/framework/aptos-framework/sources/fungible_asset.move index 70536bc1e48..fb7ddb6b9c7 100644 --- a/aptos-move/framework/aptos-framework/sources/fungible_asset.move +++ b/aptos-move/framework/aptos-framework/sources/fungible_asset.move @@ -702,8 +702,8 @@ module aptos_framework::fungible_asset { #[view] /// Return whether a fungible asset type has any dispatch or derived-supply hooks registered. - public fun is_asset_type_dispatchable(metadata: &Object): bool { - let metadata_addr = object::object_address(metadata); + public fun is_asset_type_dispatchable(metadata: Object): bool { + let metadata_addr = object::object_address(&metadata); exists(metadata_addr) || exists(metadata_addr) } @@ -1544,6 +1544,12 @@ module aptos_framework::fungible_asset { remove_store(&delete_ref); } + #[test(creator = @0xcafe)] + fun test_is_asset_type_dispatchable_false_for_plain_fa(creator: &signer) { + let (_, _, _, _, metadata) = create_fungible_asset(creator); + assert!(!is_asset_type_dispatchable(metadata), 1); + } + #[test(creator = @0xcafe, aaron = @0xface)] fun test_e2e_basic_flow( creator: &signer, From 4a6006975122d16f4de4f4b41df2afb7c5c386e6 Mon Sep 17 00:00:00 2001 From: Andy Golay Date: Thu, 30 Apr 2026 12:28:11 -0400 Subject: [PATCH 3/3] add true branch test --- .../aptos-framework/sources/fungible_asset.move | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/aptos-move/framework/aptos-framework/sources/fungible_asset.move b/aptos-move/framework/aptos-framework/sources/fungible_asset.move index fb7ddb6b9c7..dc2959240f1 100644 --- a/aptos-move/framework/aptos-framework/sources/fungible_asset.move +++ b/aptos-move/framework/aptos-framework/sources/fungible_asset.move @@ -1550,6 +1550,16 @@ module aptos_framework::fungible_asset { assert!(!is_asset_type_dispatchable(metadata), 1); } + #[test(creator = @0xcafe)] + fun test_is_asset_type_dispatchable_true_with_derived_supply(creator: &signer) { + let (creator_ref, token_object) = create_test_token(creator); + init_test_metadata(&creator_ref); + let metadata = object::convert(token_object); + assert!(!is_asset_type_dispatchable(metadata), 1); + register_derive_supply_dispatch_function(&creator_ref, option::none()); + assert!(is_asset_type_dispatchable(metadata), 2); + } + #[test(creator = @0xcafe, aaron = @0xface)] fun test_e2e_basic_flow( creator: &signer,