aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMonzero Build System <builds@monzero.org>2026-08-15 22:11:59 +0100
committerMonzero Build System <builds@monzero.org>2026-08-15 22:11:59 +0100
commitb47eefee8a8b75b7840e29e8758eb361e48b2a04 (patch)
tree181a63e3f60127532bf9f3fbd65eff313184b5fc /tests
parent98b57835312d2e729eb3527be24e86002a41e202 (diff)
downloadmonzero-core-b47eefee8a8b75b7840e29e8758eb361e48b2a04.tar.gz
monzero-core-b47eefee8a8b75b7840e29e8758eb361e48b2a04.tar.xz
monzero-core-b47eefee8a8b75b7840e29e8758eb361e48b2a04.zip
Validate asset extensions against native carriers
Diffstat (limited to 'tests')
-rw-r--r--tests/unit_tests/asset_types.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/unit_tests/asset_types.cpp b/tests/unit_tests/asset_types.cpp
index 5f196301d..bd34398de 100644
--- a/tests/unit_tests/asset_types.cpp
+++ b/tests/unit_tests/asset_types.cpp
@@ -252,6 +252,41 @@ TEST(asset_types, detached_transaction_extension_rejects_malformed_or_unbound_da
EXPECT_FALSE(cryptonote::assets::encode_transaction_extension(extension, encoded, &error));
}
+TEST(asset_types, block_extension_application_verifies_native_carriers_atomically)
+{
+ crypto::public_key issuer_public{};
+ crypto::secret_key issuer_secret{};
+ crypto::generate_keys(issuer_public, issuer_secret);
+
+ cryptonote::assets::transaction_extension extension;
+ extension.network = cryptonote::TESTNET;
+ extension.carrier_prefix_hash.data[0] = 0x31;
+ extension.issuance.descriptor = make_descriptor(cryptonote::TESTNET);
+ extension.issuance.descriptor.issuer_key = issuer_public;
+ extension.issuance.issuer_signature = authorize(
+ extension.issuance.descriptor, issuer_public, issuer_secret);
+
+ cryptonote::assets::asset_registry registry;
+ std::vector<crypto::hash> ids;
+ EXPECT_TRUE(registry.apply_block_extensions(
+ {extension}, {extension.carrier_prefix_hash}, cryptonote::TESTNET, 30, ids));
+ EXPECT_EQ(1u, registry.size());
+ EXPECT_EQ(1u, ids.size());
+
+ registry.detach(30);
+ crypto::hash wrong_carrier = extension.carrier_prefix_hash;
+ wrong_carrier.data[0] ^= 1;
+ EXPECT_FALSE(registry.apply_block_extensions(
+ {extension}, {wrong_carrier}, cryptonote::TESTNET, 31, ids));
+ EXPECT_EQ(0u, registry.size());
+ EXPECT_FALSE(registry.apply_block_extensions(
+ {extension}, {}, cryptonote::TESTNET, 31, ids));
+ EXPECT_EQ(0u, registry.size());
+ EXPECT_FALSE(registry.apply_block_extensions(
+ {extension}, {extension.carrier_prefix_hash}, cryptonote::STAGENET, 31, ids));
+ EXPECT_EQ(0u, registry.size());
+}
+
TEST(asset_types, network_domain_separation)
{
auto mainnet = make_descriptor(cryptonote::MAINNET);