diff options
| author | Monzero Build System <builds@monzero.org> | 2026-08-15 22:11:59 +0100 |
|---|---|---|
| committer | Monzero Build System <builds@monzero.org> | 2026-08-15 22:11:59 +0100 |
| commit | b47eefee8a8b75b7840e29e8758eb361e48b2a04 (patch) | |
| tree | 181a63e3f60127532bf9f3fbd65eff313184b5fc /tests | |
| parent | 98b57835312d2e729eb3527be24e86002a41e202 (diff) | |
| download | monzero-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.cpp | 35 |
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); |
