From c02f525b9a396dbb3488af40879493d5f46ce192 Mon Sep 17 00:00:00 2001 From: DavidHerran Date: Wed, 27 May 2026 08:40:37 -0500 Subject: [PATCH] =?UTF-8?q?feat(revive):=20v0.0.40=20=E2=80=94=20pallet-re?= =?UTF-8?q?vive=2010=20integration=20tests=20E2E=20SCAFFOLD-level=20+=20in?= =?UTF-8?q?tegrity=20validation=20=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ship 3 v0.0.40 SHIPPED — pallet-revive Config wiring validation tests E2E. Slice 3.1 SCAFFOLD-level scope: verify Config types correctly wired + constants preserved + AddressMapper trait bound satisfied + integrity formula passes. Real PolkaVM bytecode E2E (upload_code + bare_call + storage deposits actual) deferred a Phase 3.x maduración post cargo-contract v6 install + ink! v6 contract templates Slices 3.2-3.6. Cambios: - crates/origin-chain-runtime/src/lib.rs: +10 tests #[cfg(test)] mod tests: 1. revive_chain_id_eip155_unique_origin_metaverse — ChainId=9_120_005 verified 2. revive_native_to_eth_ratio_one_million_canonical — NativeToEthRatio=1_000_000 3. revive_deposit_per_byte_canonical_milli_ogc — DepositPerByte=MILLI_OGC 4. revive_deposit_per_item_canonical_one_ogc — DepositPerItem=Ogc::ONE 5. revive_evm_bytecode_allowed_canonical — AllowEVMBytecode=true per SBS-5 6. revive_runtime_memory_128_mb_canonical — RuntimeMemory=128 MB 7. revive_pvf_memory_2_gb_canonical_integrity_pass — PVFMemory=2 GB + formula `storage_limit = (PVF-RuntimeMemory)/2 > 700 MB` validated 8. revive_safety_toggles_production_safe_canonical — UnsafeUnstableInterface=false 9. revive_pallet_index_11_canonical_post_governance — Index=11 post Governance 10. revive_address_mapper_account32_returns_h160_canonical — AddressMapper trait bound satisfied compile-time canonical Verificación: - cargo check --workspace clean (27 warnings pre-existentes deprecated) - cargo test --workspace: 213 tests verde 0 failures NO regresiones (baseline 203 + 10 nuevos revive integration tests) - cargo test -p origin-chain-runtime: 26 tests verde (16 baseline + 10 nuevos) - cargo build --features wasm-build: WASM_BINARY 2.8 MB clean - __construct_runtime_integrity_test pallet-revive 0.10.1 PASS empírico Próximo Ship 4 v0.0.41: ReviveApi Runtime API exposure via sp_api::impl_runtime_apis! + LANDMARK Palace Phase 3 SCAFFOLD COMPLETE + monorepo bump + CHARON_ROADMAP_V1.3 refresh sesión 4+ comprehensive. ⚓ Phase 3 Slice 3.1 Ship 3/4 SHIPPED. 213 verde. La nave canonical lista para API exposure. 🤖 Co-Authored-By: Claude Opus 4.7 (1M context) --- crates/origin-chain-runtime/src/lib.rs | 114 +++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/crates/origin-chain-runtime/src/lib.rs b/crates/origin-chain-runtime/src/lib.rs index 0414df1..21bb5e2 100644 --- a/crates/origin-chain-runtime/src/lib.rs +++ b/crates/origin-chain-runtime/src/lib.rs @@ -742,4 +742,118 @@ mod tests { assert_eq!(MILLISECS_PER_BLOCK, 6_000); assert_eq!(SLOT_DURATION, MILLISECS_PER_BLOCK); } + + // ============================================================ + // Phase 3 Slice 3.1 v0.0.40 — pallet-revive integration tests E2E + // SCAFFOLD-level: verify Config wiring + constants + AddressMapper + + // Genesis. Real PolkaVM bytecode E2E deferred a Phase 3.x maduración + // post cargo-contract v6 install + ink! v6 contract templates (Slice 3.2+). + // ============================================================ + + #[test] + fn revive_chain_id_eip155_unique_origin_metaverse() { + // OriginChainId canonical 9_120_005 — EIP-155 unique identifier + // previene cross-chain replay attacks canonical post-mainnet. + use frame_support::traits::Get; + let chain_id: u64 = <::ChainId>::get(); + assert_eq!(chain_id, 9_120_005_u64); + } + + #[test] + fn revive_native_to_eth_ratio_one_million_canonical() { + // OGC 12 decimals → ETH 18 decimals = ratio 10^6 canonical. + // Mapping balance OGC↔ETH-equivalent units para EVM compat. + use frame_support::traits::Get; + let ratio: u32 = <::NativeToEthRatio>::get(); + assert_eq!(ratio, 1_000_000_u32); + } + + #[test] + fn revive_deposit_per_byte_canonical_milli_ogc() { + // Asset Hub pattern adapted OGC tokenomics — 1 MILLI_OGC per byte canonical. + use frame_support::traits::Get; + let deposit_per_byte: Balance = + <::DepositPerByte>::get(); + assert_eq!(deposit_per_byte, MILLI_OGC); + assert_eq!(deposit_per_byte, Ogc::ONE / 1_000); + } + + #[test] + fn revive_deposit_per_item_canonical_one_ogc() { + // Storage item deposit = 1 OGC canonical (gate storage proliferation). + use frame_support::traits::Get; + let deposit_per_item: Balance = + <::DepositPerItem>::get(); + assert_eq!(deposit_per_item, Ogc::ONE); + } + + #[test] + fn revive_evm_bytecode_allowed_canonical() { + // SBS-5 ratificado: Solidity contracts deployables via revive compiler. + // AllowEVMBytecode = true canonical para opens Ethereum dev ecosystem. + use frame_support::traits::Get; + let allow_evm: bool = <::AllowEVMBytecode>::get(); + assert!(allow_evm, "EVM bytecode must be allowed per SBS-5 ratified"); + } + + #[test] + fn revive_runtime_memory_128_mb_canonical() { + // RuntimeMemory canonical 128 MB — runtime memory allocation budget. + use frame_support::traits::Get; + let runtime_memory: u32 = <::RuntimeMemory>::get(); + assert_eq!(runtime_memory, 128_u32 * 1024 * 1024); + } + + #[test] + fn revive_pvf_memory_2_gb_canonical_integrity_pass() { + // PVFMemory canonical 2 GB — required canonical para pass + // __construct_runtime_integrity_test (formula: storage_limit = + // (PVFMemory - RuntimeMemory) / 2 > max_storage_size ~650 MB). + use frame_support::traits::Get; + let pvf_memory: u32 = <::PVFMemory>::get(); + assert_eq!(pvf_memory, 2_u32 * 1024 * 1024 * 1024); + // Verify integrity formula passes canonical + let runtime_memory: u32 = <::RuntimeMemory>::get(); + let storage_limit: u32 = (pvf_memory - runtime_memory) / 2; + // ~960 MB storage limit canonical — comfortably above 650 MB max storage. + assert!( + storage_limit > 700_u32 * 1024 * 1024, + "storage_limit must exceed 700 MB para pallet-revive integrity canonical" + ); + } + + #[test] + fn revive_safety_toggles_production_safe_canonical() { + // Production canonical safety: UnsafeUnstableInterface=false. + // DebugEnabled NO disponible en pallet-revive 0.10.1 (added 0.12+). + use frame_support::traits::Get; + let unsafe_interface: bool = + <::UnsafeUnstableInterface>::get(); + assert!( + !unsafe_interface, + "Unstable interface MUST be disabled en production runtime canonical" + ); + } + + #[test] + fn revive_pallet_index_11_canonical_post_governance() { + // Pallet index canonical: Revive=11 (post Governance=10 Phase 5.1). + // Asegura orden storage migrations canonical canonical preservado. + use frame_support::traits::PalletInfoAccess; + assert_eq!(::index(), 11); + assert_eq!(::name(), "Revive"); + } + + #[test] + fn revive_address_mapper_account32_returns_h160_canonical() { + // AccountId32Mapper canonical: AccountId32 → H160 mapping deterministic. + // BLAKE2b derivation per Asset Hub canonical solochain pattern. + // Slice 3.1 SCAFFOLD: verify mapper type bound, no real address conversion + // (requires pallet runtime context). Phase 3.x maduración: real mapping tests. + use pallet_revive::AddressMapper; + type ConfiguredMapper = ::AddressMapper; + // Compile-time verification que el mapper type implements AddressMapper trait + fn _verify_implements_mapper>() {} + _verify_implements_mapper::(); + } }