diff --git a/core_v2/sources/v2_1_domains.move b/core_v2/sources/v2_1_domains.move
index a92f4362..01ada218 100644
--- a/core_v2/sources/v2_1_domains.move
+++ b/core_v2/sources/v2_1_domains.move
@@ -715,7 +715,7 @@ module aptos_names_v2_1::v2_1_domains {
/// Returns the reverse lookup (the token addr) for an address if any.
public fun get_reverse_lookup(
account_addr: address
- ): Option
acquires ReverseRecord, NameRecord {
+ ): Option acquires ReverseRecord, NameRecord, SubdomainExt {
if (!exists(account_addr)) {
return option::none()
};
@@ -728,10 +728,16 @@ module aptos_names_v2_1::v2_1_domains {
return option::none()
};
let token_addr = *option::borrow(&reverse_record.token_addr);
- let record = borrow_global(token_addr);
+ let domain_name = borrow_global(token_addr).domain_name;
+ let subdomain_name = if (exists(token_addr)) {
+ option::some(borrow_global(token_addr).subdomain_name)
+ } else {
+ option::none()
+ };
// check if record is expired
- if (is_time_expired(record.expiration_time_sec)) {
+ let expiration_sec = get_expiration(domain_name, subdomain_name);
+ if (is_time_expired(expiration_sec)) {
return option::none()
};
return reverse_record.token_addr
diff --git a/router/sources/tests/primary_name_tests.move b/router/sources/tests/primary_name_tests.move
index cea5f954..4cdee4aa 100644
--- a/router/sources/tests/primary_name_tests.move
+++ b/router/sources/tests/primary_name_tests.move
@@ -503,4 +503,82 @@ module router::primary_name_tests {
assert!(option::some(domain_name) == user2_primary_domain_name, 3);
assert!(option::some(subdomain_name) == user2_primary_subdomain_name, 4);
}
+
+ #[test(
+ router = @router,
+ aptos_names = @aptos_names,
+ aptos_names_v2_1 = @aptos_names_v2_1,
+ user1 = @0x077,
+ user2 = @0x266f,
+ aptos = @0x1,
+ foundation = @0xf01d
+ )]
+ fun test_expiring_subdomain_name(
+ router: &signer,
+ aptos_names: &signer,
+ aptos_names_v2_1: &signer,
+ user1: signer,
+ user2: signer,
+ aptos: signer,
+ foundation: signer
+ ) {
+ router::init_module_for_test(router);
+
+ // Bump mode
+ router::set_mode(router, 1);
+
+ let users = router_test_helper::e2e_test_setup(aptos_names, aptos_names_v2_1, user1, &aptos, user2, &foundation);
+ let user = vector::borrow(&users, 0);
+ let user_addr = address_of(user);
+ let domain_name = utf8(b"test");
+ let subdomain_name = utf8(b"subtest");
+ let subdomain_name_opt = option::some(subdomain_name);
+
+ // Register domain and subdomain
+ router::register_domain(user, domain_name, SECONDS_PER_YEAR, option::none(), option::none());
+ router::register_subdomain(
+ user,
+ domain_name,
+ subdomain_name,
+ SECONDS_PER_YEAR - 2,
+ 0,
+ false,
+ option::none(),
+ option::none(),
+ );
+
+ // Set subdomain as primary
+ router::set_primary_name(user, domain_name, subdomain_name_opt);
+ {
+ let (primary_subdomain_name, primary_domain_name) = router::get_primary_name(user_addr);
+ assert!(*option::borrow(&primary_domain_name) == domain_name, 1);
+ assert!(*option::borrow(&primary_subdomain_name) == subdomain_name, 2);
+ };
+
+ // Expire the subdomain name
+ v2_1_config::set_reregistration_grace_sec(aptos_names_v2_1, 0);
+ timestamp::update_global_time_for_test_secs(SECONDS_PER_YEAR - 1);
+
+ // Check that the reverse record is none
+ {
+ let (primary_subdomain_name, primary_domain_name) = router::get_primary_name(user_addr);
+ assert!(option::is_none(&primary_domain_name), 1);
+ assert!(option::is_none(&primary_subdomain_name), 2);
+ };
+
+ // Test for expiration policy 1
+ router::domain_admin_set_subdomain_expiration_policy(
+ user,
+ domain_name,
+ subdomain_name,
+ 1
+ );
+
+ // Check that the reverse record is still set because the domain is not expired
+ {
+ let (primary_subdomain_name, primary_domain_name) = router::get_primary_name(user_addr);
+ assert!(*option::borrow(&primary_domain_name) == domain_name, 5);
+ assert!(*option::borrow(&primary_subdomain_name) == subdomain_name, 6);
+ };
+ }
}
\ No newline at end of file