mirror of
https://github.com/logos-blockchain/logos-execution-zone.git
synced 2026-08-25 11:21:12 +00:00
Introduces a new loader_program/loader_core crate pair implementing a Deploy instruction that claims a program's ProgramData PDA account (image_id, segment_number, update_auth, elf_segment), unifying deployment with ordinary PublicTransaction dispatch instead of the separate ProgramDeploymentTransaction path. Measured against every real program in this repo, computing a program's image_id inside the zkVM costs ~1,400-1,500 cycles per byte of deployed bytecode, pushing real deployments to 500M-900M cycles against the 32M public-execution cap (vs. ~27ms natively, since ProgramDeploymentTransaction's equivalent check runs as a plain host function today). To keep the unified dispatch path viable, Deploy is special-cased in from_public_transaction: calls targeting the reserved RESERVED_DEPLOYMENT_PROGRAM_ACCOUNT_ID run loader_core::execute_deploy natively instead of through the interpreted guest executor, wrapped in catch_unwind since the shared execute_deploy logic validates via assert!/expect() like every other guest program, relying on that boundary instead of the zkVM's own panic-to-Result conversion. The loader guest binary is kept buildable and covered by a test that runs it for real and asserts its output matches the native path exactly, so the two can't silently drift apart.