diff --git a/.cap/logs/1780406203-54124.log b/.cap/logs/1780406203-54124.log
deleted file mode 100644
index 2c49e557..00000000
--- a/.cap/logs/1780406203-54124.log
+++ /dev/null
@@ -1,1125 +0,0 @@
-== stdout ==
-
-running 776 tests
-test cli::commands::tests::expected_metadata_hash_comparison_is_case_sensitive ... ok
-test cli::commands::tests::invalid_parser_mapping_returns_error_instead_of_panicking ... ok
-test cli::commands::tests::test_command_execution ... ok
-test ckb_hash_tests::ckb_blake2b256_matches_blank_hash_vector ... ok
-test codegen::assembler::tests::strict_audit_internal_assembler_oracle_for_core_instruction_bytes ... ok
-test codegen::assembler::tests::strict_audit_riscv_immediate_boundaries_are_enforced ... ok
-test cli::commands::tests::production_policy_finds_evidence_less_checked_runtime_proof_plan_gap ... ok
-test codegen::assembler::tests::strict_audit_li_split_handles_negative_32_bit_boundaries ... ok
-test cli::commands::tests::production_policy_finds_evidence_less_on_chain_checked_proof_plan_gap ... ok
-test codegen::calls::tests::fixed_u64_le_width_accepts_hashes_and_byte_arrays ... ok
-test codegen::cell_ops::tests::consumed_operand_var_accepts_named_cell_operands_only ... ok
-test codegen::cell_ops::tests::destroy_absence_scan_is_limited_to_singleton_and_type_id_unique_policies ... ok
-test codegen::cell_ops::tests::identity_and_destruction_policy_labels_are_stable ... ok
-test codegen::calls::tests::canonical_type_names_strip_reference_wrappers ... ok
-test codegen::calls::tests::packed_hash_width_uses_codegen_fixed_byte_type_rules ... ok
-test codegen::frame::tests::large_addi_materializes_out_of_range_immediates ... ok
-test codegen::frame::tests::stack_access_helpers_emit_sp_relative_instructions ... ok
-test codegen::frame::tests::large_addi_uses_single_addi_for_small_immediates ... ok
-test codegen::expr::tests::bool_canonical_check_emits_zero_one_guard ... ok
-test codegen::expr::tests::divisor_nonzero_guard_fails_closed_on_zero ... ok
-test cli::commands::tests::ckb_hash_file_rejects_inputs_above_limit ... ok
-test codegen::runtime::tests::ckb_runtime_syscall_abi_matches_declared_constants ... ok
-test codegen::runtime::tests::checked_runtime_status_register_defaults_to_a1_for_unknown_helpers ... ok
-test codegen::runtime::tests::runtime_helper_classification_tracks_checked_and_hash_helpers ... ok
-test codegen::schema::tests::aggregate_field_layouts_track_tuple_offsets ... ok
-test codegen::schema::tests::fixed_byte_constants_materialize_little_endian_bytes ... ok
-test codegen::schema::tests::fixed_width_helpers_classify_scalar_and_byte_storage ... ok
-test codegen::tests::cell_operation_identity_helpers_stay_in_cell_ops ... ok
-test codegen::tests::dynamic_syscall_index_is_copied_before_large_stack_staging ... ok
-test codegen::assembler::tests::strict_audit_elf_header_and_segments_are_internally_consistent ... ok
-test codegen::tests::consumed_schema_params_use_loaded_cell_size_for_field_checks ... ok
-test codegen::tests::explicit_external_toolchain_paths_are_strict ... ok
-test codegen::tests::generated_collection_assembly_is_internal_assembler_clean ... ok
-test codegen::tests::generated_large_offsets_are_normalized_before_assembly ... ok
-test codegen::tests::internal_assembler_encodes_emitted_instruction_surface ... ok
-test codegen::tests::generated_public_assembly_mnemonics_are_declared ... ok
-test codegen::tests::generated_stdlib_assembly_is_internal_assembler_clean ... ok
-test codegen::tests::generated_functions_use_shared_epilogue_tail ... ok
-test codegen::tests::internal_assembler_encodes_full_width_li_literals ... ok
-test codegen::tests::internal_assembler_keeps_near_unconditional_jump_compact ... ok
-test codegen::tests::internal_assembler_rejects_intentionally_unsupported_mnemonics ... ok
-test codegen::tests::internal_assembler_rejects_unresolved_call_targets ... ok
-test codegen::tests::internal_assembler_encodes_register_conditional_branches ... ok
-test codegen::tests::large_addi_avoids_clobbering_source_register ... ok
-test codegen::tests::machine_cfg_tracks_call_edges_to_local_helpers ... ok
-test codegen::tests::machine_layout_order_rejects_missing_duplicate_or_unknown_blocks ... ok
-test codegen::assembler::tests::strict_audit_relaxed_conditional_branch_within_jal_range_preserves_registers ... ok
-test codegen::tests::machine_layout_plan_builds_explicit_machine_blocks ... ok
-test codegen::tests::machine_layout_plan_builds_register_conditional_branch_blocks ... ok
-test codegen::tests::machine_layout_plan_rejects_branch_target_outside_text ... ok
-test codegen::tests::binary_codegen_materializes_narrow_integer_constants ... ok
-test codegen::tests::machine_reachability_uses_entry_label_not_every_global ... ok
-test codegen::tests::division_codegen_guards_zero_divisors ... ok
-test codegen::tests::outgoing_stack_arg_area_is_16_byte_aligned_at_call_boundaries ... ok
-test codegen::tests::read_ref_runtime_fallback_records_cell_buffer_state ... ok
-test codegen::tests::register_contract_allows_only_entry_wrapper_writes_to_direct_registers ... ok
-test codegen::tests::dynamic_molecule_vector_field_access_validates_full_table_offsets ... ok
-test codegen::tests::rv64_li_boundary_values_materialize_correct_bits ... ok
-test codegen::tests::semantic_molecule_field_access_uses_validated_api_gate ... ok
-test codegen::tests::sp_addi_large_offsets_clobber_only_destination_register ... ok
-test codegen::tests::dynamic_molecule_fixed_field_codegen_checks_full_header_and_exact_span ... ok
-test codegen::tests::state_transition_edges_use_explicit_consumed_binding ... ok
-test codegen::tests::strict_audit_outgoing_stack_args_are_staged_inside_current_frame ... ok
-test codegen::tests::type_hash_missing_output_buffer_slots_report_compile_error ... ok
-test codegen::tests::type_hash_missing_param_slots_report_compile_error ... ok
-test codegen::tests::u128_const_without_fixed_storage_reports_compile_error ... ok
-test codegen::tests::machine_layout_plan_reports_branch_relaxation_metrics ... ok
-test codegen::tests::unaligned_scalar_load_large_offsets_preserve_live_accumulator ... ok
-test codegen::tests::unrepresentable_memory_load_offsets_report_compile_error ... ok
-test codegen::tests::runtime_cast_codegen_checks_narrowing_and_bool_canonicality ... ok
-test codegen::tests::unrepresentable_stack_offsets_report_compile_error ... ok
-test codegen::tests::narrow_arithmetic_codegen_truncates_to_declared_width ... ok
-test debug::tests::test_debug_info_generator ... ok
-test debug::tests::test_dwarf_generation ... ok
-test debug::tests::test_type_registration ... ok
-test debug::tests::test_line_table ... ok
-test docgen::tests::docgen_emits_flat_pool_runtime_input_requirements ... ok
-test codegen::tests::schema_ref_call_preserves_schema_abi_length ... ok
-test docgen::tests::docgen_emits_markdown_for_action ... ok
-test docgen::tests::docgen_emits_transaction_invariant_checked_subconditions ... ok
-test docgen::tests::docgen_html_escapes_module_and_item_text ... ok
-test error::tests::caret_padding_starts_at_span_column ... ok
-test error::tests::caret_width_counts_characters_not_bytes ... ok
-test flow::tests::consumed_flow_tracking_follows_expression_aliases ... ok
-test fmt::tests::format_action_transition_block_for_multiple_edges ... ok
-test fmt::tests::format_indents_preserve_fields_inside_expression_block ... ok
-test fmt::tests::format_preserves_type_policy_metadata ... ok
-test fmt::tests::format_preserves_single_element_tuple_expression ... ok
-test fmt::tests::format_round_trips_inline_if_tuple_expression ... ok
-test fmt::tests::format_round_trips_multiline_expression_block ... ok
-test codegen::tests::internal_assembler_relaxes_out_of_range_conditional_branch ... ok
-test fmt::tests::format_round_trips_preserve_block ... ok
-test fmt::tests::format_round_trips_require_block ... ok
-test fmt::tests::format_round_trips_simple_module ... ok
-test fmt::tests::format_round_trips_stdlib_lifecycle_field_block ... ok
-test fmt::tests::format_single_expr_require_block_uses_compact_form ... ok
-test fmt::tests::format_uses_canonical_assert_and_no_const_semicolon ... ok
-test fmt::tests::format_uses_field_shorthand_when_value_matches_name ... ok
-test incremental::tests::clean_cache_rejects_overflowing_max_age ... ok
-test codegen::tests::stack_pointer_offsets_are_emitted_through_helpers ... ok
-test incremental::tests::clean_cache_skips_output_paths_outside_trusted_root ... ok
-test codegen::tests::vm2_syscall_helpers_emit_executable_status_checked_wrappers ... ok
-test incremental::tests::test_change_detector ... ok
-test ir::tests::all_diverging_match_expression_does_not_leave_unreachable_join ... ok
-test incremental::tests::test_dependency_graph ... ok
-test ir::tests::assert_in_pure_function_lowers_failure_to_abort_terminator ... ok
-test incremental::tests::load_cache_drops_units_with_paths_outside_trusted_root ... ok
-test ir::tests::binary_arithmetic_result_type_preserves_left_operand_width ... ok
-test ir::tests::constant_cast_rejects_out_of_range_u128_narrowing ... ok
-test ir::tests::contextual_integer_binary_operands_lower_to_peer_width ... ok
-test ir::tests::ir_generation_aggregates_lowering_errors_with_source_spans ... ok
-test ir::tests::exhaustive_enum_match_unmatched_path_lowers_to_abort_terminator ... ok
-test ir::tests::ir_straight_line_lifecycle_certificate_rejects_duplicate_consume_without_typecheck ... ok
-test ir::tests::ir_straight_line_lifecycle_certificate_rejects_branch_local_create_without_typecheck ... ok
-test ir::tests::ir_type_value_kind_never_derives_status_kinds ... ok
-test ir::tests::poison_lowering_keeps_value_invalid_while_block_stays_live ... ok
-test incremental::tests::test_incremental_compiler ... ok
-test ir::tests::mixed_width_expression_local_widening_lowers_as_explicit_casts ... ok
-test ir::tests::reference_and_deref_unary_result_types_match_ast_types ... ok
-test ir::tests::require_block_lowers_to_atomic_requires ... ok
-test ir::tests::runtime_narrowing_cast_lowers_as_cast_instruction ... ok
-test ir::tests::status_boundary_ir_verifier_allows_domain_u64_return_tuple_and_call_argument ... ok
-test ir::tests::logical_operators_lower_as_short_circuit_control_flow ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_dropped_raw_syscall_status ... ok
-test ir::tests::preserve_sugar_populates_preserved_fields ... ok
-test ir::tests::status_boundary_ir_verifier_allows_unit_runtime_helper_when_status_is_checked_by_codegen_boundary ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_as_domain_call_argument ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_produced_without_checked_consumer ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_in_tuple_field ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_stored_as_dsl_local ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_returned_as_domain_u64 ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_unit_runtime_helper_status_stored_as_domain_u64 ... ok
-test ir::tests::stdlib_claim_lowers_to_consumed_receipt_and_locked_declared_output ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_constant_destination_width_mismatch ... ok
-test ir::tests::strict_audit_ir_lowering_records_instruction_level_provenance ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_empty_body_blocks ... ok
-test ir::tests::stdlib_transfer_lowers_to_single_consumed_input_and_locked_output ... ok
-test ir::tests::stdlib_settle_lowers_to_consumed_input_and_locked_output ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_extra_consume_set_metadata ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_missing_create_set_metadata ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_missing_terminator_target ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_poisoned_lowering_module ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_poisoned_load_const ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_poisoned_lowering_operand ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_use_not_defined_on_all_paths ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_stale_write_intents_metadata ... ok
-test ir::tests::strict_audit_ir_verifier_reports_instruction_provenance ... ok
-test ir::tests::strict_audit_schema_field_accesses_are_rematerialized_per_cfg_path ... ok
-test codegen::tests::u128_delta_arithmetic_codegen_uses_fixed_byte_storage ... ok
-test lexer::tests::test_byte_string ... ok
-test lexer::tests::test_comment ... ok
-test lexer::tests::test_identifiers ... ok
-test lexer::tests::test_keywords ... ok
-test lexer::tests::test_numbers ... ok
-test lexer::tests::rejects_oversized_identifier ... ok
-test lexer::tests::test_operators ... ok
-test lexer::tests::test_punctuation ... ok
-test lexer::tests::test_string ... ok
-test lexer::tests::test_unterminated_byte_string_errors ... ok
-test lexer::tests::test_unterminated_string_errors ... ok
-test lsp::tests::lsp_position_conversion_treats_crlf_as_single_line_ending ... ok
-test docgen::tests::docgen_emits_invariant_coverage_summary ... ok
-test lsp::tests::lsp_position_incremental_change_applies_crlf_ranges ... ok
-test lsp::tests::lsp_primitive_strict_rejects_legacy_capabilities ... ok
-test lsp::tests::goto_definition_prefers_local_scope_over_top_level_symbol ... ok
-test lsp::tests::lsp_rejects_document_count_over_limit ... ok
-test lsp::tests::find_references_for_locals_stays_in_enclosing_callable_scope ... ok
-test lsp::tests::lsp_reads_primitive_strict_from_manifest ... ok
-test lsp::tests::lsp_rejects_oversized_documents ... ok
-test lsp::tests::test_ckb_namespace_completions ... ok
-test lsp::tests::test_flow_namespace_completions ... ok
-test lsp::tests::test_code_actions_for_lowering_diagnostics ... ok
-test lsp::tests::test_goto_definition_and_references ... ok
-test lsp::tests::test_format_document ... ok
-test lsp::tests::test_incremental_change_applies_utf16_ranges_after_non_bmp_text ... ok
-test lsp::tests::test_incremental_change_ignores_invalid_utf16_ranges ... ok
-test lsp::tests::test_keyword_completions ... ok
-test codegen::tests::entry_dynamic_witness_stack_arg_staging_preserves_cursor_register ... ok
-test lsp::tests::test_lsp_position_conversion_uses_utf16_columns ... ok
-test lsp::tests::test_flow_u8_namespace_completions ... ok
-test lsp::tests::test_parse_errors_become_diagnostics ... ok
-test lsp::tests::test_lsp_server ... ok
-test lsp::tests::test_hover ... ok
-test lsp::tests::test_vec_member_completions_match_supported_helpers ... ok
-test lsp::tests::test_action_hover_includes_lowering_metadata ... ok
-test lsp::tests::test_selection_range_orders_child_before_parent ... ok
-test lsp::tests::test_workspace_diagnostics_check_imported_type_id_collisions ... ok
-test lsp::tests::test_workspace_goto_definition_across_modules ... ok
-test lsp::tests::test_workspace_rename_is_disabled_until_symbol_scoped ... ok
-test optimize::tests::does_not_inline_block_bodies_that_can_capture_call_site_names ... ok
-test optimize::tests::folds_boolean_expressions ... ok
-test optimize::tests::folds_integer_arithmetic ... ok
-test optimize::tests::folds_unsigned_high_bit_integer_operations ... ok
-test optimize::tests::folds_literal_if_statements_without_touching_cell_ops ... ok
-test optimize::tests::propagates_constants_inlines_small_functions_and_removes_dead_code ... ok
-test optimize::tests::unused_let_elimination_preserves_calls_and_stdlib_constraints ... ok
-test package::tests::git_cache_child_check_rejects_path_escape ... ok
-test lsp::tests::test_workspace_references_across_modules ... ok
-test package::tests::git_cache_entry_name_is_hash_only ... ok
-test package::tests::lockfile_consistency_allows_resolved_transitive_path_dependencies ... ok
-test package::tests::lockfile_consistency_reports_stale_and_mismatched_path_sources ... ok
-test lsp::tests::test_lowering_diagnostics_warn_for_fail_closed_runtime_actions ... ok
-test package::tests::lockfile_replace_with_resolved_prunes_removed_dependencies ... ok
-test package::tests::lockfile_consistency_requires_exact_git_revision_match ... ok
-test package::tests::package_manager_accepts_allowed_git_url_transports ... ok
-test package::tests::package_manager_git_checkout_revalidates_full_commit_refs ... ok
-test package::tests::package_manager_git_commands_separate_user_controlled_ref_arguments ... ok
-test package::tests::lockfile_read_from_root_rejects_malformed_lockfiles ... ok
-test package::tests::package_manager_allows_path_dependency_without_version ... ok
-test package::tests::package_manager_rejects_branch_or_tag_git_dependency_before_fetch ... ok
-test package::tests::package_manager_rejects_registry_dependencies_fail_closed ... ok
-test package::tests::package_manager_rejects_local_path_dependency_traversal ... ok
-test package::tests::package_manager_rejects_unpinned_git_dependency_before_fetch ... ok
-test package::tests::package_manager_rejects_unsafe_git_url_transports ... ok
-test package::tests::package_manager_rejects_transitive_path_dependency_cycles ... ok
-test package::tests::package_manager_resolves_local_path_dependencies ... ok
-test package::tests::test_dependency_graph ... ok
-test package::tests::package_manager_resolves_transitive_local_path_dependencies ... ok
-test package::tests::test_version_compatibility ... ok
-test package::tests::test_manifest_serialization ... ok
-test parser::tests::action_where_block_keeps_indented_keyword_like_binding_in_body ... ok
-test parser::tests::action_where_block_allows_indented_following_top_level_item ... ok
-test parser::tests::array_size_uses_checked_target_width_conversion ... ok
-test parser::tests::assignment_range_and_cast_spans_cover_full_expression ... ok
-test parser::tests::binary_expr_spans_cover_full_expression ... ok
-test parser::tests::generic_type_arguments_allow_newlines ... ok
-test parser::tests::hex_literal_exprs_parse_as_integers ... ok
-test parser::tests::identity_policy_diagnostic_uses_bad_policy_span ... ok
-test parser::tests::named_arg_diagnostic_uses_bad_name_span ... ok
-test parser::tests::parser_empty_token_slice_returns_controlled_error ... ok
-test parser::tests::parser_rejects_bang_assert_syntax ... ok
-test parser::tests::parser_rejects_deep_if_expression_before_stack_overflow ... ok
-test parser::tests::parser_rejects_deep_unary_expression_before_stack_overflow ... ok
-test parser::tests::postfix_exprs_cover_the_consumed_source_range ... ok
-test parser::tests::postfix_expr_spans_cover_the_full_postfix_chain ... ok
-test parser::tests::primitive_and_container_exprs_keep_source_spans ... ok
-test parser::tests::struct_init_span_covers_type_name_and_body ... ok
-test parser::tests::test_action_where_column_one_flow_identifier_stays_in_body ... ok
-test parser::tests::test_launch_expression_is_reserved_until_lowering_exists ... ok
-test parser::tests::test_parse_action ... ok
-test lexer::tests::rejects_oversized_string_literal ... ok
-test parser::tests::test_parse_aggregate_invariant_primitives ... ok
-test parser::tests::test_parse_action_transition_block ... ok
-test parser::tests::test_parse_create_field_shorthand ... ok
-test parser::tests::test_parse_expression ... ok
-test parser::tests::test_parse_grouped_use_imports ... ok
-test parser::tests::test_parse_flow_and_action_transition_clause ... ok
-test parser::tests::test_parse_invariant ... ok
-test parser::tests::test_parse_invariant_assert_statement ... ok
-test parser::tests::test_parse_merges_attribute_and_inline_capabilities ... ok
-test parser::tests::test_parse_prefix_source_before_keyword_like_name ... ok
-test parser::tests::test_parse_prefix_source_and_create_target ... ok
-test parser::tests::test_parse_preserve_block ... ok
-test parser::tests::test_parse_preserve_single_field ... ok
-test parser::tests::test_parse_require_block ... ok
-test parser::tests::test_parse_resource ... ok
-test parser::tests::test_parse_type_id_attribute ... ok
-test parser::tests::test_postfix_does_not_cross_statement_newline ... ok
-test parser::tests::test_reject_bare_preserve ... ok
-test parser::tests::test_reject_empty_require_block ... ok
-test parser::tests::test_reject_empty_preserve_block ... ok
-test parser::tests::test_reject_preserve_except ... ok
-test parser::tests::test_reject_preserve_wildcard ... ok
-test parser::tests::test_reject_require_block_with_consume ... ok
-test parser::tests::test_reject_require_block_with_control_flow ... ok
-test parser::tests::test_rejects_action_brace_body ... ok
-test parser::tests::test_rejects_generic_resource_definition ... ok
-test parser::tests::test_rejects_empty_transition_block ... ok
-test parser::tests::test_rejects_legacy_move_clause ... ok
-test parser::tests::test_rejects_read_ref_as_type_qualifier ... ok
-test parser::tests::test_rejects_transition_clause_without_state_colons ... ok
-test parser::tests::test_rejects_type_id_on_action ... ok
-test parser::tests::test_rejects_typed_let_without_initializer ... ok
-test parser::tests::test_rejects_use_as_without_alias ... ok
-test parser::tests::test_rejects_unbraced_match_arms ... ok
-test proof_plan::soundness::tests::strict_pp0103_only_applies_to_checked_runtime_records ... ok
-test proof_plan::soundness::tests::strict_pp0201_only_applies_to_executing_script_args ... ok
-test proof_plan::tests::checked_runtime_without_concrete_evidence_is_not_marked_covered ... ok
-test proof_plan::tests::checked_runtime_proof_plan_claims_include_executable_evidence ... ok
-test proof_plan::tests::metadata_only_invariant_proof_plan_has_no_executable_evidence ... ok
-test proof_plan::tests::checked_static_detail_does_not_create_executable_runtime_evidence ... ok
-test parser::tests::test_rejects_output_parameter_source_prefix ... ok
-test proof_plan::tests::replace_unique_features_are_transaction_scoped ... ok
-test proof_plan::tests::unique_lifecycle_features_have_specific_codegen_evidence_ids ... ok
-test repl::tests::repl_read_limited_line_accepts_bounded_input ... ok
-test resolve::tests::rejects_cross_module_type_dependency_cycles ... ok
-test resolve::tests::test_global_type_resolution_rejects_ambiguous_symbol ... ok
-test resolve::tests::test_grouped_use_resolves_multiple_symbols ... ok
-test resolve::tests::test_imported_type_resolution_uses_exact_module_path ... ok
-test resolve::tests::test_module_resolver ... ok
-test resolve::tests::test_path_resolver ... ok
-test resolve::tests::test_register_module_rejects_deferred_missing_import_when_target_arrives ... ok
-test resolve::tests::test_register_module_rejects_missing_imported_symbol_when_target_is_loaded ... ok
-test resolve::tests::test_rejects_duplicate_local_symbols ... ok
-test resolve::tests::test_rejects_import_alias_collisions ... ok
-test runtime_errors::tests::diagnostic_messages_map_to_runtime_error_codes_where_possible ... ok
-test lsp::tests::test_receipt_hover_includes_flow_metadata ... ok
-test runtime_errors::tests::runtime_error_docs_explain_ckb_code_overlap_channels ... ok
-test runtime_errors::tests::runtime_error_registry_roundtrips_and_has_unique_codes ... ok
-test simulate::tests::array_size_simulator_uses_checked_target_width_for_indices ... ok
-test simulate::tests::simulate_cell_operation_traces ... ok
-test runtime_errors::tests::runtime_error_docs_cover_every_registered_code ... ok
-test simulate::tests::simulate_if_branch ... ok
-test simulate::tests::simulate_pure_arithmetic_action ... ok
-test simulate::tests::simulate_read_ref_traces ... ok
-test simulate::tests::simulate_rejects_wrong_action_arity ... ok
-test simulate::tests::simulate_step_limit ... ok
-test simulate::tests::simulate_unsigned_high_bit_integer_operations ... ok
-test stdlib::collections::tests::collection_public_helpers_do_not_dereference_raw_a0_handles ... ok
-test stdlib::collections::tests::collection_assembly_has_no_raw_syscalls_or_unclassified_helpers ... ok
-test stdlib::collections::tests::test_collection_functions ... ok
-test repl::tests::repl_read_limited_line_rejects_oversized_input ... ok
-test stdlib::collections::tests::test_generate_assembly ... ok
-test stdlib::tests::generated_stdlib_has_no_raw_syscall_wrapper_symbols ... ok
-test stdlib::tests::test_generate_assembly ... ok
-test stdlib::tests::generated_stdlib_omits_raw_syscall_wrappers ... ok
-test stdlib::tests::test_get_function ... ok
-test stdlib::tests::test_scheduler_metadata_generate_molecule_uses_table_layout ... ok
-test stdlib::tests::test_std_functions ... ok
-test syscalls::tests::ckb_debug_syscall_is_not_a_production_inventory_surface ... ok
-test stdlib::tests::test_generate_ckb_assembly_uses_checked_env_helpers ... ok
-test syscalls::tests::emitted_manual_runtime_and_stdlib_helpers_are_classified ... ok
-test syscalls::tests::every_low_level_syscall_spec_is_inventoried ... ok
-test syscalls::tests::helper_inventory_has_no_duplicate_symbols ... ok
-test tests::action_scheduler_witness_bytes_rejects_conflicting_molecule_alias ... ok
-test syscalls::tests::ckb_syscall_abi_matches_checked_baseline ... ok
-test tests::ckb_capacity_calculation_saturates_on_extreme_sizes ... ok
-test tests::branch_local_anonymous_creates_are_rejected_until_effects_are_cfg_aware ... ok
-test tests::ckb_deploy_manifest_rejects_conflicting_cell_dep_locations ... ok
-test tests::ckb_constraints_surface_capacity_planning_for_created_outputs ... ok
-test tests::ckb_deploy_manifest_rejects_incomplete_split_cell_dep_location ... ok
-test runtime_errors::tests::codegen_does_not_emit_unregistered_numeric_fail_literals ... ok
-test tests::ckb_deploy_manifest_rejects_invalid_dep_type ... ok
-test package::tests::package_manager_git_dependency_fails_for_invalid_url ... ok
-test tests::ckb_deploy_manifest_rejects_invalid_hash_type ... ok
-test tests::ckb_deploy_manifest_surfaces_hash_type_and_dep_group_policy ... ok
-test lexer::tests::rejects_oversized_block_comment ... ok
-test codegen::tests::emitted_runtime_helper_symbols_are_classified_in_syscall_inventory ... ok
-test package::tests::package_manager_git_update_fails_closed_on_fetch_error ... ok
-test tests::ckb_target_profile_has_no_policy_exception ... ok
-test tests::collection_fail_closed_feature_names_are_stable ... ok
-test lsp::tests::lsp_loads_sibling_modules_for_standalone_example_imports ... ok
-test tests::ckb_lock_false_return_lowers_to_script_failure ... ok
-test tests::compile_accepts_chain_neutral_timepoint_under_ckb_profile ... ok
-test tests::ckb_u64_syscall_helpers_check_return_code_and_size ... ok
-test tests::compile_accepts_action_witness_source_qualifier ... ok
-test tests::compile_accepts_ckb_header_epoch_api_only_for_ckb_profile ... ok
-test tests::ckb_entry_lock_scope_selects_lock_entrypoint ... ok
-test tests::compile_accepts_ckb_target_profile_timepoint ... ok
-test tests::ckb_dynamic_vector_len_can_drive_mutate_transition ... ok
-test tests::compile_accepts_complete_branch_return_paths ... ok
-test tests::compile_accepts_ckb_shared_create_when_verifier_covered ... ok
-test codegen::tests::internal_assembler_relaxes_out_of_range_register_conditional_branch ... ok
-test tests::ckb_entry_scope_keeps_vec_element_schema_dependencies ... ok
-test tests::compile_accepts_empty_vec_literal_with_declared_type ... ok
-test tests::compile_accepts_flow_initial_create_at_any_declared_state ... ok
-test tests::compile_accepts_explicit_flow_action_edges ... ok
-test tests::compile_accepts_core_input_output_state_transition_edges ... ok
-test tests::compile_accepts_flow_state_name_initializers ... ok
-test tests::compile_accepts_create_field_shorthand ... ok
-test tests::compile_accepts_kernel_effect_capabilities_for_destroy ... ok
-test tests::compile_accepts_flow_edge_returning_to_first_state ... ok
-test tests::compile_accepts_flow_on_custom_state_field ... ok
-test tests::compile_accepts_kernel_effect_capabilities_for_transfer ... ok
-test tests::compile_accepts_lock_args_script_args_binding ... ok
-test tests::compile_accepts_non_initial_flow_create_without_consumed_prior_state ... ok
-test tests::compile_accepts_pure_ckb_target_profile ... ok
-test tests::compile_accepts_named_action_output_and_create_binding ... ok
-test tests::ckb_entry_action_scope_excludes_unselected_unsupported_code ... ok
-test tests::compile_accepts_lock_boundary_param_sources_and_require ... ok
-test tests::compile_accepts_prefix_read_params_as_cell_dep_bindings ... ok
-test tests::compile_accepts_qualified_flow_state_names ... ok
-test tests::compile_allows_struct_type_id_under_ckb_profile ... ok
-test tests::compile_accepts_static_flow_update_to_non_initial_state ... ok
-test tests::compile_allows_actions_and_locks_to_call_pure_functions ... ok
-test tests::compile_allows_unit_function_calls_as_statements ... ok
-test tests::compile_allows_flow_update_to_declared_initial_state_at_type_check ... ok
-test tests::compile_accepts_vec_literals_in_create_fields ... ok
-test tests::compile_accepts_symmetric_where_branch_output_constraints ... ok
-test tests::compile_binds_duplicate_read_refs_by_order_not_name ... ok
-test tests::compile_classifies_resource_merge_amount_sum_as_checked_runtime ... ok
-test tests::compile_binds_read_ref_entry_params_to_cell_deps ... ok
-test tests::compile_binds_read_action_schema_params_to_cell_deps ... ok
-test tests::compile_create_unique_field_identity_emits_runtime_anchor ... ok
-test tests::compile_emits_create_output_field_verification_for_fixed_u64_fields ... ok
-test tests::compile_emits_direct_user_function_calls ... ok
-test tests::compile_classifies_resource_split_amount_subtraction_as_checked_runtime ... ok
-test tests::compile_exposes_ckb_type_id_contract_under_ckb_profile ... ok
-test tests::compile_entry_witness_rejects_payloads_larger_than_buffer ... ok
-test tests::compile_emits_ckb_style_load_cell_abi_for_cell_runtime_summary ... ok
-test tests::compile_classifies_protocol_agnostic_guarded_transition_as_checked_runtime ... ok
-test tests::compile_destroy_policies_are_policy_aware ... ok
-test tests::compile_file_explicit_target_overrides_manifest_build_target ... ok
-test tests::compile_emits_protocol_agnostic_guard_equality_proofplan_records ... ok
-test tests::compile_file_uses_manifest_ckb_target_profile ... ok
-test tests::compile_classifies_guarded_identity_field_merge_as_checked_runtime ... ok
-test tests::compile_folds_local_fixed_array_len_to_constant ... ok
-test tests::compile_file_uses_manifest_build_target_by_default ... ok
-test tests::compile_file_loads_local_path_dependencies_from_cell_manifest ... ok
-test tests::compile_identity_none_is_default_and_hidden ... ok
-test tests::compile_identity_ckb_type_id_emits_metadata ... ok
-test tests::compile_infers_and_validates_read_only_effects ... ok
-test tests::compile_lowers_array_of_tuples_static_index_projection ... ok
-test tests::compile_identity_singleton_type_emits_metadata ... ok
-test tests::compile_ignores_trivial_self_equality_guard_records ... ok
-test tests::compile_lowers_assert_invariant_into_fail_closed_cfg ... ok
-test tests::compile_identity_field_emits_path ... ok
-test tests::compile_lowers_block_tail_if_expressions ... ok
-test tests::compile_identity_script_args_emits_metadata ... ok
-test tests::compile_lowers_byte_string_literals_with_expected_array_type ... ok
-test tests::compile_file_source_content_hash_is_path_independent ... ok
-test tests::compile_lowers_bounded_vec_literal_to_stack_collection ... ok
-test tests::bundled_token_example_strict_ckb_compile_is_admitted ... ok
-test tests::compile_lowers_consumed_input_field_access_through_loaded_cell_bytes ... ok
-test tests::compile_lowers_exhaustive_enum_match_without_wildcard ... ok
-test tests::compile_lowers_if_expression_fixed_byte_const_join_move ... ok
-test tests::compile_lowers_for_range_into_counted_loop_cfg ... ok
-test tests::compile_lowers_fixed_byte_schema_field_comparison ... ok
-test tests::compile_lowers_ckb_group_source_large_immediate_to_riscv_elf ... ok
-test tests::compile_lowers_if_statement_into_basic_blocks ... ok
-test tests::compile_lowers_local_fixed_array_static_index_reads_and_writes ... ok
-test tests::compile_keeps_unchecked_transition_field_runtime_required ... ok
-test tests::compile_lowers_local_constants_into_real_operands ... ok
-test tests::compile_lowers_if_expression_with_join_move ... ok
-test tests::compile_lowers_len_method_to_length_instruction ... ok
-test tests::compile_lowers_local_struct_field_reads_and_writes ... ok
-test tests::compile_lowers_local_tuple_destructuring_to_field_slots ... ok
-test tests::compile_lowers_match_expression_into_branch_cfg ... ok
-test tests::compile_lowers_local_tuple_static_field_reads_and_writes ... ok
-test tests::compile_lowers_numeric_cast_without_zero_fallback ... ok
-test tests::compile_lowers_mutable_assignments_in_loop_bodies ... ok
-test tests::compile_lowers_packed_bool_and_u32_schema_fields_without_aligned_loads ... ok
-test tests::compile_lowers_pure_function_assert_failure_to_abort ... ok
-test tests::compile_lowers_read_ref_schema_field_to_ckb_runtime_assembly ... ok
-test tests::compile_lowers_stack_vec_extend_from_fixed_bytes ... ok
-test tests::compile_lowers_stack_vec_clear_and_is_empty ... ok
-test tests::compile_lowers_read_ref_schema_field_to_ckb_runtime_elf ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_capacity ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_pop ... ok
-test tests::compile_lowers_schema_backed_parameter_field_access_to_elf ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_first_last ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_contains ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_set ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_runtime_push_index ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_insert ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_reverse ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_remove ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_truncate ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_swap ... ok
-test tests::compile_lowers_stack_vec_scalar_capacity ... ok
-test tests::compile_lowers_stack_vec_scalar_contains ... ok
-test tests::compile_lowers_stack_vec_scalar_pop ... ok
-test tests::compile_lowers_stack_vec_scalar_first_last ... ok
-test tests::compile_lowers_stack_vec_scalar_insert ... ok
-test tests::compile_lowers_stack_vec_scalar_remove ... ok
-test tests::compile_lowers_stack_vec_scalar_runtime_push_len_index ... ok
-test tests::compile_lowers_stack_vec_scalar_set ... ok
-test tests::compile_lowers_stack_vec_scalar_reverse ... ok
-test tests::compile_lowers_stack_vec_scalar_truncate ... ok
-test tests::compile_lowers_tail_expr_as_action_return ... ok
-test tests::compile_lowers_stack_vec_scalar_swap ... ok
-test tests::compile_lowers_tail_if_as_action_return ... ok
-test tests::compile_lowers_type_hash_without_generic_call ... ok
-test tests::compile_lowers_vec_with_capacity_to_stack_collection_new ... ok
-test tests::compile_lowers_u128_equality_as_fixed_byte_comparison ... ok
-test tests::compile_merges_if_branch_linear_states_conservatively ... ok
-test codegen::tests::codegen_rejects_generated_far_jump_scratch_relaxation ... ok
-test tests::compile_classifies_hash_committed_output_field_as_guarded ... ok
-test tests::compile_lowers_vec_builtins_without_generic_calls ... ok
-test tests::compile_lowers_while_statement_into_loop_cfg ... ok
-test tests::compile_lowers_zero_builtin_without_generic_call ... ok
-test tests::compile_merges_linear_transfers_inside_if_expressions ... ok
-test tests::compile_lowers_u128_mutate_delta_with_carry_arithmetic ... ok
-test tests::compile_marks_cell_backed_vec_runtime_features ... ok
-test tests::compile_metadata_exposes_ckb_type_id_create_output_plan_under_ckb_profile ... ok
-test tests::compile_metadata_exposes_declared_invariant_proof_plan ... ok
-test tests::compile_merges_linear_transfers_inside_block_tail_if_expressions ... ok
-test tests::compile_metadata_exposes_transaction_and_selected_cell_aggregate_invariants ... ok
-test tests::compile_metadata_exposes_lock_group_proof_plan_for_lock_entry ... ok
-test tests::compile_merges_linear_transfers_inside_match_expressions ... ok
-test tests::compile_metadata_with_options_rejects_strict_legacy_capabilities ... ok
-test tests::compile_metadata_exposes_aggregate_invariant_primitives_in_proof_plan ... ok
-test tests::compile_metadata_proof_plan_preserves_lock_args_source ... ok
-test tests::compile_metadata_warns_for_lock_group_transaction_invariant_scope ... ok
-test tests::compile_metadata_reports_parameterless_action_entrypoint_selection ... ok
-test tests::compile_metadata_declares_molecule_vm_abi ... ok
-test tests::compile_normalizes_same_module_qualified_helper_calls ... ok
-test tests::compile_path_rejects_duplicate_modules_across_source_roots ... ok
-test tests::compile_path_rejects_missing_configured_source_root ... ok
-test tests::compile_path_rejects_missing_path_dependency_manifest ... ok
-test tests::compile_path_accepts_package_root ... ok
-test tests::compile_path_ignores_examples_outside_package_source_roots ... ok
-test tests::compile_path_rejects_non_path_dependencies ... ok
-test tests::compile_package_import_alias_emits_matching_external_callable ... ok
-test tests::compile_metadata_exposes_covenant_proof_plan_for_transfer ... ok
-test tests::compile_path_rejects_path_dependency_traversal ... ok
-test tests::compile_path_rejects_path_dependency_cycles ... ok
-test tests::compile_metadata_with_options_uses_ast_optimizer_for_nonzero_levels ... ok
-test tests::compile_path_supports_custom_entry_directory_modules ... ok
-test tests::compile_materializes_local_fixed_byte_constants_into_rodata ... ok
-test tests::compile_prefers_no_arg_main_for_entry_wrapper ... ok
-test tests::compile_path_supports_configured_source_roots_without_src ... ok
-test tests::compile_merges_linear_transfers_inside_block_expressions ... ok
-test tests::compile_preserves_if_tuple_aggregate_slots ... ok
-test tests::compile_preserves_if_array_aggregate_slots ... ok
-test tests::compile_preserves_create_instructions_in_assembly ... ok
-test tests::compile_preserves_index_and_tuple_projection_in_assembly ... ok
-test tests::compile_preserves_match_tuple_aggregate_slots ... ok
-test tests::compile_rejects_aggregate_invariant_non_fixed_field ... ok
-test tests::compile_rejects_assert_delta_argument_from_cell_read ... ok
-test tests::compile_rejects_assert_invariant_as_tail_return_value ... ok
-test tests::compile_preserves_consume_and_destroy_instructions_in_assembly ... ok
-test tests::compile_rejects_assignment_through_read_only_references ... ok
-test tests::compile_rejects_assignment_to_immutable_array_element ... ok
-test tests::compile_rejects_assignment_to_immutable_tuple_field ... ok
-test tests::compile_preserves_dynamic_witness_cursor_after_lock_args ... ok
-test tests::compile_rejects_assignment_to_temporary_field_targets ... ok
-test tests::compile_rejects_bad_flow_state_field_type_on_main_path ... ok
-test tests::compile_rejects_bare_return_from_value_actions ... ok
-test tests::compile_rejects_asymmetric_where_branch_output_constraints ... ok
-test tests::compile_rejects_binding_assert_invariant_results ... ok
-test tests::compile_rejects_builtin_call_argument_mismatches ... ok
-test tests::compile_rejects_bounded_vec_literal_type_mismatch ... ok
-test tests::compile_lowers_ckb_hash_commitment_comparison_without_fixed_byte_fail_closed ... ok
-test tests::compile_rejects_binding_unit_function_results ... ok
-test tests::compile_rejects_cell_metadata_stdlib_on_non_cell_args ... ok
-test tests::compile_rejects_duplicate_flow_for_same_state_field ... ok
-test tests::compile_rejects_destroy_without_destroy_capability ... ok
-test tests::compile_rejects_core_state_transition_edge_not_in_graph ... ok
-test tests::compile_rejects_duplicate_stable_type_ids ... ok
-test tests::compile_rejects_duplicate_top_level_symbols ... ok
-test tests::compile_rejects_dynamic_require_messages ... ok
-test tests::compile_rejects_empty_array_length_mismatch ... ok
-test tests::compile_rejects_dynamic_assert_invariant_messages ... ok
-test tests::compile_rejects_dynamic_initial_flow_create_state ... ok
-test tests::compile_rejects_dynamic_unique_identity_field ... ok
-test tests::compile_rejects_empty_literal_in_non_vec_context ... ok
-test tests::compile_rejects_enum_payload_variants_until_lowering_exists ... ok
-test tests::compile_rejects_flow_payload_enum_state_field ... ok
-test tests::compile_rejects_flow_by_action_when_explicit_move_uses_different_edge ... ok
-test tests::compile_rejects_flow_by_action_without_exact_move_clause ... ok
-test tests::compile_rejects_forbidden_unwrap_helpers ... ok
-test tests::compile_rejects_flow_receipt_without_state_field ... ok
-test tests::compile_rejects_flow_on_plain_struct ... ok
-test tests::compile_rejects_helper_functions_that_indirectly_call_impure_actions ... ok
-test tests::compile_rejects_heterogeneous_array_literals ... ok
-test tests::compile_rejects_if_expression_branch_type_mismatch ... ok
-test tests::compile_rejects_input_source_outside_action_cell_params ... ok
-test tests::compile_rejects_function_call_argument_mismatches ... ok
-test tests::compile_rejects_incomplete_branch_return_paths ... ok
-test tests::compile_rejects_impure_helper_functions ... ok
-test tests::compile_rejects_invalid_create_field_initializers ... ok
-test tests::compile_rejects_invalid_destroy_policy_shapes ... ok
-test tests::compile_rejects_invalid_enum_match_patterns ... ok
-test tests::compile_rejects_invalid_invariant_assert_expression ... ok
-test tests::compile_rejects_invariant_assert_runtime_operation ... ok
-test tests::compile_rejects_invariant_without_explicit_trigger_and_scope ... ok
-test tests::compile_rejects_local_binding_name_reuse ... ok
-test tests::compile_rejects_local_fixed_array_static_oob_read ... ok
-test tests::compile_rejects_linear_state_changes_hidden_inside_loops ... ok
-test tests::compile_rejects_local_fixed_array_static_oob_write ... ok
-test tests::compile_rejects_local_mutable_reference_aliases ... ok
-test tests::compile_rejects_missing_action_return_paths ... ok
-test tests::compile_rejects_missing_flow_state_create_on_main_path ... ok
-test tests::compile_rejects_missing_function_return_paths ... ok
-test tests::compile_produces_non_empty_riscv_assembly ... ok
-test tests::compile_rejects_non_bool_lock_definitions ... ok
-test tests::compile_rejects_non_bool_assert_condition ... ok
-test tests::compile_rejects_noop_flow_transition_on_main_path ... ok
-test tests::compile_rejects_out_of_range_flow_state_create_on_main_path ... ok
-test tests::compile_preserves_schema_backed_parameter_field_access_in_assembly ... ok
-test tests::compile_rejects_owned_linear_field_assignment ... ok
-test tests::compile_rejects_pure_functions_that_call_locks ... ok
-test tests::compile_rejects_local_references_to_linear_roots ... ok
-test tests::compile_rejects_read_ref_for_non_cell_backed_types ... ok
-test tests::compile_rejects_return_values_from_unit_actions ... ok
-test tests::compile_rejects_payload_or_unknown_enum_variant_values ... ok
-test tests::compile_rejects_pure_functions_that_call_env_runtime_builtins ... ok
-test tests::compile_rejects_pure_functions_that_call_ckb_header_runtime_builtins ... ok
-test tests::compile_rejects_pure_functions_that_call_type_hash_runtime_builtin ... ok
-test tests::compile_rejects_returning_unit_function_results ... ok
-test tests::compile_rejects_state_edge_that_does_not_consume_binding ... ok
-test tests::compile_rejects_string_literals_as_runtime_values ... ok
-test tests::compile_rejects_unbound_assert_delta_argument ... ok
-test tests::compile_rejects_stateful_operations_without_named_linear_cell_operands ... ok
-test tests::compile_rejects_reference_escape_boundaries ... ok
-test tests::compile_rejects_undeclared_action_state_edge ... ok
-test tests::compile_rejects_underdeclared_effect_annotations ... ok
-test tests::compile_rejects_underdeclared_effects_through_calls ... ok
-test tests::compile_rejects_unknown_functions ... ok
-test tests::compile_rejects_unknown_struct_fields ... ok
-test tests::compile_rejects_unknown_or_reserved_named_types ... ok
-test tests::compile_rejects_underdeclared_effects_through_qualified_calls ... ok
-test tests::compile_rejects_unknown_target_profile ... ok
-test tests::compile_rejects_unknown_target_during_option_validation ... ok
-test tests::compile_rejects_unreachable_statements_after_complete_branch_return ... ok
-test tests::compile_rejects_unreachable_statements_after_return ... ok
-test tests::compile_rejects_unsupported_optimization_level ... ok
-test tests::compile_rejects_unstable_schema_field_names ... ok
-test tests::compile_rejects_unstable_callable_parameter_names ... ok
-test tests::compile_rejects_unsound_mutable_parameter_forms ... ok
-test tests::compile_rejects_untyped_empty_array_literals ... ok
-test tests::compile_rejects_unsupported_vec_helper_type_combinations ... ok
-test tests::compile_rejects_wrong_qualified_flow_state_field_initializer ... ok
-test tests::compile_preserves_read_ref_instructions_in_assembly ... ok
-test tests::compile_produces_ckb_elf_without_vm_abi_trailer ... ok
-test tests::compile_result_exposes_nested_fixed_molecule_schema_metadata ... ok
-test tests::compile_produces_non_empty_riscv_elf ... ok
-test tests::compile_rejects_state_transitions_inside_locks ... ok
-test tests::compile_result_exposes_schema_layout_metadata ... ok
-test tests::compile_rejects_lock_boundary_sources_outside_supported_scope ... ok
-test tests::compile_result_validation_rejects_assembly_with_vm_abi_trailer ... ok
-test tests::compile_result_validation_rejects_compiler_version_mismatch ... ok
-test tests::compile_replace_unique_field_identity_compares_input_and_output ... ok
-test tests::compile_result_validation_rejects_constraints_artifact_format_mismatch ... ok
-test tests::compile_result_validation_rejects_constraints_artifact_size_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_artifact_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_artifact_format_mismatch ... ok
-test tests::compile_result_exposes_scheduler_metadata_sidecar ... ok
-test tests::compile_result_validation_accepts_current_outputs ... ok
-test tests::compile_result_validation_rejects_mismatched_ckb_output_data_binding ... ok
-test tests::compile_reports_equivalent_state_transition_obligation_for_sugar_and_core_forms ... ok
-test tests::compile_result_validation_rejects_mismatched_ckb_type_id_create_output_plan ... ok
-test tests::compile_result_validation_rejects_metadata_schema_downgrade ... ok
-test tests::compile_result_validation_rejects_metadata_artifact_size_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_source_content_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_schema_version_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_source_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_target_profile_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_target_profile_v0_14_abi_mismatch ... ok
-test tests::compile_result_validation_rejects_type_id_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_molecule_schema_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_noncanonical_source_unit_hash ... ok
-test tests::compile_result_validation_rejects_missing_metadata_artifact_size ... ok
-test tests::compile_result_writes_artifact_to_disk ... ok
-test tests::compile_result_validation_rejects_tampered_artifact_hash ... ok
-test tests::compile_riscv_elf_accepts_full_width_u64_literals ... ok
-test tests::compile_supports_typed_empty_array_literals ... ok
-test tests::compile_spills_parameters_and_returns_computed_value ... ok
-test tests::compile_tracks_linear_values_returned_from_complete_branches ... ok
-test tests::compile_tracks_linear_values_returned_from_tail_if_branches ... ok
-test tests::compile_unrolls_local_fixed_array_foreach_without_runtime_indexing ... ok
-test tests::compile_unrolls_fixed_param_array_foreach_with_pointer_abi ... ok
-test tests::compile_unrolls_local_array_of_tuples_foreach_destructuring ... ok
-test tests::compile_lowers_stack_vec_fixed_schema_values ... ok
-test tests::compile_surfaces_type_level_hash_type_dsl_metadata ... ok
-test tests::compile_tracks_linear_values_inside_aggregate_bindings ... ok
-test tests::compile_verifies_create_output_against_consumed_input_field_alias ... ok
-test tests::compile_uses_ast_optimizer_for_nonzero_optimization_levels ... ok
-test tests::compiled_riscv_elf_contains_exit_trampoline ... ok
-test tests::default_output_path_for_package_input_uses_build_dir ... ok
-test tests::default_output_path_for_package_input_uses_manifest_out_dir ... ok
-test tests::compile_verifies_create_output_against_computed_scalar_stack_value ... ok
-test tests::compile_verifies_created_scalar_fields_against_consumed_input_aliases ... ok
-test tests::create_output_verifier_accepts_const_lock_hash ... ok
-test tests::compile_verifies_created_output_bool_and_u32_fields ... ok
-test tests::create_output_verifier_accepts_fixed_byte_params_and_consts ... ok
-test tests::compile_verifies_constructed_fixed_width_vec_output ... ok
-test tests::entry_abi_constraints_mark_extreme_slot_counts_unsupported ... ok
-test tests::compile_verifies_large_output_field_requirements_without_partial_fallback ... ok
-test tests::entry_witness_bool_params_are_canonicalized ... ok
-test tests::entry_witness_encoder_matches_u64_wrapper_abi ... ok
-test tests::entry_witness_encoder_includes_schema_backed_params_as_length_prefixed_bytes ... ok
-test tests::entry_witness_encoder_supports_fixed_byte_params ... ok
-test tests::dynamic_mutable_schema_transitions_are_checked_after_table_decoding ... ok
-test tests::dynamic_schema_fixed_field_access_is_table_decoded ... ok
-test tests::compile_unique_script_args_and_singleton_identity_emit_hash_checks ... ok
-test tests::internal_calls_keep_outgoing_stack_area_abi_aligned ... ok
-test tests::fixed_enum_fields_have_molecule_schema_metadata ... ok
-test tests::dynamic_schema_fixed_vec_length_is_table_decoded ... ok
-test tests::ir_carries_flow_rules ... ok
-test tests::ir_lowers_unit_function_calls_without_result_destinations ... ok
-test tests::ir_preserves_function_call_return_types ... ok
-test tests::ir_rejects_unknown_call_return_types_without_u64_fallback ... ok
-test tests::dynamic_schema_fixed_vec_iteration_is_table_decoded ... ok
-test tests::generated_outgoing_stack_reservations_are_psabi_aligned ... ok
-test tests::ir_summary_captures_cell_runtime_accesses ... ok
-test tests::load_modules_for_input_collects_package_source_roots ... ok
-test tests::dynamic_named_output_constraints_are_proven_in_where_block ... ok
-test tests::package_entry_must_stay_inside_package_root ... ok
-test tests::package_out_dir_must_stay_inside_package_root ... ok
-test tests::compile_riscv_elf_accepts_large_schema_field_offsets ... ok
-test tests::package_source_roots_must_stay_inside_package_root ... ok
-test tests::primitive_compat_predicates_match_validator_modes ... ok
-test tests::generic_shared_mutation_does_not_emit_pool_pattern_metadata ... ok
-test tests::loaded_artifact_validation_rejects_metadata_artifact_size_mismatch ... ok
-test tests::fixed_byte_mutable_state_set_transition_is_checked_under_ckb_profile ... ok
-test tests::compile_riscv_elf_accepts_large_stack_offsets ... ok
-test tests::resolve_input_path_accepts_package_root_and_manifest ... ok
-test tests::scheduler_witness_hex_decode_rejects_invalid_metadata_hex ... ok
-test tests::proof_plan_cross_references_matching_action_obligation_for_invariant ... ok
-test tests::entry_witness_wrapper_supports_scalar_stack_args ... ok
-test tests::tuple_return_abi_rejects_more_than_eight_fields ... ok
-test tests::source_unit_disk_verification_accepts_paths_inside_trusted_root ... ok
-test tests::named_action_output_create_binding_reuses_declared_output_index ... ok
-test tests::source_unit_disk_verification_rejects_paths_outside_trusted_root ... ok
-test tests::vm_abi_trailer_detection_requires_complete_zero_reserved_trailer ... ok
-test types::tests::block_expression_merges_existing_vec_refinements ... ok
-test types::tests::branch_local_consume_is_rejected_until_lifecycle_effects_are_cfg_aware ... ok
-test tests::proof_plan_checked_static_excluded_from_on_chain_checked_obligations ... ok
-test types::tests::branch_local_create_is_rejected_until_lifecycle_effects_are_cfg_aware ... ok
-test types::tests::byte_string_literal_type_uses_actual_length ... ok
-test types::tests::call_arguments_do_not_coerce_mut_ref_to_ref ... ok
-test types::tests::check_without_resolver_rejects_imports ... ok
-test types::tests::compound_assign_rejects_implicit_narrowing ... ok
-test types::tests::compound_assign_uses_numeric_binary_rules ... ok
-test types::tests::const_initializers_allow_supported_literals ... ok
-test types::tests::const_initializers_reject_cell_backed_types ... ok
-test types::tests::const_initializers_reject_cell_lifecycle_expressions ... ok
-test types::tests::const_initializers_reject_computed_expressions ... ok
-test types::tests::constant_narrowing_casts_must_fit ... ok
-test types::tests::contextual_integer_literals_fit_declared_widths ... ok
-test types::tests::cyclic_schema_type_dependencies_are_rejected ... ok
-test types::tests::duplicate_lifecycle_binding_is_rejected_until_effects_are_cfg_aware ... ok
-test types::tests::expected_type_does_not_widen_non_literal_abi_arg_boundary ... ok
-test types::tests::expected_type_does_not_widen_non_literal_let_boundary ... ok
-test types::tests::expected_type_does_not_widen_non_literal_field_boundary ... ok
-test tests::v014_runtime_helpers_fail_closed_when_not_executable ... ok
-test tests::parameterized_entrypoint_emits_witness_entry_wrapper ... ok
-test types::tests::expected_type_does_not_widen_non_literal_return_boundary ... ok
-test types::tests::explicit_cast_can_cross_integer_width_boundary ... ok
-test types::tests::expression_branch_unreachable_code_is_rejected_by_typechecker ... ok
-test types::tests::generic_reference_detection_uses_type_structure ... ok
-test tests::strict_audit_codegen_emits_only_aligned_stack_pointer_deltas ... ok
-test tests::proof_plan_marks_invariant_action_evidence_as_non_exhaustive ... ok
-test types::tests::if_statement_merges_matching_vec_refinements ... ok
-test types::tests::if_statement_rejects_divergent_vec_refinements ... ok
-test types::tests::if_statement_rejects_one_sided_vec_refinement ... ok
-test types::tests::imported_and_qualified_names_compare_as_same_type ... ok
-test types::tests::if_expression_preserves_typed_vec_result_with_empty_constructor_branch ... ok
-test types::tests::imported_type_ids_must_not_collide_in_visible_module_scope ... ok
-test types::tests::invalid_schema_field_types_are_not_registered_as_valid_fields ... ok
-test types::tests::imported_token_type_is_treated_as_linear ... ok
-test types::tests::numeric_named_type_equality_is_commutative ... ok
-test types::tests::numeric_type_equality_respects_width ... ok
-test types::tests::lifecycle_capability_gates_reject_undeclared_kernel_effects ... ok
-test types::tests::qualified_identifier_must_resolve_to_value ... ok
-test types::tests::mixed_width_arithmetic_and_ordering_are_rejected ... ok
-test types::tests::preserve_rejects_mismatched_field_types ... ok
-test tests::ordered_named_output_create_constraints_are_checked_in_body_order ... ok
-test types::tests::match_requires_enum_scrutinee ... ok
-test types::tests::non_tail_linear_expression_statements_are_rejected ... ok
-test types::tests::recursive_enum_payloads_are_rejected ... ok
-test types::tests::require_block_rejects_lifecycle_stdlib_call ... ok
-test types::tests::require_rejects_nested_cell_operation ... ok
-test types::tests::imported_linear_argument_is_marked_consumed_after_call ... ok
-test types::tests::require_block_rejects_assignment_expression ... ok
-test types::tests::statically_visible_division_by_zero_is_rejected ... ok
-test types::tests::stdlib_claim_output_requires_complete_field_coverage ... ok
-test types::tests::stdlib_claim_output_requires_declared_claim_output_type ... ok
-test types::tests::stdlib_claim_rejects_declared_output_type_mismatch ... ok
-test types::tests::stdlib_claim_rejects_extra_arguments ... ok
-test types::tests::stdlib_claim_requires_explicit_output_and_lock_arguments ... ok
-test types::tests::stdlib_claim_rejects_non_receipt_input ... ok
-test types::tests::stdlib_settle_requires_explicit_output_and_lock_arguments ... ok
-test types::tests::stdlib_transfer_output_requires_complete_field_coverage ... ok
-test types::tests::stdlib_transfer_rejects_extra_arguments ... ok
-test types::tests::strict_mode_rejects_imported_legacy_capabilities ... ok
-test types::tests::typed_vec_with_capacity_uses_declared_element_type ... ok
-test types::tests::launch_module_type_checks_with_registered_imports ... ok
-test types::tests::u128_ordering_and_arithmetic_still_rejected_on_widening ... ok
-test types::tests::unsigned_integer_negation_is_rejected ... ok
-test wasm::tests::wasm_audit_reports_audit_only_for_type_only_module ... ok
-test wasm::tests::wasm_compiler_rejects_pure_action_modules ... ok
-test wasm::tests::wasm_encoder_emits_magic_version_and_status_custom_section ... ok
-test wasm::tests::wasm_runtime_instantiates_metadata_module_but_refuses_calls ... ok
-test types::tests::vec_type_arguments_are_validated ... ok
-test types::tests::tail_match_expressions_are_valid_return_values ... ok
-test types::tests::unsupported_u128_arithmetic_is_rejected ... ok
-test types::tests::widening_boundary_matrix ... ok
-test tests::u128_mutable_state_transition_with_u64_delta_is_checked ... ok
-test tests::payload_enum_fields_use_dynamic_molecule_schema_metadata ... ok
-test tests::optimized_entry_lock_keeps_inlined_schema_pointer_field_access_checked ... ok
-test codegen::tests::internal_assembler_relaxes_far_conditional_branch_with_long_jump ... ok
-test codegen::tests::internal_assembler_encodes_far_unconditional_jump ... ok
-test codegen::tests::bundled_example_codegen_mnemonics_are_declared ... ok
-
-test result: ok. 776 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.90s
-
-
-running 7 tests
-test adversarial_parser_preserves_operator_precedence_in_ambiguous_sequences ... ok
-test adversarial_parser_rejects_deep_unary_expression_without_panicking ... ok
-test adversarial_parser_binds_else_to_nearest_if ... ok
-test adversarial_0_13_rejects_invalid_hash_type_dsl ... ok
-test adversarial_parser_rejects_deep_nested_control_flow_without_panicking ... ok
-test adversarial_integer_literals_fail_closed_on_lexical_and_contextual_overflow ... ok
-test adversarial_0_13_rejects_unsupported_generic_collection_surfaces ... ok
-
-test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
-
-
-running 11 tests
-test runtime_u64_helpers_fail_closed_before_value_use ... ok
-test snapshot_simple_action_assembly ... ok
-test runtime_void_helpers_fail_closed_before_continuing ... ok
-test snapshot_lock_args_assembly ... ok
-test snapshot_type_id_create_output_assembly ... ok
-test snapshot_spawn_ipc_executable_status_checked_assembly ... ok
-test runtime_witness_helpers_fail_closed_before_pointer_use ... ok
-test snapshot_witness_schema_syscall_assembly ... ok
-test snapshot_collection_lowering_assembly ... ok
-test snapshot_blake2b_helper_assembly ... ok
-test snapshot_assemblies_contain_no_leaked_overflow_diagnostics ... ok
-
-test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.26s
-
-
-running 0 tests
-
-test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
-
-
-running 86 tests
-test cellc_add_and_remove_subcommands_honor_dev_path_and_json ... ok
-test cellc_add_git_requires_full_rev_and_records_pin ... ok
-Check succeeded
- Target profile: ckb
- Checked: package default (RISC-V assembly)
-test cellc_check_denies_metadata_only_declared_invariant ... ok
-test cellc_check_accepts_ckb_profile_timepoint ... ok
-test cellc_check_accepts_pure_ckb_target_profile ... ok
-test cellc_abi_subcommand_explains_entry_witness_layout ... ok
-test cellc_build_uses_manifest_policy_before_writing_artifacts ... ok
-test cellc_action_build_emits_builder_plan_json ... ok
-Build complete
- Artifact format: RISC-V assembly
- Target profile: ckb
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp1eORVW/build/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp1eORVW/build/main.s.meta.json
-test cellc_check_production_rejects_incomplete_output_verification ... ok
-test cellc_check_production_rejects_fail_closed_runtime_paths ... ok
-test cellc_build_accepts_pure_ckb_target_profile_without_vm_abi_trailer ... ok
-test cellc_check_reports_claim_source_predicate_blocker_class ... ok
-test cellc_check_can_reject_runtime_required_obligations ... ok
-test cellc_check_denies_checked_partial_proof_plan_gap ... ok
-test cellc_build_and_check_subcommands_use_package_flow ... ok
-test cellc_clean_subcommand_supports_json_summary ... ok
-test cellc_check_accepts_u128_mutable_state_transition_with_u64_delta ... ok
-test cellc_ckb_hash_emits_default_blake2b_vector ... ok
-test cellc_check_all_targets_checks_asm_and_elf_without_writing_artifacts ... ok
-test cellc_check_reports_linear_collection_ownership_blocker_class ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [5d, 8b, d, ed, a5, 24, 99, 9f, c3, fe, 29, 67, 78, 19, 2a, 46, 8f, a3, b5, 44, cb, 36, cf, cc, e2, 10, 50, 24, 59, 4b, 5b, 37]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp3DGMcN/artifacts/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp3DGMcN/artifacts/main.s.meta.json
-test cellc_cli_target_overrides_manifest_build_target ... ok
-test cellc_check_reports_settle_finalization_blocker_class ... ok
-test cellc_check_uses_manifest_policy_defaults ... ok
-test cellc_check_reports_resource_conservation_blocker_class ... ok
-test cellc_doc_subcommand_generates_markdown_docs ... ok
-test cellc_constraints_subcommand_surfaces_ckb_deployment_manifest ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [9f, aa, 3c, b9, 5, 1b, a7, 19, e4, ea, e4, 1, 79, 7, 11, 89, 7f, 40, ba, 26, 7e, 86, ba, 8c, d5, a3, a, 4d, 3, 45, eb, 54]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpG6FydO/app_pkg/build/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpG6FydO/app_pkg/build/main.s.meta.json
-test cellc_check_reports_explicit_output_binding_without_mutable_state_blockers ... ok
-test cellc_compiles_package_with_local_path_dependency ... ok
-test cellc_entry_witness_subcommand_emits_parameterized_witness_json ... ok
-test cellc_explain_profile_reports_ckb_v0_14_contract ... ok
-test cellc_entry_witness_subcommand_encodes_schema_backed_params ... ok
-test cellc_entry_witness_subcommand_rejects_wrong_width_fixed_bytes ... ok
-test cellc_explain_proof_reports_covenant_proof_plan ... ok
-test cellc_explain_proof_reports_declared_invariant ... ok
-test cellc_explain_subcommand_reports_runtime_error ... ok
-test cellc_explain_proof_warns_for_lock_group_transaction_scope ... ok
-Formatting complete
- Updated 1 file(s)
-test cellc_errors_include_runtime_ecode_when_policy_failure_maps_to_runtime_registry ... ok
-test cellc_info_subcommand_supports_json_summary ... ok
-test cellc_init_subcommand_supports_json_summary ... ok
-test cellc_lsp_flag_rejects_trailing_arguments ... ok
-test cellc_fmt_subcommand_formats_sources ... ok
-test cellc_new_subcommand_supports_json_summary_and_vcs_none ... ok
-test cellc_explain_proof_human_reports_macro_provenance ... ok
-test cellc_rejects_registry_package_dependencies_fail_closed ... ok
-test cellc_explain_proof_reports_invariant_action_coverage_match ... ok
-test cellc_install_path_updates_lockfile_and_remove_prunes_it ... ok
-test cellc_rejects_external_dependency_function_calls_until_linking_exists ... ok
-test cellc_run_subcommand_without_vm_runner_degrades_gracefully ... ok
-test cellc_test_subcommand_rejects_conflicting_expectations ... ok
-test cellc_test_subcommand_rejects_empty_expected_error_line_text ... ok
-test cellc_metadata_subcommand_emits_lowering_runtime_json ... ok
-test cellc_rejects_underdeclared_effects_from_path_dependency_calls ... ok
-test cellc_explain_proof_summary_reports_fail_closed_diagnostics ... ok
-test cellc_test_subcommand_rejects_missing_expected_error_text ... ok
-test cellc_test_subcommand_rejects_unknown_directives ... ok
-test cellc_test_subcommand_rejects_wrong_expected_error_line ... ok
-test cellc_test_subcommand_rejects_missing_entrypoint_metadata ... ok
-test cellc_check_reports_pool_invariant_policy_families ... ok
-test cellc_opt_report_compares_all_optimization_levels ... ok
-test cellc_test_subcommand_supports_expected_compile_failures ... ok
-test cellc_test_subcommand_compiles_test_sources ... ok
-test cellc_test_subcommand_supports_expected_error_line_directive ... ok
-test cellc_test_subcommand_rejects_missing_runtime_metadata ... ok
-test cellc_new_subcommand_initializes_git_by_default ... ok
-test cellc_check_reports_transaction_invariant_checked_subconditions ... ok
-test cellc_scheduler_plan_consumes_shared_touch_hints ... ok
-test cellc_test_subcommand_supports_entrypoint_metadata_directives ... ok
-test cellc_top_level_primitive_strict_rejects_legacy_capabilities ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [5d, 8b, d, ed, a5, 24, 99, 9f, c3, fe, 29, 67, 78, 19, 2a, 46, 8f, a3, b5, 44, cb, 36, cf, cc, e2, 10, 50, 24, 59, 4b, 5b, 37]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpZo3tql/artifacts/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpZo3tql/artifacts/main.s.meta.json
-test cellc_uses_manifest_build_out_dir_for_package_input ... ok
-test cellc_test_subcommand_supports_runtime_metadata_directives ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpC02XyB/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpC02XyB/sample.s.meta.json
-test cellc_test_subcommand_supports_target_directive ... ok
-test cellc_test_subcommand_supports_policy_directives ... ok
-test cellc_top_level_accepts_primitive_strict_for_kernel_effect_capabilities ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpYNDiwB/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpYNDiwB/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V ELF
- Target profile: ckb
- Artifact hash: [cf, 7, cf, ac, d0, a, 43, a3, a8, cc, 8b, 6e, 66, e1, 29, b2, 32, 60, 2f, 76, a3, 55, 4d, 52, d5, 38, 51, 1f, c8, b, 49, 2]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpSgHO62/artifacts/main.elf
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpSgHO62/artifacts/main.elf.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8cifZl/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8cifZl/sample.s.meta.json
-test cellc_uses_manifest_build_target_by_default ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpvCyiJF/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpvCyiJF/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [a7, d4, 78, cc, c3, f5, cd, 81, cd, de, 51, 44, ee, 83, 4d, 64, 46, df, bd, 40, 58, 5f, 51, 6c, d1, 56, 6b, b7, 44, 9d, 96, 8d]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpjONY9q/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpjONY9q/sample.s.meta.json
-test cellc_verify_artifact_accepts_matching_sidecar ... ok
-test cellc_verify_artifact_rejects_metadata_schema_downgrade ... ok
-test cellc_verify_artifact_rejects_noncanonical_source_unit_hash ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpmBH3ky/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpmBH3ky/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpHMX3Om/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpHMX3Om/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp6TxYwf/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp6TxYwf/sample.s.meta.json
-test cellc_writes_requested_output_file ... ok
-test cellc_verify_artifact_enforces_policy_flags ... ok
-test cellc_verify_artifact_rejects_tampered_source_when_requested ... ok
-test cellc_verify_artifact_rejects_tampered_artifact ... ok
-test cellc_verify_artifact_primitive_strict_rechecks_disk_sources ... ok
-test cellc_verify_artifact_enforces_expected_hashes ... ok
-test cellc_explain_generics_reports_checked_vec_instantiations ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [79, a1, 5d, 7e, f7, 1f, 9a, 64, 89, da, 9e, 8b, a8, 90, b6, 15, f0, b5, 61, d1, 80, 6b, 39, 9f, f0, 5a, a4, 4d, 0, 5, 41, 3c]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/amm_pool.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/amm_pool.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [2a, 2, ca, c2, fd, b6, 4a, 53, 9e, 26, cb, a1, 31, 69, ab, f3, 1d, c1, 42, d, 18, d3, fd, 1d, 92, b7, a, 55, c6, d, 87, df]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/launch.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/launch.s.meta.json
-test cellc_check_reports_checked_pool_invariant_families_without_runtime_blockers ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [8b, d7, 59, d4, b6, d1, 6, 8b, 97, 0, fd, e5, df, 72, ec, a6, 99, bf, 20, 34, 90, 55, b2, 17, 6d, 48, 55, 9e, ec, ed, 11, 2b]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/multisig.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/multisig.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [cd, d0, f5, 74, b7, 9d, 8e, 7d, 79, 50, 6a, cf, 3e, 13, b, 53, 5c, b9, 7f, 8c, d1, 1f, 88, bf, 1b, 8a, 3c, 3b, 34, 45, c6, 4e]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/nft.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/nft.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [fd, 14, d8, d9, e, 2c, e8, 71, 98, aa, e2, b6, b4, fc, b8, 93, aa, 84, 66, 2f, 21, 2e, 9d, 26, 5, 63, 5d, 74, 55, fd, 56, 87]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/timelock.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/timelock.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [3c, bd, 90, ed, de, 2c, 8d, 8c, 97, 1, a4, d9, 9, dc, 3d, bd, 22, 6b, 5b, 39, e7, 3e, 59, 9a, 5d, e1, 2c, 13, 61, 4d, 32, 46]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/token.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/token.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [2a, 7, 99, 55, e2, cb, e6, 1b, 39, 63, db, fc, 1, 63, fd, 57, 38, 6, a4, 7, ad, b2, 5d, 5c, f1, de, 41, e5, 2a, 29, 1, e5]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/vesting.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLsLJMI/vesting.s.meta.json
-test cellc_compiles_bundled_examples_to_requested_outputs ... ok
-
-test result: ok. 86 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.92s
-
-
-running 26 tests
-test ckb_scoped_entry_keeps_called_action_helpers ... ok
-test launch_seed_pool_composition_is_scheduler_visible ... ok
-test registry_example_uses_bounded_local_vec_helpers_without_collection_debt ... ok
-test amm_pool_input_output_params_are_scheduler_visible ... ok
-test release_examples_are_free_of_placeholder_hashes_and_formatter_artifacts ... ok
-test registry_example_with_insert_contains_compiles_to_elf ... ok
-test nft_core_actions_expose_action_specific_builder_metadata ... ok
-test token_cell_invariant_appears_in_proof_plan ... ok
-test order_book_language_example_uses_local_vec_helpers_without_collection_debt ... ok
-test stdlib_language_example_compiles_with_all_patterns ... ok
-test token_mint_authority_input_output_binding_is_explicit ... ok
-test v0_15_scoped_invariant_example_compiles_and_produces_proof_plan ... ok
-test v0_15_identity_lifecycle_example_compiles_and_produces_proof_plan ... ok
-test vesting_phase2_remaining_obligations_are_explicit ... ok
-test vesting_read_ref_params_are_scheduler_visible ... ok
-test multisig_core_actions_expose_threshold_flow_metadata ... ok
-test timelock_core_actions_expose_time_and_release_metadata ... ok
-test canonical_examples_compile_under_primitive_strict_015 ... ok
-test canonical_examples_are_the_single_checked_in_business_source ... ok
-test bundled_examples_emit_molecule_schema_manifest_report ... ok
-test bundled_examples_compile_to_non_empty_assembly ... ok
-test bundled_examples_backend_shape_report_serializes ... ok
-test bundled_examples_stay_within_backend_shape_budgets ... ok
-test bundled_examples_stay_near_backend_shape_release_baseline ... ok
-test all_checked_in_cell_examples_compile ... ok
-test bundled_examples_compile_to_elf ... ok
-
-test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.07s
-
-
-running 7 tests
-test fuzzy_oversized_static_widths_are_controlled_errors ... ok
-test fuzzy_unicode_hex_inputs_are_controlled_errors ... ok
-test fuzzy_entry_witness_encoding_never_panics ... ok
-test fuzzy_metadata_tampering_never_panics ... ok
-test fuzzy_mutated_sources_never_panic ... ok
-test fuzzy_lsp_incremental_edits_never_panic ... ok
-test fuzzy_semantic_codegen_mutations_reach_assembly ... ok
-
-test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.51s
-
-
-running 4 tests
-test ickb_diff_matrix_is_partial_and_consistent_with_model_fixtures ... ok
-test ickb_positive_fixtures_pass_model_verifier ... ok
-test ickb_negative_fixtures_fail_for_expected_invariant ... ok
-test ickb_benchmark_specs_compile_and_expose_expected_entries ... ok
-
-test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.30s
-
-
-running 1 test
-test syntax_combo_quick_matrix_is_cargo_test_visible ... FAILED
-
-failures:
-
----- syntax_combo_quick_matrix_is_cargo_test_visible stdout ----
-
-thread 'syntax_combo_quick_matrix_is_cargo_test_visible' (8199859) panicked at tests/syntax_combo.rs:15:5:
-syntax combo quick runner failed
-status: exit status: 1
-stdout:
-
-stderr:
-Traceback (most recent call last):
- File "/Users/arthur/RustroverProjects/CellScript/scripts/cellscript_syntax_combo_audit.py", line 20, in
- import tomllib
-ModuleNotFoundError: No module named 'tomllib'
-
-note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
-
-
-failures:
- syntax_combo_quick_matrix_is_cargo_test_visible
-
-test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.18s
-
-
-== stderr ==
- Checking cellscript v0.16.0 (/Users/arthur/RustroverProjects/CellScript)
- Finished `dev` profile [unoptimized + debuginfo] target(s) in 10.06s
- Compiling cellscript v0.16.0 (/Users/arthur/RustroverProjects/CellScript)
- Finished `test` profile [unoptimized + debuginfo] target(s) in 6.82s
- Running unittests src/lib.rs (target/debug/deps/cellscript-198f0ba9a296fb91)
- Running tests/adversarial_0_13.rs (target/debug/deps/adversarial_0_13-87ca0b7751a0cf60)
- Running tests/assembly_snapshots.rs (target/debug/deps/assembly_snapshots-a1b0ee4291a50be7)
- Running tests/ckb_acceptance.rs (target/debug/deps/ckb_acceptance-546e6523e51ab114)
- Running tests/cli.rs (target/debug/deps/cli-cd9b4a3e7ed668b4)
- Running tests/examples.rs (target/debug/deps/examples-885631b36bce043e)
- Running tests/fuzzy_debug.rs (target/debug/deps/fuzzy_debug-a3c500396cf14cf4)
- Running tests/ickb_benchmark.rs (target/debug/deps/ickb_benchmark-d0fd214d43bb34ab)
- Running tests/syntax_combo.rs (target/debug/deps/syntax_combo-b9abeffd268b17da)
-error: test failed, to rerun pass `-p cellscript --test syntax_combo`
diff --git a/.cap/logs/1780406272-60047.log b/.cap/logs/1780406272-60047.log
deleted file mode 100644
index e2365396..00000000
--- a/.cap/logs/1780406272-60047.log
+++ /dev/null
@@ -1,11 +0,0 @@
-== stdout ==
-
-running 1 test
-test syntax_combo_quick_matrix_is_cargo_test_visible ... ok
-
-test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.47s
-
-
-== stderr ==
- Finished `test` profile [unoptimized + debuginfo] target(s) in 0.05s
- Running tests/syntax_combo.rs (target/debug/deps/syntax_combo-b9abeffd268b17da)
diff --git a/.cap/logs/1780406289-61554.log b/.cap/logs/1780406289-61554.log
deleted file mode 100644
index 2c352559..00000000
--- a/.cap/logs/1780406289-61554.log
+++ /dev/null
@@ -1,1123 +0,0 @@
-== stdout ==
-
-running 776 tests
-test cli::commands::tests::test_command_execution ... ok
-test ckb_hash_tests::ckb_blake2b256_matches_blank_hash_vector ... ok
-test cli::commands::tests::invalid_parser_mapping_returns_error_instead_of_panicking ... ok
-test cli::commands::tests::expected_metadata_hash_comparison_is_case_sensitive ... ok
-test codegen::assembler::tests::strict_audit_internal_assembler_oracle_for_core_instruction_bytes ... ok
-test codegen::assembler::tests::strict_audit_li_split_handles_negative_32_bit_boundaries ... ok
-test cli::commands::tests::production_policy_finds_evidence_less_on_chain_checked_proof_plan_gap ... ok
-test cli::commands::tests::production_policy_finds_evidence_less_checked_runtime_proof_plan_gap ... ok
-test codegen::assembler::tests::strict_audit_riscv_immediate_boundaries_are_enforced ... ok
-test codegen::calls::tests::fixed_u64_le_width_accepts_hashes_and_byte_arrays ... ok
-test codegen::calls::tests::canonical_type_names_strip_reference_wrappers ... ok
-test codegen::cell_ops::tests::consumed_operand_var_accepts_named_cell_operands_only ... ok
-test codegen::calls::tests::packed_hash_width_uses_codegen_fixed_byte_type_rules ... ok
-test codegen::cell_ops::tests::destroy_absence_scan_is_limited_to_singleton_and_type_id_unique_policies ... ok
-test codegen::cell_ops::tests::identity_and_destruction_policy_labels_are_stable ... ok
-test codegen::expr::tests::divisor_nonzero_guard_fails_closed_on_zero ... ok
-test codegen::frame::tests::large_addi_uses_single_addi_for_small_immediates ... ok
-test codegen::frame::tests::large_addi_materializes_out_of_range_immediates ... ok
-test codegen::expr::tests::bool_canonical_check_emits_zero_one_guard ... ok
-test codegen::frame::tests::stack_access_helpers_emit_sp_relative_instructions ... ok
-test codegen::runtime::tests::checked_runtime_status_register_defaults_to_a1_for_unknown_helpers ... ok
-test codegen::runtime::tests::ckb_runtime_syscall_abi_matches_declared_constants ... ok
-test codegen::runtime::tests::runtime_helper_classification_tracks_checked_and_hash_helpers ... ok
-test codegen::schema::tests::aggregate_field_layouts_track_tuple_offsets ... ok
-test codegen::schema::tests::fixed_byte_constants_materialize_little_endian_bytes ... ok
-test codegen::schema::tests::fixed_width_helpers_classify_scalar_and_byte_storage ... ok
-test codegen::assembler::tests::strict_audit_elf_header_and_segments_are_internally_consistent ... ok
-test codegen::tests::consumed_schema_params_use_loaded_cell_size_for_field_checks ... ok
-test codegen::tests::dynamic_syscall_index_is_copied_before_large_stack_staging ... ok
-test codegen::tests::cell_operation_identity_helpers_stay_in_cell_ops ... ok
-test codegen::tests::explicit_external_toolchain_paths_are_strict ... ok
-test cli::commands::tests::ckb_hash_file_rejects_inputs_above_limit ... ok
-test codegen::tests::generated_large_offsets_are_normalized_before_assembly ... ok
-test codegen::tests::generated_collection_assembly_is_internal_assembler_clean ... ok
-test codegen::tests::generated_public_assembly_mnemonics_are_declared ... ok
-test codegen::tests::internal_assembler_encodes_emitted_instruction_surface ... ok
-test codegen::tests::generated_stdlib_assembly_is_internal_assembler_clean ... ok
-test codegen::tests::internal_assembler_encodes_full_width_li_literals ... ok
-test codegen::tests::internal_assembler_keeps_near_unconditional_jump_compact ... ok
-test codegen::tests::internal_assembler_encodes_register_conditional_branches ... ok
-test codegen::tests::internal_assembler_rejects_intentionally_unsupported_mnemonics ... ok
-test codegen::tests::internal_assembler_rejects_unresolved_call_targets ... ok
-test codegen::tests::generated_functions_use_shared_epilogue_tail ... ok
-test codegen::tests::large_addi_avoids_clobbering_source_register ... ok
-test codegen::tests::binary_codegen_materializes_narrow_integer_constants ... ok
-test codegen::tests::machine_cfg_tracks_call_edges_to_local_helpers ... ok
-test codegen::tests::machine_layout_order_rejects_missing_duplicate_or_unknown_blocks ... ok
-test codegen::assembler::tests::strict_audit_relaxed_conditional_branch_within_jal_range_preserves_registers ... ok
-test codegen::tests::machine_layout_plan_builds_register_conditional_branch_blocks ... ok
-test codegen::tests::machine_layout_plan_rejects_branch_target_outside_text ... ok
-test codegen::tests::machine_layout_plan_builds_explicit_machine_blocks ... ok
-test codegen::tests::machine_reachability_uses_entry_label_not_every_global ... ok
-test codegen::tests::outgoing_stack_arg_area_is_16_byte_aligned_at_call_boundaries ... ok
-test codegen::tests::division_codegen_guards_zero_divisors ... ok
-test codegen::tests::read_ref_runtime_fallback_records_cell_buffer_state ... ok
-test codegen::tests::dynamic_molecule_fixed_field_codegen_checks_full_header_and_exact_span ... ok
-test codegen::tests::register_contract_allows_only_entry_wrapper_writes_to_direct_registers ... ok
-test codegen::tests::rv64_li_boundary_values_materialize_correct_bits ... ok
-test codegen::tests::dynamic_molecule_vector_field_access_validates_full_table_offsets ... ok
-test codegen::tests::semantic_molecule_field_access_uses_validated_api_gate ... ok
-test codegen::tests::sp_addi_large_offsets_clobber_only_destination_register ... ok
-test codegen::tests::state_transition_edges_use_explicit_consumed_binding ... ok
-test codegen::tests::strict_audit_outgoing_stack_args_are_staged_inside_current_frame ... ok
-test codegen::tests::type_hash_missing_output_buffer_slots_report_compile_error ... ok
-test codegen::tests::type_hash_missing_param_slots_report_compile_error ... ok
-test codegen::tests::u128_const_without_fixed_storage_reports_compile_error ... ok
-test codegen::tests::narrow_arithmetic_codegen_truncates_to_declared_width ... ok
-test codegen::tests::runtime_cast_codegen_checks_narrowing_and_bool_canonicality ... ok
-test codegen::tests::unaligned_scalar_load_large_offsets_preserve_live_accumulator ... ok
-test codegen::tests::unrepresentable_memory_load_offsets_report_compile_error ... ok
-test codegen::tests::machine_layout_plan_reports_branch_relaxation_metrics ... ok
-test codegen::tests::unrepresentable_stack_offsets_report_compile_error ... ok
-test debug::tests::test_debug_info_generator ... ok
-test debug::tests::test_dwarf_generation ... ok
-test debug::tests::test_line_table ... ok
-test debug::tests::test_type_registration ... ok
-test docgen::tests::docgen_emits_flat_pool_runtime_input_requirements ... ok
-test docgen::tests::docgen_emits_markdown_for_action ... ok
-test codegen::tests::schema_ref_call_preserves_schema_abi_length ... ok
-test docgen::tests::docgen_emits_transaction_invariant_checked_subconditions ... ok
-test docgen::tests::docgen_html_escapes_module_and_item_text ... ok
-test error::tests::caret_padding_starts_at_span_column ... ok
-test error::tests::caret_width_counts_characters_not_bytes ... ok
-test flow::tests::consumed_flow_tracking_follows_expression_aliases ... ok
-test fmt::tests::format_action_transition_block_for_multiple_edges ... ok
-test codegen::tests::internal_assembler_relaxes_out_of_range_conditional_branch ... ok
-test fmt::tests::format_preserves_single_element_tuple_expression ... ok
-test fmt::tests::format_indents_preserve_fields_inside_expression_block ... ok
-test fmt::tests::format_preserves_type_policy_metadata ... ok
-test fmt::tests::format_round_trips_inline_if_tuple_expression ... ok
-test fmt::tests::format_round_trips_multiline_expression_block ... ok
-test fmt::tests::format_round_trips_preserve_block ... ok
-test fmt::tests::format_round_trips_simple_module ... ok
-test fmt::tests::format_round_trips_require_block ... ok
-test fmt::tests::format_single_expr_require_block_uses_compact_form ... ok
-test fmt::tests::format_uses_canonical_assert_and_no_const_semicolon ... ok
-test fmt::tests::format_round_trips_stdlib_lifecycle_field_block ... ok
-test fmt::tests::format_uses_field_shorthand_when_value_matches_name ... ok
-test incremental::tests::clean_cache_rejects_overflowing_max_age ... ok
-test incremental::tests::load_cache_drops_units_with_paths_outside_trusted_root ... ok
-test incremental::tests::clean_cache_skips_output_paths_outside_trusted_root ... ok
-test incremental::tests::test_dependency_graph ... ok
-test incremental::tests::test_change_detector ... ok
-test codegen::tests::stack_pointer_offsets_are_emitted_through_helpers ... ok
-test ir::tests::all_diverging_match_expression_does_not_leave_unreachable_join ... ok
-test incremental::tests::test_incremental_compiler ... ok
-test ir::tests::assert_in_pure_function_lowers_failure_to_abort_terminator ... ok
-test ir::tests::constant_cast_rejects_out_of_range_u128_narrowing ... ok
-test ir::tests::binary_arithmetic_result_type_preserves_left_operand_width ... ok
-test ir::tests::contextual_integer_binary_operands_lower_to_peer_width ... ok
-test ir::tests::ir_generation_aggregates_lowering_errors_with_source_spans ... ok
-test ir::tests::exhaustive_enum_match_unmatched_path_lowers_to_abort_terminator ... ok
-test ir::tests::ir_type_value_kind_never_derives_status_kinds ... ok
-test codegen::tests::vm2_syscall_helpers_emit_executable_status_checked_wrappers ... ok
-test ir::tests::ir_straight_line_lifecycle_certificate_rejects_duplicate_consume_without_typecheck ... ok
-test ir::tests::poison_lowering_keeps_value_invalid_while_block_stays_live ... ok
-test ir::tests::ir_straight_line_lifecycle_certificate_rejects_branch_local_create_without_typecheck ... ok
-test ir::tests::logical_operators_lower_as_short_circuit_control_flow ... ok
-test ir::tests::reference_and_deref_unary_result_types_match_ast_types ... ok
-test ir::tests::mixed_width_expression_local_widening_lowers_as_explicit_casts ... ok
-test ir::tests::require_block_lowers_to_atomic_requires ... ok
-test ir::tests::status_boundary_ir_verifier_allows_domain_u64_return_tuple_and_call_argument ... ok
-test ir::tests::status_boundary_ir_verifier_allows_unit_runtime_helper_when_status_is_checked_by_codegen_boundary ... ok
-test ir::tests::runtime_narrowing_cast_lowers_as_cast_instruction ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_dropped_raw_syscall_status ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_as_domain_call_argument ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_in_tuple_field ... ok
-test ir::tests::preserve_sugar_populates_preserved_fields ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_unit_runtime_helper_status_stored_as_domain_u64 ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_produced_without_checked_consumer ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_returned_as_domain_u64 ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_stored_as_dsl_local ... ok
-test ir::tests::strict_audit_ir_lowering_records_instruction_level_provenance ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_constant_destination_width_mismatch ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_empty_body_blocks ... ok
-test ir::tests::stdlib_claim_lowers_to_consumed_receipt_and_locked_declared_output ... ok
-test ir::tests::stdlib_settle_lowers_to_consumed_input_and_locked_output ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_extra_consume_set_metadata ... ok
-test ir::tests::stdlib_transfer_lowers_to_single_consumed_input_and_locked_output ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_poisoned_load_const ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_missing_terminator_target ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_missing_create_set_metadata ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_poisoned_lowering_module ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_poisoned_lowering_operand ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_use_not_defined_on_all_paths ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_stale_write_intents_metadata ... ok
-test ir::tests::strict_audit_ir_verifier_reports_instruction_provenance ... ok
-test ir::tests::strict_audit_schema_field_accesses_are_rematerialized_per_cfg_path ... ok
-test lexer::tests::test_byte_string ... ok
-test lexer::tests::test_comment ... ok
-test lexer::tests::test_identifiers ... ok
-test lexer::tests::test_keywords ... ok
-test lexer::tests::test_numbers ... ok
-test lexer::tests::test_operators ... ok
-test lexer::tests::test_punctuation ... ok
-test lexer::tests::test_string ... ok
-test lexer::tests::test_unterminated_byte_string_errors ... ok
-test lexer::tests::test_unterminated_string_errors ... ok
-test lexer::tests::rejects_oversized_identifier ... ok
-test codegen::tests::u128_delta_arithmetic_codegen_uses_fixed_byte_storage ... ok
-test lsp::tests::lsp_position_conversion_treats_crlf_as_single_line_ending ... ok
-test lsp::tests::lsp_position_incremental_change_applies_crlf_ranges ... ok
-test lsp::tests::find_references_for_locals_stays_in_enclosing_callable_scope ... ok
-test lsp::tests::goto_definition_prefers_local_scope_over_top_level_symbol ... ok
-test lsp::tests::lsp_primitive_strict_rejects_legacy_capabilities ... ok
-test docgen::tests::docgen_emits_invariant_coverage_summary ... ok
-test lsp::tests::lsp_rejects_oversized_documents ... ok
-test lsp::tests::lsp_reads_primitive_strict_from_manifest ... ok
-test lsp::tests::test_ckb_namespace_completions ... ok
-test lsp::tests::lsp_rejects_document_count_over_limit ... ok
-test lsp::tests::test_flow_namespace_completions ... ok
-test lsp::tests::test_format_document ... ok
-test lsp::tests::test_flow_u8_namespace_completions ... ok
-test lsp::tests::test_code_actions_for_lowering_diagnostics ... ok
-test lsp::tests::test_goto_definition_and_references ... ok
-test lsp::tests::test_incremental_change_applies_utf16_ranges_after_non_bmp_text ... ok
-test lsp::tests::test_incremental_change_ignores_invalid_utf16_ranges ... ok
-test lsp::tests::test_keyword_completions ... ok
-test lsp::tests::test_lsp_position_conversion_uses_utf16_columns ... ok
-test lsp::tests::test_action_hover_includes_lowering_metadata ... ok
-test lsp::tests::test_parse_errors_become_diagnostics ... ok
-test codegen::tests::entry_dynamic_witness_stack_arg_staging_preserves_cursor_register ... ok
-test lsp::tests::test_hover ... ok
-test lsp::tests::test_lsp_server ... ok
-test lsp::tests::test_lowering_diagnostics_warn_for_fail_closed_runtime_actions ... ok
-test lsp::tests::test_vec_member_completions_match_supported_helpers ... ok
-test lsp::tests::test_selection_range_orders_child_before_parent ... ok
-test lsp::tests::test_workspace_rename_is_disabled_until_symbol_scoped ... ok
-test lsp::tests::test_workspace_goto_definition_across_modules ... ok
-test optimize::tests::does_not_inline_block_bodies_that_can_capture_call_site_names ... ok
-test optimize::tests::folds_boolean_expressions ... ok
-test lsp::tests::test_workspace_references_across_modules ... ok
-test lsp::tests::test_workspace_diagnostics_check_imported_type_id_collisions ... ok
-test optimize::tests::folds_literal_if_statements_without_touching_cell_ops ... ok
-test optimize::tests::folds_integer_arithmetic ... ok
-test optimize::tests::folds_unsigned_high_bit_integer_operations ... ok
-test optimize::tests::unused_let_elimination_preserves_calls_and_stdlib_constraints ... ok
-test optimize::tests::propagates_constants_inlines_small_functions_and_removes_dead_code ... ok
-test package::tests::git_cache_entry_name_is_hash_only ... ok
-test package::tests::lockfile_consistency_allows_resolved_transitive_path_dependencies ... ok
-test package::tests::lockfile_consistency_reports_stale_and_mismatched_path_sources ... ok
-test package::tests::lockfile_consistency_requires_exact_git_revision_match ... ok
-test package::tests::lockfile_replace_with_resolved_prunes_removed_dependencies ... ok
-test package::tests::package_manager_accepts_allowed_git_url_transports ... ok
-test package::tests::lockfile_read_from_root_rejects_malformed_lockfiles ... ok
-test package::tests::package_manager_git_checkout_revalidates_full_commit_refs ... ok
-test package::tests::package_manager_git_commands_separate_user_controlled_ref_arguments ... ok
-test package::tests::package_manager_allows_path_dependency_without_version ... ok
-test package::tests::git_cache_child_check_rejects_path_escape ... ok
-test package::tests::package_manager_rejects_branch_or_tag_git_dependency_before_fetch ... ok
-test package::tests::package_manager_rejects_local_path_dependency_traversal ... ok
-test package::tests::package_manager_rejects_registry_dependencies_fail_closed ... ok
-test package::tests::package_manager_rejects_unpinned_git_dependency_before_fetch ... ok
-test package::tests::package_manager_rejects_unsafe_git_url_transports ... ok
-test package::tests::package_manager_rejects_transitive_path_dependency_cycles ... ok
-test package::tests::package_manager_resolves_local_path_dependencies ... ok
-test package::tests::package_manager_resolves_transitive_local_path_dependencies ... ok
-test package::tests::test_dependency_graph ... ok
-test package::tests::test_version_compatibility ... ok
-test package::tests::test_manifest_serialization ... ok
-test parser::tests::action_where_block_allows_indented_following_top_level_item ... ok
-test parser::tests::action_where_block_keeps_indented_keyword_like_binding_in_body ... ok
-test parser::tests::assignment_range_and_cast_spans_cover_full_expression ... ok
-test parser::tests::array_size_uses_checked_target_width_conversion ... ok
-test lexer::tests::rejects_oversized_string_literal ... ok
-test parser::tests::binary_expr_spans_cover_full_expression ... ok
-test parser::tests::hex_literal_exprs_parse_as_integers ... ok
-test parser::tests::generic_type_arguments_allow_newlines ... ok
-test parser::tests::identity_policy_diagnostic_uses_bad_policy_span ... ok
-test parser::tests::named_arg_diagnostic_uses_bad_name_span ... ok
-test parser::tests::parser_empty_token_slice_returns_controlled_error ... ok
-test parser::tests::parser_rejects_bang_assert_syntax ... ok
-test parser::tests::parser_rejects_deep_unary_expression_before_stack_overflow ... ok
-test lsp::tests::test_receipt_hover_includes_flow_metadata ... ok
-test parser::tests::parser_rejects_deep_if_expression_before_stack_overflow ... ok
-test parser::tests::postfix_exprs_cover_the_consumed_source_range ... ok
-test parser::tests::postfix_expr_spans_cover_the_full_postfix_chain ... ok
-test parser::tests::struct_init_span_covers_type_name_and_body ... ok
-test parser::tests::primitive_and_container_exprs_keep_source_spans ... ok
-test parser::tests::test_action_where_column_one_flow_identifier_stays_in_body ... ok
-test parser::tests::test_launch_expression_is_reserved_until_lowering_exists ... ok
-test parser::tests::test_parse_action ... ok
-test parser::tests::test_parse_action_transition_block ... ok
-test parser::tests::test_parse_aggregate_invariant_primitives ... ok
-test parser::tests::test_parse_create_field_shorthand ... ok
-test parser::tests::test_parse_expression ... ok
-test parser::tests::test_parse_flow_and_action_transition_clause ... ok
-test parser::tests::test_parse_grouped_use_imports ... ok
-test parser::tests::test_parse_invariant_assert_statement ... ok
-test parser::tests::test_parse_merges_attribute_and_inline_capabilities ... ok
-test parser::tests::test_parse_invariant ... ok
-test parser::tests::test_parse_prefix_source_and_create_target ... ok
-test parser::tests::test_parse_prefix_source_before_keyword_like_name ... ok
-test parser::tests::test_parse_preserve_single_field ... ok
-test parser::tests::test_parse_preserve_block ... ok
-test parser::tests::test_parse_require_block ... ok
-test parser::tests::test_parse_resource ... ok
-test parser::tests::test_postfix_does_not_cross_statement_newline ... ok
-test parser::tests::test_parse_type_id_attribute ... ok
-test parser::tests::test_reject_bare_preserve ... ok
-test parser::tests::test_reject_empty_preserve_block ... ok
-test parser::tests::test_reject_preserve_except ... ok
-test parser::tests::test_reject_empty_require_block ... ok
-test parser::tests::test_reject_preserve_wildcard ... ok
-test parser::tests::test_reject_require_block_with_control_flow ... ok
-test parser::tests::test_reject_require_block_with_consume ... ok
-test parser::tests::test_rejects_action_brace_body ... ok
-test parser::tests::test_rejects_empty_transition_block ... ok
-test parser::tests::test_rejects_output_parameter_source_prefix ... ok
-test parser::tests::test_rejects_generic_resource_definition ... ok
-test parser::tests::test_rejects_legacy_move_clause ... ok
-test parser::tests::test_rejects_read_ref_as_type_qualifier ... ok
-test parser::tests::test_rejects_transition_clause_without_state_colons ... ok
-test parser::tests::test_rejects_type_id_on_action ... ok
-test parser::tests::test_rejects_typed_let_without_initializer ... ok
-test parser::tests::test_rejects_unbraced_match_arms ... ok
-test parser::tests::test_rejects_use_as_without_alias ... ok
-test proof_plan::soundness::tests::strict_pp0103_only_applies_to_checked_runtime_records ... ok
-test proof_plan::soundness::tests::strict_pp0201_only_applies_to_executing_script_args ... ok
-test proof_plan::tests::checked_runtime_proof_plan_claims_include_executable_evidence ... ok
-test proof_plan::tests::checked_runtime_without_concrete_evidence_is_not_marked_covered ... ok
-test proof_plan::tests::checked_static_detail_does_not_create_executable_runtime_evidence ... ok
-test proof_plan::tests::replace_unique_features_are_transaction_scoped ... ok
-test proof_plan::tests::metadata_only_invariant_proof_plan_has_no_executable_evidence ... ok
-test proof_plan::tests::unique_lifecycle_features_have_specific_codegen_evidence_ids ... ok
-test repl::tests::repl_read_limited_line_accepts_bounded_input ... ok
-test resolve::tests::rejects_cross_module_type_dependency_cycles ... ok
-test resolve::tests::test_global_type_resolution_rejects_ambiguous_symbol ... ok
-test resolve::tests::test_grouped_use_resolves_multiple_symbols ... ok
-test resolve::tests::test_imported_type_resolution_uses_exact_module_path ... ok
-test resolve::tests::test_path_resolver ... ok
-test resolve::tests::test_module_resolver ... ok
-test resolve::tests::test_register_module_rejects_deferred_missing_import_when_target_arrives ... ok
-test resolve::tests::test_register_module_rejects_missing_imported_symbol_when_target_is_loaded ... ok
-test resolve::tests::test_rejects_duplicate_local_symbols ... ok
-test resolve::tests::test_rejects_import_alias_collisions ... ok
-test runtime_errors::tests::diagnostic_messages_map_to_runtime_error_codes_where_possible ... ok
-test runtime_errors::tests::runtime_error_docs_cover_every_registered_code ... ok
-test runtime_errors::tests::runtime_error_docs_explain_ckb_code_overlap_channels ... ok
-test simulate::tests::array_size_simulator_uses_checked_target_width_for_indices ... ok
-test runtime_errors::tests::runtime_error_registry_roundtrips_and_has_unique_codes ... ok
-test simulate::tests::simulate_cell_operation_traces ... ok
-test simulate::tests::simulate_if_branch ... ok
-test simulate::tests::simulate_pure_arithmetic_action ... ok
-test simulate::tests::simulate_read_ref_traces ... ok
-test simulate::tests::simulate_rejects_wrong_action_arity ... ok
-test simulate::tests::simulate_step_limit ... ok
-test simulate::tests::simulate_unsigned_high_bit_integer_operations ... ok
-test repl::tests::repl_read_limited_line_rejects_oversized_input ... ok
-test stdlib::collections::tests::collection_assembly_has_no_raw_syscalls_or_unclassified_helpers ... ok
-test stdlib::collections::tests::collection_public_helpers_do_not_dereference_raw_a0_handles ... ok
-test stdlib::collections::tests::test_collection_functions ... ok
-test stdlib::collections::tests::test_generate_assembly ... ok
-test stdlib::tests::generated_stdlib_has_no_raw_syscall_wrapper_symbols ... ok
-test stdlib::tests::generated_stdlib_omits_raw_syscall_wrappers ... ok
-test stdlib::tests::test_generate_assembly ... ok
-test stdlib::tests::test_get_function ... ok
-test stdlib::tests::test_generate_ckb_assembly_uses_checked_env_helpers ... ok
-test stdlib::tests::test_scheduler_metadata_generate_molecule_uses_table_layout ... ok
-test stdlib::tests::test_std_functions ... ok
-test syscalls::tests::ckb_debug_syscall_is_not_a_production_inventory_surface ... ok
-test syscalls::tests::emitted_manual_runtime_and_stdlib_helpers_are_classified ... ok
-test syscalls::tests::every_low_level_syscall_spec_is_inventoried ... ok
-test syscalls::tests::helper_inventory_has_no_duplicate_symbols ... ok
-test syscalls::tests::ckb_syscall_abi_matches_checked_baseline ... ok
-test tests::action_scheduler_witness_bytes_rejects_conflicting_molecule_alias ... ok
-test tests::branch_local_anonymous_creates_are_rejected_until_effects_are_cfg_aware ... ok
-test tests::ckb_capacity_calculation_saturates_on_extreme_sizes ... ok
-test tests::ckb_constraints_surface_capacity_planning_for_created_outputs ... ok
-test tests::ckb_deploy_manifest_rejects_conflicting_cell_dep_locations ... ok
-test codegen::tests::emitted_runtime_helper_symbols_are_classified_in_syscall_inventory ... ok
-test runtime_errors::tests::codegen_does_not_emit_unregistered_numeric_fail_literals ... ok
-test lsp::tests::lsp_loads_sibling_modules_for_standalone_example_imports ... ok
-test codegen::tests::internal_assembler_relaxes_out_of_range_register_conditional_branch ... ok
-test lexer::tests::rejects_oversized_block_comment ... ok
-test tests::ckb_deploy_manifest_rejects_invalid_hash_type ... ok
-test tests::ckb_deploy_manifest_rejects_invalid_dep_type ... ok
-test tests::ckb_deploy_manifest_rejects_incomplete_split_cell_dep_location ... ok
-test package::tests::package_manager_git_dependency_fails_for_invalid_url ... ok
-test tests::ckb_deploy_manifest_surfaces_hash_type_and_dep_group_policy ... ok
-test tests::collection_fail_closed_feature_names_are_stable ... ok
-test tests::ckb_target_profile_has_no_policy_exception ... ok
-test tests::ckb_u64_syscall_helpers_check_return_code_and_size ... ok
-test tests::ckb_lock_false_return_lowers_to_script_failure ... ok
-test tests::ckb_dynamic_vector_len_can_drive_mutate_transition ... ok
-test tests::compile_accepts_chain_neutral_timepoint_under_ckb_profile ... ok
-test tests::compile_accepts_action_witness_source_qualifier ... ok
-test tests::compile_accepts_ckb_header_epoch_api_only_for_ckb_profile ... ok
-test tests::compile_accepts_ckb_target_profile_timepoint ... ok
-test tests::ckb_entry_lock_scope_selects_lock_entrypoint ... ok
-test tests::compile_accepts_complete_branch_return_paths ... ok
-test tests::compile_accepts_ckb_shared_create_when_verifier_covered ... ok
-test tests::ckb_entry_scope_keeps_vec_element_schema_dependencies ... ok
-test tests::compile_accepts_empty_vec_literal_with_declared_type ... ok
-test tests::compile_accepts_create_field_shorthand ... ok
-test tests::compile_accepts_explicit_flow_action_edges ... ok
-test tests::compile_accepts_flow_state_name_initializers ... ok
-test tests::compile_accepts_flow_initial_create_at_any_declared_state ... ok
-test package::tests::package_manager_git_update_fails_closed_on_fetch_error ... ok
-test tests::compile_accepts_flow_on_custom_state_field ... ok
-test tests::compile_accepts_flow_edge_returning_to_first_state ... ok
-test tests::compile_accepts_kernel_effect_capabilities_for_destroy ... ok
-test tests::compile_accepts_non_initial_flow_create_without_consumed_prior_state ... ok
-test tests::compile_accepts_lock_args_script_args_binding ... ok
-test tests::compile_accepts_core_input_output_state_transition_edges ... ok
-test tests::compile_accepts_pure_ckb_target_profile ... ok
-test tests::compile_accepts_kernel_effect_capabilities_for_transfer ... ok
-test tests::compile_accepts_prefix_read_params_as_cell_dep_bindings ... ok
-test tests::compile_accepts_lock_boundary_param_sources_and_require ... ok
-test tests::compile_accepts_static_flow_update_to_non_initial_state ... ok
-test tests::compile_accepts_named_action_output_and_create_binding ... ok
-test tests::ckb_entry_action_scope_excludes_unselected_unsupported_code ... ok
-test tests::compile_allows_struct_type_id_under_ckb_profile ... ok
-test tests::compile_accepts_qualified_flow_state_names ... ok
-test tests::compile_accepts_vec_literals_in_create_fields ... ok
-test tests::compile_allows_actions_and_locks_to_call_pure_functions ... ok
-test tests::compile_accepts_symmetric_where_branch_output_constraints ... ok
-test tests::compile_allows_unit_function_calls_as_statements ... ok
-test tests::compile_allows_flow_update_to_declared_initial_state_at_type_check ... ok
-test tests::compile_binds_duplicate_read_refs_by_order_not_name ... ok
-test tests::compile_binds_read_ref_entry_params_to_cell_deps ... ok
-test tests::compile_binds_read_action_schema_params_to_cell_deps ... ok
-test tests::compile_classifies_resource_merge_amount_sum_as_checked_runtime ... ok
-test tests::compile_create_unique_field_identity_emits_runtime_anchor ... ok
-test tests::compile_classifies_resource_split_amount_subtraction_as_checked_runtime ... ok
-test tests::compile_emits_create_output_field_verification_for_fixed_u64_fields ... ok
-test tests::compile_destroy_policies_are_policy_aware ... ok
-test tests::compile_emits_ckb_style_load_cell_abi_for_cell_runtime_summary ... ok
-test tests::compile_entry_witness_rejects_payloads_larger_than_buffer ... ok
-test tests::compile_emits_direct_user_function_calls ... ok
-test tests::compile_exposes_ckb_type_id_contract_under_ckb_profile ... ok
-test tests::compile_emits_protocol_agnostic_guard_equality_proofplan_records ... ok
-test tests::compile_classifies_protocol_agnostic_guarded_transition_as_checked_runtime ... ok
-test tests::compile_file_explicit_target_overrides_manifest_build_target ... ok
-test tests::compile_file_uses_manifest_ckb_target_profile ... ok
-test tests::compile_folds_local_fixed_array_len_to_constant ... ok
-test tests::compile_file_loads_local_path_dependencies_from_cell_manifest ... ok
-test tests::compile_classifies_guarded_identity_field_merge_as_checked_runtime ... ok
-test tests::compile_identity_ckb_type_id_emits_metadata ... ok
-test tests::compile_ignores_trivial_self_equality_guard_records ... ok
-test tests::compile_identity_none_is_default_and_hidden ... ok
-test tests::compile_identity_singleton_type_emits_metadata ... ok
-test tests::compile_file_uses_manifest_build_target_by_default ... ok
-test tests::compile_identity_field_emits_path ... ok
-test tests::compile_file_source_content_hash_is_path_independent ... ok
-test tests::compile_identity_script_args_emits_metadata ... ok
-test tests::compile_infers_and_validates_read_only_effects ... ok
-test tests::compile_lowers_array_of_tuples_static_index_projection ... ok
-test tests::compile_lowers_block_tail_if_expressions ... ok
-test tests::compile_lowers_assert_invariant_into_fail_closed_cfg ... ok
-test tests::compile_lowers_bounded_vec_literal_to_stack_collection ... ok
-test tests::compile_lowers_byte_string_literals_with_expected_array_type ... ok
-test tests::compile_lowers_consumed_input_field_access_through_loaded_cell_bytes ... ok
-test tests::compile_lowers_exhaustive_enum_match_without_wildcard ... ok
-test tests::compile_lowers_ckb_group_source_large_immediate_to_riscv_elf ... ok
-test tests::compile_lowers_for_range_into_counted_loop_cfg ... ok
-test tests::compile_lowers_if_expression_fixed_byte_const_join_move ... ok
-test tests::compile_lowers_fixed_byte_schema_field_comparison ... ok
-test tests::compile_lowers_if_expression_with_join_move ... ok
-test tests::compile_lowers_if_statement_into_basic_blocks ... ok
-test tests::compile_lowers_len_method_to_length_instruction ... ok
-test tests::compile_lowers_local_struct_field_reads_and_writes ... ok
-test tests::compile_lowers_local_fixed_array_static_index_reads_and_writes ... ok
-test tests::compile_lowers_local_constants_into_real_operands ... ok
-test tests::compile_lowers_local_tuple_destructuring_to_field_slots ... ok
-test tests::compile_lowers_local_tuple_static_field_reads_and_writes ... ok
-test tests::compile_keeps_unchecked_transition_field_runtime_required ... ok
-test tests::compile_lowers_numeric_cast_without_zero_fallback ... ok
-test tests::compile_lowers_match_expression_into_branch_cfg ... ok
-test tests::compile_lowers_mutable_assignments_in_loop_bodies ... ok
-test tests::compile_lowers_pure_function_assert_failure_to_abort ... ok
-test tests::compile_lowers_packed_bool_and_u32_schema_fields_without_aligned_loads ... ok
-test tests::compile_lowers_read_ref_schema_field_to_ckb_runtime_assembly ... ok
-test tests::compile_lowers_stack_vec_clear_and_is_empty ... ok
-test tests::compile_lowers_stack_vec_extend_from_fixed_bytes ... ok
-test tests::compile_lowers_read_ref_schema_field_to_ckb_runtime_elf ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_capacity ... ok
-test tests::compile_lowers_schema_backed_parameter_field_access_to_elf ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_pop ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_contains ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_first_last ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_insert ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_runtime_push_index ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_remove ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_reverse ... ok
-test tests::compile_lowers_stack_vec_scalar_capacity ... ok
-test tests::bundled_token_example_strict_ckb_compile_is_admitted ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_swap ... ok
-test tests::compile_lowers_stack_vec_scalar_first_last ... ok
-test tests::compile_lowers_stack_vec_scalar_contains ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_truncate ... ok
-test tests::compile_lowers_stack_vec_scalar_insert ... ok
-test tests::compile_lowers_stack_vec_scalar_pop ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_set ... ok
-test tests::compile_lowers_stack_vec_scalar_set ... ok
-test tests::compile_lowers_stack_vec_scalar_runtime_push_len_index ... ok
-test tests::compile_lowers_stack_vec_scalar_remove ... ok
-test tests::compile_lowers_tail_expr_as_action_return ... ok
-test tests::compile_lowers_stack_vec_scalar_reverse ... ok
-test tests::compile_lowers_stack_vec_scalar_truncate ... ok
-test tests::compile_lowers_stack_vec_scalar_swap ... ok
-test tests::compile_lowers_tail_if_as_action_return ... ok
-test tests::compile_lowers_u128_equality_as_fixed_byte_comparison ... ok
-test tests::compile_lowers_type_hash_without_generic_call ... ok
-test tests::compile_lowers_vec_builtins_without_generic_calls ... ok
-test tests::compile_lowers_while_statement_into_loop_cfg ... ok
-test tests::compile_lowers_vec_with_capacity_to_stack_collection_new ... ok
-test tests::compile_merges_if_branch_linear_states_conservatively ... ok
-test tests::compile_lowers_zero_builtin_without_generic_call ... ok
-test tests::compile_lowers_u128_mutate_delta_with_carry_arithmetic ... ok
-test tests::compile_merges_linear_transfers_inside_if_expressions ... ok
-test tests::compile_merges_linear_transfers_inside_block_tail_if_expressions ... ok
-test tests::compile_marks_cell_backed_vec_runtime_features ... ok
-test tests::compile_merges_linear_transfers_inside_match_expressions ... ok
-test tests::compile_metadata_exposes_ckb_type_id_create_output_plan_under_ckb_profile ... ok
-test tests::compile_metadata_exposes_aggregate_invariant_primitives_in_proof_plan ... ok
-test tests::compile_metadata_exposes_declared_invariant_proof_plan ... ok
-test codegen::tests::codegen_rejects_generated_far_jump_scratch_relaxation ... ok
-test tests::compile_materializes_local_fixed_byte_constants_into_rodata ... ok
-test tests::compile_metadata_exposes_transaction_and_selected_cell_aggregate_invariants ... ok
-test tests::compile_metadata_with_options_rejects_strict_legacy_capabilities ... ok
-test tests::compile_classifies_hash_committed_output_field_as_guarded ... ok
-test tests::compile_metadata_exposes_lock_group_proof_plan_for_lock_entry ... ok
-test tests::compile_merges_linear_transfers_inside_block_expressions ... ok
-test tests::compile_metadata_declares_molecule_vm_abi ... ok
-test tests::compile_metadata_reports_parameterless_action_entrypoint_selection ... ok
-test tests::compile_metadata_warns_for_lock_group_transaction_invariant_scope ... ok
-test tests::compile_metadata_exposes_covenant_proof_plan_for_transfer ... ok
-test tests::compile_path_rejects_missing_path_dependency_manifest ... ok
-test tests::compile_path_rejects_missing_configured_source_root ... ok
-test tests::compile_path_rejects_duplicate_modules_across_source_roots ... ok
-test tests::compile_metadata_proof_plan_preserves_lock_args_source ... ok
-test tests::compile_metadata_with_options_uses_ast_optimizer_for_nonzero_levels ... ok
-test tests::compile_normalizes_same_module_qualified_helper_calls ... ok
-test tests::compile_path_ignores_examples_outside_package_source_roots ... ok
-test tests::compile_path_accepts_package_root ... ok
-test tests::compile_path_rejects_path_dependency_traversal ... ok
-test tests::compile_path_rejects_non_path_dependencies ... ok
-test tests::compile_path_rejects_path_dependency_cycles ... ok
-test tests::compile_package_import_alias_emits_matching_external_callable ... ok
-test tests::compile_prefers_no_arg_main_for_entry_wrapper ... ok
-test tests::compile_preserves_if_array_aggregate_slots ... ok
-test tests::compile_path_supports_configured_source_roots_without_src ... ok
-test tests::compile_preserves_if_tuple_aggregate_slots ... ok
-test tests::compile_path_supports_custom_entry_directory_modules ... ok
-test tests::compile_preserves_index_and_tuple_projection_in_assembly ... ok
-test tests::compile_preserves_create_instructions_in_assembly ... ok
-test tests::compile_rejects_aggregate_invariant_non_fixed_field ... ok
-test tests::compile_rejects_assert_delta_argument_from_cell_read ... ok
-test tests::compile_rejects_assert_invariant_as_tail_return_value ... ok
-test tests::compile_rejects_assignment_through_read_only_references ... ok
-test tests::compile_rejects_assignment_to_immutable_array_element ... ok
-test tests::compile_preserves_consume_and_destroy_instructions_in_assembly ... ok
-test tests::compile_rejects_assignment_to_immutable_tuple_field ... ok
-test tests::compile_preserves_match_tuple_aggregate_slots ... ok
-test tests::compile_rejects_assignment_to_temporary_field_targets ... ok
-test tests::compile_rejects_asymmetric_where_branch_output_constraints ... ok
-test tests::compile_rejects_bad_flow_state_field_type_on_main_path ... ok
-test tests::compile_rejects_bare_return_from_value_actions ... ok
-test tests::compile_rejects_binding_assert_invariant_results ... ok
-test tests::compile_rejects_binding_unit_function_results ... ok
-test tests::compile_rejects_bounded_vec_literal_type_mismatch ... ok
-test tests::compile_rejects_builtin_call_argument_mismatches ... ok
-test tests::compile_rejects_core_state_transition_edge_not_in_graph ... ok
-test tests::compile_rejects_cell_metadata_stdlib_on_non_cell_args ... ok
-test tests::compile_rejects_duplicate_flow_for_same_state_field ... ok
-test tests::compile_rejects_destroy_without_destroy_capability ... ok
-test tests::compile_rejects_duplicate_stable_type_ids ... ok
-test tests::compile_rejects_duplicate_top_level_symbols ... ok
-test tests::compile_rejects_dynamic_assert_invariant_messages ... ok
-test tests::compile_rejects_dynamic_require_messages ... ok
-test tests::compile_rejects_dynamic_initial_flow_create_state ... ok
-test tests::compile_rejects_empty_array_length_mismatch ... ok
-test tests::compile_rejects_dynamic_unique_identity_field ... ok
-test tests::compile_rejects_empty_literal_in_non_vec_context ... ok
-test tests::compile_rejects_flow_by_action_when_explicit_move_uses_different_edge ... ok
-test tests::compile_rejects_enum_payload_variants_until_lowering_exists ... ok
-test tests::compile_rejects_flow_on_plain_struct ... ok
-test tests::compile_rejects_flow_by_action_without_exact_move_clause ... ok
-test tests::compile_rejects_flow_payload_enum_state_field ... ok
-test tests::compile_rejects_flow_receipt_without_state_field ... ok
-test tests::compile_rejects_function_call_argument_mismatches ... ok
-test tests::compile_rejects_forbidden_unwrap_helpers ... ok
-test tests::compile_rejects_helper_functions_that_indirectly_call_impure_actions ... ok
-test tests::compile_rejects_heterogeneous_array_literals ... ok
-test tests::compile_rejects_if_expression_branch_type_mismatch ... ok
-test tests::compile_rejects_impure_helper_functions ... ok
-test tests::compile_rejects_incomplete_branch_return_paths ... ok
-test tests::compile_rejects_input_source_outside_action_cell_params ... ok
-test tests::compile_preserves_schema_backed_parameter_field_access_in_assembly ... ok
-test tests::compile_rejects_invalid_destroy_policy_shapes ... ok
-test tests::compile_rejects_invalid_enum_match_patterns ... ok
-test tests::compile_rejects_invalid_invariant_assert_expression ... ok
-test tests::compile_rejects_invariant_without_explicit_trigger_and_scope ... ok
-test tests::compile_rejects_invalid_create_field_initializers ... ok
-test tests::compile_rejects_invariant_assert_runtime_operation ... ok
-test tests::compile_rejects_linear_state_changes_hidden_inside_loops ... ok
-test tests::compile_rejects_local_binding_name_reuse ... ok
-test tests::compile_rejects_local_fixed_array_static_oob_write ... ok
-test tests::compile_rejects_local_fixed_array_static_oob_read ... ok
-test tests::compile_rejects_local_mutable_reference_aliases ... ok
-test tests::compile_rejects_missing_action_return_paths ... ok
-test tests::compile_rejects_missing_flow_state_create_on_main_path ... ok
-test tests::compile_rejects_missing_function_return_paths ... ok
-test tests::compile_rejects_non_bool_lock_definitions ... ok
-test tests::compile_rejects_non_bool_assert_condition ... ok
-test tests::compile_rejects_noop_flow_transition_on_main_path ... ok
-test tests::compile_rejects_out_of_range_flow_state_create_on_main_path ... ok
-test tests::compile_rejects_owned_linear_field_assignment ... ok
-test tests::compile_rejects_pure_functions_that_call_ckb_header_runtime_builtins ... ok
-test tests::compile_rejects_pure_functions_that_call_env_runtime_builtins ... ok
-test tests::compile_rejects_payload_or_unknown_enum_variant_values ... ok
-test tests::compile_produces_non_empty_riscv_assembly ... ok
-test tests::compile_rejects_pure_functions_that_call_locks ... ok
-test tests::compile_rejects_read_ref_for_non_cell_backed_types ... ok
-test tests::compile_rejects_pure_functions_that_call_type_hash_runtime_builtin ... ok
-test tests::compile_rejects_local_references_to_linear_roots ... ok
-test tests::compile_rejects_returning_unit_function_results ... ok
-test tests::compile_rejects_return_values_from_unit_actions ... ok
-test tests::compile_rejects_state_edge_that_does_not_consume_binding ... ok
-test tests::compile_rejects_reference_escape_boundaries ... ok
-test tests::compile_rejects_stateful_operations_without_named_linear_cell_operands ... ok
-test tests::compile_rejects_string_literals_as_runtime_values ... ok
-test tests::compile_preserves_dynamic_witness_cursor_after_lock_args ... ok
-test tests::compile_rejects_unbound_assert_delta_argument ... ok
-test tests::compile_rejects_undeclared_action_state_edge ... ok
-test tests::compile_rejects_underdeclared_effect_annotations ... ok
-test tests::compile_rejects_unknown_functions ... ok
-test tests::compile_rejects_underdeclared_effects_through_qualified_calls ... ok
-test tests::compile_rejects_unknown_struct_fields ... ok
-test tests::compile_rejects_underdeclared_effects_through_calls ... ok
-test tests::compile_rejects_unknown_target_during_option_validation ... ok
-test tests::compile_rejects_unknown_or_reserved_named_types ... ok
-test tests::compile_rejects_unknown_target_profile ... ok
-test tests::compile_rejects_unreachable_statements_after_return ... ok
-test tests::compile_rejects_unreachable_statements_after_complete_branch_return ... ok
-test tests::compile_rejects_unstable_callable_parameter_names ... ok
-test tests::compile_rejects_unsupported_optimization_level ... ok
-test tests::compile_rejects_unstable_schema_field_names ... ok
-test tests::compile_rejects_untyped_empty_array_literals ... ok
-test tests::compile_rejects_unsound_mutable_parameter_forms ... ok
-test tests::compile_preserves_read_ref_instructions_in_assembly ... ok
-test tests::compile_rejects_wrong_qualified_flow_state_field_initializer ... ok
-test tests::compile_produces_ckb_elf_without_vm_abi_trailer ... ok
-test tests::compile_rejects_unsupported_vec_helper_type_combinations ... ok
-test tests::compile_produces_non_empty_riscv_elf ... ok
-test tests::compile_result_exposes_nested_fixed_molecule_schema_metadata ... ok
-test tests::compile_rejects_state_transitions_inside_locks ... ok
-test tests::compile_lowers_ckb_hash_commitment_comparison_without_fixed_byte_fail_closed ... ok
-test tests::compile_rejects_lock_boundary_sources_outside_supported_scope ... ok
-test tests::compile_result_exposes_schema_layout_metadata ... ok
-test tests::compile_result_validation_rejects_constraints_artifact_format_mismatch ... ok
-test tests::compile_result_validation_rejects_compiler_version_mismatch ... ok
-test tests::compile_replace_unique_field_identity_compares_input_and_output ... ok
-test tests::compile_result_validation_rejects_assembly_with_vm_abi_trailer ... ok
-test tests::compile_lowers_stack_vec_fixed_schema_values ... ok
-test tests::compile_result_exposes_scheduler_metadata_sidecar ... ok
-test tests::compile_result_validation_rejects_metadata_artifact_format_mismatch ... ok
-test tests::compile_result_validation_rejects_constraints_artifact_size_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_artifact_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_mismatched_ckb_output_data_binding ... ok
-test tests::compile_result_validation_rejects_metadata_schema_version_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_schema_downgrade ... ok
-test tests::compile_result_validation_rejects_metadata_artifact_size_mismatch ... ok
-test tests::compile_reports_equivalent_state_transition_obligation_for_sugar_and_core_forms ... ok
-test tests::compile_result_validation_rejects_mismatched_ckb_type_id_create_output_plan ... ok
-test tests::compile_result_validation_rejects_metadata_source_content_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_source_hash_mismatch ... ok
-test tests::compile_result_validation_accepts_current_outputs ... ok
-test tests::compile_result_validation_rejects_metadata_target_profile_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_target_profile_v0_14_abi_mismatch ... ok
-test tests::compile_result_validation_rejects_type_id_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_missing_metadata_artifact_size ... ok
-test tests::compile_result_validation_rejects_tampered_artifact_hash ... ok
-test tests::compile_result_writes_artifact_to_disk ... ok
-test tests::compile_result_validation_rejects_noncanonical_source_unit_hash ... ok
-test tests::compile_result_validation_rejects_molecule_schema_hash_mismatch ... ok
-test tests::compile_riscv_elf_accepts_full_width_u64_literals ... ok
-test tests::compile_supports_typed_empty_array_literals ... ok
-test tests::compile_tracks_linear_values_returned_from_complete_branches ... ok
-test tests::compile_spills_parameters_and_returns_computed_value ... ok
-test tests::compile_tracks_linear_values_returned_from_tail_if_branches ... ok
-test tests::compile_surfaces_type_level_hash_type_dsl_metadata ... ok
-test tests::compile_unrolls_local_array_of_tuples_foreach_destructuring ... ok
-test tests::compile_tracks_linear_values_inside_aggregate_bindings ... ok
-test tests::compile_unrolls_fixed_param_array_foreach_with_pointer_abi ... ok
-test tests::compile_unrolls_local_fixed_array_foreach_without_runtime_indexing ... ok
-test tests::compile_verifies_create_output_against_computed_scalar_stack_value ... ok
-test tests::compile_uses_ast_optimizer_for_nonzero_optimization_levels ... ok
-test tests::compile_verifies_create_output_against_consumed_input_field_alias ... ok
-test tests::default_output_path_for_package_input_uses_build_dir ... ok
-test tests::default_output_path_for_package_input_uses_manifest_out_dir ... ok
-test tests::compile_verifies_created_output_bool_and_u32_fields ... ok
-test tests::compile_verifies_constructed_fixed_width_vec_output ... ok
-test tests::compile_verifies_created_scalar_fields_against_consumed_input_aliases ... ok
-test tests::create_output_verifier_accepts_const_lock_hash ... ok
-test tests::compiled_riscv_elf_contains_exit_trampoline ... ok
-test tests::create_output_verifier_accepts_fixed_byte_params_and_consts ... ok
-test tests::entry_abi_constraints_mark_extreme_slot_counts_unsupported ... ok
-test tests::compile_verifies_large_output_field_requirements_without_partial_fallback ... ok
-test tests::compile_riscv_elf_accepts_large_schema_field_offsets ... ok
-test tests::entry_witness_encoder_matches_u64_wrapper_abi ... ok
-test tests::dynamic_mutable_schema_transitions_are_checked_after_table_decoding ... ok
-test tests::compile_unique_script_args_and_singleton_identity_emit_hash_checks ... ok
-test tests::dynamic_schema_fixed_vec_length_is_table_decoded ... ok
-test tests::entry_witness_bool_params_are_canonicalized ... ok
-test tests::dynamic_schema_fixed_field_access_is_table_decoded ... ok
-test tests::entry_witness_encoder_includes_schema_backed_params_as_length_prefixed_bytes ... ok
-test tests::entry_witness_encoder_supports_fixed_byte_params ... ok
-test tests::ir_carries_flow_rules ... ok
-test tests::ir_lowers_unit_function_calls_without_result_destinations ... ok
-test tests::ir_preserves_function_call_return_types ... ok
-test tests::ir_rejects_unknown_call_return_types_without_u64_fallback ... ok
-test tests::ir_summary_captures_cell_runtime_accesses ... ok
-test tests::dynamic_named_output_constraints_are_proven_in_where_block ... ok
-test tests::dynamic_schema_fixed_vec_iteration_is_table_decoded ... ok
-test tests::load_modules_for_input_collects_package_source_roots ... ok
-test tests::fixed_enum_fields_have_molecule_schema_metadata ... ok
-test tests::generated_outgoing_stack_reservations_are_psabi_aligned ... ok
-test tests::internal_calls_keep_outgoing_stack_area_abi_aligned ... ok
-test tests::package_entry_must_stay_inside_package_root ... ok
-test tests::package_out_dir_must_stay_inside_package_root ... ok
-test tests::package_source_roots_must_stay_inside_package_root ... ok
-test tests::loaded_artifact_validation_rejects_metadata_artifact_size_mismatch ... ok
-test tests::primitive_compat_predicates_match_validator_modes ... ok
-test tests::compile_riscv_elf_accepts_large_stack_offsets ... ok
-test tests::generic_shared_mutation_does_not_emit_pool_pattern_metadata ... ok
-test tests::resolve_input_path_accepts_package_root_and_manifest ... ok
-test tests::entry_witness_wrapper_supports_scalar_stack_args ... ok
-test tests::fixed_byte_mutable_state_set_transition_is_checked_under_ckb_profile ... ok
-test tests::scheduler_witness_hex_decode_rejects_invalid_metadata_hex ... ok
-test tests::proof_plan_checked_static_excluded_from_on_chain_checked_obligations ... ok
-test tests::named_action_output_create_binding_reuses_declared_output_index ... ok
-test tests::tuple_return_abi_rejects_more_than_eight_fields ... ok
-test tests::parameterized_entrypoint_emits_witness_entry_wrapper ... ok
-test tests::proof_plan_cross_references_matching_action_obligation_for_invariant ... ok
-test tests::vm_abi_trailer_detection_requires_complete_zero_reserved_trailer ... ok
-test types::tests::block_expression_merges_existing_vec_refinements ... ok
-test types::tests::branch_local_consume_is_rejected_until_lifecycle_effects_are_cfg_aware ... ok
-test tests::source_unit_disk_verification_accepts_paths_inside_trusted_root ... ok
-test types::tests::branch_local_create_is_rejected_until_lifecycle_effects_are_cfg_aware ... ok
-test types::tests::byte_string_literal_type_uses_actual_length ... ok
-test types::tests::call_arguments_do_not_coerce_mut_ref_to_ref ... ok
-test types::tests::check_without_resolver_rejects_imports ... ok
-test types::tests::compound_assign_rejects_implicit_narrowing ... ok
-test types::tests::compound_assign_uses_numeric_binary_rules ... ok
-test types::tests::const_initializers_allow_supported_literals ... ok
-test types::tests::const_initializers_reject_cell_backed_types ... ok
-test types::tests::const_initializers_reject_cell_lifecycle_expressions ... ok
-test tests::proof_plan_marks_invariant_action_evidence_as_non_exhaustive ... ok
-test types::tests::const_initializers_reject_computed_expressions ... ok
-test types::tests::cyclic_schema_type_dependencies_are_rejected ... ok
-test types::tests::constant_narrowing_casts_must_fit ... ok
-test types::tests::contextual_integer_literals_fit_declared_widths ... ok
-test types::tests::duplicate_lifecycle_binding_is_rejected_until_effects_are_cfg_aware ... ok
-test types::tests::expected_type_does_not_widen_non_literal_abi_arg_boundary ... ok
-test types::tests::expected_type_does_not_widen_non_literal_field_boundary ... ok
-test types::tests::expected_type_does_not_widen_non_literal_let_boundary ... ok
-test tests::source_unit_disk_verification_rejects_paths_outside_trusted_root ... ok
-test types::tests::expected_type_does_not_widen_non_literal_return_boundary ... ok
-test types::tests::expression_branch_unreachable_code_is_rejected_by_typechecker ... ok
-test types::tests::generic_reference_detection_uses_type_structure ... ok
-test types::tests::explicit_cast_can_cross_integer_width_boundary ... ok
-test types::tests::if_statement_merges_matching_vec_refinements ... ok
-test types::tests::if_expression_preserves_typed_vec_result_with_empty_constructor_branch ... ok
-test types::tests::if_statement_rejects_one_sided_vec_refinement ... ok
-test types::tests::if_statement_rejects_divergent_vec_refinements ... ok
-test types::tests::imported_and_qualified_names_compare_as_same_type ... ok
-test types::tests::imported_type_ids_must_not_collide_in_visible_module_scope ... ok
-test types::tests::invalid_schema_field_types_are_not_registered_as_valid_fields ... ok
-test types::tests::imported_token_type_is_treated_as_linear ... ok
-test tests::strict_audit_codegen_emits_only_aligned_stack_pointer_deltas ... ok
-test types::tests::match_requires_enum_scrutinee ... ok
-test types::tests::lifecycle_capability_gates_reject_undeclared_kernel_effects ... ok
-test types::tests::non_tail_linear_expression_statements_are_rejected ... ok
-test types::tests::numeric_named_type_equality_is_commutative ... ok
-test types::tests::mixed_width_arithmetic_and_ordering_are_rejected ... ok
-test types::tests::numeric_type_equality_respects_width ... ok
-test types::tests::preserve_rejects_mismatched_field_types ... ok
-test types::tests::qualified_identifier_must_resolve_to_value ... ok
-test types::tests::recursive_enum_payloads_are_rejected ... ok
-test types::tests::imported_linear_argument_is_marked_consumed_after_call ... ok
-test types::tests::require_block_rejects_assignment_expression ... ok
-test types::tests::require_block_rejects_lifecycle_stdlib_call ... ok
-test types::tests::statically_visible_division_by_zero_is_rejected ... ok
-test types::tests::require_rejects_nested_cell_operation ... ok
-test types::tests::stdlib_claim_rejects_declared_output_type_mismatch ... ok
-test types::tests::stdlib_claim_output_requires_declared_claim_output_type ... ok
-test tests::v014_runtime_helpers_fail_closed_when_not_executable ... ok
-test types::tests::stdlib_claim_output_requires_complete_field_coverage ... ok
-test types::tests::stdlib_claim_rejects_extra_arguments ... ok
-test types::tests::stdlib_transfer_rejects_extra_arguments ... ok
-test types::tests::stdlib_claim_requires_explicit_output_and_lock_arguments ... ok
-test types::tests::strict_mode_rejects_imported_legacy_capabilities ... ok
-test tests::ordered_named_output_create_constraints_are_checked_in_body_order ... ok
-test types::tests::stdlib_settle_requires_explicit_output_and_lock_arguments ... ok
-test types::tests::stdlib_claim_rejects_non_receipt_input ... ok
-test types::tests::stdlib_transfer_output_requires_complete_field_coverage ... ok
-test types::tests::tail_match_expressions_are_valid_return_values ... ok
-test types::tests::unsigned_integer_negation_is_rejected ... ok
-test types::tests::typed_vec_with_capacity_uses_declared_element_type ... ok
-test types::tests::u128_ordering_and_arithmetic_still_rejected_on_widening ... ok
-test types::tests::vec_type_arguments_are_validated ... ok
-test wasm::tests::wasm_audit_reports_audit_only_for_type_only_module ... ok
-test wasm::tests::wasm_compiler_rejects_pure_action_modules ... ok
-test wasm::tests::wasm_encoder_emits_magic_version_and_status_custom_section ... ok
-test wasm::tests::wasm_runtime_instantiates_metadata_module_but_refuses_calls ... ok
-test types::tests::launch_module_type_checks_with_registered_imports ... ok
-test types::tests::unsupported_u128_arithmetic_is_rejected ... ok
-test types::tests::widening_boundary_matrix ... ok
-test tests::u128_mutable_state_transition_with_u64_delta_is_checked ... ok
-test tests::payload_enum_fields_use_dynamic_molecule_schema_metadata ... ok
-test tests::optimized_entry_lock_keeps_inlined_schema_pointer_field_access_checked ... ok
-test codegen::tests::internal_assembler_relaxes_far_conditional_branch_with_long_jump ... ok
-test codegen::tests::internal_assembler_encodes_far_unconditional_jump ... ok
-test codegen::tests::bundled_example_codegen_mnemonics_are_declared ... ok
-
-test result: ok. 776 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.56s
-
-
-running 7 tests
-test adversarial_parser_preserves_operator_precedence_in_ambiguous_sequences ... ok
-test adversarial_0_13_rejects_invalid_hash_type_dsl ... ok
-test adversarial_parser_binds_else_to_nearest_if ... ok
-test adversarial_parser_rejects_deep_unary_expression_without_panicking ... ok
-test adversarial_parser_rejects_deep_nested_control_flow_without_panicking ... ok
-test adversarial_integer_literals_fail_closed_on_lexical_and_contextual_overflow ... ok
-test adversarial_0_13_rejects_unsupported_generic_collection_surfaces ... ok
-
-test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
-
-
-running 11 tests
-test runtime_u64_helpers_fail_closed_before_value_use ... ok
-test snapshot_simple_action_assembly ... ok
-test runtime_void_helpers_fail_closed_before_continuing ... ok
-test snapshot_type_id_create_output_assembly ... ok
-test snapshot_lock_args_assembly ... ok
-test snapshot_spawn_ipc_executable_status_checked_assembly ... ok
-test runtime_witness_helpers_fail_closed_before_pointer_use ... ok
-test snapshot_witness_schema_syscall_assembly ... ok
-test snapshot_collection_lowering_assembly ... ok
-test snapshot_blake2b_helper_assembly ... ok
-test snapshot_assemblies_contain_no_leaked_overflow_diagnostics ... ok
-
-test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.22s
-
-
-running 0 tests
-
-test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
-
-
-running 86 tests
-test cellc_add_and_remove_subcommands_honor_dev_path_and_json ... ok
-test cellc_add_git_requires_full_rev_and_records_pin ... ok
-Check succeeded
- Target profile: ckb
- Checked: package default (RISC-V assembly)
-test cellc_check_denies_metadata_only_declared_invariant ... ok
-test cellc_check_accepts_ckb_profile_timepoint ... ok
-test cellc_check_accepts_pure_ckb_target_profile ... ok
-test cellc_abi_subcommand_explains_entry_witness_layout ... ok
-test cellc_build_uses_manifest_policy_before_writing_artifacts ... ok
-test cellc_action_build_emits_builder_plan_json ... ok
-Build complete
- Artifact format: RISC-V assembly
- Target profile: ckb
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp7uhCRB/build/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp7uhCRB/build/main.s.meta.json
-test cellc_check_production_rejects_fail_closed_runtime_paths ... ok
-test cellc_check_production_rejects_incomplete_output_verification ... ok
-test cellc_build_accepts_pure_ckb_target_profile_without_vm_abi_trailer ... ok
-test cellc_check_can_reject_runtime_required_obligations ... ok
-test cellc_build_and_check_subcommands_use_package_flow ... ok
-test cellc_check_reports_claim_source_predicate_blocker_class ... ok
-test cellc_clean_subcommand_supports_json_summary ... ok
-test cellc_check_uses_manifest_policy_defaults ... ok
-test cellc_ckb_hash_emits_default_blake2b_vector ... ok
-test cellc_check_all_targets_checks_asm_and_elf_without_writing_artifacts ... ok
-test cellc_check_denies_checked_partial_proof_plan_gap ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [5d, 8b, d, ed, a5, 24, 99, 9f, c3, fe, 29, 67, 78, 19, 2a, 46, 8f, a3, b5, 44, cb, 36, cf, cc, e2, 10, 50, 24, 59, 4b, 5b, 37]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpw5jKIp/artifacts/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpw5jKIp/artifacts/main.s.meta.json
-test cellc_check_reports_linear_collection_ownership_blocker_class ... ok
-test cellc_cli_target_overrides_manifest_build_target ... ok
-test cellc_check_reports_resource_conservation_blocker_class ... ok
-test cellc_check_accepts_u128_mutable_state_transition_with_u64_delta ... ok
-test cellc_check_reports_settle_finalization_blocker_class ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [9f, aa, 3c, b9, 5, 1b, a7, 19, e4, ea, e4, 1, 79, 7, 11, 89, 7f, 40, ba, 26, 7e, 86, ba, 8c, d5, a3, a, 4d, 3, 45, eb, 54]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp54oy11/app_pkg/build/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp54oy11/app_pkg/build/main.s.meta.json
-test cellc_entry_witness_subcommand_emits_parameterized_witness_json ... ok
-test cellc_constraints_subcommand_surfaces_ckb_deployment_manifest ... ok
-test cellc_doc_subcommand_generates_markdown_docs ... ok
-test cellc_compiles_package_with_local_path_dependency ... ok
-test cellc_explain_profile_reports_ckb_v0_14_contract ... ok
-test cellc_check_reports_explicit_output_binding_without_mutable_state_blockers ... ok
-test cellc_entry_witness_subcommand_encodes_schema_backed_params ... ok
-test cellc_entry_witness_subcommand_rejects_wrong_width_fixed_bytes ... ok
-test cellc_explain_proof_reports_declared_invariant ... ok
-test cellc_explain_subcommand_reports_runtime_error ... ok
-test cellc_explain_proof_warns_for_lock_group_transaction_scope ... ok
-test cellc_info_subcommand_supports_json_summary ... ok
-test cellc_explain_proof_human_reports_macro_provenance ... ok
-test cellc_errors_include_runtime_ecode_when_policy_failure_maps_to_runtime_registry ... ok
-test cellc_init_subcommand_supports_json_summary ... ok
-test cellc_lsp_flag_rejects_trailing_arguments ... ok
-Formatting complete
- Updated 1 file(s)
-test cellc_explain_proof_reports_covenant_proof_plan ... ok
-test cellc_explain_proof_reports_invariant_action_coverage_match ... ok
-test cellc_new_subcommand_supports_json_summary_and_vcs_none ... ok
-test cellc_fmt_subcommand_formats_sources ... ok
-test cellc_rejects_registry_package_dependencies_fail_closed ... ok
-test cellc_rejects_external_dependency_function_calls_until_linking_exists ... ok
-test cellc_run_subcommand_without_vm_runner_degrades_gracefully ... ok
-test cellc_install_path_updates_lockfile_and_remove_prunes_it ... ok
-test cellc_explain_proof_summary_reports_fail_closed_diagnostics ... ok
-test cellc_test_subcommand_rejects_conflicting_expectations ... ok
-test cellc_rejects_underdeclared_effects_from_path_dependency_calls ... ok
-test cellc_test_subcommand_rejects_empty_expected_error_line_text ... ok
-test cellc_metadata_subcommand_emits_lowering_runtime_json ... ok
-test cellc_test_subcommand_rejects_unknown_directives ... ok
-test cellc_test_subcommand_rejects_missing_expected_error_text ... ok
-test cellc_test_subcommand_rejects_wrong_expected_error_line ... ok
-test cellc_test_subcommand_rejects_missing_entrypoint_metadata ... ok
-test cellc_check_reports_pool_invariant_policy_families ... ok
-test cellc_check_reports_transaction_invariant_checked_subconditions ... ok
-test cellc_test_subcommand_supports_expected_compile_failures ... ok
-test cellc_test_subcommand_rejects_missing_runtime_metadata ... ok
-test cellc_test_subcommand_compiles_test_sources ... ok
-test cellc_opt_report_compares_all_optimization_levels ... ok
-test cellc_test_subcommand_supports_expected_error_line_directive ... ok
-test cellc_scheduler_plan_consumes_shared_touch_hints ... ok
-test cellc_test_subcommand_supports_entrypoint_metadata_directives ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpx8S472/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpx8S472/sample.s.meta.json
-test cellc_new_subcommand_initializes_git_by_default ... ok
-test cellc_top_level_primitive_strict_rejects_legacy_capabilities ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [5d, 8b, d, ed, a5, 24, 99, 9f, c3, fe, 29, 67, 78, 19, 2a, 46, 8f, a3, b5, 44, cb, 36, cf, cc, e2, 10, 50, 24, 59, 4b, 5b, 37]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpALgaoa/artifacts/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpALgaoa/artifacts/main.s.meta.json
-test cellc_uses_manifest_build_out_dir_for_package_input ... ok
-test cellc_test_subcommand_supports_policy_directives ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpdRT70K/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpdRT70K/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V ELF
- Target profile: ckb
- Artifact hash: [cf, 7, cf, ac, d0, a, 43, a3, a8, cc, 8b, 6e, 66, e1, 29, b2, 32, 60, 2f, 76, a3, 55, 4d, 52, d5, 38, 51, 1f, c8, b, 49, 2]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpMYbYm6/artifacts/main.elf
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpMYbYm6/artifacts/main.elf.meta.json
-test cellc_test_subcommand_supports_runtime_metadata_directives ... ok
-test cellc_uses_manifest_build_target_by_default ... ok
-test cellc_test_subcommand_supports_target_directive ... ok
-test cellc_top_level_accepts_primitive_strict_for_kernel_effect_capabilities ... ok
-test cellc_verify_artifact_accepts_matching_sidecar ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [a7, d4, 78, cc, c3, f5, cd, 81, cd, de, 51, 44, ee, 83, 4d, 64, 46, df, bd, 40, 58, 5f, 51, 6c, d1, 56, 6b, b7, 44, 9d, 96, 8d]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpsHXIhT/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpsHXIhT/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpVfZ9D4/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpVfZ9D4/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpEQdza8/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpEQdza8/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp7cEcEJ/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp7cEcEJ/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmphZ9GHw/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmphZ9GHw/sample.s.meta.json
-test cellc_verify_artifact_enforces_policy_flags ... ok
-test cellc_verify_artifact_rejects_noncanonical_source_unit_hash ... ok
-test cellc_verify_artifact_rejects_tampered_artifact ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpWyguP9/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpWyguP9/sample.s.meta.json
-test cellc_verify_artifact_rejects_metadata_schema_downgrade ... ok
-test cellc_writes_requested_output_file ... ok
-test cellc_verify_artifact_rejects_tampered_source_when_requested ... ok
-test cellc_verify_artifact_primitive_strict_rechecks_disk_sources ... ok
-test cellc_verify_artifact_enforces_expected_hashes ... ok
-test cellc_explain_generics_reports_checked_vec_instantiations ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [79, a1, 5d, 7e, f7, 1f, 9a, 64, 89, da, 9e, 8b, a8, 90, b6, 15, f0, b5, 61, d1, 80, 6b, 39, 9f, f0, 5a, a4, 4d, 0, 5, 41, 3c]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/amm_pool.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/amm_pool.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [2a, 2, ca, c2, fd, b6, 4a, 53, 9e, 26, cb, a1, 31, 69, ab, f3, 1d, c1, 42, d, 18, d3, fd, 1d, 92, b7, a, 55, c6, d, 87, df]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/launch.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/launch.s.meta.json
-test cellc_check_reports_checked_pool_invariant_families_without_runtime_blockers ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [8b, d7, 59, d4, b6, d1, 6, 8b, 97, 0, fd, e5, df, 72, ec, a6, 99, bf, 20, 34, 90, 55, b2, 17, 6d, 48, 55, 9e, ec, ed, 11, 2b]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/multisig.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/multisig.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [cd, d0, f5, 74, b7, 9d, 8e, 7d, 79, 50, 6a, cf, 3e, 13, b, 53, 5c, b9, 7f, 8c, d1, 1f, 88, bf, 1b, 8a, 3c, 3b, 34, 45, c6, 4e]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/nft.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/nft.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [fd, 14, d8, d9, e, 2c, e8, 71, 98, aa, e2, b6, b4, fc, b8, 93, aa, 84, 66, 2f, 21, 2e, 9d, 26, 5, 63, 5d, 74, 55, fd, 56, 87]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/timelock.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/timelock.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [3c, bd, 90, ed, de, 2c, 8d, 8c, 97, 1, a4, d9, 9, dc, 3d, bd, 22, 6b, 5b, 39, e7, 3e, 59, 9a, 5d, e1, 2c, 13, 61, 4d, 32, 46]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/token.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/token.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [2a, 7, 99, 55, e2, cb, e6, 1b, 39, 63, db, fc, 1, 63, fd, 57, 38, 6, a4, 7, ad, b2, 5d, 5c, f1, de, 41, e5, 2a, 29, 1, e5]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/vesting.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp8xEgYv/vesting.s.meta.json
-test cellc_compiles_bundled_examples_to_requested_outputs ... ok
-
-test result: ok. 86 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.86s
-
-
-running 26 tests
-test ckb_scoped_entry_keeps_called_action_helpers ... ok
-test launch_seed_pool_composition_is_scheduler_visible ... ok
-test registry_example_uses_bounded_local_vec_helpers_without_collection_debt ... ok
-test amm_pool_input_output_params_are_scheduler_visible ... ok
-test release_examples_are_free_of_placeholder_hashes_and_formatter_artifacts ... ok
-test registry_example_with_insert_contains_compiles_to_elf ... ok
-test nft_core_actions_expose_action_specific_builder_metadata ... ok
-test order_book_language_example_uses_local_vec_helpers_without_collection_debt ... ok
-test token_cell_invariant_appears_in_proof_plan ... ok
-test stdlib_language_example_compiles_with_all_patterns ... ok
-test token_mint_authority_input_output_binding_is_explicit ... ok
-test v0_15_identity_lifecycle_example_compiles_and_produces_proof_plan ... ok
-test v0_15_scoped_invariant_example_compiles_and_produces_proof_plan ... ok
-test vesting_phase2_remaining_obligations_are_explicit ... ok
-test vesting_read_ref_params_are_scheduler_visible ... ok
-test multisig_core_actions_expose_threshold_flow_metadata ... ok
-test timelock_core_actions_expose_time_and_release_metadata ... ok
-test canonical_examples_compile_under_primitive_strict_015 ... ok
-test bundled_examples_compile_to_non_empty_assembly ... ok
-test canonical_examples_are_the_single_checked_in_business_source ... ok
-test bundled_examples_emit_molecule_schema_manifest_report ... ok
-test bundled_examples_stay_within_backend_shape_budgets ... ok
-test bundled_examples_stay_near_backend_shape_release_baseline ... ok
-test bundled_examples_backend_shape_report_serializes ... ok
-test all_checked_in_cell_examples_compile ... ok
-test bundled_examples_compile_to_elf ... ok
-
-test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.53s
-
-
-running 7 tests
-test fuzzy_oversized_static_widths_are_controlled_errors ... ok
-test fuzzy_metadata_tampering_never_panics ... ok
-test fuzzy_unicode_hex_inputs_are_controlled_errors ... ok
-test fuzzy_entry_witness_encoding_never_panics ... ok
-test fuzzy_lsp_incremental_edits_never_panic ... ok
-test fuzzy_mutated_sources_never_panic ... ok
-test fuzzy_semantic_codegen_mutations_reach_assembly ... ok
-
-test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.54s
-
-
-running 4 tests
-test ickb_diff_matrix_is_partial_and_consistent_with_model_fixtures ... ok
-test ickb_positive_fixtures_pass_model_verifier ... ok
-test ickb_negative_fixtures_fail_for_expected_invariant ... ok
-test ickb_benchmark_specs_compile_and_expose_expected_entries ... ok
-
-test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.29s
-
-
-running 1 test
-test syntax_combo_quick_matrix_is_cargo_test_visible ... FAILED
-
-failures:
-
----- syntax_combo_quick_matrix_is_cargo_test_visible stdout ----
-
-thread 'syntax_combo_quick_matrix_is_cargo_test_visible' (8211111) panicked at tests/syntax_combo.rs:15:5:
-syntax combo quick runner failed
-status: exit status: 1
-stdout:
-
-stderr:
-Traceback (most recent call last):
- File "/Users/arthur/RustroverProjects/CellScript/scripts/cellscript_syntax_combo_audit.py", line 20, in
- import tomllib
-ModuleNotFoundError: No module named 'tomllib'
-
-note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
-
-
-failures:
- syntax_combo_quick_matrix_is_cargo_test_visible
-
-test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
-
-
-== stderr ==
- Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.05s
- Finished `test` profile [unoptimized + debuginfo] target(s) in 0.04s
- Running unittests src/lib.rs (target/debug/deps/cellscript-198f0ba9a296fb91)
- Running tests/adversarial_0_13.rs (target/debug/deps/adversarial_0_13-87ca0b7751a0cf60)
- Running tests/assembly_snapshots.rs (target/debug/deps/assembly_snapshots-a1b0ee4291a50be7)
- Running tests/ckb_acceptance.rs (target/debug/deps/ckb_acceptance-546e6523e51ab114)
- Running tests/cli.rs (target/debug/deps/cli-cd9b4a3e7ed668b4)
- Running tests/examples.rs (target/debug/deps/examples-885631b36bce043e)
- Running tests/fuzzy_debug.rs (target/debug/deps/fuzzy_debug-a3c500396cf14cf4)
- Running tests/ickb_benchmark.rs (target/debug/deps/ickb_benchmark-d0fd214d43bb34ab)
- Running tests/syntax_combo.rs (target/debug/deps/syntax_combo-b9abeffd268b17da)
-error: test failed, to rerun pass `-p cellscript --test syntax_combo`
diff --git a/.cap/logs/1780406387-71041.log b/.cap/logs/1780406387-71041.log
deleted file mode 100644
index 2f0d290d..00000000
--- a/.cap/logs/1780406387-71041.log
+++ /dev/null
@@ -1,11 +0,0 @@
-== stdout ==
-
-running 1 test
-test syntax_combo_quick_matrix_is_cargo_test_visible ... ok
-
-test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.41s
-
-
-== stderr ==
- Finished `test` profile [unoptimized + debuginfo] target(s) in 0.05s
- Running tests/syntax_combo.rs (target/debug/deps/syntax_combo-b9abeffd268b17da)
diff --git a/.cap/logs/1780406397-71653.log b/.cap/logs/1780406397-71653.log
deleted file mode 100644
index 90dd6337..00000000
--- a/.cap/logs/1780406397-71653.log
+++ /dev/null
@@ -1,1125 +0,0 @@
-== stdout ==
-
-running 776 tests
-test ckb_hash_tests::ckb_blake2b256_matches_blank_hash_vector ... ok
-test cli::commands::tests::test_command_execution ... ok
-test cli::commands::tests::invalid_parser_mapping_returns_error_instead_of_panicking ... ok
-test cli::commands::tests::production_policy_finds_evidence_less_checked_runtime_proof_plan_gap ... ok
-test cli::commands::tests::production_policy_finds_evidence_less_on_chain_checked_proof_plan_gap ... ok
-test cli::commands::tests::expected_metadata_hash_comparison_is_case_sensitive ... ok
-test codegen::assembler::tests::strict_audit_internal_assembler_oracle_for_core_instruction_bytes ... ok
-test codegen::assembler::tests::strict_audit_li_split_handles_negative_32_bit_boundaries ... ok
-test codegen::assembler::tests::strict_audit_riscv_immediate_boundaries_are_enforced ... ok
-test codegen::calls::tests::canonical_type_names_strip_reference_wrappers ... ok
-test codegen::calls::tests::fixed_u64_le_width_accepts_hashes_and_byte_arrays ... ok
-test codegen::cell_ops::tests::consumed_operand_var_accepts_named_cell_operands_only ... ok
-test codegen::calls::tests::packed_hash_width_uses_codegen_fixed_byte_type_rules ... ok
-test codegen::cell_ops::tests::destroy_absence_scan_is_limited_to_singleton_and_type_id_unique_policies ... ok
-test codegen::cell_ops::tests::identity_and_destruction_policy_labels_are_stable ... ok
-test codegen::expr::tests::divisor_nonzero_guard_fails_closed_on_zero ... ok
-test codegen::frame::tests::large_addi_materializes_out_of_range_immediates ... ok
-test codegen::assembler::tests::strict_audit_elf_header_and_segments_are_internally_consistent ... ok
-test codegen::expr::tests::bool_canonical_check_emits_zero_one_guard ... ok
-test codegen::frame::tests::large_addi_uses_single_addi_for_small_immediates ... ok
-test codegen::runtime::tests::checked_runtime_status_register_defaults_to_a1_for_unknown_helpers ... ok
-test codegen::runtime::tests::ckb_runtime_syscall_abi_matches_declared_constants ... ok
-test codegen::frame::tests::stack_access_helpers_emit_sp_relative_instructions ... ok
-test cli::commands::tests::ckb_hash_file_rejects_inputs_above_limit ... ok
-test codegen::schema::tests::aggregate_field_layouts_track_tuple_offsets ... ok
-test codegen::runtime::tests::runtime_helper_classification_tracks_checked_and_hash_helpers ... ok
-test codegen::schema::tests::fixed_byte_constants_materialize_little_endian_bytes ... ok
-test codegen::schema::tests::fixed_width_helpers_classify_scalar_and_byte_storage ... ok
-test codegen::tests::consumed_schema_params_use_loaded_cell_size_for_field_checks ... ok
-test codegen::tests::cell_operation_identity_helpers_stay_in_cell_ops ... ok
-test codegen::tests::dynamic_syscall_index_is_copied_before_large_stack_staging ... ok
-test codegen::tests::generated_large_offsets_are_normalized_before_assembly ... ok
-test codegen::tests::generated_collection_assembly_is_internal_assembler_clean ... ok
-test codegen::tests::generated_public_assembly_mnemonics_are_declared ... ok
-test codegen::tests::explicit_external_toolchain_paths_are_strict ... ok
-test codegen::tests::internal_assembler_encodes_emitted_instruction_surface ... ok
-test codegen::tests::internal_assembler_encodes_full_width_li_literals ... ok
-test codegen::tests::internal_assembler_keeps_near_unconditional_jump_compact ... ok
-test codegen::tests::generated_functions_use_shared_epilogue_tail ... ok
-test codegen::tests::internal_assembler_encodes_register_conditional_branches ... ok
-test codegen::tests::internal_assembler_rejects_unresolved_call_targets ... ok
-test codegen::tests::internal_assembler_rejects_intentionally_unsupported_mnemonics ... ok
-test codegen::tests::generated_stdlib_assembly_is_internal_assembler_clean ... ok
-test codegen::tests::large_addi_avoids_clobbering_source_register ... ok
-test codegen::tests::binary_codegen_materializes_narrow_integer_constants ... ok
-test codegen::tests::machine_cfg_tracks_call_edges_to_local_helpers ... ok
-test codegen::tests::machine_layout_plan_builds_explicit_machine_blocks ... ok
-test codegen::tests::machine_layout_order_rejects_missing_duplicate_or_unknown_blocks ... ok
-test codegen::tests::machine_layout_plan_builds_register_conditional_branch_blocks ... ok
-test codegen::tests::machine_layout_plan_rejects_branch_target_outside_text ... ok
-test codegen::tests::division_codegen_guards_zero_divisors ... ok
-test codegen::tests::machine_reachability_uses_entry_label_not_every_global ... ok
-test codegen::tests::outgoing_stack_arg_area_is_16_byte_aligned_at_call_boundaries ... ok
-test codegen::tests::read_ref_runtime_fallback_records_cell_buffer_state ... ok
-test codegen::assembler::tests::strict_audit_relaxed_conditional_branch_within_jal_range_preserves_registers ... ok
-test codegen::tests::register_contract_allows_only_entry_wrapper_writes_to_direct_registers ... ok
-test codegen::tests::dynamic_molecule_fixed_field_codegen_checks_full_header_and_exact_span ... ok
-test codegen::tests::rv64_li_boundary_values_materialize_correct_bits ... ok
-test codegen::tests::dynamic_molecule_vector_field_access_validates_full_table_offsets ... ok
-test codegen::tests::semantic_molecule_field_access_uses_validated_api_gate ... ok
-test codegen::tests::sp_addi_large_offsets_clobber_only_destination_register ... ok
-test codegen::tests::state_transition_edges_use_explicit_consumed_binding ... ok
-test codegen::tests::strict_audit_outgoing_stack_args_are_staged_inside_current_frame ... ok
-test codegen::tests::type_hash_missing_output_buffer_slots_report_compile_error ... ok
-test codegen::tests::narrow_arithmetic_codegen_truncates_to_declared_width ... ok
-test codegen::tests::type_hash_missing_param_slots_report_compile_error ... ok
-test codegen::tests::u128_const_without_fixed_storage_reports_compile_error ... ok
-test codegen::tests::unaligned_scalar_load_large_offsets_preserve_live_accumulator ... ok
-test codegen::tests::machine_layout_plan_reports_branch_relaxation_metrics ... ok
-test codegen::tests::unrepresentable_memory_load_offsets_report_compile_error ... ok
-test codegen::tests::unrepresentable_stack_offsets_report_compile_error ... ok
-test debug::tests::test_debug_info_generator ... ok
-test codegen::tests::schema_ref_call_preserves_schema_abi_length ... ok
-test debug::tests::test_dwarf_generation ... ok
-test debug::tests::test_line_table ... ok
-test debug::tests::test_type_registration ... ok
-test codegen::tests::runtime_cast_codegen_checks_narrowing_and_bool_canonicality ... ok
-test docgen::tests::docgen_emits_flat_pool_runtime_input_requirements ... ok
-test docgen::tests::docgen_emits_transaction_invariant_checked_subconditions ... ok
-test docgen::tests::docgen_emits_markdown_for_action ... ok
-test docgen::tests::docgen_html_escapes_module_and_item_text ... ok
-test error::tests::caret_padding_starts_at_span_column ... ok
-test error::tests::caret_width_counts_characters_not_bytes ... ok
-test flow::tests::consumed_flow_tracking_follows_expression_aliases ... ok
-test fmt::tests::format_action_transition_block_for_multiple_edges ... ok
-test codegen::tests::internal_assembler_relaxes_out_of_range_conditional_branch ... ok
-test fmt::tests::format_indents_preserve_fields_inside_expression_block ... ok
-test fmt::tests::format_preserves_single_element_tuple_expression ... ok
-test fmt::tests::format_preserves_type_policy_metadata ... ok
-test fmt::tests::format_round_trips_inline_if_tuple_expression ... ok
-test fmt::tests::format_round_trips_multiline_expression_block ... ok
-test fmt::tests::format_round_trips_preserve_block ... ok
-test fmt::tests::format_round_trips_require_block ... ok
-test fmt::tests::format_round_trips_simple_module ... ok
-test fmt::tests::format_single_expr_require_block_uses_compact_form ... ok
-test fmt::tests::format_round_trips_stdlib_lifecycle_field_block ... ok
-test fmt::tests::format_uses_canonical_assert_and_no_const_semicolon ... ok
-test fmt::tests::format_uses_field_shorthand_when_value_matches_name ... ok
-test codegen::tests::stack_pointer_offsets_are_emitted_through_helpers ... ok
-test incremental::tests::clean_cache_rejects_overflowing_max_age ... ok
-test incremental::tests::test_dependency_graph ... ok
-test incremental::tests::clean_cache_skips_output_paths_outside_trusted_root ... ok
-test incremental::tests::test_change_detector ... ok
-test incremental::tests::load_cache_drops_units_with_paths_outside_trusted_root ... ok
-test ir::tests::assert_in_pure_function_lowers_failure_to_abort_terminator ... ok
-test ir::tests::all_diverging_match_expression_does_not_leave_unreachable_join ... ok
-test ir::tests::constant_cast_rejects_out_of_range_u128_narrowing ... ok
-test incremental::tests::test_incremental_compiler ... ok
-test ir::tests::binary_arithmetic_result_type_preserves_left_operand_width ... ok
-test ir::tests::contextual_integer_binary_operands_lower_to_peer_width ... ok
-test ir::tests::ir_generation_aggregates_lowering_errors_with_source_spans ... ok
-test ir::tests::exhaustive_enum_match_unmatched_path_lowers_to_abort_terminator ... ok
-test ir::tests::ir_straight_line_lifecycle_certificate_rejects_duplicate_consume_without_typecheck ... ok
-test ir::tests::ir_type_value_kind_never_derives_status_kinds ... ok
-test ir::tests::ir_straight_line_lifecycle_certificate_rejects_branch_local_create_without_typecheck ... ok
-test ir::tests::poison_lowering_keeps_value_invalid_while_block_stays_live ... ok
-test ir::tests::mixed_width_expression_local_widening_lowers_as_explicit_casts ... ok
-test ir::tests::logical_operators_lower_as_short_circuit_control_flow ... ok
-test ir::tests::reference_and_deref_unary_result_types_match_ast_types ... ok
-test ir::tests::require_block_lowers_to_atomic_requires ... ok
-test ir::tests::status_boundary_ir_verifier_allows_domain_u64_return_tuple_and_call_argument ... ok
-test ir::tests::runtime_narrowing_cast_lowers_as_cast_instruction ... ok
-test ir::tests::status_boundary_ir_verifier_allows_unit_runtime_helper_when_status_is_checked_by_codegen_boundary ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_dropped_raw_syscall_status ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_as_domain_call_argument ... ok
-test ir::tests::preserve_sugar_populates_preserved_fields ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_in_tuple_field ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_produced_without_checked_consumer ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_returned_as_domain_u64 ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_stored_as_dsl_local ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_unit_runtime_helper_status_stored_as_domain_u64 ... ok
-test ir::tests::stdlib_claim_lowers_to_consumed_receipt_and_locked_declared_output ... ok
-test ir::tests::stdlib_settle_lowers_to_consumed_input_and_locked_output ... ok
-test ir::tests::strict_audit_ir_lowering_records_instruction_level_provenance ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_constant_destination_width_mismatch ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_empty_body_blocks ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_extra_consume_set_metadata ... ok
-test ir::tests::stdlib_transfer_lowers_to_single_consumed_input_and_locked_output ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_poisoned_load_const ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_poisoned_lowering_module ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_missing_terminator_target ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_poisoned_lowering_operand ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_missing_create_set_metadata ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_use_not_defined_on_all_paths ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_stale_write_intents_metadata ... ok
-test ir::tests::strict_audit_ir_verifier_reports_instruction_provenance ... ok
-test ir::tests::strict_audit_schema_field_accesses_are_rematerialized_per_cfg_path ... ok
-test lexer::tests::test_byte_string ... ok
-test lexer::tests::test_comment ... ok
-test codegen::tests::vm2_syscall_helpers_emit_executable_status_checked_wrappers ... ok
-test lexer::tests::test_identifiers ... ok
-test lexer::tests::test_keywords ... ok
-test lexer::tests::test_numbers ... ok
-test lexer::tests::rejects_oversized_identifier ... ok
-test lexer::tests::test_operators ... ok
-test lexer::tests::test_punctuation ... ok
-test lexer::tests::test_string ... ok
-test lexer::tests::test_unterminated_string_errors ... ok
-test lexer::tests::test_unterminated_byte_string_errors ... ok
-test docgen::tests::docgen_emits_invariant_coverage_summary ... ok
-test codegen::tests::u128_delta_arithmetic_codegen_uses_fixed_byte_storage ... ok
-test lsp::tests::lsp_position_conversion_treats_crlf_as_single_line_ending ... ok
-test lsp::tests::lsp_position_incremental_change_applies_crlf_ranges ... ok
-test lsp::tests::goto_definition_prefers_local_scope_over_top_level_symbol ... ok
-test lsp::tests::lsp_primitive_strict_rejects_legacy_capabilities ... ok
-test lsp::tests::lsp_rejects_oversized_documents ... ok
-test lsp::tests::lsp_rejects_document_count_over_limit ... ok
-test lsp::tests::find_references_for_locals_stays_in_enclosing_callable_scope ... ok
-test lsp::tests::test_ckb_namespace_completions ... ok
-test lsp::tests::lsp_reads_primitive_strict_from_manifest ... ok
-test lsp::tests::test_flow_namespace_completions ... ok
-test codegen::tests::entry_dynamic_witness_stack_arg_staging_preserves_cursor_register ... ok
-test lsp::tests::test_goto_definition_and_references ... ok
-test lsp::tests::test_code_actions_for_lowering_diagnostics ... ok
-test lsp::tests::test_incremental_change_applies_utf16_ranges_after_non_bmp_text ... ok
-test lsp::tests::test_format_document ... ok
-test lsp::tests::test_incremental_change_ignores_invalid_utf16_ranges ... ok
-test lsp::tests::test_keyword_completions ... ok
-test lsp::tests::test_lsp_position_conversion_uses_utf16_columns ... ok
-test lsp::tests::test_flow_u8_namespace_completions ... ok
-test lsp::tests::test_action_hover_includes_lowering_metadata ... ok
-test lsp::tests::test_parse_errors_become_diagnostics ... ok
-test lsp::tests::test_hover ... ok
-test lsp::tests::test_lsp_server ... ok
-test lsp::tests::test_vec_member_completions_match_supported_helpers ... ok
-test lsp::tests::test_selection_range_orders_child_before_parent ... ok
-test lsp::tests::test_lowering_diagnostics_warn_for_fail_closed_runtime_actions ... ok
-test lsp::tests::test_workspace_diagnostics_check_imported_type_id_collisions ... ok
-test lsp::tests::test_workspace_rename_is_disabled_until_symbol_scoped ... ok
-test optimize::tests::does_not_inline_block_bodies_that_can_capture_call_site_names ... ok
-test lsp::tests::test_workspace_goto_definition_across_modules ... ok
-test optimize::tests::folds_boolean_expressions ... ok
-test optimize::tests::folds_integer_arithmetic ... ok
-test optimize::tests::folds_unsigned_high_bit_integer_operations ... ok
-test lsp::tests::test_workspace_references_across_modules ... ok
-test optimize::tests::folds_literal_if_statements_without_touching_cell_ops ... ok
-test optimize::tests::propagates_constants_inlines_small_functions_and_removes_dead_code ... ok
-test optimize::tests::unused_let_elimination_preserves_calls_and_stdlib_constraints ... ok
-test package::tests::git_cache_entry_name_is_hash_only ... ok
-test package::tests::lockfile_consistency_allows_resolved_transitive_path_dependencies ... ok
-test package::tests::lockfile_consistency_requires_exact_git_revision_match ... ok
-test package::tests::lockfile_replace_with_resolved_prunes_removed_dependencies ... ok
-test package::tests::lockfile_consistency_reports_stale_and_mismatched_path_sources ... ok
-test package::tests::package_manager_accepts_allowed_git_url_transports ... ok
-test package::tests::package_manager_git_checkout_revalidates_full_commit_refs ... ok
-test package::tests::package_manager_git_commands_separate_user_controlled_ref_arguments ... ok
-test package::tests::lockfile_read_from_root_rejects_malformed_lockfiles ... ok
-test package::tests::git_cache_child_check_rejects_path_escape ... ok
-test package::tests::package_manager_allows_path_dependency_without_version ... ok
-test package::tests::package_manager_rejects_branch_or_tag_git_dependency_before_fetch ... ok
-test package::tests::package_manager_rejects_registry_dependencies_fail_closed ... ok
-test package::tests::package_manager_rejects_local_path_dependency_traversal ... ok
-test lexer::tests::rejects_oversized_string_literal ... ok
-test package::tests::package_manager_rejects_unpinned_git_dependency_before_fetch ... ok
-test package::tests::package_manager_rejects_transitive_path_dependency_cycles ... ok
-test package::tests::package_manager_rejects_unsafe_git_url_transports ... ok
-test package::tests::test_dependency_graph ... ok
-test package::tests::package_manager_resolves_local_path_dependencies ... ok
-test package::tests::test_manifest_serialization ... ok
-test package::tests::test_version_compatibility ... ok
-test parser::tests::action_where_block_allows_indented_following_top_level_item ... ok
-test parser::tests::action_where_block_keeps_indented_keyword_like_binding_in_body ... ok
-test parser::tests::array_size_uses_checked_target_width_conversion ... ok
-test parser::tests::assignment_range_and_cast_spans_cover_full_expression ... ok
-test parser::tests::generic_type_arguments_allow_newlines ... ok
-test parser::tests::hex_literal_exprs_parse_as_integers ... ok
-test parser::tests::binary_expr_spans_cover_full_expression ... ok
-test parser::tests::identity_policy_diagnostic_uses_bad_policy_span ... ok
-test parser::tests::named_arg_diagnostic_uses_bad_name_span ... ok
-test package::tests::package_manager_resolves_transitive_local_path_dependencies ... ok
-test parser::tests::parser_empty_token_slice_returns_controlled_error ... ok
-test parser::tests::parser_rejects_bang_assert_syntax ... ok
-test parser::tests::parser_rejects_deep_unary_expression_before_stack_overflow ... ok
-test parser::tests::postfix_expr_spans_cover_the_full_postfix_chain ... ok
-test parser::tests::postfix_exprs_cover_the_consumed_source_range ... ok
-test parser::tests::parser_rejects_deep_if_expression_before_stack_overflow ... ok
-test parser::tests::struct_init_span_covers_type_name_and_body ... ok
-test parser::tests::primitive_and_container_exprs_keep_source_spans ... ok
-test parser::tests::test_action_where_column_one_flow_identifier_stays_in_body ... ok
-test parser::tests::test_parse_action ... ok
-test parser::tests::test_launch_expression_is_reserved_until_lowering_exists ... ok
-test parser::tests::test_parse_aggregate_invariant_primitives ... ok
-test parser::tests::test_parse_create_field_shorthand ... ok
-test parser::tests::test_parse_expression ... ok
-test parser::tests::test_parse_action_transition_block ... ok
-test parser::tests::test_parse_flow_and_action_transition_clause ... ok
-test parser::tests::test_parse_grouped_use_imports ... ok
-test parser::tests::test_parse_invariant ... ok
-test lsp::tests::test_receipt_hover_includes_flow_metadata ... ok
-test parser::tests::test_parse_invariant_assert_statement ... ok
-test parser::tests::test_parse_merges_attribute_and_inline_capabilities ... ok
-test parser::tests::test_parse_prefix_source_before_keyword_like_name ... ok
-test parser::tests::test_parse_prefix_source_and_create_target ... ok
-test parser::tests::test_parse_preserve_block ... ok
-test parser::tests::test_parse_require_block ... ok
-test parser::tests::test_parse_preserve_single_field ... ok
-test parser::tests::test_parse_resource ... ok
-test parser::tests::test_parse_type_id_attribute ... ok
-test parser::tests::test_postfix_does_not_cross_statement_newline ... ok
-test parser::tests::test_reject_bare_preserve ... ok
-test parser::tests::test_reject_empty_require_block ... ok
-test parser::tests::test_reject_empty_preserve_block ... ok
-test parser::tests::test_reject_preserve_except ... ok
-test parser::tests::test_reject_preserve_wildcard ... ok
-test parser::tests::test_reject_require_block_with_consume ... ok
-test parser::tests::test_rejects_empty_transition_block ... ok
-test parser::tests::test_rejects_generic_resource_definition ... ok
-test parser::tests::test_rejects_action_brace_body ... ok
-test parser::tests::test_reject_require_block_with_control_flow ... ok
-test parser::tests::test_rejects_legacy_move_clause ... ok
-test parser::tests::test_rejects_output_parameter_source_prefix ... ok
-test parser::tests::test_rejects_read_ref_as_type_qualifier ... ok
-test parser::tests::test_rejects_transition_clause_without_state_colons ... ok
-test parser::tests::test_rejects_type_id_on_action ... ok
-test parser::tests::test_rejects_typed_let_without_initializer ... ok
-test parser::tests::test_rejects_use_as_without_alias ... ok
-test proof_plan::soundness::tests::strict_pp0103_only_applies_to_checked_runtime_records ... ok
-test parser::tests::test_rejects_unbraced_match_arms ... ok
-test proof_plan::soundness::tests::strict_pp0201_only_applies_to_executing_script_args ... ok
-test proof_plan::tests::checked_runtime_without_concrete_evidence_is_not_marked_covered ... ok
-test proof_plan::tests::checked_static_detail_does_not_create_executable_runtime_evidence ... ok
-test proof_plan::tests::replace_unique_features_are_transaction_scoped ... ok
-test proof_plan::tests::metadata_only_invariant_proof_plan_has_no_executable_evidence ... ok
-test proof_plan::tests::unique_lifecycle_features_have_specific_codegen_evidence_ids ... ok
-test proof_plan::tests::checked_runtime_proof_plan_claims_include_executable_evidence ... ok
-test repl::tests::repl_read_limited_line_accepts_bounded_input ... ok
-test resolve::tests::test_global_type_resolution_rejects_ambiguous_symbol ... ok
-test resolve::tests::test_grouped_use_resolves_multiple_symbols ... ok
-test resolve::tests::rejects_cross_module_type_dependency_cycles ... ok
-test resolve::tests::test_imported_type_resolution_uses_exact_module_path ... ok
-test resolve::tests::test_module_resolver ... ok
-test resolve::tests::test_path_resolver ... ok
-test resolve::tests::test_register_module_rejects_deferred_missing_import_when_target_arrives ... ok
-test resolve::tests::test_rejects_duplicate_local_symbols ... ok
-test resolve::tests::test_register_module_rejects_missing_imported_symbol_when_target_is_loaded ... ok
-test resolve::tests::test_rejects_import_alias_collisions ... ok
-test runtime_errors::tests::diagnostic_messages_map_to_runtime_error_codes_where_possible ... ok
-test runtime_errors::tests::runtime_error_docs_explain_ckb_code_overlap_channels ... ok
-test runtime_errors::tests::runtime_error_registry_roundtrips_and_has_unique_codes ... ok
-test runtime_errors::tests::runtime_error_docs_cover_every_registered_code ... ok
-test simulate::tests::array_size_simulator_uses_checked_target_width_for_indices ... ok
-test simulate::tests::simulate_if_branch ... ok
-test simulate::tests::simulate_cell_operation_traces ... ok
-test simulate::tests::simulate_pure_arithmetic_action ... ok
-test simulate::tests::simulate_read_ref_traces ... ok
-test simulate::tests::simulate_rejects_wrong_action_arity ... ok
-test simulate::tests::simulate_step_limit ... ok
-test stdlib::collections::tests::collection_assembly_has_no_raw_syscalls_or_unclassified_helpers ... ok
-test simulate::tests::simulate_unsigned_high_bit_integer_operations ... ok
-test stdlib::collections::tests::test_collection_functions ... ok
-test stdlib::collections::tests::collection_public_helpers_do_not_dereference_raw_a0_handles ... ok
-test repl::tests::repl_read_limited_line_rejects_oversized_input ... ok
-test stdlib::tests::generated_stdlib_has_no_raw_syscall_wrapper_symbols ... ok
-test stdlib::collections::tests::test_generate_assembly ... ok
-test stdlib::tests::generated_stdlib_omits_raw_syscall_wrappers ... ok
-test stdlib::tests::test_get_function ... ok
-test stdlib::tests::test_generate_assembly ... ok
-test stdlib::tests::test_scheduler_metadata_generate_molecule_uses_table_layout ... ok
-test stdlib::tests::test_std_functions ... ok
-test syscalls::tests::ckb_debug_syscall_is_not_a_production_inventory_surface ... ok
-test stdlib::tests::test_generate_ckb_assembly_uses_checked_env_helpers ... ok
-test syscalls::tests::emitted_manual_runtime_and_stdlib_helpers_are_classified ... ok
-test syscalls::tests::every_low_level_syscall_spec_is_inventoried ... ok
-test tests::action_scheduler_witness_bytes_rejects_conflicting_molecule_alias ... ok
-test syscalls::tests::helper_inventory_has_no_duplicate_symbols ... ok
-test syscalls::tests::ckb_syscall_abi_matches_checked_baseline ... ok
-test tests::ckb_capacity_calculation_saturates_on_extreme_sizes ... ok
-test tests::branch_local_anonymous_creates_are_rejected_until_effects_are_cfg_aware ... ok
-test tests::ckb_deploy_manifest_rejects_conflicting_cell_dep_locations ... ok
-test tests::ckb_constraints_surface_capacity_planning_for_created_outputs ... ok
-test runtime_errors::tests::codegen_does_not_emit_unregistered_numeric_fail_literals ... ok
-test tests::ckb_deploy_manifest_rejects_incomplete_split_cell_dep_location ... ok
-test package::tests::package_manager_git_dependency_fails_for_invalid_url ... ok
-test tests::ckb_deploy_manifest_rejects_invalid_dep_type ... ok
-test tests::ckb_deploy_manifest_rejects_invalid_hash_type ... ok
-test tests::ckb_deploy_manifest_surfaces_hash_type_and_dep_group_policy ... ok
-test package::tests::package_manager_git_update_fails_closed_on_fetch_error ... ok
-test lsp::tests::lsp_loads_sibling_modules_for_standalone_example_imports ... ok
-test tests::ckb_target_profile_has_no_policy_exception ... ok
-test tests::ckb_dynamic_vector_len_can_drive_mutate_transition ... ok
-test tests::collection_fail_closed_feature_names_are_stable ... ok
-test tests::ckb_lock_false_return_lowers_to_script_failure ... ok
-test tests::ckb_entry_lock_scope_selects_lock_entrypoint ... ok
-test tests::ckb_u64_syscall_helpers_check_return_code_and_size ... ok
-test tests::compile_accepts_chain_neutral_timepoint_under_ckb_profile ... ok
-test codegen::tests::internal_assembler_relaxes_out_of_range_register_conditional_branch ... ok
-test tests::compile_accepts_action_witness_source_qualifier ... ok
-test tests::compile_accepts_ckb_target_profile_timepoint ... ok
-test tests::ckb_entry_scope_keeps_vec_element_schema_dependencies ... ok
-test tests::compile_accepts_ckb_header_epoch_api_only_for_ckb_profile ... ok
-test tests::compile_accepts_complete_branch_return_paths ... ok
-test tests::compile_accepts_ckb_shared_create_when_verifier_covered ... ok
-test tests::compile_accepts_empty_vec_literal_with_declared_type ... ok
-test tests::ckb_entry_action_scope_excludes_unselected_unsupported_code ... ok
-test tests::compile_accepts_create_field_shorthand ... ok
-test tests::compile_accepts_flow_initial_create_at_any_declared_state ... ok
-test tests::compile_accepts_flow_state_name_initializers ... ok
-test tests::compile_accepts_core_input_output_state_transition_edges ... ok
-test codegen::tests::emitted_runtime_helper_symbols_are_classified_in_syscall_inventory ... ok
-test lexer::tests::rejects_oversized_block_comment ... ok
-test tests::compile_accepts_explicit_flow_action_edges ... ok
-test tests::compile_accepts_flow_edge_returning_to_first_state ... ok
-test tests::compile_accepts_flow_on_custom_state_field ... ok
-test tests::compile_accepts_kernel_effect_capabilities_for_destroy ... ok
-test tests::compile_accepts_pure_ckb_target_profile ... ok
-test tests::compile_accepts_non_initial_flow_create_without_consumed_prior_state ... ok
-test tests::compile_accepts_lock_args_script_args_binding ... ok
-test tests::compile_accepts_kernel_effect_capabilities_for_transfer ... ok
-test tests::compile_accepts_lock_boundary_param_sources_and_require ... ok
-test tests::compile_accepts_named_action_output_and_create_binding ... ok
-test tests::compile_accepts_qualified_flow_state_names ... ok
-test tests::compile_accepts_prefix_read_params_as_cell_dep_bindings ... ok
-test tests::compile_allows_struct_type_id_under_ckb_profile ... ok
-test tests::compile_accepts_static_flow_update_to_non_initial_state ... ok
-test tests::compile_accepts_vec_literals_in_create_fields ... ok
-test tests::compile_allows_actions_and_locks_to_call_pure_functions ... ok
-test tests::compile_binds_duplicate_read_refs_by_order_not_name ... ok
-test tests::compile_accepts_symmetric_where_branch_output_constraints ... ok
-test tests::compile_allows_unit_function_calls_as_statements ... ok
-test tests::compile_allows_flow_update_to_declared_initial_state_at_type_check ... ok
-test tests::compile_binds_read_action_schema_params_to_cell_deps ... ok
-test tests::compile_create_unique_field_identity_emits_runtime_anchor ... ok
-test tests::compile_binds_read_ref_entry_params_to_cell_deps ... ok
-test tests::compile_classifies_resource_merge_amount_sum_as_checked_runtime ... ok
-test tests::compile_classifies_resource_split_amount_subtraction_as_checked_runtime ... ok
-test tests::compile_emits_create_output_field_verification_for_fixed_u64_fields ... ok
-test tests::compile_emits_direct_user_function_calls ... ok
-test tests::compile_emits_ckb_style_load_cell_abi_for_cell_runtime_summary ... ok
-test tests::compile_exposes_ckb_type_id_contract_under_ckb_profile ... ok
-test tests::compile_classifies_guarded_identity_field_merge_as_checked_runtime ... ok
-test tests::compile_classifies_protocol_agnostic_guarded_transition_as_checked_runtime ... ok
-test tests::compile_destroy_policies_are_policy_aware ... ok
-test tests::compile_entry_witness_rejects_payloads_larger_than_buffer ... ok
-test tests::compile_file_explicit_target_overrides_manifest_build_target ... ok
-test tests::compile_emits_protocol_agnostic_guard_equality_proofplan_records ... ok
-test tests::compile_folds_local_fixed_array_len_to_constant ... ok
-test tests::compile_file_loads_local_path_dependencies_from_cell_manifest ... ok
-test tests::compile_file_uses_manifest_ckb_target_profile ... ok
-test tests::compile_identity_ckb_type_id_emits_metadata ... ok
-test tests::compile_file_uses_manifest_build_target_by_default ... ok
-test tests::compile_identity_field_emits_path ... ok
-test tests::compile_ignores_trivial_self_equality_guard_records ... ok
-test tests::compile_identity_script_args_emits_metadata ... ok
-test tests::compile_identity_none_is_default_and_hidden ... ok
-test tests::compile_identity_singleton_type_emits_metadata ... ok
-test tests::compile_file_source_content_hash_is_path_independent ... ok
-test tests::bundled_token_example_strict_ckb_compile_is_admitted ... ok
-test tests::compile_infers_and_validates_read_only_effects ... ok
-test tests::compile_lowers_array_of_tuples_static_index_projection ... ok
-test tests::compile_lowers_assert_invariant_into_fail_closed_cfg ... ok
-test tests::compile_lowers_block_tail_if_expressions ... ok
-test tests::compile_lowers_bounded_vec_literal_to_stack_collection ... ok
-test tests::compile_lowers_byte_string_literals_with_expected_array_type ... ok
-test tests::compile_lowers_consumed_input_field_access_through_loaded_cell_bytes ... ok
-test tests::compile_lowers_for_range_into_counted_loop_cfg ... ok
-test tests::compile_lowers_exhaustive_enum_match_without_wildcard ... ok
-test tests::compile_lowers_if_expression_fixed_byte_const_join_move ... ok
-test tests::compile_lowers_fixed_byte_schema_field_comparison ... ok
-test tests::compile_lowers_if_expression_with_join_move ... ok
-test tests::compile_lowers_ckb_group_source_large_immediate_to_riscv_elf ... ok
-test tests::compile_lowers_len_method_to_length_instruction ... ok
-test tests::compile_lowers_local_constants_into_real_operands ... ok
-test tests::compile_lowers_if_statement_into_basic_blocks ... ok
-test tests::compile_keeps_unchecked_transition_field_runtime_required ... ok
-test tests::compile_lowers_local_struct_field_reads_and_writes ... ok
-test tests::compile_lowers_local_tuple_destructuring_to_field_slots ... ok
-test tests::compile_lowers_local_fixed_array_static_index_reads_and_writes ... ok
-test tests::compile_lowers_local_tuple_static_field_reads_and_writes ... ok
-test tests::compile_lowers_numeric_cast_without_zero_fallback ... ok
-test tests::compile_lowers_packed_bool_and_u32_schema_fields_without_aligned_loads ... ok
-test tests::compile_lowers_read_ref_schema_field_to_ckb_runtime_assembly ... ok
-test tests::compile_lowers_mutable_assignments_in_loop_bodies ... ok
-test tests::compile_lowers_match_expression_into_branch_cfg ... ok
-test tests::compile_lowers_pure_function_assert_failure_to_abort ... ok
-test tests::compile_lowers_stack_vec_clear_and_is_empty ... ok
-test tests::compile_lowers_stack_vec_extend_from_fixed_bytes ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_capacity ... ok
-test tests::compile_lowers_read_ref_schema_field_to_ckb_runtime_elf ... ok
-test tests::compile_lowers_schema_backed_parameter_field_access_to_elf ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_pop ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_first_last ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_contains ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_insert ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_runtime_push_index ... ok
-test tests::compile_lowers_stack_vec_scalar_capacity ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_remove ... ok
-test tests::compile_lowers_stack_vec_scalar_contains ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_truncate ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_reverse ... ok
-test tests::compile_lowers_stack_vec_scalar_insert ... ok
-test tests::compile_lowers_stack_vec_scalar_first_last ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_set ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_swap ... ok
-test tests::compile_lowers_stack_vec_scalar_remove ... ok
-test tests::compile_lowers_stack_vec_scalar_pop ... ok
-test tests::compile_lowers_stack_vec_scalar_set ... ok
-test tests::compile_lowers_stack_vec_scalar_runtime_push_len_index ... ok
-test tests::compile_lowers_stack_vec_scalar_swap ... ok
-test tests::compile_lowers_stack_vec_scalar_reverse ... ok
-test tests::compile_lowers_tail_expr_as_action_return ... ok
-test tests::compile_lowers_stack_vec_scalar_truncate ... ok
-test tests::compile_lowers_tail_if_as_action_return ... ok
-test tests::compile_lowers_u128_equality_as_fixed_byte_comparison ... ok
-test tests::compile_lowers_type_hash_without_generic_call ... ok
-test tests::compile_lowers_vec_with_capacity_to_stack_collection_new ... ok
-test tests::compile_merges_if_branch_linear_states_conservatively ... ok
-test tests::compile_lowers_vec_builtins_without_generic_calls ... ok
-test tests::compile_lowers_while_statement_into_loop_cfg ... ok
-test tests::compile_lowers_zero_builtin_without_generic_call ... ok
-test tests::compile_marks_cell_backed_vec_runtime_features ... ok
-test tests::compile_merges_linear_transfers_inside_block_tail_if_expressions ... ok
-test tests::compile_lowers_u128_mutate_delta_with_carry_arithmetic ... ok
-test tests::compile_merges_linear_transfers_inside_if_expressions ... ok
-test tests::compile_classifies_hash_committed_output_field_as_guarded ... ok
-test tests::compile_merges_linear_transfers_inside_match_expressions ... ok
-test tests::compile_metadata_exposes_ckb_type_id_create_output_plan_under_ckb_profile ... ok
-test tests::compile_metadata_exposes_aggregate_invariant_primitives_in_proof_plan ... ok
-test tests::compile_metadata_exposes_declared_invariant_proof_plan ... ok
-test tests::compile_materializes_local_fixed_byte_constants_into_rodata ... ok
-test tests::compile_metadata_exposes_lock_group_proof_plan_for_lock_entry ... ok
-test tests::compile_metadata_with_options_rejects_strict_legacy_capabilities ... ok
-test tests::compile_metadata_exposes_transaction_and_selected_cell_aggregate_invariants ... ok
-test tests::compile_metadata_reports_parameterless_action_entrypoint_selection ... ok
-test tests::compile_metadata_warns_for_lock_group_transaction_invariant_scope ... ok
-test tests::compile_merges_linear_transfers_inside_block_expressions ... ok
-test tests::compile_metadata_declares_molecule_vm_abi ... ok
-test tests::compile_metadata_exposes_covenant_proof_plan_for_transfer ... ok
-test tests::compile_path_rejects_duplicate_modules_across_source_roots ... ok
-test tests::compile_metadata_proof_plan_preserves_lock_args_source ... ok
-test tests::compile_path_rejects_missing_configured_source_root ... ok
-test tests::compile_normalizes_same_module_qualified_helper_calls ... ok
-test tests::compile_path_rejects_non_path_dependencies ... ok
-test tests::compile_path_rejects_missing_path_dependency_manifest ... ok
-test tests::compile_path_accepts_package_root ... ok
-test tests::compile_path_ignores_examples_outside_package_source_roots ... ok
-test tests::compile_path_rejects_path_dependency_cycles ... ok
-test tests::compile_path_rejects_path_dependency_traversal ... ok
-test tests::compile_metadata_with_options_uses_ast_optimizer_for_nonzero_levels ... ok
-test tests::compile_package_import_alias_emits_matching_external_callable ... ok
-test tests::compile_prefers_no_arg_main_for_entry_wrapper ... ok
-test tests::compile_path_supports_custom_entry_directory_modules ... ok
-test tests::compile_path_supports_configured_source_roots_without_src ... ok
-test tests::compile_preserves_if_array_aggregate_slots ... ok
-test tests::compile_preserves_create_instructions_in_assembly ... ok
-test tests::compile_preserves_index_and_tuple_projection_in_assembly ... ok
-test tests::compile_preserves_consume_and_destroy_instructions_in_assembly ... ok
-test tests::compile_preserves_if_tuple_aggregate_slots ... ok
-test tests::compile_preserves_match_tuple_aggregate_slots ... ok
-test tests::compile_rejects_assert_delta_argument_from_cell_read ... ok
-test tests::compile_rejects_aggregate_invariant_non_fixed_field ... ok
-test tests::compile_rejects_assert_invariant_as_tail_return_value ... ok
-test tests::compile_rejects_assignment_through_read_only_references ... ok
-test tests::compile_rejects_assignment_to_immutable_array_element ... ok
-test tests::compile_rejects_assignment_to_immutable_tuple_field ... ok
-test tests::compile_rejects_assignment_to_temporary_field_targets ... ok
-test tests::compile_rejects_asymmetric_where_branch_output_constraints ... ok
-test tests::compile_rejects_bare_return_from_value_actions ... ok
-test tests::compile_rejects_binding_assert_invariant_results ... ok
-test tests::compile_rejects_bad_flow_state_field_type_on_main_path ... ok
-test tests::compile_rejects_binding_unit_function_results ... ok
-test tests::compile_rejects_bounded_vec_literal_type_mismatch ... ok
-test tests::compile_rejects_builtin_call_argument_mismatches ... ok
-test tests::compile_rejects_cell_metadata_stdlib_on_non_cell_args ... ok
-test tests::compile_rejects_core_state_transition_edge_not_in_graph ... ok
-test tests::compile_preserves_schema_backed_parameter_field_access_in_assembly ... ok
-test tests::compile_rejects_destroy_without_destroy_capability ... ok
-test tests::compile_rejects_duplicate_stable_type_ids ... ok
-test tests::compile_rejects_duplicate_flow_for_same_state_field ... ok
-test tests::compile_rejects_duplicate_top_level_symbols ... ok
-test tests::compile_lowers_ckb_hash_commitment_comparison_without_fixed_byte_fail_closed ... ok
-test tests::compile_preserves_dynamic_witness_cursor_after_lock_args ... ok
-test tests::compile_rejects_dynamic_assert_invariant_messages ... ok
-test tests::compile_rejects_dynamic_require_messages ... ok
-test tests::compile_rejects_dynamic_initial_flow_create_state ... ok
-test tests::compile_rejects_empty_array_length_mismatch ... ok
-test tests::compile_rejects_dynamic_unique_identity_field ... ok
-test tests::compile_rejects_empty_literal_in_non_vec_context ... ok
-test tests::compile_rejects_enum_payload_variants_until_lowering_exists ... ok
-test tests::compile_rejects_flow_by_action_when_explicit_move_uses_different_edge ... ok
-test tests::compile_rejects_flow_on_plain_struct ... ok
-test tests::compile_rejects_flow_by_action_without_exact_move_clause ... ok
-test tests::compile_rejects_flow_receipt_without_state_field ... ok
-test tests::compile_rejects_flow_payload_enum_state_field ... ok
-test tests::compile_rejects_forbidden_unwrap_helpers ... ok
-test tests::compile_rejects_helper_functions_that_indirectly_call_impure_actions ... ok
-test tests::compile_rejects_function_call_argument_mismatches ... ok
-test tests::compile_rejects_heterogeneous_array_literals ... ok
-test tests::compile_rejects_if_expression_branch_type_mismatch ... ok
-test tests::compile_rejects_impure_helper_functions ... ok
-test tests::compile_rejects_incomplete_branch_return_paths ... ok
-test tests::compile_rejects_input_source_outside_action_cell_params ... ok
-test tests::compile_rejects_invalid_enum_match_patterns ... ok
-test tests::compile_rejects_invalid_create_field_initializers ... ok
-test tests::compile_rejects_invariant_assert_runtime_operation ... ok
-test tests::compile_rejects_invalid_invariant_assert_expression ... ok
-test tests::compile_rejects_invalid_destroy_policy_shapes ... ok
-test tests::compile_rejects_invariant_without_explicit_trigger_and_scope ... ok
-test tests::compile_rejects_local_binding_name_reuse ... ok
-test tests::compile_rejects_local_fixed_array_static_oob_read ... ok
-test tests::compile_rejects_local_fixed_array_static_oob_write ... ok
-test tests::compile_rejects_linear_state_changes_hidden_inside_loops ... ok
-test tests::compile_rejects_local_mutable_reference_aliases ... ok
-test tests::compile_rejects_missing_action_return_paths ... ok
-test tests::compile_rejects_missing_flow_state_create_on_main_path ... ok
-test tests::compile_rejects_missing_function_return_paths ... ok
-test tests::compile_rejects_non_bool_lock_definitions ... ok
-test tests::compile_rejects_non_bool_assert_condition ... ok
-test tests::compile_rejects_local_references_to_linear_roots ... ok
-test tests::compile_rejects_noop_flow_transition_on_main_path ... ok
-test tests::compile_rejects_owned_linear_field_assignment ... ok
-test tests::compile_rejects_payload_or_unknown_enum_variant_values ... ok
-test tests::compile_rejects_pure_functions_that_call_ckb_header_runtime_builtins ... ok
-test tests::compile_rejects_out_of_range_flow_state_create_on_main_path ... ok
-test tests::compile_rejects_pure_functions_that_call_env_runtime_builtins ... ok
-test tests::compile_rejects_pure_functions_that_call_locks ... ok
-test tests::compile_rejects_read_ref_for_non_cell_backed_types ... ok
-test tests::compile_rejects_pure_functions_that_call_type_hash_runtime_builtin ... ok
-test tests::compile_produces_non_empty_riscv_assembly ... ok
-test tests::compile_rejects_return_values_from_unit_actions ... ok
-test tests::compile_rejects_returning_unit_function_results ... ok
-test tests::compile_rejects_state_edge_that_does_not_consume_binding ... ok
-test tests::compile_rejects_stateful_operations_without_named_linear_cell_operands ... ok
-test tests::compile_rejects_string_literals_as_runtime_values ... ok
-test tests::compile_rejects_unbound_assert_delta_argument ... ok
-test tests::compile_rejects_undeclared_action_state_edge ... ok
-test tests::compile_rejects_underdeclared_effect_annotations ... ok
-test tests::compile_rejects_reference_escape_boundaries ... ok
-test tests::compile_rejects_underdeclared_effects_through_calls ... ok
-test tests::compile_rejects_unknown_functions ... ok
-test tests::compile_rejects_underdeclared_effects_through_qualified_calls ... ok
-test tests::compile_rejects_unknown_target_profile ... ok
-test tests::compile_rejects_unknown_target_during_option_validation ... ok
-test tests::compile_rejects_unknown_struct_fields ... ok
-test tests::compile_rejects_unknown_or_reserved_named_types ... ok
-test tests::compile_rejects_unreachable_statements_after_return ... ok
-test tests::compile_rejects_unreachable_statements_after_complete_branch_return ... ok
-test tests::compile_rejects_unstable_callable_parameter_names ... ok
-test tests::compile_rejects_unsupported_optimization_level ... ok
-test tests::compile_rejects_unstable_schema_field_names ... ok
-test tests::compile_rejects_unsound_mutable_parameter_forms ... ok
-test tests::compile_rejects_untyped_empty_array_literals ... ok
-test tests::compile_rejects_wrong_qualified_flow_state_field_initializer ... ok
-test tests::compile_preserves_read_ref_instructions_in_assembly ... ok
-test tests::compile_rejects_unsupported_vec_helper_type_combinations ... ok
-test tests::compile_result_exposes_nested_fixed_molecule_schema_metadata ... ok
-test tests::compile_produces_non_empty_riscv_elf ... ok
-test tests::compile_rejects_state_transitions_inside_locks ... ok
-test tests::compile_produces_ckb_elf_without_vm_abi_trailer ... ok
-test tests::compile_result_exposes_schema_layout_metadata ... ok
-test tests::compile_rejects_lock_boundary_sources_outside_supported_scope ... ok
-test tests::compile_result_validation_rejects_compiler_version_mismatch ... ok
-test tests::compile_result_exposes_scheduler_metadata_sidecar ... ok
-test tests::compile_replace_unique_field_identity_compares_input_and_output ... ok
-test tests::compile_result_validation_rejects_constraints_artifact_format_mismatch ... ok
-test tests::compile_result_validation_rejects_assembly_with_vm_abi_trailer ... ok
-test tests::compile_result_validation_rejects_metadata_artifact_format_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_artifact_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_constraints_artifact_size_mismatch ... ok
-test tests::compile_result_validation_accepts_current_outputs ... ok
-test tests::compile_result_validation_rejects_metadata_artifact_size_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_schema_version_mismatch ... ok
-test tests::compile_result_validation_rejects_mismatched_ckb_type_id_create_output_plan ... ok
-test tests::compile_result_validation_rejects_mismatched_ckb_output_data_binding ... ok
-test tests::compile_result_validation_rejects_metadata_schema_downgrade ... ok
-test tests::compile_result_validation_rejects_metadata_source_content_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_target_profile_v0_14_abi_mismatch ... ok
-test tests::compile_reports_equivalent_state_transition_obligation_for_sugar_and_core_forms ... ok
-test tests::compile_result_validation_rejects_metadata_source_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_target_profile_mismatch ... ok
-test tests::compile_result_validation_rejects_type_id_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_tampered_artifact_hash ... ok
-test tests::compile_result_validation_rejects_missing_metadata_artifact_size ... ok
-test tests::compile_result_validation_rejects_molecule_schema_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_noncanonical_source_unit_hash ... ok
-test tests::compile_spills_parameters_and_returns_computed_value ... ok
-test tests::compile_supports_typed_empty_array_literals ... ok
-test tests::compile_result_writes_artifact_to_disk ... ok
-test tests::compile_lowers_stack_vec_fixed_schema_values ... ok
-test tests::compile_surfaces_type_level_hash_type_dsl_metadata ... ok
-test tests::compile_riscv_elf_accepts_full_width_u64_literals ... ok
-test tests::compile_tracks_linear_values_returned_from_complete_branches ... ok
-test tests::compile_tracks_linear_values_returned_from_tail_if_branches ... ok
-test tests::compile_unrolls_local_array_of_tuples_foreach_destructuring ... ok
-test tests::compile_unrolls_local_fixed_array_foreach_without_runtime_indexing ... ok
-test tests::compile_unrolls_fixed_param_array_foreach_with_pointer_abi ... ok
-test codegen::tests::codegen_rejects_generated_far_jump_scratch_relaxation ... ok
-test tests::compile_uses_ast_optimizer_for_nonzero_optimization_levels ... ok
-test tests::compile_verifies_create_output_against_computed_scalar_stack_value ... ok
-test tests::compile_tracks_linear_values_inside_aggregate_bindings ... ok
-test tests::compile_verifies_create_output_against_consumed_input_field_alias ... ok
-test tests::compile_verifies_created_output_bool_and_u32_fields ... ok
-test tests::compile_verifies_constructed_fixed_width_vec_output ... ok
-test tests::default_output_path_for_package_input_uses_build_dir ... ok
-test tests::default_output_path_for_package_input_uses_manifest_out_dir ... ok
-test tests::compile_verifies_created_scalar_fields_against_consumed_input_aliases ... ok
-test tests::compiled_riscv_elf_contains_exit_trampoline ... ok
-test tests::create_output_verifier_accepts_const_lock_hash ... ok
-test tests::compile_verifies_large_output_field_requirements_without_partial_fallback ... ok
-test tests::create_output_verifier_accepts_fixed_byte_params_and_consts ... ok
-test tests::entry_abi_constraints_mark_extreme_slot_counts_unsupported ... ok
-test tests::entry_witness_encoder_includes_schema_backed_params_as_length_prefixed_bytes ... ok
-test tests::entry_witness_bool_params_are_canonicalized ... ok
-test tests::entry_witness_encoder_matches_u64_wrapper_abi ... ok
-test tests::compile_riscv_elf_accepts_large_schema_field_offsets ... ok
-test tests::dynamic_schema_fixed_vec_length_is_table_decoded ... ok
-test tests::dynamic_schema_fixed_field_access_is_table_decoded ... ok
-test tests::compile_unique_script_args_and_singleton_identity_emit_hash_checks ... ok
-test tests::entry_witness_encoder_supports_fixed_byte_params ... ok
-test tests::ir_carries_flow_rules ... ok
-test tests::dynamic_mutable_schema_transitions_are_checked_after_table_decoding ... ok
-test tests::ir_lowers_unit_function_calls_without_result_destinations ... ok
-test tests::ir_rejects_unknown_call_return_types_without_u64_fallback ... ok
-test tests::ir_preserves_function_call_return_types ... ok
-test tests::ir_summary_captures_cell_runtime_accesses ... ok
-test tests::load_modules_for_input_collects_package_source_roots ... ok
-test tests::fixed_enum_fields_have_molecule_schema_metadata ... ok
-test tests::dynamic_schema_fixed_vec_iteration_is_table_decoded ... ok
-test tests::internal_calls_keep_outgoing_stack_area_abi_aligned ... ok
-test tests::generated_outgoing_stack_reservations_are_psabi_aligned ... ok
-test tests::dynamic_named_output_constraints_are_proven_in_where_block ... ok
-test tests::package_entry_must_stay_inside_package_root ... ok
-test tests::package_out_dir_must_stay_inside_package_root ... ok
-test tests::package_source_roots_must_stay_inside_package_root ... ok
-test tests::primitive_compat_predicates_match_validator_modes ... ok
-test tests::loaded_artifact_validation_rejects_metadata_artifact_size_mismatch ... ok
-test tests::generic_shared_mutation_does_not_emit_pool_pattern_metadata ... ok
-test tests::entry_witness_wrapper_supports_scalar_stack_args ... ok
-test tests::fixed_byte_mutable_state_set_transition_is_checked_under_ckb_profile ... ok
-test tests::scheduler_witness_hex_decode_rejects_invalid_metadata_hex ... ok
-test tests::resolve_input_path_accepts_package_root_and_manifest ... ok
-test tests::proof_plan_checked_static_excluded_from_on_chain_checked_obligations ... ok
-test tests::proof_plan_cross_references_matching_action_obligation_for_invariant ... ok
-test tests::named_action_output_create_binding_reuses_declared_output_index ... ok
-test tests::compile_riscv_elf_accepts_large_stack_offsets ... ok
-test tests::tuple_return_abi_rejects_more_than_eight_fields ... ok
-test tests::vm_abi_trailer_detection_requires_complete_zero_reserved_trailer ... ok
-test types::tests::block_expression_merges_existing_vec_refinements ... ok
-test types::tests::branch_local_consume_is_rejected_until_lifecycle_effects_are_cfg_aware ... ok
-test types::tests::branch_local_create_is_rejected_until_lifecycle_effects_are_cfg_aware ... ok
-test types::tests::byte_string_literal_type_uses_actual_length ... ok
-test types::tests::call_arguments_do_not_coerce_mut_ref_to_ref ... ok
-test types::tests::check_without_resolver_rejects_imports ... ok
-test types::tests::compound_assign_rejects_implicit_narrowing ... ok
-test tests::source_unit_disk_verification_accepts_paths_inside_trusted_root ... ok
-test types::tests::const_initializers_allow_supported_literals ... ok
-test types::tests::const_initializers_reject_cell_backed_types ... ok
-test types::tests::compound_assign_uses_numeric_binary_rules ... ok
-test types::tests::const_initializers_reject_cell_lifecycle_expressions ... ok
-test types::tests::const_initializers_reject_computed_expressions ... ok
-test types::tests::constant_narrowing_casts_must_fit ... ok
-test types::tests::contextual_integer_literals_fit_declared_widths ... ok
-test types::tests::cyclic_schema_type_dependencies_are_rejected ... ok
-test types::tests::duplicate_lifecycle_binding_is_rejected_until_effects_are_cfg_aware ... ok
-test types::tests::expected_type_does_not_widen_non_literal_abi_arg_boundary ... ok
-test types::tests::expected_type_does_not_widen_non_literal_field_boundary ... ok
-test types::tests::expected_type_does_not_widen_non_literal_let_boundary ... ok
-test types::tests::expected_type_does_not_widen_non_literal_return_boundary ... ok
-test types::tests::expression_branch_unreachable_code_is_rejected_by_typechecker ... ok
-test types::tests::explicit_cast_can_cross_integer_width_boundary ... ok
-test tests::source_unit_disk_verification_rejects_paths_outside_trusted_root ... ok
-test types::tests::generic_reference_detection_uses_type_structure ... ok
-test types::tests::if_expression_preserves_typed_vec_result_with_empty_constructor_branch ... ok
-test types::tests::if_statement_merges_matching_vec_refinements ... ok
-test types::tests::if_statement_rejects_divergent_vec_refinements ... ok
-test types::tests::imported_and_qualified_names_compare_as_same_type ... ok
-test types::tests::if_statement_rejects_one_sided_vec_refinement ... ok
-test types::tests::imported_type_ids_must_not_collide_in_visible_module_scope ... ok
-test tests::parameterized_entrypoint_emits_witness_entry_wrapper ... ok
-test types::tests::invalid_schema_field_types_are_not_registered_as_valid_fields ... ok
-test types::tests::imported_token_type_is_treated_as_linear ... ok
-test types::tests::lifecycle_capability_gates_reject_undeclared_kernel_effects ... ok
-test types::tests::match_requires_enum_scrutinee ... ok
-test types::tests::imported_linear_argument_is_marked_consumed_after_call ... ok
-test types::tests::mixed_width_arithmetic_and_ordering_are_rejected ... ok
-test types::tests::numeric_type_equality_respects_width ... ok
-test types::tests::numeric_named_type_equality_is_commutative ... ok
-test tests::proof_plan_marks_invariant_action_evidence_as_non_exhaustive ... ok
-test types::tests::non_tail_linear_expression_statements_are_rejected ... ok
-test types::tests::preserve_rejects_mismatched_field_types ... ok
-test types::tests::require_block_rejects_assignment_expression ... ok
-test types::tests::qualified_identifier_must_resolve_to_value ... ok
-test tests::v014_runtime_helpers_fail_closed_when_not_executable ... ok
-test types::tests::recursive_enum_payloads_are_rejected ... ok
-test types::tests::require_block_rejects_lifecycle_stdlib_call ... ok
-test types::tests::require_rejects_nested_cell_operation ... ok
-test types::tests::statically_visible_division_by_zero_is_rejected ... ok
-test types::tests::stdlib_claim_output_requires_complete_field_coverage ... ok
-test types::tests::stdlib_claim_rejects_extra_arguments ... ok
-test types::tests::stdlib_claim_output_requires_declared_claim_output_type ... ok
-test types::tests::stdlib_claim_rejects_non_receipt_input ... ok
-test types::tests::stdlib_claim_requires_explicit_output_and_lock_arguments ... ok
-test types::tests::stdlib_claim_rejects_declared_output_type_mismatch ... ok
-test types::tests::launch_module_type_checks_with_registered_imports ... ok
-test types::tests::strict_mode_rejects_imported_legacy_capabilities ... ok
-test types::tests::stdlib_transfer_rejects_extra_arguments ... ok
-test types::tests::typed_vec_with_capacity_uses_declared_element_type ... ok
-test types::tests::stdlib_settle_requires_explicit_output_and_lock_arguments ... ok
-test types::tests::stdlib_transfer_output_requires_complete_field_coverage ... ok
-test types::tests::tail_match_expressions_are_valid_return_values ... ok
-test types::tests::unsigned_integer_negation_is_rejected ... ok
-test wasm::tests::wasm_audit_reports_audit_only_for_type_only_module ... ok
-test wasm::tests::wasm_compiler_rejects_pure_action_modules ... ok
-test types::tests::vec_type_arguments_are_validated ... ok
-test types::tests::unsupported_u128_arithmetic_is_rejected ... ok
-test types::tests::u128_ordering_and_arithmetic_still_rejected_on_widening ... ok
-test wasm::tests::wasm_encoder_emits_magic_version_and_status_custom_section ... ok
-test wasm::tests::wasm_runtime_instantiates_metadata_module_but_refuses_calls ... ok
-test types::tests::widening_boundary_matrix ... ok
-test tests::strict_audit_codegen_emits_only_aligned_stack_pointer_deltas ... ok
-test tests::ordered_named_output_create_constraints_are_checked_in_body_order ... ok
-test tests::u128_mutable_state_transition_with_u64_delta_is_checked ... ok
-test tests::payload_enum_fields_use_dynamic_molecule_schema_metadata ... ok
-test tests::optimized_entry_lock_keeps_inlined_schema_pointer_field_access_checked ... ok
-test codegen::tests::internal_assembler_relaxes_far_conditional_branch_with_long_jump ... ok
-test codegen::tests::internal_assembler_encodes_far_unconditional_jump ... ok
-test codegen::tests::bundled_example_codegen_mnemonics_are_declared ... ok
-
-test result: ok. 776 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.56s
-
-
-running 7 tests
-test adversarial_0_13_rejects_invalid_hash_type_dsl ... ok
-test adversarial_parser_preserves_operator_precedence_in_ambiguous_sequences ... ok
-test adversarial_parser_binds_else_to_nearest_if ... ok
-test adversarial_parser_rejects_deep_unary_expression_without_panicking ... ok
-test adversarial_integer_literals_fail_closed_on_lexical_and_contextual_overflow ... ok
-test adversarial_parser_rejects_deep_nested_control_flow_without_panicking ... ok
-test adversarial_0_13_rejects_unsupported_generic_collection_surfaces ... ok
-
-test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
-
-
-running 11 tests
-test snapshot_simple_action_assembly ... ok
-test runtime_u64_helpers_fail_closed_before_value_use ... ok
-test runtime_void_helpers_fail_closed_before_continuing ... ok
-test snapshot_lock_args_assembly ... ok
-test snapshot_type_id_create_output_assembly ... ok
-test snapshot_spawn_ipc_executable_status_checked_assembly ... ok
-test runtime_witness_helpers_fail_closed_before_pointer_use ... ok
-test snapshot_witness_schema_syscall_assembly ... ok
-test snapshot_collection_lowering_assembly ... ok
-test snapshot_blake2b_helper_assembly ... ok
-test snapshot_assemblies_contain_no_leaked_overflow_diagnostics ... ok
-
-test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.23s
-
-
-running 0 tests
-
-test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
-
-
-running 86 tests
-test cellc_add_git_requires_full_rev_and_records_pin ... ok
-test cellc_add_and_remove_subcommands_honor_dev_path_and_json ... ok
-Check succeeded
- Target profile: ckb
- Checked: package default (RISC-V assembly)
-test cellc_check_accepts_ckb_profile_timepoint ... ok
-test cellc_check_denies_metadata_only_declared_invariant ... ok
-test cellc_abi_subcommand_explains_entry_witness_layout ... ok
-test cellc_check_accepts_pure_ckb_target_profile ... ok
-test cellc_build_uses_manifest_policy_before_writing_artifacts ... ok
-test cellc_action_build_emits_builder_plan_json ... ok
-test cellc_check_production_rejects_fail_closed_runtime_paths ... ok
-Build complete
- Artifact format: RISC-V assembly
- Target profile: ckb
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLeWH4w/build/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpLeWH4w/build/main.s.meta.json
-test cellc_check_production_rejects_incomplete_output_verification ... ok
-test cellc_build_accepts_pure_ckb_target_profile_without_vm_abi_trailer ... ok
-test cellc_check_reports_claim_source_predicate_blocker_class ... ok
-test cellc_build_and_check_subcommands_use_package_flow ... ok
-test cellc_check_can_reject_runtime_required_obligations ... ok
-test cellc_check_denies_checked_partial_proof_plan_gap ... ok
-test cellc_clean_subcommand_supports_json_summary ... ok
-test cellc_ckb_hash_emits_default_blake2b_vector ... ok
-test cellc_check_all_targets_checks_asm_and_elf_without_writing_artifacts ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [5d, 8b, d, ed, a5, 24, 99, 9f, c3, fe, 29, 67, 78, 19, 2a, 46, 8f, a3, b5, 44, cb, 36, cf, cc, e2, 10, 50, 24, 59, 4b, 5b, 37]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpdSbrBT/artifacts/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpdSbrBT/artifacts/main.s.meta.json
-test cellc_check_uses_manifest_policy_defaults ... ok
-test cellc_check_accepts_u128_mutable_state_transition_with_u64_delta ... ok
-test cellc_check_reports_linear_collection_ownership_blocker_class ... ok
-test cellc_check_reports_resource_conservation_blocker_class ... ok
-test cellc_cli_target_overrides_manifest_build_target ... ok
-test cellc_check_reports_settle_finalization_blocker_class ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [9f, aa, 3c, b9, 5, 1b, a7, 19, e4, ea, e4, 1, 79, 7, 11, 89, 7f, 40, ba, 26, 7e, 86, ba, 8c, d5, a3, a, 4d, 3, 45, eb, 54]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpRDoIpR/app_pkg/build/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpRDoIpR/app_pkg/build/main.s.meta.json
-test cellc_check_reports_explicit_output_binding_without_mutable_state_blockers ... ok
-test cellc_compiles_package_with_local_path_dependency ... ok
-test cellc_doc_subcommand_generates_markdown_docs ... ok
-test cellc_constraints_subcommand_surfaces_ckb_deployment_manifest ... ok
-test cellc_explain_profile_reports_ckb_v0_14_contract ... ok
-test cellc_entry_witness_subcommand_rejects_wrong_width_fixed_bytes ... ok
-test cellc_entry_witness_subcommand_encodes_schema_backed_params ... ok
-test cellc_errors_include_runtime_ecode_when_policy_failure_maps_to_runtime_registry ... ok
-test cellc_entry_witness_subcommand_emits_parameterized_witness_json ... ok
-test cellc_explain_subcommand_reports_runtime_error ... ok
-test cellc_explain_proof_reports_declared_invariant ... ok
-test cellc_info_subcommand_supports_json_summary ... ok
-test cellc_init_subcommand_supports_json_summary ... ok
-test cellc_explain_proof_warns_for_lock_group_transaction_scope ... ok
-test cellc_lsp_flag_rejects_trailing_arguments ... ok
-test cellc_explain_proof_reports_invariant_action_coverage_match ... ok
-Formatting complete
- Updated 1 file(s)
-test cellc_explain_proof_reports_covenant_proof_plan ... ok
-test cellc_explain_proof_human_reports_macro_provenance ... ok
-test cellc_new_subcommand_supports_json_summary_and_vcs_none ... ok
-test cellc_fmt_subcommand_formats_sources ... ok
-test cellc_explain_proof_summary_reports_fail_closed_diagnostics ... ok
-test cellc_run_subcommand_without_vm_runner_degrades_gracefully ... ok
-test cellc_rejects_registry_package_dependencies_fail_closed ... ok
-test cellc_rejects_external_dependency_function_calls_until_linking_exists ... ok
-test cellc_install_path_updates_lockfile_and_remove_prunes_it ... ok
-test cellc_test_subcommand_rejects_conflicting_expectations ... ok
-test cellc_rejects_underdeclared_effects_from_path_dependency_calls ... ok
-test cellc_test_subcommand_rejects_empty_expected_error_line_text ... ok
-test cellc_test_subcommand_rejects_missing_expected_error_text ... ok
-test cellc_metadata_subcommand_emits_lowering_runtime_json ... ok
-test cellc_test_subcommand_rejects_unknown_directives ... ok
-test cellc_test_subcommand_rejects_wrong_expected_error_line ... ok
-test cellc_test_subcommand_rejects_missing_entrypoint_metadata ... ok
-test cellc_test_subcommand_rejects_missing_runtime_metadata ... ok
-test cellc_test_subcommand_supports_expected_compile_failures ... ok
-test cellc_test_subcommand_supports_expected_error_line_directive ... ok
-test cellc_test_subcommand_compiles_test_sources ... ok
-test cellc_test_subcommand_supports_entrypoint_metadata_directives ... ok
-test cellc_new_subcommand_initializes_git_by_default ... ok
-test cellc_test_subcommand_supports_runtime_metadata_directives ... ok
-test cellc_opt_report_compares_all_optimization_levels ... ok
-test cellc_top_level_primitive_strict_rejects_legacy_capabilities ... ok
-test cellc_scheduler_plan_consumes_shared_touch_hints ... ok
-test cellc_check_reports_transaction_invariant_checked_subconditions ... ok
-test cellc_test_subcommand_supports_target_directive ... ok
-test cellc_test_subcommand_supports_policy_directives ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [5d, 8b, d, ed, a5, 24, 99, 9f, c3, fe, 29, 67, 78, 19, 2a, 46, 8f, a3, b5, 44, cb, 36, cf, cc, e2, 10, 50, 24, 59, 4b, 5b, 37]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpA5Mqvw/artifacts/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpA5Mqvw/artifacts/main.s.meta.json
-test cellc_uses_manifest_build_out_dir_for_package_input ... ok
-test cellc_top_level_accepts_primitive_strict_for_kernel_effect_capabilities ... ok
-success: compiled successfully
- Artifact format: RISC-V ELF
- Target profile: ckb
- Artifact hash: [cf, 7, cf, ac, d0, a, 43, a3, a8, cc, 8b, 6e, 66, e1, 29, b2, 32, 60, 2f, 76, a3, 55, 4d, 52, d5, 38, 51, 1f, c8, b, 49, 2]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpEPDDUG/artifacts/main.elf
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpEPDDUG/artifacts/main.elf.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp5nuyD3/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp5nuyD3/sample.s.meta.json
-test cellc_check_reports_pool_invariant_policy_families ... ok
-test cellc_uses_manifest_build_target_by_default ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpHdp8aG/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpHdp8aG/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [a7, d4, 78, cc, c3, f5, cd, 81, cd, de, 51, 44, ee, 83, 4d, 64, 46, df, bd, 40, 58, 5f, 51, 6c, d1, 56, 6b, b7, 44, 9d, 96, 8d]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpVABuXl/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpVABuXl/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp7Y5SaD/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp7Y5SaD/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp41919d/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp41919d/sample.s.meta.json
-test cellc_verify_artifact_enforces_policy_flags ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpVjkaXz/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpVjkaXz/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpzDHwMo/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpzDHwMo/sample.s.meta.json
-test cellc_verify_artifact_accepts_matching_sidecar ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmppVowcH/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmppVowcH/sample.s.meta.json
-test cellc_verify_artifact_primitive_strict_rechecks_disk_sources ... ok
-test cellc_verify_artifact_rejects_tampered_artifact ... ok
-test cellc_verify_artifact_rejects_noncanonical_source_unit_hash ... ok
-test cellc_writes_requested_output_file ... ok
-test cellc_verify_artifact_rejects_tampered_source_when_requested ... ok
-test cellc_verify_artifact_rejects_metadata_schema_downgrade ... ok
-test cellc_verify_artifact_enforces_expected_hashes ... ok
-test cellc_explain_generics_reports_checked_vec_instantiations ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [79, a1, 5d, 7e, f7, 1f, 9a, 64, 89, da, 9e, 8b, a8, 90, b6, 15, f0, b5, 61, d1, 80, 6b, 39, 9f, f0, 5a, a4, 4d, 0, 5, 41, 3c]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/amm_pool.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/amm_pool.s.meta.json
-test cellc_check_reports_checked_pool_invariant_families_without_runtime_blockers ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [2a, 2, ca, c2, fd, b6, 4a, 53, 9e, 26, cb, a1, 31, 69, ab, f3, 1d, c1, 42, d, 18, d3, fd, 1d, 92, b7, a, 55, c6, d, 87, df]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/launch.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/launch.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [8b, d7, 59, d4, b6, d1, 6, 8b, 97, 0, fd, e5, df, 72, ec, a6, 99, bf, 20, 34, 90, 55, b2, 17, 6d, 48, 55, 9e, ec, ed, 11, 2b]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/multisig.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/multisig.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [cd, d0, f5, 74, b7, 9d, 8e, 7d, 79, 50, 6a, cf, 3e, 13, b, 53, 5c, b9, 7f, 8c, d1, 1f, 88, bf, 1b, 8a, 3c, 3b, 34, 45, c6, 4e]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/nft.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/nft.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [fd, 14, d8, d9, e, 2c, e8, 71, 98, aa, e2, b6, b4, fc, b8, 93, aa, 84, 66, 2f, 21, 2e, 9d, 26, 5, 63, 5d, 74, 55, fd, 56, 87]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/timelock.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/timelock.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [3c, bd, 90, ed, de, 2c, 8d, 8c, 97, 1, a4, d9, 9, dc, 3d, bd, 22, 6b, 5b, 39, e7, 3e, 59, 9a, 5d, e1, 2c, 13, 61, 4d, 32, 46]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/token.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/token.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [2a, 7, 99, 55, e2, cb, e6, 1b, 39, 63, db, fc, 1, 63, fd, 57, 38, 6, a4, 7, ad, b2, 5d, 5c, f1, de, 41, e5, 2a, 29, 1, e5]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/vesting.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpwTleoZ/vesting.s.meta.json
-test cellc_compiles_bundled_examples_to_requested_outputs ... ok
-
-test result: ok. 86 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.90s
-
-
-running 26 tests
-test ckb_scoped_entry_keeps_called_action_helpers ... ok
-test launch_seed_pool_composition_is_scheduler_visible ... ok
-test registry_example_uses_bounded_local_vec_helpers_without_collection_debt ... ok
-test amm_pool_input_output_params_are_scheduler_visible ... ok
-test release_examples_are_free_of_placeholder_hashes_and_formatter_artifacts ... ok
-test registry_example_with_insert_contains_compiles_to_elf ... ok
-test nft_core_actions_expose_action_specific_builder_metadata ... ok
-test token_cell_invariant_appears_in_proof_plan ... ok
-test order_book_language_example_uses_local_vec_helpers_without_collection_debt ... ok
-test stdlib_language_example_compiles_with_all_patterns ... ok
-test v0_15_scoped_invariant_example_compiles_and_produces_proof_plan ... ok
-test token_mint_authority_input_output_binding_is_explicit ... ok
-test v0_15_identity_lifecycle_example_compiles_and_produces_proof_plan ... ok
-test vesting_phase2_remaining_obligations_are_explicit ... ok
-test vesting_read_ref_params_are_scheduler_visible ... ok
-test multisig_core_actions_expose_threshold_flow_metadata ... ok
-test timelock_core_actions_expose_time_and_release_metadata ... ok
-test bundled_examples_emit_molecule_schema_manifest_report ... ok
-test canonical_examples_are_the_single_checked_in_business_source ... ok
-test bundled_examples_compile_to_non_empty_assembly ... ok
-test canonical_examples_compile_under_primitive_strict_015 ... ok
-test bundled_examples_stay_within_backend_shape_budgets ... ok
-test bundled_examples_backend_shape_report_serializes ... ok
-test bundled_examples_stay_near_backend_shape_release_baseline ... ok
-test all_checked_in_cell_examples_compile ... ok
-test bundled_examples_compile_to_elf ... ok
-
-test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.91s
-
-
-running 7 tests
-test fuzzy_oversized_static_widths_are_controlled_errors ... ok
-test fuzzy_metadata_tampering_never_panics ... ok
-test fuzzy_unicode_hex_inputs_are_controlled_errors ... ok
-test fuzzy_entry_witness_encoding_never_panics ... ok
-test fuzzy_lsp_incremental_edits_never_panic ... ok
-test fuzzy_mutated_sources_never_panic ... ok
-test fuzzy_semantic_codegen_mutations_reach_assembly ... ok
-
-test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.50s
-
-
-running 4 tests
-test ickb_diff_matrix_is_partial_and_consistent_with_model_fixtures ... ok
-test ickb_positive_fixtures_pass_model_verifier ... ok
-test ickb_negative_fixtures_fail_for_expected_invariant ... ok
-test ickb_benchmark_specs_compile_and_expose_expected_entries ... ok
-
-test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.28s
-
-
-running 1 test
-test syntax_combo_quick_matrix_is_cargo_test_visible ... FAILED
-
-failures:
-
----- syntax_combo_quick_matrix_is_cargo_test_visible stdout ----
-
-thread 'syntax_combo_quick_matrix_is_cargo_test_visible' (8226730) panicked at tests/syntax_combo.rs:15:5:
-syntax combo quick runner failed
-status: exit status: 1
-stdout:
-
-stderr:
-Traceback (most recent call last):
- File "/Users/arthur/RustroverProjects/CellScript/scripts/cellscript_syntax_combo_audit.py", line 1482, in
- raise SystemExit(main(sys.argv[1:]))
- File "/Users/arthur/RustroverProjects/CellScript/scripts/cellscript_syntax_combo_audit.py", line 1414, in main
- timestamp = dt.datetime.now(dt.UTC).strftime("%Y%m%d-%H%M%S")
-AttributeError: module 'datetime' has no attribute 'UTC'
-
-note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
-
-
-failures:
- syntax_combo_quick_matrix_is_cargo_test_visible
-
-test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.18s
-
-
-== stderr ==
- Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.04s
- Finished `test` profile [unoptimized + debuginfo] target(s) in 0.04s
- Running unittests src/lib.rs (target/debug/deps/cellscript-198f0ba9a296fb91)
- Running tests/adversarial_0_13.rs (target/debug/deps/adversarial_0_13-87ca0b7751a0cf60)
- Running tests/assembly_snapshots.rs (target/debug/deps/assembly_snapshots-a1b0ee4291a50be7)
- Running tests/ckb_acceptance.rs (target/debug/deps/ckb_acceptance-546e6523e51ab114)
- Running tests/cli.rs (target/debug/deps/cli-cd9b4a3e7ed668b4)
- Running tests/examples.rs (target/debug/deps/examples-885631b36bce043e)
- Running tests/fuzzy_debug.rs (target/debug/deps/fuzzy_debug-a3c500396cf14cf4)
- Running tests/ickb_benchmark.rs (target/debug/deps/ickb_benchmark-d0fd214d43bb34ab)
- Running tests/syntax_combo.rs (target/debug/deps/syntax_combo-b9abeffd268b17da)
-error: test failed, to rerun pass `-p cellscript --test syntax_combo`
diff --git a/.cap/logs/1780406425-73610.log b/.cap/logs/1780406425-73610.log
deleted file mode 100644
index aec64533..00000000
--- a/.cap/logs/1780406425-73610.log
+++ /dev/null
@@ -1,11 +0,0 @@
-== stdout ==
-
-running 1 test
-test syntax_combo_quick_matrix_is_cargo_test_visible ... ok
-
-test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.42s
-
-
-== stderr ==
- Finished `test` profile [unoptimized + debuginfo] target(s) in 0.05s
- Running tests/syntax_combo.rs (target/debug/deps/syntax_combo-b9abeffd268b17da)
diff --git a/.cap/logs/1780406434-74725.log b/.cap/logs/1780406434-74725.log
deleted file mode 100644
index 26b98e82..00000000
--- a/.cap/logs/1780406434-74725.log
+++ /dev/null
@@ -1,1191 +0,0 @@
-== stdout ==
-
-running 776 tests
-test cli::commands::tests::test_command_execution ... ok
-test ckb_hash_tests::ckb_blake2b256_matches_blank_hash_vector ... ok
-test codegen::assembler::tests::strict_audit_internal_assembler_oracle_for_core_instruction_bytes ... ok
-test cli::commands::tests::invalid_parser_mapping_returns_error_instead_of_panicking ... ok
-test codegen::assembler::tests::strict_audit_riscv_immediate_boundaries_are_enforced ... ok
-test cli::commands::tests::expected_metadata_hash_comparison_is_case_sensitive ... ok
-test codegen::assembler::tests::strict_audit_li_split_handles_negative_32_bit_boundaries ... ok
-test cli::commands::tests::production_policy_finds_evidence_less_checked_runtime_proof_plan_gap ... ok
-test cli::commands::tests::production_policy_finds_evidence_less_on_chain_checked_proof_plan_gap ... ok
-test codegen::calls::tests::fixed_u64_le_width_accepts_hashes_and_byte_arrays ... ok
-test codegen::calls::tests::canonical_type_names_strip_reference_wrappers ... ok
-test codegen::cell_ops::tests::consumed_operand_var_accepts_named_cell_operands_only ... ok
-test codegen::cell_ops::tests::destroy_absence_scan_is_limited_to_singleton_and_type_id_unique_policies ... ok
-test codegen::calls::tests::packed_hash_width_uses_codegen_fixed_byte_type_rules ... ok
-test codegen::cell_ops::tests::identity_and_destruction_policy_labels_are_stable ... ok
-test codegen::expr::tests::divisor_nonzero_guard_fails_closed_on_zero ... ok
-test codegen::frame::tests::large_addi_materializes_out_of_range_immediates ... ok
-test codegen::frame::tests::large_addi_uses_single_addi_for_small_immediates ... ok
-test codegen::frame::tests::stack_access_helpers_emit_sp_relative_instructions ... ok
-test codegen::runtime::tests::checked_runtime_status_register_defaults_to_a1_for_unknown_helpers ... ok
-test codegen::expr::tests::bool_canonical_check_emits_zero_one_guard ... ok
-test codegen::runtime::tests::ckb_runtime_syscall_abi_matches_declared_constants ... ok
-test codegen::runtime::tests::runtime_helper_classification_tracks_checked_and_hash_helpers ... ok
-test codegen::schema::tests::aggregate_field_layouts_track_tuple_offsets ... ok
-test codegen::assembler::tests::strict_audit_elf_header_and_segments_are_internally_consistent ... ok
-test codegen::schema::tests::fixed_byte_constants_materialize_little_endian_bytes ... ok
-test codegen::schema::tests::fixed_width_helpers_classify_scalar_and_byte_storage ... ok
-test codegen::tests::consumed_schema_params_use_loaded_cell_size_for_field_checks ... ok
-test codegen::tests::dynamic_syscall_index_is_copied_before_large_stack_staging ... ok
-test codegen::tests::explicit_external_toolchain_paths_are_strict ... ok
-test codegen::tests::cell_operation_identity_helpers_stay_in_cell_ops ... ok
-test cli::commands::tests::ckb_hash_file_rejects_inputs_above_limit ... ok
-test codegen::tests::generated_large_offsets_are_normalized_before_assembly ... ok
-test codegen::tests::generated_public_assembly_mnemonics_are_declared ... ok
-test codegen::tests::generated_collection_assembly_is_internal_assembler_clean ... ok
-test codegen::tests::generated_stdlib_assembly_is_internal_assembler_clean ... ok
-test codegen::tests::internal_assembler_encodes_emitted_instruction_surface ... ok
-test codegen::tests::internal_assembler_encodes_full_width_li_literals ... ok
-test codegen::tests::internal_assembler_keeps_near_unconditional_jump_compact ... ok
-test codegen::tests::internal_assembler_rejects_unresolved_call_targets ... ok
-test codegen::tests::internal_assembler_encodes_register_conditional_branches ... ok
-test codegen::tests::internal_assembler_rejects_intentionally_unsupported_mnemonics ... ok
-test codegen::tests::generated_functions_use_shared_epilogue_tail ... ok
-test codegen::tests::large_addi_avoids_clobbering_source_register ... ok
-test codegen::tests::machine_cfg_tracks_call_edges_to_local_helpers ... ok
-test codegen::tests::machine_layout_order_rejects_missing_duplicate_or_unknown_blocks ... ok
-test codegen::assembler::tests::strict_audit_relaxed_conditional_branch_within_jal_range_preserves_registers ... ok
-test codegen::tests::machine_layout_plan_builds_explicit_machine_blocks ... ok
-test codegen::tests::machine_layout_plan_builds_register_conditional_branch_blocks ... ok
-test codegen::tests::machine_layout_plan_rejects_branch_target_outside_text ... ok
-test codegen::tests::dynamic_molecule_vector_field_access_validates_full_table_offsets ... ok
-test codegen::tests::binary_codegen_materializes_narrow_integer_constants ... ok
-test codegen::tests::machine_reachability_uses_entry_label_not_every_global ... ok
-test codegen::tests::outgoing_stack_arg_area_is_16_byte_aligned_at_call_boundaries ... ok
-test codegen::tests::division_codegen_guards_zero_divisors ... ok
-test codegen::tests::read_ref_runtime_fallback_records_cell_buffer_state ... ok
-test codegen::tests::register_contract_allows_only_entry_wrapper_writes_to_direct_registers ... ok
-test codegen::tests::rv64_li_boundary_values_materialize_correct_bits ... ok
-test codegen::tests::semantic_molecule_field_access_uses_validated_api_gate ... ok
-test codegen::tests::sp_addi_large_offsets_clobber_only_destination_register ... ok
-test codegen::tests::dynamic_molecule_fixed_field_codegen_checks_full_header_and_exact_span ... ok
-test codegen::tests::state_transition_edges_use_explicit_consumed_binding ... ok
-test codegen::tests::strict_audit_outgoing_stack_args_are_staged_inside_current_frame ... ok
-test codegen::tests::type_hash_missing_output_buffer_slots_report_compile_error ... ok
-test codegen::tests::type_hash_missing_param_slots_report_compile_error ... ok
-test codegen::tests::u128_const_without_fixed_storage_reports_compile_error ... ok
-test codegen::tests::narrow_arithmetic_codegen_truncates_to_declared_width ... ok
-test codegen::tests::unaligned_scalar_load_large_offsets_preserve_live_accumulator ... ok
-test codegen::tests::unrepresentable_memory_load_offsets_report_compile_error ... ok
-test codegen::tests::machine_layout_plan_reports_branch_relaxation_metrics ... ok
-test codegen::tests::runtime_cast_codegen_checks_narrowing_and_bool_canonicality ... ok
-test codegen::tests::unrepresentable_stack_offsets_report_compile_error ... ok
-test debug::tests::test_debug_info_generator ... ok
-test debug::tests::test_dwarf_generation ... ok
-test debug::tests::test_line_table ... ok
-test debug::tests::test_type_registration ... ok
-test docgen::tests::docgen_emits_flat_pool_runtime_input_requirements ... ok
-test docgen::tests::docgen_emits_markdown_for_action ... ok
-test codegen::tests::internal_assembler_relaxes_out_of_range_conditional_branch ... ok
-test docgen::tests::docgen_emits_transaction_invariant_checked_subconditions ... ok
-test docgen::tests::docgen_html_escapes_module_and_item_text ... ok
-test error::tests::caret_padding_starts_at_span_column ... ok
-test error::tests::caret_width_counts_characters_not_bytes ... ok
-test flow::tests::consumed_flow_tracking_follows_expression_aliases ... ok
-test fmt::tests::format_action_transition_block_for_multiple_edges ... ok
-test fmt::tests::format_indents_preserve_fields_inside_expression_block ... ok
-test fmt::tests::format_preserves_single_element_tuple_expression ... ok
-test fmt::tests::format_preserves_type_policy_metadata ... ok
-test fmt::tests::format_round_trips_inline_if_tuple_expression ... ok
-test codegen::tests::schema_ref_call_preserves_schema_abi_length ... ok
-test fmt::tests::format_round_trips_multiline_expression_block ... ok
-test fmt::tests::format_round_trips_preserve_block ... ok
-test fmt::tests::format_round_trips_require_block ... ok
-test fmt::tests::format_round_trips_simple_module ... ok
-test fmt::tests::format_round_trips_stdlib_lifecycle_field_block ... ok
-test fmt::tests::format_single_expr_require_block_uses_compact_form ... ok
-test fmt::tests::format_uses_canonical_assert_and_no_const_semicolon ... ok
-test fmt::tests::format_uses_field_shorthand_when_value_matches_name ... ok
-test incremental::tests::clean_cache_rejects_overflowing_max_age ... ok
-test codegen::tests::stack_pointer_offsets_are_emitted_through_helpers ... ok
-test incremental::tests::test_dependency_graph ... ok
-test incremental::tests::test_change_detector ... ok
-test incremental::tests::load_cache_drops_units_with_paths_outside_trusted_root ... ok
-test incremental::tests::clean_cache_skips_output_paths_outside_trusted_root ... ok
-test incremental::tests::test_incremental_compiler ... ok
-test codegen::tests::vm2_syscall_helpers_emit_executable_status_checked_wrappers ... ok
-test ir::tests::assert_in_pure_function_lowers_failure_to_abort_terminator ... ok
-test ir::tests::constant_cast_rejects_out_of_range_u128_narrowing ... ok
-test ir::tests::binary_arithmetic_result_type_preserves_left_operand_width ... ok
-test ir::tests::contextual_integer_binary_operands_lower_to_peer_width ... ok
-test ir::tests::ir_generation_aggregates_lowering_errors_with_source_spans ... ok
-test ir::tests::all_diverging_match_expression_does_not_leave_unreachable_join ... ok
-test ir::tests::ir_straight_line_lifecycle_certificate_rejects_branch_local_create_without_typecheck ... ok
-test ir::tests::exhaustive_enum_match_unmatched_path_lowers_to_abort_terminator ... ok
-test ir::tests::ir_type_value_kind_never_derives_status_kinds ... ok
-test ir::tests::ir_straight_line_lifecycle_certificate_rejects_duplicate_consume_without_typecheck ... ok
-test ir::tests::poison_lowering_keeps_value_invalid_while_block_stays_live ... ok
-test ir::tests::logical_operators_lower_as_short_circuit_control_flow ... ok
-test ir::tests::reference_and_deref_unary_result_types_match_ast_types ... ok
-test ir::tests::mixed_width_expression_local_widening_lowers_as_explicit_casts ... ok
-test ir::tests::require_block_lowers_to_atomic_requires ... ok
-test ir::tests::runtime_narrowing_cast_lowers_as_cast_instruction ... ok
-test ir::tests::preserve_sugar_populates_preserved_fields ... ok
-test ir::tests::status_boundary_ir_verifier_allows_unit_runtime_helper_when_status_is_checked_by_codegen_boundary ... ok
-test ir::tests::status_boundary_ir_verifier_allows_domain_u64_return_tuple_and_call_argument ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_dropped_raw_syscall_status ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_as_domain_call_argument ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_in_tuple_field ... ok
-test docgen::tests::docgen_emits_invariant_coverage_summary ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_produced_without_checked_consumer ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_returned_as_domain_u64 ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_raw_syscall_status_stored_as_dsl_local ... ok
-test ir::tests::status_boundary_ir_verifier_rejects_unit_runtime_helper_status_stored_as_domain_u64 ... ok
-test ir::tests::stdlib_claim_lowers_to_consumed_receipt_and_locked_declared_output ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_constant_destination_width_mismatch ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_empty_body_blocks ... ok
-test ir::tests::strict_audit_ir_lowering_records_instruction_level_provenance ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_missing_terminator_target ... ok
-test ir::tests::stdlib_transfer_lowers_to_single_consumed_input_and_locked_output ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_poisoned_load_const ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_extra_consume_set_metadata ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_poisoned_lowering_module ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_missing_create_set_metadata ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_poisoned_lowering_operand ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_use_not_defined_on_all_paths ... ok
-test ir::tests::stdlib_settle_lowers_to_consumed_input_and_locked_output ... ok
-test ir::tests::strict_audit_ir_verifier_rejects_stale_write_intents_metadata ... ok
-test ir::tests::strict_audit_ir_verifier_reports_instruction_provenance ... ok
-test ir::tests::strict_audit_schema_field_accesses_are_rematerialized_per_cfg_path ... ok
-test lexer::tests::test_byte_string ... ok
-test codegen::tests::u128_delta_arithmetic_codegen_uses_fixed_byte_storage ... ok
-test lexer::tests::test_comment ... ok
-test lexer::tests::test_identifiers ... ok
-test lexer::tests::test_keywords ... ok
-test lexer::tests::test_numbers ... ok
-test lexer::tests::test_operators ... ok
-test lexer::tests::test_punctuation ... ok
-test lexer::tests::test_string ... ok
-test lexer::tests::test_unterminated_byte_string_errors ... ok
-test lexer::tests::test_unterminated_string_errors ... ok
-test lsp::tests::lsp_position_conversion_treats_crlf_as_single_line_ending ... ok
-test lexer::tests::rejects_oversized_identifier ... ok
-test lsp::tests::lsp_position_incremental_change_applies_crlf_ranges ... ok
-test lsp::tests::lsp_primitive_strict_rejects_legacy_capabilities ... ok
-test lsp::tests::lsp_reads_primitive_strict_from_manifest ... ok
-test lsp::tests::lsp_rejects_document_count_over_limit ... ok
-test lsp::tests::goto_definition_prefers_local_scope_over_top_level_symbol ... ok
-test lsp::tests::lsp_rejects_oversized_documents ... ok
-test lsp::tests::test_ckb_namespace_completions ... ok
-test lsp::tests::find_references_for_locals_stays_in_enclosing_callable_scope ... ok
-test lsp::tests::test_flow_namespace_completions ... ok
-test lsp::tests::test_format_document ... ok
-test lsp::tests::test_code_actions_for_lowering_diagnostics ... ok
-test lsp::tests::test_goto_definition_and_references ... ok
-test lsp::tests::test_incremental_change_applies_utf16_ranges_after_non_bmp_text ... ok
-test lsp::tests::test_incremental_change_ignores_invalid_utf16_ranges ... ok
-test lsp::tests::test_keyword_completions ... ok
-test lsp::tests::test_flow_u8_namespace_completions ... ok
-test lsp::tests::test_lsp_position_conversion_uses_utf16_columns ... ok
-test lsp::tests::test_hover ... ok
-test lsp::tests::test_action_hover_includes_lowering_metadata ... ok
-test lsp::tests::test_parse_errors_become_diagnostics ... ok
-test codegen::tests::entry_dynamic_witness_stack_arg_staging_preserves_cursor_register ... ok
-test lsp::tests::test_lsp_server ... ok
-test lsp::tests::test_vec_member_completions_match_supported_helpers ... ok
-test lsp::tests::test_workspace_diagnostics_check_imported_type_id_collisions ... ok
-test lsp::tests::test_workspace_goto_definition_across_modules ... ok
-test lsp::tests::test_selection_range_orders_child_before_parent ... ok
-test lsp::tests::test_workspace_references_across_modules ... ok
-test optimize::tests::does_not_inline_block_bodies_that_can_capture_call_site_names ... ok
-test optimize::tests::folds_boolean_expressions ... ok
-test optimize::tests::folds_integer_arithmetic ... ok
-test optimize::tests::folds_literal_if_statements_without_touching_cell_ops ... ok
-test optimize::tests::folds_unsigned_high_bit_integer_operations ... ok
-test optimize::tests::propagates_constants_inlines_small_functions_and_removes_dead_code ... ok
-test optimize::tests::unused_let_elimination_preserves_calls_and_stdlib_constraints ... ok
-test lsp::tests::test_workspace_rename_is_disabled_until_symbol_scoped ... ok
-test package::tests::git_cache_entry_name_is_hash_only ... ok
-test package::tests::lockfile_consistency_allows_resolved_transitive_path_dependencies ... ok
-test package::tests::git_cache_child_check_rejects_path_escape ... ok
-test package::tests::lockfile_consistency_reports_stale_and_mismatched_path_sources ... ok
-test package::tests::lockfile_consistency_requires_exact_git_revision_match ... ok
-test package::tests::lockfile_replace_with_resolved_prunes_removed_dependencies ... ok
-test package::tests::package_manager_accepts_allowed_git_url_transports ... ok
-test package::tests::lockfile_read_from_root_rejects_malformed_lockfiles ... ok
-test package::tests::package_manager_git_checkout_revalidates_full_commit_refs ... ok
-test package::tests::package_manager_git_commands_separate_user_controlled_ref_arguments ... ok
-test lsp::tests::test_lowering_diagnostics_warn_for_fail_closed_runtime_actions ... ok
-test package::tests::package_manager_allows_path_dependency_without_version ... ok
-test package::tests::package_manager_rejects_branch_or_tag_git_dependency_before_fetch ... ok
-test package::tests::package_manager_rejects_registry_dependencies_fail_closed ... ok
-test package::tests::package_manager_rejects_local_path_dependency_traversal ... ok
-test package::tests::package_manager_rejects_unpinned_git_dependency_before_fetch ... ok
-test package::tests::package_manager_rejects_unsafe_git_url_transports ... ok
-test package::tests::package_manager_rejects_transitive_path_dependency_cycles ... ok
-test package::tests::package_manager_resolves_local_path_dependencies ... ok
-test package::tests::test_dependency_graph ... ok
-test package::tests::package_manager_resolves_transitive_local_path_dependencies ... ok
-test package::tests::test_manifest_serialization ... ok
-test package::tests::test_version_compatibility ... ok
-test parser::tests::action_where_block_allows_indented_following_top_level_item ... ok
-test parser::tests::action_where_block_keeps_indented_keyword_like_binding_in_body ... ok
-test parser::tests::assignment_range_and_cast_spans_cover_full_expression ... ok
-test parser::tests::array_size_uses_checked_target_width_conversion ... ok
-test parser::tests::binary_expr_spans_cover_full_expression ... ok
-test parser::tests::generic_type_arguments_allow_newlines ... ok
-test parser::tests::hex_literal_exprs_parse_as_integers ... ok
-test parser::tests::identity_policy_diagnostic_uses_bad_policy_span ... ok
-test parser::tests::named_arg_diagnostic_uses_bad_name_span ... ok
-test parser::tests::parser_empty_token_slice_returns_controlled_error ... ok
-test lsp::tests::test_receipt_hover_includes_flow_metadata ... ok
-test parser::tests::parser_rejects_bang_assert_syntax ... ok
-test parser::tests::postfix_expr_spans_cover_the_full_postfix_chain ... ok
-test parser::tests::parser_rejects_deep_unary_expression_before_stack_overflow ... ok
-test parser::tests::postfix_exprs_cover_the_consumed_source_range ... ok
-test parser::tests::primitive_and_container_exprs_keep_source_spans ... ok
-test parser::tests::test_action_where_column_one_flow_identifier_stays_in_body ... ok
-test parser::tests::struct_init_span_covers_type_name_and_body ... ok
-test parser::tests::parser_rejects_deep_if_expression_before_stack_overflow ... ok
-test parser::tests::test_launch_expression_is_reserved_until_lowering_exists ... ok
-test parser::tests::test_parse_action_transition_block ... ok
-test parser::tests::test_parse_action ... ok
-test parser::tests::test_parse_aggregate_invariant_primitives ... ok
-test parser::tests::test_parse_create_field_shorthand ... ok
-test parser::tests::test_parse_expression ... ok
-test parser::tests::test_parse_grouped_use_imports ... ok
-test parser::tests::test_parse_flow_and_action_transition_clause ... ok
-test parser::tests::test_parse_invariant ... ok
-test parser::tests::test_parse_invariant_assert_statement ... ok
-test lexer::tests::rejects_oversized_string_literal ... ok
-test parser::tests::test_parse_merges_attribute_and_inline_capabilities ... ok
-test parser::tests::test_parse_prefix_source_before_keyword_like_name ... ok
-test parser::tests::test_parse_prefix_source_and_create_target ... ok
-test parser::tests::test_parse_preserve_block ... ok
-test parser::tests::test_parse_preserve_single_field ... ok
-test parser::tests::test_parse_resource ... ok
-test parser::tests::test_parse_require_block ... ok
-test parser::tests::test_parse_type_id_attribute ... ok
-test parser::tests::test_postfix_does_not_cross_statement_newline ... ok
-test parser::tests::test_reject_bare_preserve ... ok
-test parser::tests::test_reject_empty_preserve_block ... ok
-test parser::tests::test_reject_empty_require_block ... ok
-test parser::tests::test_reject_preserve_except ... ok
-test parser::tests::test_reject_preserve_wildcard ... ok
-test parser::tests::test_reject_require_block_with_consume ... ok
-test parser::tests::test_reject_require_block_with_control_flow ... ok
-test parser::tests::test_rejects_action_brace_body ... ok
-test parser::tests::test_rejects_empty_transition_block ... ok
-test parser::tests::test_rejects_legacy_move_clause ... ok
-test parser::tests::test_rejects_read_ref_as_type_qualifier ... ok
-test parser::tests::test_rejects_generic_resource_definition ... ok
-test parser::tests::test_rejects_output_parameter_source_prefix ... ok
-test parser::tests::test_rejects_type_id_on_action ... ok
-test parser::tests::test_rejects_transition_clause_without_state_colons ... ok
-test parser::tests::test_rejects_typed_let_without_initializer ... ok
-test parser::tests::test_rejects_use_as_without_alias ... ok
-test parser::tests::test_rejects_unbraced_match_arms ... ok
-test proof_plan::soundness::tests::strict_pp0103_only_applies_to_checked_runtime_records ... ok
-test proof_plan::soundness::tests::strict_pp0201_only_applies_to_executing_script_args ... ok
-test proof_plan::tests::checked_runtime_without_concrete_evidence_is_not_marked_covered ... ok
-test proof_plan::tests::checked_static_detail_does_not_create_executable_runtime_evidence ... ok
-test proof_plan::tests::checked_runtime_proof_plan_claims_include_executable_evidence ... ok
-test proof_plan::tests::metadata_only_invariant_proof_plan_has_no_executable_evidence ... ok
-test proof_plan::tests::replace_unique_features_are_transaction_scoped ... ok
-test proof_plan::tests::unique_lifecycle_features_have_specific_codegen_evidence_ids ... ok
-test repl::tests::repl_read_limited_line_accepts_bounded_input ... ok
-test resolve::tests::test_global_type_resolution_rejects_ambiguous_symbol ... ok
-test resolve::tests::rejects_cross_module_type_dependency_cycles ... ok
-test resolve::tests::test_grouped_use_resolves_multiple_symbols ... ok
-test resolve::tests::test_imported_type_resolution_uses_exact_module_path ... ok
-test resolve::tests::test_module_resolver ... ok
-test resolve::tests::test_path_resolver ... ok
-test resolve::tests::test_register_module_rejects_deferred_missing_import_when_target_arrives ... ok
-test resolve::tests::test_register_module_rejects_missing_imported_symbol_when_target_is_loaded ... ok
-test resolve::tests::test_rejects_duplicate_local_symbols ... ok
-test resolve::tests::test_rejects_import_alias_collisions ... ok
-test runtime_errors::tests::diagnostic_messages_map_to_runtime_error_codes_where_possible ... ok
-test runtime_errors::tests::runtime_error_docs_cover_every_registered_code ... ok
-test runtime_errors::tests::runtime_error_docs_explain_ckb_code_overlap_channels ... ok
-test runtime_errors::tests::runtime_error_registry_roundtrips_and_has_unique_codes ... ok
-test simulate::tests::array_size_simulator_uses_checked_target_width_for_indices ... ok
-test simulate::tests::simulate_cell_operation_traces ... ok
-test simulate::tests::simulate_if_branch ... ok
-test simulate::tests::simulate_pure_arithmetic_action ... ok
-test simulate::tests::simulate_read_ref_traces ... ok
-test simulate::tests::simulate_rejects_wrong_action_arity ... ok
-test simulate::tests::simulate_step_limit ... ok
-test simulate::tests::simulate_unsigned_high_bit_integer_operations ... ok
-test stdlib::collections::tests::collection_assembly_has_no_raw_syscalls_or_unclassified_helpers ... ok
-test stdlib::collections::tests::collection_public_helpers_do_not_dereference_raw_a0_handles ... ok
-test stdlib::collections::tests::test_collection_functions ... ok
-test repl::tests::repl_read_limited_line_rejects_oversized_input ... ok
-test stdlib::tests::generated_stdlib_has_no_raw_syscall_wrapper_symbols ... ok
-test stdlib::collections::tests::test_generate_assembly ... ok
-test stdlib::tests::generated_stdlib_omits_raw_syscall_wrappers ... ok
-test stdlib::tests::test_generate_assembly ... ok
-test stdlib::tests::test_get_function ... ok
-test stdlib::tests::test_generate_ckb_assembly_uses_checked_env_helpers ... ok
-test stdlib::tests::test_std_functions ... ok
-test stdlib::tests::test_scheduler_metadata_generate_molecule_uses_table_layout ... ok
-test syscalls::tests::ckb_debug_syscall_is_not_a_production_inventory_surface ... ok
-test syscalls::tests::emitted_manual_runtime_and_stdlib_helpers_are_classified ... ok
-test syscalls::tests::ckb_syscall_abi_matches_checked_baseline ... ok
-test syscalls::tests::every_low_level_syscall_spec_is_inventoried ... ok
-test tests::action_scheduler_witness_bytes_rejects_conflicting_molecule_alias ... ok
-test syscalls::tests::helper_inventory_has_no_duplicate_symbols ... ok
-test tests::ckb_capacity_calculation_saturates_on_extreme_sizes ... ok
-test tests::branch_local_anonymous_creates_are_rejected_until_effects_are_cfg_aware ... ok
-test tests::ckb_constraints_surface_capacity_planning_for_created_outputs ... ok
-test tests::ckb_deploy_manifest_rejects_conflicting_cell_dep_locations ... ok
-test runtime_errors::tests::codegen_does_not_emit_unregistered_numeric_fail_literals ... ok
-test tests::ckb_deploy_manifest_rejects_incomplete_split_cell_dep_location ... ok
-test tests::ckb_deploy_manifest_rejects_invalid_dep_type ... ok
-test codegen::tests::emitted_runtime_helper_symbols_are_classified_in_syscall_inventory ... ok
-test tests::ckb_deploy_manifest_rejects_invalid_hash_type ... ok
-test lexer::tests::rejects_oversized_block_comment ... ok
-test codegen::tests::internal_assembler_relaxes_out_of_range_register_conditional_branch ... ok
-test tests::ckb_deploy_manifest_surfaces_hash_type_and_dep_group_policy ... ok
-test package::tests::package_manager_git_dependency_fails_for_invalid_url ... ok
-test lsp::tests::lsp_loads_sibling_modules_for_standalone_example_imports ... ok
-test tests::collection_fail_closed_feature_names_are_stable ... ok
-test tests::ckb_lock_false_return_lowers_to_script_failure ... ok
-test tests::ckb_target_profile_has_no_policy_exception ... ok
-test tests::ckb_u64_syscall_helpers_check_return_code_and_size ... ok
-test tests::ckb_dynamic_vector_len_can_drive_mutate_transition ... ok
-test package::tests::package_manager_git_update_fails_closed_on_fetch_error ... ok
-test tests::compile_accepts_chain_neutral_timepoint_under_ckb_profile ... ok
-test tests::compile_accepts_ckb_target_profile_timepoint ... ok
-test tests::compile_accepts_action_witness_source_qualifier ... ok
-test tests::compile_accepts_ckb_header_epoch_api_only_for_ckb_profile ... ok
-test tests::ckb_entry_lock_scope_selects_lock_entrypoint ... ok
-test tests::compile_accepts_complete_branch_return_paths ... ok
-test tests::compile_accepts_ckb_shared_create_when_verifier_covered ... ok
-test tests::compile_accepts_empty_vec_literal_with_declared_type ... ok
-test tests::ckb_entry_scope_keeps_vec_element_schema_dependencies ... ok
-test tests::compile_accepts_flow_initial_create_at_any_declared_state ... ok
-test tests::compile_accepts_create_field_shorthand ... ok
-test tests::compile_accepts_flow_state_name_initializers ... ok
-test tests::compile_accepts_flow_on_custom_state_field ... ok
-test tests::compile_accepts_flow_edge_returning_to_first_state ... ok
-test tests::compile_accepts_explicit_flow_action_edges ... ok
-test tests::compile_accepts_kernel_effect_capabilities_for_destroy ... ok
-test tests::compile_accepts_lock_args_script_args_binding ... ok
-test tests::compile_accepts_pure_ckb_target_profile ... ok
-test tests::compile_accepts_non_initial_flow_create_without_consumed_prior_state ... ok
-test tests::compile_accepts_lock_boundary_param_sources_and_require ... ok
-test tests::compile_accepts_named_action_output_and_create_binding ... ok
-test tests::compile_accepts_core_input_output_state_transition_edges ... ok
-test tests::compile_accepts_kernel_effect_capabilities_for_transfer ... ok
-test tests::compile_accepts_qualified_flow_state_names ... ok
-test tests::compile_accepts_prefix_read_params_as_cell_dep_bindings ... ok
-test tests::compile_allows_struct_type_id_under_ckb_profile ... ok
-test tests::compile_accepts_static_flow_update_to_non_initial_state ... ok
-test tests::compile_allows_unit_function_calls_as_statements ... ok
-test tests::compile_allows_actions_and_locks_to_call_pure_functions ... ok
-test tests::compile_accepts_vec_literals_in_create_fields ... ok
-test tests::compile_accepts_symmetric_where_branch_output_constraints ... ok
-test tests::compile_binds_duplicate_read_refs_by_order_not_name ... ok
-test tests::compile_allows_flow_update_to_declared_initial_state_at_type_check ... ok
-test tests::compile_binds_read_action_schema_params_to_cell_deps ... ok
-test tests::compile_binds_read_ref_entry_params_to_cell_deps ... ok
-test tests::compile_create_unique_field_identity_emits_runtime_anchor ... ok
-test tests::compile_classifies_resource_split_amount_subtraction_as_checked_runtime ... ok
-test tests::compile_classifies_resource_merge_amount_sum_as_checked_runtime ... ok
-test tests::compile_emits_create_output_field_verification_for_fixed_u64_fields ... ok
-test tests::compile_emits_direct_user_function_calls ... ok
-test tests::compile_classifies_protocol_agnostic_guarded_transition_as_checked_runtime ... ok
-test tests::compile_exposes_ckb_type_id_contract_under_ckb_profile ... ok
-test tests::compile_emits_ckb_style_load_cell_abi_for_cell_runtime_summary ... ok
-test tests::compile_entry_witness_rejects_payloads_larger_than_buffer ... ok
-test tests::compile_destroy_policies_are_policy_aware ... ok
-test tests::compile_emits_protocol_agnostic_guard_equality_proofplan_records ... ok
-test tests::compile_file_explicit_target_overrides_manifest_build_target ... ok
-test tests::compile_file_uses_manifest_ckb_target_profile ... ok
-test tests::compile_folds_local_fixed_array_len_to_constant ... ok
-test tests::compile_file_loads_local_path_dependencies_from_cell_manifest ... ok
-test tests::compile_file_uses_manifest_build_target_by_default ... ok
-test tests::compile_identity_ckb_type_id_emits_metadata ... ok
-test tests::compile_file_source_content_hash_is_path_independent ... ok
-test tests::compile_identity_singleton_type_emits_metadata ... ok
-test tests::compile_identity_none_is_default_and_hidden ... ok
-test tests::compile_identity_field_emits_path ... ok
-test tests::compile_identity_script_args_emits_metadata ... ok
-test tests::compile_classifies_guarded_identity_field_merge_as_checked_runtime ... ok
-test tests::compile_ignores_trivial_self_equality_guard_records ... ok
-test tests::compile_lowers_array_of_tuples_static_index_projection ... ok
-test tests::compile_infers_and_validates_read_only_effects ... ok
-test tests::compile_lowers_assert_invariant_into_fail_closed_cfg ... ok
-test tests::compile_lowers_block_tail_if_expressions ... ok
-test tests::compile_lowers_bounded_vec_literal_to_stack_collection ... ok
-test tests::compile_lowers_byte_string_literals_with_expected_array_type ... ok
-test tests::compile_lowers_exhaustive_enum_match_without_wildcard ... ok
-test tests::compile_lowers_consumed_input_field_access_through_loaded_cell_bytes ... ok
-test tests::ckb_entry_action_scope_excludes_unselected_unsupported_code ... ok
-test tests::compile_lowers_for_range_into_counted_loop_cfg ... ok
-test tests::compile_lowers_ckb_group_source_large_immediate_to_riscv_elf ... ok
-test tests::compile_lowers_if_expression_fixed_byte_const_join_move ... ok
-test tests::compile_lowers_fixed_byte_schema_field_comparison ... ok
-test tests::compile_lowers_len_method_to_length_instruction ... ok
-test tests::compile_lowers_if_statement_into_basic_blocks ... ok
-test tests::compile_lowers_if_expression_with_join_move ... ok
-test tests::compile_keeps_unchecked_transition_field_runtime_required ... ok
-test tests::compile_lowers_local_fixed_array_static_index_reads_and_writes ... ok
-test tests::compile_lowers_local_struct_field_reads_and_writes ... ok
-test tests::compile_lowers_local_constants_into_real_operands ... ok
-test tests::compile_lowers_local_tuple_destructuring_to_field_slots ... ok
-test tests::compile_lowers_local_tuple_static_field_reads_and_writes ... ok
-test tests::compile_lowers_numeric_cast_without_zero_fallback ... ok
-test tests::compile_lowers_match_expression_into_branch_cfg ... ok
-test tests::compile_lowers_pure_function_assert_failure_to_abort ... ok
-test tests::compile_lowers_packed_bool_and_u32_schema_fields_without_aligned_loads ... ok
-test tests::compile_lowers_mutable_assignments_in_loop_bodies ... ok
-test tests::compile_lowers_read_ref_schema_field_to_ckb_runtime_assembly ... ok
-test tests::compile_lowers_stack_vec_clear_and_is_empty ... ok
-test tests::compile_lowers_stack_vec_extend_from_fixed_bytes ... ok
-test tests::compile_lowers_read_ref_schema_field_to_ckb_runtime_elf ... ok
-test tests::compile_lowers_schema_backed_parameter_field_access_to_elf ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_capacity ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_contains ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_pop ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_first_last ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_runtime_push_index ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_insert ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_remove ... ok
-test tests::compile_lowers_stack_vec_scalar_capacity ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_reverse ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_set ... ok
-test tests::compile_lowers_stack_vec_scalar_contains ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_truncate ... ok
-test tests::compile_lowers_stack_vec_fixed_byte_swap ... ok
-test tests::compile_lowers_stack_vec_scalar_insert ... ok
-test tests::compile_lowers_stack_vec_scalar_first_last ... ok
-test tests::compile_lowers_stack_vec_scalar_pop ... ok
-test tests::compile_lowers_stack_vec_scalar_remove ... ok
-test tests::compile_lowers_stack_vec_scalar_reverse ... ok
-test tests::compile_lowers_stack_vec_scalar_runtime_push_len_index ... ok
-test tests::compile_lowers_stack_vec_scalar_set ... ok
-test tests::compile_lowers_tail_expr_as_action_return ... ok
-test tests::bundled_token_example_strict_ckb_compile_is_admitted ... ok
-test tests::compile_lowers_stack_vec_scalar_truncate ... ok
-test tests::compile_lowers_stack_vec_scalar_swap ... ok
-test tests::compile_lowers_tail_if_as_action_return ... ok
-test tests::compile_lowers_u128_equality_as_fixed_byte_comparison ... ok
-test tests::compile_lowers_type_hash_without_generic_call ... ok
-test tests::compile_lowers_vec_with_capacity_to_stack_collection_new ... ok
-test tests::compile_lowers_vec_builtins_without_generic_calls ... ok
-test tests::compile_lowers_while_statement_into_loop_cfg ... ok
-test tests::compile_merges_if_branch_linear_states_conservatively ... ok
-test tests::compile_lowers_zero_builtin_without_generic_call ... ok
-test tests::compile_lowers_u128_mutate_delta_with_carry_arithmetic ... ok
-test tests::compile_merges_linear_transfers_inside_match_expressions ... ok
-test tests::compile_merges_linear_transfers_inside_if_expressions ... ok
-test tests::compile_metadata_exposes_ckb_type_id_create_output_plan_under_ckb_profile ... ok
-test tests::compile_merges_linear_transfers_inside_block_tail_if_expressions ... ok
-test tests::compile_marks_cell_backed_vec_runtime_features ... ok
-test tests::compile_metadata_exposes_aggregate_invariant_primitives_in_proof_plan ... ok
-test tests::compile_metadata_exposes_declared_invariant_proof_plan ... ok
-test tests::compile_materializes_local_fixed_byte_constants_into_rodata ... ok
-test tests::compile_merges_linear_transfers_inside_block_expressions ... ok
-test tests::compile_metadata_declares_molecule_vm_abi ... ok
-test tests::compile_metadata_exposes_transaction_and_selected_cell_aggregate_invariants ... ok
-test tests::compile_metadata_with_options_rejects_strict_legacy_capabilities ... ok
-test tests::compile_classifies_hash_committed_output_field_as_guarded ... ok
-test tests::compile_metadata_exposes_lock_group_proof_plan_for_lock_entry ... ok
-test tests::compile_lowers_ckb_hash_commitment_comparison_without_fixed_byte_fail_closed ... ok
-test tests::compile_metadata_reports_parameterless_action_entrypoint_selection ... ok
-test tests::compile_metadata_exposes_covenant_proof_plan_for_transfer ... ok
-test tests::compile_metadata_warns_for_lock_group_transaction_invariant_scope ... ok
-test tests::compile_normalizes_same_module_qualified_helper_calls ... ok
-test tests::compile_path_rejects_missing_configured_source_root ... ok
-test tests::compile_path_rejects_duplicate_modules_across_source_roots ... ok
-test tests::compile_metadata_with_options_uses_ast_optimizer_for_nonzero_levels ... ok
-test codegen::tests::codegen_rejects_generated_far_jump_scratch_relaxation ... ok
-test tests::compile_metadata_proof_plan_preserves_lock_args_source ... ok
-test tests::compile_path_rejects_missing_path_dependency_manifest ... ok
-test tests::compile_path_rejects_path_dependency_cycles ... ok
-test tests::compile_path_rejects_non_path_dependencies ... ok
-test tests::compile_path_ignores_examples_outside_package_source_roots ... ok
-test tests::compile_path_rejects_path_dependency_traversal ... ok
-test tests::compile_path_accepts_package_root ... ok
-test tests::compile_package_import_alias_emits_matching_external_callable ... ok
-test tests::compile_prefers_no_arg_main_for_entry_wrapper ... ok
-test tests::compile_path_supports_custom_entry_directory_modules ... ok
-test tests::compile_path_supports_configured_source_roots_without_src ... ok
-test tests::compile_preserves_index_and_tuple_projection_in_assembly ... ok
-test tests::compile_preserves_if_tuple_aggregate_slots ... ok
-test tests::compile_preserves_if_array_aggregate_slots ... ok
-test tests::compile_preserves_create_instructions_in_assembly ... ok
-test tests::compile_rejects_aggregate_invariant_non_fixed_field ... ok
-test tests::compile_rejects_assert_delta_argument_from_cell_read ... ok
-test tests::compile_rejects_assert_invariant_as_tail_return_value ... ok
-test tests::compile_preserves_schema_backed_parameter_field_access_in_assembly ... ok
-test tests::compile_rejects_assignment_through_read_only_references ... ok
-test tests::compile_rejects_assignment_to_immutable_array_element ... ok
-test tests::compile_rejects_assignment_to_immutable_tuple_field ... ok
-test tests::compile_rejects_assignment_to_temporary_field_targets ... ok
-test tests::compile_rejects_bad_flow_state_field_type_on_main_path ... ok
-test tests::compile_rejects_asymmetric_where_branch_output_constraints ... ok
-test tests::compile_rejects_bare_return_from_value_actions ... ok
-test tests::compile_rejects_binding_assert_invariant_results ... ok
-test tests::compile_rejects_binding_unit_function_results ... ok
-test tests::compile_preserves_match_tuple_aggregate_slots ... ok
-test tests::compile_rejects_bounded_vec_literal_type_mismatch ... ok
-test tests::compile_rejects_cell_metadata_stdlib_on_non_cell_args ... ok
-test tests::compile_rejects_destroy_without_destroy_capability ... ok
-test tests::compile_rejects_builtin_call_argument_mismatches ... ok
-test tests::compile_rejects_core_state_transition_edge_not_in_graph ... ok
-test tests::compile_rejects_duplicate_flow_for_same_state_field ... ok
-test tests::compile_rejects_duplicate_stable_type_ids ... ok
-test tests::compile_rejects_duplicate_top_level_symbols ... ok
-test tests::compile_rejects_dynamic_assert_invariant_messages ... ok
-test tests::compile_rejects_empty_array_length_mismatch ... ok
-test tests::compile_rejects_dynamic_require_messages ... ok
-test tests::compile_rejects_dynamic_initial_flow_create_state ... ok
-test tests::compile_rejects_dynamic_unique_identity_field ... ok
-test tests::compile_rejects_empty_literal_in_non_vec_context ... ok
-test tests::compile_rejects_enum_payload_variants_until_lowering_exists ... ok
-test tests::compile_produces_non_empty_riscv_assembly ... ok
-test tests::compile_rejects_flow_by_action_when_explicit_move_uses_different_edge ... ok
-test tests::compile_rejects_flow_on_plain_struct ... ok
-test tests::compile_rejects_flow_payload_enum_state_field ... ok
-test tests::compile_rejects_flow_by_action_without_exact_move_clause ... ok
-test tests::compile_rejects_flow_receipt_without_state_field ... ok
-test tests::compile_rejects_heterogeneous_array_literals ... ok
-test tests::compile_rejects_function_call_argument_mismatches ... ok
-test tests::compile_rejects_if_expression_branch_type_mismatch ... ok
-test tests::compile_rejects_forbidden_unwrap_helpers ... ok
-test tests::compile_rejects_helper_functions_that_indirectly_call_impure_actions ... ok
-test tests::compile_preserves_dynamic_witness_cursor_after_lock_args ... ok
-test tests::compile_rejects_incomplete_branch_return_paths ... ok
-test tests::compile_rejects_impure_helper_functions ... ok
-test tests::compile_rejects_input_source_outside_action_cell_params ... ok
-test tests::compile_rejects_invalid_destroy_policy_shapes ... ok
-test tests::compile_rejects_invariant_assert_runtime_operation ... ok
-test tests::compile_rejects_invalid_invariant_assert_expression ... ok
-test tests::compile_rejects_invalid_create_field_initializers ... ok
-test tests::compile_rejects_invariant_without_explicit_trigger_and_scope ... ok
-test tests::compile_rejects_linear_state_changes_hidden_inside_loops ... ok
-test tests::compile_rejects_invalid_enum_match_patterns ... ok
-test tests::compile_rejects_local_binding_name_reuse ... ok
-test tests::compile_rejects_local_fixed_array_static_oob_read ... ok
-test tests::compile_rejects_local_fixed_array_static_oob_write ... ok
-test tests::compile_rejects_missing_action_return_paths ... ok
-test tests::compile_rejects_local_mutable_reference_aliases ... ok
-test tests::compile_rejects_missing_function_return_paths ... ok
-test tests::compile_rejects_missing_flow_state_create_on_main_path ... ok
-test tests::compile_rejects_non_bool_assert_condition ... ok
-test tests::compile_rejects_non_bool_lock_definitions ... ok
-test tests::compile_rejects_noop_flow_transition_on_main_path ... ok
-test tests::compile_rejects_out_of_range_flow_state_create_on_main_path ... ok
-test tests::compile_preserves_consume_and_destroy_instructions_in_assembly ... ok
-test tests::compile_rejects_local_references_to_linear_roots ... ok
-test tests::compile_rejects_pure_functions_that_call_ckb_header_runtime_builtins ... ok
-test tests::compile_rejects_owned_linear_field_assignment ... ok
-test tests::compile_rejects_pure_functions_that_call_env_runtime_builtins ... ok
-test tests::compile_rejects_payload_or_unknown_enum_variant_values ... ok
-test tests::compile_rejects_pure_functions_that_call_locks ... ok
-test tests::compile_rejects_pure_functions_that_call_type_hash_runtime_builtin ... ok
-test tests::compile_rejects_read_ref_for_non_cell_backed_types ... ok
-test tests::compile_rejects_return_values_from_unit_actions ... ok
-test tests::compile_rejects_state_edge_that_does_not_consume_binding ... ok
-test tests::compile_rejects_returning_unit_function_results ... ok
-test tests::compile_rejects_reference_escape_boundaries ... ok
-test tests::compile_rejects_undeclared_action_state_edge ... ok
-test tests::compile_rejects_stateful_operations_without_named_linear_cell_operands ... ok
-test tests::compile_rejects_unbound_assert_delta_argument ... ok
-test tests::compile_rejects_string_literals_as_runtime_values ... ok
-test tests::compile_rejects_underdeclared_effects_through_calls ... ok
-test tests::compile_preserves_read_ref_instructions_in_assembly ... ok
-test tests::compile_rejects_underdeclared_effects_through_qualified_calls ... ok
-test tests::compile_rejects_unknown_functions ... ok
-test tests::compile_rejects_unknown_or_reserved_named_types ... ok
-test tests::compile_rejects_underdeclared_effect_annotations ... ok
-test tests::compile_rejects_unknown_struct_fields ... ok
-test tests::compile_rejects_unknown_target_during_option_validation ... ok
-test tests::compile_rejects_unknown_target_profile ... ok
-test tests::compile_rejects_unreachable_statements_after_complete_branch_return ... ok
-test tests::compile_rejects_unreachable_statements_after_return ... ok
-test tests::compile_rejects_unstable_callable_parameter_names ... ok
-test tests::compile_rejects_unsupported_optimization_level ... ok
-test tests::compile_rejects_untyped_empty_array_literals ... ok
-test tests::compile_rejects_unstable_schema_field_names ... ok
-test tests::compile_rejects_wrong_qualified_flow_state_field_initializer ... ok
-test tests::compile_rejects_unsupported_vec_helper_type_combinations ... ok
-test tests::compile_rejects_unsound_mutable_parameter_forms ... ok
-test tests::compile_produces_ckb_elf_without_vm_abi_trailer ... ok
-test tests::compile_result_exposes_nested_fixed_molecule_schema_metadata ... ok
-test tests::compile_produces_non_empty_riscv_elf ... ok
-test tests::compile_rejects_state_transitions_inside_locks ... ok
-test tests::compile_result_exposes_schema_layout_metadata ... ok
-test tests::compile_result_validation_rejects_assembly_with_vm_abi_trailer ... ok
-test tests::compile_rejects_lock_boundary_sources_outside_supported_scope ... ok
-test tests::compile_replace_unique_field_identity_compares_input_and_output ... ok
-test tests::compile_result_exposes_scheduler_metadata_sidecar ... ok
-test tests::compile_lowers_stack_vec_fixed_schema_values ... ok
-test tests::compile_result_validation_rejects_compiler_version_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_artifact_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_constraints_artifact_format_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_artifact_size_mismatch ... ok
-test tests::compile_result_validation_rejects_constraints_artifact_size_mismatch ... ok
-test tests::compile_result_validation_accepts_current_outputs ... ok
-test tests::compile_result_validation_rejects_metadata_schema_downgrade ... ok
-test tests::compile_result_validation_rejects_metadata_artifact_format_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_schema_version_mismatch ... ok
-test tests::compile_result_validation_rejects_mismatched_ckb_type_id_create_output_plan ... ok
-test tests::compile_result_validation_rejects_metadata_source_content_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_mismatched_ckb_output_data_binding ... ok
-test tests::compile_result_validation_rejects_metadata_source_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_target_profile_mismatch ... ok
-test tests::compile_result_validation_rejects_type_id_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_metadata_target_profile_v0_14_abi_mismatch ... ok
-test tests::compile_result_validation_rejects_missing_metadata_artifact_size ... ok
-test tests::compile_result_validation_rejects_molecule_schema_hash_mismatch ... ok
-test tests::compile_result_validation_rejects_noncanonical_source_unit_hash ... ok
-test tests::compile_result_writes_artifact_to_disk ... ok
-test tests::compile_result_validation_rejects_tampered_artifact_hash ... ok
-test tests::compile_supports_typed_empty_array_literals ... ok
-test tests::compile_riscv_elf_accepts_full_width_u64_literals ... ok
-test tests::compile_spills_parameters_and_returns_computed_value ... ok
-test tests::compile_surfaces_type_level_hash_type_dsl_metadata ... ok
-test tests::compile_tracks_linear_values_returned_from_complete_branches ... ok
-test tests::compile_tracks_linear_values_returned_from_tail_if_branches ... ok
-test tests::compile_unrolls_fixed_param_array_foreach_with_pointer_abi ... ok
-test tests::compile_unrolls_local_array_of_tuples_foreach_destructuring ... ok
-test tests::compile_reports_equivalent_state_transition_obligation_for_sugar_and_core_forms ... ok
-test tests::compile_unrolls_local_fixed_array_foreach_without_runtime_indexing ... ok
-test tests::compile_tracks_linear_values_inside_aggregate_bindings ... ok
-test tests::compile_uses_ast_optimizer_for_nonzero_optimization_levels ... ok
-test tests::compile_verifies_create_output_against_computed_scalar_stack_value ... ok
-test tests::compile_verifies_created_output_bool_and_u32_fields ... ok
-test tests::compile_verifies_constructed_fixed_width_vec_output ... ok
-test tests::default_output_path_for_package_input_uses_manifest_out_dir ... ok
-test tests::default_output_path_for_package_input_uses_build_dir ... ok
-test tests::compile_verifies_created_scalar_fields_against_consumed_input_aliases ... ok
-test tests::create_output_verifier_accepts_const_lock_hash ... ok
-test tests::compile_verifies_create_output_against_consumed_input_field_alias ... ok
-test tests::create_output_verifier_accepts_fixed_byte_params_and_consts ... ok
-test tests::compiled_riscv_elf_contains_exit_trampoline ... ok
-test tests::entry_abi_constraints_mark_extreme_slot_counts_unsupported ... ok
-test tests::compile_verifies_large_output_field_requirements_without_partial_fallback ... ok
-test tests::entry_witness_bool_params_are_canonicalized ... ok
-test tests::entry_witness_encoder_includes_schema_backed_params_as_length_prefixed_bytes ... ok
-test tests::entry_witness_encoder_matches_u64_wrapper_abi ... ok
-test tests::entry_witness_encoder_supports_fixed_byte_params ... ok
-test tests::dynamic_schema_fixed_vec_length_is_table_decoded ... ok
-test tests::dynamic_mutable_schema_transitions_are_checked_after_table_decoding ... ok
-test tests::dynamic_schema_fixed_field_access_is_table_decoded ... ok
-test tests::dynamic_named_output_constraints_are_proven_in_where_block ... ok
-test tests::ir_carries_flow_rules ... ok
-test tests::dynamic_schema_fixed_vec_iteration_is_table_decoded ... ok
-test tests::ir_preserves_function_call_return_types ... ok
-test tests::ir_lowers_unit_function_calls_without_result_destinations ... ok
-test tests::ir_rejects_unknown_call_return_types_without_u64_fallback ... ok
-test tests::generated_outgoing_stack_reservations_are_psabi_aligned ... ok
-test tests::ir_summary_captures_cell_runtime_accesses ... ok
-test tests::fixed_enum_fields_have_molecule_schema_metadata ... ok
-test tests::load_modules_for_input_collects_package_source_roots ... ok
-test tests::internal_calls_keep_outgoing_stack_area_abi_aligned ... ok
-test tests::package_entry_must_stay_inside_package_root ... ok
-test tests::package_out_dir_must_stay_inside_package_root ... ok
-test tests::compile_unique_script_args_and_singleton_identity_emit_hash_checks ... ok
-test tests::package_source_roots_must_stay_inside_package_root ... ok
-test tests::loaded_artifact_validation_rejects_metadata_artifact_size_mismatch ... ok
-test tests::primitive_compat_predicates_match_validator_modes ... ok
-test tests::compile_riscv_elf_accepts_large_schema_field_offsets ... ok
-test tests::generic_shared_mutation_does_not_emit_pool_pattern_metadata ... ok
-test tests::fixed_byte_mutable_state_set_transition_is_checked_under_ckb_profile ... ok
-test tests::resolve_input_path_accepts_package_root_and_manifest ... ok
-test tests::scheduler_witness_hex_decode_rejects_invalid_metadata_hex ... ok
-test tests::entry_witness_wrapper_supports_scalar_stack_args ... ok
-test tests::named_action_output_create_binding_reuses_declared_output_index ... ok
-test tests::proof_plan_cross_references_matching_action_obligation_for_invariant ... ok
-test tests::parameterized_entrypoint_emits_witness_entry_wrapper ... ok
-test tests::compile_riscv_elf_accepts_large_stack_offsets ... ok
-test tests::source_unit_disk_verification_rejects_paths_outside_trusted_root ... ok
-test tests::tuple_return_abi_rejects_more_than_eight_fields ... ok
-test tests::vm_abi_trailer_detection_requires_complete_zero_reserved_trailer ... ok
-test types::tests::block_expression_merges_existing_vec_refinements ... ok
-test types::tests::branch_local_consume_is_rejected_until_lifecycle_effects_are_cfg_aware ... ok
-test types::tests::branch_local_create_is_rejected_until_lifecycle_effects_are_cfg_aware ... ok
-test types::tests::byte_string_literal_type_uses_actual_length ... ok
-test types::tests::call_arguments_do_not_coerce_mut_ref_to_ref ... ok
-test types::tests::check_without_resolver_rejects_imports ... ok
-test types::tests::compound_assign_rejects_implicit_narrowing ... ok
-test tests::source_unit_disk_verification_accepts_paths_inside_trusted_root ... ok
-test types::tests::compound_assign_uses_numeric_binary_rules ... ok
-test types::tests::const_initializers_reject_cell_backed_types ... ok
-test types::tests::const_initializers_allow_supported_literals ... ok
-test types::tests::const_initializers_reject_cell_lifecycle_expressions ... ok
-test types::tests::const_initializers_reject_computed_expressions ... ok
-test types::tests::contextual_integer_literals_fit_declared_widths ... ok
-test types::tests::constant_narrowing_casts_must_fit ... ok
-test types::tests::cyclic_schema_type_dependencies_are_rejected ... ok
-test tests::proof_plan_checked_static_excluded_from_on_chain_checked_obligations ... ok
-test types::tests::duplicate_lifecycle_binding_is_rejected_until_effects_are_cfg_aware ... ok
-test types::tests::expected_type_does_not_widen_non_literal_field_boundary ... ok
-test types::tests::expected_type_does_not_widen_non_literal_let_boundary ... ok
-test types::tests::expected_type_does_not_widen_non_literal_abi_arg_boundary ... ok
-test types::tests::expected_type_does_not_widen_non_literal_return_boundary ... ok
-test types::tests::generic_reference_detection_uses_type_structure ... ok
-test types::tests::explicit_cast_can_cross_integer_width_boundary ... ok
-test types::tests::expression_branch_unreachable_code_is_rejected_by_typechecker ... ok
-test types::tests::if_expression_preserves_typed_vec_result_with_empty_constructor_branch ... ok
-test types::tests::if_statement_merges_matching_vec_refinements ... ok
-test types::tests::if_statement_rejects_one_sided_vec_refinement ... ok
-test types::tests::if_statement_rejects_divergent_vec_refinements ... ok
-test types::tests::imported_and_qualified_names_compare_as_same_type ... ok
-test types::tests::imported_type_ids_must_not_collide_in_visible_module_scope ... ok
-test types::tests::invalid_schema_field_types_are_not_registered_as_valid_fields ... ok
-test types::tests::imported_token_type_is_treated_as_linear ... ok
-test types::tests::lifecycle_capability_gates_reject_undeclared_kernel_effects ... ok
-test tests::proof_plan_marks_invariant_action_evidence_as_non_exhaustive ... ok
-test types::tests::match_requires_enum_scrutinee ... ok
-test types::tests::non_tail_linear_expression_statements_are_rejected ... ok
-test types::tests::mixed_width_arithmetic_and_ordering_are_rejected ... ok
-test types::tests::numeric_named_type_equality_is_commutative ... ok
-test types::tests::numeric_type_equality_respects_width ... ok
-test types::tests::qualified_identifier_must_resolve_to_value ... ok
-test types::tests::preserve_rejects_mismatched_field_types ... ok
-test types::tests::imported_linear_argument_is_marked_consumed_after_call ... ok
-test types::tests::recursive_enum_payloads_are_rejected ... ok
-test types::tests::require_block_rejects_assignment_expression ... ok
-test types::tests::require_block_rejects_lifecycle_stdlib_call ... ok
-test types::tests::statically_visible_division_by_zero_is_rejected ... ok
-test types::tests::require_rejects_nested_cell_operation ... ok
-test types::tests::stdlib_claim_output_requires_declared_claim_output_type ... ok
-test types::tests::stdlib_claim_output_requires_complete_field_coverage ... ok
-test types::tests::stdlib_claim_rejects_declared_output_type_mismatch ... ok
-test types::tests::stdlib_claim_rejects_extra_arguments ... ok
-test types::tests::stdlib_claim_rejects_non_receipt_input ... ok
-test types::tests::launch_module_type_checks_with_registered_imports ... ok
-test types::tests::stdlib_claim_requires_explicit_output_and_lock_arguments ... ok
-test types::tests::stdlib_transfer_output_requires_complete_field_coverage ... ok
-test types::tests::stdlib_settle_requires_explicit_output_and_lock_arguments ... ok
-test types::tests::stdlib_transfer_rejects_extra_arguments ... ok
-test types::tests::strict_mode_rejects_imported_legacy_capabilities ... ok
-test types::tests::typed_vec_with_capacity_uses_declared_element_type ... ok
-test types::tests::unsigned_integer_negation_is_rejected ... ok
-test types::tests::tail_match_expressions_are_valid_return_values ... ok
-test types::tests::vec_type_arguments_are_validated ... ok
-test types::tests::u128_ordering_and_arithmetic_still_rejected_on_widening ... ok
-test tests::strict_audit_codegen_emits_only_aligned_stack_pointer_deltas ... ok
-test wasm::tests::wasm_audit_reports_audit_only_for_type_only_module ... ok
-test wasm::tests::wasm_compiler_rejects_pure_action_modules ... ok
-test wasm::tests::wasm_encoder_emits_magic_version_and_status_custom_section ... ok
-test wasm::tests::wasm_runtime_instantiates_metadata_module_but_refuses_calls ... ok
-test types::tests::unsupported_u128_arithmetic_is_rejected ... ok
-test tests::v014_runtime_helpers_fail_closed_when_not_executable ... ok
-test types::tests::widening_boundary_matrix ... ok
-test tests::ordered_named_output_create_constraints_are_checked_in_body_order ... ok
-test tests::u128_mutable_state_transition_with_u64_delta_is_checked ... ok
-test tests::payload_enum_fields_use_dynamic_molecule_schema_metadata ... ok
-test tests::optimized_entry_lock_keeps_inlined_schema_pointer_field_access_checked ... ok
-test codegen::tests::internal_assembler_relaxes_far_conditional_branch_with_long_jump ... ok
-test codegen::tests::internal_assembler_encodes_far_unconditional_jump ... ok
-test codegen::tests::bundled_example_codegen_mnemonics_are_declared ... ok
-
-test result: ok. 776 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.64s
-
-
-running 7 tests
-test adversarial_parser_preserves_operator_precedence_in_ambiguous_sequences ... ok
-test adversarial_0_13_rejects_invalid_hash_type_dsl ... ok
-test adversarial_parser_binds_else_to_nearest_if ... ok
-test adversarial_parser_rejects_deep_unary_expression_without_panicking ... ok
-test adversarial_integer_literals_fail_closed_on_lexical_and_contextual_overflow ... ok
-test adversarial_parser_rejects_deep_nested_control_flow_without_panicking ... ok
-test adversarial_0_13_rejects_unsupported_generic_collection_surfaces ... ok
-
-test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
-
-
-running 11 tests
-test snapshot_simple_action_assembly ... ok
-test runtime_u64_helpers_fail_closed_before_value_use ... ok
-test runtime_void_helpers_fail_closed_before_continuing ... ok
-test snapshot_lock_args_assembly ... ok
-test snapshot_type_id_create_output_assembly ... ok
-test snapshot_spawn_ipc_executable_status_checked_assembly ... ok
-test snapshot_witness_schema_syscall_assembly ... ok
-test runtime_witness_helpers_fail_closed_before_pointer_use ... ok
-test snapshot_collection_lowering_assembly ... ok
-test snapshot_blake2b_helper_assembly ... ok
-test snapshot_assemblies_contain_no_leaked_overflow_diagnostics ... ok
-
-test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.22s
-
-
-running 0 tests
-
-test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
-
-
-running 86 tests
-test cellc_add_git_requires_full_rev_and_records_pin ... ok
-test cellc_add_and_remove_subcommands_honor_dev_path_and_json ... ok
-test cellc_check_denies_metadata_only_declared_invariant ... ok
-Check succeeded
- Target profile: ckb
- Checked: package default (RISC-V assembly)
-test cellc_check_accepts_ckb_profile_timepoint ... ok
-test cellc_abi_subcommand_explains_entry_witness_layout ... ok
-test cellc_check_accepts_pure_ckb_target_profile ... ok
-test cellc_action_build_emits_builder_plan_json ... ok
-test cellc_build_uses_manifest_policy_before_writing_artifacts ... ok
-Build complete
- Artifact format: RISC-V assembly
- Target profile: ckb
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmphktJVg/build/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmphktJVg/build/main.s.meta.json
-test cellc_check_production_rejects_incomplete_output_verification ... ok
-test cellc_check_production_rejects_fail_closed_runtime_paths ... ok
-test cellc_build_accepts_pure_ckb_target_profile_without_vm_abi_trailer ... ok
-test cellc_check_can_reject_runtime_required_obligations ... ok
-test cellc_build_and_check_subcommands_use_package_flow ... ok
-test cellc_ckb_hash_emits_default_blake2b_vector ... ok
-test cellc_check_denies_checked_partial_proof_plan_gap ... ok
-test cellc_clean_subcommand_supports_json_summary ... ok
-test cellc_check_all_targets_checks_asm_and_elf_without_writing_artifacts ... ok
-test cellc_check_uses_manifest_policy_defaults ... ok
-test cellc_check_reports_claim_source_predicate_blocker_class ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [5d, 8b, d, ed, a5, 24, 99, 9f, c3, fe, 29, 67, 78, 19, 2a, 46, 8f, a3, b5, 44, cb, 36, cf, cc, e2, 10, 50, 24, 59, 4b, 5b, 37]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpZN7eUS/artifacts/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpZN7eUS/artifacts/main.s.meta.json
-test cellc_check_accepts_u128_mutable_state_transition_with_u64_delta ... ok
-test cellc_cli_target_overrides_manifest_build_target ... ok
-test cellc_doc_subcommand_generates_markdown_docs ... ok
-test cellc_check_reports_linear_collection_ownership_blocker_class ... ok
-test cellc_entry_witness_subcommand_emits_parameterized_witness_json ... ok
-test cellc_check_reports_settle_finalization_blocker_class ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [9f, aa, 3c, b9, 5, 1b, a7, 19, e4, ea, e4, 1, 79, 7, 11, 89, 7f, 40, ba, 26, 7e, 86, ba, 8c, d5, a3, a, 4d, 3, 45, eb, 54]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmplIPUBc/app_pkg/build/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmplIPUBc/app_pkg/build/main.s.meta.json
-test cellc_compiles_package_with_local_path_dependency ... ok
-test cellc_explain_profile_reports_ckb_v0_14_contract ... ok
-test cellc_constraints_subcommand_surfaces_ckb_deployment_manifest ... ok
-test cellc_check_reports_resource_conservation_blocker_class ... ok
-test cellc_check_reports_explicit_output_binding_without_mutable_state_blockers ... ok
-test cellc_entry_witness_subcommand_rejects_wrong_width_fixed_bytes ... ok
-test cellc_entry_witness_subcommand_encodes_schema_backed_params ... ok
-test cellc_errors_include_runtime_ecode_when_policy_failure_maps_to_runtime_registry ... ok
-test cellc_explain_subcommand_reports_runtime_error ... ok
-test cellc_explain_proof_reports_invariant_action_coverage_match ... ok
-test cellc_explain_proof_human_reports_macro_provenance ... ok
-test cellc_explain_proof_warns_for_lock_group_transaction_scope ... ok
-test cellc_explain_proof_reports_declared_invariant ... ok
-test cellc_explain_proof_reports_covenant_proof_plan ... ok
-test cellc_info_subcommand_supports_json_summary ... ok
-test cellc_explain_proof_summary_reports_fail_closed_diagnostics ... ok
-test cellc_check_reports_pool_invariant_policy_families ... ok
-test cellc_init_subcommand_supports_json_summary ... ok
-test cellc_lsp_flag_rejects_trailing_arguments ... ok
-Formatting complete
- Updated 1 file(s)
-test cellc_rejects_registry_package_dependencies_fail_closed ... ok
-test cellc_new_subcommand_supports_json_summary_and_vcs_none ... ok
-test cellc_run_subcommand_without_vm_runner_degrades_gracefully ... ok
-test cellc_rejects_external_dependency_function_calls_until_linking_exists ... ok
-test cellc_fmt_subcommand_formats_sources ... ok
-test cellc_rejects_underdeclared_effects_from_path_dependency_calls ... ok
-test cellc_test_subcommand_rejects_empty_expected_error_line_text ... ok
-test cellc_install_path_updates_lockfile_and_remove_prunes_it ... ok
-test cellc_test_subcommand_rejects_conflicting_expectations ... ok
-test cellc_test_subcommand_rejects_unknown_directives ... ok
-test cellc_test_subcommand_rejects_missing_expected_error_text ... ok
-test cellc_test_subcommand_rejects_missing_entrypoint_metadata ... ok
-test cellc_test_subcommand_rejects_wrong_expected_error_line ... ok
-test cellc_test_subcommand_rejects_missing_runtime_metadata ... ok
-test cellc_metadata_subcommand_emits_lowering_runtime_json ... ok
-test cellc_test_subcommand_supports_expected_compile_failures ... ok
-test cellc_test_subcommand_supports_expected_error_line_directive ... ok
-test cellc_new_subcommand_initializes_git_by_default ... ok
-test cellc_test_subcommand_compiles_test_sources ... ok
-test cellc_scheduler_plan_consumes_shared_touch_hints ... ok
-test cellc_test_subcommand_supports_entrypoint_metadata_directives ... ok
-test cellc_opt_report_compares_all_optimization_levels ... ok
-test cellc_top_level_primitive_strict_rejects_legacy_capabilities ... ok
-test cellc_test_subcommand_supports_policy_directives ... ok
-test cellc_test_subcommand_supports_runtime_metadata_directives ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpxIOTw9/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpxIOTw9/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V ELF
- Target profile: ckb
- Artifact hash: [cf, 7, cf, ac, d0, a, 43, a3, a8, cc, 8b, 6e, 66, e1, 29, b2, 32, 60, 2f, 76, a3, 55, 4d, 52, d5, 38, 51, 1f, c8, b, 49, 2]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpMnCqdX/artifacts/main.elf
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpMnCqdX/artifacts/main.elf.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [5d, 8b, d, ed, a5, 24, 99, 9f, c3, fe, 29, 67, 78, 19, 2a, 46, 8f, a3, b5, 44, cb, 36, cf, cc, e2, 10, 50, 24, 59, 4b, 5b, 37]
- Output: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpfZfgkz/artifacts/main.s
- Metadata: /private/var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpfZfgkz/artifacts/main.s.meta.json
-test cellc_check_reports_transaction_invariant_checked_subconditions ... ok
-test cellc_test_subcommand_supports_target_directive ... ok
-test cellc_uses_manifest_build_target_by_default ... ok
-test cellc_uses_manifest_build_out_dir_for_package_input ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [a7, d4, 78, cc, c3, f5, cd, 81, cd, de, 51, 44, ee, 83, 4d, 64, 46, df, bd, 40, 58, 5f, 51, 6c, d1, 56, 6b, b7, 44, 9d, 96, 8d]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpy8gfiw/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpy8gfiw/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp30zZTS/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp30zZTS/sample.s.meta.json
-test cellc_top_level_accepts_primitive_strict_for_kernel_effect_capabilities ... ok
-test cellc_verify_artifact_accepts_matching_sidecar ... ok
-test cellc_verify_artifact_enforces_policy_flags ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpdNrwHe/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpdNrwHe/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp2g2vYW/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp2g2vYW/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp1rv5fc/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmp1rv5fc/sample.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpm5WZKi/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpm5WZKi/sample.s.meta.json
-test cellc_writes_requested_output_file ... ok
-test cellc_explain_generics_reports_checked_vec_instantiations ... ok
-test cellc_verify_artifact_rejects_metadata_schema_downgrade ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [47, e2, e6, 55, 6c, 78, 48, d4, 45, 84, a8, 71, 67, a6, 5b, b9, c4, 8d, 69, 85, c0, 5e, 48, c7, e, 11, c0, 24, be, 95, 38, 76]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpJEBJq0/sample.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpJEBJq0/sample.s.meta.json
-test cellc_verify_artifact_rejects_noncanonical_source_unit_hash ... ok
-test cellc_verify_artifact_rejects_tampered_artifact ... ok
-test cellc_verify_artifact_rejects_tampered_source_when_requested ... ok
-test cellc_verify_artifact_enforces_expected_hashes ... ok
-test cellc_verify_artifact_primitive_strict_rechecks_disk_sources ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [79, a1, 5d, 7e, f7, 1f, 9a, 64, 89, da, 9e, 8b, a8, 90, b6, 15, f0, b5, 61, d1, 80, 6b, 39, 9f, f0, 5a, a4, 4d, 0, 5, 41, 3c]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/amm_pool.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/amm_pool.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [2a, 2, ca, c2, fd, b6, 4a, 53, 9e, 26, cb, a1, 31, 69, ab, f3, 1d, c1, 42, d, 18, d3, fd, 1d, 92, b7, a, 55, c6, d, 87, df]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/launch.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/launch.s.meta.json
-test cellc_check_reports_checked_pool_invariant_families_without_runtime_blockers ... ok
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [8b, d7, 59, d4, b6, d1, 6, 8b, 97, 0, fd, e5, df, 72, ec, a6, 99, bf, 20, 34, 90, 55, b2, 17, 6d, 48, 55, 9e, ec, ed, 11, 2b]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/multisig.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/multisig.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [cd, d0, f5, 74, b7, 9d, 8e, 7d, 79, 50, 6a, cf, 3e, 13, b, 53, 5c, b9, 7f, 8c, d1, 1f, 88, bf, 1b, 8a, 3c, 3b, 34, 45, c6, 4e]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/nft.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/nft.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [fd, 14, d8, d9, e, 2c, e8, 71, 98, aa, e2, b6, b4, fc, b8, 93, aa, 84, 66, 2f, 21, 2e, 9d, 26, 5, 63, 5d, 74, 55, fd, 56, 87]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/timelock.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/timelock.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [3c, bd, 90, ed, de, 2c, 8d, 8c, 97, 1, a4, d9, 9, dc, 3d, bd, 22, 6b, 5b, 39, e7, 3e, 59, 9a, 5d, e1, 2c, 13, 61, 4d, 32, 46]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/token.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/token.s.meta.json
-success: compiled successfully
- Artifact format: RISC-V assembly
- Target profile: ckb
- Artifact hash: [2a, 7, 99, 55, e2, cb, e6, 1b, 39, 63, db, fc, 1, 63, fd, 57, 38, 6, a4, 7, ad, b2, 5d, 5c, f1, de, 41, e5, 2a, 29, 1, e5]
- Output: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/vesting.s
- Metadata: /var/folders/kq/dz44fm994nz94zw2dfqnz_g00000gn/T/.tmpQx0Gsc/vesting.s.meta.json
-test cellc_compiles_bundled_examples_to_requested_outputs ... ok
-
-test result: ok. 86 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.90s
-
-
-running 26 tests
-test ckb_scoped_entry_keeps_called_action_helpers ... ok
-test launch_seed_pool_composition_is_scheduler_visible ... ok
-test registry_example_uses_bounded_local_vec_helpers_without_collection_debt ... ok
-test amm_pool_input_output_params_are_scheduler_visible ... ok
-test release_examples_are_free_of_placeholder_hashes_and_formatter_artifacts ... ok
-test nft_core_actions_expose_action_specific_builder_metadata ... ok
-test registry_example_with_insert_contains_compiles_to_elf ... ok
-test token_cell_invariant_appears_in_proof_plan ... ok
-test order_book_language_example_uses_local_vec_helpers_without_collection_debt ... ok
-test stdlib_language_example_compiles_with_all_patterns ... ok
-test v0_15_scoped_invariant_example_compiles_and_produces_proof_plan ... ok
-test token_mint_authority_input_output_binding_is_explicit ... ok
-test v0_15_identity_lifecycle_example_compiles_and_produces_proof_plan ... ok
-test vesting_phase2_remaining_obligations_are_explicit ... ok
-test vesting_read_ref_params_are_scheduler_visible ... ok
-test multisig_core_actions_expose_threshold_flow_metadata ... ok
-test timelock_core_actions_expose_time_and_release_metadata ... ok
-test bundled_examples_emit_molecule_schema_manifest_report ... ok
-test canonical_examples_compile_under_primitive_strict_015 ... ok
-test canonical_examples_are_the_single_checked_in_business_source ... ok
-test bundled_examples_compile_to_non_empty_assembly ... ok
-test bundled_examples_stay_near_backend_shape_release_baseline ... ok
-test bundled_examples_stay_within_backend_shape_budgets ... ok
-test bundled_examples_backend_shape_report_serializes ... ok
-test all_checked_in_cell_examples_compile ... ok
-test bundled_examples_compile_to_elf ... ok
-
-test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 8.13s
-
-
-running 7 tests
-test fuzzy_oversized_static_widths_are_controlled_errors ... ok
-test fuzzy_metadata_tampering_never_panics ... ok
-test fuzzy_unicode_hex_inputs_are_controlled_errors ... ok
-test fuzzy_entry_witness_encoding_never_panics ... ok
-test fuzzy_lsp_incremental_edits_never_panic ... ok
-test fuzzy_mutated_sources_never_panic ... ok
-test fuzzy_semantic_codegen_mutations_reach_assembly ... ok
-
-test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.53s
-
-
-running 4 tests
-test ickb_diff_matrix_is_partial_and_consistent_with_model_fixtures ... ok
-test ickb_positive_fixtures_pass_model_verifier ... ok
-test ickb_negative_fixtures_fail_for_expected_invariant ... ok
-test ickb_benchmark_specs_compile_and_expose_expected_entries ... ok
-
-test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.26s
-
-
-running 1 test
-test syntax_combo_quick_matrix_is_cargo_test_visible ... ok
-
-test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.11s
-
-
-running 14 tests
-test v0_14_wait_requires_child_pid ... ok
-test v0_14_rejects_spawn_ipc_fd_double_close ... ok
-test v0_14_rejects_blake2b_non_hash_input ... ok
-test v0_14_rejects_spawn_ipc_fd_use_after_close ... ok
-test v0_14_rejects_spawn_ipc_fd_leak ... ok
-test v0_14_spawn_target_must_be_static ... ok
-test v0_14_rejects_tampered_spawn_script_reference_metadata ... ok
-test v0_14_exposes_type_id_create_output_plan_and_output_data_boundary ... ok
-test v0_14_exposes_declarative_capacity_floor_metadata ... ok
-test v0_14_rejects_tampered_type_id_output_data_and_script_reference_metadata ... ok
-test v0_14_rejects_tampered_runtime_access_and_script_group_metadata ... ok
-test v0_14_exposes_spawn_ipc_source_witness_time_capacity_metadata ... ok
-test v0_14_language_examples_cover_spawn_pipeline_type_id_and_canonical_style ... ok
-test v0_14_compiles_dynamic_blake2b_hash_helper ... ok
-
-test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.31s
-
-
-running 17 tests
-test ckb_stdlib_protocol_modules_exist_and_cover_required_suites ... ok
-test standard_ckb_compat_manifest_covers_required_suites ... ok
-test ckb_stdlib_protocol_functions_cover_core_operations ... ok
-test standard_ckb_compat_fixture_files_parse_and_have_required_fields ... ok
-test strict_0_16_rejects_unbound_spawn_target_cell_dep ... ok
-test strict_0_16_rejects_metadata_only_proof_plan_gaps ... ok
-test strict_0_16_rejects_spawn_target_manifest_binding_outside_cell_dep_zero ... ok
-test strict_0_16_rejects_spawn_target_manifest_dep_group_binding ... ok
-test proof_plan_soundness_rejects_group_cardinality_drift_after_optimization ... ok
-test proof_plan_soundness_rejects_local_runtime_mismatches ... ok
-test proof_plan_soundness_is_emitted_and_passes_for_checked_identity ... ok
-test proof_plan_soundness_rejects_scoped_duplicate_obligation_deletion ... ok
-test validate_tx_checks_builder_assumption_evidence ... ok
-test cli_verify_deploy_rejects_tampered_plan_integrity ... ok
-test strict_0_16_accepts_manifest_bound_spawn_target_cell_dep ... ok
-test cli_explain_assumptions_and_validate_tx_are_machine_readable ... ok
-test cli_v0_16_tooling_outputs_are_machine_readable_and_schema_bound ... ok
-
-test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.15s
-
-
-running 3 tests
-test btc_bip340_verifier_surface_rejects_wrong_argument_widths ... ok
-test btc_bip340_verifier_surface_lowers_to_generic_spawn_ipc ... ok
-test strict_0_16_accepts_manifest_bound_btc_bip340_verifier ... ok
-
-test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
-
-
-running 3 tests
-test fixed_u64_le_rejects_dynamic_index_oob_window_and_non_fixed_input ... ok
-test fixed_u64_le_lowers_fixed_byte_constants_and_parameters ... ok
-test generic_verifier_envelope_compiles_all_words_after_spawn_with_fd ... ok
-
-test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
-
-
-running 7 tests
-test hash_blake2b_packed_rejects_dynamic_values ... ok
-test verifier_namespace_is_reserved_for_source_and_dependencies ... ok
-test hash_and_byte32_equality_is_allowed_for_authority_binding ... ok
-test hash_blake2b_packed_uses_canonical_type_domain_and_declared_field_order ... ok
-test ckb_outpoint_capacity_and_lock_args_helpers_emit_checked_runtime_accesses ... ok
-test nested_packed_receipt_hash_guards_resource_transition_in_strict_mode ... ok
-test production_runtime_verifier_manifest_requires_full_non_placeholder_pin ... ok
-
-test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
-
-
-running 4 tests
-test v0_16_spawn_with_fd_requires_static_target_and_open_fd ... ok
-test v0_16_spawn_with_fd_exposes_spawn_target_metadata ... ok
-test v0_16_spawn_with_fd_emits_vm2_spawnargs_with_single_inherited_fd ... ok
-test strict_0_16_accepts_manifest_bound_spawn_with_fd_target_cell_dep ... ok
-
-test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
-
-
-running 0 tests
-
-test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
-
-
-== stderr ==
- Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.05s
- Finished `test` profile [unoptimized + debuginfo] target(s) in 0.04s
- Running unittests src/lib.rs (target/debug/deps/cellscript-198f0ba9a296fb91)
- Running tests/adversarial_0_13.rs (target/debug/deps/adversarial_0_13-87ca0b7751a0cf60)
- Running tests/assembly_snapshots.rs (target/debug/deps/assembly_snapshots-a1b0ee4291a50be7)
- Running tests/ckb_acceptance.rs (target/debug/deps/ckb_acceptance-546e6523e51ab114)
- Running tests/cli.rs (target/debug/deps/cli-cd9b4a3e7ed668b4)
- Running tests/examples.rs (target/debug/deps/examples-885631b36bce043e)
- Running tests/fuzzy_debug.rs (target/debug/deps/fuzzy_debug-a3c500396cf14cf4)
- Running tests/ickb_benchmark.rs (target/debug/deps/ickb_benchmark-d0fd214d43bb34ab)
- Running tests/syntax_combo.rs (target/debug/deps/syntax_combo-b9abeffd268b17da)
- Running tests/v0_14.rs (target/debug/deps/v0_14-41fd99cdcf8b775d)
- Running tests/v0_16.rs (target/debug/deps/v0_16-2adfb11c7d8743b5)
- Running tests/v0_16_btc_bip340_verifier.rs (target/debug/deps/v0_16_btc_bip340_verifier-1690c4a1af4e82fe)
- Running tests/v0_16_fixed_u64_le.rs (target/debug/deps/v0_16_fixed_u64_le-42b56ec94f2d9f31)
- Running tests/v0_16_packed_hash_ckb_helpers.rs (target/debug/deps/v0_16_packed_hash_ckb_helpers-45b534a50db0d149)
- Running tests/v0_16_spawn_with_fd.rs (target/debug/deps/v0_16_spawn_with_fd-1fc1dca0d6908655)
- Doc-tests cellscript
diff --git a/.cap/logs/1780406460-76478.log b/.cap/logs/1780406460-76478.log
deleted file mode 100644
index 1af2e126..00000000
--- a/.cap/logs/1780406460-76478.log
+++ /dev/null
@@ -1,4 +0,0 @@
-== stdout ==
-wrote /Users/arthur/RustroverProjects/CellScript/target/novaseal-devnet-stateful-acceptance.json status=passed live_devnet_rpc_executed=True blockers=0
-
-== stderr ==
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 00000000..b8c67051
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,18 @@
+.git
+.cap
+.codex
+.idea
+.playwright-mcp
+target
+**/target
+**/node_modules
+website
+proposals
+audits
+tests
+docs
+roadmap
+editors
+tools
+*.png
+*.log
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 956398ec..a1fa73e3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -20,17 +20,41 @@ jobs:
name: Test
runs-on: ubuntu-latest
timeout-minutes: 45
+ services:
+ postgres:
+ image: postgres:17-alpine
+ env:
+ POSTGRES_DB: cellscript_registry_test
+ POSTGRES_USER: cellscript_test
+ POSTGRES_PASSWORD: cellscript_test_password
+ ports:
+ - 5432:5432
+ options: >-
+ --health-cmd "pg_isready -U cellscript_test -d cellscript_registry_test"
+ --health-interval 5s
+ --health-timeout 5s
+ --health-retries 10
env:
CARGO_INCREMENTAL: "0"
CARGO_TARGET_DIR: /tmp/cellscript-ci-target
CELLSCRIPT_BACKEND_SHAPE_REPORT: /tmp/cellscript-backend-shape/backend-shape-report.json
CKB_SDK_RUST_REF: v5.1.0
+ REGISTRY_TEST_DATABASE_URL: postgresql://cellscript_test:cellscript_test_password@127.0.0.1:5432/cellscript_registry_test
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
submodules: recursive
+ - name: Install Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: "22"
+ cache: npm
+ cache-dependency-path: |
+ website/package-lock.json
+ services/registry-api/package-lock.json
+
- name: Check out ckb-sdk-rust path dependency
run: |
git clone --depth 1 --branch "$CKB_SDK_RUST_REF" \
@@ -40,7 +64,8 @@ jobs:
- name: Install Rust toolchain
run: |
- rustup toolchain install 1.97.1 --profile minimal --component rustfmt --component clippy
+ rustup toolchain install 1.97.1 --profile minimal --component rustfmt --component clippy --component llvm-tools-preview
+ rustup target add --toolchain 1.97.1 riscv64imac-unknown-none-elf wasm32-unknown-unknown
rustup default 1.97.1
rustc --version
cargo --version
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 7a9769bf..403adeb9 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -38,6 +38,7 @@ jobs:
cache: npm
cache-dependency-path: |
website/package-lock.json
+ services/registry-api/package-lock.json
editors/vscode-cellscript/package-lock.json
- name: Install Rust release toolchain
@@ -77,12 +78,8 @@ jobs:
- name: Install pinned CKB build toolchain
run: |
- CKB_TOOLCHAIN="$(python3 - <<'PY'
- import tomllib
- from pathlib import Path
- print(tomllib.loads(Path('../ckb/rust-toolchain.toml').read_text(encoding='utf-8'))['toolchain']['channel'])
- PY
- )"
+ CKB_TOOLCHAIN="$(sed -n 's/^channel = "\(.*\)"$/\1/p' ../ckb/rust-toolchain.toml | head -n 1)"
+ test -n "$CKB_TOOLCHAIN"
rustup toolchain install "$CKB_TOOLCHAIN" --profile minimal
- name: Resolve release version
diff --git a/.github/workflows/website-build.yml b/.github/workflows/website-build.yml
index de96494e..17ad3711 100644
--- a/.github/workflows/website-build.yml
+++ b/.github/workflows/website-build.yml
@@ -17,11 +17,6 @@ jobs:
with:
submodules: recursive
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: "3.12"
-
- name: Set up Node.js
uses: actions/setup-node@v4
with:
@@ -45,10 +40,7 @@ jobs:
fi
- name: Build website
- run: |
- cd website
- npm exec -- astro check
- npm exec -- astro build
+ run: npm --prefix website run build:ci
- name: Upload website dist
uses: actions/upload-artifact@v4
diff --git a/.gitignore b/.gitignore
index 8b86e17a..9920a7f5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,9 @@
/target/
+services/registry-verifier/target/
+services/registry-artifact-verifier/target/
node_modules/
dist/
+dist-node/
services/registry-api/dist/
editors/vscode-cellscript/dist/
@@ -8,10 +11,10 @@ editors/vscode-cellscript/dist/
.idea/
.vscode/
.cap/
+.codex/
+.zcode/
.playwright-mcp/
.wrangler/
-__pycache__/
-*.py[cod]
*.swp
*.swo
@@ -25,7 +28,6 @@ __pycache__/
*.meta.json
.cell/
-Cell.lock
proposals/*
!proposals/novaseal/
@@ -55,14 +57,12 @@ proposals/novaseal/v0-mvp-skeleton/build/
proposals/novaseal/**/.cell/
proposals/novaseal/v0-mvp-skeleton/target/
proposals/novaseal/v0-mvp-skeleton/src/.cell/
-proposals/novaseal/v0-mvp-skeleton/scripts/__pycache__/
proposals/novaseal/v0-mvp-skeleton/verifier/**/target/
proposals/novaseal/v0-mvp-skeleton/harness/**/target/
proposals/novaseal/agreement-profile-v0/target/
proposals/novaseal/agreement-profile-v0/harness/**/target/
proposals/novaseal/agreement-profile-v0/src/.cell/
proposals/novaseal/agreement-profile-v0/harness/**/.cell/
-proposals/novaseal/agreement-profile-v0/scripts/__pycache__/
proposals/novaseal/fungible-xudt-profile-v0/target/
proposals/novaseal/fungible-xudt-profile-v0/src/.cell/
proposals/novaseal/rwa-receipt-profile-v0/target/
@@ -77,8 +77,6 @@ proposals/novaseal/fiber-candidate-profile-v0/target/
proposals/novaseal/fiber-candidate-profile-v0/src/.cell/
proposals/novaseal/**/.DS_Store
proposals/novaseal/**/.cap/
-proposals/novaseal/**/__pycache__/
-proposals/novaseal/**/*.py[cod]
proposals/novaseal/**/*.s
proposals/novaseal/**/*.elf
proposals/novaseal/**/*.meta.json
@@ -86,9 +84,7 @@ proposals/evolving-dob/evolving-dob-profile-v1/build/
proposals/evolving-dob/evolving-dob-profile-v1/target/
proposals/evolving-dob/evolving-dob-profile-v1/.cell/
proposals/evolving-dob/evolving-dob-profile-v1/src/.cell/
-proposals/evolving-dob/evolving-dob-profile-v1/scripts/__pycache__/
proposals/evolving-dob/evolving-dob-profile-v1/.DS_Store
-proposals/evolving-dob/evolving-dob-profile-v1/**/*.py[cod]
proposals/evolving-dob/evolving-dob-profile-v1/**/*.s
proposals/evolving-dob/evolving-dob-profile-v1/**/*.elf
proposals/evolving-dob/evolving-dob-profile-v1/**/*.meta.json
diff --git a/.playwright-mcp/console-2026-06-02T06-24-37-467Z.log b/.playwright-mcp/console-2026-06-02T06-24-37-467Z.log
deleted file mode 100644
index 9d06a057..00000000
--- a/.playwright-mcp/console-2026-06-02T06-24-37-467Z.log
+++ /dev/null
@@ -1,5 +0,0 @@
-[ 247982ms] [ERROR] Failed to load resource: the server responded with a status of 500 (Internal Server Error) @ http://127.0.0.1:4321/CellScript/:0
-[ 247991ms] [ERROR] Failed to load resource: the server responded with a status of 404 (Not Found) @ http://127.0.0.1:4321/favicon.ico:0
-[ 318343ms] [ERROR] Failed to load resource: the server responded with a status of 500 (Internal Server Error) @ http://127.0.0.1:4321/CellScript/:0
-[ 711210ms] [ERROR] Failed to load resource: the server responded with a status of 500 (Internal Server Error) @ http://127.0.0.1:4321/CellScript/:0
-[ 759754ms] [ERROR] Failed to load resource: the server responded with a status of 500 (Internal Server Error) @ http://127.0.0.1:4321/CellScript/:0
diff --git a/.playwright-mcp/console-2026-06-02T08-37-09-619Z.log b/.playwright-mcp/console-2026-06-02T08-37-09-619Z.log
deleted file mode 100644
index 46e88688..00000000
--- a/.playwright-mcp/console-2026-06-02T08-37-09-619Z.log
+++ /dev/null
@@ -1,17 +0,0 @@
-[ 805ms] [VERBOSE] [DOM] Password field is not contained in a form: (More info: https://goo.gl/9p2vKq) %o @ https://accounts.google.com/v3/signin/identifier?opparams=%253Fenable_granular_consent%253Dtrue&dsh=S-1726020052%3A1780389429869879&client_id=946018238758-bi6ni53dfoddlgn97pk3b8i7nphige40.apps.googleusercontent.com&code_challenge=G6JE72YRM8qZHQ9iDSktI7om6XdRp0gUqAGmKUKK2iE&code_challenge_method=S256&include_granted_scopes=true&o2v=2&prompt=consent&redirect_uri=com.apple.Internet-Accounts-Settings.extension%3A%2F&response_type=code&scope=profile+email+https%3A%2F%2Fmail.google.com%2F+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcarddav&service=lso&flowName=GeneralOAuthFlow&continue=https%3A%2F%2Faccounts.google.com%2Fsignin%2Foauth%2Fconsent%3Fauthuser%3Dunknown%26part%3DAJi8hAOxodTm8A9zxcr3Ph4pQOU6sg9BP20PF_l74FwN-IxlKtxN0zN1i-O1JvDr9SfK9Wfa8pBDyPpxGvMVfFVb9izNCgcPCENiLBpWEM-C5Xba0OK1gHDWZUxo-cOlDK30YEmD5m6iIA18XsBJpF4BRKEGMwMJoh9kculTlyaZNl7sTD2Rvo_px2jzmgsWN1SnNu1T2koB8PoBryeshucWffDkgUPKWLx6k0LuLyIk9I4Y2Gqt6PZzL75q8Y-VXS0ucsS1ZsQKwfZE6NwnPyAU70D5Pio3G6jHsOpDhD7_MIilzX2US5NXH_Fst-vzHxZuqnUpBQD1mxqK49TS5yVxLP4VTChp8xBgv5U-9HMXmveOqtB2cvJR-j1CLRfsy_yq6hS775s_t4mGLc4PMeB4ZjspHzlrpVUJWpsOnyFI8w6GqnLgRCPTyDRkorTSxm4W8Iik_2badVewZIjISaTGXMJWEAq1ZA%26flowName%3DGeneralOAuthFlow%26as%3DS-1726020052%253A1780389429869879%26client_id%3D946018238758-bi6ni53dfoddlgn97pk3b8i7nphige40.apps.googleusercontent.com%26requestPath%3D%252Fsignin%252Foauth%252Fconsent%23&rart=ANgoxcc8ysfsndY0dS7dYHRMUrZYu5QNPpyRfZfNWuY7aWvY2O6YGQJNTQRnugzWhVtEI6H2UHsTBqfHcCkBBCsWkiTpn7jiat59X0vSEoU8OQ9ztu0P4wj4WICTjHgELYSfGjbj3PN5:0
-[ 809ms] [LOG] %c%s color: red; background: yellow; font-size: 24px; WARNING! @ https://www.gstatic.com/_/mss/boq-identity/_/js/k=boq-identity.AccountsSignInUi.en_US.5E-Cp8lktf4.es5.O/am=Ed8AAACAUfwjZADw__ffAAACCKIDvmcBmgAhAwAAAAAAAAAAFgAAQCM/d=1/excm=_b,_tp,identifierview/ed=1/dg=0/wt=2/ujg=1/rs=AOaEmlFsQIJA_AF0WIXptlgYzPiBHWxSqA/dti=1/m=_b,_tp:545
-[ 809ms] [LOG] %c%s font-size: 18px; Using this console may allow attackers to impersonate you and steal your information using an attack called Self-XSS.
-Do not enter or paste code that you do not understand. @ https://www.gstatic.com/_/mss/boq-identity/_/js/k=boq-identity.AccountsSignInUi.en_US.5E-Cp8lktf4.es5.O/am=Ed8AAACAUfwjZADw__ffAAACCKIDvmcBmgAhAwAAAAAAAAAAFgAAQCM/d=1/excm=_b,_tp,identifierview/ed=1/dg=0/wt=2/ujg=1/rs=AOaEmlFsQIJA_AF0WIXptlgYzPiBHWxSqA/dti=1/m=_b,_tp:545
-[ 9084ms] [WARNING] Blocked aria-hidden on an element because its descendant retained focus. The focus must not be hidden from assistive technology users. Avoid using aria-hidden on a focused element or its ancestor. Consider using the inert attribute instead, which will also prevent focus. For more details, see the aria-hidden section of the WAI-ARIA specification at https://w3c.github.io/aria/#aria-hidden.
-Element with focus:
-Ancestor with aria-hidden: @ https://accounts.google.com/v3/signin/identifier?opparams=%253Fenable_granular_consent%253Dtrue&dsh=S-1726020052%3A1780389429869879&client_id=946018238758-bi6ni53dfoddlgn97pk3b8i7nphige40.apps.googleusercontent.com&code_challenge=G6JE72YRM8qZHQ9iDSktI7om6XdRp0gUqAGmKUKK2iE&code_challenge_method=S256&include_granted_scopes=true&o2v=2&prompt=consent&redirect_uri=com.apple.Internet-Accounts-Settings.extension%3A%2F&response_type=code&scope=profile+email+https%3A%2F%2Fmail.google.com%2F+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcarddav&service=lso&flowName=GeneralOAuthFlow&continue=https%3A%2F%2Faccounts.google.com%2Fsignin%2Foauth%2Fconsent%3Fauthuser%3Dunknown%26part%3DAJi8hAOxodTm8A9zxcr3Ph4pQOU6sg9BP20PF_l74FwN-IxlKtxN0zN1i-O1JvDr9SfK9Wfa8pBDyPpxGvMVfFVb9izNCgcPCENiLBpWEM-C5Xba0OK1gHDWZUxo-cOlDK30YEmD5m6iIA18XsBJpF4BRKEGMwMJoh9kculTlyaZNl7sTD2Rvo_px2jzmgsWN1SnNu1T2koB8PoBryeshucWffDkgUPKWLx6k0LuLyIk9I4Y2Gqt6PZzL75q8Y-VXS0ucsS1ZsQKwfZE6NwnPyAU70D5Pio3G6jHsOpDhD7_MIilzX2US5NXH_Fst-vzHxZuqnUpBQD1mxqK49TS5yVxLP4VTChp8xBgv5U-9HMXmveOqtB2cvJR-j1CLRfsy_yq6hS775s_t4mGLc4PMeB4ZjspHzlrpVUJWpsOnyFI8w6GqnLgRCPTyDRkorTSxm4W8Iik_2badVewZIjISaTGXMJWEAq1ZA%26flowName%3DGeneralOAuthFlow%26as%3DS-1726020052%253A1780389429869879%26client_id%3D946018238758-bi6ni53dfoddlgn97pk3b8i7nphige40.apps.googleusercontent.com%26requestPath%3D%252Fsignin%252Foauth%252Fconsent%23&rart=ANgoxcc8ysfsndY0dS7dYHRMUrZYu5QNPpyRfZfNWuY7aWvY2O6YGQJNTQRnugzWhVtEI6H2UHsTBqfHcCkBBCsWkiTpn7jiat59X0vSEoU8OQ9ztu0P4wj4WICTjHgELYSfGjbj3PN5:0
-[ 805ms] [VERBOSE] [DOM] Password field is not contained in a form: (More info: https://goo.gl/9p2vKq) %o @ https://accounts.google.com/v3/signin/identifier?opparams=%253Fenable_granular_consent%253Dtrue&dsh=S-1726020052%3A1780389429869879&client_id=946018238758-bi6ni53dfoddlgn97pk3b8i7nphige40.apps.googleusercontent.com&code_challenge=G6JE72YRM8qZHQ9iDSktI7om6XdRp0gUqAGmKUKK2iE&code_challenge_method=S256&include_granted_scopes=true&o2v=2&prompt=consent&redirect_uri=com.apple.Internet-Accounts-Settings.extension%3A%2F&response_type=code&scope=profile+email+https%3A%2F%2Fmail.google.com%2F+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcarddav&service=lso&flowName=GeneralOAuthFlow&continue=https%3A%2F%2Faccounts.google.com%2Fsignin%2Foauth%2Fconsent%3Fauthuser%3Dunknown%26part%3DAJi8hAOxodTm8A9zxcr3Ph4pQOU6sg9BP20PF_l74FwN-IxlKtxN0zN1i-O1JvDr9SfK9Wfa8pBDyPpxGvMVfFVb9izNCgcPCENiLBpWEM-C5Xba0OK1gHDWZUxo-cOlDK30YEmD5m6iIA18XsBJpF4BRKEGMwMJoh9kculTlyaZNl7sTD2Rvo_px2jzmgsWN1SnNu1T2koB8PoBryeshucWffDkgUPKWLx6k0LuLyIk9I4Y2Gqt6PZzL75q8Y-VXS0ucsS1ZsQKwfZE6NwnPyAU70D5Pio3G6jHsOpDhD7_MIilzX2US5NXH_Fst-vzHxZuqnUpBQD1mxqK49TS5yVxLP4VTChp8xBgv5U-9HMXmveOqtB2cvJR-j1CLRfsy_yq6hS775s_t4mGLc4PMeB4ZjspHzlrpVUJWpsOnyFI8w6GqnLgRCPTyDRkorTSxm4W8Iik_2badVewZIjISaTGXMJWEAq1ZA%26flowName%3DGeneralOAuthFlow%26as%3DS-1726020052%253A1780389429869879%26client_id%3D946018238758-bi6ni53dfoddlgn97pk3b8i7nphige40.apps.googleusercontent.com%26requestPath%3D%252Fsignin%252Foauth%252Fconsent%23&rart=ANgoxcc8ysfsndY0dS7dYHRMUrZYu5QNPpyRfZfNWuY7aWvY2O6YGQJNTQRnugzWhVtEI6H2UHsTBqfHcCkBBCsWkiTpn7jiat59X0vSEoU8OQ9ztu0P4wj4WICTjHgELYSfGjbj3PN5:0
-[ 9084ms] [WARNING] Blocked aria-hidden on an element because its descendant retained focus. The focus must not be hidden from assistive technology users. Avoid using aria-hidden on a focused element or its ancestor. Consider using the inert attribute instead, which will also prevent focus. For more details, see the aria-hidden section of the WAI-ARIA specification at https://w3c.github.io/aria/#aria-hidden.
-Element with focus:
-Ancestor with aria-hidden: @ https://accounts.google.com/v3/signin/identifier?opparams=%253Fenable_granular_consent%253Dtrue&dsh=S-1726020052%3A1780389429869879&client_id=946018238758-bi6ni53dfoddlgn97pk3b8i7nphige40.apps.googleusercontent.com&code_challenge=G6JE72YRM8qZHQ9iDSktI7om6XdRp0gUqAGmKUKK2iE&code_challenge_method=S256&include_granted_scopes=true&o2v=2&prompt=consent&redirect_uri=com.apple.Internet-Accounts-Settings.extension%3A%2F&response_type=code&scope=profile+email+https%3A%2F%2Fmail.google.com%2F+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcarddav&service=lso&flowName=GeneralOAuthFlow&continue=https%3A%2F%2Faccounts.google.com%2Fsignin%2Foauth%2Fconsent%3Fauthuser%3Dunknown%26part%3DAJi8hAOxodTm8A9zxcr3Ph4pQOU6sg9BP20PF_l74FwN-IxlKtxN0zN1i-O1JvDr9SfK9Wfa8pBDyPpxGvMVfFVb9izNCgcPCENiLBpWEM-C5Xba0OK1gHDWZUxo-cOlDK30YEmD5m6iIA18XsBJpF4BRKEGMwMJoh9kculTlyaZNl7sTD2Rvo_px2jzmgsWN1SnNu1T2koB8PoBryeshucWffDkgUPKWLx6k0LuLyIk9I4Y2Gqt6PZzL75q8Y-VXS0ucsS1ZsQKwfZE6NwnPyAU70D5Pio3G6jHsOpDhD7_MIilzX2US5NXH_Fst-vzHxZuqnUpBQD1mxqK49TS5yVxLP4VTChp8xBgv5U-9HMXmveOqtB2cvJR-j1CLRfsy_yq6hS775s_t4mGLc4PMeB4ZjspHzlrpVUJWpsOnyFI8w6GqnLgRCPTyDRkorTSxm4W8Iik_2badVewZIjISaTGXMJWEAq1ZA%26flowName%3DGeneralOAuthFlow%26as%3DS-1726020052%253A1780389429869879%26client_id%3D946018238758-bi6ni53dfoddlgn97pk3b8i7nphige40.apps.googleusercontent.com%26requestPath%3D%252Fsignin%252Foauth%252Fconsent%23&rart=ANgoxcc8ysfsndY0dS7dYHRMUrZYu5QNPpyRfZfNWuY7aWvY2O6YGQJNTQRnugzWhVtEI6H2UHsTBqfHcCkBBCsWkiTpn7jiat59X0vSEoU8OQ9ztu0P4wj4WICTjHgELYSfGjbj3PN5:0
-[ 12416ms] [LOG] %c%s color: red; background: yellow; font-size: 24px; WARNING! @ https://www.gstatic.com/_/mss/boq-identity/_/js/k=boq-identity.OAuthUi.en_GB.-QjSzSQ9aM8.es5.O/am=8gMAAAAA_wAGAP-__wYQRAfeM0ABAgAAAAAAAACAAQAgAg/d=1/excm=_b,_tp,attributesview/ed=1/dg=0/wt=2/ujg=1/rs=AOaEmlF7dHSRzi7i6avN91i_S56SHTkyWQ/dti=1/m=_b,_tp:532
-[ 12416ms] [LOG] %c%s font-size: 18px; Using this console may allow attackers to impersonate you and steal your information using an attack called Self-XSS.
-Do not enter or paste code that you don't understand. @ https://www.gstatic.com/_/mss/boq-identity/_/js/k=boq-identity.OAuthUi.en_GB.-QjSzSQ9aM8.es5.O/am=8gMAAAAA_wAGAP-__wYQRAfeM0ABAgAAAAAAAACAAQAgAg/d=1/excm=_b,_tp,attributesview/ed=1/dg=0/wt=2/ujg=1/rs=AOaEmlF7dHSRzi7i6avN91i_S56SHTkyWQ/dti=1/m=_b,_tp:532
-[ 13068ms] [WARNING] Blocked aria-hidden on an element because its descendant retained focus. The focus must not be hidden from assistive technology users. Avoid using aria-hidden on a focused element or its ancestor. Consider using the inert attribute instead, which will also prevent focus. For more details, see the aria-hidden section of the WAI-ARIA specification at https://w3c.github.io/aria/#aria-hidden.
-Element with focus:
-Ancestor with aria-hidden: @ https://accounts.google.com/signin/oauth/id?authuser=0&part=AJi8hAP2QL-uwioYXqGvF-eZZ8hjgEpnjKqembnXcoZa77oSPHPvvoIRHMECGFegZCEeKGt7SCRSklJi5YZafTQiLuStybSb69z9-KnbF7DuxmEi2atTdHz-67rK8PPmz8ydtkqi-4rm2IJMz79xnc7DLVTa7VKK16mdwPwiy-8ydnPOX8r9lsD8Bit7Z96gk8ED1it24apX9HrNYJpCMW2ZyrWfzAM8b0JlRBs5hYoX0SOOLfekPduPVtQtR7L3wWKG9V-jy3s7JCCLPnucYHSEaardBECPcx2r9dAICqia2gfOxcUKcFyIWUjPxL7WdRiVOAM8ni8m1zFpqZvztalE7fr_z8mOClAslwSoTQbTsQe2HM2NMdHOxqBh2YIpBzYfiB2sm_fZSn8JIrk5XXefaRdbdN-aBfkS27DJqsn8iJUpfk2FIlp02y3HHdTCzmKyttt-akvmOOVAI_eYb3ZEiHBmw0GBqwUtld-ZThM9GqLlJwJMTVWtb9-VWVPg3_DzbN1oB1T3QbpvPHVK7fcLOpcbDo-qUUXy52eR4nJ4TWJ-ER9DMQC1e2DBjKntmcmWgRaqyzqxxdxDjz1IvDUonXMzxs3j9QDGYmPG9T6AeYpirCJU3pg-dz3-AjiXmQafTv77OP6WyXwnhu-NcVi4yAveH2klHDP7X4Fm80ljBdIJ_06fyH_ArQM2YpmfPN74XYIUyiZautADOIYQMe-jt1VHl7m4zlWuJX9ybDveUjUFw_xB2CEuNVzA0nWuyK4kDzcQuAUP7lzkJs26cpd6xPZfQLV6TWBkoSRZJPOeUkuu1YKnEOPvV3Zvo4sZKv6PC26HK0DQcihbBFfbuxs34_ryMopaqldczWJqC1_hzfoALTaMzyUCcexHq77E3tANqs9vdheAnD7jX_OG54qTCxLjcKDtajfp2KUnc3EyKEJJi6Vzg5iXVLp37qE3NV28Mn4Rab8YtqRQ_tXWd58HE_yF6pNdwgBxUWFnLLsJkbbtDPP6lws&flowName=GeneralOAuthFlow&as=S-1726020052%3A1780389429869879&client_id=946018238758-bi6ni53dfoddlgn97pk3b8i7nphige40.apps.googleusercontent.com&rapt=AEjHL4MOcReAm2eyhkicwX74YBhw02GzMMj8n8SbH3YQqnCVn1HTBoQubAtd43DBA6GQtFhgLKHT8Khsnd2PY8NdhN4tRPty1FTHehGBmLESwYLeTnF3q3U#:0
diff --git a/.playwright-mcp/page-2026-06-02T05-35-47-870Z.yml b/.playwright-mcp/page-2026-06-02T05-35-47-870Z.yml
deleted file mode 100644
index f9885ecf..00000000
--- a/.playwright-mcp/page-2026-06-02T05-35-47-870Z.yml
+++ /dev/null
@@ -1,348 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Model" [ref=e8] [cursor=pointer]:
- - /url: "#core-model"
- - link "Assurance" [ref=e9] [cursor=pointer]:
- - /url: "#assurance"
- - link "Commands" [ref=e10] [cursor=pointer]:
- - /url: "#tooling"
- - link "Examples" [ref=e11] [cursor=pointer]:
- - /url: "#examples"
- - link "Source" [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e13] [cursor=pointer]:
- - generic [ref=e16]: Dark
- - main [ref=e17]:
- - region "CellScript" [ref=e18]:
- - generic [ref=e19]:
- - heading "CellScript" [level=1] [ref=e20]
- - paragraph [ref=e21]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e22]:
- - link "Get started" [ref=e23] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Model fit" [ref=e24] [cursor=pointer]:
- - /url: "#identity"
- - generic "CellScript contract surface" [ref=e25]:
- - generic [ref=e26]:
- - term [ref=e27]: target
- - definition [ref=e28]: ckb-vm RISC-V
- - generic [ref=e29]:
- - term [ref=e30]: model
- - definition [ref=e31]: schema-backed Cells
- - generic [ref=e32]:
- - term [ref=e33]: output
- - definition [ref=e34]: metadata + ProofPlan
- - generic [ref=e35]:
- - generic [ref=e37]: token.cell
- - tablist "CellScript examples" [ref=e39]:
- - tab "Fungible Token" [selected] [ref=e40] [cursor=pointer]
- - tab "NFT" [ref=e41] [cursor=pointer]
- - tab "AMM Pool" [ref=e42] [cursor=pointer]
- - tab "Vesting" [ref=e43] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e45]:
- - generic [ref=e46]:
- - generic [ref=e47]: "1"
- - generic [ref=e48]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e49]:
- - generic [ref=e50]: "2"
- - generic [ref=e51]: "amount: u64,"
- - generic [ref=e52]:
- - generic [ref=e53]: "3"
- - generic [ref=e54]: "symbol: [u8; 8],"
- - generic [ref=e55]:
- - generic [ref=e56]: "4"
- - generic [ref=e57]: "}"
- - generic [ref=e59]: "5"
- - generic [ref=e60]:
- - generic [ref=e61]: "6"
- - generic [ref=e62]: "action transfer_token(token: Token, to: Address)"
- - generic [ref=e63]:
- - generic [ref=e64]: "7"
- - generic [ref=e65]: "-> next_token: Token"
- - generic [ref=e66]:
- - generic [ref=e67]: "8"
- - generic [ref=e68]: where
- - generic [ref=e69]:
- - generic [ref=e70]: "9"
- - generic [ref=e71]: consume token
- - generic [ref=e72]:
- - generic [ref=e73]: "10"
- - generic [ref=e74]: "create next_token = Token {"
- - generic [ref=e75]:
- - generic [ref=e76]: "11"
- - generic [ref=e77]: "amount: token.amount,"
- - generic [ref=e78]:
- - generic [ref=e79]: "12"
- - generic [ref=e80]: "symbol: token.symbol"
- - generic [ref=e81]:
- - generic [ref=e82]: "13"
- - generic [ref=e83]: "} with_lock(to)"
- - generic [ref=e85]: "14"
- - generic [ref=e86]:
- - generic [ref=e87]: "15"
- - generic [ref=e88]: "action burn(token: Token)"
- - generic [ref=e89]:
- - generic [ref=e90]: $
- - generic [ref=e91]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e92]:
- - heading "Getting Started" [level=2] [ref=e93]
- - generic [ref=e94]:
- - article [ref=e95]:
- - generic [ref=e96]: "1"
- - heading "Install" [level=3] [ref=e97]
- - paragraph [ref=e98]:
- - code [ref=e99]: cargo install --path .
- - article [ref=e100]:
- - generic [ref=e101]: "2"
- - heading "Compile" [level=3] [ref=e102]
- - paragraph [ref=e103]:
- - code [ref=e104]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e105]:
- - generic [ref=e106]: "3"
- - heading "Check" [level=3] [ref=e107]
- - paragraph [ref=e108]:
- - code [ref=e109]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e110]:
- - heading "Compiler Workflow" [level=2] [ref=e111]
- - generic [ref=e112]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e113]:
- - article [ref=e114]:
- - img [ref=e116]:
- - generic [ref=e119]: .cell
- - heading "CellScript source" [level=3] [ref=e120]
- - img [ref=e122]
- - article [ref=e124]:
- - img [ref=e126]
- - heading "Parse & check" [level=3] [ref=e130]
- - paragraph [ref=e131]: Syntax, types, effects
- - img [ref=e133]
- - article [ref=e135]:
- - img [ref=e137]
- - heading "IR + Metadata" [level=3] [ref=e143]
- - paragraph [ref=e144]: Typed model & assurance info
- - img [ref=e146]
- - article [ref=e148]:
- - img [ref=e150]
- - heading "Lower to RISC-V" [level=3] [ref=e154]
- - paragraph [ref=e155]: ckb-vm codegen & optimisations
- - img [ref=e157]
- - article [ref=e159]:
- - img [ref=e161]:
- - generic [ref=e164]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e165]
- - paragraph [ref=e166]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e167]:
- - heading "Build for CKB" [level=3] [ref=e168]
- - list [ref=e169]:
- - listitem [ref=e170]:
- - img [ref=e171]
- - generic [ref=e173]: ckb-vm compatible
- - listitem [ref=e174]:
- - img [ref=e175]
- - generic [ref=e177]: Deterministic execution
- - listitem [ref=e178]:
- - img [ref=e179]
- - generic [ref=e181]: Minimal syscalls
- - listitem [ref=e182]:
- - img [ref=e183]
- - generic [ref=e185]: Scheduler-aware
- - region "Core Model" [ref=e186]:
- - heading "Core Model" [level=2] [ref=e187]
- - paragraph [ref=e188]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e189]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e190]:
- - tablist "CellScript core primitives" [ref=e191]:
- - tab "resource" [selected] [ref=e192] [cursor=pointer]:
- - generic [ref=e193]: resource
- - tab "shared" [ref=e194] [cursor=pointer]:
- - generic [ref=e195]: shared
- - tab "receipt" [ref=e196] [cursor=pointer]:
- - generic [ref=e197]: receipt
- - tab "action" [ref=e198] [cursor=pointer]:
- - generic [ref=e199]: action
- - tab "lock" [ref=e200] [cursor=pointer]:
- - generic [ref=e201]: lock
- - tab "flow" [ref=e202] [cursor=pointer]:
- - generic [ref=e203]: flow
- - tab "invariant" [ref=e204] [cursor=pointer]:
- - generic [ref=e205]: invariant
- - tab "struct / enum" [ref=e206] [cursor=pointer]:
- - generic [ref=e207]: struct / enum
- - tab "identity" [ref=e208] [cursor=pointer]:
- - generic [ref=e209]: identity
- - tabpanel "resource" [ref=e211]:
- - paragraph [ref=e213]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e214]:
- - generic [ref=e215]:
- - generic [ref=e216]: Example excerpt
- - generic [ref=e217]: examples/token.cell
- - generic [ref=e218]: "resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e219]:
- - generic [ref=e220]:
- - heading "Assurance Output" [level=2] [ref=e221]
- - paragraph [ref=e222]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e224]:
- - generic "Assurance output summary" [ref=e225]:
- - article [ref=e226]:
- - text: Schema
- - strong [ref=e227]: v42
- - paragraph [ref=e228]: current compiler metadata schema
- - article [ref=e229]:
- - text: Source
- - strong [ref=e230]: vesting.cell
- - paragraph [ref=e231]: shared + receipt + flow
- - article [ref=e232]:
- - text: Boundary
- - strong [ref=e233]: local sidecar
- - paragraph [ref=e234]: validated; provenance required when shared
- - group [ref=e235]:
- - generic "- Metadata excerpt" [ref=e236] [cursor=pointer]
- - generic [ref=e237]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e238]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": [ { \"name\": \"VestingConfig\", \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, { \"name\": \"VestingGrant\", \"kind\": \"receipt\", \"capabilities\": [\"store\", \"create\", \"consume\"], \"flow_state_field\": \"state\", \"flow_transitions\": [ { \"from\": \"Granted\", \"to\": \"Claimable\" }, { \"from\": \"Claimable\", \"to\": \"FullyClaimed\" } ] } ], \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"limits\": [ \"sidecar is not authenticated\", \"aggregate invariants may be metadata-only\" ] } }"
- - region "Model Fit" [ref=e239]:
- - generic [ref=e240]:
- - heading "Model Fit" [level=2] [ref=e241]
- - paragraph [ref=e242]: "This is a positioning map, not a league table. CellScript is narrow on purpose: it speaks CKB Cells directly and leaves account-storage assumptions at the door."
- - table [ref=e244]:
- - rowgroup [ref=e245]:
- - row "Axis CellScript Account contracts Move-family languages UTXO contract languages" [ref=e246]:
- - columnheader "Axis" [ref=e247]
- - columnheader "CellScript" [ref=e248]
- - columnheader "Account contracts" [ref=e249]
- - columnheader "Move-family languages" [ref=e250]
- - columnheader "UTXO contract languages" [ref=e251]
- - rowgroup [ref=e252]:
- - row "Where state lives Named Cells with schema-backed data and explicit locks Contract-owned account storage VM-managed objects or resource values UTXO state plus contract logic" [ref=e253]:
- - cell "Where state lives" [ref=e254]
- - cell "Named Cells with schema-backed data and explicit locks" [ref=e255]
- - cell "Contract-owned account storage" [ref=e256]
- - cell "VM-managed objects or resource values" [ref=e257]
- - cell "UTXO state plus contract logic" [ref=e258]
- - row "What is checked Linear lifecycle, declared effects, typed field access, and transition shape ABI conventions, storage layout, external linters VM-enforced abilities and module rules Spend predicates and transaction validity" [ref=e259]:
- - cell "What is checked" [ref=e260]
- - cell "Linear lifecycle, declared effects, typed field access, and transition shape" [ref=e261]
- - cell "ABI conventions, storage layout, external linters" [ref=e262]
- - cell "VM-enforced abilities and module rules" [ref=e263]
- - cell "Spend predicates and transaction validity" [ref=e264]
- - row "What reviewers see metadata, constraints, ProofPlan, source hashes, access summary ABI, events, storage diff, runtime traces module bytecode plus VM safety properties Contract ABI plus transaction semantics" [ref=e265]:
- - cell "What reviewers see" [ref=e266]
- - cell "metadata, constraints, ProofPlan, source hashes, access summary" [ref=e267]
- - cell "ABI, events, storage diff, runtime traces" [ref=e268]
- - cell "module bytecode plus VM safety properties" [ref=e269]
- - cell "Contract ABI plus transaction semantics" [ref=e270]
- - row "What it refuses general-purpose runtime, new VM, or account-storage shim Cell-native state by default ckb-vm RISC-V target by default CellScript semantic metadata by default" [ref=e271]:
- - cell "What it refuses" [ref=e272]
- - cell "general-purpose runtime, new VM, or account-storage shim" [ref=e273]
- - cell "Cell-native state by default" [ref=e274]
- - cell "ckb-vm RISC-V target by default" [ref=e275]
- - cell "CellScript semantic metadata by default" [ref=e276]
- - row "Best fit CKB Cell transitions that need explicit effects and audit evidence Applications built around mutable account state Resource-centric ecosystems already running a Move VM UTXO apps whose compiler model is not Cell-specific" [ref=e277]:
- - cell "Best fit" [ref=e278]
- - cell "CKB Cell transitions that need explicit effects and audit evidence" [ref=e279]
- - cell "Applications built around mutable account state" [ref=e280]
- - cell "Resource-centric ecosystems already running a Move VM" [ref=e281]
- - cell "UTXO apps whose compiler model is not Cell-specific" [ref=e282]
- - region "Tooling Surface" [ref=e283]:
- - heading "Tooling Surface" [level=2] [ref=e284]
- - generic [ref=e285]:
- - tablist "CellScript tooling commands" [ref=e286]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e287] [cursor=pointer]:
- - code [ref=e288]: cellc metadata
- - generic [ref=e289]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e290] [cursor=pointer]:
- - code [ref=e291]: cellc constraints
- - generic [ref=e292]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e293] [cursor=pointer]:
- - code [ref=e294]: cellc audit-bundle
- - generic [ref=e295]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e296] [cursor=pointer]:
- - code [ref=e297]: cellc lsp
- - generic [ref=e298]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e300]:
- - generic [ref=e301]:
- - generic [ref=e302]: When
- - paragraph [ref=e303]: Use before review or integration.
- - generic [ref=e304]: Output
- - paragraph [ref=e305]: Schema, effects, source hashes, target profile.
- - generic [ref=e306]:
- - generic [ref=e307]: Run
- - generic [ref=e308]: "# Emit review metadata for a real example."
- - code [ref=e309]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - region "Examples" [ref=e310]:
- - heading "Examples" [level=2] [ref=e311]
- - generic [ref=e312]:
- - link "token.cell Mint, transfer, burn, and typed metadata. resource consume/create burn" [ref=e313] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - heading "token.cell" [level=3] [ref=e314]:
- - code [ref=e315]: token.cell
- - paragraph [ref=e316]: Mint, transfer, burn, and typed metadata.
- - generic [ref=e317]:
- - generic [ref=e318]: resource
- - generic [ref=e319]: consume/create
- - generic [ref=e320]: burn
- - link "nft.cell Ownership transfer with preserve and relock. resource preserve relock" [ref=e321] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - heading "nft.cell" [level=3] [ref=e322]:
- - code [ref=e323]: nft.cell
- - paragraph [ref=e324]: Ownership transfer with preserve and relock.
- - generic [ref=e325]:
- - generic [ref=e326]: resource
- - generic [ref=e327]: preserve
- - generic [ref=e328]: relock
- - link "amm_pool.cell Shared reserves with slippage checks. shared replace slippage" [ref=e329] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - heading "amm_pool.cell" [level=3] [ref=e330]:
- - code [ref=e331]: amm_pool.cell
- - paragraph [ref=e332]: Shared reserves with slippage checks.
- - generic [ref=e333]:
- - generic [ref=e334]: shared
- - generic [ref=e335]: replace
- - generic [ref=e336]: slippage
- - link "vesting.cell Grant state flow into claimed output. flow transition receipt" [ref=e337] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - heading "vesting.cell" [level=3] [ref=e338]:
- - code [ref=e339]: vesting.cell
- - paragraph [ref=e340]: Grant state flow into claimed output.
- - generic [ref=e341]:
- - generic [ref=e342]: flow
- - generic [ref=e343]: transition
- - generic [ref=e344]: receipt
- - link "multisig.cell Witness checks for threshold-style locks. lock witness threshold" [ref=e345] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/multisig.cell
- - heading "multisig.cell" [level=3] [ref=e346]:
- - code [ref=e347]: multisig.cell
- - paragraph [ref=e348]: Witness checks for threshold-style locks.
- - generic [ref=e349]:
- - generic [ref=e350]: lock
- - generic [ref=e351]: witness
- - generic [ref=e352]: threshold
- - link "timelock.cell Time-bound spending from Cell state. lock env timepoint" [ref=e353] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/timelock.cell
- - heading "timelock.cell" [level=3] [ref=e354]:
- - code [ref=e355]: timelock.cell
- - paragraph [ref=e356]: Time-bound spending from Cell state.
- - generic [ref=e357]:
- - generic [ref=e358]: lock
- - generic [ref=e359]: env
- - generic [ref=e360]: timepoint
- - contentinfo [ref=e361]:
- - generic [ref=e362]:
- - generic [ref=e363]:
- - link "CellScript" [ref=e364] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e366]: CellScript
- - paragraph [ref=e367]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e368]:
- - link "Docs" [ref=e369] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e370] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e371] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e372] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T05-37-28-163Z.yml b/.playwright-mcp/page-2026-06-02T05-37-28-163Z.yml
deleted file mode 100644
index d662ab1a..00000000
--- a/.playwright-mcp/page-2026-06-02T05-37-28-163Z.yml
+++ /dev/null
@@ -1,348 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Model" [ref=e8] [cursor=pointer]:
- - /url: "#core-model"
- - link "Assurance" [ref=e9] [cursor=pointer]:
- - /url: "#assurance"
- - link "Commands" [ref=e10] [cursor=pointer]:
- - /url: "#tooling"
- - link "Examples" [ref=e11] [cursor=pointer]:
- - /url: "#examples"
- - link "Source" [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e13] [cursor=pointer]:
- - generic [ref=e16]: Dark
- - main [ref=e17]:
- - region "CellScript" [ref=e18]:
- - generic [ref=e19]:
- - heading "CellScript" [level=1] [ref=e20]
- - paragraph [ref=e21]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e22]:
- - link "Get started" [ref=e23] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Model fit" [ref=e24] [cursor=pointer]:
- - /url: "#identity"
- - generic "CellScript contract surface" [ref=e25]:
- - generic [ref=e26]:
- - term [ref=e27]: target
- - definition [ref=e28]: ckb-vm RISC-V
- - generic [ref=e29]:
- - term [ref=e30]: model
- - definition [ref=e31]: schema-backed Cells
- - generic [ref=e32]:
- - term [ref=e33]: output
- - definition [ref=e34]: metadata + ProofPlan
- - generic [ref=e35]:
- - generic [ref=e37]: token.cell
- - tablist "CellScript examples" [ref=e39]:
- - tab "Fungible Token" [selected] [ref=e40] [cursor=pointer]
- - tab "NFT" [ref=e41] [cursor=pointer]
- - tab "AMM Pool" [ref=e42] [cursor=pointer]
- - tab "Vesting" [ref=e43] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e45]:
- - generic [ref=e46]:
- - generic [ref=e47]: "1"
- - generic [ref=e48]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e49]:
- - generic [ref=e50]: "2"
- - generic [ref=e51]: "amount: u64,"
- - generic [ref=e52]:
- - generic [ref=e53]: "3"
- - generic [ref=e54]: "symbol: [u8; 8],"
- - generic [ref=e55]:
- - generic [ref=e56]: "4"
- - generic [ref=e57]: "}"
- - generic [ref=e59]: "5"
- - generic [ref=e60]:
- - generic [ref=e61]: "6"
- - generic [ref=e62]: "action transfer_token(token: Token, to: Address)"
- - generic [ref=e63]:
- - generic [ref=e64]: "7"
- - generic [ref=e65]: "-> next_token: Token"
- - generic [ref=e66]:
- - generic [ref=e67]: "8"
- - generic [ref=e68]: where
- - generic [ref=e69]:
- - generic [ref=e70]: "9"
- - generic [ref=e71]: consume token
- - generic [ref=e72]:
- - generic [ref=e73]: "10"
- - generic [ref=e74]: "create next_token = Token {"
- - generic [ref=e75]:
- - generic [ref=e76]: "11"
- - generic [ref=e77]: "amount: token.amount,"
- - generic [ref=e78]:
- - generic [ref=e79]: "12"
- - generic [ref=e80]: "symbol: token.symbol"
- - generic [ref=e81]:
- - generic [ref=e82]: "13"
- - generic [ref=e83]: "} with_lock(to)"
- - generic [ref=e85]: "14"
- - generic [ref=e86]:
- - generic [ref=e87]: "15"
- - generic [ref=e88]: "action burn(token: Token)"
- - generic [ref=e89]:
- - generic [ref=e90]: $
- - generic [ref=e91]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e92]:
- - heading "Getting Started" [level=2] [ref=e93]
- - generic [ref=e94]:
- - article [ref=e95]:
- - generic [ref=e96]: "1"
- - heading "Install" [level=3] [ref=e97]
- - paragraph [ref=e98]:
- - code [ref=e99]: cargo install --path .
- - article [ref=e100]:
- - generic [ref=e101]: "2"
- - heading "Compile" [level=3] [ref=e102]
- - paragraph [ref=e103]:
- - code [ref=e104]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e105]:
- - generic [ref=e106]: "3"
- - heading "Check" [level=3] [ref=e107]
- - paragraph [ref=e108]:
- - code [ref=e109]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e110]:
- - heading "Compiler Workflow" [level=2] [ref=e111]
- - generic [ref=e112]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e113]:
- - article [ref=e114]:
- - img [ref=e116]:
- - generic [ref=e119]: .cell
- - heading "CellScript source" [level=3] [ref=e120]
- - img [ref=e122]
- - article [ref=e124]:
- - img [ref=e126]
- - heading "Parse & check" [level=3] [ref=e130]
- - paragraph [ref=e131]: Syntax, types, effects
- - img [ref=e133]
- - article [ref=e135]:
- - img [ref=e137]
- - heading "IR + Metadata" [level=3] [ref=e143]
- - paragraph [ref=e144]: Typed model & assurance info
- - img [ref=e146]
- - article [ref=e148]:
- - img [ref=e150]
- - heading "Lower to RISC-V" [level=3] [ref=e154]
- - paragraph [ref=e155]: ckb-vm codegen & optimisations
- - img [ref=e157]
- - article [ref=e159]:
- - img [ref=e161]:
- - generic [ref=e164]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e165]
- - paragraph [ref=e166]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e167]:
- - heading "Build for CKB" [level=3] [ref=e168]
- - list [ref=e169]:
- - listitem [ref=e170]:
- - img [ref=e171]
- - generic [ref=e173]: ckb-vm compatible
- - listitem [ref=e174]:
- - img [ref=e175]
- - generic [ref=e177]: Deterministic execution
- - listitem [ref=e178]:
- - img [ref=e179]
- - generic [ref=e181]: Minimal syscalls
- - listitem [ref=e182]:
- - img [ref=e183]
- - generic [ref=e185]: Scheduler-aware
- - region "Core Model" [ref=e186]:
- - heading "Core Model" [level=2] [ref=e187]
- - paragraph [ref=e188]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e189]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e190]:
- - tablist "CellScript core primitives" [ref=e191]:
- - tab "resource" [selected] [ref=e192] [cursor=pointer]:
- - generic [ref=e193]: resource
- - tab "shared" [ref=e194] [cursor=pointer]:
- - generic [ref=e195]: shared
- - tab "receipt" [ref=e196] [cursor=pointer]:
- - generic [ref=e197]: receipt
- - tab "action" [ref=e198] [cursor=pointer]:
- - generic [ref=e199]: action
- - tab "lock" [ref=e200] [cursor=pointer]:
- - generic [ref=e201]: lock
- - tab "flow" [ref=e202] [cursor=pointer]:
- - generic [ref=e203]: flow
- - tab "invariant" [ref=e204] [cursor=pointer]:
- - generic [ref=e205]: invariant
- - tab "struct / enum" [ref=e206] [cursor=pointer]:
- - generic [ref=e207]: struct / enum
- - tab "identity" [ref=e208] [cursor=pointer]:
- - generic [ref=e209]: identity
- - tabpanel "resource" [ref=e211]:
- - paragraph [ref=e213]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e214]:
- - generic [ref=e215]:
- - generic [ref=e216]: Example excerpt
- - generic [ref=e217]: examples/token.cell
- - generic [ref=e218]: "resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e219]:
- - generic [ref=e220]:
- - heading "Assurance Output" [level=2] [ref=e221]
- - paragraph [ref=e222]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e224]:
- - generic "Assurance output summary" [ref=e225]:
- - article [ref=e226]:
- - text: Schema
- - strong [ref=e227]: v42
- - paragraph [ref=e228]: current compiler metadata schema
- - article [ref=e229]:
- - text: Source
- - strong [ref=e230]: vesting.cell
- - paragraph [ref=e231]: shared + receipt + flow
- - article [ref=e232]:
- - text: Boundary
- - strong [ref=e233]: local sidecar
- - paragraph [ref=e234]: validated; provenance required when shared
- - group [ref=e235]:
- - generic "- Metadata excerpt" [ref=e236] [cursor=pointer]
- - generic [ref=e237]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e238]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Model Fit" [ref=e239]:
- - generic [ref=e240]:
- - heading "Model Fit" [level=2] [ref=e241]
- - paragraph [ref=e242]: "This is a positioning map, not a league table. CellScript is narrow on purpose: it speaks CKB Cells directly and leaves account-storage assumptions at the door."
- - table [ref=e244]:
- - rowgroup [ref=e245]:
- - row "Axis CellScript Account contracts Move-family languages UTXO contract languages" [ref=e246]:
- - columnheader "Axis" [ref=e247]
- - columnheader "CellScript" [ref=e248]
- - columnheader "Account contracts" [ref=e249]
- - columnheader "Move-family languages" [ref=e250]
- - columnheader "UTXO contract languages" [ref=e251]
- - rowgroup [ref=e252]:
- - row "Where state lives Named Cells with schema-backed data and explicit locks Contract-owned account storage VM-managed objects or resource values UTXO state plus contract logic" [ref=e253]:
- - cell "Where state lives" [ref=e254]
- - cell "Named Cells with schema-backed data and explicit locks" [ref=e255]
- - cell "Contract-owned account storage" [ref=e256]
- - cell "VM-managed objects or resource values" [ref=e257]
- - cell "UTXO state plus contract logic" [ref=e258]
- - row "What is checked Linear lifecycle, declared effects, typed field access, and transition shape ABI conventions, storage layout, external linters VM-enforced abilities and module rules Spend predicates and transaction validity" [ref=e259]:
- - cell "What is checked" [ref=e260]
- - cell "Linear lifecycle, declared effects, typed field access, and transition shape" [ref=e261]
- - cell "ABI conventions, storage layout, external linters" [ref=e262]
- - cell "VM-enforced abilities and module rules" [ref=e263]
- - cell "Spend predicates and transaction validity" [ref=e264]
- - row "What reviewers see metadata, constraints, ProofPlan, source hashes, access summary ABI, events, storage diff, runtime traces module bytecode plus VM safety properties Contract ABI plus transaction semantics" [ref=e265]:
- - cell "What reviewers see" [ref=e266]
- - cell "metadata, constraints, ProofPlan, source hashes, access summary" [ref=e267]
- - cell "ABI, events, storage diff, runtime traces" [ref=e268]
- - cell "module bytecode plus VM safety properties" [ref=e269]
- - cell "Contract ABI plus transaction semantics" [ref=e270]
- - row "What it refuses general-purpose runtime, new VM, or account-storage shim Cell-native state by default ckb-vm RISC-V target by default CellScript semantic metadata by default" [ref=e271]:
- - cell "What it refuses" [ref=e272]
- - cell "general-purpose runtime, new VM, or account-storage shim" [ref=e273]
- - cell "Cell-native state by default" [ref=e274]
- - cell "ckb-vm RISC-V target by default" [ref=e275]
- - cell "CellScript semantic metadata by default" [ref=e276]
- - row "Best fit CKB Cell transitions that need explicit effects and audit evidence Applications built around mutable account state Resource-centric ecosystems already running a Move VM UTXO apps whose compiler model is not Cell-specific" [ref=e277]:
- - cell "Best fit" [ref=e278]
- - cell "CKB Cell transitions that need explicit effects and audit evidence" [ref=e279]
- - cell "Applications built around mutable account state" [ref=e280]
- - cell "Resource-centric ecosystems already running a Move VM" [ref=e281]
- - cell "UTXO apps whose compiler model is not Cell-specific" [ref=e282]
- - region "Tooling Surface" [ref=e283]:
- - heading "Tooling Surface" [level=2] [ref=e284]
- - generic [ref=e285]:
- - tablist "CellScript tooling commands" [ref=e286]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e287] [cursor=pointer]:
- - code [ref=e288]: cellc metadata
- - generic [ref=e289]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e290] [cursor=pointer]:
- - code [ref=e291]: cellc constraints
- - generic [ref=e292]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e293] [cursor=pointer]:
- - code [ref=e294]: cellc audit-bundle
- - generic [ref=e295]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e296] [cursor=pointer]:
- - code [ref=e297]: cellc lsp
- - generic [ref=e298]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e300]:
- - generic [ref=e301]:
- - generic [ref=e302]: When
- - paragraph [ref=e303]: Use before review or integration.
- - generic [ref=e304]: Output
- - paragraph [ref=e305]: Schema, effects, source hashes, target profile.
- - generic [ref=e306]:
- - generic [ref=e307]: Run
- - generic [ref=e308]: "# Emit review metadata for a real example."
- - code [ref=e309]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - region "Examples" [ref=e310]:
- - heading "Examples" [level=2] [ref=e311]
- - generic [ref=e312]:
- - link "token.cell Mint, transfer, burn, and typed metadata. resource consume/create burn" [ref=e313] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - heading "token.cell" [level=3] [ref=e314]:
- - code [ref=e315]: token.cell
- - paragraph [ref=e316]: Mint, transfer, burn, and typed metadata.
- - generic [ref=e317]:
- - generic [ref=e318]: resource
- - generic [ref=e319]: consume/create
- - generic [ref=e320]: burn
- - link "nft.cell Ownership transfer with preserve and relock. resource preserve relock" [ref=e321] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - heading "nft.cell" [level=3] [ref=e322]:
- - code [ref=e323]: nft.cell
- - paragraph [ref=e324]: Ownership transfer with preserve and relock.
- - generic [ref=e325]:
- - generic [ref=e326]: resource
- - generic [ref=e327]: preserve
- - generic [ref=e328]: relock
- - link "amm_pool.cell Shared reserves with slippage checks. shared replace slippage" [ref=e329] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - heading "amm_pool.cell" [level=3] [ref=e330]:
- - code [ref=e331]: amm_pool.cell
- - paragraph [ref=e332]: Shared reserves with slippage checks.
- - generic [ref=e333]:
- - generic [ref=e334]: shared
- - generic [ref=e335]: replace
- - generic [ref=e336]: slippage
- - link "vesting.cell Grant state flow into claimed output. flow transition receipt" [ref=e337] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - heading "vesting.cell" [level=3] [ref=e338]:
- - code [ref=e339]: vesting.cell
- - paragraph [ref=e340]: Grant state flow into claimed output.
- - generic [ref=e341]:
- - generic [ref=e342]: flow
- - generic [ref=e343]: transition
- - generic [ref=e344]: receipt
- - link "multisig.cell Witness checks for threshold-style locks. lock witness threshold" [ref=e345] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/multisig.cell
- - heading "multisig.cell" [level=3] [ref=e346]:
- - code [ref=e347]: multisig.cell
- - paragraph [ref=e348]: Witness checks for threshold-style locks.
- - generic [ref=e349]:
- - generic [ref=e350]: lock
- - generic [ref=e351]: witness
- - generic [ref=e352]: threshold
- - link "timelock.cell Time-bound spending from Cell state. lock env timepoint" [ref=e353] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/timelock.cell
- - heading "timelock.cell" [level=3] [ref=e354]:
- - code [ref=e355]: timelock.cell
- - paragraph [ref=e356]: Time-bound spending from Cell state.
- - generic [ref=e357]:
- - generic [ref=e358]: lock
- - generic [ref=e359]: env
- - generic [ref=e360]: timepoint
- - contentinfo [ref=e361]:
- - generic [ref=e362]:
- - generic [ref=e363]:
- - link "CellScript" [ref=e364] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e366]: CellScript
- - paragraph [ref=e367]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e368]:
- - link "Docs" [ref=e369] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e370] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e371] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e372] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T05-38-32-816Z.yml b/.playwright-mcp/page-2026-06-02T05-38-32-816Z.yml
deleted file mode 100644
index 52c14c48..00000000
--- a/.playwright-mcp/page-2026-06-02T05-38-32-816Z.yml
+++ /dev/null
@@ -1,339 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Source" [ref=e8] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e9] [cursor=pointer]
- - main [ref=e12]:
- - region "CellScript" [ref=e13]:
- - generic [ref=e14]:
- - heading "CellScript" [level=1] [ref=e15]
- - paragraph [ref=e16]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e17]:
- - link "Get started" [ref=e18] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Model fit" [ref=e19] [cursor=pointer]:
- - /url: "#identity"
- - generic "CellScript contract surface" [ref=e20]:
- - generic [ref=e21]:
- - term [ref=e22]: target
- - definition [ref=e23]: ckb-vm RISC-V
- - generic [ref=e24]:
- - term [ref=e25]: model
- - definition [ref=e26]: schema-backed Cells
- - generic [ref=e27]:
- - term [ref=e28]: output
- - definition [ref=e29]: metadata + ProofPlan
- - generic [ref=e30]:
- - generic [ref=e32]: token.cell
- - combobox "Choose CellScript example" [ref=e34]:
- - option "Fungible Token" [selected]
- - option "NFT"
- - option "AMM Pool"
- - option "Vesting"
- - tabpanel "Fungible Token" [ref=e36]:
- - generic [ref=e37]:
- - generic [ref=e38]: "1"
- - generic [ref=e39]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e40]:
- - generic [ref=e41]: "2"
- - generic [ref=e42]: "amount: u64,"
- - generic [ref=e43]:
- - generic [ref=e44]: "3"
- - generic [ref=e45]: "symbol: [u8; 8],"
- - generic [ref=e46]:
- - generic [ref=e47]: "4"
- - generic [ref=e48]: "}"
- - generic [ref=e50]: "5"
- - generic [ref=e51]:
- - generic [ref=e52]: "6"
- - generic [ref=e53]: "action transfer_token(token: Token, to: Address)"
- - generic [ref=e54]:
- - generic [ref=e55]: "7"
- - generic [ref=e56]: "-> next_token: Token"
- - generic [ref=e57]:
- - generic [ref=e58]: "8"
- - generic [ref=e59]: where
- - generic [ref=e60]:
- - generic [ref=e61]: "9"
- - generic [ref=e62]: consume token
- - generic [ref=e63]:
- - generic [ref=e64]: "10"
- - generic [ref=e65]: "create next_token = Token {"
- - generic [ref=e66]:
- - generic [ref=e67]: "11"
- - generic [ref=e68]: "amount: token.amount,"
- - generic [ref=e69]:
- - generic [ref=e70]: "12"
- - generic [ref=e71]: "symbol: token.symbol"
- - generic [ref=e72]:
- - generic [ref=e73]: "13"
- - generic [ref=e74]: "} with_lock(to)"
- - generic [ref=e76]: "14"
- - generic [ref=e77]:
- - generic [ref=e78]: "15"
- - generic [ref=e79]: "action burn(token: Token)"
- - generic [ref=e80]:
- - generic [ref=e81]: $
- - generic [ref=e82]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e83]:
- - heading "Getting Started" [level=2] [ref=e84]
- - generic [ref=e85]:
- - article [ref=e86]:
- - generic [ref=e87]: "1"
- - heading "Install" [level=3] [ref=e88]
- - paragraph [ref=e89]:
- - code [ref=e90]: cargo install --path .
- - article [ref=e91]:
- - generic [ref=e92]: "2"
- - heading "Compile" [level=3] [ref=e93]
- - paragraph [ref=e94]:
- - code [ref=e95]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e96]:
- - generic [ref=e97]: "3"
- - heading "Check" [level=3] [ref=e98]
- - paragraph [ref=e99]:
- - code [ref=e100]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e101]:
- - heading "Compiler Workflow" [level=2] [ref=e102]
- - generic [ref=e103]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e104]:
- - article [ref=e105]:
- - img [ref=e107]:
- - generic [ref=e110]: .cell
- - heading "CellScript source" [level=3] [ref=e111]
- - img [ref=e113]
- - article [ref=e115]:
- - img [ref=e117]
- - heading "Parse & check" [level=3] [ref=e121]
- - paragraph [ref=e122]: Syntax, types, effects
- - img [ref=e124]
- - article [ref=e126]:
- - img [ref=e128]
- - heading "IR + Metadata" [level=3] [ref=e134]
- - paragraph [ref=e135]: Typed model & assurance info
- - img [ref=e137]
- - article [ref=e139]:
- - img [ref=e141]
- - heading "Lower to RISC-V" [level=3] [ref=e145]
- - paragraph [ref=e146]: ckb-vm codegen & optimisations
- - img [ref=e148]
- - article [ref=e150]:
- - img [ref=e152]:
- - generic [ref=e155]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e156]
- - paragraph [ref=e157]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e158]:
- - heading "Build for CKB" [level=3] [ref=e159]
- - list [ref=e160]:
- - listitem [ref=e161]:
- - img [ref=e162]
- - generic [ref=e164]: ckb-vm compatible
- - listitem [ref=e165]:
- - img [ref=e166]
- - generic [ref=e168]: Deterministic execution
- - listitem [ref=e169]:
- - img [ref=e170]
- - generic [ref=e172]: Minimal syscalls
- - listitem [ref=e173]:
- - img [ref=e174]
- - generic [ref=e176]: Scheduler-aware
- - region "Core Model" [ref=e177]:
- - heading "Core Model" [level=2] [ref=e178]
- - paragraph [ref=e179]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e180]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e181]:
- - tablist "CellScript core primitives" [ref=e182]:
- - tab "resource" [selected] [ref=e183] [cursor=pointer]:
- - generic [ref=e184]: resource
- - tab "shared" [ref=e185] [cursor=pointer]:
- - generic [ref=e186]: shared
- - tab "receipt" [ref=e187] [cursor=pointer]:
- - generic [ref=e188]: receipt
- - tab "action" [ref=e189] [cursor=pointer]:
- - generic [ref=e190]: action
- - tab "lock" [ref=e191] [cursor=pointer]:
- - generic [ref=e192]: lock
- - tab "flow" [ref=e193] [cursor=pointer]:
- - generic [ref=e194]: flow
- - tab "invariant" [ref=e195] [cursor=pointer]:
- - generic [ref=e196]: invariant
- - tab "struct / enum" [ref=e197] [cursor=pointer]:
- - generic [ref=e198]: struct / enum
- - tab "identity" [ref=e199] [cursor=pointer]:
- - generic [ref=e200]: identity
- - tabpanel "resource" [ref=e202]:
- - paragraph [ref=e204]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e205]:
- - generic [ref=e206]:
- - generic [ref=e207]: Example excerpt
- - generic [ref=e208]: examples/token.cell
- - generic [ref=e209]: "resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e210]:
- - generic [ref=e211]:
- - heading "Assurance Output" [level=2] [ref=e212]
- - paragraph [ref=e213]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e215]:
- - generic "Assurance output summary" [ref=e216]:
- - article [ref=e217]:
- - text: Schema
- - strong [ref=e218]: v42
- - paragraph [ref=e219]: current compiler metadata schema
- - article [ref=e220]:
- - text: Source
- - strong [ref=e221]: vesting.cell
- - paragraph [ref=e222]: shared + receipt + flow
- - article [ref=e223]:
- - text: Boundary
- - strong [ref=e224]: local sidecar
- - paragraph [ref=e225]: validated; provenance required when shared
- - group [ref=e226]:
- - generic "- Metadata excerpt" [ref=e227] [cursor=pointer]
- - generic [ref=e228]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e229]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Model Fit" [ref=e230]:
- - generic [ref=e231]:
- - heading "Model Fit" [level=2] [ref=e232]
- - paragraph [ref=e233]: "This is a positioning map, not a league table. CellScript is narrow on purpose: it speaks CKB Cells directly and leaves account-storage assumptions at the door."
- - table [ref=e235]:
- - rowgroup [ref=e236]:
- - row "Axis CellScript Account contracts Move-family languages UTXO contract languages" [ref=e237]:
- - columnheader "Axis" [ref=e238]
- - columnheader "CellScript" [ref=e239]
- - columnheader "Account contracts" [ref=e240]
- - columnheader "Move-family languages" [ref=e241]
- - columnheader "UTXO contract languages" [ref=e242]
- - rowgroup [ref=e243]:
- - row "Where state lives Named Cells with schema-backed data and explicit locks Contract-owned account storage VM-managed objects or resource values UTXO state plus contract logic" [ref=e244]:
- - cell "Where state lives" [ref=e245]
- - cell "Named Cells with schema-backed data and explicit locks" [ref=e246]
- - cell "Contract-owned account storage" [ref=e247]
- - cell "VM-managed objects or resource values" [ref=e248]
- - cell "UTXO state plus contract logic" [ref=e249]
- - row "What is checked Linear lifecycle, declared effects, typed field access, and transition shape ABI conventions, storage layout, external linters VM-enforced abilities and module rules Spend predicates and transaction validity" [ref=e250]:
- - cell "What is checked" [ref=e251]
- - cell "Linear lifecycle, declared effects, typed field access, and transition shape" [ref=e252]
- - cell "ABI conventions, storage layout, external linters" [ref=e253]
- - cell "VM-enforced abilities and module rules" [ref=e254]
- - cell "Spend predicates and transaction validity" [ref=e255]
- - row "What reviewers see metadata, constraints, ProofPlan, source hashes, access summary ABI, events, storage diff, runtime traces module bytecode plus VM safety properties Contract ABI plus transaction semantics" [ref=e256]:
- - cell "What reviewers see" [ref=e257]
- - cell "metadata, constraints, ProofPlan, source hashes, access summary" [ref=e258]
- - cell "ABI, events, storage diff, runtime traces" [ref=e259]
- - cell "module bytecode plus VM safety properties" [ref=e260]
- - cell "Contract ABI plus transaction semantics" [ref=e261]
- - row "What it refuses general-purpose runtime, new VM, or account-storage shim Cell-native state by default ckb-vm RISC-V target by default CellScript semantic metadata by default" [ref=e262]:
- - cell "What it refuses" [ref=e263]
- - cell "general-purpose runtime, new VM, or account-storage shim" [ref=e264]
- - cell "Cell-native state by default" [ref=e265]
- - cell "ckb-vm RISC-V target by default" [ref=e266]
- - cell "CellScript semantic metadata by default" [ref=e267]
- - row "Best fit CKB Cell transitions that need explicit effects and audit evidence Applications built around mutable account state Resource-centric ecosystems already running a Move VM UTXO apps whose compiler model is not Cell-specific" [ref=e268]:
- - cell "Best fit" [ref=e269]
- - cell "CKB Cell transitions that need explicit effects and audit evidence" [ref=e270]
- - cell "Applications built around mutable account state" [ref=e271]
- - cell "Resource-centric ecosystems already running a Move VM" [ref=e272]
- - cell "UTXO apps whose compiler model is not Cell-specific" [ref=e273]
- - region "Tooling Surface" [ref=e274]:
- - heading "Tooling Surface" [level=2] [ref=e275]
- - generic [ref=e276]:
- - tablist "CellScript tooling commands" [ref=e277]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e278] [cursor=pointer]:
- - code [ref=e279]: cellc metadata
- - generic [ref=e280]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e281] [cursor=pointer]:
- - code [ref=e282]: cellc constraints
- - generic [ref=e283]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e284] [cursor=pointer]:
- - code [ref=e285]: cellc audit-bundle
- - generic [ref=e286]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e287] [cursor=pointer]:
- - code [ref=e288]: cellc lsp
- - generic [ref=e289]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e291]:
- - generic [ref=e292]:
- - generic [ref=e293]: When
- - paragraph [ref=e294]: Use before review or integration.
- - generic [ref=e295]: Output
- - paragraph [ref=e296]: Schema, effects, source hashes, target profile.
- - generic [ref=e297]:
- - generic [ref=e298]: Run
- - generic [ref=e299]: "# Emit review metadata for a real example."
- - code [ref=e300]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - region "Examples" [ref=e301]:
- - heading "Examples" [level=2] [ref=e302]
- - generic [ref=e303]:
- - link "token.cell Mint, transfer, burn, and typed metadata. resource consume/create burn" [ref=e304] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - heading "token.cell" [level=3] [ref=e305]:
- - code [ref=e306]: token.cell
- - paragraph [ref=e307]: Mint, transfer, burn, and typed metadata.
- - generic [ref=e308]:
- - generic [ref=e309]: resource
- - generic [ref=e310]: consume/create
- - generic [ref=e311]: burn
- - link "nft.cell Ownership transfer with preserve and relock. resource preserve relock" [ref=e312] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - heading "nft.cell" [level=3] [ref=e313]:
- - code [ref=e314]: nft.cell
- - paragraph [ref=e315]: Ownership transfer with preserve and relock.
- - generic [ref=e316]:
- - generic [ref=e317]: resource
- - generic [ref=e318]: preserve
- - generic [ref=e319]: relock
- - link "amm_pool.cell Shared reserves with slippage checks. shared replace slippage" [ref=e320] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - heading "amm_pool.cell" [level=3] [ref=e321]:
- - code [ref=e322]: amm_pool.cell
- - paragraph [ref=e323]: Shared reserves with slippage checks.
- - generic [ref=e324]:
- - generic [ref=e325]: shared
- - generic [ref=e326]: replace
- - generic [ref=e327]: slippage
- - link "vesting.cell Grant state flow into claimed output. flow transition receipt" [ref=e328] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - heading "vesting.cell" [level=3] [ref=e329]:
- - code [ref=e330]: vesting.cell
- - paragraph [ref=e331]: Grant state flow into claimed output.
- - generic [ref=e332]:
- - generic [ref=e333]: flow
- - generic [ref=e334]: transition
- - generic [ref=e335]: receipt
- - link "multisig.cell Witness checks for threshold-style locks. lock witness threshold" [ref=e336] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/multisig.cell
- - heading "multisig.cell" [level=3] [ref=e337]:
- - code [ref=e338]: multisig.cell
- - paragraph [ref=e339]: Witness checks for threshold-style locks.
- - generic [ref=e340]:
- - generic [ref=e341]: lock
- - generic [ref=e342]: witness
- - generic [ref=e343]: threshold
- - link "timelock.cell Time-bound spending from Cell state. lock env timepoint" [ref=e344] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/timelock.cell
- - heading "timelock.cell" [level=3] [ref=e345]:
- - code [ref=e346]: timelock.cell
- - paragraph [ref=e347]: Time-bound spending from Cell state.
- - generic [ref=e348]:
- - generic [ref=e349]: lock
- - generic [ref=e350]: env
- - generic [ref=e351]: timepoint
- - contentinfo [ref=e352]:
- - generic [ref=e353]:
- - generic [ref=e354]:
- - link "CellScript" [ref=e355] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e357]: CellScript
- - paragraph [ref=e358]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e359]:
- - link "Docs" [ref=e360] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e361] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e362] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e363] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T05-41-08-297Z.yml b/.playwright-mcp/page-2026-06-02T05-41-08-297Z.yml
deleted file mode 100644
index d662ab1a..00000000
--- a/.playwright-mcp/page-2026-06-02T05-41-08-297Z.yml
+++ /dev/null
@@ -1,348 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Model" [ref=e8] [cursor=pointer]:
- - /url: "#core-model"
- - link "Assurance" [ref=e9] [cursor=pointer]:
- - /url: "#assurance"
- - link "Commands" [ref=e10] [cursor=pointer]:
- - /url: "#tooling"
- - link "Examples" [ref=e11] [cursor=pointer]:
- - /url: "#examples"
- - link "Source" [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e13] [cursor=pointer]:
- - generic [ref=e16]: Dark
- - main [ref=e17]:
- - region "CellScript" [ref=e18]:
- - generic [ref=e19]:
- - heading "CellScript" [level=1] [ref=e20]
- - paragraph [ref=e21]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e22]:
- - link "Get started" [ref=e23] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Model fit" [ref=e24] [cursor=pointer]:
- - /url: "#identity"
- - generic "CellScript contract surface" [ref=e25]:
- - generic [ref=e26]:
- - term [ref=e27]: target
- - definition [ref=e28]: ckb-vm RISC-V
- - generic [ref=e29]:
- - term [ref=e30]: model
- - definition [ref=e31]: schema-backed Cells
- - generic [ref=e32]:
- - term [ref=e33]: output
- - definition [ref=e34]: metadata + ProofPlan
- - generic [ref=e35]:
- - generic [ref=e37]: token.cell
- - tablist "CellScript examples" [ref=e39]:
- - tab "Fungible Token" [selected] [ref=e40] [cursor=pointer]
- - tab "NFT" [ref=e41] [cursor=pointer]
- - tab "AMM Pool" [ref=e42] [cursor=pointer]
- - tab "Vesting" [ref=e43] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e45]:
- - generic [ref=e46]:
- - generic [ref=e47]: "1"
- - generic [ref=e48]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e49]:
- - generic [ref=e50]: "2"
- - generic [ref=e51]: "amount: u64,"
- - generic [ref=e52]:
- - generic [ref=e53]: "3"
- - generic [ref=e54]: "symbol: [u8; 8],"
- - generic [ref=e55]:
- - generic [ref=e56]: "4"
- - generic [ref=e57]: "}"
- - generic [ref=e59]: "5"
- - generic [ref=e60]:
- - generic [ref=e61]: "6"
- - generic [ref=e62]: "action transfer_token(token: Token, to: Address)"
- - generic [ref=e63]:
- - generic [ref=e64]: "7"
- - generic [ref=e65]: "-> next_token: Token"
- - generic [ref=e66]:
- - generic [ref=e67]: "8"
- - generic [ref=e68]: where
- - generic [ref=e69]:
- - generic [ref=e70]: "9"
- - generic [ref=e71]: consume token
- - generic [ref=e72]:
- - generic [ref=e73]: "10"
- - generic [ref=e74]: "create next_token = Token {"
- - generic [ref=e75]:
- - generic [ref=e76]: "11"
- - generic [ref=e77]: "amount: token.amount,"
- - generic [ref=e78]:
- - generic [ref=e79]: "12"
- - generic [ref=e80]: "symbol: token.symbol"
- - generic [ref=e81]:
- - generic [ref=e82]: "13"
- - generic [ref=e83]: "} with_lock(to)"
- - generic [ref=e85]: "14"
- - generic [ref=e86]:
- - generic [ref=e87]: "15"
- - generic [ref=e88]: "action burn(token: Token)"
- - generic [ref=e89]:
- - generic [ref=e90]: $
- - generic [ref=e91]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e92]:
- - heading "Getting Started" [level=2] [ref=e93]
- - generic [ref=e94]:
- - article [ref=e95]:
- - generic [ref=e96]: "1"
- - heading "Install" [level=3] [ref=e97]
- - paragraph [ref=e98]:
- - code [ref=e99]: cargo install --path .
- - article [ref=e100]:
- - generic [ref=e101]: "2"
- - heading "Compile" [level=3] [ref=e102]
- - paragraph [ref=e103]:
- - code [ref=e104]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e105]:
- - generic [ref=e106]: "3"
- - heading "Check" [level=3] [ref=e107]
- - paragraph [ref=e108]:
- - code [ref=e109]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e110]:
- - heading "Compiler Workflow" [level=2] [ref=e111]
- - generic [ref=e112]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e113]:
- - article [ref=e114]:
- - img [ref=e116]:
- - generic [ref=e119]: .cell
- - heading "CellScript source" [level=3] [ref=e120]
- - img [ref=e122]
- - article [ref=e124]:
- - img [ref=e126]
- - heading "Parse & check" [level=3] [ref=e130]
- - paragraph [ref=e131]: Syntax, types, effects
- - img [ref=e133]
- - article [ref=e135]:
- - img [ref=e137]
- - heading "IR + Metadata" [level=3] [ref=e143]
- - paragraph [ref=e144]: Typed model & assurance info
- - img [ref=e146]
- - article [ref=e148]:
- - img [ref=e150]
- - heading "Lower to RISC-V" [level=3] [ref=e154]
- - paragraph [ref=e155]: ckb-vm codegen & optimisations
- - img [ref=e157]
- - article [ref=e159]:
- - img [ref=e161]:
- - generic [ref=e164]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e165]
- - paragraph [ref=e166]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e167]:
- - heading "Build for CKB" [level=3] [ref=e168]
- - list [ref=e169]:
- - listitem [ref=e170]:
- - img [ref=e171]
- - generic [ref=e173]: ckb-vm compatible
- - listitem [ref=e174]:
- - img [ref=e175]
- - generic [ref=e177]: Deterministic execution
- - listitem [ref=e178]:
- - img [ref=e179]
- - generic [ref=e181]: Minimal syscalls
- - listitem [ref=e182]:
- - img [ref=e183]
- - generic [ref=e185]: Scheduler-aware
- - region "Core Model" [ref=e186]:
- - heading "Core Model" [level=2] [ref=e187]
- - paragraph [ref=e188]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e189]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e190]:
- - tablist "CellScript core primitives" [ref=e191]:
- - tab "resource" [selected] [ref=e192] [cursor=pointer]:
- - generic [ref=e193]: resource
- - tab "shared" [ref=e194] [cursor=pointer]:
- - generic [ref=e195]: shared
- - tab "receipt" [ref=e196] [cursor=pointer]:
- - generic [ref=e197]: receipt
- - tab "action" [ref=e198] [cursor=pointer]:
- - generic [ref=e199]: action
- - tab "lock" [ref=e200] [cursor=pointer]:
- - generic [ref=e201]: lock
- - tab "flow" [ref=e202] [cursor=pointer]:
- - generic [ref=e203]: flow
- - tab "invariant" [ref=e204] [cursor=pointer]:
- - generic [ref=e205]: invariant
- - tab "struct / enum" [ref=e206] [cursor=pointer]:
- - generic [ref=e207]: struct / enum
- - tab "identity" [ref=e208] [cursor=pointer]:
- - generic [ref=e209]: identity
- - tabpanel "resource" [ref=e211]:
- - paragraph [ref=e213]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e214]:
- - generic [ref=e215]:
- - generic [ref=e216]: Example excerpt
- - generic [ref=e217]: examples/token.cell
- - generic [ref=e218]: "resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e219]:
- - generic [ref=e220]:
- - heading "Assurance Output" [level=2] [ref=e221]
- - paragraph [ref=e222]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e224]:
- - generic "Assurance output summary" [ref=e225]:
- - article [ref=e226]:
- - text: Schema
- - strong [ref=e227]: v42
- - paragraph [ref=e228]: current compiler metadata schema
- - article [ref=e229]:
- - text: Source
- - strong [ref=e230]: vesting.cell
- - paragraph [ref=e231]: shared + receipt + flow
- - article [ref=e232]:
- - text: Boundary
- - strong [ref=e233]: local sidecar
- - paragraph [ref=e234]: validated; provenance required when shared
- - group [ref=e235]:
- - generic "- Metadata excerpt" [ref=e236] [cursor=pointer]
- - generic [ref=e237]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e238]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Model Fit" [ref=e239]:
- - generic [ref=e240]:
- - heading "Model Fit" [level=2] [ref=e241]
- - paragraph [ref=e242]: "This is a positioning map, not a league table. CellScript is narrow on purpose: it speaks CKB Cells directly and leaves account-storage assumptions at the door."
- - table [ref=e244]:
- - rowgroup [ref=e245]:
- - row "Axis CellScript Account contracts Move-family languages UTXO contract languages" [ref=e246]:
- - columnheader "Axis" [ref=e247]
- - columnheader "CellScript" [ref=e248]
- - columnheader "Account contracts" [ref=e249]
- - columnheader "Move-family languages" [ref=e250]
- - columnheader "UTXO contract languages" [ref=e251]
- - rowgroup [ref=e252]:
- - row "Where state lives Named Cells with schema-backed data and explicit locks Contract-owned account storage VM-managed objects or resource values UTXO state plus contract logic" [ref=e253]:
- - cell "Where state lives" [ref=e254]
- - cell "Named Cells with schema-backed data and explicit locks" [ref=e255]
- - cell "Contract-owned account storage" [ref=e256]
- - cell "VM-managed objects or resource values" [ref=e257]
- - cell "UTXO state plus contract logic" [ref=e258]
- - row "What is checked Linear lifecycle, declared effects, typed field access, and transition shape ABI conventions, storage layout, external linters VM-enforced abilities and module rules Spend predicates and transaction validity" [ref=e259]:
- - cell "What is checked" [ref=e260]
- - cell "Linear lifecycle, declared effects, typed field access, and transition shape" [ref=e261]
- - cell "ABI conventions, storage layout, external linters" [ref=e262]
- - cell "VM-enforced abilities and module rules" [ref=e263]
- - cell "Spend predicates and transaction validity" [ref=e264]
- - row "What reviewers see metadata, constraints, ProofPlan, source hashes, access summary ABI, events, storage diff, runtime traces module bytecode plus VM safety properties Contract ABI plus transaction semantics" [ref=e265]:
- - cell "What reviewers see" [ref=e266]
- - cell "metadata, constraints, ProofPlan, source hashes, access summary" [ref=e267]
- - cell "ABI, events, storage diff, runtime traces" [ref=e268]
- - cell "module bytecode plus VM safety properties" [ref=e269]
- - cell "Contract ABI plus transaction semantics" [ref=e270]
- - row "What it refuses general-purpose runtime, new VM, or account-storage shim Cell-native state by default ckb-vm RISC-V target by default CellScript semantic metadata by default" [ref=e271]:
- - cell "What it refuses" [ref=e272]
- - cell "general-purpose runtime, new VM, or account-storage shim" [ref=e273]
- - cell "Cell-native state by default" [ref=e274]
- - cell "ckb-vm RISC-V target by default" [ref=e275]
- - cell "CellScript semantic metadata by default" [ref=e276]
- - row "Best fit CKB Cell transitions that need explicit effects and audit evidence Applications built around mutable account state Resource-centric ecosystems already running a Move VM UTXO apps whose compiler model is not Cell-specific" [ref=e277]:
- - cell "Best fit" [ref=e278]
- - cell "CKB Cell transitions that need explicit effects and audit evidence" [ref=e279]
- - cell "Applications built around mutable account state" [ref=e280]
- - cell "Resource-centric ecosystems already running a Move VM" [ref=e281]
- - cell "UTXO apps whose compiler model is not Cell-specific" [ref=e282]
- - region "Tooling Surface" [ref=e283]:
- - heading "Tooling Surface" [level=2] [ref=e284]
- - generic [ref=e285]:
- - tablist "CellScript tooling commands" [ref=e286]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e287] [cursor=pointer]:
- - code [ref=e288]: cellc metadata
- - generic [ref=e289]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e290] [cursor=pointer]:
- - code [ref=e291]: cellc constraints
- - generic [ref=e292]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e293] [cursor=pointer]:
- - code [ref=e294]: cellc audit-bundle
- - generic [ref=e295]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e296] [cursor=pointer]:
- - code [ref=e297]: cellc lsp
- - generic [ref=e298]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e300]:
- - generic [ref=e301]:
- - generic [ref=e302]: When
- - paragraph [ref=e303]: Use before review or integration.
- - generic [ref=e304]: Output
- - paragraph [ref=e305]: Schema, effects, source hashes, target profile.
- - generic [ref=e306]:
- - generic [ref=e307]: Run
- - generic [ref=e308]: "# Emit review metadata for a real example."
- - code [ref=e309]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - region "Examples" [ref=e310]:
- - heading "Examples" [level=2] [ref=e311]
- - generic [ref=e312]:
- - link "token.cell Mint, transfer, burn, and typed metadata. resource consume/create burn" [ref=e313] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - heading "token.cell" [level=3] [ref=e314]:
- - code [ref=e315]: token.cell
- - paragraph [ref=e316]: Mint, transfer, burn, and typed metadata.
- - generic [ref=e317]:
- - generic [ref=e318]: resource
- - generic [ref=e319]: consume/create
- - generic [ref=e320]: burn
- - link "nft.cell Ownership transfer with preserve and relock. resource preserve relock" [ref=e321] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - heading "nft.cell" [level=3] [ref=e322]:
- - code [ref=e323]: nft.cell
- - paragraph [ref=e324]: Ownership transfer with preserve and relock.
- - generic [ref=e325]:
- - generic [ref=e326]: resource
- - generic [ref=e327]: preserve
- - generic [ref=e328]: relock
- - link "amm_pool.cell Shared reserves with slippage checks. shared replace slippage" [ref=e329] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - heading "amm_pool.cell" [level=3] [ref=e330]:
- - code [ref=e331]: amm_pool.cell
- - paragraph [ref=e332]: Shared reserves with slippage checks.
- - generic [ref=e333]:
- - generic [ref=e334]: shared
- - generic [ref=e335]: replace
- - generic [ref=e336]: slippage
- - link "vesting.cell Grant state flow into claimed output. flow transition receipt" [ref=e337] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - heading "vesting.cell" [level=3] [ref=e338]:
- - code [ref=e339]: vesting.cell
- - paragraph [ref=e340]: Grant state flow into claimed output.
- - generic [ref=e341]:
- - generic [ref=e342]: flow
- - generic [ref=e343]: transition
- - generic [ref=e344]: receipt
- - link "multisig.cell Witness checks for threshold-style locks. lock witness threshold" [ref=e345] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/multisig.cell
- - heading "multisig.cell" [level=3] [ref=e346]:
- - code [ref=e347]: multisig.cell
- - paragraph [ref=e348]: Witness checks for threshold-style locks.
- - generic [ref=e349]:
- - generic [ref=e350]: lock
- - generic [ref=e351]: witness
- - generic [ref=e352]: threshold
- - link "timelock.cell Time-bound spending from Cell state. lock env timepoint" [ref=e353] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/timelock.cell
- - heading "timelock.cell" [level=3] [ref=e354]:
- - code [ref=e355]: timelock.cell
- - paragraph [ref=e356]: Time-bound spending from Cell state.
- - generic [ref=e357]:
- - generic [ref=e358]: lock
- - generic [ref=e359]: env
- - generic [ref=e360]: timepoint
- - contentinfo [ref=e361]:
- - generic [ref=e362]:
- - generic [ref=e363]:
- - link "CellScript" [ref=e364] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e366]: CellScript
- - paragraph [ref=e367]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e368]:
- - link "Docs" [ref=e369] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e370] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e371] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e372] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T05-43-09-119Z.yml b/.playwright-mcp/page-2026-06-02T05-43-09-119Z.yml
deleted file mode 100644
index d662ab1a..00000000
--- a/.playwright-mcp/page-2026-06-02T05-43-09-119Z.yml
+++ /dev/null
@@ -1,348 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Model" [ref=e8] [cursor=pointer]:
- - /url: "#core-model"
- - link "Assurance" [ref=e9] [cursor=pointer]:
- - /url: "#assurance"
- - link "Commands" [ref=e10] [cursor=pointer]:
- - /url: "#tooling"
- - link "Examples" [ref=e11] [cursor=pointer]:
- - /url: "#examples"
- - link "Source" [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e13] [cursor=pointer]:
- - generic [ref=e16]: Dark
- - main [ref=e17]:
- - region "CellScript" [ref=e18]:
- - generic [ref=e19]:
- - heading "CellScript" [level=1] [ref=e20]
- - paragraph [ref=e21]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e22]:
- - link "Get started" [ref=e23] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Model fit" [ref=e24] [cursor=pointer]:
- - /url: "#identity"
- - generic "CellScript contract surface" [ref=e25]:
- - generic [ref=e26]:
- - term [ref=e27]: target
- - definition [ref=e28]: ckb-vm RISC-V
- - generic [ref=e29]:
- - term [ref=e30]: model
- - definition [ref=e31]: schema-backed Cells
- - generic [ref=e32]:
- - term [ref=e33]: output
- - definition [ref=e34]: metadata + ProofPlan
- - generic [ref=e35]:
- - generic [ref=e37]: token.cell
- - tablist "CellScript examples" [ref=e39]:
- - tab "Fungible Token" [selected] [ref=e40] [cursor=pointer]
- - tab "NFT" [ref=e41] [cursor=pointer]
- - tab "AMM Pool" [ref=e42] [cursor=pointer]
- - tab "Vesting" [ref=e43] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e45]:
- - generic [ref=e46]:
- - generic [ref=e47]: "1"
- - generic [ref=e48]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e49]:
- - generic [ref=e50]: "2"
- - generic [ref=e51]: "amount: u64,"
- - generic [ref=e52]:
- - generic [ref=e53]: "3"
- - generic [ref=e54]: "symbol: [u8; 8],"
- - generic [ref=e55]:
- - generic [ref=e56]: "4"
- - generic [ref=e57]: "}"
- - generic [ref=e59]: "5"
- - generic [ref=e60]:
- - generic [ref=e61]: "6"
- - generic [ref=e62]: "action transfer_token(token: Token, to: Address)"
- - generic [ref=e63]:
- - generic [ref=e64]: "7"
- - generic [ref=e65]: "-> next_token: Token"
- - generic [ref=e66]:
- - generic [ref=e67]: "8"
- - generic [ref=e68]: where
- - generic [ref=e69]:
- - generic [ref=e70]: "9"
- - generic [ref=e71]: consume token
- - generic [ref=e72]:
- - generic [ref=e73]: "10"
- - generic [ref=e74]: "create next_token = Token {"
- - generic [ref=e75]:
- - generic [ref=e76]: "11"
- - generic [ref=e77]: "amount: token.amount,"
- - generic [ref=e78]:
- - generic [ref=e79]: "12"
- - generic [ref=e80]: "symbol: token.symbol"
- - generic [ref=e81]:
- - generic [ref=e82]: "13"
- - generic [ref=e83]: "} with_lock(to)"
- - generic [ref=e85]: "14"
- - generic [ref=e86]:
- - generic [ref=e87]: "15"
- - generic [ref=e88]: "action burn(token: Token)"
- - generic [ref=e89]:
- - generic [ref=e90]: $
- - generic [ref=e91]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e92]:
- - heading "Getting Started" [level=2] [ref=e93]
- - generic [ref=e94]:
- - article [ref=e95]:
- - generic [ref=e96]: "1"
- - heading "Install" [level=3] [ref=e97]
- - paragraph [ref=e98]:
- - code [ref=e99]: cargo install --path .
- - article [ref=e100]:
- - generic [ref=e101]: "2"
- - heading "Compile" [level=3] [ref=e102]
- - paragraph [ref=e103]:
- - code [ref=e104]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e105]:
- - generic [ref=e106]: "3"
- - heading "Check" [level=3] [ref=e107]
- - paragraph [ref=e108]:
- - code [ref=e109]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e110]:
- - heading "Compiler Workflow" [level=2] [ref=e111]
- - generic [ref=e112]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e113]:
- - article [ref=e114]:
- - img [ref=e116]:
- - generic [ref=e119]: .cell
- - heading "CellScript source" [level=3] [ref=e120]
- - img [ref=e122]
- - article [ref=e124]:
- - img [ref=e126]
- - heading "Parse & check" [level=3] [ref=e130]
- - paragraph [ref=e131]: Syntax, types, effects
- - img [ref=e133]
- - article [ref=e135]:
- - img [ref=e137]
- - heading "IR + Metadata" [level=3] [ref=e143]
- - paragraph [ref=e144]: Typed model & assurance info
- - img [ref=e146]
- - article [ref=e148]:
- - img [ref=e150]
- - heading "Lower to RISC-V" [level=3] [ref=e154]
- - paragraph [ref=e155]: ckb-vm codegen & optimisations
- - img [ref=e157]
- - article [ref=e159]:
- - img [ref=e161]:
- - generic [ref=e164]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e165]
- - paragraph [ref=e166]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e167]:
- - heading "Build for CKB" [level=3] [ref=e168]
- - list [ref=e169]:
- - listitem [ref=e170]:
- - img [ref=e171]
- - generic [ref=e173]: ckb-vm compatible
- - listitem [ref=e174]:
- - img [ref=e175]
- - generic [ref=e177]: Deterministic execution
- - listitem [ref=e178]:
- - img [ref=e179]
- - generic [ref=e181]: Minimal syscalls
- - listitem [ref=e182]:
- - img [ref=e183]
- - generic [ref=e185]: Scheduler-aware
- - region "Core Model" [ref=e186]:
- - heading "Core Model" [level=2] [ref=e187]
- - paragraph [ref=e188]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e189]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e190]:
- - tablist "CellScript core primitives" [ref=e191]:
- - tab "resource" [selected] [ref=e192] [cursor=pointer]:
- - generic [ref=e193]: resource
- - tab "shared" [ref=e194] [cursor=pointer]:
- - generic [ref=e195]: shared
- - tab "receipt" [ref=e196] [cursor=pointer]:
- - generic [ref=e197]: receipt
- - tab "action" [ref=e198] [cursor=pointer]:
- - generic [ref=e199]: action
- - tab "lock" [ref=e200] [cursor=pointer]:
- - generic [ref=e201]: lock
- - tab "flow" [ref=e202] [cursor=pointer]:
- - generic [ref=e203]: flow
- - tab "invariant" [ref=e204] [cursor=pointer]:
- - generic [ref=e205]: invariant
- - tab "struct / enum" [ref=e206] [cursor=pointer]:
- - generic [ref=e207]: struct / enum
- - tab "identity" [ref=e208] [cursor=pointer]:
- - generic [ref=e209]: identity
- - tabpanel "resource" [ref=e211]:
- - paragraph [ref=e213]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e214]:
- - generic [ref=e215]:
- - generic [ref=e216]: Example excerpt
- - generic [ref=e217]: examples/token.cell
- - generic [ref=e218]: "resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e219]:
- - generic [ref=e220]:
- - heading "Assurance Output" [level=2] [ref=e221]
- - paragraph [ref=e222]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e224]:
- - generic "Assurance output summary" [ref=e225]:
- - article [ref=e226]:
- - text: Schema
- - strong [ref=e227]: v42
- - paragraph [ref=e228]: current compiler metadata schema
- - article [ref=e229]:
- - text: Source
- - strong [ref=e230]: vesting.cell
- - paragraph [ref=e231]: shared + receipt + flow
- - article [ref=e232]:
- - text: Boundary
- - strong [ref=e233]: local sidecar
- - paragraph [ref=e234]: validated; provenance required when shared
- - group [ref=e235]:
- - generic "- Metadata excerpt" [ref=e236] [cursor=pointer]
- - generic [ref=e237]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e238]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Model Fit" [ref=e239]:
- - generic [ref=e240]:
- - heading "Model Fit" [level=2] [ref=e241]
- - paragraph [ref=e242]: "This is a positioning map, not a league table. CellScript is narrow on purpose: it speaks CKB Cells directly and leaves account-storage assumptions at the door."
- - table [ref=e244]:
- - rowgroup [ref=e245]:
- - row "Axis CellScript Account contracts Move-family languages UTXO contract languages" [ref=e246]:
- - columnheader "Axis" [ref=e247]
- - columnheader "CellScript" [ref=e248]
- - columnheader "Account contracts" [ref=e249]
- - columnheader "Move-family languages" [ref=e250]
- - columnheader "UTXO contract languages" [ref=e251]
- - rowgroup [ref=e252]:
- - row "Where state lives Named Cells with schema-backed data and explicit locks Contract-owned account storage VM-managed objects or resource values UTXO state plus contract logic" [ref=e253]:
- - cell "Where state lives" [ref=e254]
- - cell "Named Cells with schema-backed data and explicit locks" [ref=e255]
- - cell "Contract-owned account storage" [ref=e256]
- - cell "VM-managed objects or resource values" [ref=e257]
- - cell "UTXO state plus contract logic" [ref=e258]
- - row "What is checked Linear lifecycle, declared effects, typed field access, and transition shape ABI conventions, storage layout, external linters VM-enforced abilities and module rules Spend predicates and transaction validity" [ref=e259]:
- - cell "What is checked" [ref=e260]
- - cell "Linear lifecycle, declared effects, typed field access, and transition shape" [ref=e261]
- - cell "ABI conventions, storage layout, external linters" [ref=e262]
- - cell "VM-enforced abilities and module rules" [ref=e263]
- - cell "Spend predicates and transaction validity" [ref=e264]
- - row "What reviewers see metadata, constraints, ProofPlan, source hashes, access summary ABI, events, storage diff, runtime traces module bytecode plus VM safety properties Contract ABI plus transaction semantics" [ref=e265]:
- - cell "What reviewers see" [ref=e266]
- - cell "metadata, constraints, ProofPlan, source hashes, access summary" [ref=e267]
- - cell "ABI, events, storage diff, runtime traces" [ref=e268]
- - cell "module bytecode plus VM safety properties" [ref=e269]
- - cell "Contract ABI plus transaction semantics" [ref=e270]
- - row "What it refuses general-purpose runtime, new VM, or account-storage shim Cell-native state by default ckb-vm RISC-V target by default CellScript semantic metadata by default" [ref=e271]:
- - cell "What it refuses" [ref=e272]
- - cell "general-purpose runtime, new VM, or account-storage shim" [ref=e273]
- - cell "Cell-native state by default" [ref=e274]
- - cell "ckb-vm RISC-V target by default" [ref=e275]
- - cell "CellScript semantic metadata by default" [ref=e276]
- - row "Best fit CKB Cell transitions that need explicit effects and audit evidence Applications built around mutable account state Resource-centric ecosystems already running a Move VM UTXO apps whose compiler model is not Cell-specific" [ref=e277]:
- - cell "Best fit" [ref=e278]
- - cell "CKB Cell transitions that need explicit effects and audit evidence" [ref=e279]
- - cell "Applications built around mutable account state" [ref=e280]
- - cell "Resource-centric ecosystems already running a Move VM" [ref=e281]
- - cell "UTXO apps whose compiler model is not Cell-specific" [ref=e282]
- - region "Tooling Surface" [ref=e283]:
- - heading "Tooling Surface" [level=2] [ref=e284]
- - generic [ref=e285]:
- - tablist "CellScript tooling commands" [ref=e286]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e287] [cursor=pointer]:
- - code [ref=e288]: cellc metadata
- - generic [ref=e289]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e290] [cursor=pointer]:
- - code [ref=e291]: cellc constraints
- - generic [ref=e292]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e293] [cursor=pointer]:
- - code [ref=e294]: cellc audit-bundle
- - generic [ref=e295]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e296] [cursor=pointer]:
- - code [ref=e297]: cellc lsp
- - generic [ref=e298]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e300]:
- - generic [ref=e301]:
- - generic [ref=e302]: When
- - paragraph [ref=e303]: Use before review or integration.
- - generic [ref=e304]: Output
- - paragraph [ref=e305]: Schema, effects, source hashes, target profile.
- - generic [ref=e306]:
- - generic [ref=e307]: Run
- - generic [ref=e308]: "# Emit review metadata for a real example."
- - code [ref=e309]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - region "Examples" [ref=e310]:
- - heading "Examples" [level=2] [ref=e311]
- - generic [ref=e312]:
- - link "token.cell Mint, transfer, burn, and typed metadata. resource consume/create burn" [ref=e313] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - heading "token.cell" [level=3] [ref=e314]:
- - code [ref=e315]: token.cell
- - paragraph [ref=e316]: Mint, transfer, burn, and typed metadata.
- - generic [ref=e317]:
- - generic [ref=e318]: resource
- - generic [ref=e319]: consume/create
- - generic [ref=e320]: burn
- - link "nft.cell Ownership transfer with preserve and relock. resource preserve relock" [ref=e321] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - heading "nft.cell" [level=3] [ref=e322]:
- - code [ref=e323]: nft.cell
- - paragraph [ref=e324]: Ownership transfer with preserve and relock.
- - generic [ref=e325]:
- - generic [ref=e326]: resource
- - generic [ref=e327]: preserve
- - generic [ref=e328]: relock
- - link "amm_pool.cell Shared reserves with slippage checks. shared replace slippage" [ref=e329] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - heading "amm_pool.cell" [level=3] [ref=e330]:
- - code [ref=e331]: amm_pool.cell
- - paragraph [ref=e332]: Shared reserves with slippage checks.
- - generic [ref=e333]:
- - generic [ref=e334]: shared
- - generic [ref=e335]: replace
- - generic [ref=e336]: slippage
- - link "vesting.cell Grant state flow into claimed output. flow transition receipt" [ref=e337] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - heading "vesting.cell" [level=3] [ref=e338]:
- - code [ref=e339]: vesting.cell
- - paragraph [ref=e340]: Grant state flow into claimed output.
- - generic [ref=e341]:
- - generic [ref=e342]: flow
- - generic [ref=e343]: transition
- - generic [ref=e344]: receipt
- - link "multisig.cell Witness checks for threshold-style locks. lock witness threshold" [ref=e345] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/multisig.cell
- - heading "multisig.cell" [level=3] [ref=e346]:
- - code [ref=e347]: multisig.cell
- - paragraph [ref=e348]: Witness checks for threshold-style locks.
- - generic [ref=e349]:
- - generic [ref=e350]: lock
- - generic [ref=e351]: witness
- - generic [ref=e352]: threshold
- - link "timelock.cell Time-bound spending from Cell state. lock env timepoint" [ref=e353] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/timelock.cell
- - heading "timelock.cell" [level=3] [ref=e354]:
- - code [ref=e355]: timelock.cell
- - paragraph [ref=e356]: Time-bound spending from Cell state.
- - generic [ref=e357]:
- - generic [ref=e358]: lock
- - generic [ref=e359]: env
- - generic [ref=e360]: timepoint
- - contentinfo [ref=e361]:
- - generic [ref=e362]:
- - generic [ref=e363]:
- - link "CellScript" [ref=e364] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e366]: CellScript
- - paragraph [ref=e367]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e368]:
- - link "Docs" [ref=e369] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e370] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e371] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e372] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T05-47-41-638Z.yml b/.playwright-mcp/page-2026-06-02T05-47-41-638Z.yml
deleted file mode 100644
index c63be6bb..00000000
--- a/.playwright-mcp/page-2026-06-02T05-47-41-638Z.yml
+++ /dev/null
@@ -1,307 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Model" [ref=e8] [cursor=pointer]:
- - /url: "#core-model"
- - link "Assurance" [ref=e9] [cursor=pointer]:
- - /url: "#assurance"
- - link "Commands" [ref=e10] [cursor=pointer]:
- - /url: "#tooling"
- - link "Examples" [ref=e11] [cursor=pointer]:
- - /url: "#examples"
- - link "Source" [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e13] [cursor=pointer]:
- - generic [ref=e16]: Dark
- - main [ref=e17]:
- - region "CellScript" [ref=e18]:
- - generic [ref=e19]:
- - heading "CellScript" [level=1] [ref=e20]
- - paragraph [ref=e21]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e22]:
- - link "Get started" [ref=e23] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e24] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e25]:
- - generic [ref=e26]:
- - term [ref=e27]: target
- - definition [ref=e28]: ckb-vm RISC-V
- - generic [ref=e29]:
- - term [ref=e30]: model
- - definition [ref=e31]: schema-backed Cells
- - generic [ref=e32]:
- - term [ref=e33]: output
- - definition [ref=e34]: metadata + ProofPlan
- - generic [ref=e35]:
- - generic [ref=e37]: token.cell
- - tablist "CellScript examples" [ref=e39]:
- - tab "Fungible Token" [selected] [ref=e40] [cursor=pointer]
- - tab "NFT" [ref=e41] [cursor=pointer]
- - tab "AMM Pool" [ref=e42] [cursor=pointer]
- - tab "Vesting" [ref=e43] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e45]:
- - generic [ref=e46]:
- - generic [ref=e47]: "1"
- - generic [ref=e48]: module cellscript::fungible_token
- - generic [ref=e49]:
- - generic [ref=e50]: "2"
- - generic [ref=e51]: // ... invariant and MintAuthority omitted
- - generic [ref=e52]:
- - generic [ref=e53]: "3"
- - generic [ref=e54]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e55]:
- - generic [ref=e56]: "4"
- - generic [ref=e57]: "amount: u64,"
- - generic [ref=e58]:
- - generic [ref=e59]: "5"
- - generic [ref=e60]: "symbol: [u8; 8],"
- - generic [ref=e61]:
- - generic [ref=e62]: "6"
- - generic [ref=e63]: "}"
- - generic [ref=e65]: "7"
- - generic [ref=e66]:
- - generic [ref=e67]: "8"
- - generic [ref=e68]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e69]:
- - generic [ref=e70]: "9"
- - generic [ref=e71]: where
- - generic [ref=e72]:
- - generic [ref=e73]: "10"
- - generic [ref=e74]: consume token
- - generic [ref=e75]:
- - generic [ref=e76]: "11"
- - generic [ref=e77]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e79]: "12"
- - generic [ref=e80]:
- - generic [ref=e81]: "13"
- - generic [ref=e82]: "action burn(token: Token)"
- - generic [ref=e83]:
- - generic [ref=e84]: "14"
- - generic [ref=e85]: where
- - generic [ref=e86]:
- - generic [ref=e87]: "15"
- - generic [ref=e88]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e89]:
- - generic [ref=e90]: "16"
- - generic [ref=e91]: destroy token
- - generic [ref=e92]:
- - generic [ref=e93]: $
- - generic [ref=e94]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e95]:
- - heading "Getting Started" [level=2] [ref=e96]
- - generic [ref=e97]:
- - article [ref=e98]:
- - generic [ref=e99]: "1"
- - heading "Install" [level=3] [ref=e100]
- - paragraph [ref=e101]:
- - code [ref=e102]: cargo install --path .
- - article [ref=e103]:
- - generic [ref=e104]: "2"
- - heading "Compile" [level=3] [ref=e105]
- - paragraph [ref=e106]:
- - code [ref=e107]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e108]:
- - generic [ref=e109]: "3"
- - heading "Check" [level=3] [ref=e110]
- - paragraph [ref=e111]:
- - code [ref=e112]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e113]:
- - heading "Compiler Workflow" [level=2] [ref=e114]
- - generic [ref=e115]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e116]:
- - article [ref=e117]:
- - img [ref=e119]:
- - generic [ref=e122]: .cell
- - heading "CellScript source" [level=3] [ref=e123]
- - img [ref=e125]
- - article [ref=e127]:
- - img [ref=e129]
- - heading "Parse & check" [level=3] [ref=e133]
- - paragraph [ref=e134]: Syntax, types, effects
- - img [ref=e136]
- - article [ref=e138]:
- - img [ref=e140]
- - heading "IR + Metadata" [level=3] [ref=e146]
- - paragraph [ref=e147]: Typed model & assurance info
- - img [ref=e149]
- - article [ref=e151]:
- - img [ref=e153]
- - heading "Lower to RISC-V" [level=3] [ref=e157]
- - paragraph [ref=e158]: ckb-vm codegen & optimisations
- - img [ref=e160]
- - article [ref=e162]:
- - img [ref=e164]:
- - generic [ref=e167]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e168]
- - paragraph [ref=e169]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e170]:
- - heading "Build for CKB" [level=3] [ref=e171]
- - list [ref=e172]:
- - listitem [ref=e173]:
- - img [ref=e174]
- - generic [ref=e176]: ckb-vm compatible
- - listitem [ref=e177]:
- - img [ref=e178]
- - generic [ref=e180]: Deterministic execution
- - listitem [ref=e181]:
- - img [ref=e182]
- - generic [ref=e184]: Minimal syscalls
- - listitem [ref=e185]:
- - img [ref=e186]
- - generic [ref=e188]: Scheduler-aware
- - region "Core Model" [ref=e189]:
- - heading "Core Model" [level=2] [ref=e190]
- - paragraph [ref=e191]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e192]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e193]:
- - tablist "CellScript core primitives" [ref=e194]:
- - tab "resource" [selected] [ref=e195] [cursor=pointer]:
- - generic [ref=e196]: resource
- - tab "shared" [ref=e197] [cursor=pointer]:
- - generic [ref=e198]: shared
- - tab "receipt" [ref=e199] [cursor=pointer]:
- - generic [ref=e200]: receipt
- - tab "action" [ref=e201] [cursor=pointer]:
- - generic [ref=e202]: action
- - tab "lock" [ref=e203] [cursor=pointer]:
- - generic [ref=e204]: lock
- - tab "flow" [ref=e205] [cursor=pointer]:
- - generic [ref=e206]: flow
- - tab "invariant" [ref=e207] [cursor=pointer]:
- - generic [ref=e208]: invariant
- - tab "struct / enum" [ref=e209] [cursor=pointer]:
- - generic [ref=e210]: struct / enum
- - tab "identity" [ref=e211] [cursor=pointer]:
- - generic [ref=e212]: identity
- - tabpanel "resource" [ref=e214]:
- - paragraph [ref=e216]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e217]:
- - generic [ref=e218]:
- - generic [ref=e219]: Example excerpt
- - generic [ref=e220]: examples/token.cell
- - generic [ref=e221]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e222]:
- - generic [ref=e223]:
- - heading "Assurance Output" [level=2] [ref=e224]
- - paragraph [ref=e225]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e227]:
- - generic "Assurance output summary" [ref=e228]:
- - article [ref=e229]:
- - text: Schema
- - strong [ref=e230]: v42
- - paragraph [ref=e231]: current compiler metadata schema
- - article [ref=e232]:
- - text: Source
- - strong [ref=e233]: vesting.cell
- - paragraph [ref=e234]: shared + receipt + flow
- - article [ref=e235]:
- - text: Boundary
- - strong [ref=e236]: local sidecar
- - paragraph [ref=e237]: validated; provenance required when shared
- - group [ref=e238]:
- - generic "- Metadata excerpt" [ref=e239] [cursor=pointer]
- - generic [ref=e240]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e241]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e242]:
- - heading "Tooling Surface" [level=2] [ref=e243]
- - generic [ref=e244]:
- - tablist "CellScript tooling commands" [ref=e245]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e246] [cursor=pointer]:
- - code [ref=e247]: cellc metadata
- - generic [ref=e248]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e249] [cursor=pointer]:
- - code [ref=e250]: cellc constraints
- - generic [ref=e251]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e252] [cursor=pointer]:
- - code [ref=e253]: cellc audit-bundle
- - generic [ref=e254]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e255] [cursor=pointer]:
- - code [ref=e256]: cellc lsp
- - generic [ref=e257]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e259]:
- - generic [ref=e260]:
- - generic [ref=e261]: When
- - paragraph [ref=e262]: Use before review or integration.
- - generic [ref=e263]: Output
- - paragraph [ref=e264]: Schema, effects, source hashes, target profile.
- - generic [ref=e265]:
- - code [ref=e266]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e267]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e268]:
- - heading "Examples" [level=2] [ref=e269]
- - generic [ref=e270]:
- - link "token.cell Mint, transfer, burn, and typed metadata. resource consume/create burn" [ref=e271] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - heading "token.cell" [level=3] [ref=e272]:
- - code [ref=e273]: token.cell
- - paragraph [ref=e274]: Mint, transfer, burn, and typed metadata.
- - generic [ref=e275]:
- - generic [ref=e276]: resource
- - generic [ref=e277]: consume/create
- - generic [ref=e278]: burn
- - link "nft.cell Ownership transfer with preserve and relock. resource preserve relock" [ref=e279] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - heading "nft.cell" [level=3] [ref=e280]:
- - code [ref=e281]: nft.cell
- - paragraph [ref=e282]: Ownership transfer with preserve and relock.
- - generic [ref=e283]:
- - generic [ref=e284]: resource
- - generic [ref=e285]: preserve
- - generic [ref=e286]: relock
- - link "amm_pool.cell Shared reserves with slippage checks. shared replace slippage" [ref=e287] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - heading "amm_pool.cell" [level=3] [ref=e288]:
- - code [ref=e289]: amm_pool.cell
- - paragraph [ref=e290]: Shared reserves with slippage checks.
- - generic [ref=e291]:
- - generic [ref=e292]: shared
- - generic [ref=e293]: replace
- - generic [ref=e294]: slippage
- - link "vesting.cell Grant state flow into claimed output. flow transition receipt" [ref=e295] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - heading "vesting.cell" [level=3] [ref=e296]:
- - code [ref=e297]: vesting.cell
- - paragraph [ref=e298]: Grant state flow into claimed output.
- - generic [ref=e299]:
- - generic [ref=e300]: flow
- - generic [ref=e301]: transition
- - generic [ref=e302]: receipt
- - link "multisig.cell Witness checks for threshold-style locks. lock witness threshold" [ref=e303] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/multisig.cell
- - heading "multisig.cell" [level=3] [ref=e304]:
- - code [ref=e305]: multisig.cell
- - paragraph [ref=e306]: Witness checks for threshold-style locks.
- - generic [ref=e307]:
- - generic [ref=e308]: lock
- - generic [ref=e309]: witness
- - generic [ref=e310]: threshold
- - link "timelock.cell Time-bound spending from Cell state. lock env timepoint" [ref=e311] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/timelock.cell
- - heading "timelock.cell" [level=3] [ref=e312]:
- - code [ref=e313]: timelock.cell
- - paragraph [ref=e314]: Time-bound spending from Cell state.
- - generic [ref=e315]:
- - generic [ref=e316]: lock
- - generic [ref=e317]: env
- - generic [ref=e318]: timepoint
- - contentinfo [ref=e319]:
- - generic [ref=e320]:
- - generic [ref=e321]:
- - link "CellScript" [ref=e322] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e324]: CellScript
- - paragraph [ref=e325]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e326]:
- - link "Docs" [ref=e327] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e328] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e329] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e330] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T05-49-42-482Z.yml b/.playwright-mcp/page-2026-06-02T05-49-42-482Z.yml
deleted file mode 100644
index 73014772..00000000
--- a/.playwright-mcp/page-2026-06-02T05-49-42-482Z.yml
+++ /dev/null
@@ -1,298 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Source" [ref=e8] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e9] [cursor=pointer]
- - main [ref=e12]:
- - region "CellScript" [ref=e13]:
- - generic [ref=e14]:
- - heading "CellScript" [level=1] [ref=e15]
- - paragraph [ref=e16]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e17]:
- - link "Get started" [ref=e18] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e19] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e20]:
- - generic [ref=e21]:
- - term [ref=e22]: target
- - definition [ref=e23]: ckb-vm RISC-V
- - generic [ref=e24]:
- - term [ref=e25]: model
- - definition [ref=e26]: schema-backed Cells
- - generic [ref=e27]:
- - term [ref=e28]: output
- - definition [ref=e29]: metadata + ProofPlan
- - generic [ref=e30]:
- - generic [ref=e32]: token.cell
- - combobox "Choose CellScript example" [ref=e34]:
- - option "Fungible Token" [selected]
- - option "NFT"
- - option "AMM Pool"
- - option "Vesting"
- - tabpanel "Fungible Token" [ref=e36]:
- - generic [ref=e37]:
- - generic [ref=e38]: "1"
- - generic [ref=e39]: module cellscript::fungible_token
- - generic [ref=e40]:
- - generic [ref=e41]: "2"
- - generic [ref=e42]: // ... invariant and MintAuthority omitted
- - generic [ref=e43]:
- - generic [ref=e44]: "3"
- - generic [ref=e45]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e46]:
- - generic [ref=e47]: "4"
- - generic [ref=e48]: "amount: u64,"
- - generic [ref=e49]:
- - generic [ref=e50]: "5"
- - generic [ref=e51]: "symbol: [u8; 8],"
- - generic [ref=e52]:
- - generic [ref=e53]: "6"
- - generic [ref=e54]: "}"
- - generic [ref=e56]: "7"
- - generic [ref=e57]:
- - generic [ref=e58]: "8"
- - generic [ref=e59]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e60]:
- - generic [ref=e61]: "9"
- - generic [ref=e62]: where
- - generic [ref=e63]:
- - generic [ref=e64]: "10"
- - generic [ref=e65]: consume token
- - generic [ref=e66]:
- - generic [ref=e67]: "11"
- - generic [ref=e68]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e70]: "12"
- - generic [ref=e71]:
- - generic [ref=e72]: "13"
- - generic [ref=e73]: "action burn(token: Token)"
- - generic [ref=e74]:
- - generic [ref=e75]: "14"
- - generic [ref=e76]: where
- - generic [ref=e77]:
- - generic [ref=e78]: "15"
- - generic [ref=e79]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e80]:
- - generic [ref=e81]: "16"
- - generic [ref=e82]: destroy token
- - generic [ref=e83]:
- - generic [ref=e84]: $
- - generic [ref=e85]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e86]:
- - heading "Getting Started" [level=2] [ref=e87]
- - generic [ref=e88]:
- - article [ref=e89]:
- - generic [ref=e90]: "1"
- - heading "Install" [level=3] [ref=e91]
- - paragraph [ref=e92]:
- - code [ref=e93]: cargo install --path .
- - article [ref=e94]:
- - generic [ref=e95]: "2"
- - heading "Compile" [level=3] [ref=e96]
- - paragraph [ref=e97]:
- - code [ref=e98]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e99]:
- - generic [ref=e100]: "3"
- - heading "Check" [level=3] [ref=e101]
- - paragraph [ref=e102]:
- - code [ref=e103]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e104]:
- - heading "Compiler Workflow" [level=2] [ref=e105]
- - generic [ref=e106]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e107]:
- - article [ref=e108]:
- - img [ref=e110]:
- - generic [ref=e113]: .cell
- - heading "CellScript source" [level=3] [ref=e114]
- - img [ref=e116]
- - article [ref=e118]:
- - img [ref=e120]
- - heading "Parse & check" [level=3] [ref=e124]
- - paragraph [ref=e125]: Syntax, types, effects
- - img [ref=e127]
- - article [ref=e129]:
- - img [ref=e131]
- - heading "IR + Metadata" [level=3] [ref=e137]
- - paragraph [ref=e138]: Typed model & assurance info
- - img [ref=e140]
- - article [ref=e142]:
- - img [ref=e144]
- - heading "Lower to RISC-V" [level=3] [ref=e148]
- - paragraph [ref=e149]: ckb-vm codegen & optimisations
- - img [ref=e151]
- - article [ref=e153]:
- - img [ref=e155]:
- - generic [ref=e158]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e159]
- - paragraph [ref=e160]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e161]:
- - heading "Build for CKB" [level=3] [ref=e162]
- - list [ref=e163]:
- - listitem [ref=e164]:
- - img [ref=e165]
- - generic [ref=e167]: ckb-vm compatible
- - listitem [ref=e168]:
- - img [ref=e169]
- - generic [ref=e171]: Deterministic execution
- - listitem [ref=e172]:
- - img [ref=e173]
- - generic [ref=e175]: Minimal syscalls
- - listitem [ref=e176]:
- - img [ref=e177]
- - generic [ref=e179]: Scheduler-aware
- - region "Core Model" [ref=e180]:
- - heading "Core Model" [level=2] [ref=e181]
- - paragraph [ref=e182]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e183]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e184]:
- - tablist "CellScript core primitives" [ref=e185]:
- - tab "resource" [selected] [ref=e186] [cursor=pointer]:
- - generic [ref=e187]: resource
- - tab "shared" [ref=e188] [cursor=pointer]:
- - generic [ref=e189]: shared
- - tab "receipt" [ref=e190] [cursor=pointer]:
- - generic [ref=e191]: receipt
- - tab "action" [ref=e192] [cursor=pointer]:
- - generic [ref=e193]: action
- - tab "lock" [ref=e194] [cursor=pointer]:
- - generic [ref=e195]: lock
- - tab "flow" [ref=e196] [cursor=pointer]:
- - generic [ref=e197]: flow
- - tab "invariant" [ref=e198] [cursor=pointer]:
- - generic [ref=e199]: invariant
- - tab "struct / enum" [ref=e200] [cursor=pointer]:
- - generic [ref=e201]: struct / enum
- - tab "identity" [ref=e202] [cursor=pointer]:
- - generic [ref=e203]: identity
- - tabpanel "resource" [ref=e205]:
- - paragraph [ref=e207]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e208]:
- - generic [ref=e209]:
- - generic [ref=e210]: Example excerpt
- - generic [ref=e211]: examples/token.cell
- - generic [ref=e212]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e213]:
- - generic [ref=e214]:
- - heading "Assurance Output" [level=2] [ref=e215]
- - paragraph [ref=e216]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e218]:
- - generic "Assurance output summary" [ref=e219]:
- - article [ref=e220]:
- - text: Schema
- - strong [ref=e221]: v42
- - paragraph [ref=e222]: current compiler metadata schema
- - article [ref=e223]:
- - text: Source
- - strong [ref=e224]: vesting.cell
- - paragraph [ref=e225]: shared + receipt + flow
- - article [ref=e226]:
- - text: Boundary
- - strong [ref=e227]: local sidecar
- - paragraph [ref=e228]: validated; provenance required when shared
- - group [ref=e229]:
- - generic "- Metadata excerpt" [ref=e230] [cursor=pointer]
- - generic [ref=e231]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e232]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e233]:
- - heading "Tooling Surface" [level=2] [ref=e234]
- - generic [ref=e235]:
- - tablist "CellScript tooling commands" [ref=e236]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e237] [cursor=pointer]:
- - code [ref=e238]: cellc metadata
- - generic [ref=e239]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e240] [cursor=pointer]:
- - code [ref=e241]: cellc constraints
- - generic [ref=e242]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e243] [cursor=pointer]:
- - code [ref=e244]: cellc audit-bundle
- - generic [ref=e245]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e246] [cursor=pointer]:
- - code [ref=e247]: cellc lsp
- - generic [ref=e248]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e250]:
- - generic [ref=e251]:
- - generic [ref=e252]: When
- - paragraph [ref=e253]: Use before review or integration.
- - generic [ref=e254]: Output
- - paragraph [ref=e255]: Schema, effects, source hashes, target profile.
- - generic [ref=e256]:
- - code [ref=e257]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e258]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e259]:
- - heading "Examples" [level=2] [ref=e260]
- - generic [ref=e261]:
- - link "token.cell Mint, transfer, burn, and typed metadata. resource consume/create burn" [ref=e262] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - heading "token.cell" [level=3] [ref=e263]:
- - code [ref=e264]: token.cell
- - paragraph [ref=e265]: Mint, transfer, burn, and typed metadata.
- - generic [ref=e266]:
- - generic [ref=e267]: resource
- - generic [ref=e268]: consume/create
- - generic [ref=e269]: burn
- - link "nft.cell Ownership transfer with preserve and relock. resource preserve relock" [ref=e270] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - heading "nft.cell" [level=3] [ref=e271]:
- - code [ref=e272]: nft.cell
- - paragraph [ref=e273]: Ownership transfer with preserve and relock.
- - generic [ref=e274]:
- - generic [ref=e275]: resource
- - generic [ref=e276]: preserve
- - generic [ref=e277]: relock
- - link "amm_pool.cell Shared reserves with slippage checks. shared replace slippage" [ref=e278] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - heading "amm_pool.cell" [level=3] [ref=e279]:
- - code [ref=e280]: amm_pool.cell
- - paragraph [ref=e281]: Shared reserves with slippage checks.
- - generic [ref=e282]:
- - generic [ref=e283]: shared
- - generic [ref=e284]: replace
- - generic [ref=e285]: slippage
- - link "vesting.cell Grant state flow into claimed output. flow transition receipt" [ref=e286] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - heading "vesting.cell" [level=3] [ref=e287]:
- - code [ref=e288]: vesting.cell
- - paragraph [ref=e289]: Grant state flow into claimed output.
- - generic [ref=e290]:
- - generic [ref=e291]: flow
- - generic [ref=e292]: transition
- - generic [ref=e293]: receipt
- - link "multisig.cell Witness checks for threshold-style locks. lock witness threshold" [ref=e294] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/multisig.cell
- - heading "multisig.cell" [level=3] [ref=e295]:
- - code [ref=e296]: multisig.cell
- - paragraph [ref=e297]: Witness checks for threshold-style locks.
- - generic [ref=e298]:
- - generic [ref=e299]: lock
- - generic [ref=e300]: witness
- - generic [ref=e301]: threshold
- - link "timelock.cell Time-bound spending from Cell state. lock env timepoint" [ref=e302] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/timelock.cell
- - heading "timelock.cell" [level=3] [ref=e303]:
- - code [ref=e304]: timelock.cell
- - paragraph [ref=e305]: Time-bound spending from Cell state.
- - generic [ref=e306]:
- - generic [ref=e307]: lock
- - generic [ref=e308]: env
- - generic [ref=e309]: timepoint
- - contentinfo [ref=e310]:
- - generic [ref=e311]:
- - generic [ref=e312]:
- - link "CellScript" [ref=e313] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e315]: CellScript
- - paragraph [ref=e316]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e317]:
- - link "Docs" [ref=e318] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e319] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e320] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e321] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T05-51-04-536Z.yml b/.playwright-mcp/page-2026-06-02T05-51-04-536Z.yml
deleted file mode 100644
index c63be6bb..00000000
--- a/.playwright-mcp/page-2026-06-02T05-51-04-536Z.yml
+++ /dev/null
@@ -1,307 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Model" [ref=e8] [cursor=pointer]:
- - /url: "#core-model"
- - link "Assurance" [ref=e9] [cursor=pointer]:
- - /url: "#assurance"
- - link "Commands" [ref=e10] [cursor=pointer]:
- - /url: "#tooling"
- - link "Examples" [ref=e11] [cursor=pointer]:
- - /url: "#examples"
- - link "Source" [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e13] [cursor=pointer]:
- - generic [ref=e16]: Dark
- - main [ref=e17]:
- - region "CellScript" [ref=e18]:
- - generic [ref=e19]:
- - heading "CellScript" [level=1] [ref=e20]
- - paragraph [ref=e21]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e22]:
- - link "Get started" [ref=e23] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e24] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e25]:
- - generic [ref=e26]:
- - term [ref=e27]: target
- - definition [ref=e28]: ckb-vm RISC-V
- - generic [ref=e29]:
- - term [ref=e30]: model
- - definition [ref=e31]: schema-backed Cells
- - generic [ref=e32]:
- - term [ref=e33]: output
- - definition [ref=e34]: metadata + ProofPlan
- - generic [ref=e35]:
- - generic [ref=e37]: token.cell
- - tablist "CellScript examples" [ref=e39]:
- - tab "Fungible Token" [selected] [ref=e40] [cursor=pointer]
- - tab "NFT" [ref=e41] [cursor=pointer]
- - tab "AMM Pool" [ref=e42] [cursor=pointer]
- - tab "Vesting" [ref=e43] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e45]:
- - generic [ref=e46]:
- - generic [ref=e47]: "1"
- - generic [ref=e48]: module cellscript::fungible_token
- - generic [ref=e49]:
- - generic [ref=e50]: "2"
- - generic [ref=e51]: // ... invariant and MintAuthority omitted
- - generic [ref=e52]:
- - generic [ref=e53]: "3"
- - generic [ref=e54]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e55]:
- - generic [ref=e56]: "4"
- - generic [ref=e57]: "amount: u64,"
- - generic [ref=e58]:
- - generic [ref=e59]: "5"
- - generic [ref=e60]: "symbol: [u8; 8],"
- - generic [ref=e61]:
- - generic [ref=e62]: "6"
- - generic [ref=e63]: "}"
- - generic [ref=e65]: "7"
- - generic [ref=e66]:
- - generic [ref=e67]: "8"
- - generic [ref=e68]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e69]:
- - generic [ref=e70]: "9"
- - generic [ref=e71]: where
- - generic [ref=e72]:
- - generic [ref=e73]: "10"
- - generic [ref=e74]: consume token
- - generic [ref=e75]:
- - generic [ref=e76]: "11"
- - generic [ref=e77]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e79]: "12"
- - generic [ref=e80]:
- - generic [ref=e81]: "13"
- - generic [ref=e82]: "action burn(token: Token)"
- - generic [ref=e83]:
- - generic [ref=e84]: "14"
- - generic [ref=e85]: where
- - generic [ref=e86]:
- - generic [ref=e87]: "15"
- - generic [ref=e88]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e89]:
- - generic [ref=e90]: "16"
- - generic [ref=e91]: destroy token
- - generic [ref=e92]:
- - generic [ref=e93]: $
- - generic [ref=e94]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e95]:
- - heading "Getting Started" [level=2] [ref=e96]
- - generic [ref=e97]:
- - article [ref=e98]:
- - generic [ref=e99]: "1"
- - heading "Install" [level=3] [ref=e100]
- - paragraph [ref=e101]:
- - code [ref=e102]: cargo install --path .
- - article [ref=e103]:
- - generic [ref=e104]: "2"
- - heading "Compile" [level=3] [ref=e105]
- - paragraph [ref=e106]:
- - code [ref=e107]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e108]:
- - generic [ref=e109]: "3"
- - heading "Check" [level=3] [ref=e110]
- - paragraph [ref=e111]:
- - code [ref=e112]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e113]:
- - heading "Compiler Workflow" [level=2] [ref=e114]
- - generic [ref=e115]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e116]:
- - article [ref=e117]:
- - img [ref=e119]:
- - generic [ref=e122]: .cell
- - heading "CellScript source" [level=3] [ref=e123]
- - img [ref=e125]
- - article [ref=e127]:
- - img [ref=e129]
- - heading "Parse & check" [level=3] [ref=e133]
- - paragraph [ref=e134]: Syntax, types, effects
- - img [ref=e136]
- - article [ref=e138]:
- - img [ref=e140]
- - heading "IR + Metadata" [level=3] [ref=e146]
- - paragraph [ref=e147]: Typed model & assurance info
- - img [ref=e149]
- - article [ref=e151]:
- - img [ref=e153]
- - heading "Lower to RISC-V" [level=3] [ref=e157]
- - paragraph [ref=e158]: ckb-vm codegen & optimisations
- - img [ref=e160]
- - article [ref=e162]:
- - img [ref=e164]:
- - generic [ref=e167]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e168]
- - paragraph [ref=e169]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e170]:
- - heading "Build for CKB" [level=3] [ref=e171]
- - list [ref=e172]:
- - listitem [ref=e173]:
- - img [ref=e174]
- - generic [ref=e176]: ckb-vm compatible
- - listitem [ref=e177]:
- - img [ref=e178]
- - generic [ref=e180]: Deterministic execution
- - listitem [ref=e181]:
- - img [ref=e182]
- - generic [ref=e184]: Minimal syscalls
- - listitem [ref=e185]:
- - img [ref=e186]
- - generic [ref=e188]: Scheduler-aware
- - region "Core Model" [ref=e189]:
- - heading "Core Model" [level=2] [ref=e190]
- - paragraph [ref=e191]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e192]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e193]:
- - tablist "CellScript core primitives" [ref=e194]:
- - tab "resource" [selected] [ref=e195] [cursor=pointer]:
- - generic [ref=e196]: resource
- - tab "shared" [ref=e197] [cursor=pointer]:
- - generic [ref=e198]: shared
- - tab "receipt" [ref=e199] [cursor=pointer]:
- - generic [ref=e200]: receipt
- - tab "action" [ref=e201] [cursor=pointer]:
- - generic [ref=e202]: action
- - tab "lock" [ref=e203] [cursor=pointer]:
- - generic [ref=e204]: lock
- - tab "flow" [ref=e205] [cursor=pointer]:
- - generic [ref=e206]: flow
- - tab "invariant" [ref=e207] [cursor=pointer]:
- - generic [ref=e208]: invariant
- - tab "struct / enum" [ref=e209] [cursor=pointer]:
- - generic [ref=e210]: struct / enum
- - tab "identity" [ref=e211] [cursor=pointer]:
- - generic [ref=e212]: identity
- - tabpanel "resource" [ref=e214]:
- - paragraph [ref=e216]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e217]:
- - generic [ref=e218]:
- - generic [ref=e219]: Example excerpt
- - generic [ref=e220]: examples/token.cell
- - generic [ref=e221]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e222]:
- - generic [ref=e223]:
- - heading "Assurance Output" [level=2] [ref=e224]
- - paragraph [ref=e225]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e227]:
- - generic "Assurance output summary" [ref=e228]:
- - article [ref=e229]:
- - text: Schema
- - strong [ref=e230]: v42
- - paragraph [ref=e231]: current compiler metadata schema
- - article [ref=e232]:
- - text: Source
- - strong [ref=e233]: vesting.cell
- - paragraph [ref=e234]: shared + receipt + flow
- - article [ref=e235]:
- - text: Boundary
- - strong [ref=e236]: local sidecar
- - paragraph [ref=e237]: validated; provenance required when shared
- - group [ref=e238]:
- - generic "- Metadata excerpt" [ref=e239] [cursor=pointer]
- - generic [ref=e240]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e241]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e242]:
- - heading "Tooling Surface" [level=2] [ref=e243]
- - generic [ref=e244]:
- - tablist "CellScript tooling commands" [ref=e245]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e246] [cursor=pointer]:
- - code [ref=e247]: cellc metadata
- - generic [ref=e248]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e249] [cursor=pointer]:
- - code [ref=e250]: cellc constraints
- - generic [ref=e251]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e252] [cursor=pointer]:
- - code [ref=e253]: cellc audit-bundle
- - generic [ref=e254]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e255] [cursor=pointer]:
- - code [ref=e256]: cellc lsp
- - generic [ref=e257]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e259]:
- - generic [ref=e260]:
- - generic [ref=e261]: When
- - paragraph [ref=e262]: Use before review or integration.
- - generic [ref=e263]: Output
- - paragraph [ref=e264]: Schema, effects, source hashes, target profile.
- - generic [ref=e265]:
- - code [ref=e266]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e267]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e268]:
- - heading "Examples" [level=2] [ref=e269]
- - generic [ref=e270]:
- - link "token.cell Mint, transfer, burn, and typed metadata. resource consume/create burn" [ref=e271] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - heading "token.cell" [level=3] [ref=e272]:
- - code [ref=e273]: token.cell
- - paragraph [ref=e274]: Mint, transfer, burn, and typed metadata.
- - generic [ref=e275]:
- - generic [ref=e276]: resource
- - generic [ref=e277]: consume/create
- - generic [ref=e278]: burn
- - link "nft.cell Ownership transfer with preserve and relock. resource preserve relock" [ref=e279] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - heading "nft.cell" [level=3] [ref=e280]:
- - code [ref=e281]: nft.cell
- - paragraph [ref=e282]: Ownership transfer with preserve and relock.
- - generic [ref=e283]:
- - generic [ref=e284]: resource
- - generic [ref=e285]: preserve
- - generic [ref=e286]: relock
- - link "amm_pool.cell Shared reserves with slippage checks. shared replace slippage" [ref=e287] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - heading "amm_pool.cell" [level=3] [ref=e288]:
- - code [ref=e289]: amm_pool.cell
- - paragraph [ref=e290]: Shared reserves with slippage checks.
- - generic [ref=e291]:
- - generic [ref=e292]: shared
- - generic [ref=e293]: replace
- - generic [ref=e294]: slippage
- - link "vesting.cell Grant state flow into claimed output. flow transition receipt" [ref=e295] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - heading "vesting.cell" [level=3] [ref=e296]:
- - code [ref=e297]: vesting.cell
- - paragraph [ref=e298]: Grant state flow into claimed output.
- - generic [ref=e299]:
- - generic [ref=e300]: flow
- - generic [ref=e301]: transition
- - generic [ref=e302]: receipt
- - link "multisig.cell Witness checks for threshold-style locks. lock witness threshold" [ref=e303] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/multisig.cell
- - heading "multisig.cell" [level=3] [ref=e304]:
- - code [ref=e305]: multisig.cell
- - paragraph [ref=e306]: Witness checks for threshold-style locks.
- - generic [ref=e307]:
- - generic [ref=e308]: lock
- - generic [ref=e309]: witness
- - generic [ref=e310]: threshold
- - link "timelock.cell Time-bound spending from Cell state. lock env timepoint" [ref=e311] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/timelock.cell
- - heading "timelock.cell" [level=3] [ref=e312]:
- - code [ref=e313]: timelock.cell
- - paragraph [ref=e314]: Time-bound spending from Cell state.
- - generic [ref=e315]:
- - generic [ref=e316]: lock
- - generic [ref=e317]: env
- - generic [ref=e318]: timepoint
- - contentinfo [ref=e319]:
- - generic [ref=e320]:
- - generic [ref=e321]:
- - link "CellScript" [ref=e322] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e324]: CellScript
- - paragraph [ref=e325]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e326]:
- - link "Docs" [ref=e327] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e328] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e329] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e330] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T05-52-35-366Z.yml b/.playwright-mcp/page-2026-06-02T05-52-35-366Z.yml
deleted file mode 100644
index c63be6bb..00000000
--- a/.playwright-mcp/page-2026-06-02T05-52-35-366Z.yml
+++ /dev/null
@@ -1,307 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Model" [ref=e8] [cursor=pointer]:
- - /url: "#core-model"
- - link "Assurance" [ref=e9] [cursor=pointer]:
- - /url: "#assurance"
- - link "Commands" [ref=e10] [cursor=pointer]:
- - /url: "#tooling"
- - link "Examples" [ref=e11] [cursor=pointer]:
- - /url: "#examples"
- - link "Source" [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e13] [cursor=pointer]:
- - generic [ref=e16]: Dark
- - main [ref=e17]:
- - region "CellScript" [ref=e18]:
- - generic [ref=e19]:
- - heading "CellScript" [level=1] [ref=e20]
- - paragraph [ref=e21]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e22]:
- - link "Get started" [ref=e23] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e24] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e25]:
- - generic [ref=e26]:
- - term [ref=e27]: target
- - definition [ref=e28]: ckb-vm RISC-V
- - generic [ref=e29]:
- - term [ref=e30]: model
- - definition [ref=e31]: schema-backed Cells
- - generic [ref=e32]:
- - term [ref=e33]: output
- - definition [ref=e34]: metadata + ProofPlan
- - generic [ref=e35]:
- - generic [ref=e37]: token.cell
- - tablist "CellScript examples" [ref=e39]:
- - tab "Fungible Token" [selected] [ref=e40] [cursor=pointer]
- - tab "NFT" [ref=e41] [cursor=pointer]
- - tab "AMM Pool" [ref=e42] [cursor=pointer]
- - tab "Vesting" [ref=e43] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e45]:
- - generic [ref=e46]:
- - generic [ref=e47]: "1"
- - generic [ref=e48]: module cellscript::fungible_token
- - generic [ref=e49]:
- - generic [ref=e50]: "2"
- - generic [ref=e51]: // ... invariant and MintAuthority omitted
- - generic [ref=e52]:
- - generic [ref=e53]: "3"
- - generic [ref=e54]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e55]:
- - generic [ref=e56]: "4"
- - generic [ref=e57]: "amount: u64,"
- - generic [ref=e58]:
- - generic [ref=e59]: "5"
- - generic [ref=e60]: "symbol: [u8; 8],"
- - generic [ref=e61]:
- - generic [ref=e62]: "6"
- - generic [ref=e63]: "}"
- - generic [ref=e65]: "7"
- - generic [ref=e66]:
- - generic [ref=e67]: "8"
- - generic [ref=e68]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e69]:
- - generic [ref=e70]: "9"
- - generic [ref=e71]: where
- - generic [ref=e72]:
- - generic [ref=e73]: "10"
- - generic [ref=e74]: consume token
- - generic [ref=e75]:
- - generic [ref=e76]: "11"
- - generic [ref=e77]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e79]: "12"
- - generic [ref=e80]:
- - generic [ref=e81]: "13"
- - generic [ref=e82]: "action burn(token: Token)"
- - generic [ref=e83]:
- - generic [ref=e84]: "14"
- - generic [ref=e85]: where
- - generic [ref=e86]:
- - generic [ref=e87]: "15"
- - generic [ref=e88]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e89]:
- - generic [ref=e90]: "16"
- - generic [ref=e91]: destroy token
- - generic [ref=e92]:
- - generic [ref=e93]: $
- - generic [ref=e94]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e95]:
- - heading "Getting Started" [level=2] [ref=e96]
- - generic [ref=e97]:
- - article [ref=e98]:
- - generic [ref=e99]: "1"
- - heading "Install" [level=3] [ref=e100]
- - paragraph [ref=e101]:
- - code [ref=e102]: cargo install --path .
- - article [ref=e103]:
- - generic [ref=e104]: "2"
- - heading "Compile" [level=3] [ref=e105]
- - paragraph [ref=e106]:
- - code [ref=e107]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e108]:
- - generic [ref=e109]: "3"
- - heading "Check" [level=3] [ref=e110]
- - paragraph [ref=e111]:
- - code [ref=e112]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e113]:
- - heading "Compiler Workflow" [level=2] [ref=e114]
- - generic [ref=e115]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e116]:
- - article [ref=e117]:
- - img [ref=e119]:
- - generic [ref=e122]: .cell
- - heading "CellScript source" [level=3] [ref=e123]
- - img [ref=e125]
- - article [ref=e127]:
- - img [ref=e129]
- - heading "Parse & check" [level=3] [ref=e133]
- - paragraph [ref=e134]: Syntax, types, effects
- - img [ref=e136]
- - article [ref=e138]:
- - img [ref=e140]
- - heading "IR + Metadata" [level=3] [ref=e146]
- - paragraph [ref=e147]: Typed model & assurance info
- - img [ref=e149]
- - article [ref=e151]:
- - img [ref=e153]
- - heading "Lower to RISC-V" [level=3] [ref=e157]
- - paragraph [ref=e158]: ckb-vm codegen & optimisations
- - img [ref=e160]
- - article [ref=e162]:
- - img [ref=e164]:
- - generic [ref=e167]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e168]
- - paragraph [ref=e169]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e170]:
- - heading "Build for CKB" [level=3] [ref=e171]
- - list [ref=e172]:
- - listitem [ref=e173]:
- - img [ref=e174]
- - generic [ref=e176]: ckb-vm compatible
- - listitem [ref=e177]:
- - img [ref=e178]
- - generic [ref=e180]: Deterministic execution
- - listitem [ref=e181]:
- - img [ref=e182]
- - generic [ref=e184]: Minimal syscalls
- - listitem [ref=e185]:
- - img [ref=e186]
- - generic [ref=e188]: Scheduler-aware
- - region "Core Model" [ref=e189]:
- - heading "Core Model" [level=2] [ref=e190]
- - paragraph [ref=e191]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e192]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e193]:
- - tablist "CellScript core primitives" [ref=e194]:
- - tab "resource" [selected] [ref=e195] [cursor=pointer]:
- - generic [ref=e196]: resource
- - tab "shared" [ref=e197] [cursor=pointer]:
- - generic [ref=e198]: shared
- - tab "receipt" [ref=e199] [cursor=pointer]:
- - generic [ref=e200]: receipt
- - tab "action" [ref=e201] [cursor=pointer]:
- - generic [ref=e202]: action
- - tab "lock" [ref=e203] [cursor=pointer]:
- - generic [ref=e204]: lock
- - tab "flow" [ref=e205] [cursor=pointer]:
- - generic [ref=e206]: flow
- - tab "invariant" [ref=e207] [cursor=pointer]:
- - generic [ref=e208]: invariant
- - tab "struct / enum" [ref=e209] [cursor=pointer]:
- - generic [ref=e210]: struct / enum
- - tab "identity" [ref=e211] [cursor=pointer]:
- - generic [ref=e212]: identity
- - tabpanel "resource" [ref=e214]:
- - paragraph [ref=e216]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e217]:
- - generic [ref=e218]:
- - generic [ref=e219]: Example excerpt
- - generic [ref=e220]: examples/token.cell
- - generic [ref=e221]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e222]:
- - generic [ref=e223]:
- - heading "Assurance Output" [level=2] [ref=e224]
- - paragraph [ref=e225]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e227]:
- - generic "Assurance output summary" [ref=e228]:
- - article [ref=e229]:
- - text: Schema
- - strong [ref=e230]: v42
- - paragraph [ref=e231]: current compiler metadata schema
- - article [ref=e232]:
- - text: Source
- - strong [ref=e233]: vesting.cell
- - paragraph [ref=e234]: shared + receipt + flow
- - article [ref=e235]:
- - text: Boundary
- - strong [ref=e236]: local sidecar
- - paragraph [ref=e237]: validated; provenance required when shared
- - group [ref=e238]:
- - generic "- Metadata excerpt" [ref=e239] [cursor=pointer]
- - generic [ref=e240]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e241]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e242]:
- - heading "Tooling Surface" [level=2] [ref=e243]
- - generic [ref=e244]:
- - tablist "CellScript tooling commands" [ref=e245]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e246] [cursor=pointer]:
- - code [ref=e247]: cellc metadata
- - generic [ref=e248]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e249] [cursor=pointer]:
- - code [ref=e250]: cellc constraints
- - generic [ref=e251]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e252] [cursor=pointer]:
- - code [ref=e253]: cellc audit-bundle
- - generic [ref=e254]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e255] [cursor=pointer]:
- - code [ref=e256]: cellc lsp
- - generic [ref=e257]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e259]:
- - generic [ref=e260]:
- - generic [ref=e261]: When
- - paragraph [ref=e262]: Use before review or integration.
- - generic [ref=e263]: Output
- - paragraph [ref=e264]: Schema, effects, source hashes, target profile.
- - generic [ref=e265]:
- - code [ref=e266]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e267]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e268]:
- - heading "Examples" [level=2] [ref=e269]
- - generic [ref=e270]:
- - link "token.cell Mint, transfer, burn, and typed metadata. resource consume/create burn" [ref=e271] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - heading "token.cell" [level=3] [ref=e272]:
- - code [ref=e273]: token.cell
- - paragraph [ref=e274]: Mint, transfer, burn, and typed metadata.
- - generic [ref=e275]:
- - generic [ref=e276]: resource
- - generic [ref=e277]: consume/create
- - generic [ref=e278]: burn
- - link "nft.cell Ownership transfer with preserve and relock. resource preserve relock" [ref=e279] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - heading "nft.cell" [level=3] [ref=e280]:
- - code [ref=e281]: nft.cell
- - paragraph [ref=e282]: Ownership transfer with preserve and relock.
- - generic [ref=e283]:
- - generic [ref=e284]: resource
- - generic [ref=e285]: preserve
- - generic [ref=e286]: relock
- - link "amm_pool.cell Shared reserves with slippage checks. shared replace slippage" [ref=e287] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - heading "amm_pool.cell" [level=3] [ref=e288]:
- - code [ref=e289]: amm_pool.cell
- - paragraph [ref=e290]: Shared reserves with slippage checks.
- - generic [ref=e291]:
- - generic [ref=e292]: shared
- - generic [ref=e293]: replace
- - generic [ref=e294]: slippage
- - link "vesting.cell Grant state flow into claimed output. flow transition receipt" [ref=e295] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - heading "vesting.cell" [level=3] [ref=e296]:
- - code [ref=e297]: vesting.cell
- - paragraph [ref=e298]: Grant state flow into claimed output.
- - generic [ref=e299]:
- - generic [ref=e300]: flow
- - generic [ref=e301]: transition
- - generic [ref=e302]: receipt
- - link "multisig.cell Witness checks for threshold-style locks. lock witness threshold" [ref=e303] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/multisig.cell
- - heading "multisig.cell" [level=3] [ref=e304]:
- - code [ref=e305]: multisig.cell
- - paragraph [ref=e306]: Witness checks for threshold-style locks.
- - generic [ref=e307]:
- - generic [ref=e308]: lock
- - generic [ref=e309]: witness
- - generic [ref=e310]: threshold
- - link "timelock.cell Time-bound spending from Cell state. lock env timepoint" [ref=e311] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/timelock.cell
- - heading "timelock.cell" [level=3] [ref=e312]:
- - code [ref=e313]: timelock.cell
- - paragraph [ref=e314]: Time-bound spending from Cell state.
- - generic [ref=e315]:
- - generic [ref=e316]: lock
- - generic [ref=e317]: env
- - generic [ref=e318]: timepoint
- - contentinfo [ref=e319]:
- - generic [ref=e320]:
- - generic [ref=e321]:
- - link "CellScript" [ref=e322] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e324]: CellScript
- - paragraph [ref=e325]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e326]:
- - link "Docs" [ref=e327] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e328] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e329] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e330] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T05-54-02-720Z.yml b/.playwright-mcp/page-2026-06-02T05-54-02-720Z.yml
deleted file mode 100644
index c63be6bb..00000000
--- a/.playwright-mcp/page-2026-06-02T05-54-02-720Z.yml
+++ /dev/null
@@ -1,307 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Model" [ref=e8] [cursor=pointer]:
- - /url: "#core-model"
- - link "Assurance" [ref=e9] [cursor=pointer]:
- - /url: "#assurance"
- - link "Commands" [ref=e10] [cursor=pointer]:
- - /url: "#tooling"
- - link "Examples" [ref=e11] [cursor=pointer]:
- - /url: "#examples"
- - link "Source" [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e13] [cursor=pointer]:
- - generic [ref=e16]: Dark
- - main [ref=e17]:
- - region "CellScript" [ref=e18]:
- - generic [ref=e19]:
- - heading "CellScript" [level=1] [ref=e20]
- - paragraph [ref=e21]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e22]:
- - link "Get started" [ref=e23] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e24] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e25]:
- - generic [ref=e26]:
- - term [ref=e27]: target
- - definition [ref=e28]: ckb-vm RISC-V
- - generic [ref=e29]:
- - term [ref=e30]: model
- - definition [ref=e31]: schema-backed Cells
- - generic [ref=e32]:
- - term [ref=e33]: output
- - definition [ref=e34]: metadata + ProofPlan
- - generic [ref=e35]:
- - generic [ref=e37]: token.cell
- - tablist "CellScript examples" [ref=e39]:
- - tab "Fungible Token" [selected] [ref=e40] [cursor=pointer]
- - tab "NFT" [ref=e41] [cursor=pointer]
- - tab "AMM Pool" [ref=e42] [cursor=pointer]
- - tab "Vesting" [ref=e43] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e45]:
- - generic [ref=e46]:
- - generic [ref=e47]: "1"
- - generic [ref=e48]: module cellscript::fungible_token
- - generic [ref=e49]:
- - generic [ref=e50]: "2"
- - generic [ref=e51]: // ... invariant and MintAuthority omitted
- - generic [ref=e52]:
- - generic [ref=e53]: "3"
- - generic [ref=e54]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e55]:
- - generic [ref=e56]: "4"
- - generic [ref=e57]: "amount: u64,"
- - generic [ref=e58]:
- - generic [ref=e59]: "5"
- - generic [ref=e60]: "symbol: [u8; 8],"
- - generic [ref=e61]:
- - generic [ref=e62]: "6"
- - generic [ref=e63]: "}"
- - generic [ref=e65]: "7"
- - generic [ref=e66]:
- - generic [ref=e67]: "8"
- - generic [ref=e68]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e69]:
- - generic [ref=e70]: "9"
- - generic [ref=e71]: where
- - generic [ref=e72]:
- - generic [ref=e73]: "10"
- - generic [ref=e74]: consume token
- - generic [ref=e75]:
- - generic [ref=e76]: "11"
- - generic [ref=e77]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e79]: "12"
- - generic [ref=e80]:
- - generic [ref=e81]: "13"
- - generic [ref=e82]: "action burn(token: Token)"
- - generic [ref=e83]:
- - generic [ref=e84]: "14"
- - generic [ref=e85]: where
- - generic [ref=e86]:
- - generic [ref=e87]: "15"
- - generic [ref=e88]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e89]:
- - generic [ref=e90]: "16"
- - generic [ref=e91]: destroy token
- - generic [ref=e92]:
- - generic [ref=e93]: $
- - generic [ref=e94]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e95]:
- - heading "Getting Started" [level=2] [ref=e96]
- - generic [ref=e97]:
- - article [ref=e98]:
- - generic [ref=e99]: "1"
- - heading "Install" [level=3] [ref=e100]
- - paragraph [ref=e101]:
- - code [ref=e102]: cargo install --path .
- - article [ref=e103]:
- - generic [ref=e104]: "2"
- - heading "Compile" [level=3] [ref=e105]
- - paragraph [ref=e106]:
- - code [ref=e107]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e108]:
- - generic [ref=e109]: "3"
- - heading "Check" [level=3] [ref=e110]
- - paragraph [ref=e111]:
- - code [ref=e112]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e113]:
- - heading "Compiler Workflow" [level=2] [ref=e114]
- - generic [ref=e115]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e116]:
- - article [ref=e117]:
- - img [ref=e119]:
- - generic [ref=e122]: .cell
- - heading "CellScript source" [level=3] [ref=e123]
- - img [ref=e125]
- - article [ref=e127]:
- - img [ref=e129]
- - heading "Parse & check" [level=3] [ref=e133]
- - paragraph [ref=e134]: Syntax, types, effects
- - img [ref=e136]
- - article [ref=e138]:
- - img [ref=e140]
- - heading "IR + Metadata" [level=3] [ref=e146]
- - paragraph [ref=e147]: Typed model & assurance info
- - img [ref=e149]
- - article [ref=e151]:
- - img [ref=e153]
- - heading "Lower to RISC-V" [level=3] [ref=e157]
- - paragraph [ref=e158]: ckb-vm codegen & optimisations
- - img [ref=e160]
- - article [ref=e162]:
- - img [ref=e164]:
- - generic [ref=e167]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e168]
- - paragraph [ref=e169]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e170]:
- - heading "Build for CKB" [level=3] [ref=e171]
- - list [ref=e172]:
- - listitem [ref=e173]:
- - img [ref=e174]
- - generic [ref=e176]: ckb-vm compatible
- - listitem [ref=e177]:
- - img [ref=e178]
- - generic [ref=e180]: Deterministic execution
- - listitem [ref=e181]:
- - img [ref=e182]
- - generic [ref=e184]: Minimal syscalls
- - listitem [ref=e185]:
- - img [ref=e186]
- - generic [ref=e188]: Scheduler-aware
- - region "Core Model" [ref=e189]:
- - heading "Core Model" [level=2] [ref=e190]
- - paragraph [ref=e191]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e192]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e193]:
- - tablist "CellScript core primitives" [ref=e194]:
- - tab "resource" [selected] [ref=e195] [cursor=pointer]:
- - generic [ref=e196]: resource
- - tab "shared" [ref=e197] [cursor=pointer]:
- - generic [ref=e198]: shared
- - tab "receipt" [ref=e199] [cursor=pointer]:
- - generic [ref=e200]: receipt
- - tab "action" [ref=e201] [cursor=pointer]:
- - generic [ref=e202]: action
- - tab "lock" [ref=e203] [cursor=pointer]:
- - generic [ref=e204]: lock
- - tab "flow" [ref=e205] [cursor=pointer]:
- - generic [ref=e206]: flow
- - tab "invariant" [ref=e207] [cursor=pointer]:
- - generic [ref=e208]: invariant
- - tab "struct / enum" [ref=e209] [cursor=pointer]:
- - generic [ref=e210]: struct / enum
- - tab "identity" [ref=e211] [cursor=pointer]:
- - generic [ref=e212]: identity
- - tabpanel "resource" [ref=e214]:
- - paragraph [ref=e216]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e217]:
- - generic [ref=e218]:
- - generic [ref=e219]: Example excerpt
- - generic [ref=e220]: examples/token.cell
- - generic [ref=e221]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e222]:
- - generic [ref=e223]:
- - heading "Assurance Output" [level=2] [ref=e224]
- - paragraph [ref=e225]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e227]:
- - generic "Assurance output summary" [ref=e228]:
- - article [ref=e229]:
- - text: Schema
- - strong [ref=e230]: v42
- - paragraph [ref=e231]: current compiler metadata schema
- - article [ref=e232]:
- - text: Source
- - strong [ref=e233]: vesting.cell
- - paragraph [ref=e234]: shared + receipt + flow
- - article [ref=e235]:
- - text: Boundary
- - strong [ref=e236]: local sidecar
- - paragraph [ref=e237]: validated; provenance required when shared
- - group [ref=e238]:
- - generic "- Metadata excerpt" [ref=e239] [cursor=pointer]
- - generic [ref=e240]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e241]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e242]:
- - heading "Tooling Surface" [level=2] [ref=e243]
- - generic [ref=e244]:
- - tablist "CellScript tooling commands" [ref=e245]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e246] [cursor=pointer]:
- - code [ref=e247]: cellc metadata
- - generic [ref=e248]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e249] [cursor=pointer]:
- - code [ref=e250]: cellc constraints
- - generic [ref=e251]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e252] [cursor=pointer]:
- - code [ref=e253]: cellc audit-bundle
- - generic [ref=e254]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e255] [cursor=pointer]:
- - code [ref=e256]: cellc lsp
- - generic [ref=e257]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e259]:
- - generic [ref=e260]:
- - generic [ref=e261]: When
- - paragraph [ref=e262]: Use before review or integration.
- - generic [ref=e263]: Output
- - paragraph [ref=e264]: Schema, effects, source hashes, target profile.
- - generic [ref=e265]:
- - code [ref=e266]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e267]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e268]:
- - heading "Examples" [level=2] [ref=e269]
- - generic [ref=e270]:
- - link "token.cell Mint, transfer, burn, and typed metadata. resource consume/create burn" [ref=e271] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - heading "token.cell" [level=3] [ref=e272]:
- - code [ref=e273]: token.cell
- - paragraph [ref=e274]: Mint, transfer, burn, and typed metadata.
- - generic [ref=e275]:
- - generic [ref=e276]: resource
- - generic [ref=e277]: consume/create
- - generic [ref=e278]: burn
- - link "nft.cell Ownership transfer with preserve and relock. resource preserve relock" [ref=e279] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - heading "nft.cell" [level=3] [ref=e280]:
- - code [ref=e281]: nft.cell
- - paragraph [ref=e282]: Ownership transfer with preserve and relock.
- - generic [ref=e283]:
- - generic [ref=e284]: resource
- - generic [ref=e285]: preserve
- - generic [ref=e286]: relock
- - link "amm_pool.cell Shared reserves with slippage checks. shared replace slippage" [ref=e287] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - heading "amm_pool.cell" [level=3] [ref=e288]:
- - code [ref=e289]: amm_pool.cell
- - paragraph [ref=e290]: Shared reserves with slippage checks.
- - generic [ref=e291]:
- - generic [ref=e292]: shared
- - generic [ref=e293]: replace
- - generic [ref=e294]: slippage
- - link "vesting.cell Grant state flow into claimed output. flow transition receipt" [ref=e295] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - heading "vesting.cell" [level=3] [ref=e296]:
- - code [ref=e297]: vesting.cell
- - paragraph [ref=e298]: Grant state flow into claimed output.
- - generic [ref=e299]:
- - generic [ref=e300]: flow
- - generic [ref=e301]: transition
- - generic [ref=e302]: receipt
- - link "multisig.cell Witness checks for threshold-style locks. lock witness threshold" [ref=e303] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/multisig.cell
- - heading "multisig.cell" [level=3] [ref=e304]:
- - code [ref=e305]: multisig.cell
- - paragraph [ref=e306]: Witness checks for threshold-style locks.
- - generic [ref=e307]:
- - generic [ref=e308]: lock
- - generic [ref=e309]: witness
- - generic [ref=e310]: threshold
- - link "timelock.cell Time-bound spending from Cell state. lock env timepoint" [ref=e311] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/timelock.cell
- - heading "timelock.cell" [level=3] [ref=e312]:
- - code [ref=e313]: timelock.cell
- - paragraph [ref=e314]: Time-bound spending from Cell state.
- - generic [ref=e315]:
- - generic [ref=e316]: lock
- - generic [ref=e317]: env
- - generic [ref=e318]: timepoint
- - contentinfo [ref=e319]:
- - generic [ref=e320]:
- - generic [ref=e321]:
- - link "CellScript" [ref=e322] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e324]: CellScript
- - paragraph [ref=e325]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e326]:
- - link "Docs" [ref=e327] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e328] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e329] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e330] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T06-00-24-008Z.yml b/.playwright-mcp/page-2026-06-02T06-00-24-008Z.yml
deleted file mode 100644
index c63be6bb..00000000
--- a/.playwright-mcp/page-2026-06-02T06-00-24-008Z.yml
+++ /dev/null
@@ -1,307 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Model" [ref=e8] [cursor=pointer]:
- - /url: "#core-model"
- - link "Assurance" [ref=e9] [cursor=pointer]:
- - /url: "#assurance"
- - link "Commands" [ref=e10] [cursor=pointer]:
- - /url: "#tooling"
- - link "Examples" [ref=e11] [cursor=pointer]:
- - /url: "#examples"
- - link "Source" [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e13] [cursor=pointer]:
- - generic [ref=e16]: Dark
- - main [ref=e17]:
- - region "CellScript" [ref=e18]:
- - generic [ref=e19]:
- - heading "CellScript" [level=1] [ref=e20]
- - paragraph [ref=e21]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e22]:
- - link "Get started" [ref=e23] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e24] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e25]:
- - generic [ref=e26]:
- - term [ref=e27]: target
- - definition [ref=e28]: ckb-vm RISC-V
- - generic [ref=e29]:
- - term [ref=e30]: model
- - definition [ref=e31]: schema-backed Cells
- - generic [ref=e32]:
- - term [ref=e33]: output
- - definition [ref=e34]: metadata + ProofPlan
- - generic [ref=e35]:
- - generic [ref=e37]: token.cell
- - tablist "CellScript examples" [ref=e39]:
- - tab "Fungible Token" [selected] [ref=e40] [cursor=pointer]
- - tab "NFT" [ref=e41] [cursor=pointer]
- - tab "AMM Pool" [ref=e42] [cursor=pointer]
- - tab "Vesting" [ref=e43] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e45]:
- - generic [ref=e46]:
- - generic [ref=e47]: "1"
- - generic [ref=e48]: module cellscript::fungible_token
- - generic [ref=e49]:
- - generic [ref=e50]: "2"
- - generic [ref=e51]: // ... invariant and MintAuthority omitted
- - generic [ref=e52]:
- - generic [ref=e53]: "3"
- - generic [ref=e54]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e55]:
- - generic [ref=e56]: "4"
- - generic [ref=e57]: "amount: u64,"
- - generic [ref=e58]:
- - generic [ref=e59]: "5"
- - generic [ref=e60]: "symbol: [u8; 8],"
- - generic [ref=e61]:
- - generic [ref=e62]: "6"
- - generic [ref=e63]: "}"
- - generic [ref=e65]: "7"
- - generic [ref=e66]:
- - generic [ref=e67]: "8"
- - generic [ref=e68]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e69]:
- - generic [ref=e70]: "9"
- - generic [ref=e71]: where
- - generic [ref=e72]:
- - generic [ref=e73]: "10"
- - generic [ref=e74]: consume token
- - generic [ref=e75]:
- - generic [ref=e76]: "11"
- - generic [ref=e77]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e79]: "12"
- - generic [ref=e80]:
- - generic [ref=e81]: "13"
- - generic [ref=e82]: "action burn(token: Token)"
- - generic [ref=e83]:
- - generic [ref=e84]: "14"
- - generic [ref=e85]: where
- - generic [ref=e86]:
- - generic [ref=e87]: "15"
- - generic [ref=e88]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e89]:
- - generic [ref=e90]: "16"
- - generic [ref=e91]: destroy token
- - generic [ref=e92]:
- - generic [ref=e93]: $
- - generic [ref=e94]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e95]:
- - heading "Getting Started" [level=2] [ref=e96]
- - generic [ref=e97]:
- - article [ref=e98]:
- - generic [ref=e99]: "1"
- - heading "Install" [level=3] [ref=e100]
- - paragraph [ref=e101]:
- - code [ref=e102]: cargo install --path .
- - article [ref=e103]:
- - generic [ref=e104]: "2"
- - heading "Compile" [level=3] [ref=e105]
- - paragraph [ref=e106]:
- - code [ref=e107]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e108]:
- - generic [ref=e109]: "3"
- - heading "Check" [level=3] [ref=e110]
- - paragraph [ref=e111]:
- - code [ref=e112]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e113]:
- - heading "Compiler Workflow" [level=2] [ref=e114]
- - generic [ref=e115]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e116]:
- - article [ref=e117]:
- - img [ref=e119]:
- - generic [ref=e122]: .cell
- - heading "CellScript source" [level=3] [ref=e123]
- - img [ref=e125]
- - article [ref=e127]:
- - img [ref=e129]
- - heading "Parse & check" [level=3] [ref=e133]
- - paragraph [ref=e134]: Syntax, types, effects
- - img [ref=e136]
- - article [ref=e138]:
- - img [ref=e140]
- - heading "IR + Metadata" [level=3] [ref=e146]
- - paragraph [ref=e147]: Typed model & assurance info
- - img [ref=e149]
- - article [ref=e151]:
- - img [ref=e153]
- - heading "Lower to RISC-V" [level=3] [ref=e157]
- - paragraph [ref=e158]: ckb-vm codegen & optimisations
- - img [ref=e160]
- - article [ref=e162]:
- - img [ref=e164]:
- - generic [ref=e167]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e168]
- - paragraph [ref=e169]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e170]:
- - heading "Build for CKB" [level=3] [ref=e171]
- - list [ref=e172]:
- - listitem [ref=e173]:
- - img [ref=e174]
- - generic [ref=e176]: ckb-vm compatible
- - listitem [ref=e177]:
- - img [ref=e178]
- - generic [ref=e180]: Deterministic execution
- - listitem [ref=e181]:
- - img [ref=e182]
- - generic [ref=e184]: Minimal syscalls
- - listitem [ref=e185]:
- - img [ref=e186]
- - generic [ref=e188]: Scheduler-aware
- - region "Core Model" [ref=e189]:
- - heading "Core Model" [level=2] [ref=e190]
- - paragraph [ref=e191]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e192]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e193]:
- - tablist "CellScript core primitives" [ref=e194]:
- - tab "resource" [selected] [ref=e195] [cursor=pointer]:
- - generic [ref=e196]: resource
- - tab "shared" [ref=e197] [cursor=pointer]:
- - generic [ref=e198]: shared
- - tab "receipt" [ref=e199] [cursor=pointer]:
- - generic [ref=e200]: receipt
- - tab "action" [ref=e201] [cursor=pointer]:
- - generic [ref=e202]: action
- - tab "lock" [ref=e203] [cursor=pointer]:
- - generic [ref=e204]: lock
- - tab "flow" [ref=e205] [cursor=pointer]:
- - generic [ref=e206]: flow
- - tab "invariant" [ref=e207] [cursor=pointer]:
- - generic [ref=e208]: invariant
- - tab "struct / enum" [ref=e209] [cursor=pointer]:
- - generic [ref=e210]: struct / enum
- - tab "identity" [ref=e211] [cursor=pointer]:
- - generic [ref=e212]: identity
- - tabpanel "resource" [ref=e214]:
- - paragraph [ref=e216]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e217]:
- - generic [ref=e218]:
- - generic [ref=e219]: Example excerpt
- - generic [ref=e220]: examples/token.cell
- - generic [ref=e221]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e222]:
- - generic [ref=e223]:
- - heading "Assurance Output" [level=2] [ref=e224]
- - paragraph [ref=e225]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e227]:
- - generic "Assurance output summary" [ref=e228]:
- - article [ref=e229]:
- - text: Schema
- - strong [ref=e230]: v42
- - paragraph [ref=e231]: current compiler metadata schema
- - article [ref=e232]:
- - text: Source
- - strong [ref=e233]: vesting.cell
- - paragraph [ref=e234]: shared + receipt + flow
- - article [ref=e235]:
- - text: Boundary
- - strong [ref=e236]: local sidecar
- - paragraph [ref=e237]: validated; provenance required when shared
- - group [ref=e238]:
- - generic "- Metadata excerpt" [ref=e239] [cursor=pointer]
- - generic [ref=e240]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e241]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e242]:
- - heading "Tooling Surface" [level=2] [ref=e243]
- - generic [ref=e244]:
- - tablist "CellScript tooling commands" [ref=e245]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e246] [cursor=pointer]:
- - code [ref=e247]: cellc metadata
- - generic [ref=e248]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e249] [cursor=pointer]:
- - code [ref=e250]: cellc constraints
- - generic [ref=e251]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e252] [cursor=pointer]:
- - code [ref=e253]: cellc audit-bundle
- - generic [ref=e254]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e255] [cursor=pointer]:
- - code [ref=e256]: cellc lsp
- - generic [ref=e257]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e259]:
- - generic [ref=e260]:
- - generic [ref=e261]: When
- - paragraph [ref=e262]: Use before review or integration.
- - generic [ref=e263]: Output
- - paragraph [ref=e264]: Schema, effects, source hashes, target profile.
- - generic [ref=e265]:
- - code [ref=e266]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e267]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e268]:
- - heading "Examples" [level=2] [ref=e269]
- - generic [ref=e270]:
- - link "token.cell Mint, transfer, burn, and typed metadata. resource consume/create burn" [ref=e271] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - heading "token.cell" [level=3] [ref=e272]:
- - code [ref=e273]: token.cell
- - paragraph [ref=e274]: Mint, transfer, burn, and typed metadata.
- - generic [ref=e275]:
- - generic [ref=e276]: resource
- - generic [ref=e277]: consume/create
- - generic [ref=e278]: burn
- - link "nft.cell Ownership transfer with preserve and relock. resource preserve relock" [ref=e279] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - heading "nft.cell" [level=3] [ref=e280]:
- - code [ref=e281]: nft.cell
- - paragraph [ref=e282]: Ownership transfer with preserve and relock.
- - generic [ref=e283]:
- - generic [ref=e284]: resource
- - generic [ref=e285]: preserve
- - generic [ref=e286]: relock
- - link "amm_pool.cell Shared reserves with slippage checks. shared replace slippage" [ref=e287] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - heading "amm_pool.cell" [level=3] [ref=e288]:
- - code [ref=e289]: amm_pool.cell
- - paragraph [ref=e290]: Shared reserves with slippage checks.
- - generic [ref=e291]:
- - generic [ref=e292]: shared
- - generic [ref=e293]: replace
- - generic [ref=e294]: slippage
- - link "vesting.cell Grant state flow into claimed output. flow transition receipt" [ref=e295] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - heading "vesting.cell" [level=3] [ref=e296]:
- - code [ref=e297]: vesting.cell
- - paragraph [ref=e298]: Grant state flow into claimed output.
- - generic [ref=e299]:
- - generic [ref=e300]: flow
- - generic [ref=e301]: transition
- - generic [ref=e302]: receipt
- - link "multisig.cell Witness checks for threshold-style locks. lock witness threshold" [ref=e303] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/multisig.cell
- - heading "multisig.cell" [level=3] [ref=e304]:
- - code [ref=e305]: multisig.cell
- - paragraph [ref=e306]: Witness checks for threshold-style locks.
- - generic [ref=e307]:
- - generic [ref=e308]: lock
- - generic [ref=e309]: witness
- - generic [ref=e310]: threshold
- - link "timelock.cell Time-bound spending from Cell state. lock env timepoint" [ref=e311] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/timelock.cell
- - heading "timelock.cell" [level=3] [ref=e312]:
- - code [ref=e313]: timelock.cell
- - paragraph [ref=e314]: Time-bound spending from Cell state.
- - generic [ref=e315]:
- - generic [ref=e316]: lock
- - generic [ref=e317]: env
- - generic [ref=e318]: timepoint
- - contentinfo [ref=e319]:
- - generic [ref=e320]:
- - generic [ref=e321]:
- - link "CellScript" [ref=e322] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e324]: CellScript
- - paragraph [ref=e325]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e326]:
- - link "Docs" [ref=e327] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e328] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e329] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e330] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T06-04-13-837Z.yml b/.playwright-mcp/page-2026-06-02T06-04-13-837Z.yml
deleted file mode 100644
index ea61c7b2..00000000
--- a/.playwright-mcp/page-2026-06-02T06-04-13-837Z.yml
+++ /dev/null
@@ -1,323 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Model" [ref=e8] [cursor=pointer]:
- - /url: "#core-model"
- - link "Assurance" [ref=e9] [cursor=pointer]:
- - /url: "#assurance"
- - link "Commands" [ref=e10] [cursor=pointer]:
- - /url: "#tooling"
- - link "Examples" [ref=e11] [cursor=pointer]:
- - /url: "#examples"
- - link "Source" [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e13] [cursor=pointer]:
- - generic [ref=e16]: Dark
- - main [ref=e17]:
- - region "CellScript" [ref=e18]:
- - generic [ref=e19]:
- - heading "CellScript" [level=1] [ref=e20]
- - paragraph [ref=e21]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e22]:
- - link "Get started" [ref=e23] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e24] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e25]:
- - generic [ref=e26]:
- - term [ref=e27]: target
- - definition [ref=e28]: ckb-vm RISC-V
- - generic [ref=e29]:
- - term [ref=e30]: model
- - definition [ref=e31]: schema-backed Cells
- - generic [ref=e32]:
- - term [ref=e33]: output
- - definition [ref=e34]: metadata + ProofPlan
- - generic [ref=e35]:
- - generic [ref=e37]: token.cell
- - tablist "CellScript examples" [ref=e39]:
- - tab "Fungible Token" [selected] [ref=e40] [cursor=pointer]
- - tab "NFT" [ref=e41] [cursor=pointer]
- - tab "AMM Pool" [ref=e42] [cursor=pointer]
- - tab "Vesting" [ref=e43] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e45]:
- - generic [ref=e46]:
- - generic [ref=e47]: "1"
- - generic [ref=e48]: module cellscript::fungible_token
- - generic [ref=e49]:
- - generic [ref=e50]: "2"
- - generic [ref=e51]: // ... invariant and MintAuthority omitted
- - generic [ref=e52]:
- - generic [ref=e53]: "3"
- - generic [ref=e54]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e55]:
- - generic [ref=e56]: "4"
- - generic [ref=e57]: "amount: u64,"
- - generic [ref=e58]:
- - generic [ref=e59]: "5"
- - generic [ref=e60]: "symbol: [u8; 8],"
- - generic [ref=e61]:
- - generic [ref=e62]: "6"
- - generic [ref=e63]: "}"
- - generic [ref=e65]: "7"
- - generic [ref=e66]:
- - generic [ref=e67]: "8"
- - generic [ref=e68]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e69]:
- - generic [ref=e70]: "9"
- - generic [ref=e71]: where
- - generic [ref=e72]:
- - generic [ref=e73]: "10"
- - generic [ref=e74]: consume token
- - generic [ref=e75]:
- - generic [ref=e76]: "11"
- - generic [ref=e77]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e79]: "12"
- - generic [ref=e80]:
- - generic [ref=e81]: "13"
- - generic [ref=e82]: "action burn(token: Token)"
- - generic [ref=e83]:
- - generic [ref=e84]: "14"
- - generic [ref=e85]: where
- - generic [ref=e86]:
- - generic [ref=e87]: "15"
- - generic [ref=e88]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e89]:
- - generic [ref=e90]: "16"
- - generic [ref=e91]: destroy token
- - generic [ref=e92]:
- - generic [ref=e93]: $
- - generic [ref=e94]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e95]:
- - heading "Getting Started" [level=2] [ref=e96]
- - generic [ref=e97]:
- - article [ref=e98]:
- - generic [ref=e99]: "1"
- - heading "Install" [level=3] [ref=e100]
- - paragraph [ref=e101]:
- - code [ref=e102]: cargo install --path .
- - article [ref=e103]:
- - generic [ref=e104]: "2"
- - heading "Compile" [level=3] [ref=e105]
- - paragraph [ref=e106]:
- - code [ref=e107]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e108]:
- - generic [ref=e109]: "3"
- - heading "Check" [level=3] [ref=e110]
- - paragraph [ref=e111]:
- - code [ref=e112]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e113]:
- - heading "Compiler Workflow" [level=2] [ref=e114]
- - generic [ref=e115]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e116]:
- - article [ref=e117]:
- - img [ref=e119]:
- - generic [ref=e122]: .cell
- - heading "CellScript source" [level=3] [ref=e123]
- - img [ref=e125]
- - article [ref=e127]:
- - img [ref=e129]
- - heading "Parse & check" [level=3] [ref=e133]
- - paragraph [ref=e134]: Syntax, types, effects
- - img [ref=e136]
- - article [ref=e138]:
- - img [ref=e140]
- - heading "IR + Metadata" [level=3] [ref=e146]
- - paragraph [ref=e147]: Typed model & assurance info
- - img [ref=e149]
- - article [ref=e151]:
- - img [ref=e153]
- - heading "Lower to RISC-V" [level=3] [ref=e157]
- - paragraph [ref=e158]: ckb-vm codegen & optimisations
- - img [ref=e160]
- - article [ref=e162]:
- - img [ref=e164]:
- - generic [ref=e167]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e168]
- - paragraph [ref=e169]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e170]:
- - heading "Build for CKB" [level=3] [ref=e171]
- - list [ref=e172]:
- - listitem [ref=e173]:
- - img [ref=e174]
- - generic [ref=e176]: ckb-vm compatible
- - listitem [ref=e177]:
- - img [ref=e178]
- - generic [ref=e180]: Deterministic execution
- - listitem [ref=e181]:
- - img [ref=e182]
- - generic [ref=e184]: Minimal syscalls
- - listitem [ref=e185]:
- - img [ref=e186]
- - generic [ref=e188]: Scheduler-aware
- - region "Core Model" [ref=e189]:
- - heading "Core Model" [level=2] [ref=e190]
- - paragraph [ref=e191]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e192]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e193]:
- - tablist "CellScript core primitives" [ref=e194]:
- - tab "resource" [selected] [ref=e195] [cursor=pointer]:
- - generic [ref=e196]: resource
- - tab "shared" [ref=e197] [cursor=pointer]:
- - generic [ref=e198]: shared
- - tab "receipt" [ref=e199] [cursor=pointer]:
- - generic [ref=e200]: receipt
- - tab "action" [ref=e201] [cursor=pointer]:
- - generic [ref=e202]: action
- - tab "lock" [ref=e203] [cursor=pointer]:
- - generic [ref=e204]: lock
- - tab "flow" [ref=e205] [cursor=pointer]:
- - generic [ref=e206]: flow
- - tab "invariant" [ref=e207] [cursor=pointer]:
- - generic [ref=e208]: invariant
- - tab "struct / enum" [ref=e209] [cursor=pointer]:
- - generic [ref=e210]: struct / enum
- - tab "identity" [ref=e211] [cursor=pointer]:
- - generic [ref=e212]: identity
- - tabpanel "resource" [ref=e214]:
- - paragraph [ref=e216]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e217]:
- - generic [ref=e218]:
- - generic [ref=e219]: Example excerpt
- - generic [ref=e220]: examples/token.cell
- - generic [ref=e221]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e222]:
- - generic [ref=e223]:
- - heading "Assurance Output" [level=2] [ref=e224]
- - paragraph [ref=e225]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e227]:
- - generic "Assurance output summary" [ref=e228]:
- - article [ref=e229]:
- - text: Schema
- - strong [ref=e230]: v42
- - paragraph [ref=e231]: current compiler metadata schema
- - article [ref=e232]:
- - text: Source
- - strong [ref=e233]: vesting.cell
- - paragraph [ref=e234]: shared + receipt + flow
- - article [ref=e235]:
- - text: Boundary
- - strong [ref=e236]: local sidecar
- - paragraph [ref=e237]: validated; provenance required when shared
- - group [ref=e238]:
- - generic "- Metadata excerpt" [ref=e239] [cursor=pointer]
- - generic [ref=e240]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e241]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e242]:
- - heading "Tooling Surface" [level=2] [ref=e243]
- - generic [ref=e244]:
- - tablist "CellScript tooling commands" [ref=e245]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e246] [cursor=pointer]:
- - code [ref=e247]: cellc metadata
- - generic [ref=e248]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e249] [cursor=pointer]:
- - code [ref=e250]: cellc constraints
- - generic [ref=e251]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e252] [cursor=pointer]:
- - code [ref=e253]: cellc audit-bundle
- - generic [ref=e254]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e255] [cursor=pointer]:
- - code [ref=e256]: cellc lsp
- - generic [ref=e257]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e259]:
- - generic [ref=e260]:
- - generic [ref=e261]: When
- - paragraph [ref=e262]: Use before review or integration.
- - generic [ref=e263]: Output
- - paragraph [ref=e264]: Schema, effects, source hashes, target profile.
- - generic [ref=e265]:
- - code [ref=e266]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e267]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e268]:
- - heading "Examples" [level=2] [ref=e269]
- - generic [ref=e270]:
- - tablist "Example groups" [ref=e271]:
- - tab "Protocols 6 files" [selected] [ref=e272] [cursor=pointer]:
- - generic [ref=e273]: Protocols
- - generic [ref=e274]: 6 files
- - tab "Primitives 6 files" [ref=e275] [cursor=pointer]:
- - generic [ref=e276]: Primitives
- - generic [ref=e277]: 6 files
- - tab "Language 6 files" [ref=e278] [cursor=pointer]:
- - generic [ref=e279]: Language
- - generic [ref=e280]: 6 files
- - tabpanel "Protocols 6 files" [ref=e282]:
- - generic [ref=e283]:
- - paragraph [ref=e284]: End-to-end contract examples with Cells, actions, and constraints.
- - link "Open examples directory" [ref=e285] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - generic [ref=e286]:
- - link "examples/token.cell Fungible token Mint, transfer, burn, merge, and amount invariant. resource invariant burn" [ref=e287] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - generic [ref=e288]: examples/token.cell
- - heading "Fungible token" [level=3] [ref=e289]
- - paragraph [ref=e290]: Mint, transfer, burn, merge, and amount invariant.
- - generic [ref=e291]:
- - generic [ref=e292]: resource
- - generic [ref=e293]: invariant
- - generic [ref=e294]: burn
- - link "examples/nft.cell NFT marketplace Collection state, listing receipts, transfer, royalty payment. resource receipt preserve" [ref=e295] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - generic [ref=e296]: examples/nft.cell
- - heading "NFT marketplace" [level=3] [ref=e297]
- - paragraph [ref=e298]: Collection state, listing receipts, transfer, royalty payment.
- - generic [ref=e299]:
- - generic [ref=e300]: resource
- - generic [ref=e301]: receipt
- - generic [ref=e302]: preserve
- - link "examples/amm_pool.cell AMM pool Shared reserves, LP receipts, swap and liquidity actions. shared receipt slippage" [ref=e303] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - generic [ref=e304]: examples/amm_pool.cell
- - heading "AMM pool" [level=3] [ref=e305]
- - paragraph [ref=e306]: Shared reserves, LP receipts, swap and liquidity actions.
- - generic [ref=e307]:
- - generic [ref=e308]: shared
- - generic [ref=e309]: receipt
- - generic [ref=e310]: slippage
- - link "examples/vesting.cell Vesting Grant flow, timepoint checks, claim and revoke paths. flow receipt env" [ref=e311] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - generic [ref=e312]: examples/vesting.cell
- - heading "Vesting" [level=3] [ref=e313]
- - paragraph [ref=e314]: Grant flow, timepoint checks, claim and revoke paths.
- - generic [ref=e315]:
- - generic [ref=e316]: flow
- - generic [ref=e317]: receipt
- - generic [ref=e318]: env
- - link "examples/launch.cell Launch flow Launch state, settlement, and sale lifecycle. flow settle claim" [ref=e319] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/launch.cell
- - generic [ref=e320]: examples/launch.cell
- - heading "Launch flow" [level=3] [ref=e321]
- - paragraph [ref=e322]: Launch state, settlement, and sale lifecycle.
- - generic [ref=e323]:
- - generic [ref=e324]: flow
- - generic [ref=e325]: settle
- - generic [ref=e326]: claim
- - link "examples/registry.cell Registry Name ownership and registry-style state transitions. resource identity replace" [ref=e327] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/registry.cell
- - generic [ref=e328]: examples/registry.cell
- - heading "Registry" [level=3] [ref=e329]
- - paragraph [ref=e330]: Name ownership and registry-style state transitions.
- - generic [ref=e331]:
- - generic [ref=e332]: resource
- - generic [ref=e333]: identity
- - generic [ref=e334]: replace
- - contentinfo [ref=e335]:
- - generic [ref=e336]:
- - generic [ref=e337]:
- - link "CellScript" [ref=e338] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e340]: CellScript
- - paragraph [ref=e341]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e342]:
- - link "Docs" [ref=e343] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e344] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e345] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e346] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T06-05-49-895Z.yml b/.playwright-mcp/page-2026-06-02T06-05-49-895Z.yml
deleted file mode 100644
index ea61c7b2..00000000
--- a/.playwright-mcp/page-2026-06-02T06-05-49-895Z.yml
+++ /dev/null
@@ -1,323 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Model" [ref=e8] [cursor=pointer]:
- - /url: "#core-model"
- - link "Assurance" [ref=e9] [cursor=pointer]:
- - /url: "#assurance"
- - link "Commands" [ref=e10] [cursor=pointer]:
- - /url: "#tooling"
- - link "Examples" [ref=e11] [cursor=pointer]:
- - /url: "#examples"
- - link "Source" [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - button "Switch to dark mode" [pressed] [ref=e13] [cursor=pointer]:
- - generic [ref=e16]: Dark
- - main [ref=e17]:
- - region "CellScript" [ref=e18]:
- - generic [ref=e19]:
- - heading "CellScript" [level=1] [ref=e20]
- - paragraph [ref=e21]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e22]:
- - link "Get started" [ref=e23] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e24] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e25]:
- - generic [ref=e26]:
- - term [ref=e27]: target
- - definition [ref=e28]: ckb-vm RISC-V
- - generic [ref=e29]:
- - term [ref=e30]: model
- - definition [ref=e31]: schema-backed Cells
- - generic [ref=e32]:
- - term [ref=e33]: output
- - definition [ref=e34]: metadata + ProofPlan
- - generic [ref=e35]:
- - generic [ref=e37]: token.cell
- - tablist "CellScript examples" [ref=e39]:
- - tab "Fungible Token" [selected] [ref=e40] [cursor=pointer]
- - tab "NFT" [ref=e41] [cursor=pointer]
- - tab "AMM Pool" [ref=e42] [cursor=pointer]
- - tab "Vesting" [ref=e43] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e45]:
- - generic [ref=e46]:
- - generic [ref=e47]: "1"
- - generic [ref=e48]: module cellscript::fungible_token
- - generic [ref=e49]:
- - generic [ref=e50]: "2"
- - generic [ref=e51]: // ... invariant and MintAuthority omitted
- - generic [ref=e52]:
- - generic [ref=e53]: "3"
- - generic [ref=e54]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e55]:
- - generic [ref=e56]: "4"
- - generic [ref=e57]: "amount: u64,"
- - generic [ref=e58]:
- - generic [ref=e59]: "5"
- - generic [ref=e60]: "symbol: [u8; 8],"
- - generic [ref=e61]:
- - generic [ref=e62]: "6"
- - generic [ref=e63]: "}"
- - generic [ref=e65]: "7"
- - generic [ref=e66]:
- - generic [ref=e67]: "8"
- - generic [ref=e68]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e69]:
- - generic [ref=e70]: "9"
- - generic [ref=e71]: where
- - generic [ref=e72]:
- - generic [ref=e73]: "10"
- - generic [ref=e74]: consume token
- - generic [ref=e75]:
- - generic [ref=e76]: "11"
- - generic [ref=e77]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e79]: "12"
- - generic [ref=e80]:
- - generic [ref=e81]: "13"
- - generic [ref=e82]: "action burn(token: Token)"
- - generic [ref=e83]:
- - generic [ref=e84]: "14"
- - generic [ref=e85]: where
- - generic [ref=e86]:
- - generic [ref=e87]: "15"
- - generic [ref=e88]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e89]:
- - generic [ref=e90]: "16"
- - generic [ref=e91]: destroy token
- - generic [ref=e92]:
- - generic [ref=e93]: $
- - generic [ref=e94]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e95]:
- - heading "Getting Started" [level=2] [ref=e96]
- - generic [ref=e97]:
- - article [ref=e98]:
- - generic [ref=e99]: "1"
- - heading "Install" [level=3] [ref=e100]
- - paragraph [ref=e101]:
- - code [ref=e102]: cargo install --path .
- - article [ref=e103]:
- - generic [ref=e104]: "2"
- - heading "Compile" [level=3] [ref=e105]
- - paragraph [ref=e106]:
- - code [ref=e107]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e108]:
- - generic [ref=e109]: "3"
- - heading "Check" [level=3] [ref=e110]
- - paragraph [ref=e111]:
- - code [ref=e112]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e113]:
- - heading "Compiler Workflow" [level=2] [ref=e114]
- - generic [ref=e115]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e116]:
- - article [ref=e117]:
- - img [ref=e119]:
- - generic [ref=e122]: .cell
- - heading "CellScript source" [level=3] [ref=e123]
- - img [ref=e125]
- - article [ref=e127]:
- - img [ref=e129]
- - heading "Parse & check" [level=3] [ref=e133]
- - paragraph [ref=e134]: Syntax, types, effects
- - img [ref=e136]
- - article [ref=e138]:
- - img [ref=e140]
- - heading "IR + Metadata" [level=3] [ref=e146]
- - paragraph [ref=e147]: Typed model & assurance info
- - img [ref=e149]
- - article [ref=e151]:
- - img [ref=e153]
- - heading "Lower to RISC-V" [level=3] [ref=e157]
- - paragraph [ref=e158]: ckb-vm codegen & optimisations
- - img [ref=e160]
- - article [ref=e162]:
- - img [ref=e164]:
- - generic [ref=e167]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e168]
- - paragraph [ref=e169]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e170]:
- - heading "Build for CKB" [level=3] [ref=e171]
- - list [ref=e172]:
- - listitem [ref=e173]:
- - img [ref=e174]
- - generic [ref=e176]: ckb-vm compatible
- - listitem [ref=e177]:
- - img [ref=e178]
- - generic [ref=e180]: Deterministic execution
- - listitem [ref=e181]:
- - img [ref=e182]
- - generic [ref=e184]: Minimal syscalls
- - listitem [ref=e185]:
- - img [ref=e186]
- - generic [ref=e188]: Scheduler-aware
- - region "Core Model" [ref=e189]:
- - heading "Core Model" [level=2] [ref=e190]
- - paragraph [ref=e191]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e192]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e193]:
- - tablist "CellScript core primitives" [ref=e194]:
- - tab "resource" [selected] [ref=e195] [cursor=pointer]:
- - generic [ref=e196]: resource
- - tab "shared" [ref=e197] [cursor=pointer]:
- - generic [ref=e198]: shared
- - tab "receipt" [ref=e199] [cursor=pointer]:
- - generic [ref=e200]: receipt
- - tab "action" [ref=e201] [cursor=pointer]:
- - generic [ref=e202]: action
- - tab "lock" [ref=e203] [cursor=pointer]:
- - generic [ref=e204]: lock
- - tab "flow" [ref=e205] [cursor=pointer]:
- - generic [ref=e206]: flow
- - tab "invariant" [ref=e207] [cursor=pointer]:
- - generic [ref=e208]: invariant
- - tab "struct / enum" [ref=e209] [cursor=pointer]:
- - generic [ref=e210]: struct / enum
- - tab "identity" [ref=e211] [cursor=pointer]:
- - generic [ref=e212]: identity
- - tabpanel "resource" [ref=e214]:
- - paragraph [ref=e216]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e217]:
- - generic [ref=e218]:
- - generic [ref=e219]: Example excerpt
- - generic [ref=e220]: examples/token.cell
- - generic [ref=e221]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e222]:
- - generic [ref=e223]:
- - heading "Assurance Output" [level=2] [ref=e224]
- - paragraph [ref=e225]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e227]:
- - generic "Assurance output summary" [ref=e228]:
- - article [ref=e229]:
- - text: Schema
- - strong [ref=e230]: v42
- - paragraph [ref=e231]: current compiler metadata schema
- - article [ref=e232]:
- - text: Source
- - strong [ref=e233]: vesting.cell
- - paragraph [ref=e234]: shared + receipt + flow
- - article [ref=e235]:
- - text: Boundary
- - strong [ref=e236]: local sidecar
- - paragraph [ref=e237]: validated; provenance required when shared
- - group [ref=e238]:
- - generic "- Metadata excerpt" [ref=e239] [cursor=pointer]
- - generic [ref=e240]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e241]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e242]:
- - heading "Tooling Surface" [level=2] [ref=e243]
- - generic [ref=e244]:
- - tablist "CellScript tooling commands" [ref=e245]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e246] [cursor=pointer]:
- - code [ref=e247]: cellc metadata
- - generic [ref=e248]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e249] [cursor=pointer]:
- - code [ref=e250]: cellc constraints
- - generic [ref=e251]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e252] [cursor=pointer]:
- - code [ref=e253]: cellc audit-bundle
- - generic [ref=e254]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e255] [cursor=pointer]:
- - code [ref=e256]: cellc lsp
- - generic [ref=e257]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e259]:
- - generic [ref=e260]:
- - generic [ref=e261]: When
- - paragraph [ref=e262]: Use before review or integration.
- - generic [ref=e263]: Output
- - paragraph [ref=e264]: Schema, effects, source hashes, target profile.
- - generic [ref=e265]:
- - code [ref=e266]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e267]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e268]:
- - heading "Examples" [level=2] [ref=e269]
- - generic [ref=e270]:
- - tablist "Example groups" [ref=e271]:
- - tab "Protocols 6 files" [selected] [ref=e272] [cursor=pointer]:
- - generic [ref=e273]: Protocols
- - generic [ref=e274]: 6 files
- - tab "Primitives 6 files" [ref=e275] [cursor=pointer]:
- - generic [ref=e276]: Primitives
- - generic [ref=e277]: 6 files
- - tab "Language 6 files" [ref=e278] [cursor=pointer]:
- - generic [ref=e279]: Language
- - generic [ref=e280]: 6 files
- - tabpanel "Protocols 6 files" [ref=e282]:
- - generic [ref=e283]:
- - paragraph [ref=e284]: End-to-end contract examples with Cells, actions, and constraints.
- - link "Open examples directory" [ref=e285] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - generic [ref=e286]:
- - link "examples/token.cell Fungible token Mint, transfer, burn, merge, and amount invariant. resource invariant burn" [ref=e287] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - generic [ref=e288]: examples/token.cell
- - heading "Fungible token" [level=3] [ref=e289]
- - paragraph [ref=e290]: Mint, transfer, burn, merge, and amount invariant.
- - generic [ref=e291]:
- - generic [ref=e292]: resource
- - generic [ref=e293]: invariant
- - generic [ref=e294]: burn
- - link "examples/nft.cell NFT marketplace Collection state, listing receipts, transfer, royalty payment. resource receipt preserve" [ref=e295] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - generic [ref=e296]: examples/nft.cell
- - heading "NFT marketplace" [level=3] [ref=e297]
- - paragraph [ref=e298]: Collection state, listing receipts, transfer, royalty payment.
- - generic [ref=e299]:
- - generic [ref=e300]: resource
- - generic [ref=e301]: receipt
- - generic [ref=e302]: preserve
- - link "examples/amm_pool.cell AMM pool Shared reserves, LP receipts, swap and liquidity actions. shared receipt slippage" [ref=e303] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - generic [ref=e304]: examples/amm_pool.cell
- - heading "AMM pool" [level=3] [ref=e305]
- - paragraph [ref=e306]: Shared reserves, LP receipts, swap and liquidity actions.
- - generic [ref=e307]:
- - generic [ref=e308]: shared
- - generic [ref=e309]: receipt
- - generic [ref=e310]: slippage
- - link "examples/vesting.cell Vesting Grant flow, timepoint checks, claim and revoke paths. flow receipt env" [ref=e311] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - generic [ref=e312]: examples/vesting.cell
- - heading "Vesting" [level=3] [ref=e313]
- - paragraph [ref=e314]: Grant flow, timepoint checks, claim and revoke paths.
- - generic [ref=e315]:
- - generic [ref=e316]: flow
- - generic [ref=e317]: receipt
- - generic [ref=e318]: env
- - link "examples/launch.cell Launch flow Launch state, settlement, and sale lifecycle. flow settle claim" [ref=e319] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/launch.cell
- - generic [ref=e320]: examples/launch.cell
- - heading "Launch flow" [level=3] [ref=e321]
- - paragraph [ref=e322]: Launch state, settlement, and sale lifecycle.
- - generic [ref=e323]:
- - generic [ref=e324]: flow
- - generic [ref=e325]: settle
- - generic [ref=e326]: claim
- - link "examples/registry.cell Registry Name ownership and registry-style state transitions. resource identity replace" [ref=e327] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/registry.cell
- - generic [ref=e328]: examples/registry.cell
- - heading "Registry" [level=3] [ref=e329]
- - paragraph [ref=e330]: Name ownership and registry-style state transitions.
- - generic [ref=e331]:
- - generic [ref=e332]: resource
- - generic [ref=e333]: identity
- - generic [ref=e334]: replace
- - contentinfo [ref=e335]:
- - generic [ref=e336]:
- - generic [ref=e337]:
- - link "CellScript" [ref=e338] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e340]: CellScript
- - paragraph [ref=e341]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e342]:
- - link "Docs" [ref=e343] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e344] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e345] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e346] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T06-17-07-504Z.yml b/.playwright-mcp/page-2026-06-02T06-17-07-504Z.yml
deleted file mode 100644
index 79cd93ef..00000000
--- a/.playwright-mcp/page-2026-06-02T06-17-07-504Z.yml
+++ /dev/null
@@ -1,320 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Docs" [ref=e8] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - img [ref=e9]
- - generic [ref=e12]: Docs
- - link "Source" [ref=e13] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - img [ref=e14]
- - generic [ref=e16]: Source
- - button "Switch to dark mode" [pressed] [ref=e17] [cursor=pointer]
- - main [ref=e20]:
- - region "CellScript" [ref=e21]:
- - generic [ref=e22]:
- - heading "CellScript" [level=1] [ref=e23]
- - paragraph [ref=e24]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e25]:
- - link "Get started" [ref=e26] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e27] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e28]:
- - generic [ref=e29]:
- - term [ref=e30]: target
- - definition [ref=e31]: ckb-vm RISC-V
- - generic [ref=e32]:
- - term [ref=e33]: model
- - definition [ref=e34]: schema-backed Cells
- - generic [ref=e35]:
- - term [ref=e36]: output
- - definition [ref=e37]: metadata + ProofPlan
- - generic [ref=e38]:
- - generic [ref=e40]: token.cell
- - combobox "Choose CellScript example" [ref=e42]:
- - option "Fungible Token" [selected]
- - option "NFT"
- - option "AMM Pool"
- - option "Vesting"
- - tabpanel "Fungible Token" [ref=e44]:
- - generic [ref=e45]:
- - generic [ref=e46]: "1"
- - generic [ref=e47]: module cellscript::fungible_token
- - generic [ref=e48]:
- - generic [ref=e49]: "2"
- - generic [ref=e50]: // ... invariant and MintAuthority omitted
- - generic [ref=e51]:
- - generic [ref=e52]: "3"
- - generic [ref=e53]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e54]:
- - generic [ref=e55]: "4"
- - generic [ref=e56]: "amount: u64,"
- - generic [ref=e57]:
- - generic [ref=e58]: "5"
- - generic [ref=e59]: "symbol: [u8; 8],"
- - generic [ref=e60]:
- - generic [ref=e61]: "6"
- - generic [ref=e62]: "}"
- - generic [ref=e64]: "7"
- - generic [ref=e65]:
- - generic [ref=e66]: "8"
- - generic [ref=e67]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e68]:
- - generic [ref=e69]: "9"
- - generic [ref=e70]: where
- - generic [ref=e71]:
- - generic [ref=e72]: "10"
- - generic [ref=e73]: consume token
- - generic [ref=e74]:
- - generic [ref=e75]: "11"
- - generic [ref=e76]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e78]: "12"
- - generic [ref=e79]:
- - generic [ref=e80]: "13"
- - generic [ref=e81]: "action burn(token: Token)"
- - generic [ref=e82]:
- - generic [ref=e83]: "14"
- - generic [ref=e84]: where
- - generic [ref=e85]:
- - generic [ref=e86]: "15"
- - generic [ref=e87]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e88]:
- - generic [ref=e89]: "16"
- - generic [ref=e90]: destroy token
- - generic [ref=e91]:
- - generic [ref=e92]: $
- - generic [ref=e93]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e94]:
- - heading "Getting Started" [level=2] [ref=e95]
- - generic [ref=e96]:
- - article [ref=e97]:
- - generic [ref=e98]: "1"
- - heading "Install" [level=3] [ref=e99]
- - paragraph [ref=e100]:
- - code [ref=e101]: cargo install --path .
- - article [ref=e102]:
- - generic [ref=e103]: "2"
- - heading "Compile" [level=3] [ref=e104]
- - paragraph [ref=e105]:
- - code [ref=e106]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e107]:
- - generic [ref=e108]: "3"
- - heading "Check" [level=3] [ref=e109]
- - paragraph [ref=e110]:
- - code [ref=e111]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e112]:
- - heading "Compiler Workflow" [level=2] [ref=e113]
- - generic [ref=e114]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e115]:
- - article [ref=e116]:
- - img [ref=e118]:
- - generic [ref=e121]: .cell
- - heading "CellScript source" [level=3] [ref=e122]
- - img [ref=e124]
- - article [ref=e126]:
- - img [ref=e128]
- - heading "Parse & check" [level=3] [ref=e132]
- - paragraph [ref=e133]: Syntax, types, effects
- - img [ref=e135]
- - article [ref=e137]:
- - img [ref=e139]
- - heading "IR + Metadata" [level=3] [ref=e145]
- - paragraph [ref=e146]: Typed model & assurance info
- - img [ref=e148]
- - article [ref=e150]:
- - img [ref=e152]
- - heading "Lower to RISC-V" [level=3] [ref=e156]
- - paragraph [ref=e157]: ckb-vm codegen & optimisations
- - img [ref=e159]
- - article [ref=e161]:
- - img [ref=e163]:
- - generic [ref=e166]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e167]
- - paragraph [ref=e168]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e169]:
- - heading "Build for CKB" [level=3] [ref=e170]
- - list [ref=e171]:
- - listitem [ref=e172]:
- - img [ref=e173]
- - generic [ref=e175]: ckb-vm compatible
- - listitem [ref=e176]:
- - img [ref=e177]
- - generic [ref=e179]: Deterministic execution
- - listitem [ref=e180]:
- - img [ref=e181]
- - generic [ref=e183]: Minimal syscalls
- - listitem [ref=e184]:
- - img [ref=e185]
- - generic [ref=e187]: Scheduler-aware
- - region "Core Model" [ref=e188]:
- - heading "Core Model" [level=2] [ref=e189]
- - paragraph [ref=e190]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e191]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e192]:
- - tablist "CellScript core primitives" [ref=e193]:
- - tab "resource" [selected] [ref=e194] [cursor=pointer]:
- - generic [ref=e195]: resource
- - tab "shared" [ref=e196] [cursor=pointer]:
- - generic [ref=e197]: shared
- - tab "receipt" [ref=e198] [cursor=pointer]:
- - generic [ref=e199]: receipt
- - tab "action" [ref=e200] [cursor=pointer]:
- - generic [ref=e201]: action
- - tab "lock" [ref=e202] [cursor=pointer]:
- - generic [ref=e203]: lock
- - tab "flow" [ref=e204] [cursor=pointer]:
- - generic [ref=e205]: flow
- - tab "invariant" [ref=e206] [cursor=pointer]:
- - generic [ref=e207]: invariant
- - tab "struct / enum" [ref=e208] [cursor=pointer]:
- - generic [ref=e209]: struct / enum
- - tab "identity" [ref=e210] [cursor=pointer]:
- - generic [ref=e211]: identity
- - tabpanel "resource" [ref=e213]:
- - paragraph [ref=e215]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e216]:
- - generic [ref=e217]:
- - generic [ref=e218]: Example excerpt
- - generic [ref=e219]: examples/token.cell
- - generic [ref=e220]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e221]:
- - generic [ref=e222]:
- - heading "Assurance Output" [level=2] [ref=e223]
- - paragraph [ref=e224]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e226]:
- - generic "Assurance output summary" [ref=e227]:
- - article [ref=e228]:
- - text: Schema
- - strong [ref=e229]: v42
- - paragraph [ref=e230]: current compiler metadata schema
- - article [ref=e231]:
- - text: Source
- - strong [ref=e232]: vesting.cell
- - paragraph [ref=e233]: shared + receipt + flow
- - article [ref=e234]:
- - text: Boundary
- - strong [ref=e235]: local sidecar
- - paragraph [ref=e236]: validated; provenance required when shared
- - group [ref=e237]:
- - generic "- Metadata excerpt" [ref=e238] [cursor=pointer]
- - generic [ref=e239]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e240]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e241]:
- - heading "Tooling Surface" [level=2] [ref=e242]
- - generic [ref=e243]:
- - tablist "CellScript tooling commands" [ref=e244]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e245] [cursor=pointer]:
- - code [ref=e246]: cellc metadata
- - generic [ref=e247]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e248] [cursor=pointer]:
- - code [ref=e249]: cellc constraints
- - generic [ref=e250]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e251] [cursor=pointer]:
- - code [ref=e252]: cellc audit-bundle
- - generic [ref=e253]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e254] [cursor=pointer]:
- - code [ref=e255]: cellc lsp
- - generic [ref=e256]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e258]:
- - generic [ref=e259]:
- - generic [ref=e260]: When
- - paragraph [ref=e261]: Use before review or integration.
- - generic [ref=e262]: Output
- - paragraph [ref=e263]: Schema, effects, source hashes, target profile.
- - generic [ref=e264]:
- - code [ref=e265]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e266]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e267]:
- - heading "Examples" [level=2] [ref=e268]
- - generic [ref=e269]:
- - tablist "Example groups" [ref=e270]:
- - tab "Protocols 6 files" [selected] [ref=e271] [cursor=pointer]:
- - generic [ref=e272]: Protocols
- - generic [ref=e273]: 6 files
- - tab "Primitives 6 files" [ref=e274] [cursor=pointer]:
- - generic [ref=e275]: Primitives
- - generic [ref=e276]: 6 files
- - tab "Language 6 files" [ref=e277] [cursor=pointer]:
- - generic [ref=e278]: Language
- - generic [ref=e279]: 6 files
- - tabpanel "Protocols 6 files" [ref=e281]:
- - generic [ref=e282]:
- - paragraph [ref=e283]: End-to-end contract examples with Cells, actions, and constraints.
- - link "Open examples directory" [ref=e284] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - generic [ref=e285]:
- - link "examples/token.cell Fungible token Mint, transfer, burn, merge, and amount invariant. resource invariant burn" [ref=e286] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - generic [ref=e287]: examples/token.cell
- - heading "Fungible token" [level=3] [ref=e288]
- - paragraph [ref=e289]: Mint, transfer, burn, merge, and amount invariant.
- - generic [ref=e290]:
- - generic [ref=e291]: resource
- - generic [ref=e292]: invariant
- - generic [ref=e293]: burn
- - link "examples/nft.cell NFT marketplace Collection state, listing receipts, transfer, royalty payment. resource receipt preserve" [ref=e294] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - generic [ref=e295]: examples/nft.cell
- - heading "NFT marketplace" [level=3] [ref=e296]
- - paragraph [ref=e297]: Collection state, listing receipts, transfer, royalty payment.
- - generic [ref=e298]:
- - generic [ref=e299]: resource
- - generic [ref=e300]: receipt
- - generic [ref=e301]: preserve
- - link "examples/amm_pool.cell AMM pool Shared reserves, LP receipts, swap and liquidity actions. shared receipt slippage" [ref=e302] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - generic [ref=e303]: examples/amm_pool.cell
- - heading "AMM pool" [level=3] [ref=e304]
- - paragraph [ref=e305]: Shared reserves, LP receipts, swap and liquidity actions.
- - generic [ref=e306]:
- - generic [ref=e307]: shared
- - generic [ref=e308]: receipt
- - generic [ref=e309]: slippage
- - link "examples/vesting.cell Vesting Grant flow, timepoint checks, claim and revoke paths. flow receipt env" [ref=e310] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - generic [ref=e311]: examples/vesting.cell
- - heading "Vesting" [level=3] [ref=e312]
- - paragraph [ref=e313]: Grant flow, timepoint checks, claim and revoke paths.
- - generic [ref=e314]:
- - generic [ref=e315]: flow
- - generic [ref=e316]: receipt
- - generic [ref=e317]: env
- - link "examples/launch.cell Launch flow Launch state, settlement, and sale lifecycle. flow settle claim" [ref=e318] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/launch.cell
- - generic [ref=e319]: examples/launch.cell
- - heading "Launch flow" [level=3] [ref=e320]
- - paragraph [ref=e321]: Launch state, settlement, and sale lifecycle.
- - generic [ref=e322]:
- - generic [ref=e323]: flow
- - generic [ref=e324]: settle
- - generic [ref=e325]: claim
- - link "examples/registry.cell Registry Name ownership and registry-style state transitions. resource identity replace" [ref=e326] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/registry.cell
- - generic [ref=e327]: examples/registry.cell
- - heading "Registry" [level=3] [ref=e328]
- - paragraph [ref=e329]: Name ownership and registry-style state transitions.
- - generic [ref=e330]:
- - generic [ref=e331]: resource
- - generic [ref=e332]: identity
- - generic [ref=e333]: replace
- - contentinfo [ref=e334]:
- - generic [ref=e335]:
- - generic [ref=e336]:
- - link "CellScript" [ref=e337] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e339]: CellScript
- - paragraph [ref=e340]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e341]:
- - link "Docs" [ref=e342] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e343] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e344] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e345] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T06-22-57-012Z.yml b/.playwright-mcp/page-2026-06-02T06-22-57-012Z.yml
deleted file mode 100644
index 8dc7b9da..00000000
--- a/.playwright-mcp/page-2026-06-02T06-22-57-012Z.yml
+++ /dev/null
@@ -1,318 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link [ref=e8] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - img [ref=e9]
- - link [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - img [ref=e13]
- - button "Switch to dark mode" [pressed] [ref=e15] [cursor=pointer]
- - main [ref=e18]:
- - region "CellScript" [ref=e19]:
- - generic [ref=e20]:
- - heading "CellScript" [level=1] [ref=e21]
- - paragraph [ref=e22]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e23]:
- - link "Get started" [ref=e24] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e25] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e26]:
- - generic [ref=e27]:
- - term [ref=e28]: target
- - definition [ref=e29]: ckb-vm RISC-V
- - generic [ref=e30]:
- - term [ref=e31]: model
- - definition [ref=e32]: schema-backed Cells
- - generic [ref=e33]:
- - term [ref=e34]: output
- - definition [ref=e35]: metadata + ProofPlan
- - generic [ref=e36]:
- - generic [ref=e38]: token.cell
- - combobox "Choose CellScript example" [ref=e40]:
- - option "Fungible Token" [selected]
- - option "NFT"
- - option "AMM Pool"
- - option "Vesting"
- - tabpanel "Fungible Token" [ref=e42]:
- - generic [ref=e43]:
- - generic [ref=e44]: "1"
- - generic [ref=e45]: module cellscript::fungible_token
- - generic [ref=e46]:
- - generic [ref=e47]: "2"
- - generic [ref=e48]: // ... invariant and MintAuthority omitted
- - generic [ref=e49]:
- - generic [ref=e50]: "3"
- - generic [ref=e51]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e52]:
- - generic [ref=e53]: "4"
- - generic [ref=e54]: "amount: u64,"
- - generic [ref=e55]:
- - generic [ref=e56]: "5"
- - generic [ref=e57]: "symbol: [u8; 8],"
- - generic [ref=e58]:
- - generic [ref=e59]: "6"
- - generic [ref=e60]: "}"
- - generic [ref=e62]: "7"
- - generic [ref=e63]:
- - generic [ref=e64]: "8"
- - generic [ref=e65]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e66]:
- - generic [ref=e67]: "9"
- - generic [ref=e68]: where
- - generic [ref=e69]:
- - generic [ref=e70]: "10"
- - generic [ref=e71]: consume token
- - generic [ref=e72]:
- - generic [ref=e73]: "11"
- - generic [ref=e74]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e76]: "12"
- - generic [ref=e77]:
- - generic [ref=e78]: "13"
- - generic [ref=e79]: "action burn(token: Token)"
- - generic [ref=e80]:
- - generic [ref=e81]: "14"
- - generic [ref=e82]: where
- - generic [ref=e83]:
- - generic [ref=e84]: "15"
- - generic [ref=e85]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e86]:
- - generic [ref=e87]: "16"
- - generic [ref=e88]: destroy token
- - generic [ref=e89]:
- - generic [ref=e90]: $
- - generic [ref=e91]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e92]:
- - heading "Getting Started" [level=2] [ref=e93]
- - generic [ref=e94]:
- - article [ref=e95]:
- - generic [ref=e96]: "1"
- - heading "Install" [level=3] [ref=e97]
- - paragraph [ref=e98]:
- - code [ref=e99]: cargo install --path .
- - article [ref=e100]:
- - generic [ref=e101]: "2"
- - heading "Compile" [level=3] [ref=e102]
- - paragraph [ref=e103]:
- - code [ref=e104]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e105]:
- - generic [ref=e106]: "3"
- - heading "Check" [level=3] [ref=e107]
- - paragraph [ref=e108]:
- - code [ref=e109]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e110]:
- - heading "Compiler Workflow" [level=2] [ref=e111]
- - generic [ref=e112]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e113]:
- - article [ref=e114]:
- - img [ref=e116]:
- - generic [ref=e119]: .cell
- - heading "CellScript source" [level=3] [ref=e120]
- - img [ref=e122]
- - article [ref=e124]:
- - img [ref=e126]
- - heading "Parse & check" [level=3] [ref=e130]
- - paragraph [ref=e131]: Syntax, types, effects
- - img [ref=e133]
- - article [ref=e135]:
- - img [ref=e137]
- - heading "IR + Metadata" [level=3] [ref=e143]
- - paragraph [ref=e144]: Typed model & assurance info
- - img [ref=e146]
- - article [ref=e148]:
- - img [ref=e150]
- - heading "Lower to RISC-V" [level=3] [ref=e154]
- - paragraph [ref=e155]: ckb-vm codegen & optimisations
- - img [ref=e157]
- - article [ref=e159]:
- - img [ref=e161]:
- - generic [ref=e164]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e165]
- - paragraph [ref=e166]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e167]:
- - heading "Build for CKB" [level=3] [ref=e168]
- - list [ref=e169]:
- - listitem [ref=e170]:
- - img [ref=e171]
- - generic [ref=e173]: ckb-vm compatible
- - listitem [ref=e174]:
- - img [ref=e175]
- - generic [ref=e177]: Deterministic execution
- - listitem [ref=e178]:
- - img [ref=e179]
- - generic [ref=e181]: Minimal syscalls
- - listitem [ref=e182]:
- - img [ref=e183]
- - generic [ref=e185]: Scheduler-aware
- - region "Core Model" [ref=e186]:
- - heading "Core Model" [level=2] [ref=e187]
- - paragraph [ref=e188]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e189]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e190]:
- - tablist "CellScript core primitives" [ref=e191]:
- - tab "resource" [selected] [ref=e192] [cursor=pointer]:
- - generic [ref=e193]: resource
- - tab "shared" [ref=e194] [cursor=pointer]:
- - generic [ref=e195]: shared
- - tab "receipt" [ref=e196] [cursor=pointer]:
- - generic [ref=e197]: receipt
- - tab "action" [ref=e198] [cursor=pointer]:
- - generic [ref=e199]: action
- - tab "lock" [ref=e200] [cursor=pointer]:
- - generic [ref=e201]: lock
- - tab "flow" [ref=e202] [cursor=pointer]:
- - generic [ref=e203]: flow
- - tab "invariant" [ref=e204] [cursor=pointer]:
- - generic [ref=e205]: invariant
- - tab "struct / enum" [ref=e206] [cursor=pointer]:
- - generic [ref=e207]: struct / enum
- - tab "identity" [ref=e208] [cursor=pointer]:
- - generic [ref=e209]: identity
- - tabpanel "resource" [ref=e211]:
- - paragraph [ref=e213]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e214]:
- - generic [ref=e215]:
- - generic [ref=e216]: Example excerpt
- - generic [ref=e217]: examples/token.cell
- - generic [ref=e218]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e219]:
- - generic [ref=e220]:
- - heading "Assurance Output" [level=2] [ref=e221]
- - paragraph [ref=e222]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e224]:
- - generic "Assurance output summary" [ref=e225]:
- - article [ref=e226]:
- - text: Schema
- - strong [ref=e227]: v42
- - paragraph [ref=e228]: current compiler metadata schema
- - article [ref=e229]:
- - text: Source
- - strong [ref=e230]: vesting.cell
- - paragraph [ref=e231]: shared + receipt + flow
- - article [ref=e232]:
- - text: Boundary
- - strong [ref=e233]: local sidecar
- - paragraph [ref=e234]: validated; provenance required when shared
- - group [ref=e235]:
- - generic "- Metadata excerpt" [ref=e236] [cursor=pointer]
- - generic [ref=e237]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e238]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e239]:
- - heading "Tooling Surface" [level=2] [ref=e240]
- - generic [ref=e241]:
- - tablist "CellScript tooling commands" [ref=e242]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e243] [cursor=pointer]:
- - code [ref=e244]: cellc metadata
- - generic [ref=e245]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e246] [cursor=pointer]:
- - code [ref=e247]: cellc constraints
- - generic [ref=e248]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e249] [cursor=pointer]:
- - code [ref=e250]: cellc audit-bundle
- - generic [ref=e251]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e252] [cursor=pointer]:
- - code [ref=e253]: cellc lsp
- - generic [ref=e254]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e256]:
- - generic [ref=e257]:
- - generic [ref=e258]: When
- - paragraph [ref=e259]: Use before review or integration.
- - generic [ref=e260]: Output
- - paragraph [ref=e261]: Schema, effects, source hashes, target profile.
- - generic [ref=e262]:
- - code [ref=e263]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e264]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e265]:
- - heading "Examples" [level=2] [ref=e266]
- - generic [ref=e267]:
- - tablist "Example groups" [ref=e268]:
- - tab "Protocols 6 files" [selected] [ref=e269] [cursor=pointer]:
- - generic [ref=e270]: Protocols
- - generic [ref=e271]: 6 files
- - tab "Primitives 6 files" [ref=e272] [cursor=pointer]:
- - generic [ref=e273]: Primitives
- - generic [ref=e274]: 6 files
- - tab "Language 6 files" [ref=e275] [cursor=pointer]:
- - generic [ref=e276]: Language
- - generic [ref=e277]: 6 files
- - tabpanel "Protocols 6 files" [ref=e279]:
- - generic [ref=e280]:
- - paragraph [ref=e281]: End-to-end contract examples with Cells, actions, and constraints.
- - link "Open examples directory" [ref=e282] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - generic [ref=e283]:
- - link "examples/token.cell Fungible token Mint, transfer, burn, merge, and amount invariant. resource invariant burn" [ref=e284] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - generic [ref=e285]: examples/token.cell
- - heading "Fungible token" [level=3] [ref=e286]
- - paragraph [ref=e287]: Mint, transfer, burn, merge, and amount invariant.
- - generic [ref=e288]:
- - generic [ref=e289]: resource
- - generic [ref=e290]: invariant
- - generic [ref=e291]: burn
- - link "examples/nft.cell NFT marketplace Collection state, listing receipts, transfer, royalty payment. resource receipt preserve" [ref=e292] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - generic [ref=e293]: examples/nft.cell
- - heading "NFT marketplace" [level=3] [ref=e294]
- - paragraph [ref=e295]: Collection state, listing receipts, transfer, royalty payment.
- - generic [ref=e296]:
- - generic [ref=e297]: resource
- - generic [ref=e298]: receipt
- - generic [ref=e299]: preserve
- - link "examples/amm_pool.cell AMM pool Shared reserves, LP receipts, swap and liquidity actions. shared receipt slippage" [ref=e300] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - generic [ref=e301]: examples/amm_pool.cell
- - heading "AMM pool" [level=3] [ref=e302]
- - paragraph [ref=e303]: Shared reserves, LP receipts, swap and liquidity actions.
- - generic [ref=e304]:
- - generic [ref=e305]: shared
- - generic [ref=e306]: receipt
- - generic [ref=e307]: slippage
- - link "examples/vesting.cell Vesting Grant flow, timepoint checks, claim and revoke paths. flow receipt env" [ref=e308] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - generic [ref=e309]: examples/vesting.cell
- - heading "Vesting" [level=3] [ref=e310]
- - paragraph [ref=e311]: Grant flow, timepoint checks, claim and revoke paths.
- - generic [ref=e312]:
- - generic [ref=e313]: flow
- - generic [ref=e314]: receipt
- - generic [ref=e315]: env
- - link "examples/launch.cell Launch flow Launch state, settlement, and sale lifecycle. flow settle claim" [ref=e316] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/launch.cell
- - generic [ref=e317]: examples/launch.cell
- - heading "Launch flow" [level=3] [ref=e318]
- - paragraph [ref=e319]: Launch state, settlement, and sale lifecycle.
- - generic [ref=e320]:
- - generic [ref=e321]: flow
- - generic [ref=e322]: settle
- - generic [ref=e323]: claim
- - link "examples/registry.cell Registry Name ownership and registry-style state transitions. resource identity replace" [ref=e324] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/registry.cell
- - generic [ref=e325]: examples/registry.cell
- - heading "Registry" [level=3] [ref=e326]
- - paragraph [ref=e327]: Name ownership and registry-style state transitions.
- - generic [ref=e328]:
- - generic [ref=e329]: resource
- - generic [ref=e330]: identity
- - generic [ref=e331]: replace
- - contentinfo [ref=e332]:
- - generic [ref=e333]:
- - generic [ref=e334]:
- - link "CellScript" [ref=e335] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e337]: CellScript
- - paragraph [ref=e338]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e339]:
- - link "Docs" [ref=e340] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e341] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e342] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e343] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T06-24-37-533Z.yml b/.playwright-mcp/page-2026-06-02T06-24-37-533Z.yml
deleted file mode 100644
index 8dc7b9da..00000000
--- a/.playwright-mcp/page-2026-06-02T06-24-37-533Z.yml
+++ /dev/null
@@ -1,318 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link [ref=e8] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - img [ref=e9]
- - link [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - img [ref=e13]
- - button "Switch to dark mode" [pressed] [ref=e15] [cursor=pointer]
- - main [ref=e18]:
- - region "CellScript" [ref=e19]:
- - generic [ref=e20]:
- - heading "CellScript" [level=1] [ref=e21]
- - paragraph [ref=e22]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e23]:
- - link "Get started" [ref=e24] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e25] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e26]:
- - generic [ref=e27]:
- - term [ref=e28]: target
- - definition [ref=e29]: ckb-vm RISC-V
- - generic [ref=e30]:
- - term [ref=e31]: model
- - definition [ref=e32]: schema-backed Cells
- - generic [ref=e33]:
- - term [ref=e34]: output
- - definition [ref=e35]: metadata + ProofPlan
- - generic [ref=e36]:
- - generic [ref=e38]: token.cell
- - combobox "Choose CellScript example" [ref=e40]:
- - option "Fungible Token" [selected]
- - option "NFT"
- - option "AMM Pool"
- - option "Vesting"
- - tabpanel "Fungible Token" [ref=e42]:
- - generic [ref=e43]:
- - generic [ref=e44]: "1"
- - generic [ref=e45]: module cellscript::fungible_token
- - generic [ref=e46]:
- - generic [ref=e47]: "2"
- - generic [ref=e48]: // ... invariant and MintAuthority omitted
- - generic [ref=e49]:
- - generic [ref=e50]: "3"
- - generic [ref=e51]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e52]:
- - generic [ref=e53]: "4"
- - generic [ref=e54]: "amount: u64,"
- - generic [ref=e55]:
- - generic [ref=e56]: "5"
- - generic [ref=e57]: "symbol: [u8; 8],"
- - generic [ref=e58]:
- - generic [ref=e59]: "6"
- - generic [ref=e60]: "}"
- - generic [ref=e62]: "7"
- - generic [ref=e63]:
- - generic [ref=e64]: "8"
- - generic [ref=e65]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e66]:
- - generic [ref=e67]: "9"
- - generic [ref=e68]: where
- - generic [ref=e69]:
- - generic [ref=e70]: "10"
- - generic [ref=e71]: consume token
- - generic [ref=e72]:
- - generic [ref=e73]: "11"
- - generic [ref=e74]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e76]: "12"
- - generic [ref=e77]:
- - generic [ref=e78]: "13"
- - generic [ref=e79]: "action burn(token: Token)"
- - generic [ref=e80]:
- - generic [ref=e81]: "14"
- - generic [ref=e82]: where
- - generic [ref=e83]:
- - generic [ref=e84]: "15"
- - generic [ref=e85]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e86]:
- - generic [ref=e87]: "16"
- - generic [ref=e88]: destroy token
- - generic [ref=e89]:
- - generic [ref=e90]: $
- - generic [ref=e91]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e92]:
- - heading "Getting Started" [level=2] [ref=e93]
- - generic [ref=e94]:
- - article [ref=e95]:
- - generic [ref=e96]: "1"
- - heading "Install" [level=3] [ref=e97]
- - paragraph [ref=e98]:
- - code [ref=e99]: cargo install --path .
- - article [ref=e100]:
- - generic [ref=e101]: "2"
- - heading "Compile" [level=3] [ref=e102]
- - paragraph [ref=e103]:
- - code [ref=e104]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e105]:
- - generic [ref=e106]: "3"
- - heading "Check" [level=3] [ref=e107]
- - paragraph [ref=e108]:
- - code [ref=e109]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e110]:
- - heading "Compiler Workflow" [level=2] [ref=e111]
- - generic [ref=e112]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e113]:
- - article [ref=e114]:
- - img [ref=e116]:
- - generic [ref=e119]: .cell
- - heading "CellScript source" [level=3] [ref=e120]
- - img [ref=e122]
- - article [ref=e124]:
- - img [ref=e126]
- - heading "Parse & check" [level=3] [ref=e130]
- - paragraph [ref=e131]: Syntax, types, effects
- - img [ref=e133]
- - article [ref=e135]:
- - img [ref=e137]
- - heading "IR + Metadata" [level=3] [ref=e143]
- - paragraph [ref=e144]: Typed model & assurance info
- - img [ref=e146]
- - article [ref=e148]:
- - img [ref=e150]
- - heading "Lower to RISC-V" [level=3] [ref=e154]
- - paragraph [ref=e155]: ckb-vm codegen & optimisations
- - img [ref=e157]
- - article [ref=e159]:
- - img [ref=e161]:
- - generic [ref=e164]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e165]
- - paragraph [ref=e166]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e167]:
- - heading "Build for CKB" [level=3] [ref=e168]
- - list [ref=e169]:
- - listitem [ref=e170]:
- - img [ref=e171]
- - generic [ref=e173]: ckb-vm compatible
- - listitem [ref=e174]:
- - img [ref=e175]
- - generic [ref=e177]: Deterministic execution
- - listitem [ref=e178]:
- - img [ref=e179]
- - generic [ref=e181]: Minimal syscalls
- - listitem [ref=e182]:
- - img [ref=e183]
- - generic [ref=e185]: Scheduler-aware
- - region "Core Model" [ref=e186]:
- - heading "Core Model" [level=2] [ref=e187]
- - paragraph [ref=e188]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e189]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e190]:
- - tablist "CellScript core primitives" [ref=e191]:
- - tab "resource" [selected] [ref=e192] [cursor=pointer]:
- - generic [ref=e193]: resource
- - tab "shared" [ref=e194] [cursor=pointer]:
- - generic [ref=e195]: shared
- - tab "receipt" [ref=e196] [cursor=pointer]:
- - generic [ref=e197]: receipt
- - tab "action" [ref=e198] [cursor=pointer]:
- - generic [ref=e199]: action
- - tab "lock" [ref=e200] [cursor=pointer]:
- - generic [ref=e201]: lock
- - tab "flow" [ref=e202] [cursor=pointer]:
- - generic [ref=e203]: flow
- - tab "invariant" [ref=e204] [cursor=pointer]:
- - generic [ref=e205]: invariant
- - tab "struct / enum" [ref=e206] [cursor=pointer]:
- - generic [ref=e207]: struct / enum
- - tab "identity" [ref=e208] [cursor=pointer]:
- - generic [ref=e209]: identity
- - tabpanel "resource" [ref=e211]:
- - paragraph [ref=e213]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e214]:
- - generic [ref=e215]:
- - generic [ref=e216]: Example excerpt
- - generic [ref=e217]: examples/token.cell
- - generic [ref=e218]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e219]:
- - generic [ref=e220]:
- - heading "Assurance Output" [level=2] [ref=e221]
- - paragraph [ref=e222]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e224]:
- - generic "Assurance output summary" [ref=e225]:
- - article [ref=e226]:
- - text: Schema
- - strong [ref=e227]: v42
- - paragraph [ref=e228]: current compiler metadata schema
- - article [ref=e229]:
- - text: Source
- - strong [ref=e230]: vesting.cell
- - paragraph [ref=e231]: shared + receipt + flow
- - article [ref=e232]:
- - text: Boundary
- - strong [ref=e233]: local sidecar
- - paragraph [ref=e234]: validated; provenance required when shared
- - group [ref=e235]:
- - generic "- Metadata excerpt" [ref=e236] [cursor=pointer]
- - generic [ref=e237]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e238]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e239]:
- - heading "Tooling Surface" [level=2] [ref=e240]
- - generic [ref=e241]:
- - tablist "CellScript tooling commands" [ref=e242]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e243] [cursor=pointer]:
- - code [ref=e244]: cellc metadata
- - generic [ref=e245]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e246] [cursor=pointer]:
- - code [ref=e247]: cellc constraints
- - generic [ref=e248]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e249] [cursor=pointer]:
- - code [ref=e250]: cellc audit-bundle
- - generic [ref=e251]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e252] [cursor=pointer]:
- - code [ref=e253]: cellc lsp
- - generic [ref=e254]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e256]:
- - generic [ref=e257]:
- - generic [ref=e258]: When
- - paragraph [ref=e259]: Use before review or integration.
- - generic [ref=e260]: Output
- - paragraph [ref=e261]: Schema, effects, source hashes, target profile.
- - generic [ref=e262]:
- - code [ref=e263]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e264]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e265]:
- - heading "Examples" [level=2] [ref=e266]
- - generic [ref=e267]:
- - tablist "Example groups" [ref=e268]:
- - tab "Protocols 6 files" [selected] [ref=e269] [cursor=pointer]:
- - generic [ref=e270]: Protocols
- - generic [ref=e271]: 6 files
- - tab "Primitives 6 files" [ref=e272] [cursor=pointer]:
- - generic [ref=e273]: Primitives
- - generic [ref=e274]: 6 files
- - tab "Language 6 files" [ref=e275] [cursor=pointer]:
- - generic [ref=e276]: Language
- - generic [ref=e277]: 6 files
- - tabpanel "Protocols 6 files" [ref=e279]:
- - generic [ref=e280]:
- - paragraph [ref=e281]: End-to-end contract examples with Cells, actions, and constraints.
- - link "Open examples directory" [ref=e282] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - generic [ref=e283]:
- - link "examples/token.cell Fungible token Mint, transfer, burn, merge, and amount invariant. resource invariant burn" [ref=e284] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - generic [ref=e285]: examples/token.cell
- - heading "Fungible token" [level=3] [ref=e286]
- - paragraph [ref=e287]: Mint, transfer, burn, merge, and amount invariant.
- - generic [ref=e288]:
- - generic [ref=e289]: resource
- - generic [ref=e290]: invariant
- - generic [ref=e291]: burn
- - link "examples/nft.cell NFT marketplace Collection state, listing receipts, transfer, royalty payment. resource receipt preserve" [ref=e292] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - generic [ref=e293]: examples/nft.cell
- - heading "NFT marketplace" [level=3] [ref=e294]
- - paragraph [ref=e295]: Collection state, listing receipts, transfer, royalty payment.
- - generic [ref=e296]:
- - generic [ref=e297]: resource
- - generic [ref=e298]: receipt
- - generic [ref=e299]: preserve
- - link "examples/amm_pool.cell AMM pool Shared reserves, LP receipts, swap and liquidity actions. shared receipt slippage" [ref=e300] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - generic [ref=e301]: examples/amm_pool.cell
- - heading "AMM pool" [level=3] [ref=e302]
- - paragraph [ref=e303]: Shared reserves, LP receipts, swap and liquidity actions.
- - generic [ref=e304]:
- - generic [ref=e305]: shared
- - generic [ref=e306]: receipt
- - generic [ref=e307]: slippage
- - link "examples/vesting.cell Vesting Grant flow, timepoint checks, claim and revoke paths. flow receipt env" [ref=e308] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - generic [ref=e309]: examples/vesting.cell
- - heading "Vesting" [level=3] [ref=e310]
- - paragraph [ref=e311]: Grant flow, timepoint checks, claim and revoke paths.
- - generic [ref=e312]:
- - generic [ref=e313]: flow
- - generic [ref=e314]: receipt
- - generic [ref=e315]: env
- - link "examples/launch.cell Launch flow Launch state, settlement, and sale lifecycle. flow settle claim" [ref=e316] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/launch.cell
- - generic [ref=e317]: examples/launch.cell
- - heading "Launch flow" [level=3] [ref=e318]
- - paragraph [ref=e319]: Launch state, settlement, and sale lifecycle.
- - generic [ref=e320]:
- - generic [ref=e321]: flow
- - generic [ref=e322]: settle
- - generic [ref=e323]: claim
- - link "examples/registry.cell Registry Name ownership and registry-style state transitions. resource identity replace" [ref=e324] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/registry.cell
- - generic [ref=e325]: examples/registry.cell
- - heading "Registry" [level=3] [ref=e326]
- - paragraph [ref=e327]: Name ownership and registry-style state transitions.
- - generic [ref=e328]:
- - generic [ref=e329]: resource
- - generic [ref=e330]: identity
- - generic [ref=e331]: replace
- - contentinfo [ref=e332]:
- - generic [ref=e333]:
- - generic [ref=e334]:
- - link "CellScript" [ref=e335] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e337]: CellScript
- - paragraph [ref=e338]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e339]:
- - link "Docs" [ref=e340] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e341] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e342] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e343] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T06-42-26-450Z.yml b/.playwright-mcp/page-2026-06-02T06-42-26-450Z.yml
deleted file mode 100644
index 27e33fdc..00000000
--- a/.playwright-mcp/page-2026-06-02T06-42-26-450Z.yml
+++ /dev/null
@@ -1,320 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link [ref=e8] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - img [ref=e9]
- - link [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - img [ref=e13]
- - button "Switch language" [ref=e15] [cursor=pointer]:
- - generic [ref=e16]: 中文
- - button "Switch to dark mode" [pressed] [ref=e17] [cursor=pointer]
- - main [ref=e20]:
- - region "CellScript" [ref=e21]:
- - generic [ref=e22]:
- - heading "CellScript" [level=1] [ref=e23]
- - paragraph [ref=e24]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e25]:
- - link "Get started" [ref=e26] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e27] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e28]:
- - generic [ref=e29]:
- - term [ref=e30]: target
- - definition [ref=e31]: ckb-vm RISC-V
- - generic [ref=e32]:
- - term [ref=e33]: model
- - definition [ref=e34]: schema-backed Cells
- - generic [ref=e35]:
- - term [ref=e36]: output
- - definition [ref=e37]: metadata + ProofPlan
- - generic [ref=e38]:
- - generic [ref=e40]: token.cell
- - combobox "Choose CellScript example" [ref=e42]:
- - option "Fungible Token" [selected]
- - option "NFT"
- - option "AMM Pool"
- - option "Vesting"
- - tabpanel "Fungible Token" [ref=e44]:
- - generic [ref=e45]:
- - generic [ref=e46]: "1"
- - generic [ref=e47]: module cellscript::fungible_token
- - generic [ref=e48]:
- - generic [ref=e49]: "2"
- - generic [ref=e50]: // ... invariant and MintAuthority omitted
- - generic [ref=e51]:
- - generic [ref=e52]: "3"
- - generic [ref=e53]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e54]:
- - generic [ref=e55]: "4"
- - generic [ref=e56]: "amount: u64,"
- - generic [ref=e57]:
- - generic [ref=e58]: "5"
- - generic [ref=e59]: "symbol: [u8; 8],"
- - generic [ref=e60]:
- - generic [ref=e61]: "6"
- - generic [ref=e62]: "}"
- - generic [ref=e64]: "7"
- - generic [ref=e65]:
- - generic [ref=e66]: "8"
- - generic [ref=e67]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e68]:
- - generic [ref=e69]: "9"
- - generic [ref=e70]: where
- - generic [ref=e71]:
- - generic [ref=e72]: "10"
- - generic [ref=e73]: consume token
- - generic [ref=e74]:
- - generic [ref=e75]: "11"
- - generic [ref=e76]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e78]: "12"
- - generic [ref=e79]:
- - generic [ref=e80]: "13"
- - generic [ref=e81]: "action burn(token: Token)"
- - generic [ref=e82]:
- - generic [ref=e83]: "14"
- - generic [ref=e84]: where
- - generic [ref=e85]:
- - generic [ref=e86]: "15"
- - generic [ref=e87]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e88]:
- - generic [ref=e89]: "16"
- - generic [ref=e90]: destroy token
- - generic [ref=e91]:
- - generic [ref=e92]: $
- - generic [ref=e93]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e94]:
- - heading "Getting Started" [level=2] [ref=e95]
- - generic [ref=e96]:
- - article [ref=e97]:
- - generic [ref=e98]: "1"
- - heading "Install" [level=3] [ref=e99]
- - paragraph [ref=e100]:
- - code [ref=e101]: cargo install --path .
- - article [ref=e102]:
- - generic [ref=e103]: "2"
- - heading "Compile" [level=3] [ref=e104]
- - paragraph [ref=e105]:
- - code [ref=e106]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e107]:
- - generic [ref=e108]: "3"
- - heading "Check" [level=3] [ref=e109]
- - paragraph [ref=e110]:
- - code [ref=e111]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e112]:
- - heading "Compiler Workflow" [level=2] [ref=e113]
- - generic [ref=e114]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e115]:
- - article [ref=e116]:
- - img [ref=e118]:
- - generic [ref=e121]: .cell
- - heading "CellScript source" [level=3] [ref=e122]
- - img [ref=e124]
- - article [ref=e126]:
- - img [ref=e128]
- - heading "Parse & check" [level=3] [ref=e132]
- - paragraph [ref=e133]: Syntax, types, effects
- - img [ref=e135]
- - article [ref=e137]:
- - img [ref=e139]
- - heading "IR + Metadata" [level=3] [ref=e145]
- - paragraph [ref=e146]: Typed model & assurance info
- - img [ref=e148]
- - article [ref=e150]:
- - img [ref=e152]
- - heading "Lower to RISC-V" [level=3] [ref=e156]
- - paragraph [ref=e157]: ckb-vm codegen & optimisations
- - img [ref=e159]
- - article [ref=e161]:
- - img [ref=e163]:
- - generic [ref=e166]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e167]
- - paragraph [ref=e168]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e169]:
- - heading "Build for CKB" [level=3] [ref=e170]
- - list [ref=e171]:
- - listitem [ref=e172]:
- - img [ref=e173]
- - generic [ref=e175]: ckb-vm compatible
- - listitem [ref=e176]:
- - img [ref=e177]
- - generic [ref=e179]: Deterministic execution
- - listitem [ref=e180]:
- - img [ref=e181]
- - generic [ref=e183]: Minimal syscalls
- - listitem [ref=e184]:
- - img [ref=e185]
- - generic [ref=e187]: Scheduler-aware
- - region "Core Model" [ref=e188]:
- - heading "Core Model" [level=2] [ref=e189]
- - paragraph [ref=e190]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e191]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e192]:
- - tablist "CellScript core primitives" [ref=e193]:
- - tab "resource" [selected] [ref=e194] [cursor=pointer]:
- - generic [ref=e195]: resource
- - tab "shared" [ref=e196] [cursor=pointer]:
- - generic [ref=e197]: shared
- - tab "receipt" [ref=e198] [cursor=pointer]:
- - generic [ref=e199]: receipt
- - tab "action" [ref=e200] [cursor=pointer]:
- - generic [ref=e201]: action
- - tab "lock" [ref=e202] [cursor=pointer]:
- - generic [ref=e203]: lock
- - tab "flow" [ref=e204] [cursor=pointer]:
- - generic [ref=e205]: flow
- - tab "invariant" [ref=e206] [cursor=pointer]:
- - generic [ref=e207]: invariant
- - tab "struct / enum" [ref=e208] [cursor=pointer]:
- - generic [ref=e209]: struct / enum
- - tab "identity" [ref=e210] [cursor=pointer]:
- - generic [ref=e211]: identity
- - tabpanel "resource" [ref=e213]:
- - paragraph [ref=e215]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e216]:
- - generic [ref=e217]:
- - generic [ref=e218]: Example excerpt
- - generic [ref=e219]: examples/token.cell
- - generic [ref=e220]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e221]:
- - generic [ref=e222]:
- - heading "Assurance Output" [level=2] [ref=e223]
- - paragraph [ref=e224]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e226]:
- - generic "Assurance output summary" [ref=e227]:
- - article [ref=e228]:
- - text: Schema
- - strong [ref=e229]: v42
- - paragraph [ref=e230]: current compiler metadata schema
- - article [ref=e231]:
- - text: Source
- - strong [ref=e232]: vesting.cell
- - paragraph [ref=e233]: shared + receipt + flow
- - article [ref=e234]:
- - text: Boundary
- - strong [ref=e235]: local sidecar
- - paragraph [ref=e236]: validated; provenance required when shared
- - group [ref=e237]:
- - generic "- Metadata excerpt" [ref=e238] [cursor=pointer]
- - generic [ref=e239]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e240]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e241]:
- - heading "Tooling Surface" [level=2] [ref=e242]
- - generic [ref=e243]:
- - tablist "CellScript tooling commands" [ref=e244]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e245] [cursor=pointer]:
- - code [ref=e246]: cellc metadata
- - generic [ref=e247]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e248] [cursor=pointer]:
- - code [ref=e249]: cellc constraints
- - generic [ref=e250]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e251] [cursor=pointer]:
- - code [ref=e252]: cellc audit-bundle
- - generic [ref=e253]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e254] [cursor=pointer]:
- - code [ref=e255]: cellc lsp
- - generic [ref=e256]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e258]:
- - generic [ref=e259]:
- - generic [ref=e260]: When
- - paragraph [ref=e261]: Use before review or integration.
- - generic [ref=e262]: Output
- - paragraph [ref=e263]: Schema, effects, source hashes, target profile.
- - generic [ref=e264]:
- - code [ref=e265]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e266]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e267]:
- - heading "Examples" [level=2] [ref=e268]
- - generic [ref=e269]:
- - tablist "Example groups" [ref=e270]:
- - tab "Protocols 6 files" [selected] [ref=e271] [cursor=pointer]:
- - generic [ref=e272]: Protocols
- - generic [ref=e273]: 6 files
- - tab "Primitives 6 files" [ref=e274] [cursor=pointer]:
- - generic [ref=e275]: Primitives
- - generic [ref=e276]: 6 files
- - tab "Language 6 files" [ref=e277] [cursor=pointer]:
- - generic [ref=e278]: Language
- - generic [ref=e279]: 6 files
- - tabpanel "Protocols 6 files" [ref=e281]:
- - generic [ref=e282]:
- - paragraph [ref=e283]: End-to-end contract examples with Cells, actions, and constraints.
- - link "Open examples directory" [ref=e284] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - generic [ref=e285]:
- - link "examples/token.cell Fungible token Mint, transfer, burn, merge, and amount invariant. resource invariant burn" [ref=e286] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - generic [ref=e287]: examples/token.cell
- - heading "Fungible token" [level=3] [ref=e288]
- - paragraph [ref=e289]: Mint, transfer, burn, merge, and amount invariant.
- - generic [ref=e290]:
- - generic [ref=e291]: resource
- - generic [ref=e292]: invariant
- - generic [ref=e293]: burn
- - link "examples/nft.cell NFT marketplace Collection state, listing receipts, transfer, royalty payment. resource receipt preserve" [ref=e294] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - generic [ref=e295]: examples/nft.cell
- - heading "NFT marketplace" [level=3] [ref=e296]
- - paragraph [ref=e297]: Collection state, listing receipts, transfer, royalty payment.
- - generic [ref=e298]:
- - generic [ref=e299]: resource
- - generic [ref=e300]: receipt
- - generic [ref=e301]: preserve
- - link "examples/amm_pool.cell AMM pool Shared reserves, LP receipts, swap and liquidity actions. shared receipt slippage" [ref=e302] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - generic [ref=e303]: examples/amm_pool.cell
- - heading "AMM pool" [level=3] [ref=e304]
- - paragraph [ref=e305]: Shared reserves, LP receipts, swap and liquidity actions.
- - generic [ref=e306]:
- - generic [ref=e307]: shared
- - generic [ref=e308]: receipt
- - generic [ref=e309]: slippage
- - link "examples/vesting.cell Vesting Grant flow, timepoint checks, claim and revoke paths. flow receipt env" [ref=e310] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - generic [ref=e311]: examples/vesting.cell
- - heading "Vesting" [level=3] [ref=e312]
- - paragraph [ref=e313]: Grant flow, timepoint checks, claim and revoke paths.
- - generic [ref=e314]:
- - generic [ref=e315]: flow
- - generic [ref=e316]: receipt
- - generic [ref=e317]: env
- - link "examples/launch.cell Launch flow Launch state, settlement, and sale lifecycle. flow settle claim" [ref=e318] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/launch.cell
- - generic [ref=e319]: examples/launch.cell
- - heading "Launch flow" [level=3] [ref=e320]
- - paragraph [ref=e321]: Launch state, settlement, and sale lifecycle.
- - generic [ref=e322]:
- - generic [ref=e323]: flow
- - generic [ref=e324]: settle
- - generic [ref=e325]: claim
- - link "examples/registry.cell Registry Name ownership and registry-style state transitions. resource identity replace" [ref=e326] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/registry.cell
- - generic [ref=e327]: examples/registry.cell
- - heading "Registry" [level=3] [ref=e328]
- - paragraph [ref=e329]: Name ownership and registry-style state transitions.
- - generic [ref=e330]:
- - generic [ref=e331]: resource
- - generic [ref=e332]: identity
- - generic [ref=e333]: replace
- - contentinfo [ref=e334]:
- - generic [ref=e335]:
- - generic [ref=e336]:
- - link "CellScript" [ref=e337] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e339]: CellScript
- - paragraph [ref=e340]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e341]:
- - link "Docs" [ref=e342] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e343] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e344] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e345] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T06-43-57-736Z.yml b/.playwright-mcp/page-2026-06-02T06-43-57-736Z.yml
deleted file mode 100644
index 77cb1b3e..00000000
--- a/.playwright-mcp/page-2026-06-02T06-43-57-736Z.yml
+++ /dev/null
@@ -1,323 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Docs" [ref=e8] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - img [ref=e9]
- - generic [ref=e12]: Docs
- - link "Source" [ref=e13] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - img [ref=e14]
- - generic [ref=e16]: Source
- - button "Switch language" [ref=e17] [cursor=pointer]:
- - generic [ref=e18]: 中文
- - button "Switch to dark mode" [pressed] [ref=e19] [cursor=pointer]:
- - generic [ref=e22]: Dark
- - main [ref=e23]:
- - region "CellScript" [ref=e24]:
- - generic [ref=e25]:
- - heading "CellScript" [level=1] [ref=e26]
- - paragraph [ref=e27]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e28]:
- - link "Get started" [ref=e29] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e30] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e31]:
- - generic [ref=e32]:
- - term [ref=e33]: target
- - definition [ref=e34]: ckb-vm RISC-V
- - generic [ref=e35]:
- - term [ref=e36]: model
- - definition [ref=e37]: schema-backed Cells
- - generic [ref=e38]:
- - term [ref=e39]: output
- - definition [ref=e40]: metadata + ProofPlan
- - generic [ref=e41]:
- - generic [ref=e43]: token.cell
- - tablist "CellScript examples" [ref=e45]:
- - tab "Fungible Token" [selected] [ref=e46] [cursor=pointer]
- - tab "NFT" [ref=e47] [cursor=pointer]
- - tab "AMM Pool" [ref=e48] [cursor=pointer]
- - tab "Vesting" [ref=e49] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e51]:
- - generic [ref=e52]:
- - generic [ref=e53]: "1"
- - generic [ref=e54]: module cellscript::fungible_token
- - generic [ref=e55]:
- - generic [ref=e56]: "2"
- - generic [ref=e57]: // ... invariant and MintAuthority omitted
- - generic [ref=e58]:
- - generic [ref=e59]: "3"
- - generic [ref=e60]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e61]:
- - generic [ref=e62]: "4"
- - generic [ref=e63]: "amount: u64,"
- - generic [ref=e64]:
- - generic [ref=e65]: "5"
- - generic [ref=e66]: "symbol: [u8; 8],"
- - generic [ref=e67]:
- - generic [ref=e68]: "6"
- - generic [ref=e69]: "}"
- - generic [ref=e71]: "7"
- - generic [ref=e72]:
- - generic [ref=e73]: "8"
- - generic [ref=e74]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e75]:
- - generic [ref=e76]: "9"
- - generic [ref=e77]: where
- - generic [ref=e78]:
- - generic [ref=e79]: "10"
- - generic [ref=e80]: consume token
- - generic [ref=e81]:
- - generic [ref=e82]: "11"
- - generic [ref=e83]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e85]: "12"
- - generic [ref=e86]:
- - generic [ref=e87]: "13"
- - generic [ref=e88]: "action burn(token: Token)"
- - generic [ref=e89]:
- - generic [ref=e90]: "14"
- - generic [ref=e91]: where
- - generic [ref=e92]:
- - generic [ref=e93]: "15"
- - generic [ref=e94]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e95]:
- - generic [ref=e96]: "16"
- - generic [ref=e97]: destroy token
- - generic [ref=e98]:
- - generic [ref=e99]: $
- - generic [ref=e100]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e101]:
- - heading "Getting Started" [level=2] [ref=e102]
- - generic [ref=e103]:
- - article [ref=e104]:
- - generic [ref=e105]: "1"
- - heading "Install" [level=3] [ref=e106]
- - paragraph [ref=e107]:
- - code [ref=e108]: cargo install --path .
- - article [ref=e109]:
- - generic [ref=e110]: "2"
- - heading "Compile" [level=3] [ref=e111]
- - paragraph [ref=e112]:
- - code [ref=e113]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e114]:
- - generic [ref=e115]: "3"
- - heading "Check" [level=3] [ref=e116]
- - paragraph [ref=e117]:
- - code [ref=e118]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e119]:
- - heading "Compiler Workflow" [level=2] [ref=e120]
- - generic [ref=e121]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e122]:
- - article [ref=e123]:
- - img [ref=e125]:
- - generic [ref=e128]: .cell
- - heading "CellScript source" [level=3] [ref=e129]
- - img [ref=e131]
- - article [ref=e133]:
- - img [ref=e135]
- - heading "Parse & check" [level=3] [ref=e139]
- - paragraph [ref=e140]: Syntax, types, effects
- - img [ref=e142]
- - article [ref=e144]:
- - img [ref=e146]
- - heading "IR + Metadata" [level=3] [ref=e152]
- - paragraph [ref=e153]: Typed model & assurance info
- - img [ref=e155]
- - article [ref=e157]:
- - img [ref=e159]
- - heading "Lower to RISC-V" [level=3] [ref=e163]
- - paragraph [ref=e164]: ckb-vm codegen & optimisations
- - img [ref=e166]
- - article [ref=e168]:
- - img [ref=e170]:
- - generic [ref=e173]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e174]
- - paragraph [ref=e175]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e176]:
- - heading "Build for CKB" [level=3] [ref=e177]
- - list [ref=e178]:
- - listitem [ref=e179]:
- - img [ref=e180]
- - generic [ref=e182]: ckb-vm compatible
- - listitem [ref=e183]:
- - img [ref=e184]
- - generic [ref=e186]: Deterministic execution
- - listitem [ref=e187]:
- - img [ref=e188]
- - generic [ref=e190]: Minimal syscalls
- - listitem [ref=e191]:
- - img [ref=e192]
- - generic [ref=e194]: Scheduler-aware
- - region "Core Model" [ref=e195]:
- - heading "Core Model" [level=2] [ref=e196]
- - paragraph [ref=e197]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e198]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e199]:
- - tablist "CellScript core primitives" [ref=e200]:
- - tab "resource" [selected] [ref=e201] [cursor=pointer]:
- - generic [ref=e202]: resource
- - tab "shared" [ref=e203] [cursor=pointer]:
- - generic [ref=e204]: shared
- - tab "receipt" [ref=e205] [cursor=pointer]:
- - generic [ref=e206]: receipt
- - tab "action" [ref=e207] [cursor=pointer]:
- - generic [ref=e208]: action
- - tab "lock" [ref=e209] [cursor=pointer]:
- - generic [ref=e210]: lock
- - tab "flow" [ref=e211] [cursor=pointer]:
- - generic [ref=e212]: flow
- - tab "invariant" [ref=e213] [cursor=pointer]:
- - generic [ref=e214]: invariant
- - tab "struct / enum" [ref=e215] [cursor=pointer]:
- - generic [ref=e216]: struct / enum
- - tab "identity" [ref=e217] [cursor=pointer]:
- - generic [ref=e218]: identity
- - tabpanel "resource" [ref=e220]:
- - paragraph [ref=e222]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e223]:
- - generic [ref=e224]:
- - generic [ref=e225]: Example excerpt
- - generic [ref=e226]: examples/token.cell
- - generic [ref=e227]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e228]:
- - generic [ref=e229]:
- - heading "Assurance Output" [level=2] [ref=e230]
- - paragraph [ref=e231]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e233]:
- - generic "Assurance output summary" [ref=e234]:
- - article [ref=e235]:
- - text: Schema
- - strong [ref=e236]: v42
- - paragraph [ref=e237]: current compiler metadata schema
- - article [ref=e238]:
- - text: Source
- - strong [ref=e239]: vesting.cell
- - paragraph [ref=e240]: shared + receipt + flow
- - article [ref=e241]:
- - text: Boundary
- - strong [ref=e242]: local sidecar
- - paragraph [ref=e243]: validated; provenance required when shared
- - group [ref=e244]:
- - generic "- Metadata excerpt" [ref=e245] [cursor=pointer]
- - generic [ref=e246]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e247]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e248]:
- - heading "Tooling Surface" [level=2] [ref=e249]
- - generic [ref=e250]:
- - tablist "CellScript tooling commands" [ref=e251]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e252] [cursor=pointer]:
- - code [ref=e253]: cellc metadata
- - generic [ref=e254]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e255] [cursor=pointer]:
- - code [ref=e256]: cellc constraints
- - generic [ref=e257]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e258] [cursor=pointer]:
- - code [ref=e259]: cellc audit-bundle
- - generic [ref=e260]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e261] [cursor=pointer]:
- - code [ref=e262]: cellc lsp
- - generic [ref=e263]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e265]:
- - generic [ref=e266]:
- - generic [ref=e267]: When
- - paragraph [ref=e268]: Use before review or integration.
- - generic [ref=e269]: Output
- - paragraph [ref=e270]: Schema, effects, source hashes, target profile.
- - generic [ref=e271]:
- - code [ref=e272]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e273]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e274]:
- - heading "Examples" [level=2] [ref=e275]
- - generic [ref=e276]:
- - tablist "Example groups" [ref=e277]:
- - tab "Protocols 6 files" [selected] [ref=e278] [cursor=pointer]:
- - generic [ref=e279]: Protocols
- - generic [ref=e280]: 6 files
- - tab "Primitives 6 files" [ref=e281] [cursor=pointer]:
- - generic [ref=e282]: Primitives
- - generic [ref=e283]: 6 files
- - tab "Language 6 files" [ref=e284] [cursor=pointer]:
- - generic [ref=e285]: Language
- - generic [ref=e286]: 6 files
- - tabpanel "Protocols 6 files" [ref=e288]:
- - generic [ref=e289]:
- - paragraph [ref=e290]: End-to-end contract examples with Cells, actions, and constraints.
- - link "Open examples directory" [ref=e291] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - generic [ref=e292]:
- - link "examples/token.cell Fungible token Mint, transfer, burn, merge, and amount invariant. resource invariant burn" [ref=e293] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - generic [ref=e294]: examples/token.cell
- - heading "Fungible token" [level=3] [ref=e295]
- - paragraph [ref=e296]: Mint, transfer, burn, merge, and amount invariant.
- - generic [ref=e297]:
- - generic [ref=e298]: resource
- - generic [ref=e299]: invariant
- - generic [ref=e300]: burn
- - link "examples/nft.cell NFT marketplace Collection state, listing receipts, transfer, royalty payment. resource receipt preserve" [ref=e301] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - generic [ref=e302]: examples/nft.cell
- - heading "NFT marketplace" [level=3] [ref=e303]
- - paragraph [ref=e304]: Collection state, listing receipts, transfer, royalty payment.
- - generic [ref=e305]:
- - generic [ref=e306]: resource
- - generic [ref=e307]: receipt
- - generic [ref=e308]: preserve
- - link "examples/amm_pool.cell AMM pool Shared reserves, LP receipts, swap and liquidity actions. shared receipt slippage" [ref=e309] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - generic [ref=e310]: examples/amm_pool.cell
- - heading "AMM pool" [level=3] [ref=e311]
- - paragraph [ref=e312]: Shared reserves, LP receipts, swap and liquidity actions.
- - generic [ref=e313]:
- - generic [ref=e314]: shared
- - generic [ref=e315]: receipt
- - generic [ref=e316]: slippage
- - link "examples/vesting.cell Vesting Grant flow, timepoint checks, claim and revoke paths. flow receipt env" [ref=e317] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - generic [ref=e318]: examples/vesting.cell
- - heading "Vesting" [level=3] [ref=e319]
- - paragraph [ref=e320]: Grant flow, timepoint checks, claim and revoke paths.
- - generic [ref=e321]:
- - generic [ref=e322]: flow
- - generic [ref=e323]: receipt
- - generic [ref=e324]: env
- - link "examples/launch.cell Launch flow Launch state, settlement, and sale lifecycle. flow settle claim" [ref=e325] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/launch.cell
- - generic [ref=e326]: examples/launch.cell
- - heading "Launch flow" [level=3] [ref=e327]
- - paragraph [ref=e328]: Launch state, settlement, and sale lifecycle.
- - generic [ref=e329]:
- - generic [ref=e330]: flow
- - generic [ref=e331]: settle
- - generic [ref=e332]: claim
- - link "examples/registry.cell Registry Name ownership and registry-style state transitions. resource identity replace" [ref=e333] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/registry.cell
- - generic [ref=e334]: examples/registry.cell
- - heading "Registry" [level=3] [ref=e335]
- - paragraph [ref=e336]: Name ownership and registry-style state transitions.
- - generic [ref=e337]:
- - generic [ref=e338]: resource
- - generic [ref=e339]: identity
- - generic [ref=e340]: replace
- - contentinfo [ref=e341]:
- - generic [ref=e342]:
- - generic [ref=e343]:
- - link "CellScript" [ref=e344] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e346]: CellScript
- - paragraph [ref=e347]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e348]:
- - link "Docs" [ref=e349] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e350] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e351] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e352] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T07-47-12-690Z.yml b/.playwright-mcp/page-2026-06-02T07-47-12-690Z.yml
deleted file mode 100644
index 48129a75..00000000
--- a/.playwright-mcp/page-2026-06-02T07-47-12-690Z.yml
+++ /dev/null
@@ -1,323 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "主导航" [ref=e3]:
- - link "CellScript 首页" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "文档" [ref=e8] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - img [ref=e9]
- - generic [ref=e12]: 文档
- - link "源码" [ref=e13] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - img [ref=e14]
- - generic [ref=e16]: 源码
- - button "切换语言" [ref=e17] [cursor=pointer]:
- - generic [ref=e18]: English
- - button "切换到深色模式" [pressed] [ref=e19] [cursor=pointer]:
- - generic [ref=e22]: 深色
- - main [ref=e23]:
- - region "CellScript" [ref=e24]:
- - generic [ref=e25]:
- - heading "CellScript" [level=1] [ref=e26]
- - paragraph [ref=e27]: 用 typed transitions 编写 Cell contracts,而不是手写 raw wire format。
- - generic [ref=e28]:
- - link "开始使用" [ref=e29] [cursor=pointer]:
- - /url: "#getting-started"
- - link "核心模型" [ref=e30] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript 合约表面" [ref=e31]:
- - generic [ref=e32]:
- - term [ref=e33]: 目标
- - definition [ref=e34]: ckb-vm RISC-V
- - generic [ref=e35]:
- - term [ref=e36]: 模型
- - definition [ref=e37]: schema-backed Cells
- - generic [ref=e38]:
- - term [ref=e39]: 输出
- - definition [ref=e40]: metadata + ProofPlan
- - generic [ref=e41]:
- - generic [ref=e43]: token.cell
- - tablist "CellScript 示例" [ref=e45]:
- - tab "Fungible Token" [selected] [ref=e46] [cursor=pointer]
- - tab "NFT" [ref=e47] [cursor=pointer]
- - tab "AMM Pool" [ref=e48] [cursor=pointer]
- - tab "Vesting" [ref=e49] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e51]:
- - generic [ref=e52]:
- - generic [ref=e53]: "1"
- - generic [ref=e54]: module cellscript::fungible_token
- - generic [ref=e55]:
- - generic [ref=e56]: "2"
- - generic [ref=e57]: // ... invariant and MintAuthority omitted
- - generic [ref=e58]:
- - generic [ref=e59]: "3"
- - generic [ref=e60]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e61]:
- - generic [ref=e62]: "4"
- - generic [ref=e63]: "amount: u64,"
- - generic [ref=e64]:
- - generic [ref=e65]: "5"
- - generic [ref=e66]: "symbol: [u8; 8],"
- - generic [ref=e67]:
- - generic [ref=e68]: "6"
- - generic [ref=e69]: "}"
- - generic [ref=e71]: "7"
- - generic [ref=e72]:
- - generic [ref=e73]: "8"
- - generic [ref=e74]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e75]:
- - generic [ref=e76]: "9"
- - generic [ref=e77]: where
- - generic [ref=e78]:
- - generic [ref=e79]: "10"
- - generic [ref=e80]: consume token
- - generic [ref=e81]:
- - generic [ref=e82]: "11"
- - generic [ref=e83]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e85]: "12"
- - generic [ref=e86]:
- - generic [ref=e87]: "13"
- - generic [ref=e88]: "action burn(token: Token)"
- - generic [ref=e89]:
- - generic [ref=e90]: "14"
- - generic [ref=e91]: where
- - generic [ref=e92]:
- - generic [ref=e93]: "15"
- - generic [ref=e94]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e95]:
- - generic [ref=e96]: "16"
- - generic [ref=e97]: destroy token
- - generic [ref=e98]:
- - generic [ref=e99]: $
- - generic [ref=e100]: cellc examples/token.cell --target-profile ckb
- - region "开始使用" [ref=e101]:
- - heading "开始使用" [level=2] [ref=e102]
- - generic [ref=e103]:
- - article [ref=e104]:
- - generic [ref=e105]: "1"
- - heading "安装" [level=3] [ref=e106]
- - paragraph [ref=e107]:
- - code [ref=e108]: cargo install --path .
- - article [ref=e109]:
- - generic [ref=e110]: "2"
- - heading "编译" [level=3] [ref=e111]
- - paragraph [ref=e112]:
- - code [ref=e113]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e114]:
- - generic [ref=e115]: "3"
- - heading "检查" [level=3] [ref=e116]
- - paragraph [ref=e117]:
- - code [ref=e118]: cellc check --target-profile ckb
- - region "编译流程" [ref=e119]:
- - heading "编译流程" [level=2] [ref=e120]
- - generic [ref=e121]:
- - generic "从 .cell source 到 CKB artefact 的 compiler workflow" [ref=e122]:
- - article [ref=e123]:
- - img [ref=e125]:
- - generic [ref=e128]: .cell
- - heading "CellScript source" [level=3] [ref=e129]
- - img [ref=e131]
- - article [ref=e133]:
- - img [ref=e135]
- - heading "解析与检查" [level=3] [ref=e139]
- - paragraph [ref=e140]: 语法、类型、effects
- - img [ref=e142]
- - article [ref=e144]:
- - img [ref=e146]
- - heading "IR + Metadata" [level=3] [ref=e152]
- - paragraph [ref=e153]: typed model 与 assurance 信息
- - img [ref=e155]
- - article [ref=e157]:
- - img [ref=e159]
- - heading "Lower 到 RISC-V" [level=3] [ref=e163]
- - paragraph [ref=e164]: ckb-vm codegen 与 optimisations
- - img [ref=e166]
- - article [ref=e168]:
- - img [ref=e170]:
- - generic [ref=e173]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e174]
- - paragraph [ref=e175]: 面向 ckb-vm 的 RISC-V 产物
- - complementary "为 CKB 构建" [ref=e176]:
- - heading "为 CKB 构建" [level=3] [ref=e177]
- - list [ref=e178]:
- - listitem [ref=e179]:
- - img [ref=e180]
- - generic [ref=e182]: ckb-vm 兼容
- - listitem [ref=e183]:
- - img [ref=e184]
- - generic [ref=e186]: 确定性执行
- - listitem [ref=e187]:
- - img [ref=e188]
- - generic [ref=e190]: 最小 syscalls
- - listitem [ref=e191]:
- - img [ref=e192]
- - generic [ref=e194]: 感知 scheduler
- - region "核心模型" [ref=e195]:
- - heading "核心模型" [level=2] [ref=e196]
- - paragraph [ref=e197]: CellScript 让 contract model 保持可见:Cell shapes、effects、locks、flows 与 review metadata 都留在同一个 typed surface 中。
- - paragraph [ref=e198]: 刻意保持窄边界:不是 general-purpose runtime,不是 new VM,也不是 account storage 的伪装。
- - generic [ref=e199]:
- - tablist "CellScript core primitives" [ref=e200]:
- - tab "resource" [selected] [ref=e201] [cursor=pointer]:
- - generic [ref=e202]: resource
- - tab "shared" [ref=e203] [cursor=pointer]:
- - generic [ref=e204]: shared
- - tab "receipt" [ref=e205] [cursor=pointer]:
- - generic [ref=e206]: receipt
- - tab "action" [ref=e207] [cursor=pointer]:
- - generic [ref=e208]: action
- - tab "lock" [ref=e209] [cursor=pointer]:
- - generic [ref=e210]: lock
- - tab "flow" [ref=e211] [cursor=pointer]:
- - generic [ref=e212]: flow
- - tab "invariant" [ref=e213] [cursor=pointer]:
- - generic [ref=e214]: invariant
- - tab "struct / enum" [ref=e215] [cursor=pointer]:
- - generic [ref=e216]: struct / enum
- - tab "identity" [ref=e217] [cursor=pointer]:
- - generic [ref=e218]: identity
- - tabpanel "resource" [ref=e220]:
- - paragraph [ref=e222]: 带有显式 lifecycle effects 的 owned Cell state。
- - generic [ref=e223]:
- - generic [ref=e224]:
- - generic [ref=e225]: 示例摘录
- - generic [ref=e226]: examples/token.cell
- - generic [ref=e227]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance 输出" [ref=e228]:
- - generic [ref=e229]:
- - heading "Assurance 输出" [level=2] [ref=e230]
- - paragraph [ref=e231]: 本地 build 会输出 review metadata。sidecar 是有用 evidence,但离开 build boundary 后不是 authenticated proof。
- - article [ref=e233]:
- - generic "Assurance 输出摘要" [ref=e234]:
- - article [ref=e235]:
- - text: Schema
- - strong [ref=e236]: v42
- - paragraph [ref=e237]: 当前 compiler metadata schema
- - article [ref=e238]:
- - text: Source
- - strong [ref=e239]: vesting.cell
- - paragraph [ref=e240]: shared + receipt + flow
- - article [ref=e241]:
- - text: Boundary
- - strong [ref=e242]: local sidecar
- - paragraph [ref=e243]: validated;shared 时仍需 provenance
- - group [ref=e244]:
- - generic "- Metadata 摘录" [ref=e245] [cursor=pointer]
- - generic [ref=e246]: "# 来自本地 build 的代表性 sidecar excerpt;provenance checks 需要单独处理。"
- - generic [ref=e247]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "工具接口" [ref=e248]:
- - heading "工具接口" [level=2] [ref=e249]
- - generic [ref=e250]:
- - tablist "CellScript tooling commands" [ref=e251]:
- - tab "cellc metadata 读写表面" [selected] [ref=e252] [cursor=pointer]:
- - code [ref=e253]: cellc metadata
- - generic [ref=e254]: 读写表面
- - tab "cellc constraints Transaction 形状" [ref=e255] [cursor=pointer]:
- - code [ref=e256]: cellc constraints
- - generic [ref=e257]: Transaction 形状
- - tab "cellc audit-bundle 审阅包" [ref=e258] [cursor=pointer]:
- - code [ref=e259]: cellc audit-bundle
- - generic [ref=e260]: 审阅包
- - tab "cellc lsp 编辑器反馈" [ref=e261] [cursor=pointer]:
- - code [ref=e262]: cellc lsp
- - generic [ref=e263]: 编辑器反馈
- - tabpanel "cellc metadata 读写表面" [ref=e265]:
- - generic [ref=e266]:
- - generic [ref=e267]: 使用时机
- - paragraph [ref=e268]: review 或 integration 前使用。
- - generic [ref=e269]: 输出
- - paragraph [ref=e270]: Schema、effects、source hashes、target profile。
- - generic [ref=e271]:
- - code [ref=e272]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e273]: "# 为真实 example 输出 review metadata。"
- - region "示例" [ref=e274]:
- - heading "示例" [level=2] [ref=e275]
- - generic [ref=e276]:
- - tablist "示例分组" [ref=e277]:
- - tab "协议 6 个文件" [selected] [ref=e278] [cursor=pointer]:
- - generic [ref=e279]: 协议
- - generic [ref=e280]: 6 个文件
- - tab "原语 6 个文件" [ref=e281] [cursor=pointer]:
- - generic [ref=e282]: 原语
- - generic [ref=e283]: 6 个文件
- - tab "语言 6 个文件" [ref=e284] [cursor=pointer]:
- - generic [ref=e285]: 语言
- - generic [ref=e286]: 6 个文件
- - tabpanel "协议 6 个文件" [ref=e288]:
- - generic [ref=e289]:
- - paragraph [ref=e290]: 包含 Cells、actions 与 constraints 的端到端 contract examples。
- - link "打开 examples 目录" [ref=e291] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - generic [ref=e292]:
- - link "examples/token.cell Fungible Token Mint、transfer、burn、merge 与 amount invariant。 resource invariant burn" [ref=e293] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - generic [ref=e294]: examples/token.cell
- - heading "Fungible Token" [level=3] [ref=e295]
- - paragraph [ref=e296]: Mint、transfer、burn、merge 与 amount invariant。
- - generic [ref=e297]:
- - generic [ref=e298]: resource
- - generic [ref=e299]: invariant
- - generic [ref=e300]: burn
- - link "examples/nft.cell NFT 市场 Collection state、listing receipts、transfer 与 royalty payment。 resource receipt preserve" [ref=e301] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - generic [ref=e302]: examples/nft.cell
- - heading "NFT 市场" [level=3] [ref=e303]
- - paragraph [ref=e304]: Collection state、listing receipts、transfer 与 royalty payment。
- - generic [ref=e305]:
- - generic [ref=e306]: resource
- - generic [ref=e307]: receipt
- - generic [ref=e308]: preserve
- - link "examples/amm_pool.cell AMM Pool Shared reserves、LP receipts、swap 与 liquidity actions。 shared receipt slippage" [ref=e309] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - generic [ref=e310]: examples/amm_pool.cell
- - heading "AMM Pool" [level=3] [ref=e311]
- - paragraph [ref=e312]: Shared reserves、LP receipts、swap 与 liquidity actions。
- - generic [ref=e313]:
- - generic [ref=e314]: shared
- - generic [ref=e315]: receipt
- - generic [ref=e316]: slippage
- - link "examples/vesting.cell Vesting Grant flow、timepoint checks、claim 与 revoke paths。 flow receipt env" [ref=e317] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - generic [ref=e318]: examples/vesting.cell
- - heading "Vesting" [level=3] [ref=e319]
- - paragraph [ref=e320]: Grant flow、timepoint checks、claim 与 revoke paths。
- - generic [ref=e321]:
- - generic [ref=e322]: flow
- - generic [ref=e323]: receipt
- - generic [ref=e324]: env
- - link "examples/launch.cell Launch 流程 Launch state、settlement 与 sale lifecycle。 flow settle claim" [ref=e325] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/launch.cell
- - generic [ref=e326]: examples/launch.cell
- - heading "Launch 流程" [level=3] [ref=e327]
- - paragraph [ref=e328]: Launch state、settlement 与 sale lifecycle。
- - generic [ref=e329]:
- - generic [ref=e330]: flow
- - generic [ref=e331]: settle
- - generic [ref=e332]: claim
- - link "examples/registry.cell Registry Name ownership 与 registry-style state transitions。 resource identity replace" [ref=e333] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/registry.cell
- - generic [ref=e334]: examples/registry.cell
- - heading "Registry" [level=3] [ref=e335]
- - paragraph [ref=e336]: Name ownership 与 registry-style state transitions。
- - generic [ref=e337]:
- - generic [ref=e338]: resource
- - generic [ref=e339]: identity
- - generic [ref=e340]: replace
- - contentinfo [ref=e341]:
- - generic [ref=e342]:
- - generic [ref=e343]:
- - link "CellScript" [ref=e344] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e346]: CellScript
- - paragraph [ref=e347]: CellScript 是面向 CKB Cell-based smart contracts 的语义 DSL,内置 typed metadata 与 assurance by design。Docs、spec、examples 与 source 都随 repository 管理。
- - generic [ref=e348]:
- - link "文档" [ref=e349] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "规范" [ref=e350] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "示例" [ref=e351] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "源码" [ref=e352] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T07-51-19-998Z.yml b/.playwright-mcp/page-2026-06-02T07-51-19-998Z.yml
deleted file mode 100644
index d0c1d3d3..00000000
--- a/.playwright-mcp/page-2026-06-02T07-51-19-998Z.yml
+++ /dev/null
@@ -1,320 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "主导航" [ref=e3]:
- - link "CellScript 首页" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link [ref=e8] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - img [ref=e9]
- - link [ref=e12] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - img [ref=e13]
- - button "切换语言" [ref=e15] [cursor=pointer]:
- - generic [ref=e16]: English
- - button "切换到深色模式" [pressed] [ref=e17] [cursor=pointer]
- - main [ref=e20]:
- - region "CellScript" [ref=e21]:
- - generic [ref=e22]:
- - heading "CellScript" [level=1] [ref=e23]
- - paragraph [ref=e24]: 用 typed transitions 编写 Cell contracts,而不是手写 raw wire format。
- - generic [ref=e25]:
- - link "开始使用" [ref=e26] [cursor=pointer]:
- - /url: "#getting-started"
- - link "核心模型" [ref=e27] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript 合约表面" [ref=e28]:
- - generic [ref=e29]:
- - term [ref=e30]: 目标
- - definition [ref=e31]: ckb-vm RISC-V
- - generic [ref=e32]:
- - term [ref=e33]: 模型
- - definition [ref=e34]: schema-backed Cells
- - generic [ref=e35]:
- - term [ref=e36]: 输出
- - definition [ref=e37]: metadata + ProofPlan
- - generic [ref=e38]:
- - generic [ref=e40]: token.cell
- - combobox "选择 CellScript 示例" [ref=e42]:
- - option "Fungible Token" [selected]
- - option "NFT"
- - option "AMM Pool"
- - option "Vesting"
- - tabpanel "Fungible Token" [ref=e44]:
- - generic [ref=e45]:
- - generic [ref=e46]: "1"
- - generic [ref=e47]: module cellscript::fungible_token
- - generic [ref=e48]:
- - generic [ref=e49]: "2"
- - generic [ref=e50]: // ... invariant and MintAuthority omitted
- - generic [ref=e51]:
- - generic [ref=e52]: "3"
- - generic [ref=e53]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e54]:
- - generic [ref=e55]: "4"
- - generic [ref=e56]: "amount: u64,"
- - generic [ref=e57]:
- - generic [ref=e58]: "5"
- - generic [ref=e59]: "symbol: [u8; 8],"
- - generic [ref=e60]:
- - generic [ref=e61]: "6"
- - generic [ref=e62]: "}"
- - generic [ref=e64]: "7"
- - generic [ref=e65]:
- - generic [ref=e66]: "8"
- - generic [ref=e67]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e68]:
- - generic [ref=e69]: "9"
- - generic [ref=e70]: where
- - generic [ref=e71]:
- - generic [ref=e72]: "10"
- - generic [ref=e73]: consume token
- - generic [ref=e74]:
- - generic [ref=e75]: "11"
- - generic [ref=e76]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e78]: "12"
- - generic [ref=e79]:
- - generic [ref=e80]: "13"
- - generic [ref=e81]: "action burn(token: Token)"
- - generic [ref=e82]:
- - generic [ref=e83]: "14"
- - generic [ref=e84]: where
- - generic [ref=e85]:
- - generic [ref=e86]: "15"
- - generic [ref=e87]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e88]:
- - generic [ref=e89]: "16"
- - generic [ref=e90]: destroy token
- - generic [ref=e91]:
- - generic [ref=e92]: $
- - generic [ref=e93]: cellc examples/token.cell --target-profile ckb
- - region "开始使用" [ref=e94]:
- - heading "开始使用" [level=2] [ref=e95]
- - generic [ref=e96]:
- - article [ref=e97]:
- - generic [ref=e98]: "1"
- - heading "安装" [level=3] [ref=e99]
- - paragraph [ref=e100]:
- - code [ref=e101]: cargo install --path .
- - article [ref=e102]:
- - generic [ref=e103]: "2"
- - heading "编译" [level=3] [ref=e104]
- - paragraph [ref=e105]:
- - code [ref=e106]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e107]:
- - generic [ref=e108]: "3"
- - heading "检查" [level=3] [ref=e109]
- - paragraph [ref=e110]:
- - code [ref=e111]: cellc check --target-profile ckb
- - region "编译流程" [ref=e112]:
- - heading "编译流程" [level=2] [ref=e113]
- - generic [ref=e114]:
- - generic "从 .cell source 到 CKB artefact 的 compiler workflow" [ref=e115]:
- - article [ref=e116]:
- - img [ref=e118]:
- - generic [ref=e121]: .cell
- - heading "CellScript source" [level=3] [ref=e122]
- - img [ref=e124]
- - article [ref=e126]:
- - img [ref=e128]
- - heading "解析与检查" [level=3] [ref=e132]
- - paragraph [ref=e133]: 语法、类型、effects
- - img [ref=e135]
- - article [ref=e137]:
- - img [ref=e139]
- - heading "IR + Metadata" [level=3] [ref=e145]
- - paragraph [ref=e146]: typed model 与 assurance 信息
- - img [ref=e148]
- - article [ref=e150]:
- - img [ref=e152]
- - heading "Lower 到 RISC-V" [level=3] [ref=e156]
- - paragraph [ref=e157]: ckb-vm codegen 与 optimisations
- - img [ref=e159]
- - article [ref=e161]:
- - img [ref=e163]:
- - generic [ref=e166]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e167]
- - paragraph [ref=e168]: 面向 ckb-vm 的 RISC-V 产物
- - complementary "为 CKB 构建" [ref=e169]:
- - heading "为 CKB 构建" [level=3] [ref=e170]
- - list [ref=e171]:
- - listitem [ref=e172]:
- - img [ref=e173]
- - generic [ref=e175]: ckb-vm 兼容
- - listitem [ref=e176]:
- - img [ref=e177]
- - generic [ref=e179]: 确定性执行
- - listitem [ref=e180]:
- - img [ref=e181]
- - generic [ref=e183]: 最小 syscalls
- - listitem [ref=e184]:
- - img [ref=e185]
- - generic [ref=e187]: 感知 scheduler
- - region "核心模型" [ref=e188]:
- - heading "核心模型" [level=2] [ref=e189]
- - paragraph [ref=e190]: CellScript 让 contract model 保持可见:Cell shapes、effects、locks、flows 与 review metadata 都留在同一个 typed surface 中。
- - paragraph [ref=e191]: 刻意保持窄边界:不是 general-purpose runtime,不是 new VM,也不是 account storage 的伪装。
- - generic [ref=e192]:
- - tablist "CellScript core primitives" [ref=e193]:
- - tab "resource" [selected] [ref=e194] [cursor=pointer]:
- - generic [ref=e195]: resource
- - tab "shared" [ref=e196] [cursor=pointer]:
- - generic [ref=e197]: shared
- - tab "receipt" [ref=e198] [cursor=pointer]:
- - generic [ref=e199]: receipt
- - tab "action" [ref=e200] [cursor=pointer]:
- - generic [ref=e201]: action
- - tab "lock" [ref=e202] [cursor=pointer]:
- - generic [ref=e203]: lock
- - tab "flow" [ref=e204] [cursor=pointer]:
- - generic [ref=e205]: flow
- - tab "invariant" [ref=e206] [cursor=pointer]:
- - generic [ref=e207]: invariant
- - tab "struct / enum" [ref=e208] [cursor=pointer]:
- - generic [ref=e209]: struct / enum
- - tab "identity" [ref=e210] [cursor=pointer]:
- - generic [ref=e211]: identity
- - tabpanel "resource" [ref=e213]:
- - paragraph [ref=e215]: 带有显式 lifecycle effects 的 owned Cell state。
- - generic [ref=e216]:
- - generic [ref=e217]:
- - generic [ref=e218]: 示例摘录
- - generic [ref=e219]: examples/token.cell
- - generic [ref=e220]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance 输出" [ref=e221]:
- - generic [ref=e222]:
- - heading "Assurance 输出" [level=2] [ref=e223]
- - paragraph [ref=e224]: 本地 build 会输出 review metadata。sidecar 是有用 evidence,但离开 build boundary 后不是 authenticated proof。
- - article [ref=e226]:
- - generic "Assurance 输出摘要" [ref=e227]:
- - article [ref=e228]:
- - text: Schema
- - strong [ref=e229]: v42
- - paragraph [ref=e230]: 当前 compiler metadata schema
- - article [ref=e231]:
- - text: Source
- - strong [ref=e232]: vesting.cell
- - paragraph [ref=e233]: shared + receipt + flow
- - article [ref=e234]:
- - text: Boundary
- - strong [ref=e235]: local sidecar
- - paragraph [ref=e236]: validated;shared 时仍需 provenance
- - group [ref=e237]:
- - generic "- Metadata 摘录" [ref=e238] [cursor=pointer]
- - generic [ref=e239]: "# 来自本地 build 的代表性 sidecar excerpt;provenance checks 需要单独处理。"
- - generic [ref=e240]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "工具接口" [ref=e241]:
- - heading "工具接口" [level=2] [ref=e242]
- - generic [ref=e243]:
- - tablist "CellScript tooling commands" [ref=e244]:
- - tab "cellc metadata 读写表面" [selected] [ref=e245] [cursor=pointer]:
- - code [ref=e246]: cellc metadata
- - generic [ref=e247]: 读写表面
- - tab "cellc constraints Transaction 形状" [ref=e248] [cursor=pointer]:
- - code [ref=e249]: cellc constraints
- - generic [ref=e250]: Transaction 形状
- - tab "cellc audit-bundle 审阅包" [ref=e251] [cursor=pointer]:
- - code [ref=e252]: cellc audit-bundle
- - generic [ref=e253]: 审阅包
- - tab "cellc lsp 编辑器反馈" [ref=e254] [cursor=pointer]:
- - code [ref=e255]: cellc lsp
- - generic [ref=e256]: 编辑器反馈
- - tabpanel "cellc metadata 读写表面" [ref=e258]:
- - generic [ref=e259]:
- - generic [ref=e260]: 使用时机
- - paragraph [ref=e261]: review 或 integration 前使用。
- - generic [ref=e262]: 输出
- - paragraph [ref=e263]: Schema、effects、source hashes、target profile。
- - generic [ref=e264]:
- - code [ref=e265]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e266]: "# 为真实 example 输出 review metadata。"
- - region "示例" [ref=e267]:
- - heading "示例" [level=2] [ref=e268]
- - generic [ref=e269]:
- - tablist "示例分组" [ref=e270]:
- - tab "协议 6 个文件" [selected] [ref=e271] [cursor=pointer]:
- - generic [ref=e272]: 协议
- - generic [ref=e273]: 6 个文件
- - tab "原语 6 个文件" [ref=e274] [cursor=pointer]:
- - generic [ref=e275]: 原语
- - generic [ref=e276]: 6 个文件
- - tab "语言 6 个文件" [ref=e277] [cursor=pointer]:
- - generic [ref=e278]: 语言
- - generic [ref=e279]: 6 个文件
- - tabpanel "协议 6 个文件" [ref=e281]:
- - generic [ref=e282]:
- - paragraph [ref=e283]: 包含 Cells、actions 与 constraints 的端到端 contract examples。
- - link "打开 examples 目录" [ref=e284] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - generic [ref=e285]:
- - link "examples/token.cell Fungible Token Mint、transfer、burn、merge 与 amount invariant。 resource invariant burn" [ref=e286] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - generic [ref=e287]: examples/token.cell
- - heading "Fungible Token" [level=3] [ref=e288]
- - paragraph [ref=e289]: Mint、transfer、burn、merge 与 amount invariant。
- - generic [ref=e290]:
- - generic [ref=e291]: resource
- - generic [ref=e292]: invariant
- - generic [ref=e293]: burn
- - link "examples/nft.cell NFT 市场 Collection state、listing receipts、transfer 与 royalty payment。 resource receipt preserve" [ref=e294] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - generic [ref=e295]: examples/nft.cell
- - heading "NFT 市场" [level=3] [ref=e296]
- - paragraph [ref=e297]: Collection state、listing receipts、transfer 与 royalty payment。
- - generic [ref=e298]:
- - generic [ref=e299]: resource
- - generic [ref=e300]: receipt
- - generic [ref=e301]: preserve
- - link "examples/amm_pool.cell AMM Pool Shared reserves、LP receipts、swap 与 liquidity actions。 shared receipt slippage" [ref=e302] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - generic [ref=e303]: examples/amm_pool.cell
- - heading "AMM Pool" [level=3] [ref=e304]
- - paragraph [ref=e305]: Shared reserves、LP receipts、swap 与 liquidity actions。
- - generic [ref=e306]:
- - generic [ref=e307]: shared
- - generic [ref=e308]: receipt
- - generic [ref=e309]: slippage
- - link "examples/vesting.cell Vesting Grant flow、timepoint checks、claim 与 revoke paths。 flow receipt env" [ref=e310] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - generic [ref=e311]: examples/vesting.cell
- - heading "Vesting" [level=3] [ref=e312]
- - paragraph [ref=e313]: Grant flow、timepoint checks、claim 与 revoke paths。
- - generic [ref=e314]:
- - generic [ref=e315]: flow
- - generic [ref=e316]: receipt
- - generic [ref=e317]: env
- - link "examples/launch.cell Launch 流程 Launch state、settlement 与 sale lifecycle。 flow settle claim" [ref=e318] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/launch.cell
- - generic [ref=e319]: examples/launch.cell
- - heading "Launch 流程" [level=3] [ref=e320]
- - paragraph [ref=e321]: Launch state、settlement 与 sale lifecycle。
- - generic [ref=e322]:
- - generic [ref=e323]: flow
- - generic [ref=e324]: settle
- - generic [ref=e325]: claim
- - link "examples/registry.cell Registry Name ownership 与 registry-style state transitions。 resource identity replace" [ref=e326] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/registry.cell
- - generic [ref=e327]: examples/registry.cell
- - heading "Registry" [level=3] [ref=e328]
- - paragraph [ref=e329]: Name ownership 与 registry-style state transitions。
- - generic [ref=e330]:
- - generic [ref=e331]: resource
- - generic [ref=e332]: identity
- - generic [ref=e333]: replace
- - contentinfo [ref=e334]:
- - generic [ref=e335]:
- - generic [ref=e336]:
- - link "CellScript" [ref=e337] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e339]: CellScript
- - paragraph [ref=e340]: CellScript 是面向 CKB Cell-based smart contracts 的语义 DSL,内置 typed metadata 与 assurance by design。Docs、spec、examples 与 source 都随 repository 管理。
- - generic [ref=e341]:
- - link "文档" [ref=e342] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "规范" [ref=e343] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "示例" [ref=e344] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "源码" [ref=e345] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.playwright-mcp/page-2026-06-02T07-52-23-878Z.yml b/.playwright-mcp/page-2026-06-02T07-52-23-878Z.yml
deleted file mode 100644
index 77cb1b3e..00000000
--- a/.playwright-mcp/page-2026-06-02T07-52-23-878Z.yml
+++ /dev/null
@@ -1,323 +0,0 @@
-- generic [active] [ref=e1]:
- - banner [ref=e2]:
- - navigation "Primary navigation" [ref=e3]:
- - link "CellScript home" [ref=e4] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e6]: CellScript
- - generic [ref=e7]:
- - link "Docs" [ref=e8] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - img [ref=e9]
- - generic [ref=e12]: Docs
- - link "Source" [ref=e13] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
- - img [ref=e14]
- - generic [ref=e16]: Source
- - button "Switch language" [ref=e17] [cursor=pointer]:
- - generic [ref=e18]: 中文
- - button "Switch to dark mode" [pressed] [ref=e19] [cursor=pointer]:
- - generic [ref=e22]: Dark
- - main [ref=e23]:
- - region "CellScript" [ref=e24]:
- - generic [ref=e25]:
- - heading "CellScript" [level=1] [ref=e26]
- - paragraph [ref=e27]: Write Cell contracts as typed transitions, not raw wire format.
- - generic [ref=e28]:
- - link "Get started" [ref=e29] [cursor=pointer]:
- - /url: "#getting-started"
- - link "Core model" [ref=e30] [cursor=pointer]:
- - /url: "#core-model"
- - generic "CellScript contract surface" [ref=e31]:
- - generic [ref=e32]:
- - term [ref=e33]: target
- - definition [ref=e34]: ckb-vm RISC-V
- - generic [ref=e35]:
- - term [ref=e36]: model
- - definition [ref=e37]: schema-backed Cells
- - generic [ref=e38]:
- - term [ref=e39]: output
- - definition [ref=e40]: metadata + ProofPlan
- - generic [ref=e41]:
- - generic [ref=e43]: token.cell
- - tablist "CellScript examples" [ref=e45]:
- - tab "Fungible Token" [selected] [ref=e46] [cursor=pointer]
- - tab "NFT" [ref=e47] [cursor=pointer]
- - tab "AMM Pool" [ref=e48] [cursor=pointer]
- - tab "Vesting" [ref=e49] [cursor=pointer]
- - tabpanel "Fungible Token" [ref=e51]:
- - generic [ref=e52]:
- - generic [ref=e53]: "1"
- - generic [ref=e54]: module cellscript::fungible_token
- - generic [ref=e55]:
- - generic [ref=e56]: "2"
- - generic [ref=e57]: // ... invariant and MintAuthority omitted
- - generic [ref=e58]:
- - generic [ref=e59]: "3"
- - generic [ref=e60]: "resource Token has store, create, consume, replace, burn, relock {"
- - generic [ref=e61]:
- - generic [ref=e62]: "4"
- - generic [ref=e63]: "amount: u64,"
- - generic [ref=e64]:
- - generic [ref=e65]: "5"
- - generic [ref=e66]: "symbol: [u8; 8],"
- - generic [ref=e67]:
- - generic [ref=e68]: "6"
- - generic [ref=e69]: "}"
- - generic [ref=e71]: "7"
- - generic [ref=e72]:
- - generic [ref=e73]: "8"
- - generic [ref=e74]: "action transfer_token(token: Token, to: Address) -> next_token: Token"
- - generic [ref=e75]:
- - generic [ref=e76]: "9"
- - generic [ref=e77]: where
- - generic [ref=e78]:
- - generic [ref=e79]: "10"
- - generic [ref=e80]: consume token
- - generic [ref=e81]:
- - generic [ref=e82]: "11"
- - generic [ref=e83]: "create next_token = Token { amount: token.amount, symbol: token.symbol } with_lock(to)"
- - generic [ref=e85]: "12"
- - generic [ref=e86]:
- - generic [ref=e87]: "13"
- - generic [ref=e88]: "action burn(token: Token)"
- - generic [ref=e89]:
- - generic [ref=e90]: "14"
- - generic [ref=e91]: where
- - generic [ref=e92]:
- - generic [ref=e93]: "15"
- - generic [ref=e94]: assert(token.amount > 0, "cannot burn zero")
- - generic [ref=e95]:
- - generic [ref=e96]: "16"
- - generic [ref=e97]: destroy token
- - generic [ref=e98]:
- - generic [ref=e99]: $
- - generic [ref=e100]: cellc examples/token.cell --target-profile ckb
- - region "Getting Started" [ref=e101]:
- - heading "Getting Started" [level=2] [ref=e102]
- - generic [ref=e103]:
- - article [ref=e104]:
- - generic [ref=e105]: "1"
- - heading "Install" [level=3] [ref=e106]
- - paragraph [ref=e107]:
- - code [ref=e108]: cargo install --path .
- - article [ref=e109]:
- - generic [ref=e110]: "2"
- - heading "Compile" [level=3] [ref=e111]
- - paragraph [ref=e112]:
- - code [ref=e113]: cellc examples/token.cell --target riscv64-elf --target-profile ckb
- - article [ref=e114]:
- - generic [ref=e115]: "3"
- - heading "Check" [level=3] [ref=e116]
- - paragraph [ref=e117]:
- - code [ref=e118]: cellc check --target-profile ckb
- - region "Compiler Workflow" [ref=e119]:
- - heading "Compiler Workflow" [level=2] [ref=e120]
- - generic [ref=e121]:
- - generic "Compiler workflow from .cell source to CKB artefact" [ref=e122]:
- - article [ref=e123]:
- - img [ref=e125]:
- - generic [ref=e128]: .cell
- - heading "CellScript source" [level=3] [ref=e129]
- - img [ref=e131]
- - article [ref=e133]:
- - img [ref=e135]
- - heading "Parse & check" [level=3] [ref=e139]
- - paragraph [ref=e140]: Syntax, types, effects
- - img [ref=e142]
- - article [ref=e144]:
- - img [ref=e146]
- - heading "IR + Metadata" [level=3] [ref=e152]
- - paragraph [ref=e153]: Typed model & assurance info
- - img [ref=e155]
- - article [ref=e157]:
- - img [ref=e159]
- - heading "Lower to RISC-V" [level=3] [ref=e163]
- - paragraph [ref=e164]: ckb-vm codegen & optimisations
- - img [ref=e166]
- - article [ref=e168]:
- - img [ref=e170]:
- - generic [ref=e173]: .elf
- - heading "ELF / Assembly" [level=3] [ref=e174]
- - paragraph [ref=e175]: RISC-V artefacts for ckb-vm
- - complementary "Build for CKB" [ref=e176]:
- - heading "Build for CKB" [level=3] [ref=e177]
- - list [ref=e178]:
- - listitem [ref=e179]:
- - img [ref=e180]
- - generic [ref=e182]: ckb-vm compatible
- - listitem [ref=e183]:
- - img [ref=e184]
- - generic [ref=e186]: Deterministic execution
- - listitem [ref=e187]:
- - img [ref=e188]
- - generic [ref=e190]: Minimal syscalls
- - listitem [ref=e191]:
- - img [ref=e192]
- - generic [ref=e194]: Scheduler-aware
- - region "Core Model" [ref=e195]:
- - heading "Core Model" [level=2] [ref=e196]
- - paragraph [ref=e197]: "CellScript keeps the contract model visible: Cell shapes, effects, locks, flows, and review metadata stay in one typed surface."
- - paragraph [ref=e198]: "Narrow by design: not a general-purpose runtime, not a new VM, not account storage in disguise."
- - generic [ref=e199]:
- - tablist "CellScript core primitives" [ref=e200]:
- - tab "resource" [selected] [ref=e201] [cursor=pointer]:
- - generic [ref=e202]: resource
- - tab "shared" [ref=e203] [cursor=pointer]:
- - generic [ref=e204]: shared
- - tab "receipt" [ref=e205] [cursor=pointer]:
- - generic [ref=e206]: receipt
- - tab "action" [ref=e207] [cursor=pointer]:
- - generic [ref=e208]: action
- - tab "lock" [ref=e209] [cursor=pointer]:
- - generic [ref=e210]: lock
- - tab "flow" [ref=e211] [cursor=pointer]:
- - generic [ref=e212]: flow
- - tab "invariant" [ref=e213] [cursor=pointer]:
- - generic [ref=e214]: invariant
- - tab "struct / enum" [ref=e215] [cursor=pointer]:
- - generic [ref=e216]: struct / enum
- - tab "identity" [ref=e217] [cursor=pointer]:
- - generic [ref=e218]: identity
- - tabpanel "resource" [ref=e220]:
- - paragraph [ref=e222]: Owned Cell state with explicit lifecycle effects.
- - generic [ref=e223]:
- - generic [ref=e224]:
- - generic [ref=e225]: Example excerpt
- - generic [ref=e226]: examples/token.cell
- - generic [ref=e227]: "// examples/token.cell resource Token has store, create, consume, replace, burn, relock { amount: u64, symbol: [u8; 8], }"
- - region "Assurance Output" [ref=e228]:
- - generic [ref=e229]:
- - heading "Assurance Output" [level=2] [ref=e230]
- - paragraph [ref=e231]: A local build emits review metadata. Treat the sidecar as useful evidence, not an authenticated proof outside the build boundary.
- - article [ref=e233]:
- - generic "Assurance output summary" [ref=e234]:
- - article [ref=e235]:
- - text: Schema
- - strong [ref=e236]: v42
- - paragraph [ref=e237]: current compiler metadata schema
- - article [ref=e238]:
- - text: Source
- - strong [ref=e239]: vesting.cell
- - paragraph [ref=e240]: shared + receipt + flow
- - article [ref=e241]:
- - text: Boundary
- - strong [ref=e242]: local sidecar
- - paragraph [ref=e243]: validated; provenance required when shared
- - group [ref=e244]:
- - generic "- Metadata excerpt" [ref=e245] [cursor=pointer]
- - generic [ref=e246]: "# Representative sidecar excerpt from a local build; keep provenance checks separate."
- - generic [ref=e247]: "{ \"metadata_schema_version\": 42, \"module\": \"cellscript::vesting\", \"target_profile\": \"ckb\", \"types\": { \"VestingConfig\": { \"kind\": \"shared\", \"capabilities\": [\"store\", \"create\", \"read_ref\"] }, \"VestingGrant\": { \"kind\": \"receipt\", \"flow\": \"Granted -> Claimable -> FullyClaimed\" } }, \"actions\": [{ \"name\": \"claim_vested\", \"effect_class\": \"Mutating\", \"consume_set\": [\"grant\"], \"create_set\": [\"tokens\", \"updated_grant\"], \"ckb_runtime_features\": [\"current_timepoint\"] }], \"proof_plan\": { \"status\": \"review evidence\", \"limit\": \"sidecar provenance must be checked outside the compiler\" } }"
- - region "Tooling Surface" [ref=e248]:
- - heading "Tooling Surface" [level=2] [ref=e249]
- - generic [ref=e250]:
- - tablist "CellScript tooling commands" [ref=e251]:
- - tab "cellc metadata Read/write surface" [selected] [ref=e252] [cursor=pointer]:
- - code [ref=e253]: cellc metadata
- - generic [ref=e254]: Read/write surface
- - tab "cellc constraints Transaction shape" [ref=e255] [cursor=pointer]:
- - code [ref=e256]: cellc constraints
- - generic [ref=e257]: Transaction shape
- - tab "cellc audit-bundle Reviewer packet" [ref=e258] [cursor=pointer]:
- - code [ref=e259]: cellc audit-bundle
- - generic [ref=e260]: Reviewer packet
- - tab "cellc lsp Editor feedback" [ref=e261] [cursor=pointer]:
- - code [ref=e262]: cellc lsp
- - generic [ref=e263]: Editor feedback
- - tabpanel "cellc metadata Read/write surface" [ref=e265]:
- - generic [ref=e266]:
- - generic [ref=e267]: When
- - paragraph [ref=e268]: Use before review or integration.
- - generic [ref=e269]: Output
- - paragraph [ref=e270]: Schema, effects, source hashes, target profile.
- - generic [ref=e271]:
- - code [ref=e272]: cellc metadata examples/vesting.cell --target-profile ckb --json
- - generic [ref=e273]: "# Emit review metadata for a real example."
- - region "Examples" [ref=e274]:
- - heading "Examples" [level=2] [ref=e275]
- - generic [ref=e276]:
- - tablist "Example groups" [ref=e277]:
- - tab "Protocols 6 files" [selected] [ref=e278] [cursor=pointer]:
- - generic [ref=e279]: Protocols
- - generic [ref=e280]: 6 files
- - tab "Primitives 6 files" [ref=e281] [cursor=pointer]:
- - generic [ref=e282]: Primitives
- - generic [ref=e283]: 6 files
- - tab "Language 6 files" [ref=e284] [cursor=pointer]:
- - generic [ref=e285]: Language
- - generic [ref=e286]: 6 files
- - tabpanel "Protocols 6 files" [ref=e288]:
- - generic [ref=e289]:
- - paragraph [ref=e290]: End-to-end contract examples with Cells, actions, and constraints.
- - link "Open examples directory" [ref=e291] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - generic [ref=e292]:
- - link "examples/token.cell Fungible token Mint, transfer, burn, merge, and amount invariant. resource invariant burn" [ref=e293] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/token.cell
- - generic [ref=e294]: examples/token.cell
- - heading "Fungible token" [level=3] [ref=e295]
- - paragraph [ref=e296]: Mint, transfer, burn, merge, and amount invariant.
- - generic [ref=e297]:
- - generic [ref=e298]: resource
- - generic [ref=e299]: invariant
- - generic [ref=e300]: burn
- - link "examples/nft.cell NFT marketplace Collection state, listing receipts, transfer, royalty payment. resource receipt preserve" [ref=e301] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/nft.cell
- - generic [ref=e302]: examples/nft.cell
- - heading "NFT marketplace" [level=3] [ref=e303]
- - paragraph [ref=e304]: Collection state, listing receipts, transfer, royalty payment.
- - generic [ref=e305]:
- - generic [ref=e306]: resource
- - generic [ref=e307]: receipt
- - generic [ref=e308]: preserve
- - link "examples/amm_pool.cell AMM pool Shared reserves, LP receipts, swap and liquidity actions. shared receipt slippage" [ref=e309] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/amm_pool.cell
- - generic [ref=e310]: examples/amm_pool.cell
- - heading "AMM pool" [level=3] [ref=e311]
- - paragraph [ref=e312]: Shared reserves, LP receipts, swap and liquidity actions.
- - generic [ref=e313]:
- - generic [ref=e314]: shared
- - generic [ref=e315]: receipt
- - generic [ref=e316]: slippage
- - link "examples/vesting.cell Vesting Grant flow, timepoint checks, claim and revoke paths. flow receipt env" [ref=e317] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/vesting.cell
- - generic [ref=e318]: examples/vesting.cell
- - heading "Vesting" [level=3] [ref=e319]
- - paragraph [ref=e320]: Grant flow, timepoint checks, claim and revoke paths.
- - generic [ref=e321]:
- - generic [ref=e322]: flow
- - generic [ref=e323]: receipt
- - generic [ref=e324]: env
- - link "examples/launch.cell Launch flow Launch state, settlement, and sale lifecycle. flow settle claim" [ref=e325] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/launch.cell
- - generic [ref=e326]: examples/launch.cell
- - heading "Launch flow" [level=3] [ref=e327]
- - paragraph [ref=e328]: Launch state, settlement, and sale lifecycle.
- - generic [ref=e329]:
- - generic [ref=e330]: flow
- - generic [ref=e331]: settle
- - generic [ref=e332]: claim
- - link "examples/registry.cell Registry Name ownership and registry-style state transitions. resource identity replace" [ref=e333] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/blob/main/examples/registry.cell
- - generic [ref=e334]: examples/registry.cell
- - heading "Registry" [level=3] [ref=e335]
- - paragraph [ref=e336]: Name ownership and registry-style state transitions.
- - generic [ref=e337]:
- - generic [ref=e338]: resource
- - generic [ref=e339]: identity
- - generic [ref=e340]: replace
- - contentinfo [ref=e341]:
- - generic [ref=e342]:
- - generic [ref=e343]:
- - link "CellScript" [ref=e344] [cursor=pointer]:
- - /url: "#top"
- - generic [ref=e346]: CellScript
- - paragraph [ref=e347]: A semantic DSL for CKB Cell-based smart contracts, with typed metadata and assurance by design. Docs, spec, examples, and source live with the repository.
- - generic [ref=e348]:
- - link "Docs" [ref=e349] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/wiki
- - link "Spec" [ref=e350] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/docs
- - link "Examples" [ref=e351] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript/tree/main/examples
- - link "Source" [ref=e352] [cursor=pointer]:
- - /url: https://github.com/a19q3/CellScript
\ No newline at end of file
diff --git a/.rustfmt.toml b/.rustfmt.toml
index 9fb0991e..d6a99aec 100644
--- a/.rustfmt.toml
+++ b/.rustfmt.toml
@@ -4,6 +4,6 @@ use_try_shorthand = true
use_small_heuristics = "Max"
newline_style = "auto"
edition = "2024"
-# Keep the established layout while the language edition migrates. A future
-# style-edition change can be reviewed as a dedicated mechanical diff.
+# Formatting dialect only; this is not a CellScript or Rust language
+# compatibility edition.
style_edition = "2021"
diff --git a/AGENTS.md b/AGENTS.md
index c2fd06d8..bcc129f5 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -11,10 +11,12 @@ crate at the repo root is `cellscript` (workspace member `.`); a sibling crate
`crates/cellscript-wasm` exposes the metadata-only compile path to browsers via
`wasm-bindgen`; `crates/cellscript-ckb-adapter` is a CKB-side adapter; and
`crates/cellscript-fiber-adapter` implements the bounded no-profile Fiber
-interoperability path. The website submodule under `website/` ships an Astro +
-WASM playground that loads the prebuilt bundle.
+interoperability path. `crates/cellscript-artifact-checker` independently
+validates the versioned lowering/source-map/ELF boundary without loading the
+compiler front end or code generator. The website submodule under `website/`
+ships an Astro + WASM playground that loads the prebuilt bundle.
-Version line: the workspace `Cargo.toml` pins `version = "0.22.0"`, Rust
+Version line: the workspace `Cargo.toml` pins `version = "0.24.0"`, Rust
Edition 2024, and `rust-version = "1.97.1"`. `rust-toolchain.toml` and CI pin
that exact toolchain; do not bump either version without coordinating with the
release gate.
@@ -88,9 +90,9 @@ require extra tooling.
| Mode | What it does |
| --- | --- |
-| `dev` | Explicit workspace-package formatting and checks for the compiler, Fiber adapter, CKB adapter, WASM crate, and CKB SDK builder example; strict backend audit (quick); syntax combo audit (quick); forbidden tracked-file check; `git diff --check`. Run before committing. |
-| `ci` | `dev` coverage plus tests and clippy for every workspace package, full package contents check, website build check (requires `npm`), shell + Python syntax check, and trailing-whitespace check. Run before claiming merge-readiness. |
-| `backend` | For IR / codegen / assembler / ABI / ELF / RISC-V changes: explicit workspace-package format checking, `cargo check --locked -p cellscript --all-targets`, `cargo test --locked -p cellscript`, `cargo clippy ... -D warnings`, strict backend audit (full, which itself fires the CKB stateful-scenarios harness via `cellscript_ckb_stateful_scenarios.sh`), `git diff --check`. |
+| `dev` | Explicit workspace-package formatting and checks for the compiler, standalone artifact checker, Fiber adapter, CKB adapter, WASM crate, CKB SDK builder example, `cellscript-tools`, and both independent Registry verifiers; checker mutation/Myelin handoff tests; simulator package scenarios; reproducible Registry Type Script build and CKB-VM tests; native source-policy enforcement; strict backend audit (quick); syntax combo audit (quick); parity-gated skill-pack freshness; `git diff --check`. Run before committing. |
+| `ci` | `dev` coverage plus tests and clippy for every workspace package, `cellscript-tools`, both Registry verifiers, and the Registry Type Script; simulator and CKB-VM package scenarios; Registry API tests plus Node API/verifier bundles; full package contents check, website build check (requires `npm`), shell syntax and native source-policy checks, parity-gated skill-pack freshness, and trailing-whitespace check. Run before claiming merge-readiness. |
+| `backend` | For IR / codegen / assembler / ABI / ELF / RISC-V changes: explicit workspace-package format checking, compiler/checker tests and clippy, both package-scenario backends, standalone-checker dependency enforcement, strict backend audit (full, which itself fires the CKB stateful-scenarios harness via `cellscript_ckb_stateful_scenarios.sh`), and `git diff --check`. |
| `release` / `release-quick` | Everything `ci` does plus release-auxiliary checks (CKB acceptance, NovaSeal pinning, NovaSeal Rust tooling for RISC-V, fresh WASM + VS Code packaging, CKB tx measure tool, etc.) and the CKB acceptance harness (`scripts/ckb_cellscript_acceptance.sh`). These modes need the pinned sibling CKB checkout from `scripts/ckb_acceptance_pin.json`, the NovaSeal submodule, a sibling `ckb-sdk-rust` checkout at tag `v5.1.0`, Docker for the canonical Linux/amd64 WASM build, and `riscv64imac-unknown-none-elf` for NovaSeal verifier builds. Do not run them casually. |
Focused commands are still useful while debugging — `cargo check --locked -p
@@ -102,6 +104,8 @@ Notes on Rust toolchain / target:
- `rust-version = "1.97.1"` in every in-tree Cargo manifest;
`rust-toolchain.toml` and CI select that exact toolchain.
+- Registry reproducibility accepts either GNU `sha256sum` or Perl `shasum` and
+ fails closed if neither SHA-256 tool is available.
- The NovaSeal verifier (`proposals/novaseal/v0-mvp-skeleton/verifier/novaseal_btc_verifier_riscv`)
builds with `--target riscv64imac-unknown-none-elf` in release mode.
`scripts/cellscript_gate.sh` will not pass without it.
@@ -116,18 +120,39 @@ The root `Cargo.toml` declares a virtual workspace with these members:
- `.` (the `cellscript` library + `cellc` bin at `src/main.rs`)
- `crates/cellscript-ckb-adapter`
- `crates/cellscript-fiber-adapter`
+- `crates/cellscript-artifact-checker`
+- `crates/cellscript-tools`
- `crates/cellscript-wasm`
- `examples/ckb-sdk-builder`
Excluded from the workspace (still buildable through their own manifests):
+`contracts/registry-type-script`, `services/registry-verifier`,
+`services/registry-artifact-verifier`,
`proposals/novaseal/v0-mvp-skeleton/{harness,verifier}` and
`proposals/novaseal/agreement-profile-v0/harness/ckb_vm`. `tools/ckb-tx-measure`
defines its own `[workspace]` (no parent) because it pulls `ckb-jsonrpc-types`
and `ckb-types` from a sibling CKB checkout (`../ckb`).
+The 0.23 tooling migration is complete. `cellscript-tools` is authoritative
+for gate, evidence, fixture, and release validation; website data generation
+uses the tracked Node modules under `website/scripts/`. Every gate runs the
+native source-policy check, which rejects retired interpreter sources,
+generated bytecode/cache artifacts, and interpreter references in active
+tooling source across the repository and initialized submodules.
+
+The 0.24 package closure is lock-authoritative. `Cell.lock` version 3 uses
+`cellscript-lock-v0.24-graph-v1` and binds the root manifest digest, canonical
+dependency nodes/edges, dependency manifests and sources, feature/test roots,
+and CKB environment chain identity. Use `cellc lock` or `cellc update` for an
+intentional repin. Build/check/test must not perform mutable version selection;
+`--frozen` also forbids network access and lockfile writes. Bounded external
+resolvers run only during explicit repinning and normalize to exact Registry or
+Git sources before the lock is written.
+
Features (root crate):
-- `default = ["cli", "lsp"]`
+- `default = ["cli", "lsp", "vm-runner"]` — native `cellc test` can execute
+ the authoritative CKB-VM scenario backend without an extra feature flag.
- `cli` — pulls `clap`, `colored`, `env_logger`, `keyring`, `reqwest` (rustls),
`ring`, `base64`. Native I/O, gated out of the wasm build.
- `lsp` — pulls `tower-lsp` and `tokio` (full). Gated out of wasm.
@@ -215,8 +240,9 @@ When extracting emitter methods from `codegen/mod.rs` into a sub-module:
Fields of types shared across module boundaries also need `pub(crate)`.
4. When removing code by line number with `sed`, delete later ranges first
so earlier line numbers stay stable.
-5. After every deletion, brace-count with `python3 -c` to verify brace
- balance before compiling.
+5. After every deletion, run formatting and a focused Rust check. The parser
+ and compiler are authoritative for brace balance; do not rely on textual
+ brace-count heuristics.
## CLI surface (where to add a new command)
@@ -239,6 +265,11 @@ Existing command families to be aware of:
## Testing approach
+- Package runtime fixtures use `cellscript-test-scenario-v1` JSON under
+ `tests/scenarios/`. `cellc test` requires `--backend simulator|ckb-vm|all`
+ unless `--no-run` is explicitly selected. Simulator evidence is
+ non-consensus; CKB-VM evidence is runtime-only, and the v1 runner does not
+ inject its local Cell bookkeeping into transaction syscalls.
- Integration tests live in `tests/*.rs`. Per-version suites exist
(`tests/v0_14.rs`, `v0_16.rs`, `v0_17.rs`, `v0_18.rs`) — when adding a
versioned boundary, add it to the latest suite and keep prior ones intact
@@ -266,8 +297,8 @@ Existing command families to be aware of:
## CKB / NovaSeal gotchas
- The CKB acceptance harness is `scripts/ckb_cellscript_acceptance.sh`. It
- expects a sibling `../ckb-sdk-rust` checkout at tag `v5.1.0` and runs
- `scripts/validate_ckb_cellscript_production_evidence.py` against the build
+ expects a sibling `../ckb-sdk-rust` checkout at tag `v5.1.0` and runs the
+ `cellscript-tools validate-production-evidence` command against the build
reports. Its build reports, source provenance hashes, and production
hardening gate (`final_production_hardening_gate`) are referenced by
string from the gate script; if you rename them, update
diff --git a/BRANCHES.md b/BRANCHES.md
index 07316cd4..612c5658 100644
--- a/BRANCHES.md
+++ b/BRANCHES.md
@@ -6,32 +6,55 @@ The 0.12-era work is the formal proposal baseline for grant-style acceptance
discussions. Do not use that historical baseline to describe the current
`main` branch state.
+## nightly-0.24
+
+`nightly-0.24` is the closed maintenance line for independently verified
+artifacts and executable package evidence. It builds on the closed 0.23
+Edition 2026 and native-tooling boundary. The stable release boundary is the
+exact `v0.24.0` tag; later commits on the branch are not implicitly part of
+that release. External Myelin, Fiber, and RGB++ claims remain separately
+evidence gated as described in the 0.24 release notes.
+
+## nightly-0.23
+
+`nightly-0.23` is the implementation-complete predecessor for Edition 2026,
+resolved target/assurance/ABI/schema profiles, the deployed Registry path, and
+the native release-tooling migration. It deliberately rejects older package,
+lock, deployment, receipt, builder, and raw entry-witness identities rather
+than migrating them. Its release notes are a development-scope record, not a
+stable release certificate or production CKB evidence.
+
## nightly-0.22
-`nightly-0.22` is the active implementation line for the 0.22 type-and-set
-theory roadmap. It begins from the integrated 0.21.1 `main` checkpoint. Treat
-features as shipped only when parser, formatter, type checking, lowering,
-metadata, LSP, tests, docs, and the matching gate agree; the branch name is not
-production evidence by itself.
+`nightly-0.22` is the historical implementation line for the 0.22 type-and-set
+theory roadmap. The stable release boundary is the `v0.22.0` tag, not the
+nightly branch name.
+
+## main
+
+`main` is the integration baseline. Use an exact release tag for stable-release
+comparisons and an exact nightly branch for development-scope comparisons;
+do not infer release evidence from `main` alone.
+
+## v0.24.0
-## main / nightly-0.21
+`v0.24.0` is the current stable release for the verified-artifact checker,
+executable package scenarios, lock-authoritative package graph, and LS-IDL
+Registry path. Use the exact tag ref `refs/tags/v0.24.0` for stable
+comparisons. The release does not promote the separately pending Myelin,
+Fiber, or RGB++ external evidence boundaries.
-`main` and `nightly-0.21` currently carry the 0.21 release-candidate
-implementation checkpoint. This line includes the 0.21 compiler, metadata,
-CLI, MCP, skill-pack, and builder-resolution work, but it is not a production
-CKB release claim until the matching `ci`, backend, and release gates have
-recorded passing evidence.
+## v0.23.0
-Use this line for 0.21 maintenance work. Keep P2 Template Merkleisation and
-new observation syntax out of this line unless their parser, metadata,
-backend, docs, and gate evidence are all promoted together.
+`v0.23.0` is the historical stable baseline for Edition 2026, the Registry,
+and native release tooling. Use the exact tag ref `refs/tags/v0.23.0` when
+reproducing that release.
-## v0.20.0
+## v0.22.0
-`v0.20.0` is the latest stable release baseline before the 0.21 RC line. Use it
-as the comparison point for 0.21 audits, metadata schema changes, and
-compatibility notes. Be explicit when comparing against the tag ref
-`refs/tags/v0.20.0`, because local branches may also be named `v0.20.0`.
+`v0.22.0` is the historical stable baseline for the type-and-set-theory line.
+Use the exact tag ref `refs/tags/v0.22.0` when reproducing that release rather
+than treating a later nightly branch as equivalent evidence.
## 0.16
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7e827e17..674d541b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,441 @@
# Changelog
+## 0.24.0 - 2026-08-22
+
+- Align the complete 0.24 release identity across every workspace and verifier
+ crate, the independent checker dependency, lockfiles, Registry Type Script,
+ Myelin handoff, VS Code extension, website WASM bundle, README, and release
+ documentation. Restore the 0.23 release hardening that propagates one pinned
+ CKB checkout through backend scenarios and transaction-measure tooling.
+
+- Remove the unreachable external RISC-V toolchain fallback and make the
+ audited internal assembler the sole ELF-emission path. Reassign `E2400` to
+ the verified lowering/source-map boundary that already uses it, so the
+ compiler error registry now matches live diagnostics.
+- Split the code generator into its documented ABI, assembler, call,
+ collection, expression, frame, runtime, schema, and Cell-operation modules;
+ remove crate-wide Clippy exemptions; and replace long positional helper
+ signatures with named context records.
+- Harden the final wide-integer boundary: resolve dynamic Molecule-backed
+ `u128` fields before loading limbs, preserve the left operand across a
+ second dynamic load, and make `u128 +/- u64` overflow and underflow fail
+ closed with runtime error 49. Add exact CKB-VM regression vectors, remove
+ zero-divisor paths from the NFT and vesting examples, and reject
+ non-canonical SemVer at Registry admission.
+- Remove the CKB adapter's deprecated, permanently fail-closed automatic
+ deployment methods. Callers must build a verified unsigned deployment
+ transaction and hand signing to an external wallet.
+- Replace the deprecated `serde_yaml` crate with the maintained
+ `serde_yaml_ng` continuation in the Fiber configuration renderer.
+- Remove tracked browser-session traces and unused design captures, ignore
+ local Codex state, and make the native source-policy check reject future
+ `.playwright-mcp` artifacts.
+- Keep the production and Pudge Testnet Registry websites on one UI contract.
+ The website gate now builds both environments from the same source, verifies
+ six shared Registry routes, and requires every generated CSS/JavaScript asset
+ to be byte-identical. Testnet now ships the LS-IDL route, defaults LS-IDL
+ lookups and API examples to `testnet`, and no longer preloads production
+ package records into Manage or artifact-detail fallbacks. Network-specific
+ origins, chain selection, sandbox expiry, no-index policy, and storage remain
+ isolated.
+- Preserve the corrected website release lineage that removed stale 0.22
+ metadata. Publish the homepage as `v0.24.0` while keeping the Playground on
+ the matching 0.24 compiler identity. The canonical WASM bundle uses asset
+ identity `20260819-v0.24.0-19ce8898` and SHA-256
+ `19ce8898e8161f100edebf6f982d856f3e59bfac31572642b53f2e01c70a1a17`;
+ distribution checks bind the current stable release URL and displayed tag
+ separately from the compiler version, asset identity, and digest.
+ Remove inherited 0.25-only package-interface, typed-semantics, and future-
+ syntax presentation fields from the 0.24 website branch while retaining the
+ 0.24 LS-IDL surface. Publish the exact 0.24 and 0.25 website gitlinks on
+ separate release branches so both parent lines clone without hidden commits.
+- Add first-class LS-IDL publication and discovery for CKB Lock Scripts.
+ `cellc artifact ls-idl` validates the bounded 0.1 schema, appends
+ `SHA-256(raw idl.json)` to an executable, generates a publish-ready bundle,
+ and fetches byte-exact IDL by deployed Script identity. Registry admission,
+ both verifier boundaries, immutable object storage, Postgres lookup,
+ canonical `/v1/ckb/scripts/:code_hash/interfaces/ls-idl` reads, and the
+ compatibility `/idl/:code_hash` route all enforce the same schema and
+ executable-suffix contract. Pin all 17 current upstream client vectors and
+ seven derive/example IDLs, and add an opt-in test that runs the actual
+ upstream Rust client against Registry's compatibility handler. Extend that
+ opt-in acceptance through the fixes merged upstream in `ckb_sudt_script`
+ PR #7, real RISC-V contract builds, LS-IDL-bound ELFs, and all 25 example
+ CKB-VM tests without a local compatibility overlay. Add a
+ runnable Rust example, website lookup/detail surfaces, and VS Code
+ validate/bind/fetch commands. Name the website tab `LS-IDL` rather than the
+ ambiguous `Interface`, give it the canonical `/registry/LS-IDL` route with a
+ permanent redirect from `/registry/interface`, and align its lookup panel
+ with the full-width Browse surface.
+ Keep implementation correctness and security review outside this
+ byte-identity claim.
+- Ship the 0.24 package and Registry trust closure, informed by Sui Move's
+ package-alt separation of resolution from compilation. Replace permissive
+ custom version checks with standard SemVer; make `Cell.lock` v3 a
+ manifest-digest-bound dependency graph with exact source/content identity,
+ outgoing alias edges, runtime/test feature roots, and genesis-bound CKB
+ environments. Add explicit `cellc lock`, lock-authoritative build/check/test,
+ `--locked`/`--frozen`/`--offline`, package aliases, optional features,
+ test-only dependencies, environment overrides, immutable Git-commit and
+ Registry-snapshot caches, and bounded hash-pinned external resolvers that
+ normalize to an ordinary source pin and never execute during locked builds.
+ Keep build dependencies fail-closed until isolated execution exists. Replace
+ scattered Registry artifact-profile conditionals with the versioned,
+ fail-closed `cellscript-registry-profile-catalog-v1`; only CellScript source
+ profiles are dependency-resolving, while executable, reproducible, and copy
+ profiles remain explicit non-resolving artifacts. Add a portable
+ `examples/package_graph` fixture that executes alias, SemVer, feature,
+ test-only, environment, and override selection from the frozen graph.
+- Implement the 0.24 trust-closure core. CKB ELF builds now emit canonical
+ `cellscript-verified-lowering-record-v1` and
+ `cellscript-source-artifact-map-v1` sidecars, bound by metadata schema 58 and
+ checked by the compiler-independent, budgeted
+ `cellscript-artifact-checker`. The checker independently parses static
+ ELF64/RISC-V layout, decodes the emitted instruction/call/branch surface,
+ checks CFG reachability, frames and stack restoration, ABI/ProofPlan/syscall
+ contracts, block digests, source ranges, and cross-file identities with
+ stable `V2400`-`V2418` rejection codes and deterministic mutations. Package
+ the checker independently and require checker-first crates.io publication
+ before the matching compiler crate. Extend
+ `verify-artifact` with separate binding, structural, lowering-record,
+ CKB-VM, chain, and semantic-equivalence states. Make `cellc test` require an
+ explicit simulator/CKB-VM backend for execution and add versioned,
+ fail-closed scenarios with exact runtime errors, local multi-step live-Cell
+ replacement, source-linked coverage, cycle/size/capacity limits, and exact
+ artifact/checker bindings. Add a least-privilege Registry artifact worker
+ whose production graph excludes the compiler. Freeze the CellScript side of
+ the Myelin handoff without a new profile or raw-witness alias; keep external
+ Myelin adoption and the incomplete Fiber/RGB++ matrices explicitly pending.
+ Add `examples/scenario_basics` as the runnable positive/exact-negative
+ scenario and four-file verified-artifact walkthrough.
+- Freeze the 0.23 implementation scope around Edition 2026 and its resolved
+ profile/entry identities, the deployed Registry and publisher-session path,
+ native gate tooling, the recoverable website workbench, and the bounded Fiber
+ evidence actually obtained on this line. Keep mainnet Registry Script
+ activation, publisher-owned wallet adoption, and incomplete Fiber/RGB++
+ matrices as explicit external checkpoints. Retire the proposed CellScript
+ Off-Chain Session Runtime target: current Myelin uses an attested external
+ compiler process, production requests stay on `ckb`, and Myelin-owned
+ extended semantics remain outside the compiler. Add the 0.24 trust-closure
+ roadmap for an independent bounded artifact checker, executable package
+ tests, source maps, the Myelin adapter handoff, and conditional ecosystem
+ evidence promotion.
+
+## 0.23.0 - 2026-08-11
+
+- Make Registry chain confirmation compatible with the standard CKB v0.207.0
+ RPC schema by resolving a live Cell's committed block through
+ `get_transaction.tx_status` instead of depending on a proxy-specific
+ `get_live_cell.block_hash` extension. Recorded evidence now names both RPC
+ methods while historical evidence identifiers remain readable. Make the
+ tooling-release gate parse website scripts structurally and enforce the
+ stable build steps in order, so adding intermediate regression checks no
+ longer breaks CI through an obsolete exact-string comparison. Let the full
+ backend stateful audit use an explicit isolated pinned CKB checkout through
+ `CELLSCRIPT_CKB_REPO`, avoiding any need to modify an unrelated sibling CKB
+ worktree during release validation. Propagate the release gate's existing
+ `--ckb-repo` selection to its independent `ckb-tx-measure` workspace as
+ well, so every CKB-dependent release check resolves against the same pin.
+- Turn the browser Playground into a recoverable Cell-oriented workbench.
+ Browser-local workspace snapshots now retain source files, entry selection,
+ active panels, and an honest saved/dirty state across refreshes. Failed
+ compiles preserve the last valid output as explicitly stale evidence, and a
+ failed compiler Worker can be restarted without reloading the page. Add a
+ metadata-derived Cell Flow view, source-linked action/type selection, a
+ contextual Inspector, and an optional three-step guide while keeping raw
+ actions, types, metadata, diagnostics, and the existing no-ELF WASM boundary
+ available. Unify the site's interactive controls around dense, standard, and
+ workflow button sizes with distinct neutral, selected, and primary states.
+ Registry and Playground actions now share the same contrast-safe treatment,
+ compact copy controls, focus rings, press feedback, and Phosphor interaction
+ icons. The Playground compile action keeps a stable label and exposes busy
+ state without turning the action itself into a transient status display.
+- Bound Registry discovery requests so the interface can no longer remain in
+ an indefinite loading state. The browser now delays skeletons to avoid
+ flashes on fast responses, reports slow and retrying requests, retries once
+ with a strict deadline, preserves stale or mirrored results when available,
+ and otherwise presents an explicit recovery action. Registry rows and empty
+ states use compact artifact identity marks and low-motion transitions instead
+ of generic placeholder panels. Redesign the global navigation around three
+ primary destinations, quieter utility controls, Phosphor SVG icons, and a
+ touch-safe mobile drawer with focus containment, Escape/backdrop dismissal,
+ scroll locking, and persistent theme and language controls. Source discovery
+ now has a quiet hover/focus label, while fixed full and compact language
+ controls prevent locale changes from shifting the desktop navigation.
+ The Playground now places its toolbar, compiler panels, and status bar in a
+ centred wide-screen Studio frame instead of switching ambiguously between
+ the site frame and an edge-to-edge editor. An explicit, persisted focus mode
+ removes site chrome and expands the same workbench to the viewport without a
+ first-paint flash; phones retain the existing panel switcher and site header.
+ Registry discovery now translates verification, deployment, availability,
+ and consumption mode into one consumer-facing use conclusion, supports
+ URL-restored intent filters, and shows the latest release date without
+ replacing the canonical status axes. Artifact details split the consumer
+ action from the maintainer's current evidence or deployment task, explain
+ each accepted evidence kind while keeping full hashes and raw JSON
+ accessible, and avoid presenting build verification as a security audit.
+ Maintenance keeps the selected task visible while progressively disclosing
+ alternate and destructive operations.
+- Close the first-publish browser/CLI loop with `cellc publish --authorise`.
+ cellc now creates and stores the delegated P-256 publishing key locally,
+ opens a 15-minute exact-coordinate wallet session, and resumes publishing
+ automatically after Registry approval; `--no-open` supports remote and
+ terminal-only environments. Session reads expose neither the polling secret
+ nor the resulting key ID to the browser. The publishing key is written to
+ the OS keychain as `pending` before the browser opens, promoted to `active`
+ only when either successful status returns the matching key ID, and removed
+ only after the Registry confirms cancellation or pending-session expiry. A
+ local polling deadline performs one final authoritative read and otherwise
+ preserves the pending key. Completed sessions remain poll-readable for 24
+ hours after their 15-minute approval window, closing the boundary race in
+ which wallet approval commits just before the CLI's next poll. This closes
+ the process-exit window after wallet approval without treating local state
+ as Registry authority. The browser
+ token survives same-tab refresh in `sessionStorage` and is removed on
+ completion or expiry, with an executable storage-lifecycle regression test.
+ Session mode now
+ lists only connectors that can actually complete the browser flow and folds
+ challenge creation, wallet signing, and completion into one **Approve
+ publishing access** action; the full external-wallet directory remains in
+ the explicit manual CLI path. Session completion atomically consumes the
+ nonce, records the publishing key, claims or reviews the namespace, updates
+ the session, and writes its audit trail. Concurrent or replayed completion
+ returns the committed result without duplicating authority. The Publish page
+ is now session-first: a direct visit presents one `cellc publish --authorise`
+ starting command, while a CLI session becomes a one-screen wallet approval
+ surface with one current action and end-to-end release progress. Artifact
+ identity is read-only in session mode because cellc and the manifest remain
+ authoritative. External signing, manifest scaffolding, and existing-key
+ checks remain available in a deliberately secondary advanced workspace.
+ Technical scope and session identifiers stay collapsed by default, and
+ loading, expiry, retry, review-pending, and terminal-continuation states keep
+ the same stable layout. Safe publishing-access reads retry once with bounded
+ deadlines, while signed writes are never retried automatically; an unchanged
+ failed request keeps its signature, and any coordinate or payload change
+ clears it with an explicit explanation.
+- Add an isolated Pudge Testnet Registry Sandbox. Its API, Postgres database,
+ object volume, signing origin, RPC identity, website build, wallet storage,
+ and deployment evidence are separate from production. Sandbox releases are
+ hidden 72 hours after admission; version JSON is deleted at expiry and source
+ objects are deleted after a 24-hour grace period, while minimal audit
+ tombstones remain. The API rejects a wrong-network RPC and cross-environment
+ deployment payloads. `cellc artifact record-deployment --network testnet`
+ defaults to the Pudge Registry API, and `cell-dep` revalidates liveness on the
+ network recorded in accepted evidence. Pudge chain history remains immutable:
+ expiry removes Registry indexing and off-chain objects, not on-chain Cells.
+- Complete the Registry's generalized artifact and chain-evidence path. Rust,
+ C, JavaScript, and other CKB artifacts now keep explicit source, build,
+ deployment, TCB, and copy-only identities instead of being presented as
+ CellScript dependencies. Reproducible profiles require P-256-signed reports
+ from two to sixteen policy-approved builders spanning the configured minimum
+ number of independent trust domains. Reports bind the signed environment,
+ source, recipe, executable, build log, builder identity, and predecessor
+ evidence before verification becomes `verified`; deployment is rejected
+ until that evidence exists. Add `cellc artifact reproduction-report` and
+ `cellc artifact reproduction-evidence`, wallet-ready mainnet commitment
+ transaction intents, and `cellc auth reproducer create` for generating a
+ builder-local P-256 key plus a public policy enrollment record without
+ exposing PKCS#8 material. Explicit CI-key output is mode 0600 on Unix and
+ no-overwrite. Add fixed Registry Type/commitment Lock configuration,
+ Type-Script-indexed `CSREGv1` scans, and scheduled lifecycle reconciliation
+ that demotes spent commitments or stale deployment Cells without deleting
+ historical evidence. Both Script code CellDeps must be live and sufficiently
+ confirmed before the chain path becomes ready. The chain path is implemented
+ but remains operationally disabled until the canonical mainnet Registry Type
+ Script, commitment custody Lock, and both CellDeps are deployed and configured.
+- Harden the unified artifact Registry boundary: default discovery now hides
+ pending/rejected releases and paginates by package coordinate; deployment
+ records and admin recovery must match the immutable CKB `hash_type` and
+ `dep_type`; generated CellDep descriptors re-query mainnet and reject spent
+ code/DepGroup Cells; RPC calls are time- and size-bounded; and deployment
+ capability use commits with the chain-verified state. Positive static-mirror
+ publication now follows database admission, while suppressive states are
+ mirrored first to fail closed; deferred sync is audited rather than
+ advertising uncommitted positive state. Add the capability-signed
+ `cellc artifact set-availability` publisher path used by Manage, defensive
+ frontend page deduplication, and complete `Artifact.toml` plus bundle
+ scaffolding for non-CellScript submissions.
+- Split delegated Registry authority into independent `publish`, `deployment`,
+ and `availability` scopes. Release admission no longer grants permission to
+ attach CKB deployment evidence or change a release's public availability;
+ exact-coordinate and namespace-wildcard grants remain supported. In a
+ package directory the CLI infers only the exact `publish` scope; deployment
+ and availability grants require explicit `--scope` flags. The API, Submit command builder,
+ validation, tests, and operator documentation now share this contract.
+- Redesign the Registry submission and package-maintenance surfaces around
+ contextual, task-first workflows: remove the public `Manage` tab and
+ redundant form controls, link maintenance from package details, guide first
+ publication through explicit connect, sign, submit, and namespace-claim actions, show the publication
+ orientation only once per browser, replace the CCC post-connect surface with
+ a compact Registry-owned wallet chooser that has no unrelated `Manage`
+ action, reveal yank fields only for the yank task, and close write commands
+ over verify, dry-run, and publish. Registry route and workflow state changes
+ now use reduced-motion-aware transitions instead of abrupt swaps. Browse and
+ Submit share one DOM-persistent Registry header through navigation, avoiding
+ replacement flicker while retaining the active locale; wallet connection no
+ longer gates artifact definition or local preflight, and appears only after
+ the developer has chosen an artifact coordinate and the new-capability path.
+ Existing capability keys use a read-only server check for live status,
+ expiry, exact publish scope, and active namespace ownership; entering a key
+ ID never unlocks the UI locally. Final publish commands include the
+ server-confirmed `--capability-key-id`. Primary authorisation controls use
+ larger, shorter-reach interaction targets. Client-routed returns now
+ reinitialize Submit and artifact-detail behavior instead of leaving stale
+ event handlers behind. The advanced publisher keeps a per-environment,
+ same-tab draft of non-secret artifact fields and UI state while explicitly
+ excluding wallet signatures, challenge/browser tokens, capability payloads,
+ and private keys. Registry, Publish, and API also share one route-transition,
+ vertical-rhythm, active-tab, and localized-title contract; Browse reuses its
+ latest in-memory result during background refresh rather than flashing a
+ skeleton on every return.
+ Browse uses a no-flash loading state, URL-backed server search, and API
+ pagination; bundled data appears only as an explicitly labelled error
+ fallback. Static and live package details share one responsive view with
+ localized statuses and copyable audit values. Publisher authorisation now
+ accepts both JoyID
+ (`joyid_ckb`) and standard CKB secp256k1 (`ckb_secp256k1`) principals through
+ the CCC CKB-signer boundary. Production exposes only mainnet; the separately
+ built Pudge Sandbox constructs a testnet client without adding a network
+ selector to either environment. The frontend never accepts
+ mnemonic words; traditional recovery phrases remain inside the wallet. CLI
+ auth commands use `--wallet-signature`, with `--joyid-signature` retained as
+ a visible compatibility alias, and the API adds the corresponding typed
+ principal migration and signature verification. The compact chooser now
+ preserves the complete twelve-wallet CKB directory: compatible CCC CKB
+ signers connect directly, while other entries are explicitly labelled as
+ external links for importing a compatible `wallet-signature.json`; opening a
+ link is never represented as a wallet connection. The browser checks the
+ signature shape and principal binding before submission, while the API
+ remains authoritative for cryptographic verification. Every entry
+ now uses the corresponding official Nervos wallet-directory SVG rather than
+ an autogenerated letter mark or a runtime favicon. The chooser header no
+ longer reserves space for a hidden back control, so its title, explanatory
+ text, and wallet list share one left alignment edge. Submit now asks for the
+ artifact kind and source language independently, and Manage groups publish,
+ inspection, reproduction, deployment, commitment, and availability as
+ isolated task flows; hidden task fields can no longer leak into the selected
+ workflow.
+- Deploy the public Registry production slice at
+ `api.registry.cellscript.dev` and `registry.cellscript.dev`: Postgres 17 is
+ the authoritative write store, the Node 22 adapter persists source snapshots
+ and version-addressed JSON to an isolated object volume, and a read-only
+ nginx service exposes `/packages/*` independently of the API/database
+ process. The production stack adds live dependency-aware readiness, bounded
+ request bodies, structured logs, health checks, log rotation, generated
+ secrets, HTTPS, and an 8 MiB proxy admission limit sized for the 5 MiB source
+ snapshot contract. Public package search, package detail, and ordered
+ evidence promotion APIs are live. A daily systemd job writes atomic,
+ checksum-protected Postgres/object-store backups with bounded retention; its
+ first backup passed database and archive restore inspection. Public version
+ responses now expose immutable snapshot descriptors, the read-only service
+ serves those content-addressed snapshots, and the CLI verifies object SHA-256,
+ safe paths, per-file BLAKE2b, and the whole-tree source hash before atomically
+ materialising a dependency. The CLI uses the public API's accepted status as
+ the default resolution authority while retaining the explicit
+ `CELLSCRIPT_REGISTRY_URL` Git/offline override, and the website renders the
+ live Registry with a clearly labelled read-only bundled mirror only when the
+ API is unavailable. The former Registry Coming Soon surface is removed.
+ First-publish admission is now user-reachable end to end: `cellc auth
+ namespace claim` and the submit page's **Claim namespace** action explicitly
+ establish namespace ownership between capability registration and publish.
+ Publish admission now commits package, snapshot, version, capability-use,
+ acceptance-audit, and completed-idempotency state in one database transaction;
+ pre-admission failures release the request-owned nonce and retry reservation,
+ while production readiness verifies both managed object-store prefixes and
+ volume initialization repairs their ownership and modes recursively.
+ Explicit unverified/quarantined install acknowledgements are persisted in
+ dependency tables, preventing lock refreshes and later builds from losing the
+ caller's risk policy. Publish admission now transactionally creates a leased,
+ bounded verification job. A separate least-privilege worker authenticates the
+ immutable snapshot, compiles it with the current CellScript compiler, checks
+ the signed manifest and compatibility-profile identities, atomically records
+ `verified_build` evidence, and then converges the static version object.
+ PostgreSQL `FOR UPDATE SKIP LOCKED` claims, expiring leases, three-attempt
+ retry/dead-letter handling, operator queue metrics/requeue endpoints, bounded
+ subprocess time/output/memory, and API readiness tied to the worker heartbeat
+ make the formerly documented asynchronous queue real. Public search/list now
+ excludes `source_published` and `indexed_pending` by default while preserving
+ explicit status queries and direct audit URLs. Package-manifest identity uses
+ canonical recursively sorted JSON, eliminating cross-process `HashMap` order
+ drift between publisher and verifier. Deploy that worker to the live
+ production topology and exercise external publish, queue claim, real
+ compilation, evidence promotion, static convergence, default visibility, and
+ a fresh consumer install/check/build without an unverified override. The
+ one-time seeded smoke identity and live objects were removed afterward, queue
+ counts returned to zero, and a checksum-verified backup captured the migrated
+ clean state. Production Compose now accepts explicit prebuilt API/verifier
+ image references so shared hosts can deploy with `--no-build`. Harden the API
+ and static Registry response boundary with HSTS, anti-framing, no-sniff,
+ permissions policy, cross-domain-policy denial, and a deny-all CSP for JSON
+ surfaces. Add a reproducible website production Compose/nginx contract with
+ a read-only root filesystem, bounded temporary filesystems, health checks,
+ log rotation, `no-new-privileges`, and matching browser security headers. A
+ production recovery drill restores the post-`0002` dump into an isolated
+ Postgres 17 container, extracts the object archive into an isolated volume,
+ verifies both migrations and all seven core Registry tables, and removes the
+ temporary restore resources afterward.
+- Close the 0.23 syntax-audit consistency gaps: canonical type declarations
+ now use comma-terminated fields, syntax-combination gates cover canonical and
+ comma-free compatibility input, checked example mirrors use named `U64_MAX`
+ overflow expressions, and `dev` / `ci` reject regressions. Rebind the three
+ affected timelock transaction recipes to the deterministic scoped ELF data
+ hashes produced by those equivalent named expressions. CKB-VM crypto
+ primitive fixtures now place `CSARGv1` through the current
+ `WitnessArgs.input_type` adapter path instead of the retired raw-witness
+ alias.
+- Make `edition = "2026"` the single mandatory CellScript package contract.
+ Edition is now explicitly a long-lived source-semantics epoch rather than an
+ annual release or complete ABI bundle. The resolved compatibility profile
+ independently composes source semantics, target, primitive assurance, entry
+ payload and placement ABIs, and metadata schemas under
+ `cellscript-resolved-compatibility-profile-v1`. Metadata schema 57 carries
+ those axes, and their hash remains bound across cache keys, registry records,
+ `Cell.lock` v2, `Deployed.toml` v2, compile receipts v2, generated builders,
+ native APIs, WASM, LSP, and the playground. Missing or different editions
+ and older persisted schemas are rejected; no migration or compatibility
+ reader is provided. Generated CKB entries also remove the raw-`CSARGv1`
+ witness fallback, so placement ABI v2 accepts the payload only inside
+ canonical `WitnessArgs.input_type`. The deployed public registry uses one
+ current contract: signed entries, the production database schema,
+ version-addressed static JSON, and the website require both Edition 2026 and
+ the separate compatibility-profile hash, with no fallback reader for
+ incomplete entries. Generic admin status changes cannot manufacture
+ `verified_build`, `deployed`, or `on_chain_committed` claims; those states
+ require the ordered evidence-promotion path. See the
+ [0.23 development release notes](docs/releases/CELLSCRIPT_0_23_RELEASE_NOTES.md).
+- Complete the native-tooling cleanup: neutralize migration-era identifiers,
+ remove tracked legacy traceback logs and cache exclusions, rename the native
+ tooling integration suite, and add a repository-wide source-policy command
+ to every gate. The policy traverses initialized submodules and rejects
+ retired interpreter sources, generated bytecode/cache artifacts, capture
+ logs, and active tooling references before they can re-enter the release
+ contract. The canonical WASM container now explicitly selects its already
+ installed pinned Rust toolchain, avoiding an unnecessary network sync during
+ release builds.
+- Restore the 0.23 release gate after the Python-to-Rust tooling migration by
+ checking the semantic `requires_all_bundled_examples_strict_original_ckb`
+ and emitted `source_provenance` CKB boundaries plus the Rust-backed NovaSeal
+ acceptance summary instead of retired temporary-directory, helper, and shell
+ field names, and refresh the NovaSeal external TCB review template to the
+ current Rust-migrated verifier source-tree hash. Refresh the RWA legal-review
+ template's profile source-tree hash after its manifest declares Edition
+ 2026. CKB transaction-recipe replay now tops up fresh devnet funding when a
+ fixture has no disposable change output and its replacement input cannot
+ fund every typed output.
+ Rebuild the website WASM bundle with the witness-placement-v2 compiler so the
+ playground and native release artifacts expose the same ABI.
+- Add the explicit `cellscript-witnessargs-input-type-v2` placement ABI for
+ parameterized CKB entries. Generated wrappers now resolve witnesses relative
+ to the active script group, decode the `CSARGv1` payload from
+ `WitnessArgs.input_type`, preserve wallet/multisig ownership of `lock`, reject
+ malformed or wrongly placed payloads, and reject group-relative raw-v1
+ placement. Builders place `input_type` before SDK signing because the
+ complete `WitnessArgs` is signed. A canonical signed multisig-v2 CKB-VM
+ regression covers a type group whose first input is not transaction input
+ zero and rejects post-signing witness mutation. The Rust-native v0.23
+ transaction recipes are rebound to the resulting audited ELF data hashes so
+ the production stateful gate cannot silently replay stale code identities.
+
## 0.22.0 - 2026-07-19
- Make GitHub publication depend on the full release gate. Release evidence now
diff --git a/CODING_STYLE.md b/CODING_STYLE.md
index b3e50ee5..6fcff59b 100644
--- a/CODING_STYLE.md
+++ b/CODING_STYLE.md
@@ -28,6 +28,31 @@ project contract.
short reason; crate-wide or module-wide clippy allowances are only for
documented legacy or transition boundaries.
+## On-Chain Registry Script Rules
+
+`contracts/registry-type-script` is an independent `no_std` CKB Script crate.
+Its release binary is part of the Registry trust boundary, not a host utility.
+
+- Build only with the pinned repository toolchain and
+ `build_reproducible_release.sh`; the script path-remaps sources, strips the
+ RISC-V ELF, and verifies both SHA-256 and CKB data hash against the tracked
+ release manifest.
+- Keep host checksum tooling portable: reproducible scripts may use GNU
+ `sha256sum` or Perl `shasum`, must select one explicitly, and must fail closed
+ when neither exists.
+- Keep Script args equal to the 32-byte custody Lock Script hash and the
+ accepted Cell data exactly `CSREGv1 || 32-byte commitment hash`. Every group
+ Cell must use that Lock and every transition must consume a Cell using it;
+ otherwise an unauthorised creator could impersonate an official commitment.
+ Format changes require a new protocol prefix and migration plan, not a
+ permissive parser.
+- Run the `ckb-testtool` suite for every Script change. Positive creation,
+ replacement, and destruction plus unauthorised creation, incorrect custody
+ Locks, malformed input/output, and non-canonical args are mandatory evidence.
+- Production deployment requires a live mainnet code Cell, the standard
+ custody Lock CellDep, sufficient confirmations, and a committed deployment
+ manifest. Local CKB-VM tests are not mainnet deployment evidence.
+
## Backend And Codegen Rules
`src/codegen/mod.rs` is the orchestration layer of a multi-file backend.
@@ -96,6 +121,42 @@ implicit backend contracts more implicit.
codegen. Business rules must be explicit in DSL source, structured IR, or
metadata before the backend lowers them.
+## Verified Artifact Boundary Rules
+
+- Treat the ELF, compile metadata, canonical lowering record, and canonical
+ source map as one build bundle. A change to any identity, schema, mapping, or
+ structural claim must update all producers, consumers, tests, docs, and gate
+ checks in the same change.
+- Keep `cellscript-artifact-checker` independent of the parser, resolver, type
+ checker, IR, optimizer, assembler, and code generator. Production
+ dependencies may provide only bounded parsing, versioned schema, canonical
+ hashing, stable diagnostics, and minimal ELF utilities.
+- Checker traversal must be preceded by byte/count budgets. Unknown schemas or
+ fields, malformed ranges, path escape, mismatched identities, and budget
+ exhaustion fail closed with one stable `V24xx` rejection code and bounded
+ diagnostics.
+- Do not label structural validation semantic equivalence. Keep binding,
+ structural, lowering-record, CKB-VM, and chain evidence as separate fields.
+- Any new checker invariant requires a deterministic negative mutation and a
+ valid compiler-produced fixture. ELF/codegen changes also require the
+ `backend` gate because mapped ranges, block digests, control flow, stack
+ discipline, or instruction policy may change.
+
+## Executable Package Scenario Rules
+
+- `cellc test` success must name and run `simulator`, `ckb-vm`, or `all` unless
+ `--no-run` is explicitly selected. Compile-only discovery is never described
+ as executed test evidence.
+- Scenario and report schemas reject unknown fields. Source/oracle paths are
+ relative and confined; Cell names, replacement edges, scripts, witnesses,
+ runtime errors, and declared limits are validated before execution.
+- Simulator results remain `development-non-consensus`. CKB-VM results remain
+ runtime evidence. Neither may be promoted to RPC admission, deployment,
+ commitment, confirmation, or complete source equivalence.
+- The v1 local live-Cell model proves bookkeeping only; it does not inject
+ scenario Cells into CKB syscalls. Transaction-shaped cases continue to cite
+ the stateful CKB oracle until a syscall harness is explicitly promoted.
+
## CKB Semantics
- Use CKB terms precisely: input Cell, output Cell, lock script, type script,
@@ -152,9 +213,10 @@ sub-module (e.g. `assembler.rs`, `runtime.rs`, `abi.rs`):
4. **Delete from back to front.** When removing code by line number with `sed`,
delete later ranges first to keep earlier line numbers stable.
-5. **Brace-count after every deletion.** Use `python3 -c` to verify brace
- balance before attempting compilation. Off-by-one `sed` ranges can leave
- orphaned lines or eat closing braces.
+5. **Check delimiters after every deletion.** Run `cargo fmt --check`, then the
+ focused `cargo check --locked -p cellscript --all-targets` before the next
+ extraction. Off-by-one deletion ranges can leave orphaned lines or consume
+ closing braces.
### Module Boundary: Schema vs Cell Operations vs Orchestration
diff --git a/Cargo.lock b/Cargo.lock
index 05d1fc80..1392a0df 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -154,6 +154,12 @@ dependencies = [
"syn 2.0.117",
]
+[[package]]
+name = "base16ct"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+
[[package]]
name = "base64"
version = "0.21.7"
@@ -308,14 +314,17 @@ dependencies = [
[[package]]
name = "cellscript"
-version = "0.22.0"
+version = "0.24.0"
dependencies = [
"anyhow",
"base64 0.22.1",
"blake2b_simd",
"camino",
+ "cellscript-artifact-checker",
"cellscript-ckb-adapter",
+ "ckb-sdk",
"ckb-std",
+ "ckb-system-scripts 0.6.0",
"ckb-testtool",
"ckb-types",
"ckb-vm",
@@ -330,6 +339,8 @@ dependencies = [
"regex",
"reqwest",
"ring",
+ "secp256k1",
+ "semver",
"serde",
"serde_json",
"sha2",
@@ -341,9 +352,20 @@ dependencies = [
"unicode-width",
]
+[[package]]
+name = "cellscript-artifact-checker"
+version = "0.24.0"
+dependencies = [
+ "blake2b_simd",
+ "clap",
+ "serde",
+ "serde_json",
+ "tempfile",
+]
+
[[package]]
name = "cellscript-ckb-adapter"
-version = "0.22.0"
+version = "0.24.0"
dependencies = [
"anyhow",
"ckb-hash",
@@ -361,11 +383,12 @@ name = "cellscript-ckb-sdk-builder-example"
version = "0.1.0"
dependencies = [
"cellscript-ckb-adapter",
+ "ckb-types",
]
[[package]]
name = "cellscript-fiber-adapter"
-version = "0.22.0"
+version = "0.24.0"
dependencies = [
"anyhow",
"camino",
@@ -378,14 +401,37 @@ dependencies = [
"reqwest",
"serde",
"serde_json",
- "serde_yaml",
+ "serde_yaml_ng",
"tempfile",
"thiserror 1.0.69",
]
+[[package]]
+name = "cellscript-tools"
+version = "0.24.0"
+dependencies = [
+ "anyhow",
+ "blake2b-ref",
+ "ckb-jsonrpc-types",
+ "ckb-types",
+ "clap",
+ "hex",
+ "hex-literal",
+ "k256",
+ "percent-encoding",
+ "regex",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "sha2",
+ "time",
+ "toml 0.8.19",
+ "wait-timeout",
+]
+
[[package]]
name = "cellscript-wasm"
-version = "0.22.0"
+version = "0.24.0"
dependencies = [
"cellscript",
"serde",
@@ -949,6 +995,12 @@ dependencies = [
"windows-sys 0.59.0",
]
+[[package]]
+name = "const-oid"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
+
[[package]]
name = "constant_time_eq"
version = "0.4.2"
@@ -1024,6 +1076,18 @@ dependencies = [
"cfg-if",
]
+[[package]]
+name = "crypto-bigint"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+ "subtle",
+ "zeroize",
+]
+
[[package]]
name = "crypto-common"
version = "0.1.7"
@@ -1053,6 +1117,16 @@ dependencies = [
"parking_lot_core",
]
+[[package]]
+name = "der"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
+dependencies = [
+ "const-oid",
+ "zeroize",
+]
+
[[package]]
name = "deranged"
version = "0.5.8"
@@ -1120,6 +1194,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
+ "const-oid",
"crypto-common",
]
@@ -1155,12 +1230,42 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d978bd5d343e8ab9b5c0fc8d93ff9c602fdc96616ffff9c05ac7a155419b824"
+[[package]]
+name = "ecdsa"
+version = "0.16.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
+dependencies = [
+ "der",
+ "digest",
+ "elliptic-curve",
+ "signature",
+]
+
[[package]]
name = "either"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
+[[package]]
+name = "elliptic-curve"
+version = "0.13.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
+dependencies = [
+ "base16ct",
+ "crypto-bigint",
+ "digest",
+ "ff",
+ "generic-array",
+ "group",
+ "rand_core 0.6.4",
+ "sec1",
+ "subtle",
+ "zeroize",
+]
+
[[package]]
name = "enum-repr-derive"
version = "0.2.0"
@@ -1224,6 +1329,16 @@ version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
+[[package]]
+name = "ff"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393"
+dependencies = [
+ "rand_core 0.6.4",
+ "subtle",
+]
+
[[package]]
name = "find-msvc-tools"
version = "0.1.9"
@@ -1366,6 +1481,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
+ "zeroize",
]
[[package]]
@@ -1437,6 +1553,17 @@ dependencies = [
"siphasher 0.3.11",
]
+[[package]]
+name = "group"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
+dependencies = [
+ "ff",
+ "rand_core 0.6.4",
+ "subtle",
+]
+
[[package]]
name = "hashbrown"
version = "0.12.3"
@@ -1482,6 +1609,12 @@ dependencies = [
"arrayvec",
]
+[[package]]
+name = "hex-literal"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46"
+
[[package]]
name = "http"
version = "1.4.0"
@@ -1811,6 +1944,19 @@ dependencies = [
"serde_json",
]
+[[package]]
+name = "k256"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b"
+dependencies = [
+ "cfg-if",
+ "ecdsa",
+ "elliptic-curve",
+ "sha2",
+ "signature",
+]
+
[[package]]
name = "keccak"
version = "0.1.6"
@@ -2005,6 +2151,15 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967"
+[[package]]
+name = "num_threads"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "numext-constructor"
version = "0.1.6"
@@ -2823,6 +2978,19 @@ dependencies = [
"syn 1.0.109",
]
+[[package]]
+name = "sec1"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
+dependencies = [
+ "base16ct",
+ "der",
+ "generic-array",
+ "subtle",
+ "zeroize",
+]
+
[[package]]
name = "secp256k1"
version = "0.30.0"
@@ -2965,10 +3133,10 @@ dependencies = [
]
[[package]]
-name = "serde_yaml"
-version = "0.9.34+deprecated"
+name = "serde_yaml_ng"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
+checksum = "7b4db627b98b36d4203a7b458cf3573730f2bb591b28871d916dfa9efabfd41f"
dependencies = [
"indexmap",
"itoa",
@@ -3036,6 +3204,16 @@ dependencies = [
"libc",
]
+[[package]]
+name = "signature"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
+dependencies = [
+ "digest",
+ "rand_core 0.6.4",
+]
+
[[package]]
name = "simd-adler32"
version = "0.3.9"
@@ -3235,7 +3413,9 @@ checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
dependencies = [
"deranged",
"itoa",
+ "libc",
"num-conv",
+ "num_threads",
"powerfmt",
"serde_core",
"time-core",
@@ -3625,6 +3805,15 @@ version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+[[package]]
+name = "wait-timeout"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "walkdir"
version = "2.5.0"
diff --git a/Cargo.toml b/Cargo.toml
index 7a83054e..c5f4e687 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,12 +1,16 @@
[workspace]
members = [
".",
+ "crates/cellscript-artifact-checker",
"crates/cellscript-ckb-adapter",
"crates/cellscript-fiber-adapter",
+ "crates/cellscript-tools",
"crates/cellscript-wasm",
"examples/ckb-sdk-builder",
]
exclude = [
+ "contracts/registry-type-script",
+ "services/registry-verifier",
"proposals/novaseal/agreement-profile-v0/harness/ckb_vm",
"proposals/novaseal/v0-mvp-skeleton/harness/ckb_vm",
"proposals/novaseal/v0-mvp-skeleton/verifier/novaseal_btc_verifier",
@@ -17,7 +21,7 @@ resolver = "3"
[package]
name = "cellscript"
-version = "0.22.0"
+version = "0.24.0"
edition = "2024"
rust-version = "1.97.1"
autobins = false
@@ -29,6 +33,7 @@ exclude = [
".audit-report*.md",
".cap/",
".codex/",
+ ".dockerignore",
".gitignore",
".gitmodules",
".idea/",
@@ -39,14 +44,17 @@ exclude = [
"AGENTS.md",
"BRANCHES.md",
"README_REVIEW.md",
+ "audits/",
"cellscript-*.png",
+ "clippy.toml",
"docs/",
"docs/wiki/",
"editors/",
+ "integrations/",
"proposals/",
- "scripts/__pycache__/",
"services/",
"src/bin/",
+ "tests/myelin_handoff.rs",
"tools/",
"website/",
]
@@ -74,6 +82,8 @@ serde_json = "1.0"
blake2b_simd = "1.0"
toml = "0.8"
hex = "0.4"
+semver = "1.0"
+cellscript-artifact-checker = { version = "=0.24.0", path = "crates/cellscript-artifact-checker" }
indexmap = "=2.2.6"
@@ -101,7 +111,7 @@ tower-lsp = { version = "0.20", optional = true }
tokio = { version = "1", features = ["full"], optional = true }
[features]
-default = ["cli", "lsp"]
+default = ["cli", "lsp", "vm-runner"]
# CLI surface: binary, REPL, incremental session. Gated out of the
# wasm build because clap/colored/env_logger pull native I/O.
cli = ["dep:base64", "dep:clap", "dep:colored", "dep:env_logger", "dep:keyring", "dep:reqwest", "dep:ring", "dep:unicode-width"]
@@ -118,7 +128,10 @@ ckb-acceptance = []
pretty_assertions = "1.4"
tempfile = "3.10"
ckb-testtool = "1.1"
+ckb-sdk = { path = "../ckb-sdk-rust" }
+ckb-system-scripts-v0_6_0 = { package = "ckb-system-scripts", version = "=0.6.0" }
ckb-std = { version = "1.1.0", default-features = false, features = ["type-id"] }
+secp256k1 = { version = "=0.30.0", features = ["recovery"] }
sha2 = "0.10"
regex = "1"
cellscript-ckb-adapter = { path = "crates/cellscript-ckb-adapter" }
diff --git a/README.md b/README.md
index e5d8fe2c..0c1e245d 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
[](https://github.com/CellScript-Labs/CellScript/actions/workflows/ci.yml)
-[](https://github.com/CellScript-Labs/CellScript/releases/tag/v0.22.0)
+[](https://github.com/CellScript-Labs/CellScript/releases/tag/v0.24.0)
[](LICENSE-MIT)
[](Cargo.toml)
[](#target-profiles)
@@ -20,9 +20,12 @@ artifacts, together with typed metadata for auditing, policy checks, schema
binding, and scheduler-aware execution.
The current stable release is
-[CellScript v0.22.0](https://github.com/CellScript-Labs/CellScript/releases/tag/v0.22.0).
-See the [0.22 release notes](docs/releases/CELLSCRIPT_0_22_RELEASE_NOTES.md)
-for its shipped surface, evidence boundaries, and migration checklist.
+[CellScript v0.24.0](https://github.com/CellScript-Labs/CellScript/releases/tag/v0.24.0).
+The [0.24 release notes](docs/releases/CELLSCRIPT_0_24_RELEASE_NOTES.md)
+describe its verified-artifact, executable-test, and integration boundaries.
+The [0.24 roadmap](roadmap/CELLSCRIPT_0_24_ROADMAP.md) records its independently
+checked artifact, executable-test, and explicitly deferred ecosystem
+boundaries.
In this README, metadata means machine-readable semantic facts emitted by the
compiler: schema layout, Cell effects, access summaries, source hashes,
@@ -116,7 +119,7 @@ curl -fsSL https://raw.githubusercontent.com/CellScript-Labs/CellScript/main/scr
Or pin a specific version:
```bash
-CELLSCRIPT_VERSION=0.22.0 curl -fsSL https://raw.githubusercontent.com/CellScript-Labs/CellScript/main/scripts/install.sh | sh
+CELLSCRIPT_VERSION=0.24.0 curl -fsSL https://raw.githubusercontent.com/CellScript-Labs/CellScript/main/scripts/install.sh | sh
```
The release page publishes `SHA256SUMS` alongside all four platform archives.
@@ -124,7 +127,7 @@ The release page publishes `SHA256SUMS` alongside all four platform archives.
Build the exact published source instead:
```bash
-git clone --branch v0.22.0 --depth 1 https://github.com/CellScript-Labs/CellScript.git
+git clone --branch v0.24.0 --depth 1 https://github.com/CellScript-Labs/CellScript.git
cd CellScript
cargo install --locked --path .
```
@@ -491,6 +494,7 @@ or CellFabric intent engine.
- [VS Code extension](editors/vscode-cellscript)
- [Runtime error codes](docs/CELLSCRIPT_RUNTIME_ERROR_CODES.md)
+- [Edition policy](docs/CELLSCRIPT_EDITION_POLICY.md)
- [Entry witness ABI](docs/CELLSCRIPT_ENTRY_WITNESS_ABI.md)
- [BIP340 verifier CellDep ABI](docs/CELLSCRIPT_SIGNATURE_VERIFIER_ABI.md)
- [Collections support matrix](docs/CELLSCRIPT_COLLECTIONS_SUPPORT_MATRIX.md)
@@ -530,9 +534,12 @@ or CellFabric intent engine.
- [0.20 release notes](docs/releases/CELLSCRIPT_0_20_RELEASE_NOTES.md)
- [0.21 release notes](docs/releases/CELLSCRIPT_0_21_RELEASE_NOTES.md)
- [0.22 release notes](docs/releases/CELLSCRIPT_0_22_RELEASE_NOTES.md)
+- [0.23 release notes](docs/releases/CELLSCRIPT_0_23_RELEASE_NOTES.md)
+- [0.24 release notes](docs/releases/CELLSCRIPT_0_24_RELEASE_NOTES.md)
- [0.22 type and set theory roadmap](roadmap/CELLSCRIPT_0_22_TYPE_AND_SET_THEORY_ROADMAP.md)
- [0.22 bounded Fiber interoperability guide](examples/fiber/README.md)
- [Agentic Loops and cellscript-mcp tutorial](docs/wiki/Tutorial-13-Agentic-Loops-and-cellscript-mcp.md)
+- [LS-IDL for CKB Lock Scripts tutorial](docs/wiki/Tutorial-15-LS-IDL-for-CKB-Lock-Scripts.md)
---
@@ -598,11 +605,12 @@ Emits ckb-vm-compatible RISC-V assembly (`.s`) or ELF (`.elf`):
buffers, and per-entrypoint trampolines.
- CKB syscall ABI with proper syscall number tables and source-flag conventions.
-### Metadata & Policy
+### Metadata, Lowering Evidence & Policy
-The compiler emits a single JSON metadata sidecar (`.elf.meta.json` /
-`.s.meta.json`) that captures everything the chain scheduler, audit tools, and
-policy gates need — without re-parsing source:
+The compiler emits a JSON metadata sidecar (`.elf.meta.json` / `.s.meta.json`).
+CKB ELF builds additionally emit canonical `.elf.lowering.json` and
+`.elf.sourcemap.json` sidecars. The standalone artifact checker consumes all
+four identities without calling the compiler front end or code generator:
| What | Produced by | Consumed by |
|---|---|---|
@@ -610,6 +618,8 @@ policy gates need — without re-parsing source:
| Effect classification, resource summaries | `types/` | Scheduler, audit tools |
| Scheduler witness ABI & access domains | `codegen/` | CKB block builder, parallel scheduler |
| Source hashes, artifact CKB Blake2b | `lib.rs` | `cellc verify-artifact`, CI gates |
+| Stable lowering graph, ABI/frame/ProofPlan/syscall contracts, block digests | `verified_artifact.rs` | standalone checker, Registry artifact worker |
+| Source spans to final ELF instruction ranges | `verified_artifact.rs` | checker, executable-test coverage, audit tools |
| Verifier obligations, pool invariants | `ir/` | On-chain verifier, policy checker |
| Covenant ProofPlan trigger/scope/read coverage, risk diagnostics, macro provenance | `proof_plan/` | `cellc explain proof`, auditors |
| Target-profile policy violations | `lib.rs` | `cellc check`, CI gates |
@@ -631,11 +641,11 @@ CKB cycle/capacity estimates.
|---|---|---|
| **CLI** | `cli/` + `main.rs` | `cellc` binary with all subcommands |
| **LSP** | `lsp/` + `lsp/server.rs` | In-process `LspServer` + `tower-lsp` JSON-RPC over stdio (`cellc --lsp`) |
-| **VS Code** | `editors/vscode-cellscript/` | Shells out to `cellc` for LSP startup, reports, action-builder generation, and package/registry verification |
+| **VS Code** | `editors/vscode-cellscript/` | Shells out to `cellc` for LSP startup, reports, action-builder generation, package/registry verification, and LS-IDL validate/bind/fetch flows |
| **MCP server** | `cellscript-mcp` (separate bin) | Read-only Model Context Protocol JSON-RPC server that exposes compiler reports and explain commands to MCP-aware agents (Claude Code, Cursor, Aider, Codex, etc.) |
| **Formatter** | `fmt/` | Idempotent formatter for `cellc fmt` and LSP |
| **Doc generator** | `docgen/` | HTML/Markdown/JSON docs from AST + metadata |
-| **Simulator** | `simulate.rs` | Simulated evaluator — emits `TraceEvent` logs without ckb-vm |
+| **Executable test runner** | `simulate.rs` + `cli/test_runner.rs` | Versioned scenarios under the non-consensus simulator and local authoritative CKB-VM backend, with exact runtime errors and conservative coverage |
| **REPL** | `repl.rs` | Interactive read-eval-print loop |
| **Generated builder package** | `cellc gen-builder --target typescript` | Emits a registry-bound TypeScript action-builder package with runtime adapter contracts and self-tests |
@@ -643,7 +653,7 @@ CKB cycle/capacity estimates.
| Module | What it does |
|---|---|
-| **Package workflow** (`package/`) | `Cell.toml` parsing, path/git/registry source-package dependency resolution, transitive `Cell.lock` reproducibility, `cellc init`/`add`/`remove`/`install --path`/`install namespace/pkg@version`/`update`/`info`. Registry source packages are resolved through discovery, tag-pinned Git provenance, `registry.json`, and verified `source_hash`; non-CellScript registry artifact profiles remain fail-closed. |
+| **Package workflow** (`package/`) | `Cell.toml` parsing, standard SemVer, path/git/registry source resolution, manifest-bound `Cell.lock` v3 graphs, aliases, features/dev modes, genesis-bound environments, and bounded update-time resolvers; `cellc init`/`add`/`remove`/`lock`/`install`/`update`/`info`. Builds consume exact immutable Git/Registry pins and verified source hashes without mutable discovery; the Registry profile catalog keeps non-CellScript artifacts non-resolving. |
| **Incremental compiler** (`incremental/`) | Dependency-graph-aware build cache — skips recompilation when inputs are unchanged. |
| **Build integration** (`lib.rs`) | Resolves `Cell.toml` → `CellBuildConfig`, merges CLI + manifest options, selects entry scope, runs policy gates, writes artifacts + metadata. |
@@ -671,11 +681,13 @@ flowchart TB
Rules --> Policy
Policy --> IR["IR lowering + optimizer\nCell effects, entry ABI,\nverifier obligations"]
IR --> Metadata["metadata sidecar\nschema, ABI, runtime errors,\nconstraints, CKB policy"]
+ IR --> Lowering["verified lowering record + source map\ncanonical graph, final ranges, block digests"]
IR --> Codegen["RISC-V codegen\nCKB syscalls, raw ELF,\nper-entry trampolines"]
Codegen --> Artifact["CKB artifact\n.s / .elf"]
- Artifact --> Verify["cellc verify-artifact\nprofile, source hash,\nartifact hash, policy flags"]
+ Artifact --> Verify["cellc verify-artifact\nbinding + structural + lowering states"]
Metadata --> Verify
+ Lowering --> Verify
Artifact --> Builder["builder workflow\ninputs, outputs, outputs_data,\nwitness, cell_deps, capacity floors"]
Metadata --> Builder
@@ -686,8 +698,10 @@ This separates three boundaries:
- **compiler boundary** — parse, type/state checks, CKB policy rejection, IR,
codegen, and metadata;
-- **artifact boundary** — `cellc verify-artifact` proves the artifact, sidecar,
- source hash, target profile, and selected policy flags agree;
+- **artifact boundary** — `cellc verify-artifact` uses the independent checker
+ to prove binding, static ELF structure, lowering-record, source-map, target
+ profile, and selected policy agreement; it does not claim complete semantic
+ equivalence or VM execution;
- **chain-evidence boundary** — builders and acceptance scripts prove concrete
CKB transaction shape, capacity, cycles, tx size, and lock/action behavior.
@@ -716,8 +730,9 @@ policy defaults:
```toml
[package]
+edition = "2026"
name = "token"
-version = "0.22.0"
+version = "0.24.0"
entry = "src/main.cell"
source_roots = ["src"]
@@ -732,42 +747,85 @@ deny_ckb_runtime = false
deny_runtime_obligations = false
```
-Command-line flags can tighten policy checks for a build or CI job.
+`edition = "2026"` is mandatory and is the only supported source-semantics
+edition. The year is a long-lived epoch label, not an annual release cadence.
+Target profile, primitive assurance, metadata schemas, and entry/witness ABIs
+remain independently versioned; the resolved compatibility profile combines
+those axes with the edition and is bound into lock, deployment, receipt,
+registry, and builder identities. Older or missing persisted identities are
+rejected rather than migrated. Command-line flags can tighten policy checks
+for a build or CI job. The full contract is in the
+[edition policy](docs/CELLSCRIPT_EDITION_POLICY.md).
### Package Workflow
CellScript ships a local-first package workflow in `cellc`. Local packages,
-source roots, path/git/registry source-package dependencies, lockfile refresh,
+source roots, path/git/registry source-package dependencies, explicit lock refresh,
and package build/check/doc/fmt flows are production-style. Registry resolution
-is deliberately narrow: `cellc install`, `cellc build`, and `cellc update`
-accept CellScript source packages with `Cell.toml`, `registry.json`, tag-pinned
-Git provenance, and verified `source_hash`; non-CellScript artifact profiles
-still fail closed.
+is deliberately narrow: `cellc lock`, `cellc install`, and `cellc update`
+query the public API for an accepted CellScript source-package version, while
+`build`, `check`, and `test` consume only the pinned graph. Resolution commands
+download its immutable Registry source snapshot, reject unsafe paths or opaque
+archive formats, and verify snapshot SHA-256, every file's BLAKE2b, `Cell.toml`
+identity, Edition/profile identity, and the whole-tree `source_hash`.
+Non-CellScript artifact profiles still fail closed.
**Supported today:**
- `cellc init` — create an application or library package with `Cell.toml`
- `cellc build` / `check` / `doc` / `fmt` — operate on the current package
+- `cellc test --backend simulator|ckb-vm|all` — execute versioned
+ `*.scenario.json` fixtures; `--no-run` is the explicit compile-only mode
- top-level `cellc ` and report commands accept `.cell` files, package
directories, or `Cell.toml` manifests where the command supports an input
- `cellc add --path` — records local path dependencies in `Cell.toml`
+- `cellc lock` — explicitly resolve the complete runtime/test/feature and CKB
+ environment graph and write `Cell.lock` v3
- `cellc install --path` and `cellc update` — resolve local path dependency
graphs and refresh `Cell.lock`
- `cellc install cellscript/pkg@1.2.0` — resolve a registry source-package
- dependency through discovery, tag checkout, `registry.json`, and
- `source_hash` verification
+ dependency through the production public API, accepted-status selection,
+ immutable snapshot materialisation, Edition/profile checks, and layered hash
+ verification
- Local path dependencies are resolved recursively and included in module
loading, source hashing, and metadata
-- `Cell.lock` — captures direct and transitive resolved dependency identity
- for reproducible checks
+- `Cell.lock` v3 — binds the root manifest digest, canonical dependency nodes,
+ outgoing alias edges, dependency manifests, whole-tree hashes, exact Git or
+ Registry pins, feature/test modes, and genesis-bound CKB environments
+- Commit `Cell.lock` to version control. It is reviewed build input, not a local
+ cache; only `cellc lock`, `cellc update`, or dependency-editing commands may
+ repin its dependency graph
+- `build`/`check`/`test --locked` — explicitly assert the existing dependency
+ graph; the graph is authoritative even without the flag
+- `--frozen` — imply offline mode and suppress all lockfile writes;
+ `--offline` permits only materialized exact sources
+- `[features]`, optional `dep:`, `[dev_dependencies]`, local
+ `package = "..."` aliases, and environment overrides are lock-graph inputs;
+ `[build.dependencies]` remains fail-closed pending isolated execution
+- `[resolvers.]` — optional absolute-path/SHA-256-bound, time/output
+ bounded update-time resolver; its versioned response must normalize to an
+ exact Registry version or Git commit and is never executed by locked builds
+- `examples/package_graph` — runnable frozen/offline alias, SemVer, feature,
+ test-only dependency, and explicit CKB-environment graph
+- `examples/scenario_basics` — runnable positive and exact-negative scenarios
+ under both simulator and CKB-VM, plus a four-file artifact walkthrough
+- `examples/registry_ls_idl` — runnable LS-IDL validation, executable binding,
+ Registry bundle scaffolding, exact-byte fetch, and compatibility vectors
- `cellc info --json` — exposes package metadata for CI and tooling
- `cellc package verify --json` — fails closed when `Cell.toml`, source hash,
- dependency resolution, or build identity disagree with `Cell.lock`
+ dependency resolution, or build identity disagree with `Cell.lock`; run an
+ ordinary locked build first when a tracked example lock is graph-only
- `cellc registry verify --json` — checks off-chain deployment facts against
`Cell.lock` and `Deployed.toml`
-- `cellc registry verify --live --rpc-url ... --json` — adds CKB RPC live-cell
- checks for deployment records when RPC evidence is available
-- `cellc publish` — public registry publish path; `cellc publish --offline`
+- `cellc registry verify --live --rpc-url ... --json` — adds CKB RPC
+ `get_live_cell` liveness plus `get_transaction.tx_status` commit and
+ confirmation checks for deployment records when RPC evidence is available
+- `cellc publish --authorise` — recommended interactive first-publish path;
+ opens an exact-coordinate 15-minute browser authorisation session, keeps the
+ pending delegated key recoverable, and resumes publishing after the Registry
+ returns the matching key ID (`--no-open` supports remote terminals)
+- `cellc publish` — public registry publish path once a delegated publisher
+ credential is active; `cellc publish --offline`
computes the package source hash and mirrors the version entry into
`registry.json` for local fixtures, audit, and offline fallback
- `cellc registry add` — write a discovery-index entry into the local/offline
@@ -777,43 +835,90 @@ still fail closed.
**Public registry boundary / fail-closed:**
-- Public registry publishing is designed around JoyID-rooted publisher
- identity: CCC is the connection layer, JoyID is the accepted publisher root,
- and delegated publisher credentials are stored in the OS keychain for daily
- `cellc publish`; see
+For interactive first use, run `cellc publish --authorise`. The explicit
+`auth capability create/submit` and `auth namespace claim` sequence below is
+the manual, CI, recovery, and external-wallet path.
+
+- Public registry publishing uses typed wallet-rooted publisher identities:
+ CCC is the browser connection layer, `joyid_ckb` accepts JoyID passkeys, and
+ `ckb_secp256k1` accepts standard CKB wallets that expose a compressed public
+ key and recoverable CKB message signature. Delegated publisher credentials
+ are stored in the OS keychain for daily `cellc publish`; see
[`docs/CELLSCRIPT_REGISTRY_PRODUCTION_BOUNDARY_ADR.md`](docs/CELLSCRIPT_REGISTRY_PRODUCTION_BOUNDARY_ADR.md)
-- `cellc auth capability create --principal-id --scope
- publish:/ --expires 90d --json >
+- `cellc auth capability create --principal-type
+ --principal-id
+ --scope publish:/ --expires 90d --json >
capability-payload.json` creates the local P-256 capability key when
`--capability-pubkey` is not supplied, stores the private key in the OS
- keychain, and prints the JoyID-bound authorisation payload. The
- `principal_id` is the normalized JoyID/CKB identity binding derived by the
- CCC-backed JoyID submit flow, not the display address.
- After the same payload is signed through JoyID/CCC, `cellc auth capability
- submit --payload capability-payload.json --joyid-signature
- joyid-signature.json` registers the delegated key with the write API. Bare
+ keychain, and prints the wallet-bound authorisation payload. The
+ `principal_id` is the normalized binding derived from the connected signer,
+ not the display address. After the same payload is signed through CCC,
+ `cellc auth capability submit --payload capability-payload.json
+ --wallet-signature wallet-signature.json` registers the delegated key with
+ the write API.
+ `cellc auth namespace claim --namespace --payload
+ capability-payload.json --wallet-signature wallet-signature.json` then
+ establishes the required namespace ownership. Bare
`cellc publish` then signs the concrete publish payload and submits the
source snapshot to the public registry.
+- These scopes are deliberately independent: `publish` admits immutable
+ releases, `deployment` attaches chain-checked deployment evidence, and
+ `availability` deprecates, yanks, or restores a release. A publish-only
+ capability cannot perform the other two operations. When the command runs
+ inside a package directory without explicit `--scope` flags, `cellc` infers
+ only the exact-coordinate `publish` scope. Deployment and availability access
+ must be granted explicitly.
+- The Registry chooser includes Neuron, JoyID, imToken, CKBull, SafePal,
+ Ledger, imKey, OneKey, UTXO Global, Rei Wallet, Gate, and QuantumPurse.
+ Compatible CCC signers connect directly; the remaining directory entries use
+ the same verified `wallet-signature.json` handoff without exposing mnemonic
+ words to the site.
- `cellc auth capability revoke --principal-id
--capability-key-id --json > revoke-payload.json`
- generates a JoyID-bound revocation challenge; after signing that challenge,
+ generates a wallet-bound revocation challenge; after signing that challenge,
`cellc auth capability revoke --payload revoke-payload.json
- --joyid-signature joyid-signature.json` revokes the delegated key without
+ --wallet-signature wallet-signature.json` revokes the delegated key without
creating a separate registry account.
- CI can avoid interactive keychain access by using
`cellc publish --print-payload --json`, signing the `canonical_payload`
externally, then submitting with `--payload --capability-signature
`, or by setting `CELLSCRIPT_CAPABILITY_PRIVATE_KEY_PKCS8_B64`.
-- The first write API implementation lives under
- [`services/registry-api`](services/registry-api/README.md): Cloudflare
- Workers, R2 source snapshots, Neon Postgres through Hyperdrive, JoyID
- capability authorisation, namespace ACL checks, quota hooks, and audit events.
-- Non-CellScript registry artifact profiles remain future-facing or fail-closed
+- The production write API lives under
+ [`services/registry-api`](services/registry-api/README.md). The deployed slice
+ uses Node 22, Postgres 17, a bounded real-compiler verification worker, a
+ persistent filesystem object store, and a separate read-only nginx static
+ path behind trusted TLS. Publish transactionally queues source/build
+ verification; default search/list visibility begins at `verified_build`, and
+ direct URLs preserve admitted `source_published` history. The same typed app
+ retains a Cloudflare Worker/Hyperdrive/R2 deployment option. Both paths share
+ typed wallet capability authorisation, namespace ACLs, quota hooks, ordered evidence
+ promotion, and audit events.
+- Public version responses bind a content-addressed source snapshot URL. The
+ read-only service exposes `/source-snapshots/*` independently of Postgres and
+ the API; the lockfile records that URL plus its `sha256:` revision so Registry
+ installs do not silently depend on Git availability.
+- The versioned `cellscript-registry-profile-catalog-v1` keeps only
+ `cellscript_source` dependency-resolving; non-CellScript artifact profiles
+ remain discoverable through explicit artifact commands and fail closed in
+ package resolution
+- Deployable CKB Lock Scripts may attach the versioned
+ `cellscript-registry-ls-idl-interface-v1` profile. Registry admission binds
+ `SHA-256` of the exact IDL bytes to the executable's final 32 bytes, and
+ public reads resolve those bytes by chain-verified Script identity. This is
+ an interface-identity check, not proof of implementation correctness or a
+ security audit. See the
+ [LS-IDL Registry profile](docs/CELLSCRIPT_LS_IDL_REGISTRY_PROFILE.md).
- Git dependencies are explicit remote source fetches; treat them as
review-required inputs, not the registry production path
**Registry resolver boundary:**
+- The default source-package authority is
+ `https://api.registry.cellscript.dev`; only publicly accepted statuses enter
+ ordinary version selection. `CELLSCRIPT_REGISTRY_API_URL` changes that API
+ origin, while `CELLSCRIPT_REGISTRY_URL` explicitly selects the legacy
+ Git/offline discovery authority. An unavailable production API does not
+ silently downgrade to Git discovery.
- Registry discovery may grow to include CellScript packages, verifier
artifacts, deployed artifact records, reproducible artifacts, and external
CKB tooling artifacts. Dependency resolution stays narrower than discovery.
@@ -854,21 +959,22 @@ still fail closed.
| `cellc proof-diff` / `profile` / `tx trace` / `audit-bundle` | Emit v0.16 audit and debug reports |
| `cellc opt-report` | Compare O0..O3 artifact size and constraints status |
| `cellc receipt` / `sign-receipt` / `verify-receipt` | Emit, sign, and verify compile receipts over metadata/artifact hashes |
-| `cellc verify-artifact` | Verify an artifact against its metadata sidecar, with optional receipt binding |
-| `cellc test` | Run compiler and policy tests (no trusted runtime execution) |
+| `cellc verify-artifact` | Independently check an ELF, metadata, lowering record, and source map; report VM/chain evidence separately; optionally bind a receipt |
+| `cellc artifact ls-idl validate\|bind\|fetch\|bundle` | Validate byte-exact LS-IDL, bind its SHA-256 to a CKB executable, resolve it by deployed Script identity, or scaffold a publish-ready Registry bundle |
+| `cellc test --backend simulator\|ckb-vm\|all` | Execute fail-closed package scenarios with exact outcomes and evidence tiers (`--no-run` is compile-only) |
| `cellc doc` | Generate API and audit documentation |
| `cellc fmt` | Format `.cell` sources or check formatting |
| `cellc init` | Create a package skeleton |
| `cellc add` / `remove` | Mutate local package dependencies |
-| `cellc install --path` / `install namespace/pkg@version` / `update` | Resolve local, git, or registry CellScript source-package dependencies and refresh `Cell.lock` |
+| `cellc lock` / `install --path` / `install namespace/pkg@version` / `update` | Explicitly resolve local, git, or registry CellScript source-package dependencies and refresh `Cell.lock` v3 |
| `cellc info` | Print manifest and package information |
| `cellc package verify` | Verify package/source/build identity against `Cell.lock` |
| `cellc registry verify` | Verify deployment identity against `Cell.lock` and `Deployed.toml`; `--live` adds CKB RPC evidence |
| `cellc certify --plugin novaseal-profile-v0` | Run the deterministic compiler-hosted NovaSeal profile certification (consumes `target/novaseal-*.json` and the local certifier source) |
| `cellc repl` | Start the interactive REPL |
-| `cellc run` | Run ELF entrypoints via VM runner or simulator; `--json` includes cycles for VM execution and `cycles: null` for simulation |
+| `cellc run` | Run no-argument standalone ELF entrypoints via CKB-VM, or use explicit `--simulate`; parameter/transaction contexts fail closed instead of silently falling back |
| `cellc publish` / `cellc publish --offline` / `cellc registry add` / `cellc registry edit --yank` | Public publish plus explicit local/offline registry metadata flow; public registry policy makes bare `cellc publish` an authenticated registry write, with Git/static metadata retained for audit and fallback |
-| `cellc auth capability create/submit/revoke` / public registry write API / non-CellScript artifact install | JoyID-rooted publication policy and future-facing artifact profiles; fail-closed where unsupported |
+| `cellc auth capability create/submit/revoke` / public registry write API / non-CellScript artifact install | Typed wallet-rooted publication policy and future-facing artifact profiles; fail-closed where unsupported |
### CLI Options
diff --git a/assets/cellscript-logo.png b/assets/cellscript-logo.png
deleted file mode 100644
index b10611e6..00000000
Binary files a/assets/cellscript-logo.png and /dev/null differ
diff --git a/audits/0.23-deep-dive.md b/audits/0.23-deep-dive.md
new file mode 100644
index 00000000..8952f422
--- /dev/null
+++ b/audits/0.23-deep-dive.md
@@ -0,0 +1,937 @@
+# CellScript 0.23 关键改动深度阐述
+
+> 工作区: `/Users/arthur/RustroverProjects/CellScript`
+> 涵盖: 闭集强制概念 + Cell.lock v2 + Deployed.toml v2 + Registry v1 的 0.23 强类型契约 + 风格治理(带 mermaid)
+> 写于: 2026-07-31
+
+---
+
+## 1. 「闭集强制」是什么意思
+
+### 1.1 字面意思
+
+**闭集(closed set)** = enum 的所有变体在编译期穷举,**没有「通配」、「未识别」、「其它」分支**。
+
+`src/edition.rs:11-15`:
+
+```rust
+pub enum CellScriptEdition {
+ #[serde(rename = "2026")]
+ Edition2026,
+}
+```
+
+这个 enum **只有 1 个变体**。不是「2025 / 2026 / 2027 / 0.22 / 0.23 / experimental」枚举,**就是 1 个值**。
+
+`src/edition.rs:78-84` 的 `FromStr`:
+
+```rust
+match value {
+ "2026" => Ok(Self::Edition2026),
+ other => Err(CompileError::without_span(format!(
+ "unsupported CellScript edition '{}'; expected 2026", other
+ ))),
+}
+```
+
+任何不是 `"2026"` 的字符串 → **直接编译错误**。没有兼容回退、没有 deprecation warning、没有「unsupported edition, using default」兜底。
+
+`src/edition.rs:106-110` 的测试明确钉死:
+
+```rust
+fn only_edition_2026_is_accepted() {
+ assert_eq!("2026".parse::().unwrap(), CellScriptEdition::Edition2026);
+ assert!("unsupported".parse::().unwrap_err().message.contains("expected 2026"));
+}
+```
+
+### 1.2 「强制」体现在哪里
+
+「强制」不是 enum 本身的属性,是**这个 enum 在整个工具链里被多少地方堵死**:
+
+| 强制点 | 落地位置 | 行为 |
+|---|---|---|
+| `Cell.toml` 解析 | `src/package/mod.rs:32` `pub edition: CellScriptEdition` | 必填字段,缺 `edition` 直接 deserialize 失败 |
+| `Cell.toml` 字符串匹配 | `FromStr` 拒绝任何非 `2026` | `"unsupported CellScript edition 'XYZ'; expected 2026"` |
+| `Cell.lock v2` 校验 | `src/package/mod.rs:1108-1114` `validate_schema()` | 读 v1 lock → `unsupported Cell.lock version 1; expected 2` |
+| `Deployed.toml v2` 校验 | `src/package/mod.rs:1568-1609` | build/deployment edition 必须等于 package edition |
+| `Registry` 服务端 | `services/registry-api/migrations/0001_initial.sql:90-127` | DB CHECK `edition = '2026'` 硬保证 |
+| `Registry` 协议 schema | `domain.ts:407-417` | `published["edition"] !== CELLSCRIPT_EDITION` → 400 reject |
+| `Cargo.lock` 通过源码 import | 13 个 example Cell.toml 全部 `edition = "2026"` | gate dev / ci 读 example 时如果缺 edition → fail |
+| 工具链发布 gate | `scripts/cellscript_gate.sh` | 校验 Cell.lock v2 / Deployed.toml v2 / Registry protocol v1 的 0.23 schema 约束 |
+| **没有** migration 路径 | CHANGELOG 明确 "no migration or compatibility reader is provided" | 用户升 0.23 必须删旧 lock / deployed manifest |
+
+**8 个强制点 + 1 个「故意不提供迁移」** = **真正的 fail-closed**。
+
+### 1.3 为什么要做闭集
+
+| 备选设计 | 后果 |
+|---|---|
+| **开放 enum**(`2024`/`2025`/`2026`/`experimental`)| 0.22 现状——没有 edition 字段,自由字符串,doc 与代码漂移 |
+| **字符串字段**(`edition: String`,任意值)| 0.22 现状——写 `edition = "2027"` 也通过,无校验 |
+| **闭集 enum + 强校验**(0.23 实际)| 任何「不是 2026」的输入都 fail 在最早期(deserialize / FromStr / DB CHECK)|
+| **半闭集 enum + default**(比如 `default = "2026"`)| 用户写错(`edition = "206"`)会静默 fallback 到 2026,掩盖 typo |
+
+0.23 选「闭集 + 强校验 + 故意不提供迁移」= **让"我以为我在用 2026 实际不是" 这种 silent bug 在生产链上没有存活空间**。
+
+代价:升级时所有老 lock / deployed manifest 必须重新生成。
+
+### 1.4 闭集强制的「副作用链」——为什么 edition 牵动那么多 schema
+
+`src/edition.rs:33-58` 的 `resolve_compatibility_profile()`:
+
+```rust
+pub fn resolve_compatibility_profile(
+ edition: CellScriptEdition,
+ target_profile: &str,
+ primitive_assurance: Option<&str>,
+) -> ResolvedCompatibilityProfile {
+ // ... 把 edition + target + assurance + ABI + 4 个 metadata schema version
+ // 拼成一个稳定字符串 ID
+ let id = format!(
+ "{}-{}-target-{}-primitive-{}-entry-{}-placement-{}-metadata-{}-{}-{}-{}",
+ COMPATIBILITY_PROFILE_SCHEMA,
+ source_semantics,
+ target_profile, primitive_assurance,
+ crate::ENTRY_WITNESS_ABI, // "cellscript-entry-witness-v1"
+ crate::ENTRY_WITNESS_PLACEMENT_ABI, // "cellscript-witnessargs-input-type-v2"
+ crate::METADATA_SCHEMA_VERSION,
+ crate::SOURCE_METADATA_SCHEMA_VERSION,
+ crate::ARTIFACT_METADATA_SCHEMA_VERSION,
+ crate::CONSTRAINTS_METADATA_SCHEMA_VERSION,
+ );
+ // ...
+}
+```
+
+闭集强制把"源语言 edition" 与 "target / assurance / ABI / metadata schema" 5 个独立版本轴**显式拼成一个 hash-able 字符串 ID**——这个 ID 是 `Cell.lock` / `Deployed.toml` / `RegistryIndex` 三件套共享的**事实身份**。
+
+```mermaid
+flowchart LR
+ E[CellScriptEdition
2026 闭集] --> P[ResolvedCompatibilityProfile]
+ T[target_profile
ckb / fiber] --> P
+ A[primitive_assurance
0.16 / 0.17] --> P
+ P --> ID["id (stable string)
cellscript-resolved-compatibility-profile-v1
-cellscript-source-semantics-2026
-target-ckb-primitive-0.16
-entry-cellscript-entry-witness-v1
-placement-cellscript-witnessargs-input-type-v2
-metadata-{4 个 schema version}"]
+ ID --> CL[Cell.lock v2
package_build.compatibility_profile_hash]
+ ID --> DT[Deployed.toml v2
build/deployments[].compatibility_profile_hash]
+ ID --> RI[RegistryIndexEntry
compatibility_profile_hash]
+ ID --> DB[(DB CHECK
source_hash 64-hex
manifest_hash 64-hex
compatibility_profile_hash 64-hex
edition='2026')]
+
+ style E fill:#fee,stroke:#c00
+ style P fill:#efe,stroke:#0a0
+ style ID fill:#eef,stroke:#00c
+```
+
+**关键观察**:
+
+- edition 是闭集(`2026` 单值),但 `ResolvedCompatibilityProfile` 把 **5 个独立版本轴** 拼成 1 个 hash
+- Cell.lock / Deployed.toml / Registry 三件套共享同一 `compatibility_profile_hash` → **任意一个变化 → 三个文件全部失效**
+- DB 在 schema 层(CHECK 约束)独立硬约束 `edition='2026'` → 即使应用层 bug 写错 edition 也写不进 DB
+
+**闭集强制不是「锁一个字符串」,是「锁 5 个独立版本轴的联合身份」**。
+
+---
+
+## 2. Cell.lock v1 → v2 变化
+
+### 2.1 数据结构变化
+
+**位置**:`src/package/mod.rs:1031-1080`
+
+```rust
+pub const CURRENT_VERSION: u32 = 2; // v1 → v2
+
+pub struct Lockfile {
+ pub version: u32, // 1 → 2
+ pub package: LockfilePackageInfo, // 加 edition
+ pub dependencies: BTreeMap,
+ pub package_build: Option, // 0.22 可能没有 → 0.23 必填带 edition + compat hash
+ pub deployment: BTreeMap,
+}
+
+pub struct LockfilePackageInfo {
+ pub edition: CellScriptEdition, // ← 0.22 没有,0.23 必填
+ pub name: String,
+ pub version: String,
+ pub namespace: Option,
+ pub source_hash: Option,
+ pub compiler_source_hash: Option,
+}
+```
+
+### 2.2 校验链(v2 新增)
+
+`src/package/mod.rs:1108-1127` `validate_schema()`:
+
+```rust
+pub fn validate_schema(&self) -> Result<()> {
+ // 校验 1: version 必须 = 2
+ if self.version != Self::CURRENT_VERSION { // 1 ≠ 2 → reject
+ return Err(CompileError::without_span(format!(
+ "unsupported Cell.lock version {}; expected {}",
+ self.version, Self::CURRENT_VERSION
+ )));
+ }
+ // 校验 2: build edition 必须 = package edition
+ if let Some(build) = &self.package_build {
+ if build.edition != self.package.edition {
+ return Err(...);
+ }
+ // 校验 3: build 必须带 compat profile hash
+ if build.compatibility_profile_hash.is_empty() {
+ return Err(...);
+ }
+ }
+ Ok(())
+}
+```
+
+### 2.3 真实 diff(举 atomic_swap)
+
+0.22 `Cell.lock`(推测形态):
+```toml
+version = 1
+
+[package]
+name = "atomic_swap"
+version = "0.1.0"
+source_hash = "0xabc..."
+compiler_source_hash = "0xdef..."
+
+[dependencies.token]
+version = "0.1.0"
+source = "local"
+
+[deployment.testnet]
+record = "ckb-..."
+code_hash = "0x..."
+```
+
+0.23 `Cell.lock` 必填形态:
+```toml
+version = 2
+
+[package]
+edition = "2026" # ← 新增
+name = "atomic_swap"
+version = "0.1.0"
+source_hash = "0xabc..."
+compiler_source_hash = "0xdef..."
+
+[package_build] # ← 新增(可 Option,但写了就强校验)
+edition = "2026" # ← 必须 == package.edition
+compatibility_profile_hash = "0x1234..." # ← 必填 64-hex
+
+[dependencies.token]
+version = "0.1.0"
+source = "local"
+
+[deployment.testnet]
+record = "ckb-..."
+code_hash = "0x..."
+```
+
+### 2.4 4 道校验闸
+
+```mermaid
+flowchart TD
+ R[读 Cell.lock from disk] --> P[toml::from_str]
+ P -->|fail| E1[fail-closed
'failed to parse lockfile']
+ P -->|ok| V1[校验 1:
version == 2]
+ V1 -->|fail| E2[fail-closed
'unsupported Cell.lock version 1; expected 2']
+ V1 -->|ok| V2[校验 2:
build.edition == package.edition]
+ V2 -->|fail| E3[fail-closed
'Cell.lock package/build edition mismatch']
+ V2 -->|ok| V3[校验 3:
build.compatibility_profile_hash 非空]
+ V3 -->|fail| E4[fail-closed
'Cell.lock v2 package_build requires
compatibility_profile_hash']
+ V3 -->|ok| OK[Ok Some Lockfile]
+
+ style R fill:#eef
+ style E1 fill:#fee,stroke:#c00
+ style E2 fill:#fee,stroke:#c00
+ style E3 fill:#fee,stroke:#c00
+ style E4 fill:#fee,stroke:#c00
+ style OK fill:#efe,stroke:#0a0
+```
+
+### 2.5 跨三件套的兼容性
+
+Cell.lock v2 不是独立 schema,它跟 Deployed.toml v2 / Registry protocol v1 的 0.23 schema **共享同一 `compatibility_profile_hash`**:
+
+```mermaid
+flowchart LR
+ subgraph "Cell.lock v2"
+ CL1[package.edition = 2026]
+ CL2[package_build.compatibility_profile_hash]
+ end
+ subgraph "Deployed.toml v2"
+ DT1[package.edition = 2026]
+ DT2[build.compatibility_profile_hash]
+ DT3["deployments[i].compatibility_profile_hash
(必须 == build)"]
+ end
+ subgraph "Registry protocol v1 / 0.23 entry shape"
+ RI1[edition = 2026]
+ RI2[compatibility_profile_hash]
+ end
+
+ H["同源 hash
ResolvedCompatibilityProfile.id"]
+ H --> CL2
+ H --> DT2
+ H --> DT3
+ H --> RI2
+
+ style H fill:#ffd,stroke:#aa0
+```
+
+**含义**:如果用户改 `target_profile`(从 ckb 改 fiber),`compatibility_profile_hash` 变 → 3 个 schema 都 reject 当前文件 → **用户必须重 build / 重 deploy / 重 publish**。
+
+这是「让"build 时用 2026, deploy 时用 2027" 这种 silent drift 没有存活空间」的硬约束。
+
+---
+
+## 3. Deployed.toml v1 → v2 变化
+
+### 3.1 数据结构变化
+
+**位置**:`src/package/mod.rs:1529-1612`
+
+```rust
+pub const DEPLOYED_MANIFEST_SCHEMA: &str = "cellscript-deployed-v0.23-edition-2026";
+
+pub struct DeployedManifest {
+ pub version: u32, // 1 → 2
+ pub schema: String, // ← 0.22 Option,0.23 必填,== DEPLOYED_MANIFEST_SCHEMA
+ pub package: DeployedPackageInfo, // 加 edition
+ pub build: Option, // 加 edition + compat profile hash
+ pub deployments: Vec, // 每个加 edition + compat profile hash
+}
+
+pub const CURRENT_VERSION: u32 = 2;
+```
+
+### 3.2 校验链(v2 新增,**比 Cell.lock v2 更严**)
+
+`src/package/mod.rs:1568-1609` `validate_schema()`:
+
+```rust
+pub fn validate_schema(&self) -> Result<()> {
+ // 校验 1 + 2: 双 ID 冗余(version + schema string)
+ if self.version != Self::CURRENT_VERSION || self.schema != DEPLOYED_MANIFEST_SCHEMA {
+ return Err(...);
+ }
+ // 校验 3: build edition == package edition
+ if let Some(build) = &self.build {
+ if build.edition != self.package.edition { return Err(...); }
+ // 校验 4: build 必须带 compat profile hash
+ if build.compatibility_profile_hash.is_empty() { return Err(...); }
+ }
+ // 校验 5: 每个 deployment edition == package edition
+ for deployment in &self.deployments {
+ if deployment.edition != self.package.edition { return Err(...); }
+ // 校验 6: 每个 deployment 必须带 compat profile hash
+ if deployment.compatibility_profile_hash.is_empty() { return Err(...); }
+ // 校验 7: deployment compat profile == build compat profile
+ if let Some(build) = &self.build {
+ if deployment.compatibility_profile_hash != build.compatibility_profile_hash {
+ return Err(...);
+ }
+ }
+ }
+ Ok(())
+}
+```
+
+**注意 Cell.lock v2 没有校验 7**——Deployed.toml v2 多了「build 与 deployment 必须共享同一 compat profile」这一条。
+
+### 3.3 为什么 Deployed.toml 要比 Cell.lock 更严
+
+Cell.lock 描述**「这个包的源代码身份」**——单包单 build。
+Deployed.toml 描述**「这个包在 N 个链上部署的事实记录」**——多网络多 deployment。
+
+「build 用的 2026 edition 配 deployment 的 2027 edition」是真实存在的 drift 风险(CI 升级但部署脚本没升级)。所以 Deployed.toml v2 把「build/deployment edition + compat profile」**显式绑定**——你不能错位部署。
+
+### 3.4 双 ID 冗余设计
+
+`version = 2` + `schema = "cellscript-deployed-v0.23-edition-2026"`:
+
+```mermaid
+flowchart LR
+ subgraph "Deployed.toml v2 身份"
+ V["version = 2
(结构 generation)"]
+ S["schema = 'cellscript-deployed-v0.23-edition-2026'
(语义 edition)"]
+ end
+ V -.独立校验.-> OK[通过]
+ S -.独立校验.-> OK
+
+ style V fill:#cff
+ style S fill:#cfc
+```
+
+为什么**两个** ID 都要?——**结构 generation 和语义 edition 是独立版本轴**。`docs/CELLSCRIPT_PACKAGE_PROVENANCE_AND_DEPLOYMENT_IDENTITY.md:1493` 解释:
+
+> 双 ID 冗余是有意的 fail-closed evidence——把"结构 generation"和"语义 edition"分开防错位。
+
+意思是:
+- 未来如果 Deployed.toml 改 JSON 序列化(v3),`version=3` 但 `schema` 仍指向 edition 2026 → 安全
+- 未来如果 edition 升 2027,`schema=...v0.27-edition-2027` 但 `version` 可以仍 = 2(如果结构没变)→ 也安全
+- **结构 generation 和语义 edition 独立演化**——这是 0.22 没想清楚的「manifest contract」设计
+
+---
+
+## 4. Registry v1 协议内的 0.23 契约收紧
+
+### 4.1 协议版本与 schema 版本
+
+`services/registry-api/src/domain.ts:9-11`:
+
+```typescript
+export const PUBLISH_PROTOCOL = "cellscript-registry-publish-v1"; // 仍是 v1
+export const REGISTRY_SCHEMA_VERSION = 1; // 仍是 1
+export const CELLSCRIPT_EDITION = "2026"; // ← 新增
+```
+
+注意:**PUBLISH_PROTOCOL 和 REGISTRY_SCHEMA_VERSION 0.22 → 0.23 都没变**——0.23 改的是 schema 内部字段,不是协议版本。
+
+### 4.2 新增字段与新必填项
+
+`domain.ts:50-80` 关键变化:
+
+```typescript
+// 0.22: optional
+export interface PublishPayload {
+ manifest_hash?: string; // ← 0.22 可选
+ // ...
+}
+
+// 0.23: required
+export interface PublishPayload {
+ manifest_hash: string; // ← 0.23 必填
+ // ...
+}
+```
+
+`domain.ts:65-79` registry_entry schema 强类型化:
+
+```typescript
+// 0.22: Record (任意 blob)
+export interface PublishPayload {
+ registry_entry: Record;
+}
+
+// 0.23: 强类型 + 6 必填字段
+export interface RegistryVersionEntry {
+ version: string; // ← 必填
+ tag: string; // 必须 "v"
+ source_hash: string;
+ cellscript_version: string;
+ edition: typeof CELLSCRIPT_EDITION; // 必须 "2026"
+ compatibility_profile_hash: string; // 32-byte hex
+ dependencies: Record; // ← 必须含 namespace
+ status: "source_published"; // 初始唯一合法
+ yanked: false; // 初始唯一合法
+}
+
+export interface RegistryIndexEntry {
+ schema_version: typeof REGISTRY_SCHEMA_VERSION; // 必须 1
+ namespace: string;
+ name: string;
+ versions: [RegistryVersionEntry]; // 必须正好 1 个
+}
+```
+
+### 4.3 9 步校验链
+
+`domain.ts:407-453` `validateRegistryEntry()`:
+
+```mermaid
+flowchart TD
+ R[收到 publish request] --> C1["1. schema_version == 1"]
+ C1 -->|fail| E1[400 unsupported_registry_schema]
+ C1 --> C2["2. namespace/name == outer"]
+ C2 -->|fail| E2[400 registry_identity_mismatch]
+ C2 --> C3["3. versions.length == 1"]
+ C3 -->|fail| E3[400 invalid_registry_versions]
+ C3 --> C4["4. version/source_hash == outer"]
+ C4 -->|fail| E4[400 registry_identity_mismatch]
+ C4 --> C5["5. tag == 'v'"]
+ C5 -->|fail| E5[400 invalid_registry_tag]
+ C5 --> C6["6. edition == '2026'"]
+ C6 -->|fail| E6[400 unsupported_cellscript_edition]
+ C6 --> C7["7. compat profile hash 是 64-hex"]
+ C7 -->|fail| E7[400 invalid_compatibility_profile_hash]
+ C7 --> C8["8. status=='source_published' && yanked==false"]
+ C8 -->|fail| E8[400 invalid_initial_registry_status]
+ C8 --> C9["9. 每个 dep 必须有 namespace + 合法 version"]
+ C9 -->|fail| E9[400 invalid_registry_dependency]
+ C9 --> OK[接受 publish]
+
+ style E1 fill:#fee
+ style E2 fill:#fee
+ style E3 fill:#fee
+ style E4 fill:#fee
+ style E5 fill:#fee
+ style E6 fill:#fee
+ style E7 fill:#fee
+ style E8 fill:#fee
+ style E9 fill:#fee
+ style OK fill:#efe,stroke:#0a0
+```
+
+**9 步**全部 fail-closed。
+
+### 4.4 admin API 状态机收紧
+
+`services/registry-api/src/index.ts:378`:
+
+```typescript
+// 0.22: 7 个 admin API 可设
+const adminAllowed = ["source_published", "indexed_pending", "verified_build",
+ "deployed", "deprecated", "yanked", "quarantined"];
+
+// 0.23: 5 个(verified_build / deployed / on_chain_committed 移除 admin 权限)
+const adminAllowed = ["source_published", "indexed_pending",
+ "deprecated", "yanked", "quarantined"];
+```
+
+**但** TypeScript enum 仍 8 个状态,DB schema 仍 8 状态(migrations/0001_initial.sql `check`)。
+
+```mermaid
+stateDiagram-v2
+ [*] --> source_published: 0.22 + 0.23
+ source_published --> indexed_pending: 0.22 + 0.23
+ source_published --> verified_build: 0.23 evidence endpoint
+ indexed_pending --> verified_build: 0.22 任意 / 0.23 仅 evidence endpoint
+ verified_build --> deployed: 0.22 任意 / 0.23 仅 evidence endpoint
+ deployed --> on_chain_committed: 0.22 任意 / 0.23 仅 evidence endpoint
+ source_published --> deprecated: 0.22 + 0.23
+ indexed_pending --> deprecated: 0.22 + 0.23
+ source_published --> yanked: 0.22 + 0.23
+ indexed_pending --> yanked: 0.22 + 0.23
+ source_published --> quarantined: 0.22 + 0.23
+ indexed_pending --> quarantined: 0.22 + 0.23
+```
+
+**0.23 状态机含义**:
+
+- ✅ admin API 仍可达:`source_published` / `indexed_pending` / `deprecated` / `yanked` / `quarantined`
+- ✅ generic admin API **不可伪造**:`verified_build` / `deployed` / `on_chain_committed`
+- ✅ `POST /v1/admin/packages/:namespace/:name/versions/:version/promote`
+ 已实现证据专用路径:`source_published|indexed_pending → verified_build → deployed → on_chain_committed`
+- ✅ 每一步校验 `source_hash` / `manifest_hash` / `compatibility_profile_hash`;部署证据必须引用 verified-build evidence hash,链上证明必须引用 deployed evidence hash
+- ✅ `package_version_evidence` 持久化 hash-addressed evidence,静态版本 JSON 与公共 evidence read API 同步公开链条
+
+原报告把“generic admin 无权设置 assurance 状态”误判成状态机断路。该判断已删除:
+无权直设是正确的安全边界,证据路径现已闭合并由 25 项 API 测试覆盖。
+
+### 4.5 DB CHECK 约束
+
+`migrations/0001_initial.sql:90-127` `package_versions` 表:
+
+```sql
++ edition text not null,
++ compatibility_profile_hash text not null,
++ manifest_hash text not null, -- 0.22: nullable; 0.23: NOT NULL
++ check (source_hash ~ '^(0x)?[0-9A-Fa-f]{64}$'),
++ check (manifest_hash ~ '^(0x)?[0-9A-Fa-f]{64}$'),
++ check (edition = '2026'), -- 数据库层硬约束
++ check (compatibility_profile_hash ~ '^(0x)?[0-9A-Fa-f]{64}$')
+```
+
+**含义**:即使应用层(Rust + TypeScript)bug 写错,DB CHECK 也会拒绝。
+
+这是 0.22 没做的「防御深度」——0.22 只在应用层校验,0.23 **应用层 + DB 双层校验**。
+
+### 4.6 生产部署与读路径闭环
+
+截至 2026-07-31,Registry 已不是“未部署设计”:
+
+- `api.registry.cellscript.dev`:Node 22 API + Postgres 17,依赖感知
+ `/ready` 同时验证数据库、对象存储、管理配置和 runtime;
+- `registry.cellscript.dev`:独立只读 nginx,仅挂载对象卷,不依赖 API
+ 进程或 Postgres 才能读取版本 JSON;
+- `cellscript.dev/registry/`:列表和动态详情页以生产 API 为主,API 故障时
+ 才显示明确标记的只读 bundled mirror,原 Coming Soon 已删除;
+- `cellc install` / `update`:默认以公共 API 的 accepted status 为选择权威,
+ 随后下载内容寻址的 Registry 源码快照,校验对象 SHA-256、逐文件 BLAKE2b、
+ 安全路径、Edition/profile 和整树 source hash;`CELLSCRIPT_REGISTRY_URL`
+ 只是显式 Git/`registry.json` offline override;
+- 线上负向验收覆盖管理未授权、非法查询、静态写入、路径穿越和请求体边界;
+ API 重启后 readiness 与持久化审计记录仍可读。
+
+仍不能伪称完成的边界是首个 publisher-owned JoyID 正向发布与 clean-machine
+安装。测试签名或数据库 seed 不能替代这个交互式采用检查点。
+
+---
+
+## 5. 风格治理(field-commas canonical)详细阐述
+
+### 5.1 治理对象
+
+**问题**:0.22 之前 `field: Type`(无逗号)和 `field: Type,`(有逗号)parser 都接受,但 formatter 输出风格不统一,canonical example 与 formatter 输出漂移。
+
+**示例**:
+
+```cellscript
+// canonical_style.cell 0.22(与 formatter 漂移)
+struct CanonicalFields {
+ amount: u64
+ enabled: bool
+}
+```
+
+```cellscript
+// formatter 0.22 实际输出(带 trailing comma)
+struct CanonicalFields {
+ amount: u64,
+ enabled: bool,
+}
+```
+
+`cellc fmt --check` 0.22 状态:`changed = 1`(formatter 想加逗号,源文件没有)。
+
+### 5.2 7 层治理架构
+
+0.23 风格治理是 7 层叠加的「输入可接受,输出强制」体系:
+
+```mermaid
+flowchart TB
+ subgraph L1["Layer 1: Formatter (src/fmt/mod.rs)"]
+ F1["format_type_def (line 209-242)
固定输出 'field: Type,'
trailing comma 强制"]
+ end
+ subgraph L2["Layer 2: Canonical example"]
+ E1["examples/language/canonical_style.cell
canonical = 'field: Type,' 风格"]
+ E2["4 个 production example mirrors
用 'U64_MAX' 命名常量替裸 u64 边界"]
+ end
+ subgraph L3["Layer 3: syntax-combo seed (正)"]
+ S1["tests/syntax_combo/seeds/field-commas-canonical.cell
phase=accept
'field: Type,' 风格"]
+ end
+ subgraph L4["Layer 4: syntax-combo seed (反)"]
+ S2["tests/syntax_combo/seeds/field-commas-compatibility.cell
phase=accept
'field: Type' 风格 (历史兼容)"]
+ end
+ subgraph L5["Layer 5: matrix.toml required_origins"]
+ M["3 mode (quick/ci/deep) 全部把两个 seed 加进
required_origins
双覆盖策略:防 canonical 意外被 reject
防 compatibility 意外被 reject"]
+ end
+ subgraph L6["Layer 6: cases.json 扩展 (+2028 行)"]
+ C1["bug_class_contracts
required_cases
required_origins
新加的 SCA-BUG-0.22-* bug class"]
+ end
+ subgraph L7["Layer 7: gate dev / ci"]
+ G1["cellc fmt --check 对 canonical example 返回 changed=0
其它 example 仍可写无逗号源码 (parser 接受)"]
+ end
+
+ F1 -->|formatter 写| E1
+ S1 -->|双向保护| M
+ S2 -->|双向保护| M
+ E1 -->|fmt --check| G1
+ M -->|seed audit| G1
+ C1 -->|gate 防回归| G1
+
+ style F1 fill:#cff
+ style E1 fill:#cfc
+ style S1 fill:#efe
+ style S2 fill:#efe
+ style M fill:#fee
+ style C1 fill:#fef
+ style G1 fill:#ffd
+```
+
+### 5.3 各层详细
+
+#### Layer 1: Formatter(`src/fmt/mod.rs:209-242`)
+
+```rust
+fn format_type_def(...) -> Result<()> {
+ // ... header 处理 ...
+ self.push_line(&format!("{} {{", header));
+ self.indent_level += 1;
+ for field in fields {
+ // ← 关键:固定输出 "field: Type,"(带 trailing comma)
+ self.push_line(&format!("{}: {},", field.name, format_type(&field.ty)));
+ }
+ self.format_validity_block(validity);
+ self.indent_level -= 1;
+ self.push_line("}");
+ Ok(())
+}
+```
+
+**关键设计**:
+- formatter 是**无条件输出 trailing comma**(没有"如果是单行就不输出"的优化)
+- 同样模式在 `format_receipt_def`(line 248-269)也实现
+- 0.22 期间已写,0.23 把它**正式定为 canonical**——之前是 "happens to do this",0.23 是 "by design does this"
+
+#### Layer 2: Canonical example(`examples/language/canonical_style.cell`)
+
+0.23 改写后:
+```cellscript
+module cellscript::canonical_style
+
+resource Vault has store, create, consume, replace, relock {
+ owner: Address,
+ asset_symbol: [u8; 8],
+ balance: u64,
+}
+```
+
+**canonical 风格的"标兵"**——任何看代码的人立刻知道"我新写的 struct 也应该长这样"。
+
+#### Layer 3: 正向 seed(`field-commas-canonical.cell`)
+
+```cellscript
+// audit: phase=accept
+module cellscript::audit::seed_field_commas_canonical
+
+struct CanonicalFields {
+ amount: u64,
+ enabled: bool,
+}
+```
+
+**`// audit: phase=accept` 注释**说明这是 syntax_combo audit 期望**接受**的输入。如果哪天 parser bug 拒绝这种风格,audit fail。
+
+#### Layer 4: 反向 seed(`field-commas-compatibility.cell`)
+
+```cellscript
+// audit: phase=accept
+module cellscript::audit::seed_field_commas_compatibility
+
+struct CompatibilityFields {
+ amount: u64
+ enabled: bool
+}
+```
+
+**没有 trailing comma**——历史无逗号源码。
+
+**两个 seed 都标 `phase=accept` 都进 required_origins**——这是「双覆盖策略」:
+
+| Seed | 防什么 |
+|---|---|
+| canonical | 防"我们以后把 trailing comma 改为 mandatory"——保持 parser 接受 trailing comma |
+| compatibility | 防"我们以后悄悄拒绝无逗号源码"——保持 parser 接受无逗号 |
+
+**两个 seed 互为反向测试**——一个防收紧,一个防放宽。
+
+#### Layer 5: matrix.toml
+
+`tests/syntax_combo/matrix.toml:28-29, 77-78, 129-130`(3 个 mode 都列):
+
+```toml
+required_origins = [
+ # ... 27 个其他 seed ...
+ "tests/syntax_combo/seeds/field-commas-canonical.cell",
+ "tests/syntax_combo/seeds/field-commas-compatibility.cell",
+ # ...
+]
+```
+
+3 个 mode(quick/ci/deep,budget 64/1000/5000)**全部**把两个 seed 加进 required_origins → syntax-combo 跑任意一个 mode 都会测这两个 seed。
+
+#### Layer 6: cases.json (+2028 行)
+
+新加的 `cases.json`(2028 行)含:
+- `bug_class_contracts`:每个已知 bug class 的合同契约
+- `required_cases`:必跑的 case 列表
+- `required_origins`:必包含的 seed 列表
+
+这是把"seed 列表"从 toml 升级到结构化 JSON + 机器可读 contracts——**未来 audit 失败能 machine-readable 报错**。
+
+#### Layer 7: gate dev / ci
+
+`scripts/cellscript_gate.sh` 在 dev / ci 模式跑:
+
+```bash
+# 1. cellc fmt --check 对 canonical_style.cell 返回 changed=0
+# 2. syntax-combo audit quick/ci/deep 跑 27+ seed(包含 2 个 field-commas)
+# 3. cases.json 校验所有 required_bug_classes 都有覆盖
+# 4. 任何 canonical example 与 formatter 不一致 → gate fail
+# 5. 任何 field-commas seed 被 reject → gate fail
+```
+
+**两道防回归线**:`fmt --check` + `syntax-combo audit` + `cases.json`。
+
+### 5.4 7 层治理的「防漂移」设计
+
+```mermaid
+sequenceDiagram
+ participant Dev as 开发者
+ participant Fmt as cellc fmt
+ participant Parser as cellc build
+ participant Seed as syntax-combo audit
+ participant Gate as gate dev/ci
+
+ Dev->>Fmt: 写新 struct 字段无逗号
+ Fmt->>Fmt: 检测到与 canonical 漂移
+ Fmt-->>Dev: 报告 changed=N
+ Dev->>Fmt: 应用 formatter
+ Fmt-->>Dev: 字段统一为 'field: Type,'
+
+ Dev->>Parser: cellc build
+ Parser->>Parser: parse_fields_and_validity 接受 trailing comma
+ Parser-->>Dev: Ok
+
+ Dev->>Seed: syntax-combo quick
+ Seed->>Seed: 跑 field-commas-canonical.cell (accept)
+ Seed->>Seed: 跑 field-commas-compatibility.cell (accept)
+ Seed-->>Dev: pass
+
+ Dev->>Gate: ./scripts/cellscript_gate.sh dev
+ Gate->>Fmt: fmt --check canonical_style.cell
+ Gate->>Seed: syntax-combo quick
+ Gate-->>Dev: all pass → release OK
+
+ Note over Dev,Gate: 任意一层失败 → 全链路 fail
7 层防漂移闭环
+```
+
+### 5.5 风格治理的「输入宽容 + 输出严格」原则
+
+```mermaid
+flowchart LR
+ A[用户写 .cell 源码] -->|输入| P[Parser]
+ P -->|接受 'field: Type,'| OK1[canonical: pass]
+ P -->|接受 'field: Type'| OK2[compatibility: pass]
+ P -->|拒其他形式| E[error]
+
+ OK1 --> F[Formatter 写回 .cell]
+ OK2 --> F
+ F -->|输出| OUT["'field: Type,' 风格
(trailing comma 强制)"]
+
+ style A fill:#eef
+ style OK1 fill:#efe
+ style OK2 fill:#efe
+ style E fill:#fee
+ style OUT fill:#ffd
+```
+
+**原则**:
+- **输入宽容** — parser 接受 canonical + compatibility 两种风格
+- **输出严格** — formatter 永远输出 canonical 一种风格
+- **结果** — 用户的源码不强制风格(不破坏历史),但 round-trip 一致
+
+这是 Unix 哲学的「Robustness Principle(Postel's Law)」应用:
+> Be conservative in what you do, be liberal in what you accept from others.
+
+### 5.6 风格治理对开发者的实际影响
+
+| 场景 | 0.22 体验 | 0.23 体验 |
+|---|---|---|
+| 写新 struct 加新字段 | 不确定要不要逗号 | 看 canonical_style.cell 抄 `field: Type,` |
+| 复制历史 .cell 源码(无逗号)| build 接受 | build 接受(**无破坏**)|
+| `cellc fmt` 跑过一次 | 改了 N 行加逗号 | changed=0(**已对齐**)|
+| 升级到 0.24 | 担心要不要补逗号 | 0.24 还是接受两种风格(**无破坏**)|
+| 改 formatter 输出风格 | 没人拦 | 3 个 gate + 2 个 seed + 1 个 canonical example 全部 fail(**防回归**)|
+
+### 5.7 风格治理 0.22 → 0.23 的本质
+
+**0.22 状态**:formatter 和 example **已经漂移**。formatter 想加逗号,example 不加。
+
+**0.23 状态**:7 层治理**强制** formatter 与 example **对齐**,且 parser **继续接受两种**输入。
+
+**本质**:
+
+- 0.22 是「隐性矛盾」(formatter vs example vs parser 三方各说各话)
+- 0.23 是「显性约束」(formatter 写 / parser 接受双风格 / example 对齐 formatter / gate 防漂移)
+- 0.23 没引入**新**语法,**没**改 parser,**没**改 formatter——只**显性化**了已有的事实
+
+这是 0.23 所有改动里**最便宜**的(format_type_def 早就这么写,example 改写 + 2 个新 seed + matrix 加 6 行),但**信号最强**(7 层防漂移闭环)——告诉用户「这个项目在严肃维护,不是 prototype」。
+
+---
+
+## 6. 三件套协同
+
+Cell.lock v2 + Deployed.toml v2 + Registry v1 的 0.23 entry shape **三件套共享同一 `compatibility_profile_hash`**,加上 Edition 2026 闭集强制 + DB CHECK 约束:
+
+```mermaid
+flowchart TB
+ subgraph "源层 (Cell.toml + .cell source)"
+ CT["Cell.toml
[package]
edition = '2026' (必填)"]
+ end
+
+ subgraph "锁层 (Cell.lock v2)"
+ CL["package.edition = 2026
package_build.compatibility_profile_hash (必填)"]
+ end
+
+ subgraph "部署层 (Deployed.toml v2)"
+ DT["package.edition = 2026
build.compatibility_profile_hash
deployments[i].compatibility_profile_hash (== build)"]
+ end
+
+ subgraph "注册层 (Registry v1 / 0.23 entry shape)"
+ RG["registry_entry.versions[0]
edition = 2026
compatibility_profile_hash"]
+ end
+
+ subgraph "数据库层"
+ DB["CHECK (edition = '2026')
CHECK (source_hash ~ 64-hex)
CHECK (compat hash ~ 64-hex)"]
+ end
+
+ subgraph "应用层 (resolve_compatibility_profile)"
+ RP["ResolvedCompatibilityProfile.id
(稳定字符串 hash)"]
+ end
+
+ CT -->|解析| RP
+ CL -->|校验| RP
+ DT -->|校验| RP
+ RG -->|校验| RP
+ RP -->|统一 hash| CL
+ RP -->|统一 hash| DT
+ RP -->|统一 hash| RG
+ DB -->|应用层之上再加一层| RG
+
+ style RP fill:#ffd,stroke:#aa0
+ style DB fill:#fdd,stroke:#d00
+```
+
+**核心 invariant**:
+
+> `Cell.lock[package_build].compatibility_profile_hash == Deployed.toml[build/deployments[]].compatibility_profile_hash == RegistryIndex.versions[0].compatibility_profile_hash`
+
+任意一处失配 → 三件套中对应文件被拒读。
+
+---
+
+## 7. 总结
+
+### 7.1 闭集强制的本质
+
+不是「锁一个字符串」,是 **「锁 5 个独立版本轴的联合身份」**。edition 闭集 + ResolvedCompatibilityProfile + Cell.lock v2 + Deployed.toml v2 + Registry v1 的 0.23 强类型 entry + DB CHECK 6 层叠加,让「silent drift 在生产链上无存活空间」。
+
+代价:升级时所有老 lock / deployed manifest 必须重新生成。
+
+### 7.2 三件套身份升级的核心变化
+
+| 件 | 0.22 字段 | 0.23 字段 | 校验 |
+|---|---|---|---|
+| Cell.lock | `version=1` | `version=2` + `package.edition` + `package_build.compatibility_profile_hash` | 3 道 fail-closed |
+| Deployed.toml | `version=1` | `version=2` + `schema='...v0.23-edition-2026'` + `package/build/deployments[].edition` + `compat profile hash` | 7 道 fail-closed |
+| Registry | 弱类型 blob | 强类型 schema + 9 必填字段 + 9 步校验链 | 应用层 + DB CHECK 双层 |
+
+**3 件套共享同一 `compatibility_profile_hash`**——5 个版本轴的联合身份是跨文件的"事实身份"。
+
+### 7.3 风格治理的本质
+
+**7 层叠加**的「输入宽容 + 输出严格」体系:
+
+- Formatter(写回 canonical 风格)
+- Canonical example(示范)
+- 正向 seed(防收紧)
+- 反向 seed(防放宽)
+- matrix.toml(强制跑两个 seed)
+- cases.json(machine-readable 契约)
+- gate dev/ci(防回归)
+
+**7 层都"恰好"是已有的事实被显性化**——不是新功能,是「收敛已有事实的边界」。这是 0.23 改动里**最便宜**但**信号最强**的一项。
+
+### 7.4 0.23 整体的「协议优先于语言」取舍
+
+| 维度 | 0.23 投入 | 含义 |
+|---|---|---|
+| 协议层(edition / lock / deployed / registry / DB)| **大** | 收紧 fail-closed,并闭合 Registry evidence 状态机 |
+| 语言核心(parser / ast / lexer / type)| **刻意稳定** | 没有为发布造新语法;canonical 输出、兼容输入和组合矩阵已经对齐 |
+| 工具层(Python→Rust)| **大** | 工具链单语言 |
+| DX 层(LSP / tutorial / example / website)| **中** | Edition/profile 在 LSP、WASM、教程和示例统一;Registry live browse/detail 与故障态落地 |
+
+**0.23 是「生产证据链硬化」+「工具链单语言」+「Registry 生产化」release**。
+原报告中“语言 P0 全部未修”“DX 退步”“evidence 状态机断路”的结论缺少与当前实现
+相符的证据,已删除。剩余边界应按可验证事实描述,而不是沿用旧报告的评分措辞。
+
+---
+
+> **写于**: 2026-07-31
+> **复核**: 当前工作树、线上 Registry 健康检查与 0.23 gate 契约
diff --git a/cellscript-ergonomics-desktop.png b/cellscript-ergonomics-desktop.png
deleted file mode 100644
index 2952fc95..00000000
Binary files a/cellscript-ergonomics-desktop.png and /dev/null differ
diff --git a/cellscript-no-grid-clean-desktop.png b/cellscript-no-grid-clean-desktop.png
deleted file mode 100644
index e9aa4701..00000000
Binary files a/cellscript-no-grid-clean-desktop.png and /dev/null differ
diff --git a/cellscript-no-grid-desktop.png b/cellscript-no-grid-desktop.png
deleted file mode 100644
index dc637958..00000000
Binary files a/cellscript-no-grid-desktop.png and /dev/null differ
diff --git a/clippy.toml b/clippy.toml
new file mode 100644
index 00000000..a5a554ae
--- /dev/null
+++ b/clippy.toml
@@ -0,0 +1,2 @@
+too-many-arguments-threshold = 10
+large-error-threshold = 256
diff --git a/contracts/registry-type-script/.gitignore b/contracts/registry-type-script/.gitignore
new file mode 100644
index 00000000..b83d2226
--- /dev/null
+++ b/contracts/registry-type-script/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/contracts/registry-type-script/Cargo.lock b/contracts/registry-type-script/Cargo.lock
new file mode 100644
index 00000000..2218782d
--- /dev/null
+++ b/contracts/registry-type-script/Cargo.lock
@@ -0,0 +1,2101 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "adler2"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
+
+[[package]]
+name = "ahash"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9"
+dependencies = [
+ "getrandom 0.2.17",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.104"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56"
+
+[[package]]
+name = "base64"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitcoin-consensus-encoding"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "207311705279250ba465076a1bac4b1ac982855fff73fc5f67e22158ac58cdc9"
+dependencies = [
+ "bitcoin-internals",
+ "hex-conservative 1.2.0",
+ "serde",
+]
+
+[[package]]
+name = "bitcoin-internals"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d573f4cf32996a8dce612e4348cece65a241f1882ed594047c9ba348e8869fa5"
+
+[[package]]
+name = "bitcoin-io"
+version = "0.1.101"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb5de036369d1ac59d3c1819ebc4d850f89466f5401c571a285b6ed564a4cb78"
+dependencies = [
+ "bitcoin-consensus-encoding",
+]
+
+[[package]]
+name = "bitcoin_hashes"
+version = "0.14.101"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bca4c7abb40c8817d77403c880988cfd484f23ab2365726afb2f798363e2c4a2"
+dependencies = [
+ "bitcoin-io",
+ "hex-conservative 0.2.2",
+]
+
+[[package]]
+name = "bitflags"
+version = "2.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
+
+[[package]]
+name = "blake2b-ref"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "294d17c72e0ba59fad763caa112368d0672083779cdebbb97164f4bb4c1e339a"
+
+[[package]]
+name = "blake2b-rs"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a89a8565807f21b913288968e391819e7f9b2f0f46c7b89549c051cccf3a2771"
+dependencies = [
+ "cc",
+ "cty",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "buddy-alloc"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee741d62dcaf41ca303576ef890989ccb01d5dd77f8ce1a6d6c7846ab5d09efb"
+
+[[package]]
+name = "bumpalo"
+version = "3.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cacache"
+version = "13.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5063741c7b2e260bbede781cf4679632dd90e2718e99f7715e46824b65670b"
+dependencies = [
+ "digest",
+ "either",
+ "futures",
+ "hex",
+ "libc",
+ "memmap2",
+ "miette",
+ "reflink-copy",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sha1",
+ "sha2",
+ "ssri",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "walkdir",
+]
+
+[[package]]
+name = "cc"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9"
+dependencies = [
+ "find-msvc-tools",
+ "shlex",
+]
+
+[[package]]
+name = "cellscript-registry-type-script"
+version = "0.24.0"
+dependencies = [
+ "ckb-hash",
+ "ckb-std",
+ "ckb-testtool",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
+
+[[package]]
+name = "ckb-always-success-script"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b3b72a38c9920a29990df12002c4d069a147c8782f0c211f8a01b2df8f42bfd"
+
+[[package]]
+name = "ckb-chain-spec"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70187bb9e6d87c5d2c6eb95d24732ab79f02e1e221225f63edf0825dc1b9176a"
+dependencies = [
+ "cacache",
+ "ckb-constant",
+ "ckb-crypto",
+ "ckb-dao-utils",
+ "ckb-error",
+ "ckb-hash",
+ "ckb-jsonrpc-types",
+ "ckb-logger",
+ "ckb-pow",
+ "ckb-rational",
+ "ckb-resource",
+ "ckb-traits",
+ "ckb-types",
+ "serde",
+ "toml",
+]
+
+[[package]]
+name = "ckb-constant"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5493dad5af3843e4c19cf01fd6cf13d2ef07a17ba29e0a6d28d24a5dbf44b2b5"
+dependencies = [
+ "phf 0.12.1",
+]
+
+[[package]]
+name = "ckb-crypto"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42c46d018105d08f0cdbe885014228a2a205d8b9c6a8050d9d2c271d7a7d8e31"
+dependencies = [
+ "ckb-fixed-hash",
+ "faster-hex",
+ "rand 0.8.7",
+ "secp256k1",
+ "thiserror",
+]
+
+[[package]]
+name = "ckb-dao"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed08e6129c2915f8d7d73014fbed79ff428f7baed72ac69768784d25d20fb78"
+dependencies = [
+ "byteorder",
+ "ckb-chain-spec",
+ "ckb-dao-utils",
+ "ckb-traits",
+ "ckb-types",
+]
+
+[[package]]
+name = "ckb-dao-utils"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62ed7a7bbe5d490550d54c21847e3bdeb96219071f8af29693a690e67adca12"
+dependencies = [
+ "byteorder",
+ "ckb-error",
+ "ckb-types",
+]
+
+[[package]]
+name = "ckb-error"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c062a4634615a2ad2a96d027ae08d76fe27cb3670b05648cdee83dfc2fd3e0c4"
+dependencies = [
+ "anyhow",
+ "ckb-occupied-capacity",
+ "derive_more 1.0.0",
+ "thiserror",
+]
+
+[[package]]
+name = "ckb-fixed-hash"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44a532d8d25a16495d8b272bc9541387221df4a010c1f2657e2d265ab7ae4e6b"
+dependencies = [
+ "ckb-fixed-hash-core",
+ "ckb-fixed-hash-macros",
+]
+
+[[package]]
+name = "ckb-fixed-hash-core"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "204fa623b4a2ee22f780598de7b0651c5da0e635a8c07e657bf0da4b37e92c97"
+dependencies = [
+ "faster-hex",
+ "schemars",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "ckb-fixed-hash-macros"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdd9ae4b569c2be40c7a0cc2ae2241bc6fadd20b8e89cbae49b511773aab6301"
+dependencies = [
+ "ckb-fixed-hash-core",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "ckb-gen-types"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba8b0a3f407c30d8bb5077370ad129bfea0e045c5ea85fda152a404bac410dc7"
+dependencies = [
+ "cfg-if",
+ "ckb-error",
+ "ckb-fixed-hash",
+ "ckb-hash",
+ "ckb-occupied-capacity",
+ "molecule",
+ "numext-fixed-uint",
+ "seq-macro",
+ "strum",
+]
+
+[[package]]
+name = "ckb-hash"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "108c6bdc893999c92719b13b2b16f9516f62ce76b0b88055be73d3282c23399d"
+dependencies = [
+ "blake2b-ref",
+ "blake2b-rs",
+]
+
+[[package]]
+name = "ckb-jsonrpc-types"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7c621e0ea2746f0b0b8bfd220bae8d73896158986b77e881f38161bfa17c989"
+dependencies = [
+ "ckb-types",
+ "faster-hex",
+ "schemars",
+ "seq-macro",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "ckb-logger"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43745ff43529079c26b890872ea26cea89e734e9f1d1545f26615e297420f76d"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "ckb-merkle-mountain-range"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ccb671c5921be8a84686e6212ca184cb1d7c51cadcdbfcbd1cc3f042f5dfb8"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ckb-mock-tx-types"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bf88d2ce64e8c3d17d7cd3d0f0ff9038772d35cbe63d1e4f640e0e25428f390"
+dependencies = [
+ "ckb-jsonrpc-types",
+ "ckb-traits",
+ "ckb-types",
+ "serde",
+]
+
+[[package]]
+name = "ckb-occupied-capacity"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c32ab6698909e2d6e4153498830bd99d762653f47b32f849bee57610292dc24"
+dependencies = [
+ "ckb-occupied-capacity-core",
+ "ckb-occupied-capacity-macros",
+]
+
+[[package]]
+name = "ckb-occupied-capacity-core"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb6d9b99f6e093df3fb3740cc742f4a1e4df6fee074951804c6b57179ab08a3"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "ckb-occupied-capacity-macros"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a36880cfd22cad07fd1e6c8f4b2d46eeb6dfae651de55bc1966a7a0554afa7"
+dependencies = [
+ "ckb-occupied-capacity-core",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "ckb-pow"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e355b9e25bbff2b9ff2ec789218c1ba4afa91f8ac57bd5bbc7f421a6312c296e"
+dependencies = [
+ "byteorder",
+ "ckb-hash",
+ "ckb-types",
+ "eaglesong",
+ "log",
+ "serde",
+]
+
+[[package]]
+name = "ckb-rational"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "141af1cad079c7d3c9bcf896adc77c58c8074c0aa492b079acdb8be2982e5a67"
+dependencies = [
+ "numext-fixed-uint",
+ "serde",
+]
+
+[[package]]
+name = "ckb-resource"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b4bd2ca99cdfa3eadccf0e8e6a2ee01f25502157cc65934b6f3073e118bdd25"
+dependencies = [
+ "ckb-system-scripts",
+ "ckb-types",
+ "includedir",
+ "includedir_codegen",
+ "phf 0.8.0",
+ "serde",
+ "walkdir",
+]
+
+[[package]]
+name = "ckb-script"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f32599371d622aaaf3114b539ed839fb197711c41a38a7d7ded2008c0b02392f"
+dependencies = [
+ "byteorder",
+ "ckb-chain-spec",
+ "ckb-error",
+ "ckb-hash",
+ "ckb-logger",
+ "ckb-traits",
+ "ckb-types",
+ "ckb-vm",
+ "faster-hex",
+ "serde",
+ "tokio",
+]
+
+[[package]]
+name = "ckb-std"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7defadecfc39d5a25cddf11d86308130d745262f8f006bd9f602e7c968596460"
+dependencies = [
+ "buddy-alloc",
+ "cc",
+ "gcd",
+ "int-enum",
+]
+
+[[package]]
+name = "ckb-system-scripts"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa5c59063142de7a68cfad4449c6b3863563856219a2925dfb8c5f019ec2aa47"
+dependencies = [
+ "blake2b-rs",
+ "faster-hex",
+ "includedir",
+ "includedir_codegen",
+ "phf 0.8.0",
+]
+
+[[package]]
+name = "ckb-systemtime"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38e01076978d1df514364e80c4d20b1ab4a4133caeac5484f04851d980fc45ee"
+dependencies = [
+ "web-time",
+]
+
+[[package]]
+name = "ckb-testtool"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47f7dc1615323d16c3170cf907948205ea9bbfeb42e4b271e825bb1b7be792f7"
+dependencies = [
+ "ckb-always-success-script",
+ "ckb-chain-spec",
+ "ckb-crypto",
+ "ckb-error",
+ "ckb-hash",
+ "ckb-jsonrpc-types",
+ "ckb-mock-tx-types",
+ "ckb-resource",
+ "ckb-script",
+ "ckb-traits",
+ "ckb-types",
+ "ckb-verification",
+ "faster-hex",
+ "lazy_static",
+ "rand 0.8.7",
+]
+
+[[package]]
+name = "ckb-traits"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abc3054cb577e4bf7076ff2d63c48d26d8b48c4d103228354aa1c01deeb1d744"
+dependencies = [
+ "ckb-types",
+]
+
+[[package]]
+name = "ckb-types"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05da0ac5d3f7fbd8563b1aaae39d45f1d3f3172686f73bd2a0dffb394b37fce"
+dependencies = [
+ "bit-vec",
+ "bytes",
+ "ckb-constant",
+ "ckb-error",
+ "ckb-fixed-hash",
+ "ckb-gen-types",
+ "ckb-hash",
+ "ckb-merkle-mountain-range",
+ "ckb-occupied-capacity",
+ "ckb-rational",
+ "derive_more 1.0.0",
+ "golomb-coded-set",
+ "merkle-cbt",
+ "molecule",
+ "numext-fixed-uint",
+ "paste",
+]
+
+[[package]]
+name = "ckb-verification"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2080bedb22d7b0255678c8cff10931e5e2f587fe1a724a817a76845ec300c3c1"
+dependencies = [
+ "ckb-chain-spec",
+ "ckb-constant",
+ "ckb-dao",
+ "ckb-dao-utils",
+ "ckb-error",
+ "ckb-pow",
+ "ckb-script",
+ "ckb-systemtime",
+ "ckb-traits",
+ "ckb-types",
+ "ckb-verification-traits",
+ "derive_more 1.0.0",
+ "lru",
+ "tokio",
+]
+
+[[package]]
+name = "ckb-verification-traits"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8557e69dfca1330a1538a942c1bb468cab0a4323cdf72d4f99e4c670d9b908eb"
+dependencies = [
+ "bitflags",
+ "ckb-error",
+]
+
+[[package]]
+name = "ckb-vm"
+version = "0.24.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad137e2f1c9a363ce19a883a2113b1dfcc00a936945e34b62e3726c49e7171fb"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "cc",
+ "ckb-vm-definitions",
+ "derive_more 0.99.20",
+ "goblin 0.2.3",
+ "goblin 0.4.0",
+ "rand 0.7.3",
+ "scroll",
+ "serde",
+]
+
+[[package]]
+name = "ckb-vm-definitions"
+version = "0.24.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b436017fd6676bea413d54e07a5a9cc1d7c4b5c02e4ab07d3527225a5de6677"
+dependencies = [
+ "paste",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "cty"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
+
+[[package]]
+name = "derive_more"
+version = "0.99.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "derive_more"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
+dependencies = [
+ "derive_more-impl",
+]
+
+[[package]]
+name = "derive_more-impl"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+ "unicode-xid",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
+
+[[package]]
+name = "eaglesong"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d978bd5d343e8ab9b5c0fc8d93ff9c602fdc96616ffff9c05ac7a155419b824"
+
+[[package]]
+name = "either"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d"
+
+[[package]]
+name = "errno"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "faster-hex"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51e2ce894d53b295cf97b05685aa077950ff3e8541af83217fc720a6437169f8"
+
+[[package]]
+name = "fastrand"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223"
+
+[[package]]
+name = "find-msvc-tools"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
+
+[[package]]
+name = "flate2"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307"
+
+[[package]]
+name = "futures-task"
+version = "0.3.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109"
+
+[[package]]
+name = "futures-util"
+version = "0.3.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "slab",
+]
+
+[[package]]
+name = "gcd"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a"
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.1+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi",
+]
+
+[[package]]
+name = "goblin"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d20fd25aa456527ce4f544271ae4fea65d2eda4a6561ea56f39fb3ee4f7e3884"
+dependencies = [
+ "log",
+ "plain",
+ "scroll",
+]
+
+[[package]]
+name = "goblin"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "532a09cd3df2c6bbfc795fb0434bff8f22255d1d07328180e918a2e6ce122d4d"
+dependencies = [
+ "log",
+ "plain",
+ "scroll",
+]
+
+[[package]]
+name = "golomb-coded-set"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "812f314a99fb5b7f0f9d0a8388539578f83f3aca6a65f588b8dbeefb731e2f98"
+dependencies = [
+ "siphasher 0.3.11",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "heapsize"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hex-conservative"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f"
+dependencies = [
+ "arrayvec",
+]
+
+[[package]]
+name = "hex-conservative"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35431185f361ccf3ffc58254628af5f1f5d5f28531da2e02e5d6c82bbc282a10"
+dependencies = [
+ "arrayvec",
+]
+
+[[package]]
+name = "includedir"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afd126bd778c00c43a9dc76d1609a0894bf4222088088b2217ccc0ce9e816db7"
+dependencies = [
+ "flate2",
+ "phf 0.8.0",
+]
+
+[[package]]
+name = "includedir_codegen"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ac1500c9780957c9808c4ec3b94002f35aab01483833f5a8bce7dfb243e3148"
+dependencies = [
+ "flate2",
+ "phf_codegen",
+ "walkdir",
+]
+
+[[package]]
+name = "int-enum"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e366a1634cccc76b4cfd3e7580de9b605e4d93f1edac48d786c1f867c0def495"
+dependencies = [
+ "proc-macro2",
+ "proc-macro2-diagnostics",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
+
+[[package]]
+name = "js-sys"
+version = "0.3.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
+[[package]]
+name = "libc"
+version = "0.2.189"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
+
+[[package]]
+name = "log"
+version = "0.4.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
+
+[[package]]
+name = "lru"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a"
+dependencies = [
+ "hashbrown",
+]
+
+[[package]]
+name = "memchr"
+version = "2.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
+
+[[package]]
+name = "memmap2"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "merkle-cbt"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "171d2f700835121c3b04ccf0880882987a050fd5c7ae88148abf537d33dd3a56"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "miette"
+version = "5.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e"
+dependencies = [
+ "miette-derive",
+ "once_cell",
+ "thiserror",
+ "unicode-width",
+]
+
+[[package]]
+name = "miette-derive"
+version = "5.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
+dependencies = [
+ "adler2",
+ "simd-adler32",
+]
+
+[[package]]
+name = "molecule"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "314eebe1fb025f681c1d6a62fdacbe831027177c1046503a8d73d8027fe19e16"
+dependencies = [
+ "bytes",
+ "cfg-if",
+ "faster-hex",
+]
+
+[[package]]
+name = "numext-constructor"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "621fe0f044729f810c6815cdd77e8f5e0cd803ce4f6a38380ebfc1322af98661"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "numext-fixed-uint"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c68c76f96d589d1009a666c5072f37f3114d682696505f2cf445f27766c7d70"
+dependencies = [
+ "numext-fixed-uint-core",
+ "numext-fixed-uint-hack",
+]
+
+[[package]]
+name = "numext-fixed-uint-core"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6aab1d6457b97b49482f22a92f0f58a2f39bdd7f3b2f977eae67e8bc206aa980"
+dependencies = [
+ "heapsize",
+ "numext-constructor",
+ "rand 0.7.3",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "numext-fixed-uint-hack"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0200f8d55c36ec1b6a8cf810115be85d4814f045e0097dfd50033ba25adb4c9e"
+dependencies = [
+ "numext-fixed-uint-core",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
+
+[[package]]
+name = "paste"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+
+[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
+dependencies = [
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7"
+dependencies = [
+ "phf_macros",
+ "phf_shared 0.12.1",
+ "serde",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+dependencies = [
+ "phf_shared 0.8.0",
+ "rand 0.7.3",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cbb1126afed61dd6368748dae63b1ee7dc480191c6262a3b4ff1e29d86a6c5b"
+dependencies = [
+ "fastrand",
+ "phf_shared 0.12.1",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d713258393a82f091ead52047ca779d37e5766226d009de21696c4e667044368"
+dependencies = [
+ "phf_generator 0.12.1",
+ "phf_shared 0.12.1",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+dependencies = [
+ "siphasher 0.3.11",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981"
+dependencies = [
+ "siphasher 1.0.3",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
+
+[[package]]
+name = "plain"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proc-macro2-diagnostics"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+ "version_check",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "r-efi"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+ "rand_pcg",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.17",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.3",
+]
+
+[[package]]
+name = "reflink-copy"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9dd7ab4af0363d5ccfd2838d782a28196cf32a5cc2e4fe3c5dc83f2be588b8b"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "rustix",
+ "windows",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
+dependencies = [
+ "bitflags",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schemars"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a"
+dependencies = [
+ "dyn-clone",
+ "ref-cast",
+ "schemars_derive",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars_derive"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d98c67716b46af2f0b8cf752abc930f6f9aecfbf671ecfb531db8a31dbe4e2ba"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals",
+ "syn 3.0.3",
+]
+
+[[package]]
+name = "scroll"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda28d4b4830b807a8b43f7b0e6b5df875311b3e7621d84577188c175b6ec1ec"
+dependencies = [
+ "scroll_derive",
+]
+
+[[package]]
+name = "scroll_derive"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaaae8f38bb311444cfb7f1979af0bc9240d95795f75f9ceddf6a59b79ceffa0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "secp256k1"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252"
+dependencies = [
+ "bitcoin_hashes",
+ "rand 0.8.7",
+ "secp256k1-sys",
+]
+
+[[package]]
+name = "secp256k1-sys"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
+
+[[package]]
+name = "seq-macro"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc"
+
+[[package]]
+name = "serde"
+version = "1.0.229"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
+dependencies = [
+ "serde_core",
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_core"
+version = "1.0.229"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.229"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.3",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.3",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.151"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
+dependencies = [
+ "itoa",
+ "memchr",
+ "serde",
+ "serde_core",
+ "zmij",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea"
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "siphasher"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649"
+
+[[package]]
+name = "slab"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+
+[[package]]
+name = "ssri"
+version = "9.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da7a2b3c2bc9693bcb40870c4e9b5bf0d79f9cb46273321bf855ec513e919082"
+dependencies = [
+ "base64",
+ "digest",
+ "hex",
+ "miette",
+ "serde",
+ "sha-1",
+ "sha2",
+ "thiserror",
+ "xxhash-rust",
+]
+
+[[package]]
+name = "strum"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.119"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
+dependencies = [
+ "fastrand",
+ "getrandom 0.4.3",
+ "once_cell",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "tokio"
+version = "1.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed"
+dependencies = [
+ "bytes",
+ "pin-project-lite",
+ "tokio-macros",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.3",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "typenum"
+version = "1.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.11.1+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "wasm-bindgen-macro",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e"
+dependencies = [
+ "bumpalo",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "web-time"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.62.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
+dependencies = [
+ "windows-collections",
+ "windows-core",
+ "windows-future",
+ "windows-numerics",
+]
+
+[[package]]
+name = "windows-collections"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
+dependencies = [
+ "windows-core",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.62.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
+[[package]]
+name = "windows-future"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
+dependencies = [
+ "windows-core",
+ "windows-link",
+ "windows-threading",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.60.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.59.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+
+[[package]]
+name = "windows-numerics"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
+dependencies = [
+ "windows-core",
+ "windows-link",
+]
+
+[[package]]
+name = "windows-result"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.61.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-threading"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "xxhash-rust"
+version = "0.8.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aee1b19627c7c60102ab80d3a9cbe18de90bfe03bfa6c3715447681f0e8c8af6"
+
+[[package]]
+name = "zerocopy"
+version = "0.8.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "zmij"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
diff --git a/contracts/registry-type-script/Cargo.toml b/contracts/registry-type-script/Cargo.toml
new file mode 100644
index 00000000..5be5777b
--- /dev/null
+++ b/contracts/registry-type-script/Cargo.toml
@@ -0,0 +1,46 @@
+[package]
+name = "cellscript-registry-type-script"
+version = "0.24.0"
+edition = "2024"
+rust-version = "1.97.1"
+publish = false
+
+[[bin]]
+name = "cellscript-registry-type-script"
+path = "src/main.rs"
+test = false
+doctest = false
+bench = false
+required-features = ["ckb-script"]
+
+[[bin]]
+name = "cellscript-registry-type-script-hash"
+path = "src/bin/ckb_data_hash.rs"
+test = false
+doctest = false
+bench = false
+required-features = ["hash-tool"]
+
+[features]
+ckb-script = []
+hash-tool = ["dep:ckb-hash"]
+
+[dependencies]
+ckb-hash = { version = "=1.1.1", optional = true }
+ckb-std = { version = "=1.1.0", default-features = false, features = ["allocator"] }
+
+[dev-dependencies]
+ckb-testtool = "=1.1.1"
+
+[workspace]
+
+[profile.dev]
+panic = "abort"
+
+[profile.release]
+codegen-units = 1
+lto = true
+opt-level = "z"
+overflow-checks = true
+panic = "abort"
+strip = false
diff --git a/contracts/registry-type-script/README.md b/contracts/registry-type-script/README.md
new file mode 100644
index 00000000..3a32032d
--- /dev/null
+++ b/contracts/registry-type-script/README.md
@@ -0,0 +1,66 @@
+# CellScript Registry Type Script
+
+Canonical Type Script for mainnet Registry commitment Cells. It accepts only a
+32-byte custody Lock Script hash in `args` and exact 39-byte Cell data:
+
+```text
+"CSREGv1" || ckb_blake2b_256(canonical commitment JSON)
+```
+
+The Script validates the data and custody Lock of every input and output in its
+Type Script group. It also requires every creation, replacement, or destruction
+transaction to consume at least one Cell whose Lock Script hash equals `args`.
+Creating an output locked to the Registry therefore cannot impersonate an
+official commitment: the transaction must exercise the Registry custody Lock.
+The Script deliberately does not interpret off-chain JSON; the Registry API
+binds the 32-byte hash to accepted release and deployment evidence and
+revalidates live Cells independently.
+
+The custody requirement is the sole on-chain authority boundary. With the
+currently pinned standard sighash Lock, its one signer can create, replace, or
+destroy commitment Cells; this Type Script adds no multisig, timelock, or
+separate revocation path. A custody-key rotation changes the Lock Script hash
+in Type args and therefore creates a new Registry Type Script identity. The
+operator runbook and compromise procedure are documented under “Commitment
+custody boundary and incident response” in `services/registry-api/README.md`.
+
+Production uses the standard mainnet `secp256k1_blake160_sighash_all` genesis
+Script for custody. Type Script args are the CKB Script hash of that complete
+custody Script, including its 20-byte signer args. The Registry Type Script is
+immutable at the data-hash layer unless a reviewed deployment explicitly
+chooses a Type ID code Cell.
+
+Build and test with the pinned repository toolchain:
+
+```bash
+contracts/registry-type-script/build_reproducible_release.sh
+cargo test --locked --manifest-path contracts/registry-type-script/Cargo.toml
+```
+
+Reproduce the canonical Linux artifact with the pinned container digest:
+
+```bash
+contracts/registry-type-script/build_canonical_container.sh
+```
+
+The deployable artifact is tracked under `artifacts/v0.24.0` and was produced
+for the `x86_64-unknown-linux-gnu` host with the builder image digest recorded
+in `release-manifest.json`. Rust/LLVM may order identical RISC-V functions
+differently on another build host, so the script claims a byte-for-byte
+reproduction only on that canonical host. On every other host it still builds
+the source, reports the host artifact hash, verifies the tracked canonical
+identity, and places the canonical bytes at the normal target path for
+downstream tooling. The CKB-VM suite always executes those deployable bytes.
+
+The build disables `ckb-std` default features and enables only its Rust
+allocator. Fixed-size data, Script, and lock-hash buffers call the official
+syscall layer directly; the contract does not carry the higher-level Molecule
+type graph or depend on a host C compiler and bundled `libc.c`.
+The small host-side hash utility in the same crate computes CKB's personalized
+Blake2b-256 identity without depending on the root compiler workspace or a
+sibling SDK checkout.
+
+The test suite executes the stripped RISC-V binary in CKB-VM through
+`ckb-testtool`, covering authorized creation, replacement, destruction,
+unauthorized creation, incorrect custody Locks, malformed data, and
+non-canonical Script args.
diff --git a/contracts/registry-type-script/artifacts/v0.22.0/cellscript-registry-type-script b/contracts/registry-type-script/artifacts/v0.22.0/cellscript-registry-type-script
new file mode 100755
index 00000000..9a756b8a
Binary files /dev/null and b/contracts/registry-type-script/artifacts/v0.22.0/cellscript-registry-type-script differ
diff --git a/contracts/registry-type-script/artifacts/v0.24.0/cellscript-registry-type-script b/contracts/registry-type-script/artifacts/v0.24.0/cellscript-registry-type-script
new file mode 100755
index 00000000..623c30ac
Binary files /dev/null and b/contracts/registry-type-script/artifacts/v0.24.0/cellscript-registry-type-script differ
diff --git a/contracts/registry-type-script/build_canonical_container.sh b/contracts/registry-type-script/build_canonical_container.sh
new file mode 100755
index 00000000..c37fdd3c
--- /dev/null
+++ b/contracts/registry-type-script/build_canonical_container.sh
@@ -0,0 +1,32 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+contract_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+repository_root="$(cd "$contract_dir/../.." && pwd)"
+canonical_target_dir="${CARGO_TARGET_DIR:-$contract_dir/target/canonical-container}"
+builder_image="rust@sha256:77fac8b98f9f46062bb680b6d25d5bcaabfc400143952ebc572e924bcbedc3fa"
+
+mkdir -p "$canonical_target_dir"
+canonical_target_dir="$(cd "$canonical_target_dir" && pwd)"
+
+docker run --rm --platform linux/amd64 \
+ --user "$(id -u):$(id -g)" \
+ --env CARGO_HOME=/contract-target/cargo-home \
+ --env RUSTUP_HOME=/usr/local/rustup \
+ --mount "type=bind,src=$repository_root,dst=/workspace,readonly" \
+ --mount "type=bind,src=$canonical_target_dir,dst=/contract-target" \
+ --workdir /workspace \
+ "$builder_image" \
+ bash -c '
+ set -euo pipefail
+ toolchain_bin=/usr/local/rustup/toolchains/1.97.1-x86_64-unknown-linux-gnu/bin
+ export PATH="$toolchain_bin:/usr/local/cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+ export RUSTC="$toolchain_bin/rustc"
+ export LD_LIBRARY_PATH="$toolchain_bin/../lib"
+ test "$(rustc -vV | sed -n "s/^host: //p")" = x86_64-unknown-linux-gnu
+ test -x "$(rustc --print sysroot)/lib/rustlib/x86_64-unknown-linux-gnu/bin/rust-objcopy"
+ rustc --print target-libdir --target riscv64imac-unknown-none-elf >/dev/null
+ CARGO_TARGET_DIR=/contract-target \
+ CELLSCRIPT_HASH_TARGET_DIR=/contract-target/cellc \
+ /workspace/contracts/registry-type-script/build_reproducible_release.sh
+ '
diff --git a/contracts/registry-type-script/build_reproducible_release.sh b/contracts/registry-type-script/build_reproducible_release.sh
new file mode 100755
index 00000000..dce2254f
--- /dev/null
+++ b/contracts/registry-type-script/build_reproducible_release.sh
@@ -0,0 +1,99 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+contract_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+repository_root="$(cd "$contract_dir/../.." && pwd)"
+cargo_home_dir="${CARGO_HOME:-${HOME}/.cargo}"
+target_dir="${CARGO_TARGET_DIR:-$contract_dir/target}"
+hash_target_dir="${CELLSCRIPT_HASH_TARGET_DIR:-$repository_root/target}"
+rust_sysroot="$(rustc --print sysroot)"
+host_triple="$(rustc -vV | awk '/^host: / { print $2 }')"
+rust_objcopy="$rust_sysroot/lib/rustlib/$host_triple/bin/rust-objcopy"
+if [[ ! -x "$rust_objcopy" ]]; then
+ printf 'rust-objcopy not found; install llvm-tools-preview for the pinned toolchain\n' >&2
+ exit 1
+fi
+
+sha256_file() {
+ local input_path="$1"
+ if command -v sha256sum >/dev/null 2>&1; then
+ sha256sum "$input_path" | awk '{ print $1 }'
+ elif command -v shasum >/dev/null 2>&1; then
+ shasum -a 256 "$input_path" | awk '{ print $1 }'
+ else
+ printf 'SHA-256 tool not found; install sha256sum or shasum\n' >&2
+ return 1
+ fi
+}
+
+mkdir -p "$target_dir"
+target_dir="$(cd "$target_dir" && pwd)"
+unit_separator=$'\x1f'
+encoded_rustflags="-C${unit_separator}target-feature=+zba,+zbb,+zbc,+zbs"
+encoded_rustflags+="${unit_separator}-C${unit_separator}passes=lower-atomic"
+encoded_rustflags+="${unit_separator}--remap-path-prefix=$repository_root=/src/cellscript"
+encoded_rustflags+="${unit_separator}--remap-path-prefix=$cargo_home_dir=/cargo"
+
+env -u RUSTFLAGS \
+ CARGO_ENCODED_RUSTFLAGS="$encoded_rustflags" \
+ CARGO_INCREMENTAL=0 \
+ CARGO_TARGET_DIR="$target_dir" \
+ cargo build \
+ --locked \
+ --manifest-path "$contract_dir/Cargo.toml" \
+ --release \
+ --target riscv64imac-unknown-none-elf \
+ --features ckb-script \
+ --bin cellscript-registry-type-script
+
+artifact="$target_dir/riscv64imac-unknown-none-elf/release/cellscript-registry-type-script"
+host_artifact="$artifact.$host_triple.stripped"
+"$rust_objcopy" --strip-all "$artifact" "$host_artifact"
+
+release_manifest="$contract_dir/release-manifest.json"
+canonical_relative_path="$(sed -n 's/.*"artifact": "\([^"]*\)".*/\1/p' "$release_manifest")"
+canonical_artifact="$contract_dir/$canonical_relative_path"
+if [[ -z "$canonical_relative_path" || ! -f "$canonical_artifact" ]]; then
+ printf 'canonical Registry Type Script artifact is missing: %s\n' "$canonical_artifact" >&2
+ exit 1
+fi
+
+sha256_hash="$(sha256_file "$canonical_artifact")"
+artifact_bytes="$(wc -c < "$canonical_artifact" | tr -d ' ')"
+ckb_data_hash="$(CARGO_TARGET_DIR="$hash_target_dir" cargo run --quiet --locked \
+ --manifest-path "$contract_dir/Cargo.toml" \
+ --features hash-tool \
+ --bin cellscript-registry-type-script-hash \
+ -- "$canonical_artifact")"
+ckb_hash_json="$(printf '{\n "algorithm": "blake2b-256",\n "hash": "%s",\n "input_bytes": %s,\n "personalization": "ckb-default-hash",\n "status": "ok"\n}' \
+ "$ckb_data_hash" "$artifact_bytes")"
+expected_sha256="$(sed -n 's/.*"sha256": "\([0-9a-f]*\)".*/\1/p' "$release_manifest")"
+expected_artifact_bytes="$(sed -n 's/.*"artifact_bytes": \([0-9]*\).*/\1/p' "$release_manifest")"
+expected_ckb_data_hash="$(sed -n 's/.*"ckb_data_hash": "0x\([0-9a-f]*\)".*/\1/p' "$release_manifest")"
+if [[ "$artifact_bytes" != "$expected_artifact_bytes" || "$sha256_hash" != "$expected_sha256" || "$ckb_data_hash" != "$expected_ckb_data_hash" ]]; then
+ printf 'Registry Type Script release identity mismatch\n' >&2
+ printf 'expected bytes=%s sha256=%s ckb_data_hash=0x%s\n' "$expected_artifact_bytes" "$expected_sha256" "$expected_ckb_data_hash" >&2
+ printf 'actual bytes=%s sha256=%s ckb_data_hash=0x%s\n' "$artifact_bytes" "$sha256_hash" "$ckb_data_hash" >&2
+ exit 1
+fi
+
+host_sha256="$(sha256_file "$host_artifact")"
+if [[ "$host_triple" == "x86_64-unknown-linux-gnu" ]]; then
+ if ! cmp -s "$host_artifact" "$canonical_artifact"; then
+ printf 'canonical x86_64 Linux rebuild does not match the tracked Registry Type Script artifact\n' >&2
+ printf 'expected sha256=%s actual sha256=%s\n' "$sha256_hash" "$host_sha256" >&2
+ exit 1
+ fi
+ printf 'canonical_rebuild=matched\n'
+else
+ printf 'canonical_rebuild=not_claimed host=%s host_sha256=%s\n' "$host_triple" "$host_sha256"
+fi
+
+# Downstream tools always execute the exact tracked deployable bytes. A
+# non-canonical host build is retained beside this path for inspection.
+cp "$canonical_artifact" "$artifact"
+
+printf 'artifact=%s\n' "$artifact"
+printf 'artifact_bytes=%s\n' "$artifact_bytes"
+printf 'sha256=%s\n' "$sha256_hash"
+printf '%s\n' "$ckb_hash_json"
diff --git a/contracts/registry-type-script/release-manifest.json b/contracts/registry-type-script/release-manifest.json
new file mode 100644
index 00000000..73466ccc
--- /dev/null
+++ b/contracts/registry-type-script/release-manifest.json
@@ -0,0 +1,19 @@
+{
+ "schema": "cellscript-registry-type-script-release-v1",
+ "version": "0.24.0",
+ "target": "riscv64imac-unknown-none-elf",
+ "artifact": "artifacts/v0.24.0/cellscript-registry-type-script",
+ "canonical_build_host": "x86_64-unknown-linux-gnu",
+ "canonical_builder_image": "rust@sha256:77fac8b98f9f46062bb680b6d25d5bcaabfc400143952ebc572e924bcbedc3fa",
+ "artifact_bytes": 3352,
+ "sha256": "0f48a8736360c121f6ae0f04ab4b0496834f6715d47e3284a0a07add609dede9",
+ "ckb_data_hash": "0x0dd596ade29e06e5bcc00f56abf36ecbe9afaa09f1b26a64436aa37854da622b",
+ "script_template": {
+ "code_hash": "0x0dd596ade29e06e5bcc00f56abf36ecbe9afaa09f1b26a64436aa37854da622b",
+ "hash_type": "data1",
+ "args_schema": "ckb_script_hash(custody_lock)",
+ "args_bytes": 32
+ },
+ "deployment_policy": "immutable_data_cell",
+ "custody_lock": "ckb_mainnet_secp256k1_blake160_sighash_all"
+}
diff --git a/contracts/registry-type-script/src/bin/ckb_data_hash.rs b/contracts/registry-type-script/src/bin/ckb_data_hash.rs
new file mode 100644
index 00000000..e3bcf4e9
--- /dev/null
+++ b/contracts/registry-type-script/src/bin/ckb_data_hash.rs
@@ -0,0 +1,26 @@
+use std::{env, fs, process::ExitCode};
+
+fn main() -> ExitCode {
+ let mut args = env::args_os();
+ let _program = args.next();
+ let Some(path) = args.next() else {
+ eprintln!("usage: cellscript-registry-type-script-hash ");
+ return ExitCode::from(2);
+ };
+ if args.next().is_some() {
+ eprintln!("expected exactly one artifact path");
+ return ExitCode::from(2);
+ }
+ let bytes = match fs::read(&path) {
+ Ok(bytes) => bytes,
+ Err(error) => {
+ eprintln!("failed to read {}: {error}", path.to_string_lossy());
+ return ExitCode::FAILURE;
+ }
+ };
+ for byte in ckb_hash::blake2b_256(bytes) {
+ print!("{byte:02x}");
+ }
+ println!();
+ ExitCode::SUCCESS
+}
diff --git a/contracts/registry-type-script/src/main.rs b/contracts/registry-type-script/src/main.rs
new file mode 100644
index 00000000..ad0cda91
--- /dev/null
+++ b/contracts/registry-type-script/src/main.rs
@@ -0,0 +1,114 @@
+#![cfg_attr(not(test), no_std)]
+#![cfg_attr(not(test), no_main)]
+
+#[cfg(not(test))]
+ckb_std::entry!(program_entry);
+ckb_std::default_alloc!(16_384, 1_258_306, 64);
+
+#[cfg(all(not(test), not(target_arch = "riscv64")))]
+#[panic_handler]
+fn host_panic_handler(_: &core::panic::PanicInfo<'_>) -> ! {
+ loop {
+ core::hint::spin_loop();
+ }
+}
+
+use ckb_std::{
+ ckb_constants::{CellField, Source},
+ error::SysError,
+ syscalls,
+};
+
+const COMMITMENT_MAGIC: &[u8; 7] = b"CSREGv1";
+const COMMITMENT_HASH_BYTES: usize = 32;
+const COMMITMENT_DATA_BYTES: usize = COMMITMENT_MAGIC.len() + COMMITMENT_HASH_BYTES;
+const CUSTODY_LOCK_HASH_BYTES: usize = 32;
+// Molecule Script = total_size + 3 field offsets + code_hash + hash_type +
+// args(Bytes length prefix + 32-byte payload).
+const SCRIPT_BYTES_WITH_CUSTODY_HASH: usize = 4 + (3 * 4) + 32 + 1 + 4 + CUSTODY_LOCK_HASH_BYTES;
+const SCRIPT_ARGS_OFFSET: usize = SCRIPT_BYTES_WITH_CUSTODY_HASH - CUSTODY_LOCK_HASH_BYTES;
+
+#[repr(i8)]
+enum Error {
+ Syscall = 5,
+ NonCanonicalArgs = 6,
+ InvalidCommitmentData = 7,
+ InvalidCustodyLock = 8,
+ MissingCustodyInput = 9,
+}
+
+impl From for Error {
+ fn from(_: SysError) -> Self {
+ Self::Syscall
+ }
+}
+
+pub fn program_entry() -> i8 {
+ match validate() {
+ Ok(()) => 0,
+ Err(error) => error as i8,
+ }
+}
+
+fn validate() -> Result<(), Error> {
+ let mut script = [0u8; SCRIPT_BYTES_WITH_CUSTODY_HASH];
+ match syscalls::load_script(&mut script, 0) {
+ Ok(SCRIPT_BYTES_WITH_CUSTODY_HASH) => {}
+ Ok(_) | Err(SysError::LengthNotEnough(_)) => return Err(Error::NonCanonicalArgs),
+ Err(error) => return Err(error.into()),
+ }
+ let mut custody_lock_hash = [0u8; CUSTODY_LOCK_HASH_BYTES];
+ custody_lock_hash.copy_from_slice(&script[SCRIPT_ARGS_OFFSET..]);
+
+ validate_group(Source::GroupInput, &custody_lock_hash)?;
+ validate_group(Source::GroupOutput, &custody_lock_hash)?;
+ require_custody_input(&custody_lock_hash)?;
+ Ok(())
+}
+
+fn validate_group(source: Source, custody_lock_hash: &[u8; CUSTODY_LOCK_HASH_BYTES]) -> Result<(), Error> {
+ for index in 0.. {
+ let mut data = [0u8; COMMITMENT_DATA_BYTES];
+ match syscalls::load_cell_data(&mut data, 0, index, source) {
+ Ok(COMMITMENT_DATA_BYTES) => {
+ validate_commitment_data(&data)?;
+ if &load_cell_lock_hash(index, source)? != custody_lock_hash {
+ return Err(Error::InvalidCustodyLock);
+ }
+ }
+ Ok(_) | Err(SysError::LengthNotEnough(_)) => return Err(Error::InvalidCommitmentData),
+ Err(SysError::IndexOutOfBound) => return Ok(()),
+ Err(error) => return Err(error.into()),
+ }
+ }
+ unreachable!()
+}
+
+fn require_custody_input(custody_lock_hash: &[u8; CUSTODY_LOCK_HASH_BYTES]) -> Result<(), Error> {
+ for index in 0.. {
+ match load_cell_lock_hash(index, Source::Input) {
+ Ok(lock_hash) if &lock_hash == custody_lock_hash => return Ok(()),
+ Ok(_) => {}
+ Err(SysError::IndexOutOfBound) => return Err(Error::MissingCustodyInput),
+ Err(error) => return Err(error.into()),
+ }
+ }
+ unreachable!()
+}
+
+fn load_cell_lock_hash(index: usize, source: Source) -> Result<[u8; CUSTODY_LOCK_HASH_BYTES], SysError> {
+ let mut lock_hash = [0u8; CUSTODY_LOCK_HASH_BYTES];
+ match syscalls::load_cell_by_field(&mut lock_hash, 0, index, source, CellField::LockHash) {
+ Ok(CUSTODY_LOCK_HASH_BYTES) => Ok(lock_hash),
+ Ok(_) | Err(SysError::LengthNotEnough(_)) => Err(SysError::Encoding),
+ Err(error) => Err(error),
+ }
+}
+
+fn validate_commitment_data(data: &[u8]) -> Result<(), Error> {
+ if data.len() == COMMITMENT_DATA_BYTES && data.starts_with(COMMITMENT_MAGIC) {
+ Ok(())
+ } else {
+ Err(Error::InvalidCommitmentData)
+ }
+}
diff --git a/contracts/registry-type-script/tests/ckb_vm.rs b/contracts/registry-type-script/tests/ckb_vm.rs
new file mode 100644
index 00000000..03226587
--- /dev/null
+++ b/contracts/registry-type-script/tests/ckb_vm.rs
@@ -0,0 +1,123 @@
+use std::path::PathBuf;
+
+use ckb_testtool::{
+ builtin::ALWAYS_SUCCESS,
+ ckb_types::{
+ bytes::Bytes,
+ core::TransactionBuilder,
+ packed::{CellInput, CellOutput, Script},
+ prelude::*,
+ },
+ context::Context,
+};
+
+const MAX_CYCLES: u64 = 10_000_000;
+const CELL_CAPACITY: u64 = 20_000_000_000;
+
+struct Scripts {
+ context: Context,
+ lock: Script,
+ other_lock: Script,
+ registry_type: Script,
+}
+
+fn contract_binary() -> Bytes {
+ let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("artifacts/v0.24.0/cellscript-registry-type-script");
+ std::fs::read(&path).unwrap_or_else(|error| panic!("read tracked canonical artifact {}: {error}", path.display())).into()
+}
+
+fn scripts(args: Option) -> Scripts {
+ let mut context = Context::default();
+ let lock_out_point = context.deploy_cell(ALWAYS_SUCCESS.clone());
+ let lock = context.build_script(&lock_out_point, Bytes::new()).expect("always-success lock");
+ let other_lock = context.build_script(&lock_out_point, Bytes::from_static(&[1])).expect("alternate lock");
+ let type_out_point = context.deploy_cell(contract_binary());
+ let args = args.unwrap_or_else(|| Bytes::copy_from_slice(lock.calc_script_hash().as_slice()));
+ let registry_type = context.build_script(&type_out_point, args).expect("Registry Type Script");
+ Scripts { context, lock, other_lock, registry_type }
+}
+
+fn commitment(seed: u8) -> Bytes {
+ let mut data = b"CSREGv1".to_vec();
+ data.extend([seed; 32]);
+ data.into()
+}
+
+fn verify_creation(output_data: Bytes, args: Option, custody_input: bool, custody_output: bool) -> Result {
+ let Scripts { mut context, lock, other_lock, registry_type } = scripts(args);
+ let input_lock = if custody_input { lock.clone() } else { other_lock.clone() };
+ let output_lock = if custody_output { lock } else { other_lock };
+ let input_out_point =
+ context.create_cell(CellOutput::new_builder().capacity(CELL_CAPACITY).lock(input_lock).build(), Bytes::new());
+ let input = CellInput::new_builder().previous_output(input_out_point).build();
+ let output = CellOutput::new_builder().capacity(CELL_CAPACITY).lock(output_lock).type_(Some(registry_type).pack()).build();
+ let transaction = TransactionBuilder::default().input(input).output(output).output_data(output_data.pack()).build();
+ let transaction = context.complete_tx(transaction);
+ context.verify_tx(&transaction, MAX_CYCLES).map_err(|error| error.to_string())
+}
+
+#[test]
+fn accepts_exact_commitment_data() {
+ verify_creation(commitment(0x11), None, true, true).expect("valid commitment");
+}
+
+#[test]
+fn rejects_wrong_magic_short_hash_and_trailing_bytes() {
+ let mut wrong_magic = commitment(0x22).to_vec();
+ wrong_magic[0] ^= 0xff;
+ assert!(verify_creation(wrong_magic.into(), None, true, true).is_err());
+
+ assert!(verify_creation(Bytes::from_static(b"CSREGv1"), None, true, true).is_err());
+
+ let mut trailing = commitment(0x33).to_vec();
+ trailing.push(0);
+ assert!(verify_creation(trailing.into(), None, true, true).is_err());
+}
+
+#[test]
+fn rejects_non_canonical_type_args() {
+ assert!(verify_creation(commitment(0x44), Some(Bytes::new()), true, true).is_err());
+ assert!(verify_creation(commitment(0x44), Some(Bytes::from(vec![1; 31])), true, true).is_err());
+ assert!(verify_creation(commitment(0x44), Some(Bytes::from(vec![1; 33])), true, true).is_err());
+}
+
+#[test]
+fn requires_custody_authorization_and_custody_locked_outputs() {
+ assert!(verify_creation(commitment(0x45), None, false, true).is_err());
+ assert!(verify_creation(commitment(0x46), None, true, false).is_err());
+}
+
+#[test]
+fn accepts_replacement_and_destruction_but_rejects_malformed_input() {
+ for replacement in [Some(commitment(0x66)), None] {
+ let Scripts { mut context, lock, registry_type, .. } = scripts(None);
+ let input_out_point = context.create_cell(
+ CellOutput::new_builder().capacity(CELL_CAPACITY).lock(lock.clone()).type_(Some(registry_type.clone()).pack()).build(),
+ commitment(0x55),
+ );
+ let input = CellInput::new_builder().previous_output(input_out_point).build();
+ let mut builder = TransactionBuilder::default().input(input);
+ if let Some(data) = replacement {
+ builder = builder
+ .output(
+ CellOutput::new_builder()
+ .capacity(CELL_CAPACITY)
+ .lock(lock.clone())
+ .type_(Some(registry_type.clone()).pack())
+ .build(),
+ )
+ .output_data(data.pack());
+ }
+ let transaction = context.complete_tx(builder.build());
+ context.verify_tx(&transaction, MAX_CYCLES).expect("valid lifecycle transition");
+ }
+
+ let Scripts { mut context, lock, registry_type, .. } = scripts(None);
+ let input_out_point = context.create_cell(
+ CellOutput::new_builder().capacity(CELL_CAPACITY).lock(lock).type_(Some(registry_type).pack()).build(),
+ Bytes::from_static(b"legacy-malformed"),
+ );
+ let transaction = TransactionBuilder::default().input(CellInput::new_builder().previous_output(input_out_point).build()).build();
+ let transaction = context.complete_tx(transaction);
+ assert!(context.verify_tx(&transaction, MAX_CYCLES).is_err());
+}
diff --git a/crates/cellscript-artifact-checker/Cargo.toml b/crates/cellscript-artifact-checker/Cargo.toml
new file mode 100644
index 00000000..16696998
--- /dev/null
+++ b/crates/cellscript-artifact-checker/Cargo.toml
@@ -0,0 +1,21 @@
+[package]
+name = "cellscript-artifact-checker"
+version = "0.24.0"
+edition = "2024"
+rust-version = "1.97.1"
+description = "Bounded independent verifier for CellScript lowering records and CKB RISC-V artifacts"
+license = "MIT"
+repository = "https://github.com/CellScript-Labs/CellScript"
+
+[[bin]]
+name = "cellscript-artifact-checker"
+path = "src/main.rs"
+
+[dependencies]
+blake2b_simd = "1.0"
+clap = { version = "=4.5.49", features = ["derive"] }
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+
+[dev-dependencies]
+tempfile = "3.10"
diff --git a/crates/cellscript-artifact-checker/src/checker.rs b/crates/cellscript-artifact-checker/src/checker.rs
new file mode 100644
index 00000000..e0ef8f5b
--- /dev/null
+++ b/crates/cellscript-artifact-checker/src/checker.rs
@@ -0,0 +1,1099 @@
+use crate::elf::{parse_elf, DecodedControlFlowKind, ElfErrorKind, ElfParseError, ElfSummary, ParsedElf};
+use crate::schema::*;
+use crate::{ckb_blake2b256, hex_encode};
+use serde::{Deserialize, Serialize};
+use serde_json::Value;
+use std::collections::{BTreeMap, BTreeSet};
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
+pub enum CheckerRejectionCode {
+ V2400BudgetExceeded,
+ V2401MalformedJson,
+ V2402NonCanonicalJson,
+ V2403UnsupportedSchema,
+ V2404CanonicalOrder,
+ V2405ReferentialIntegrity,
+ V2406CfgInvalid,
+ V2407AbiOrStackInvalid,
+ V2408ProofCoverageInvalid,
+ V2409ArtifactIdentityMismatch,
+ V2410MetadataBindingMismatch,
+ V2411ElfFormatInvalid,
+ V2412ElfSectionInvalid,
+ V2413InstructionInvalid,
+ V2414ControlFlowInvalid,
+ V2415BlockDigestMismatch,
+ V2416SourceMapInvalid,
+ V2417SyscallContractInvalid,
+ V2418RecursionPolicyInvalid,
+}
+
+impl CheckerRejectionCode {
+ pub const fn as_str(self) -> &'static str {
+ match self {
+ Self::V2400BudgetExceeded => "V2400",
+ Self::V2401MalformedJson => "V2401",
+ Self::V2402NonCanonicalJson => "V2402",
+ Self::V2403UnsupportedSchema => "V2403",
+ Self::V2404CanonicalOrder => "V2404",
+ Self::V2405ReferentialIntegrity => "V2405",
+ Self::V2406CfgInvalid => "V2406",
+ Self::V2407AbiOrStackInvalid => "V2407",
+ Self::V2408ProofCoverageInvalid => "V2408",
+ Self::V2409ArtifactIdentityMismatch => "V2409",
+ Self::V2410MetadataBindingMismatch => "V2410",
+ Self::V2411ElfFormatInvalid => "V2411",
+ Self::V2412ElfSectionInvalid => "V2412",
+ Self::V2413InstructionInvalid => "V2413",
+ Self::V2414ControlFlowInvalid => "V2414",
+ Self::V2415BlockDigestMismatch => "V2415",
+ Self::V2416SourceMapInvalid => "V2416",
+ Self::V2417SyscallContractInvalid => "V2417",
+ Self::V2418RecursionPolicyInvalid => "V2418",
+ }
+ }
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct CheckerError {
+ pub code: CheckerRejectionCode,
+ pub message: String,
+}
+
+impl CheckerError {
+ fn new(code: CheckerRejectionCode, message: impl Into) -> Self {
+ Self { code, message: message.into() }
+ }
+
+ fn bounded(mut self, max_bytes: u32) -> Self {
+ let max_bytes = usize::try_from(max_bytes).unwrap_or(usize::MAX);
+ if self.message.len() > max_bytes {
+ let mut end = max_bytes.min(self.message.len());
+ while end > 0 && !self.message.is_char_boundary(end) {
+ end -= 1;
+ }
+ self.message.truncate(end);
+ }
+ self
+ }
+}
+
+impl std::fmt::Display for CheckerError {
+ fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(formatter, "{}: {}", self.code.as_str(), self.message)
+ }
+}
+
+impl std::error::Error for CheckerError {}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "kebab-case")]
+pub enum EvidenceState {
+ Verified,
+ NotProvided,
+ NotExecuted,
+ NotClaimed,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct CheckerReport {
+ pub schema: String,
+ pub checker_name: String,
+ pub checker_version: String,
+ pub checker_policy_schema: String,
+ pub artifact_hash: String,
+ pub lowering_record_hash: String,
+ pub source_map_hash: String,
+ pub binding_verification: EvidenceState,
+ pub structural_verification: EvidenceState,
+ pub lowering_record_verification: EvidenceState,
+ pub ckb_vm_evidence: EvidenceState,
+ pub chain_evidence: EvidenceState,
+ pub semantic_equivalence_claimed: bool,
+ pub elf: ElfSummary,
+}
+
+pub fn canonical_bytes(value: &T) -> Result, CheckerError> {
+ serde_json::to_vec(value).map_err(|error| {
+ CheckerError::new(CheckerRejectionCode::V2401MalformedJson, format!("failed to serialize canonical checker value: {error}"))
+ })
+}
+
+pub fn canonical_hash(domain: &str, value: &T) -> Result {
+ let bytes = canonical_bytes(value)?;
+ let mut material = Vec::with_capacity(domain.len() + 1 + bytes.len());
+ material.extend_from_slice(domain.as_bytes());
+ material.push(0);
+ material.extend_from_slice(&bytes);
+ Ok(hex_encode(&ckb_blake2b256(&material)))
+}
+
+pub fn parse_lowering_record(bytes: &[u8], budgets: &CheckerBudgets) -> Result {
+ ensure_byte_budget("lowering record", bytes.len(), budgets.record_bytes)?;
+ let record: VerifiedLoweringRecord = serde_json::from_slice(bytes).map_err(|error| {
+ CheckerError::new(CheckerRejectionCode::V2401MalformedJson, format!("failed to parse lowering record: {error}"))
+ })?;
+ ensure_canonical("lowering record", bytes, &record)?;
+ Ok(record)
+}
+
+pub fn parse_source_map(bytes: &[u8], budgets: &CheckerBudgets) -> Result {
+ ensure_byte_budget("source map", bytes.len(), budgets.source_map_bytes)?;
+ let source_map: SourceArtifactMap = serde_json::from_slice(bytes).map_err(|error| {
+ CheckerError::new(CheckerRejectionCode::V2401MalformedJson, format!("failed to parse source map: {error}"))
+ })?;
+ ensure_canonical("source map", bytes, &source_map)?;
+ Ok(source_map)
+}
+
+pub fn check_bundle(
+ artifact: &[u8],
+ metadata_bytes: &[u8],
+ lowering_record_bytes: &[u8],
+ source_map_bytes: &[u8],
+ budgets: &CheckerBudgets,
+) -> Result {
+ let result = (|| {
+ if budgets.schema != CHECKER_POLICY_SCHEMA {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2403UnsupportedSchema,
+ format!("unsupported checker policy schema '{}'", budgets.schema),
+ ));
+ }
+ ensure_byte_budget("artifact", artifact.len(), budgets.artifact_bytes)?;
+ let metadata: Value = serde_json::from_slice(metadata_bytes).map_err(|error| {
+ CheckerError::new(CheckerRejectionCode::V2401MalformedJson, format!("failed to parse compile metadata: {error}"))
+ })?;
+ let record = parse_lowering_record(lowering_record_bytes, budgets)?;
+ let source_map = parse_source_map(source_map_bytes, budgets)?;
+ check_bundle_values(artifact, &metadata, &record, &source_map, budgets)
+ })();
+ result.map_err(|error| error.bounded(budgets.diagnostic_bytes))
+}
+
+pub fn check_bundle_values(
+ artifact: &[u8],
+ metadata: &Value,
+ record: &VerifiedLoweringRecord,
+ source_map: &SourceArtifactMap,
+ budgets: &CheckerBudgets,
+) -> Result {
+ validate_record_schema(record)?;
+ validate_declared_limits(&record.limits, budgets)?;
+ validate_counts(record, source_map, budgets)?;
+ validate_metadata_binding(artifact, metadata, record, source_map)?;
+ validate_record_graph(record, budgets)?;
+
+ let elf = parse_elf(artifact, budgets.instructions).map_err(map_elf_error)?;
+ validate_elf_binding(artifact, record, &elf)?;
+ validate_block_digests(artifact, record, &elf)?;
+ validate_control_flow(record, &elf)?;
+ validate_machine_terminators(record, &elf)?;
+ validate_stack_discipline(record, &elf)?;
+ validate_syscalls(record, &elf)?;
+ validate_source_map(source_map, record, artifact, &elf)?;
+
+ Ok(CheckerReport {
+ schema: CHECKER_REPORT_SCHEMA.to_string(),
+ checker_name: "cellscript-artifact-checker".to_string(),
+ checker_version: CHECKER_VERSION.to_string(),
+ checker_policy_schema: budgets.schema.clone(),
+ artifact_hash: record.artifact_hash.clone(),
+ lowering_record_hash: canonical_hash(LOWERING_RECORD_SCHEMA, record)?,
+ source_map_hash: canonical_hash(SOURCE_MAP_SCHEMA, source_map)?,
+ binding_verification: EvidenceState::Verified,
+ structural_verification: EvidenceState::Verified,
+ lowering_record_verification: EvidenceState::Verified,
+ ckb_vm_evidence: EvidenceState::NotExecuted,
+ chain_evidence: EvidenceState::NotProvided,
+ semantic_equivalence_claimed: false,
+ elf: elf.summary(),
+ })
+}
+
+fn validate_record_schema(record: &VerifiedLoweringRecord) -> Result<(), CheckerError> {
+ if record.schema != LOWERING_RECORD_SCHEMA || record.version != LOWERING_RECORD_VERSION {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2403UnsupportedSchema,
+ format!("unsupported lowering record '{}'/{}", record.schema, record.version),
+ ));
+ }
+ if record.claim.lowering_record != "binding-verified"
+ || record.claim.machine_code != "structurally-verified"
+ || record.claim.semantic_equivalence
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2403UnsupportedSchema,
+ "lowering record overclaims or mislabels the v1 verification boundary",
+ ));
+ }
+ if record.artifact_format != "RISC-V ELF" || record.target_profile != "ckb" {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2403UnsupportedSchema,
+ "v1 checker accepts only the CKB RISC-V ELF profile",
+ ));
+ }
+ if record.compatibility_profile.target_profile != record.target_profile
+ || record.compatibility_profile.edition != record.edition
+ || record.compatibility_profile.raw_entry_witness_payload_compatible
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2410MetadataBindingMismatch,
+ "record compatibility profile disagrees with edition/target or accepts raw entry witnesses",
+ ));
+ }
+ let profile_hash = canonical_hash("cellscript-compatibility-profile-identity-v1", &record.compatibility_profile)?;
+ if profile_hash != record.compatibility_profile_hash {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2410MetadataBindingMismatch,
+ "record compatibility profile hash does not match its canonical identity",
+ ));
+ }
+ Ok(())
+}
+
+fn validate_declared_limits(declared: &DeclaredLimits, budgets: &CheckerBudgets) -> Result<(), CheckerError> {
+ let checks = [
+ ("artifact_bytes", declared.artifact_bytes, budgets.artifact_bytes),
+ ("record_bytes", declared.record_bytes, budgets.record_bytes),
+ ("source_map_bytes", declared.source_map_bytes, budgets.source_map_bytes),
+ ("entries", u64::from(declared.entries), u64::from(budgets.entries)),
+ ("blocks", u64::from(declared.blocks), u64::from(budgets.blocks)),
+ ("edges", u64::from(declared.edges), u64::from(budgets.edges)),
+ ("instructions", declared.instructions, budgets.instructions),
+ ("call_depth", u64::from(declared.call_depth), u64::from(budgets.call_depth)),
+ ("stack_frame_bytes", u64::from(declared.stack_frame_bytes), u64::from(budgets.stack_frame_bytes)),
+ ("proof_records", u64::from(declared.proof_records), u64::from(budgets.proof_records)),
+ ("source_map_intervals", u64::from(declared.source_map_intervals), u64::from(budgets.source_map_intervals)),
+ ("diagnostic_bytes", u64::from(declared.diagnostic_bytes), u64::from(budgets.diagnostic_bytes)),
+ ];
+ for (name, value, limit) in checks {
+ if value > limit {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2400BudgetExceeded,
+ format!("record-declared {name} limit {value} exceeds checker policy {limit}"),
+ ));
+ }
+ }
+ Ok(())
+}
+
+fn validate_counts(
+ record: &VerifiedLoweringRecord,
+ source_map: &SourceArtifactMap,
+ budgets: &CheckerBudgets,
+) -> Result<(), CheckerError> {
+ ensure_count("entries", record.entries.len(), budgets.entries)?;
+ ensure_count("blocks", record.blocks.len(), budgets.blocks)?;
+ ensure_count("edges", record.edges.len(), budgets.edges)?;
+ ensure_count("proof records", record.proof_records.len(), budgets.proof_records)?;
+ ensure_count("source-map intervals", source_map.intervals.len(), budgets.source_map_intervals)?;
+ if artifact_declared_too_large(record.artifact_size_bytes, budgets.artifact_bytes) {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2400BudgetExceeded,
+ "record-declared artifact size exceeds checker policy",
+ ));
+ }
+ Ok(())
+}
+
+fn validate_metadata_binding(
+ artifact: &[u8],
+ metadata: &Value,
+ record: &VerifiedLoweringRecord,
+ source_map: &SourceArtifactMap,
+) -> Result<(), CheckerError> {
+ let artifact_hash = hex_encode(&ckb_blake2b256(artifact));
+ if artifact_hash != record.artifact_hash || artifact.len() as u64 != record.artifact_size_bytes {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2409ArtifactIdentityMismatch,
+ "artifact bytes do not match the lowering record identity",
+ ));
+ }
+ let record_hash = canonical_hash(LOWERING_RECORD_SCHEMA, record)?;
+ let source_map_hash = canonical_hash(SOURCE_MAP_SCHEMA, source_map)?;
+ let comparisons = [
+ ("compiler_version", json_string(metadata, &["compiler_version"]), record.compiler_version.as_str()),
+ ("module", json_string(metadata, &["module"]), record.module.as_str()),
+ ("edition", json_string(metadata, &["edition"]), record.edition.as_str()),
+ ("target_profile.name", json_string(metadata, &["target_profile", "name"]), record.target_profile.as_str()),
+ ("artifact_format", json_string(metadata, &["artifact_format"]), record.artifact_format.as_str()),
+ ("artifact_hash", json_string(metadata, &["artifact_hash"]), record.artifact_hash.as_str()),
+ ("source_content_hash", json_string(metadata, &["source_content_hash"]), record.source_content_hash.as_str()),
+ (
+ "verified_artifact.lowering_record_hash",
+ json_string(metadata, &["verified_artifact", "lowering_record_hash"]),
+ record_hash.as_str(),
+ ),
+ (
+ "verified_artifact.source_map_hash",
+ json_string(metadata, &["verified_artifact", "source_map_hash"]),
+ source_map_hash.as_str(),
+ ),
+ ];
+ for (field, actual, expected) in comparisons {
+ if actual != Some(expected) {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2410MetadataBindingMismatch,
+ format!("compile metadata field '{field}' does not match lowering boundary"),
+ ));
+ }
+ }
+ if json_u64(metadata, &["artifact_size_bytes"]) != Some(record.artifact_size_bytes) {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2410MetadataBindingMismatch,
+ "compile metadata artifact_size_bytes does not match lowering record",
+ ));
+ }
+ let profile_value = metadata.get("compatibility_profile").cloned().ok_or_else(|| {
+ CheckerError::new(CheckerRejectionCode::V2410MetadataBindingMismatch, "compile metadata has no compatibility_profile")
+ })?;
+ let profile: CompatibilityProfileIdentity = serde_json::from_value(profile_value).map_err(|error| {
+ CheckerError::new(
+ CheckerRejectionCode::V2410MetadataBindingMismatch,
+ format!("compile metadata compatibility_profile shape is invalid: {error}"),
+ )
+ })?;
+ if profile != record.compatibility_profile {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2410MetadataBindingMismatch,
+ "compile metadata compatibility profile differs from lowering record",
+ ));
+ }
+ if source_map.lowering_record_hash != record_hash
+ || source_map.artifact_hash != record.artifact_hash
+ || source_map.source_set_hash != record.source_set_hash
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2416SourceMapInvalid,
+ "source map identity does not bind to record, artifact, and source set",
+ ));
+ }
+ Ok(())
+}
+
+fn validate_record_graph(record: &VerifiedLoweringRecord, budgets: &CheckerBudgets) -> Result<(), CheckerError> {
+ if record.entries.is_empty() || record.blocks.is_empty() || record.text_range.is_empty() {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2405ReferentialIntegrity,
+ "lowering record requires at least one entry, one block, and a non-empty text range",
+ ));
+ }
+ ensure_sorted_unique(&record.entries, |entry| entry.id.as_str(), "entry")?;
+ ensure_sorted_unique(&record.blocks, |block| block.id.as_str(), "block")?;
+ ensure_sorted_unique(&record.proof_records, |proof| proof.id.as_str(), "proof")?;
+ if !record.edges.windows(2).all(|pair| (&pair[0].from, &pair[0].kind, &pair[0].to) < (&pair[1].from, &pair[1].kind, &pair[1].to)) {
+ return Err(CheckerError::new(CheckerRejectionCode::V2404CanonicalOrder, "lowering edges are not strictly sorted and unique"));
+ }
+
+ let entries = record.entries.iter().map(|entry| (entry.id.as_str(), entry)).collect::>();
+ let blocks = record.blocks.iter().map(|block| (block.id.as_str(), block)).collect::>();
+ let proofs = record.proof_records.iter().map(|proof| (proof.id.as_str(), proof)).collect::>();
+ for entry in &record.entries {
+ let Some(block) = blocks.get(entry.entry_block.as_str()) else {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2405ReferentialIntegrity,
+ format!("entry '{}' references missing block '{}'", entry.id, entry.entry_block),
+ ));
+ };
+ if block.owner_entry != entry.id {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2405ReferentialIntegrity,
+ format!("entry '{}' begins in block owned by '{}'", entry.id, block.owner_entry),
+ ));
+ }
+ validate_entry_abi(entry, budgets)?;
+ if !strictly_sorted(&entry.capabilities)
+ || entry.capabilities.iter().any(String::is_empty)
+ || !strictly_sorted(&entry.proof_ids)
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2404CanonicalOrder,
+ format!("entry '{}' has non-canonical capabilities or ProofPlan links", entry.id),
+ ));
+ }
+ for proof_id in &entry.proof_ids {
+ let Some(proof) = proofs.get(proof_id.as_str()) else {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2408ProofCoverageInvalid,
+ format!("entry '{}' references missing proof '{}'", entry.id, proof_id),
+ ));
+ };
+ if proof.entry_id != entry.id {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2408ProofCoverageInvalid,
+ format!("proof '{}' is not owned by entry '{}'", proof_id, entry.id),
+ ));
+ }
+ }
+ }
+ for proof in &record.proof_records {
+ if !entries.contains_key(proof.entry_id.as_str()) || proof.obligation.is_empty() || proof.evidence_tier.is_empty() {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2408ProofCoverageInvalid,
+ format!("proof '{}' has an invalid owner or empty enforcement fields", proof.id),
+ ));
+ }
+ }
+
+ if !record
+ .runtime_error_exits
+ .windows(2)
+ .all(|pair| (&pair[0].block_id, pair[0].code, pair[0].address) < (&pair[1].block_id, pair[1].code, pair[1].address))
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2404CanonicalOrder,
+ "runtime-error exits are not strictly sorted and unique",
+ ));
+ }
+ for exit in &record.runtime_error_exits {
+ if exit.code <= 0
+ || exit.code > 255
+ || exit.name.is_empty()
+ || blocks.get(exit.block_id.as_str()).is_none_or(|block| !block.range.contains(exit.address))
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2406CfgInvalid,
+ format!("runtime-error exit {} ({}) is outside its declared block", exit.code, exit.name),
+ ));
+ }
+ }
+
+ let mut expected_start = record.text_range.start;
+ for block in &record.blocks {
+ if !entries.contains_key(block.owner_entry.as_str()) {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2405ReferentialIntegrity,
+ format!("block '{}' has missing owner '{}'", block.id, block.owner_entry),
+ ));
+ }
+ if block.range.start != expected_start || block.range.is_empty() || block.range.start % 4 != 0 || block.range.end % 4 != 0 {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2406CfgInvalid,
+ format!("block '{}' does not form aligned contiguous text coverage", block.id),
+ ));
+ }
+ expected_start = block.range.end;
+ validate_block_abi(block, entries[block.owner_entry.as_str()], &proofs, budgets)?;
+ }
+ if expected_start != record.text_range.end {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2406CfgInvalid,
+ "lowering blocks do not cover the declared text range exactly",
+ ));
+ }
+
+ let mut outgoing = BTreeMap::<&str, Vec<&LoweringEdge>>::new();
+ for edge in &record.edges {
+ if !blocks.contains_key(edge.from.as_str()) || !blocks.contains_key(edge.to.as_str()) {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2405ReferentialIntegrity,
+ format!("edge '{} -> {}' references a missing block", edge.from, edge.to),
+ ));
+ }
+ outgoing.entry(edge.from.as_str()).or_default().push(edge);
+ }
+ for block in &record.blocks {
+ validate_terminator_edges(block, outgoing.get(block.id.as_str()).map(Vec::as_slice).unwrap_or(&[]))?;
+ }
+ validate_reachability(record, &outgoing)?;
+ validate_call_graph(record, &entries, &blocks, budgets.call_depth)?;
+ Ok(())
+}
+
+fn validate_entry_abi(entry: &LoweringEntry, budgets: &CheckerBudgets) -> Result<(), CheckerError> {
+ if entry.name.is_empty()
+ || entry.return_type.is_empty()
+ || entry.effect.is_empty()
+ || entry.frame_size_bytes > budgets.stack_frame_bytes
+ || entry.outgoing_argument_bytes > entry.frame_size_bytes
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2407AbiOrStackInvalid,
+ format!("entry '{}' has an invalid name/frame/outgoing-argument area", entry.id),
+ ));
+ }
+ let mut expected_index = 0u32;
+ for param in &entry.params {
+ if param.index != expected_index
+ || param.name.is_empty()
+ || param.ty.is_empty()
+ || param.width_bytes == 0
+ || !valid_alignment(param.alignment_bytes)
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2407AbiOrStackInvalid,
+ format!("entry '{}' has an invalid typed parameter at index {}", entry.id, param.index),
+ ));
+ }
+ expected_index = expected_index.saturating_add(1);
+ }
+ Ok(())
+}
+
+fn validate_block_abi(
+ block: &LoweringBlock,
+ entry: &LoweringEntry,
+ proofs: &BTreeMap<&str, &ProofRecord>,
+ budgets: &CheckerBudgets,
+) -> Result<(), CheckerError> {
+ if block.frame_size_bytes != entry.frame_size_bytes
+ || block.outgoing_argument_bytes != entry.outgoing_argument_bytes
+ || block.effect != entry.effect
+ || block.capabilities != entry.capabilities
+ || block.frame_size_bytes > budgets.stack_frame_bytes
+ || block.outgoing_argument_bytes > block.frame_size_bytes
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2407AbiOrStackInvalid,
+ format!("block '{}' frame contract disagrees with owner entry", block.id),
+ ));
+ }
+ let valid_registers = [
+ "zero", "ra", "sp", "gp", "tp", "t0", "t1", "t2", "s0", "s1", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "s2", "s3",
+ "s4", "s5", "s6", "s7", "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6",
+ ];
+ if !strictly_sorted(&block.scratch_register_avoid)
+ || block.scratch_register_avoid.iter().any(|register| !valid_registers.contains(®ister.as_str()))
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2407AbiOrStackInvalid,
+ format!("block '{}' has invalid scratch-register declarations", block.id),
+ ));
+ }
+ let mut last_end = block.outgoing_argument_bytes;
+ for slot in &block.stack_slots {
+ if slot.name.is_empty()
+ || slot.width_bytes == 0
+ || !valid_alignment(slot.alignment_bytes)
+ || slot.offset % slot.alignment_bytes != 0
+ || slot.offset < last_end
+ || slot.offset.saturating_add(slot.width_bytes) > block.frame_size_bytes
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2407AbiOrStackInvalid,
+ format!("block '{}' has overlapping, misaligned, or out-of-frame stack slot '{}'", block.id, slot.name),
+ ));
+ }
+ last_end = slot.offset.saturating_add(slot.width_bytes);
+ }
+ if !strictly_sorted(&block.proof_ids)
+ || block.proof_ids.iter().any(|proof_id| proofs.get(proof_id.as_str()).is_none_or(|proof| proof.entry_id != block.owner_entry))
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2408ProofCoverageInvalid,
+ format!("block '{}' has invalid ProofPlan links", block.id),
+ ));
+ }
+ Ok(())
+}
+
+fn validate_reachability(record: &VerifiedLoweringRecord, outgoing: &BTreeMap<&str, Vec<&LoweringEdge>>) -> Result<(), CheckerError> {
+ let mut reachable = BTreeSet::new();
+ let mut pending = record.entries.iter().map(|entry| entry.entry_block.as_str()).collect::>();
+ while let Some(block_id) = pending.pop() {
+ if !reachable.insert(block_id) {
+ continue;
+ }
+ if let Some(edges) = outgoing.get(block_id) {
+ pending.extend(edges.iter().map(|edge| edge.to.as_str()));
+ }
+ }
+ if let Some(block) = record.blocks.iter().find(|block| block.reachable != reachable.contains(block.id.as_str())) {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2406CfgInvalid,
+ format!(
+ "block '{}' declared reachable={} but CFG reachability is {}",
+ block.id,
+ block.reachable,
+ reachable.contains(block.id.as_str())
+ ),
+ ));
+ }
+ Ok(())
+}
+
+fn validate_terminator_edges(block: &LoweringBlock, edges: &[&LoweringEdge]) -> Result<(), CheckerError> {
+ let non_call = edges.iter().filter(|edge| edge.kind != EdgeKind::Call).map(|edge| edge.kind).collect::>();
+ let valid = match block.terminator {
+ MachineTerminator::Fallthrough => non_call == [EdgeKind::Fallthrough],
+ MachineTerminator::Jump => non_call == [EdgeKind::Jump],
+ MachineTerminator::ConditionalBranch => {
+ non_call == [EdgeKind::ConditionalTaken, EdgeKind::ConditionalFallthrough]
+ || non_call == [EdgeKind::ConditionalFallthrough, EdgeKind::ConditionalTaken]
+ }
+ MachineTerminator::Return => non_call.is_empty(),
+ };
+ if !valid {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2406CfgInvalid,
+ format!("block '{}' terminator does not match its CFG edges", block.id),
+ ));
+ }
+ Ok(())
+}
+
+fn validate_call_graph(
+ record: &VerifiedLoweringRecord,
+ entries: &BTreeMap<&str, &LoweringEntry>,
+ blocks: &BTreeMap<&str, &LoweringBlock>,
+ max_depth: u32,
+) -> Result<(), CheckerError> {
+ let mut graph = BTreeMap::<&str, BTreeSet<&str>>::new();
+ for edge in record.edges.iter().filter(|edge| edge.kind == EdgeKind::Call) {
+ let from = blocks[edge.from.as_str()].owner_entry.as_str();
+ let to = blocks[edge.to.as_str()].owner_entry.as_str();
+ if from != to {
+ graph.entry(from).or_default().insert(to);
+ }
+ }
+ for root in entries.keys() {
+ let mut active = BTreeSet::new();
+ validate_call_depth(root, &graph, &mut active, 1, max_depth)?;
+ }
+ Ok(())
+}
+
+fn validate_call_depth<'a>(
+ current: &'a str,
+ graph: &BTreeMap<&'a str, BTreeSet<&'a str>>,
+ active: &mut BTreeSet<&'a str>,
+ depth: u32,
+ max_depth: u32,
+) -> Result<(), CheckerError> {
+ if depth > max_depth {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2400BudgetExceeded,
+ format!("static call depth exceeds checker budget {max_depth}"),
+ ));
+ }
+ if !active.insert(current) {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2418RecursionPolicyInvalid,
+ format!("recursive call cycle reaches entry '{current}'"),
+ ));
+ }
+ if let Some(children) = graph.get(current) {
+ for child in children {
+ validate_call_depth(child, graph, active, depth.saturating_add(1), max_depth)?;
+ }
+ }
+ active.remove(current);
+ Ok(())
+}
+
+fn validate_elf_binding(artifact: &[u8], record: &VerifiedLoweringRecord, elf: &ParsedElf) -> Result<(), CheckerError> {
+ if !elf.text.range().contains_range(record.text_range) {
+ return Err(CheckerError::new(CheckerRejectionCode::V2412ElfSectionInvalid, "record text range is outside ELF .text"));
+ }
+ if record.artifact_size_bytes != artifact.len() as u64 || record.text_range.start < elf.entry {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2409ArtifactIdentityMismatch,
+ "record artifact size/text identity disagrees with ELF",
+ ));
+ }
+ Ok(())
+}
+
+fn validate_block_digests(artifact: &[u8], record: &VerifiedLoweringRecord, elf: &ParsedElf) -> Result<(), CheckerError> {
+ for block in &record.blocks {
+ let bytes = elf.bytes_for_range(artifact, block.range).map_err(map_elf_error)?;
+ let digest = domain_hash_bytes("cellscript-machine-block-v1", bytes);
+ if digest != block.byte_digest {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2415BlockDigestMismatch,
+ format!("machine bytes for block '{}' do not match its digest", block.id),
+ ));
+ }
+ }
+ Ok(())
+}
+
+fn validate_control_flow(record: &VerifiedLoweringRecord, elf: &ParsedElf) -> Result<(), CheckerError> {
+ let blocks = record.blocks.iter().map(|block| (block.id.as_str(), block)).collect::>();
+ let find_block = |address| record.blocks.iter().find(|block| block.range.contains(address));
+ for flow in elf.control_flow.iter().filter(|flow| record.text_range.contains(flow.address)) {
+ let Some(from) = find_block(flow.address) else {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2414ControlFlowInvalid,
+ format!("instruction at {:#x} is not covered by a lowering block", flow.address),
+ ));
+ };
+ let Some(to) = find_block(flow.target) else {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2414ControlFlowInvalid,
+ format!("target {:#x} is outside lowering blocks", flow.target),
+ ));
+ };
+ let allowed_kinds: &[EdgeKind] = match flow.kind {
+ DecodedControlFlowKind::ConditionalBranch => {
+ &[EdgeKind::ConditionalTaken, EdgeKind::ConditionalFallthrough, EdgeKind::Fallthrough]
+ }
+ DecodedControlFlowKind::DirectJump => &[EdgeKind::Jump, EdgeKind::Call, EdgeKind::ConditionalTaken],
+ };
+ let edge_exists = from.id == to.id
+ || record.edges.iter().any(|edge| edge.from == from.id && edge.to == to.id && allowed_kinds.contains(&edge.kind));
+ if !edge_exists || !blocks.contains_key(to.id.as_str()) {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2414ControlFlowInvalid,
+ format!("decoded flow '{} -> {}' is absent from the lowering CFG", from.id, to.id),
+ ));
+ }
+ }
+ Ok(())
+}
+
+fn validate_machine_terminators(record: &VerifiedLoweringRecord, elf: &ParsedElf) -> Result<(), CheckerError> {
+ let instructions = elf.instructions.iter().map(|instruction| (instruction.address, instruction.word)).collect::>();
+ for block in &record.blocks {
+ let address = block.range.end.checked_sub(4).ok_or_else(|| {
+ CheckerError::new(
+ CheckerRejectionCode::V2414ControlFlowInvalid,
+ format!("block '{}' is too short for a terminator", block.id),
+ )
+ })?;
+ let word = instructions.get(&address).copied().ok_or_else(|| {
+ CheckerError::new(
+ CheckerRejectionCode::V2414ControlFlowInvalid,
+ format!("block '{}' end does not address a decoded instruction", block.id),
+ )
+ })?;
+ let opcode = word & 0x7f;
+ let rd = (word >> 7) & 0x1f;
+ let valid = match block.terminator {
+ MachineTerminator::Return => word == 0x0000_8067,
+ MachineTerminator::Jump => opcode == 0x6f && rd == 0,
+ MachineTerminator::ConditionalBranch => opcode == 0x63 || (opcode == 0x6f && rd == 0),
+ MachineTerminator::Fallthrough => word != 0x0000_8067 && !matches!(opcode, 0x63 | 0x6f),
+ };
+ if !valid {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2414ControlFlowInvalid,
+ format!("decoded final instruction of block '{}' disagrees with its terminator", block.id),
+ ));
+ }
+ }
+ Ok(())
+}
+
+fn validate_stack_discipline(record: &VerifiedLoweringRecord, elf: &ParsedElf) -> Result<(), CheckerError> {
+ let blocks = record.blocks.iter().map(|block| (block.id.as_str(), block)).collect::>();
+ let mut outgoing = BTreeMap::<&str, Vec<&LoweringEdge>>::new();
+ for edge in &record.edges {
+ outgoing.entry(edge.from.as_str()).or_default().push(edge);
+ }
+ let mut entry_delta = BTreeMap::<&str, i64>::new();
+ let mut pending = record.entries.iter().map(|entry| (entry.entry_block.as_str(), 0_i64)).collect::>();
+ while let Some((block_id, incoming_delta)) = pending.pop() {
+ if let Some(previous) = entry_delta.insert(block_id, incoming_delta) {
+ if previous != incoming_delta {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2407AbiOrStackInvalid,
+ format!("block '{block_id}' has inconsistent incoming stack-pointer deltas {previous} and {incoming_delta}"),
+ ));
+ }
+ continue;
+ }
+ let block = blocks[block_id];
+ let mut delta = incoming_delta;
+ for adjustment in elf.stack_adjustments.iter().filter(|adjustment| block.range.contains(adjustment.address)) {
+ delta = delta.checked_add(adjustment.delta).ok_or_else(|| {
+ CheckerError::new(
+ CheckerRejectionCode::V2407AbiOrStackInvalid,
+ format!("stack-pointer delta overflows in block '{block_id}'"),
+ )
+ })?;
+ if delta > 0 || delta.unsigned_abs() > u64::from(block.frame_size_bytes) {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2407AbiOrStackInvalid,
+ format!("stack-pointer delta {delta} in block '{block_id}' exceeds declared frame {}", block.frame_size_bytes),
+ ));
+ }
+ }
+ if block.terminator == MachineTerminator::Return && delta != 0 {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2407AbiOrStackInvalid,
+ format!("return block '{block_id}' leaves stack-pointer delta {delta}"),
+ ));
+ }
+ for edge in outgoing.get(block_id).into_iter().flatten() {
+ pending.push((edge.to.as_str(), if edge.kind == EdgeKind::Call { 0 } else { delta }));
+ }
+ }
+ Ok(())
+}
+
+fn validate_syscalls(record: &VerifiedLoweringRecord, elf: &ParsedElf) -> Result<(), CheckerError> {
+ let actual = elf.syscall_addresses.iter().copied().filter(|address| record.text_range.contains(*address)).collect::>();
+ let declared = record.syscall_sites.iter().map(|site| site.address).collect::>();
+ if actual != declared {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2417SyscallContractInvalid,
+ "declared syscall sites do not exactly match decoded ecall instructions",
+ ));
+ }
+ let blocks = record.blocks.iter().map(|block| (block.id.as_str(), block)).collect::>();
+ for site in &record.syscall_sites {
+ if site.contract.is_empty()
+ || site.source_domain.is_empty()
+ || site.index_domain.is_empty()
+ || site.buffer_limit_bytes == 0
+ || !site.return_code_checked
+ || blocks.get(site.block_id.as_str()).is_none_or(|block| !block.range.contains(site.address))
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2417SyscallContractInvalid,
+ format!("syscall site at {:#x} has an invalid bounded contract", site.address),
+ ));
+ }
+ }
+ Ok(())
+}
+
+fn validate_source_map(
+ source_map: &SourceArtifactMap,
+ record: &VerifiedLoweringRecord,
+ artifact: &[u8],
+ elf: &ParsedElf,
+) -> Result<(), CheckerError> {
+ if source_map.schema != SOURCE_MAP_SCHEMA
+ || source_map.version != SOURCE_MAP_VERSION
+ || source_map.module != record.module
+ || source_map.text_range != record.text_range
+ || source_map.coverage_claim.source_semantic_equivalence
+ || !source_map.coverage_claim.mapped_instruction_ranges_only
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2416SourceMapInvalid,
+ "source map schema, identity, or bounded claim is invalid",
+ ));
+ }
+ let blocks = record.blocks.iter().map(|block| (block.id.as_str(), block)).collect::>();
+ let entries = record.entries.iter().map(|entry| entry.id.as_str()).collect::>();
+ let mut previous_end = None;
+ let mut mapped_ranges = Vec::new();
+ for interval in &source_map.intervals {
+ if !safe_source_path(&interval.source_path)
+ || interval.source_start > interval.source_end
+ || interval.machine_range.is_empty()
+ || interval.machine_range.start % 4 != 0
+ || interval.machine_range.end % 4 != 0
+ || previous_end.is_some_and(|end| interval.machine_range.start < end)
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2416SourceMapInvalid,
+ format!("source-map interval for block '{}' overlaps, escapes, or is malformed", interval.block_id),
+ ));
+ }
+ let Some(block) = blocks.get(interval.block_id.as_str()) else {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2416SourceMapInvalid,
+ format!("source-map interval references missing block '{}'", interval.block_id),
+ ));
+ };
+ if interval.entry_id != block.owner_entry
+ || !entries.contains(interval.entry_id.as_str())
+ || !block.range.contains_range(interval.machine_range)
+ || interval.lowering_block_id != block.lowering_block_id
+ || interval.proof_ids.iter().any(|proof| !block.proof_ids.contains(proof))
+ {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2416SourceMapInvalid,
+ format!("source-map interval for '{}' disagrees with its lowering block", interval.block_id),
+ ));
+ }
+ elf.bytes_for_range(artifact, interval.machine_range).map_err(map_elf_error)?;
+ previous_end = Some(interval.machine_range.end);
+ mapped_ranges.push(interval.machine_range);
+ }
+ if source_map.coverage_claim.complete_text_coverage {
+ let mut expected = record.text_range.start;
+ for range in mapped_ranges {
+ if range.start != expected {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2416SourceMapInvalid,
+ "source map claims complete text coverage but contains a gap",
+ ));
+ }
+ expected = range.end;
+ }
+ if expected != record.text_range.end {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2416SourceMapInvalid,
+ "source map claims complete text coverage but does not reach text end",
+ ));
+ }
+ }
+ Ok(())
+}
+
+fn safe_source_path(path: &str) -> bool {
+ if path == "" {
+ return true;
+ }
+ if path.is_empty() || path.starts_with('/') || path.starts_with('\\') || path.contains('\\') {
+ return false;
+ }
+ if path.len() >= 2 && path.as_bytes()[1] == b':' {
+ return false;
+ }
+ path.split('/').all(|component| !matches!(component, "" | "." | ".."))
+}
+
+fn ensure_canonical(label: &str, input: &[u8], value: &T) -> Result<(), CheckerError> {
+ let canonical = canonical_bytes(value)?;
+ if canonical != input {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2402NonCanonicalJson,
+ format!("{label} is not byte-for-byte canonical JSON"),
+ ));
+ }
+ Ok(())
+}
+
+fn ensure_byte_budget(label: &str, actual: usize, limit: u64) -> Result<(), CheckerError> {
+ if actual as u64 > limit {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2400BudgetExceeded,
+ format!("{label} bytes {actual} exceed budget {limit}"),
+ ));
+ }
+ Ok(())
+}
+
+fn ensure_count(label: &str, actual: usize, limit: u32) -> Result<(), CheckerError> {
+ if actual as u64 > u64::from(limit) {
+ return Err(CheckerError::new(
+ CheckerRejectionCode::V2400BudgetExceeded,
+ format!("{label} count {actual} exceeds budget {limit}"),
+ ));
+ }
+ Ok(())
+}
+
+fn ensure_sorted_unique<'a, T, F>(values: &'a [T], key: F, label: &str) -> Result<(), CheckerError>
+where
+ F: Fn(&'a T) -> &'a str,
+{
+ if values.windows(2).all(|pair| key(&pair[0]) < key(&pair[1])) {
+ Ok(())
+ } else {
+ Err(CheckerError::new(
+ CheckerRejectionCode::V2404CanonicalOrder,
+ format!("{label} identifiers are not strictly sorted and unique"),
+ ))
+ }
+}
+
+fn strictly_sorted(values: &[T]) -> bool {
+ values.windows(2).all(|pair| pair[0] < pair[1])
+}
+
+fn valid_alignment(value: u32) -> bool {
+ value.is_power_of_two() && value <= 16
+}
+
+fn artifact_declared_too_large(actual: u64, limit: u64) -> bool {
+ actual > limit
+}
+
+fn json_string<'a>(root: &'a Value, path: &[&str]) -> Option<&'a str> {
+ path.iter().try_fold(root, |value, key| value.get(*key)).and_then(Value::as_str)
+}
+
+fn json_u64(root: &Value, path: &[&str]) -> Option {
+ path.iter().try_fold(root, |value, key| value.get(*key)).and_then(Value::as_u64)
+}
+
+pub fn domain_hash_bytes(domain: &str, bytes: &[u8]) -> String {
+ let mut material = Vec::with_capacity(domain.len() + 1 + bytes.len());
+ material.extend_from_slice(domain.as_bytes());
+ material.push(0);
+ material.extend_from_slice(bytes);
+ hex_encode(&ckb_blake2b256(&material))
+}
+
+fn map_elf_error(error: ElfParseError) -> CheckerError {
+ let code = match error.kind {
+ ElfErrorKind::BudgetExceeded => CheckerRejectionCode::V2400BudgetExceeded,
+ ElfErrorKind::InvalidSection | ElfErrorKind::ProhibitedLinkState | ElfErrorKind::MissingText => {
+ CheckerRejectionCode::V2412ElfSectionInvalid
+ }
+ ElfErrorKind::InvalidInstruction => CheckerRejectionCode::V2413InstructionInvalid,
+ ElfErrorKind::InvalidBranchTarget => CheckerRejectionCode::V2414ControlFlowInvalid,
+ _ => CheckerRejectionCode::V2411ElfFormatInvalid,
+ };
+ CheckerError::new(code, error.message)
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn canonical_parser_rejects_whitespace_and_unknown_fields() {
+ let budgets = CheckerBudgets::default();
+ let unknown = br#"{"schema":"cellscript-source-artifact-map-v1","version":1,"module":"m","artifact_hash":"h","lowering_record_hash":"r","source_set_hash":"s","text_range":{"start":1,"end":2},"intervals":[],"coverage_claim":{"mapped_instruction_ranges_only":true,"complete_text_coverage":false,"source_semantic_equivalence":false},"unknown":true}"#;
+ assert_eq!(parse_source_map(unknown, &budgets).unwrap_err().code, CheckerRejectionCode::V2401MalformedJson);
+
+ let map = SourceArtifactMap {
+ schema: SOURCE_MAP_SCHEMA.to_string(),
+ version: SOURCE_MAP_VERSION,
+ module: "m".to_string(),
+ artifact_hash: "h".to_string(),
+ lowering_record_hash: "r".to_string(),
+ source_set_hash: "s".to_string(),
+ text_range: MachineRange { start: 1, end: 2 },
+ intervals: Vec::new(),
+ coverage_claim: SourceMapCoverageClaim {
+ mapped_instruction_ranges_only: true,
+ complete_text_coverage: false,
+ source_semantic_equivalence: false,
+ },
+ };
+ let mut pretty = serde_json::to_vec_pretty(&map).unwrap();
+ pretty.push(b'\n');
+ assert_eq!(parse_source_map(&pretty, &budgets).unwrap_err().code, CheckerRejectionCode::V2402NonCanonicalJson);
+ }
+
+ #[test]
+ fn checker_error_diagnostics_are_utf8_bounded() {
+ let error = CheckerError::new(CheckerRejectionCode::V2401MalformedJson, "边界".repeat(100)).bounded(10);
+ assert!(error.message.len() <= 10);
+ assert!(std::str::from_utf8(error.message.as_bytes()).is_ok());
+ }
+
+ #[test]
+ fn malformed_corpus_is_bounded_and_never_panics() {
+ let budgets = CheckerBudgets {
+ artifact_bytes: 4_096,
+ record_bytes: 4_096,
+ source_map_bytes: 4_096,
+ diagnostic_bytes: 64,
+ ..CheckerBudgets::default()
+ };
+ let corpus = [
+ Vec::new(),
+ vec![0xff],
+ b"{".to_vec(),
+ vec![b'{'; 4_097],
+ (0..4_096).map(|index| (index % 251) as u8).collect::>(),
+ ];
+ for bytes in corpus {
+ let outcome = std::panic::catch_unwind(|| check_bundle(&bytes, &bytes, &bytes, &bytes, &budgets));
+ let error = outcome.expect("checker must not panic on malformed bounded corpus").unwrap_err();
+ assert!(error.message.len() <= budgets.diagnostic_bytes as usize);
+ }
+ }
+
+ #[test]
+ fn source_paths_are_confined() {
+ assert!(safe_source_path("src/main.cell"));
+ assert!(safe_source_path(""));
+ assert!(!safe_source_path("../main.cell"));
+ assert!(!safe_source_path("/tmp/main.cell"));
+ assert!(!safe_source_path("C:/main.cell"));
+ }
+}
diff --git a/crates/cellscript-artifact-checker/src/elf.rs b/crates/cellscript-artifact-checker/src/elf.rs
new file mode 100644
index 00000000..a169dae1
--- /dev/null
+++ b/crates/cellscript-artifact-checker/src/elf.rs
@@ -0,0 +1,631 @@
+use crate::schema::MachineRange;
+
+const ELF64_HEADER_SIZE: usize = 64;
+const ELF64_PROGRAM_HEADER_SIZE: usize = 56;
+const ELF64_SECTION_HEADER_SIZE: usize = 64;
+const EM_RISCV: u16 = 243;
+const ET_EXEC: u16 = 2;
+const PT_LOAD: u32 = 1;
+const PF_X: u32 = 1;
+const PF_R: u32 = 4;
+const SHF_ALLOC: u64 = 0x2;
+const SHF_EXECINSTR: u64 = 0x4;
+const SHT_PROGBITS: u32 = 1;
+const SHT_STRTAB: u32 = 3;
+const SHT_RELA: u32 = 4;
+const SHT_DYNAMIC: u32 = 6;
+const SHT_REL: u32 = 9;
+const SHT_DYNSYM: u32 = 11;
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub enum ElfErrorKind {
+ Truncated,
+ InvalidHeader,
+ UnsupportedClass,
+ UnsupportedEndian,
+ UnsupportedType,
+ UnsupportedMachine,
+ InvalidTable,
+ InvalidSection,
+ ProhibitedLinkState,
+ MissingText,
+ InvalidInstruction,
+ InvalidBranchTarget,
+ BudgetExceeded,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct ElfParseError {
+ pub kind: ElfErrorKind,
+ pub message: String,
+}
+
+impl ElfParseError {
+ fn new(kind: ElfErrorKind, message: impl Into) -> Self {
+ Self { kind, message: message.into() }
+ }
+}
+
+impl std::fmt::Display for ElfParseError {
+ fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ formatter.write_str(&self.message)
+ }
+}
+
+impl std::error::Error for ElfParseError {}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct ElfSection {
+ pub name: String,
+ pub section_type: u32,
+ pub flags: u64,
+ pub address: u64,
+ pub offset: u64,
+ pub size: u64,
+}
+
+impl ElfSection {
+ pub fn range(&self) -> MachineRange {
+ MachineRange { start: self.address, end: self.address.saturating_add(self.size) }
+ }
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub struct ElfSegment {
+ pub flags: u32,
+ pub offset: u64,
+ pub virtual_address: u64,
+ pub file_size: u64,
+ pub memory_size: u64,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub struct DecodedControlFlow {
+ pub address: u64,
+ pub target: u64,
+ pub kind: DecodedControlFlowKind,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub struct DecodedInstruction {
+ pub address: u64,
+ pub word: u32,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub struct StackAdjustment {
+ pub address: u64,
+ pub delta: i64,
+}
+
+struct DecodedText {
+ instructions: Vec,
+ stack_adjustments: Vec,
+ syscall_addresses: Vec,
+ control_flow: Vec,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub enum DecodedControlFlowKind {
+ ConditionalBranch,
+ DirectJump,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct ParsedElf {
+ pub entry: u64,
+ pub sections: Vec,
+ pub segments: Vec,
+ pub text: ElfSection,
+ pub rodata: ElfSection,
+ pub instruction_count: u64,
+ pub instructions: Vec,
+ pub stack_adjustments: Vec,
+ pub syscall_addresses: Vec,
+ pub control_flow: Vec,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct ElfSummary {
+ pub class: String,
+ pub endian: String,
+ pub machine: String,
+ pub entry: u64,
+ pub text_range: MachineRange,
+ pub text_size_bytes: u64,
+ pub rodata_range: MachineRange,
+ pub rodata_size_bytes: u64,
+ pub instruction_count: u64,
+ pub syscall_count: usize,
+ pub section_count: usize,
+ pub load_segment_count: usize,
+}
+
+impl ParsedElf {
+ pub fn summary(&self) -> ElfSummary {
+ ElfSummary {
+ class: "ELF64".to_string(),
+ endian: "little".to_string(),
+ machine: "RISC-V".to_string(),
+ entry: self.entry,
+ text_range: self.text.range(),
+ text_size_bytes: self.text.size,
+ rodata_range: self.rodata.range(),
+ rodata_size_bytes: self.rodata.size,
+ instruction_count: self.instruction_count,
+ syscall_count: self.syscall_addresses.len(),
+ section_count: self.sections.len(),
+ load_segment_count: self.segments.len(),
+ }
+ }
+
+ pub fn bytes_for_range<'a>(&self, artifact: &'a [u8], range: MachineRange) -> Result<&'a [u8], ElfParseError> {
+ let section = self.sections.iter().find(|section| section.range().contains_range(range)).ok_or_else(|| {
+ ElfParseError::new(
+ ElfErrorKind::InvalidSection,
+ format!("machine range {:#x}..{:#x} is outside all ELF sections", range.start, range.end),
+ )
+ })?;
+ let relative = range
+ .start
+ .checked_sub(section.address)
+ .ok_or_else(|| ElfParseError::new(ElfErrorKind::InvalidSection, "machine range begins before its ELF section"))?;
+ let start = section
+ .offset
+ .checked_add(relative)
+ .and_then(|value| usize::try_from(value).ok())
+ .ok_or_else(|| ElfParseError::new(ElfErrorKind::InvalidSection, "machine range file offset overflows usize"))?;
+ let len = usize::try_from(range.len())
+ .map_err(|_| ElfParseError::new(ElfErrorKind::InvalidSection, "machine range length overflows usize"))?;
+ let end = start
+ .checked_add(len)
+ .ok_or_else(|| ElfParseError::new(ElfErrorKind::InvalidSection, "machine range end overflows usize"))?;
+ artifact.get(start..end).ok_or_else(|| ElfParseError::new(ElfErrorKind::Truncated, "machine range exceeds artifact bytes"))
+ }
+}
+
+pub fn parse_elf(bytes: &[u8], max_instructions: u64) -> Result {
+ if bytes.len() < ELF64_HEADER_SIZE {
+ return Err(ElfParseError::new(ElfErrorKind::Truncated, "ELF header is truncated"));
+ }
+ if bytes.get(0..4) != Some(b"\x7fELF") {
+ return Err(ElfParseError::new(ElfErrorKind::InvalidHeader, "artifact is not ELF"));
+ }
+ if bytes[4] != 2 {
+ return Err(ElfParseError::new(ElfErrorKind::UnsupportedClass, "checker requires ELF64"));
+ }
+ if bytes[5] != 1 {
+ return Err(ElfParseError::new(ElfErrorKind::UnsupportedEndian, "checker requires little-endian ELF"));
+ }
+ if bytes[6] != 1 || bytes[7..16].iter().any(|byte| *byte != 0) || read_u32(bytes, 20)? != 1 || read_u32(bytes, 48)? != 0 {
+ return Err(ElfParseError::new(ElfErrorKind::InvalidHeader, "ELF version is not 1"));
+ }
+ if read_u16(bytes, 16)? != ET_EXEC {
+ return Err(ElfParseError::new(ElfErrorKind::UnsupportedType, "checker requires ET_EXEC"));
+ }
+ if read_u16(bytes, 18)? != EM_RISCV {
+ return Err(ElfParseError::new(ElfErrorKind::UnsupportedMachine, "checker requires EM_RISCV"));
+ }
+ if usize::from(read_u16(bytes, 52)?) != ELF64_HEADER_SIZE {
+ return Err(ElfParseError::new(ElfErrorKind::InvalidHeader, "unexpected ELF64 header size"));
+ }
+
+ let entry = read_u64(bytes, 24)?;
+ let program_offset = read_u64(bytes, 32)?;
+ let section_offset = read_u64(bytes, 40)?;
+ let program_entry_size = usize::from(read_u16(bytes, 54)?);
+ let program_count = usize::from(read_u16(bytes, 56)?);
+ let section_entry_size = usize::from(read_u16(bytes, 58)?);
+ let section_count = usize::from(read_u16(bytes, 60)?);
+ let shstr_index = usize::from(read_u16(bytes, 62)?);
+
+ if program_count == 0 || program_entry_size != ELF64_PROGRAM_HEADER_SIZE {
+ return Err(ElfParseError::new(ElfErrorKind::InvalidTable, "ELF must have standard ELF64 program headers"));
+ }
+ if section_count < 4 || section_entry_size != ELF64_SECTION_HEADER_SIZE || shstr_index >= section_count {
+ return Err(ElfParseError::new(
+ ElfErrorKind::InvalidTable,
+ "ELF must contain null, .text, .rodata, and .shstrtab section headers",
+ ));
+ }
+
+ let program_table = checked_table(bytes, program_offset, program_entry_size, program_count, "program header")?;
+ let mut segments = Vec::new();
+ for header in program_table.chunks_exact(program_entry_size) {
+ if read_u32(header, 0)? != PT_LOAD {
+ return Err(ElfParseError::new(ElfErrorKind::ProhibitedLinkState, "checker permits only PT_LOAD program headers"));
+ }
+ let segment = ElfSegment {
+ flags: read_u32(header, 4)?,
+ offset: read_u64(header, 8)?,
+ virtual_address: read_u64(header, 16)?,
+ file_size: read_u64(header, 32)?,
+ memory_size: read_u64(header, 40)?,
+ };
+ checked_file_range(bytes, segment.offset, segment.file_size, "PT_LOAD")?;
+ if segment.memory_size < segment.file_size {
+ return Err(ElfParseError::new(ElfErrorKind::InvalidTable, "PT_LOAD memory size is smaller than file size"));
+ }
+ if segment.flags != PF_R | PF_X {
+ return Err(ElfParseError::new(
+ ElfErrorKind::ProhibitedLinkState,
+ "CellScript ELF PT_LOAD segments must be read/execute and never writable",
+ ));
+ }
+ segments.push(segment);
+ }
+ if segments.is_empty() || !segments.iter().any(|segment| segment.flags & PF_X != 0 && segment_contains(segment, entry)) {
+ return Err(ElfParseError::new(ElfErrorKind::InvalidTable, "ELF entry is not contained in an executable PT_LOAD segment"));
+ }
+
+ let section_table = checked_table(bytes, section_offset, section_entry_size, section_count, "section header")?;
+ let string_header = section_table
+ .get(shstr_index * section_entry_size..(shstr_index + 1) * section_entry_size)
+ .ok_or_else(|| ElfParseError::new(ElfErrorKind::InvalidTable, "section string table header is missing"))?;
+ if read_u32(string_header, 4)? != SHT_STRTAB || read_u64(string_header, 8)? != 0 || read_u64(string_header, 16)? != 0 {
+ return Err(ElfParseError::new(ElfErrorKind::InvalidSection, "section-name table has an invalid type, flags, or address"));
+ }
+ let string_offset = read_u64(string_header, 24)?;
+ let string_size = read_u64(string_header, 32)?;
+ let strings = checked_file_range(bytes, string_offset, string_size, ".shstrtab")?;
+
+ let mut sections = Vec::with_capacity(section_count.saturating_sub(1));
+ for (index, header) in section_table.chunks_exact(section_entry_size).enumerate() {
+ if index == 0 {
+ if header.iter().any(|byte| *byte != 0) {
+ return Err(ElfParseError::new(ElfErrorKind::InvalidSection, "ELF null section header is not zero"));
+ }
+ continue;
+ }
+ let name_offset = usize::try_from(read_u32(header, 0)?)
+ .map_err(|_| ElfParseError::new(ElfErrorKind::InvalidSection, "section name offset overflows usize"))?;
+ let name = read_c_string(strings, name_offset)?;
+ let section = ElfSection {
+ name,
+ section_type: read_u32(header, 4)?,
+ flags: read_u64(header, 8)?,
+ address: read_u64(header, 16)?,
+ offset: read_u64(header, 24)?,
+ size: read_u64(header, 32)?,
+ };
+ checked_file_range(bytes, section.offset, section.size, §ion.name)?;
+ if matches!(section.section_type, SHT_RELA | SHT_DYNAMIC | SHT_REL | SHT_DYNSYM)
+ || matches!(section.name.as_str(), ".dynamic" | ".dynsym" | ".dynstr" | ".interp" | ".plt" | ".got" | ".got.plt")
+ {
+ return Err(ElfParseError::new(
+ ElfErrorKind::ProhibitedLinkState,
+ format!("prohibited dynamic or relocation section '{}'", section.name),
+ ));
+ }
+ sections.push(section);
+ }
+ sections.sort_by(|a, b| a.name.cmp(&b.name));
+ if sections.windows(2).any(|pair| pair[0].name == pair[1].name) {
+ return Err(ElfParseError::new(ElfErrorKind::InvalidSection, "ELF contains duplicate section names"));
+ }
+ if sections.len() != 3
+ || sections.iter().map(|section| section.name.as_str()).collect::>() != [".rodata", ".shstrtab", ".text"]
+ {
+ return Err(ElfParseError::new(
+ ElfErrorKind::InvalidSection,
+ "checker permits exactly .text, .rodata, and .shstrtab sections",
+ ));
+ }
+
+ let text = sections
+ .iter()
+ .find(|section| section.name == ".text")
+ .cloned()
+ .ok_or_else(|| ElfParseError::new(ElfErrorKind::MissingText, "ELF has no .text section"))?;
+ let rodata = sections
+ .iter()
+ .find(|section| section.name == ".rodata")
+ .cloned()
+ .ok_or_else(|| ElfParseError::new(ElfErrorKind::InvalidSection, "ELF has no .rodata section"))?;
+ if text.section_type != SHT_PROGBITS || text.flags != SHF_ALLOC | SHF_EXECINSTR || text.size == 0 || text.size % 4 != 0 {
+ return Err(ElfParseError::new(ElfErrorKind::InvalidSection, ".text must be non-empty, executable, and four-byte aligned"));
+ }
+ if rodata.section_type != SHT_PROGBITS || rodata.flags != SHF_ALLOC {
+ return Err(ElfParseError::new(ElfErrorKind::InvalidSection, ".rodata must not be executable"));
+ }
+ if !text.range().contains(entry) {
+ return Err(ElfParseError::new(ElfErrorKind::InvalidSection, "ELF entry is outside .text"));
+ }
+ for section in [&text, &rodata] {
+ if !segments.iter().any(|segment| segment_contains_range(segment, section.address, section.size)) {
+ return Err(ElfParseError::new(
+ ElfErrorKind::InvalidSection,
+ format!("ELF section '{}' is outside PT_LOAD mappings", section.name),
+ ));
+ }
+ }
+
+ let instruction_count = text.size / 4;
+ if instruction_count > max_instructions {
+ return Err(ElfParseError::new(
+ ElfErrorKind::BudgetExceeded,
+ format!("ELF instruction count {} exceeds budget {}", instruction_count, max_instructions),
+ ));
+ }
+ let text_bytes = checked_file_range(bytes, text.offset, text.size, ".text")?;
+ let decoded = validate_instructions(text_bytes, text.address, text.range())?;
+
+ Ok(ParsedElf {
+ entry,
+ sections,
+ segments,
+ text,
+ rodata,
+ instruction_count,
+ instructions: decoded.instructions,
+ stack_adjustments: decoded.stack_adjustments,
+ syscall_addresses: decoded.syscall_addresses,
+ control_flow: decoded.control_flow,
+ })
+}
+
+fn validate_instructions(bytes: &[u8], base: u64, text_range: MachineRange) -> Result {
+ let mut instructions = Vec::new();
+ let mut stack_adjustments = Vec::new();
+ let mut syscalls = Vec::new();
+ let mut control_flow = Vec::new();
+ for (index, chunk) in bytes.chunks_exact(4).enumerate() {
+ let word = u32::from_le_bytes([chunk[0], chunk[1], chunk[2], chunk[3]]);
+ let address = base + (index as u64) * 4;
+ let opcode = word & 0x7f;
+ if !instruction_is_allowed(word) {
+ return Err(ElfParseError::new(
+ ElfErrorKind::InvalidInstruction,
+ format!("instruction {:#010x} at {:#x} is outside the CellScript RV64 allowlist", word, address),
+ ));
+ }
+ validate_stack_pointer_write(bytes, index, word, address, &mut stack_adjustments)?;
+ instructions.push(DecodedInstruction { address, word });
+ if word == 0x0000_0073 {
+ syscalls.push(address);
+ }
+ let target = match opcode {
+ 0x63 => Some((branch_target(address, word), DecodedControlFlowKind::ConditionalBranch)),
+ 0x6f => Some((jal_target(address, word), DecodedControlFlowKind::DirectJump)),
+ 0x67 if word != 0x0000_8067 => {
+ Some((decode_call_target(bytes, index, word, address)?, DecodedControlFlowKind::DirectJump))
+ }
+ _ => None,
+ };
+ if let Some((target, kind)) = target {
+ if target % 4 != 0 || !text_range.contains(target) {
+ return Err(ElfParseError::new(
+ ElfErrorKind::InvalidBranchTarget,
+ format!("control-flow target {:#x} from {:#x} is outside aligned .text", target, address),
+ ));
+ }
+ control_flow.push(DecodedControlFlow { address, target, kind });
+ }
+ }
+ Ok(DecodedText { instructions, stack_adjustments, syscall_addresses: syscalls, control_flow })
+}
+
+fn decode_call_target(bytes: &[u8], index: usize, word: u32, address: u64) -> Result {
+ let rd = (word >> 7) & 0x1f;
+ let funct3 = (word >> 12) & 0x7;
+ let rs1 = (word >> 15) & 0x1f;
+ if rd != 1 || rs1 != 1 || funct3 != 0 || index == 0 {
+ return Err(ElfParseError::new(
+ ElfErrorKind::InvalidInstruction,
+ format!("jalr at {address:#x} is neither ret nor a canonical auipc/jalr call"),
+ ));
+ }
+ let previous = instruction_word(bytes, index - 1)?;
+ if previous & 0x7f != 0x17 || (previous >> 7) & 0x1f != 1 {
+ return Err(ElfParseError::new(
+ ElfErrorKind::InvalidInstruction,
+ format!("jalr call at {address:#x} is not immediately preceded by 'auipc ra'"),
+ ));
+ }
+ let high = sign_extend(previous & 0xffff_f000, 32);
+ let low = sign_extend(word >> 20, 12);
+ Ok(add_signed(address - 4, high.saturating_add(low)) & !1)
+}
+
+fn validate_stack_pointer_write(
+ bytes: &[u8],
+ index: usize,
+ word: u32,
+ address: u64,
+ adjustments: &mut Vec,
+) -> Result<(), ElfParseError> {
+ let opcode = word & 0x7f;
+ let rd = (word >> 7) & 0x1f;
+ if rd != 2 || !opcode_writes_rd(opcode) {
+ return Ok(());
+ }
+ let rs1 = (word >> 15) & 0x1f;
+ let funct3 = (word >> 12) & 0x7;
+ if opcode == 0x13 && funct3 == 0 && rs1 == 2 {
+ adjustments.push(StackAdjustment { address, delta: sign_extend(word >> 20, 12) });
+ return Ok(());
+ }
+ let rs2 = (word >> 20) & 0x1f;
+ if opcode == 0x33 && funct3 == 0 && (word >> 25) & 0x7f == 0 && rs1 == 2 {
+ let delta = preceding_lui_addi_constant(bytes, index, rs2).ok_or_else(|| {
+ ElfParseError::new(
+ ElfErrorKind::InvalidInstruction,
+ format!("stack adjustment at {address:#x} does not use an immediately materialised bounded constant"),
+ )
+ })?;
+ adjustments.push(StackAdjustment { address, delta });
+ return Ok(());
+ }
+ Err(ElfParseError::new(
+ ElfErrorKind::InvalidInstruction,
+ format!("instruction at {address:#x} writes sp outside the canonical frame-adjustment forms"),
+ ))
+}
+
+fn preceding_lui_addi_constant(bytes: &[u8], index: usize, register: u32) -> Option {
+ if index < 2 {
+ return None;
+ }
+ let addi = instruction_word(bytes, index - 1).ok()?;
+ let lui = instruction_word(bytes, index - 2).ok()?;
+ if addi & 0x7f != 0x13
+ || (addi >> 12) & 0x7 != 0
+ || (addi >> 7) & 0x1f != register
+ || (addi >> 15) & 0x1f != register
+ || lui & 0x7f != 0x37
+ || (lui >> 7) & 0x1f != register
+ {
+ return None;
+ }
+ Some(sign_extend(lui & 0xffff_f000, 32).saturating_add(sign_extend(addi >> 20, 12)))
+}
+
+fn instruction_word(bytes: &[u8], index: usize) -> Result {
+ let offset =
+ index.checked_mul(4).ok_or_else(|| ElfParseError::new(ElfErrorKind::InvalidInstruction, "instruction offset overflows"))?;
+ read_u32(bytes, offset)
+}
+
+fn opcode_writes_rd(opcode: u32) -> bool {
+ matches!(opcode, 0x03 | 0x13 | 0x17 | 0x1b | 0x33 | 0x37 | 0x3b | 0x67 | 0x6f)
+}
+
+fn instruction_is_allowed(word: u32) -> bool {
+ let opcode = word & 0x7f;
+ let rd = (word >> 7) & 0x1f;
+ let funct3 = (word >> 12) & 0x7;
+ let funct7 = (word >> 25) & 0x7f;
+ let funct6 = (word >> 26) & 0x3f;
+ match opcode {
+ 0x03 => matches!(funct3, 3 | 4),
+ 0x13 => match funct3 {
+ 0 | 4 | 6 | 7 => true,
+ 1 => funct6 == 0,
+ // The emitted `seqz rd, rs` pseudo-instruction is exactly
+ // `sltiu rd, rs, 1`; arbitrary SLTIU immediates are not part of
+ // the current CellScript machine surface.
+ 3 => word >> 20 == 1,
+ 5 => matches!(funct6, 0 | 0x10),
+ _ => false,
+ },
+ 0x17 | 0x37 => true,
+ 0x6f => matches!(rd, 0 | 1),
+ 0x1b => match funct3 {
+ 0 => true,
+ 1 => funct7 == 0,
+ 5 => matches!(funct7, 0 | 0x20),
+ _ => false,
+ },
+ 0x23 => matches!(funct3, 0..=3),
+ 0x33 => match funct7 {
+ 0 | 1 => true,
+ 0x20 => matches!(funct3, 0 | 5),
+ _ => false,
+ },
+ 0x3b => match funct7 {
+ 0 => matches!(funct3, 0 | 1 | 5),
+ 1 => matches!(funct3, 0 | 4 | 5 | 6 | 7),
+ 0x20 => matches!(funct3, 0 | 5),
+ _ => false,
+ },
+ 0x63 => !matches!(funct3, 2 | 3),
+ 0x67 => funct3 == 0,
+ 0x73 => word == 0x0000_0073,
+ _ => false,
+ }
+}
+
+fn branch_target(address: u64, word: u32) -> u64 {
+ let immediate =
+ (((word >> 31) & 0x1) << 12) | (((word >> 7) & 0x1) << 11) | (((word >> 25) & 0x3f) << 5) | (((word >> 8) & 0xf) << 1);
+ add_signed(address, sign_extend(immediate, 13))
+}
+
+fn jal_target(address: u64, word: u32) -> u64 {
+ let immediate =
+ (((word >> 31) & 0x1) << 20) | (((word >> 12) & 0xff) << 12) | (((word >> 20) & 0x1) << 11) | (((word >> 21) & 0x3ff) << 1);
+ add_signed(address, sign_extend(immediate, 21))
+}
+
+fn sign_extend(value: u32, bits: u32) -> i64 {
+ let shift = 64 - bits;
+ ((i64::from(value)) << shift) >> shift
+}
+
+fn add_signed(base: u64, offset: i64) -> u64 {
+ if offset >= 0 {
+ base.saturating_add(offset as u64)
+ } else {
+ base.saturating_sub(offset.unsigned_abs())
+ }
+}
+
+fn segment_contains(segment: &ElfSegment, address: u64) -> bool {
+ segment.virtual_address <= address && address < segment.virtual_address.saturating_add(segment.memory_size)
+}
+
+fn segment_contains_range(segment: &ElfSegment, address: u64, size: u64) -> bool {
+ segment.virtual_address <= address && address.saturating_add(size) <= segment.virtual_address.saturating_add(segment.memory_size)
+}
+
+fn checked_table<'a>(bytes: &'a [u8], offset: u64, entry_size: usize, count: usize, label: &str) -> Result<&'a [u8], ElfParseError> {
+ let size = entry_size
+ .checked_mul(count)
+ .and_then(|size| u64::try_from(size).ok())
+ .ok_or_else(|| ElfParseError::new(ElfErrorKind::InvalidTable, format!("{} table size overflows", label)))?;
+ checked_file_range(bytes, offset, size, label)
+}
+
+fn checked_file_range<'a>(bytes: &'a [u8], offset: u64, size: u64, label: &str) -> Result<&'a [u8], ElfParseError> {
+ let start = usize::try_from(offset)
+ .map_err(|_| ElfParseError::new(ElfErrorKind::InvalidTable, format!("{} offset overflows usize", label)))?;
+ let len = usize::try_from(size)
+ .map_err(|_| ElfParseError::new(ElfErrorKind::InvalidTable, format!("{} size overflows usize", label)))?;
+ let end = start
+ .checked_add(len)
+ .ok_or_else(|| ElfParseError::new(ElfErrorKind::InvalidTable, format!("{} range overflows usize", label)))?;
+ bytes.get(start..end).ok_or_else(|| ElfParseError::new(ElfErrorKind::Truncated, format!("{} exceeds artifact bytes", label)))
+}
+
+fn read_c_string(bytes: &[u8], offset: usize) -> Result {
+ let rest = bytes
+ .get(offset..)
+ .ok_or_else(|| ElfParseError::new(ElfErrorKind::InvalidSection, "section name offset exceeds .shstrtab"))?;
+ let end = rest
+ .iter()
+ .position(|byte| *byte == 0)
+ .ok_or_else(|| ElfParseError::new(ElfErrorKind::InvalidSection, "section name is not NUL terminated"))?;
+ let value = std::str::from_utf8(&rest[..end])
+ .map_err(|_| ElfParseError::new(ElfErrorKind::InvalidSection, "section name is not UTF-8"))?;
+ Ok(value.to_string())
+}
+
+fn read_u16(bytes: &[u8], offset: usize) -> Result {
+ let slice =
+ bytes.get(offset..offset + 2).ok_or_else(|| ElfParseError::new(ElfErrorKind::Truncated, "ELF u16 field is truncated"))?;
+ Ok(u16::from_le_bytes([slice[0], slice[1]]))
+}
+
+fn read_u32(bytes: &[u8], offset: usize) -> Result {
+ let slice =
+ bytes.get(offset..offset + 4).ok_or_else(|| ElfParseError::new(ElfErrorKind::Truncated, "ELF u32 field is truncated"))?;
+ Ok(u32::from_le_bytes([slice[0], slice[1], slice[2], slice[3]]))
+}
+
+fn read_u64(bytes: &[u8], offset: usize) -> Result {
+ let slice =
+ bytes.get(offset..offset + 8).ok_or_else(|| ElfParseError::new(ElfErrorKind::Truncated, "ELF u64 field is truncated"))?;
+ Ok(u64::from_le_bytes([slice[0], slice[1], slice[2], slice[3], slice[4], slice[5], slice[6], slice[7]]))
+}
+
+#[cfg(test)]
+mod tests {
+ use super::instruction_is_allowed;
+
+ #[test]
+ fn allowlist_accepts_only_the_emitted_sltiu_seqz_form() {
+ assert!(instruction_is_allowed(0x0015_3e13));
+ assert!(!instruction_is_allowed(0x0025_3e13));
+ }
+}
diff --git a/crates/cellscript-artifact-checker/src/lib.rs b/crates/cellscript-artifact-checker/src/lib.rs
new file mode 100644
index 00000000..c457fbe4
--- /dev/null
+++ b/crates/cellscript-artifact-checker/src/lib.rs
@@ -0,0 +1,29 @@
+mod checker;
+mod elf;
+mod schema;
+
+pub use checker::{
+ canonical_bytes, canonical_hash, check_bundle, check_bundle_values, domain_hash_bytes, parse_lowering_record, parse_source_map,
+ CheckerError, CheckerRejectionCode, CheckerReport, EvidenceState,
+};
+pub use elf::{parse_elf, ElfSummary, ParsedElf};
+pub use schema::*;
+
+pub const CKB_HASH_PERSONALIZATION: &[u8; 16] = b"ckb-default-hash";
+
+pub fn ckb_blake2b256(data: &[u8]) -> [u8; 32] {
+ let digest = blake2b_simd::Params::new().hash_length(32).personal(CKB_HASH_PERSONALIZATION).hash(data);
+ let mut output = [0u8; 32];
+ output.copy_from_slice(digest.as_bytes());
+ output
+}
+
+pub fn hex_encode(bytes: &[u8]) -> String {
+ const HEX: &[u8; 16] = b"0123456789abcdef";
+ let mut output = String::with_capacity(bytes.len() * 2);
+ for byte in bytes {
+ output.push(HEX[(byte >> 4) as usize] as char);
+ output.push(HEX[(byte & 0x0f) as usize] as char);
+ }
+ output
+}
diff --git a/crates/cellscript-artifact-checker/src/main.rs b/crates/cellscript-artifact-checker/src/main.rs
new file mode 100644
index 00000000..c0c44127
--- /dev/null
+++ b/crates/cellscript-artifact-checker/src/main.rs
@@ -0,0 +1,63 @@
+use cellscript_artifact_checker::{check_bundle, CheckerBudgets};
+use clap::Parser;
+use std::path::PathBuf;
+
+#[derive(Debug, Parser)]
+#[command(name = "cellscript-artifact-checker")]
+#[command(about = "Bounded independent CellScript lowering-record and CKB ELF checker")]
+struct Args {
+ #[arg(long)]
+ artifact: PathBuf,
+ #[arg(long)]
+ metadata: PathBuf,
+ #[arg(long = "lowering-record")]
+ lowering_record: PathBuf,
+ #[arg(long = "source-map")]
+ source_map: PathBuf,
+ #[arg(long)]
+ policy: Option,
+}
+
+fn main() {
+ let args = Args::parse();
+ match run(args) {
+ Ok(report) => match serde_json::to_string(&report) {
+ Ok(json) => println!("{json}"),
+ Err(error) => {
+ eprintln!("V2401: failed to serialize checker report: {error}");
+ std::process::exit(2);
+ }
+ },
+ Err(error) => {
+ let json = serde_json::to_string(&error)
+ .unwrap_or_else(|_| format!(r#"{{"code":"{}","message":"checker rejection"}}"#, error.code.as_str()));
+ eprintln!("{json}");
+ std::process::exit(1);
+ }
+ }
+}
+
+fn run(args: Args) -> Result {
+ let budgets = match args.policy {
+ Some(path) => {
+ let bytes = std::fs::read(&path).map_err(|error| io_error("checker policy", &path, error))?;
+ serde_json::from_slice::(&bytes).map_err(|error| cellscript_artifact_checker::CheckerError {
+ code: cellscript_artifact_checker::CheckerRejectionCode::V2401MalformedJson,
+ message: format!("failed to parse checker policy '{}': {error}", path.display()),
+ })?
+ }
+ None => CheckerBudgets::default(),
+ };
+ let artifact = std::fs::read(&args.artifact).map_err(|error| io_error("artifact", &args.artifact, error))?;
+ let metadata = std::fs::read(&args.metadata).map_err(|error| io_error("metadata", &args.metadata, error))?;
+ let record = std::fs::read(&args.lowering_record).map_err(|error| io_error("lowering record", &args.lowering_record, error))?;
+ let source_map = std::fs::read(&args.source_map).map_err(|error| io_error("source map", &args.source_map, error))?;
+ check_bundle(&artifact, &metadata, &record, &source_map, &budgets)
+}
+
+fn io_error(label: &str, path: &std::path::Path, error: std::io::Error) -> cellscript_artifact_checker::CheckerError {
+ cellscript_artifact_checker::CheckerError {
+ code: cellscript_artifact_checker::CheckerRejectionCode::V2401MalformedJson,
+ message: format!("failed to read {label} '{}': {error}", path.display()),
+ }
+}
diff --git a/crates/cellscript-artifact-checker/src/schema.rs b/crates/cellscript-artifact-checker/src/schema.rs
new file mode 100644
index 00000000..befd06ee
--- /dev/null
+++ b/crates/cellscript-artifact-checker/src/schema.rs
@@ -0,0 +1,422 @@
+use serde::{Deserialize, Serialize};
+
+pub const LOWERING_RECORD_SCHEMA: &str = "cellscript-verified-lowering-record-v1";
+pub const SOURCE_MAP_SCHEMA: &str = "cellscript-source-artifact-map-v1";
+pub const CHECKER_POLICY_SCHEMA: &str = "cellscript-artifact-checker-policy-v1";
+pub const CHECKER_REPORT_SCHEMA: &str = "cellscript-artifact-checker-report-v1";
+pub const LOWERING_RECORD_VERSION: u32 = 1;
+pub const SOURCE_MAP_VERSION: u32 = 1;
+pub const CHECKER_VERSION: &str = env!("CARGO_PKG_VERSION");
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct CompatibilityProfileIdentity {
+ pub schema: String,
+ pub id: String,
+ pub edition: String,
+ pub source_semantics: String,
+ pub target_profile: String,
+ pub primitive_assurance: String,
+ pub metadata_schema_version: u32,
+ pub source_metadata_schema_version: u32,
+ pub artifact_metadata_schema_version: u32,
+ pub constraints_metadata_schema_version: u32,
+ pub entry_witness_payload_abi: String,
+ pub entry_witness_placement_abi: String,
+ pub entry_witness_placement_field: String,
+ pub entry_witness_placement_source: String,
+ pub raw_entry_witness_payload_compatible: bool,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct VerifiedLoweringRecord {
+ pub schema: String,
+ pub version: u32,
+ pub compiler_version: String,
+ pub module: String,
+ pub edition: String,
+ pub target_profile: String,
+ pub compatibility_profile: CompatibilityProfileIdentity,
+ pub compatibility_profile_hash: String,
+ pub source_set_hash: String,
+ pub source_content_hash: String,
+ pub artifact_format: String,
+ pub artifact_hash: String,
+ pub artifact_size_bytes: u64,
+ pub text_range: MachineRange,
+ pub entries: Vec,
+ pub blocks: Vec,
+ pub edges: Vec,
+ pub proof_records: Vec,
+ pub syscall_sites: Vec,
+ pub runtime_error_exits: Vec,
+ pub limits: DeclaredLimits,
+ pub claim: VerificationClaim,
+}
+
+impl VerifiedLoweringRecord {
+ pub fn canonicalize(&mut self) {
+ self.entries.sort_by(|a, b| a.id.cmp(&b.id));
+ for entry in &mut self.entries {
+ entry.params.sort_by_key(|param| param.index);
+ entry.proof_ids.sort();
+ entry.proof_ids.dedup();
+ entry.capabilities.sort();
+ entry.capabilities.dedup();
+ }
+ self.blocks.sort_by(|a, b| a.id.cmp(&b.id));
+ for block in &mut self.blocks {
+ block.stack_slots.sort_by(|a, b| a.offset.cmp(&b.offset).then(a.name.cmp(&b.name)));
+ block.scratch_register_avoid.sort();
+ block.scratch_register_avoid.dedup();
+ block.proof_ids.sort();
+ block.proof_ids.dedup();
+ block.capabilities.sort();
+ block.capabilities.dedup();
+ }
+ self.edges.sort_by(|a, b| (&a.from, &a.kind, &a.to).cmp(&(&b.from, &b.kind, &b.to)));
+ self.edges.dedup_by(|a, b| a.from == b.from && a.kind == b.kind && a.to == b.to);
+ self.proof_records.sort_by(|a, b| a.id.cmp(&b.id));
+ self.syscall_sites.sort_by(|a, b| (a.address, &a.block_id).cmp(&(b.address, &b.block_id)));
+ self.runtime_error_exits.sort_by(|a, b| (&a.block_id, a.code, a.address).cmp(&(&b.block_id, b.code, b.address)));
+ }
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct LoweringEntry {
+ pub id: String,
+ pub kind: EntryKind,
+ pub name: String,
+ pub entry_block: String,
+ pub params: Vec,
+ pub return_type: String,
+ pub effect: String,
+ pub capabilities: Vec,
+ pub proof_ids: Vec,
+ pub frame_size_bytes: u32,
+ pub outgoing_argument_bytes: u32,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
+#[serde(rename_all = "kebab-case")]
+pub enum EntryKind {
+ Action,
+ Lock,
+ Helper,
+ Runtime,
+ Wrapper,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct TypedParameter {
+ pub index: u32,
+ pub name: String,
+ pub ty: String,
+ pub storage: StorageClass,
+ pub width_bytes: u32,
+ pub alignment_bytes: u32,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "kebab-case")]
+pub enum StorageClass {
+ Scalar,
+ FixedBytes,
+ SchemaPointer,
+ Reference,
+ Aggregate,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct LoweringBlock {
+ pub id: String,
+ pub owner_entry: String,
+ pub reachable: bool,
+ pub lowering_block_id: Option,
+ pub machine_label: Option,
+ pub terminator: MachineTerminator,
+ pub range: MachineRange,
+ pub byte_digest: String,
+ pub frame_size_bytes: u32,
+ pub outgoing_argument_bytes: u32,
+ pub stack_slots: Vec,
+ pub scratch_register_avoid: Vec,
+ pub effect: String,
+ pub capabilities: Vec,
+ pub proof_ids: Vec,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "kebab-case")]
+pub enum MachineTerminator {
+ Fallthrough,
+ Jump,
+ ConditionalBranch,
+ Return,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct MachineRange {
+ pub start: u64,
+ pub end: u64,
+}
+
+impl MachineRange {
+ pub fn len(self) -> u64 {
+ self.end.saturating_sub(self.start)
+ }
+
+ pub fn is_empty(self) -> bool {
+ self.start == self.end
+ }
+
+ pub fn contains(self, address: u64) -> bool {
+ self.start <= address && address < self.end
+ }
+
+ pub fn contains_range(self, other: Self) -> bool {
+ self.start <= other.start && other.end <= self.end
+ }
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct StackSlot {
+ pub name: String,
+ pub offset: u32,
+ pub width_bytes: u32,
+ pub alignment_bytes: u32,
+ pub kind: StorageClass,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct LoweringEdge {
+ pub from: String,
+ pub to: String,
+ pub kind: EdgeKind,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
+#[serde(rename_all = "kebab-case")]
+pub enum EdgeKind {
+ Fallthrough,
+ Jump,
+ ConditionalTaken,
+ ConditionalFallthrough,
+ Call,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct ProofRecord {
+ pub id: String,
+ pub entry_id: String,
+ pub obligation: String,
+ pub evidence_tier: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct SyscallSite {
+ pub block_id: String,
+ pub address: u64,
+ pub syscall_number: Option,
+ pub contract: String,
+ pub source_domain: String,
+ pub index_domain: String,
+ pub return_code_checked: bool,
+ pub buffer_limit_bytes: u32,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct RuntimeErrorExit {
+ pub block_id: String,
+ pub address: u64,
+ pub code: i32,
+ pub name: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct DeclaredLimits {
+ pub artifact_bytes: u64,
+ pub record_bytes: u64,
+ pub source_map_bytes: u64,
+ pub entries: u32,
+ pub blocks: u32,
+ pub edges: u32,
+ pub instructions: u64,
+ pub call_depth: u32,
+ pub stack_frame_bytes: u32,
+ pub proof_records: u32,
+ pub source_map_intervals: u32,
+ pub diagnostic_bytes: u32,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct VerificationClaim {
+ pub lowering_record: String,
+ pub machine_code: String,
+ pub semantic_equivalence: bool,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct SourceArtifactMap {
+ pub schema: String,
+ pub version: u32,
+ pub module: String,
+ pub artifact_hash: String,
+ pub lowering_record_hash: String,
+ pub source_set_hash: String,
+ pub text_range: MachineRange,
+ pub intervals: Vec,
+ pub coverage_claim: SourceMapCoverageClaim,
+}
+
+impl SourceArtifactMap {
+ pub fn canonicalize(&mut self) {
+ self.intervals.sort_by(|a, b| {
+ (a.machine_range.start, a.machine_range.end, &a.block_id, &a.source_path, a.source_start, a.source_end).cmp(&(
+ b.machine_range.start,
+ b.machine_range.end,
+ &b.block_id,
+ &b.source_path,
+ b.source_start,
+ b.source_end,
+ ))
+ });
+ for interval in &mut self.intervals {
+ interval.proof_ids.sort();
+ interval.proof_ids.dedup();
+ interval.runtime_error_codes.sort();
+ interval.runtime_error_codes.dedup();
+ }
+ }
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct SourceMapInterval {
+ pub source_path: String,
+ pub source_start: u32,
+ pub source_end: u32,
+ pub entry_id: String,
+ pub block_id: String,
+ pub lowering_block_id: Option,
+ pub machine_range: MachineRange,
+ pub proof_ids: Vec,
+ pub runtime_error_codes: Vec,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct SourceMapCoverageClaim {
+ pub mapped_instruction_ranges_only: bool,
+ pub complete_text_coverage: bool,
+ pub source_semantic_equivalence: bool,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct CheckerBudgets {
+ pub schema: String,
+ pub artifact_bytes: u64,
+ pub record_bytes: u64,
+ pub source_map_bytes: u64,
+ pub entries: u32,
+ pub blocks: u32,
+ pub edges: u32,
+ pub instructions: u64,
+ pub call_depth: u32,
+ pub stack_frame_bytes: u32,
+ pub proof_records: u32,
+ pub source_map_intervals: u32,
+ pub diagnostic_bytes: u32,
+}
+
+impl Default for CheckerBudgets {
+ fn default() -> Self {
+ Self {
+ schema: CHECKER_POLICY_SCHEMA.to_string(),
+ artifact_bytes: 4 * 1024 * 1024,
+ record_bytes: 4 * 1024 * 1024,
+ source_map_bytes: 4 * 1024 * 1024,
+ entries: 2_048,
+ blocks: 65_536,
+ edges: 262_144,
+ instructions: 1_048_576,
+ call_depth: 256,
+ stack_frame_bytes: 1024 * 1024,
+ proof_records: 65_536,
+ source_map_intervals: 65_536,
+ diagnostic_bytes: 16 * 1024,
+ }
+ }
+}
+
+impl CheckerBudgets {
+ pub fn as_declared_limits(&self) -> DeclaredLimits {
+ DeclaredLimits {
+ artifact_bytes: self.artifact_bytes,
+ record_bytes: self.record_bytes,
+ source_map_bytes: self.source_map_bytes,
+ entries: self.entries,
+ blocks: self.blocks,
+ edges: self.edges,
+ instructions: self.instructions,
+ call_depth: self.call_depth,
+ stack_frame_bytes: self.stack_frame_bytes,
+ proof_records: self.proof_records,
+ source_map_intervals: self.source_map_intervals,
+ diagnostic_bytes: self.diagnostic_bytes,
+ }
+ }
+}
+
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct VerifiedArtifactMetadata {
+ pub boundary_schema: String,
+ pub state: VerifiedArtifactState,
+ pub checker_name: String,
+ pub checker_version: String,
+ pub checker_policy_schema: String,
+ pub lowering_record_schema: String,
+ pub lowering_record_hash: Option,
+ pub source_map_schema: String,
+ pub source_map_hash: Option,
+ pub claim: String,
+}
+
+impl Default for VerifiedArtifactMetadata {
+ fn default() -> Self {
+ Self {
+ boundary_schema: "cellscript-verified-artifact-boundary-v1".to_string(),
+ state: VerifiedArtifactState::NotEmittedNonElf,
+ checker_name: "cellscript-artifact-checker".to_string(),
+ checker_version: CHECKER_VERSION.to_string(),
+ checker_policy_schema: CHECKER_POLICY_SCHEMA.to_string(),
+ lowering_record_schema: LOWERING_RECORD_SCHEMA.to_string(),
+ lowering_record_hash: None,
+ source_map_schema: SOURCE_MAP_SCHEMA.to_string(),
+ source_map_hash: None,
+ claim: "unverified".to_string(),
+ }
+ }
+}
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(rename_all = "kebab-case")]
+pub enum VerifiedArtifactState {
+ Emitted,
+ NotEmittedNonElf,
+}
diff --git a/crates/cellscript-ckb-adapter/Cargo.toml b/crates/cellscript-ckb-adapter/Cargo.toml
index 97f72ab1..5af32a89 100644
--- a/crates/cellscript-ckb-adapter/Cargo.toml
+++ b/crates/cellscript-ckb-adapter/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "cellscript-ckb-adapter"
-version = "0.22.0"
+version = "0.24.0"
edition = "2024"
rust-version = "1.97.1"
publish = false
diff --git a/crates/cellscript-ckb-adapter/src/bin/cellscript-deploy.rs b/crates/cellscript-ckb-adapter/src/bin/cellscript-deploy.rs
index 9f5ec483..6e023ebf 100644
--- a/crates/cellscript-ckb-adapter/src/bin/cellscript-deploy.rs
+++ b/crates/cellscript-ckb-adapter/src/bin/cellscript-deploy.rs
@@ -5,17 +5,17 @@ use cellscript_ckb_adapter::{
};
use ckb_types::{
bytes::Bytes,
- core::ScriptHashType,
- packed::{CellInput, OutPoint},
+ core::{DepType, ScriptHashType},
+ packed::{CellDep, CellInput, OutPoint},
prelude::*,
H160,
};
-use clap::{Parser, Subcommand};
+use clap::{Parser, Subcommand, ValueEnum};
use std::path::PathBuf;
#[derive(Parser, Debug)]
#[command(name = "cellscript-deploy")]
-#[command(about = "CellScript CKB adapter CLI — deploy, act, and query on-chain state")]
+#[command(about = "CellScript CKB adapter CLI — build mainnet deployment transactions, act, and query on-chain state")]
#[command(version = env!("CARGO_PKG_VERSION"))]
struct Cli {
/// CKB node RPC URL
@@ -32,10 +32,11 @@ struct Cli {
#[derive(Subcommand, Debug)]
enum Commands {
- /// Deploy a compiled artifact as an on-chain code cell with TYPE_ID
+ /// Refuse unsigned submission and direct callers to the external-signing flow
+ #[command(hide = true)]
Deploy(DeployArgs),
- /// Build a headless deploy transaction without submitting
+ /// Build a mainnet unsigned deploy transaction for external signing
BuildDeploy(BuildDeployArgs),
/// Build a transaction from an action plan
@@ -49,8 +50,8 @@ enum Commands {
}
#[derive(clap::Args, Debug)]
-struct DeployArgs {
- /// Artifact binary file path (.s or .cell)
+struct DeploySpecArgs {
+ /// Compiled RISC-V ELF artifact path
#[arg(long)]
artifact: PathBuf,
@@ -63,16 +64,30 @@ struct DeployArgs {
name: String,
/// Fee in shannons
- #[arg(long, default_value_t = 1_000)]
+ #[arg(long, default_value_t = 10_000)]
fee: u64,
/// Capacity input out_point (format: 0x:)
#[arg(long)]
capacity_out_point: String,
- /// Capacity input shannons
- #[arg(long, default_value_t = 200_000_000_000)]
- capacity_shannons: u64,
+ /// Code reference hash type: type creates a TYPE_ID cell; data variants create an immutable data cell
+ #[arg(long, value_enum, default_value_t = DeploymentHashType::Type)]
+ hash_type: DeploymentHashType,
+
+ /// CellDep out_point for the input lock script (format: 0x:)
+ #[arg(long, default_value = "0x71a7ba8fc96349fea0ed3a5c47992e3b4084b031a42264a018e0072e8172e46c:0")]
+ lock_cell_dep_out_point: String,
+
+ /// CellDep kind for the input lock script
+ #[arg(long, value_enum, default_value_t = CliDepType::DepGroup)]
+ lock_cell_dep_type: CliDepType,
+}
+
+#[derive(clap::Args, Debug)]
+struct DeployArgs {
+ #[command(flatten)]
+ spec: DeploySpecArgs,
/// Max attempts to wait for commitment
#[arg(long, default_value_t = 30)]
@@ -89,29 +104,42 @@ struct DeployArgs {
#[derive(clap::Args, Debug)]
struct BuildDeployArgs {
- /// Artifact binary file path
- #[arg(long)]
- artifact: PathBuf,
-
- /// Deployer lock script args (hex, 20 bytes for secp256k1-sighash)
- #[arg(long)]
- lock_arg: String,
+ #[command(flatten)]
+ spec: DeploySpecArgs,
+}
- /// Name for the deployment
- #[arg(long, default_value = "cellscript-contract")]
- name: String,
+#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)]
+enum DeploymentHashType {
+ Type,
+ Data,
+ Data1,
+ Data2,
+}
- /// Fee in shannons
- #[arg(long, default_value_t = 1_000)]
- fee: u64,
+impl From for ScriptHashType {
+ fn from(value: DeploymentHashType) -> Self {
+ match value {
+ DeploymentHashType::Type => Self::Type,
+ DeploymentHashType::Data => Self::Data,
+ DeploymentHashType::Data1 => Self::Data1,
+ DeploymentHashType::Data2 => Self::Data2,
+ }
+ }
+}
- /// Capacity input out_point (format: 0x:)
- #[arg(long)]
- capacity_out_point: String,
+#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)]
+enum CliDepType {
+ Code,
+ DepGroup,
+}
- /// Capacity input shannons
- #[arg(long, default_value_t = 200_000_000_000)]
- capacity_shannons: u64,
+impl From for DepType {
+ fn from(value: CliDepType) -> Self {
+ match value {
+ CliDepType::Code => Self::Code,
+ CliDepType::DepGroup => Self::DepGroup,
+ }
+ }
}
#[derive(clap::Args, Debug)]
@@ -173,20 +201,13 @@ fn parse_lock_arg(s: &str) -> Result {
}
/// Shared spec builder for deploy and build-deploy.
-fn build_deploy_spec(
- artifact: PathBuf,
- lock_arg: String,
- name: String,
- fee: u64,
- capacity_out_point: String,
- capacity_shannons: u64,
-) -> Result {
- let artifact_binary = std::fs::read(&artifact)?;
+fn build_deploy_spec(adapter: &CellScriptAdapter, args: DeploySpecArgs) -> Result {
+ let artifact_binary = std::fs::read(&args.artifact)?;
let artifact_binary = Bytes::from(artifact_binary);
let artifact_hash = ckb_hash::blake2b_256(&artifact_binary).iter().map(|b| format!("{:02x}", b)).collect::();
- let lock_arg = parse_lock_arg(&lock_arg)?;
- // Construct secp256k1-sighash lock script (code_hash for mainnet/devnet).
+ let lock_arg = parse_lock_arg(&args.lock_arg)?;
+ // Construct the mainnet secp256k1-sighash lock script.
let lock_script = cellscript_ckb_adapter::construct_script(&cellscript_ckb_adapter::ScriptSpec::new(
[
0x9b, 0x81, 0x97, 0x34, 0x7e, 0x6e, 0x47, 0x1d, 0x7e, 0xa2, 0x8b, 0x52, 0x0c, 0x45, 0x3e, 0x18, 0x54, 0xf0, 0x96, 0x2e,
@@ -196,97 +217,65 @@ fn build_deploy_spec(
lock_arg.as_bytes().to_vec(),
));
- let capacity_out_point = parse_out_point(&capacity_out_point)?;
+ let capacity_out_point = parse_out_point(&args.capacity_out_point)?;
+ let (capacity_input_shannons, capacity_input_data) = adapter.resolve_pure_capacity_input(&capacity_out_point, &lock_script)?;
let capacity_input = CellInput::new_builder().previous_output(capacity_out_point).build();
+ let lock_cell_dep = CellDep::new_builder()
+ .out_point(parse_out_point(&args.lock_cell_dep_out_point)?)
+ .dep_type(DepType::from(args.lock_cell_dep_type))
+ .build();
Ok(DeployArtifactSpec {
- name,
+ name: args.name,
artifact_binary,
artifact_hash,
deployer_lock: lock_script,
capacity_input,
- capacity_input_shannons: capacity_shannons,
- capacity_input_data: Bytes::new(),
- type_id_hash_type: ScriptHashType::Type,
+ capacity_input_shannons,
+ capacity_input_data,
+ type_id_hash_type: args.hash_type.into(),
type_script: None,
- cell_deps: Vec::new(),
+ cell_deps: vec![lock_cell_dep],
header_deps: Vec::new(),
- fee_shannons: fee,
+ fee_shannons: args.fee,
})
}
-fn cmd_deploy(rpc: &str, json: bool, args: DeployArgs) -> Result<()> {
- let spec = build_deploy_spec(args.artifact, args.lock_arg, args.name, args.fee, args.capacity_out_point, args.capacity_shannons)?;
- let name = spec.name.clone();
-
- let (tx, deploy_evidence) = build_deploy_transaction(&spec)?;
-
- // Connect and submit.
- let adapter = CellScriptAdapter::connect(rpc)?;
-
- // Estimate cycles.
- let estimate_cycles = adapter.estimate_cycles(&tx).ok().map(|e| e.cycles.value());
-
- // Test tx-pool acceptance.
- let tx_pool_accepted = adapter.test_tx_pool_accept(&tx).is_ok();
-
- // Submit.
- let tx_hash = adapter.submit_transaction(&tx)?;
- eprintln!("submitted tx: 0x{}", hex::encode(tx_hash.as_bytes()));
-
- // Wait for commitment.
- let committed = adapter.wait_for_commitment(&tx_hash, args.wait_attempts, args.wait_delay_ms)?;
-
- // Build manifest.
- let mut hash_bytes = [0u8; 32];
- hash_bytes.copy_from_slice(tx_hash.as_bytes());
- let manifest = cellscript_ckb_adapter::build_deployment_manifest_from_evidence(&deploy_evidence, &hash_bytes, 0);
-
- // Write manifest if requested.
- if let Some(ref path) = args.manifest_out {
- let manifest_json = serde_json::to_string_pretty(&manifest)?;
- std::fs::write(path, &manifest_json)?;
- eprintln!("manifest written to {}", path.display());
- }
-
- if json {
- let output = serde_json::json!({
- "tx_hash": format!("0x{}", hex::encode(tx_hash.as_bytes())),
- "committed": true,
- "block_hash": format!("0x{}", hex::encode(committed.block_hash.as_bytes())),
- "estimate_cycles": estimate_cycles,
- "tx_pool_accepted": tx_pool_accepted,
- "manifest": manifest,
- });
- println!("{}", serde_json::to_string_pretty(&output)?);
- } else {
- println!("deployed {} at tx 0x{}", name, hex::encode(tx_hash.as_bytes()));
- println!(" committed in block 0x{}", hex::encode(committed.block_hash.as_bytes()));
- if let Some(cycles) = estimate_cycles {
- println!(" estimate_cycles: {cycles}");
- }
- }
-
- Ok(())
+fn cmd_deploy(_rpc: &str, _json: bool, args: DeployArgs) -> Result<()> {
+ let _ = (args.spec, args.wait_attempts, args.wait_delay_ms, args.manifest_out);
+ bail!(
+ "direct deploy is disabled because this CLI does not hold or invoke a signer; use build-deploy, sign the returned transaction with a CKB wallet, then broadcast it"
+ )
}
fn cmd_build_deploy(rpc: &str, json: bool, args: BuildDeployArgs) -> Result<()> {
- let spec = build_deploy_spec(args.artifact, args.lock_arg, args.name, args.fee, args.capacity_out_point, args.capacity_shannons)?;
+ let adapter = CellScriptAdapter::connect(rpc)?;
+ adapter.require_mainnet()?;
+ let spec = build_deploy_spec(&adapter, args.spec)?;
- let (tx, _evidence) = build_deploy_transaction(&spec)?;
+ let (tx, evidence) = build_deploy_transaction(&spec)?;
- // Try to estimate cycles if node is available.
- let estimate = CellScriptAdapter::connect(rpc).ok().and_then(|a| a.estimate_cycles(&tx).ok()).map(|e| e.cycles.value());
+ // An unsigned secp transaction is expected to fail script verification, so
+ // cycle estimation remains informational until the external signer fills it.
+ let estimate = adapter.estimate_cycles(&tx).ok().map(|e| e.cycles.value());
if json {
let tx_json = serde_json::to_value(cellscript_ckb_adapter::to_rpc_transaction(&tx))?;
let output = serde_json::json!({
+ "can_submit": false,
+ "signing_required": true,
"transaction": tx_json,
"estimate_cycles": estimate,
+ "evidence": evidence,
});
println!("{}", serde_json::to_string_pretty(&output)?);
} else {
- println!("built deploy transaction ({} bytes)", tx.data().serialized_size_in_block());
+ println!("built unsigned deploy transaction ({} bytes)", tx.data().serialized_size_in_block());
+ println!(" can_submit: false");
+ println!(" signing_required: true");
+ println!(" hash_type: {}", evidence.hash_type);
+ println!(" code_hash: 0x{}", hex::encode(&evidence.code_hash));
+ println!(" cell_deps: {}", evidence.cell_deps);
if let Some(cycles) = estimate {
println!(" estimate_cycles: {cycles}");
}
@@ -407,3 +396,64 @@ fn cmd_info(rpc: &str, json: bool) -> Result<()> {
Ok(())
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ const INPUT: &str = "0x1111111111111111111111111111111111111111111111111111111111111111:0";
+
+ fn parse_build_deploy(extra: &[&str]) -> Cli {
+ let mut args = vec![
+ "cellscript-deploy",
+ "build-deploy",
+ "--artifact",
+ "registry-type-script",
+ "--lock-arg",
+ "0x2222222222222222222222222222222222222222",
+ "--capacity-out-point",
+ INPUT,
+ ];
+ args.extend_from_slice(extra);
+ Cli::try_parse_from(args).unwrap()
+ }
+
+ #[test]
+ fn build_deploy_accepts_immutable_data1() {
+ let cli = parse_build_deploy(&["--hash-type", "data1"]);
+ let Commands::BuildDeploy(args) = cli.command else {
+ panic!("expected build-deploy command");
+ };
+ assert_eq!(args.spec.hash_type, DeploymentHashType::Data1);
+ assert_eq!(args.spec.fee, 10_000);
+ assert_eq!(args.spec.lock_cell_dep_type, CliDepType::DepGroup);
+ assert_eq!(args.spec.lock_cell_dep_out_point, "0x71a7ba8fc96349fea0ed3a5c47992e3b4084b031a42264a018e0072e8172e46c:0");
+ }
+
+ #[test]
+ fn build_deploy_defaults_to_type_id() {
+ let cli = parse_build_deploy(&[]);
+ let Commands::BuildDeploy(args) = cli.command else {
+ panic!("expected build-deploy command");
+ };
+ assert_eq!(args.spec.hash_type, DeploymentHashType::Type);
+ }
+
+ #[test]
+ fn build_deploy_rejects_unknown_hash_type() {
+ let error = Cli::try_parse_from([
+ "cellscript-deploy",
+ "build-deploy",
+ "--artifact",
+ "registry-type-script",
+ "--lock-arg",
+ "0x2222222222222222222222222222222222222222",
+ "--capacity-out-point",
+ INPUT,
+ "--hash-type",
+ "data3",
+ ])
+ .unwrap_err();
+ assert!(error.to_string().contains("invalid value 'data3'"));
+ }
+}
diff --git a/crates/cellscript-ckb-adapter/src/lib.rs b/crates/cellscript-ckb-adapter/src/lib.rs
index 869b5c49..de44d390 100644
--- a/crates/cellscript-ckb-adapter/src/lib.rs
+++ b/crates/cellscript-ckb-adapter/src/lib.rs
@@ -343,11 +343,20 @@ pub struct ScriptCodeDepEvidence {
pub dep_type: String,
}
+pub const ENTRY_WITNESS_PLACEMENT_ABI: &str = "cellscript-witnessargs-input-type-v2";
+pub const ENTRY_WITNESS_PAYLOAD_MAGIC: &[u8; 8] = b"CSARGv1\0";
+
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
-pub enum WitnessPlacement {
- Lock,
- InputType,
- OutputType,
+pub enum EntryWitnessPlacementAbi {
+ WitnessArgsInputTypeV2,
+}
+
+impl EntryWitnessPlacementAbi {
+ pub const fn name(self) -> &'static str {
+ match self {
+ Self::WitnessArgsInputTypeV2 => ENTRY_WITNESS_PLACEMENT_ABI,
+ }
+ }
}
#[derive(Debug, Clone, Serialize)]
@@ -520,8 +529,9 @@ pub fn deployment_evidence(manifest: &DeploymentManifest) -> DeploymentEvidence
/// Specification for deploying a compiled CellScript artifact as an on-chain code cell.
///
/// The caller provides the artifact binary, the deployer lock script, and the
-/// capacity input cell. The adapter computes TYPE_ID args, constructs the code
-/// output, validates occupied capacity, and builds a headless CKB transaction.
+/// capacity input cell. The adapter constructs either a TYPE_ID-backed code Cell
+/// or an immutable data Cell, validates occupied capacity, and builds an unsigned
+/// CKB transaction.
#[derive(Debug, Clone)]
pub struct DeployArtifactSpec {
/// Name for the deployment (used in manifest and evidence).
@@ -592,27 +602,30 @@ pub struct ResolvedDeployEvidence {
pub tx_pool_acceptance: bool,
}
-/// Build a headless CKB transaction that deploys a CellScript artifact as an
-/// on-chain code cell with TYPE_ID.
+/// Build an unsigned CKB transaction that deploys a CellScript artifact as an
+/// on-chain code Cell.
///
/// The function:
-/// 1. Computes TYPE_ID args from the first input tx_hash + output index 0.
-/// 2. Constructs the type script (TYPE_ID) and lock script for the code cell.
+/// 1. Computes TYPE_ID args when `type_id_hash_type` is `Type`.
+/// 2. Constructs the optional Type Script and lock script for the code Cell.
/// 3. Calculates occupied capacity for the code cell from artifact size.
/// 4. Constructs a change output with remaining capacity minus fee.
/// 5. Validates that both outputs meet occupied-capacity floors.
/// 6. Assembles the transaction and returns evidence.
///
/// This is headless: no RPC, no live-cell selection, no signing. The caller
-/// provides a pre-resolved capacity input. Use `CkbSdkAcceptance` for node
-/// interaction after building.
+/// provides a pre-resolved capacity input and every required CellDep. The first
+/// witness contains the standard 65-byte zeroed secp-sighash placeholder; an
+/// external signer must replace it before submission.
pub fn build_deploy_transaction(spec: &DeployArtifactSpec) -> Result<(TransactionView, ResolvedDeployEvidence)> {
// Validate artifact is non-empty.
if spec.artifact_binary.is_empty() {
bail!("artifact binary must be non-empty");
}
- if spec.artifact_hash.is_empty() {
- bail!("artifact hash must be provided");
+ let calculated_artifact_hash = hex::encode(blake2b_256(&spec.artifact_binary));
+ let supplied_artifact_hash = spec.artifact_hash.strip_prefix("0x").unwrap_or(&spec.artifact_hash);
+ if !supplied_artifact_hash.eq_ignore_ascii_case(&calculated_artifact_hash) {
+ bail!("artifact hash mismatch: supplied {}, calculated {}", spec.artifact_hash, calculated_artifact_hash);
}
if spec.capacity_input_shannons == 0 {
bail!("capacity input must have non-zero capacity");
@@ -631,7 +644,7 @@ pub fn build_deploy_transaction(spec: &DeployArtifactSpec) -> Result<(Transactio
};
let type_id_args = type_script.as_ref().map(|script| script.args().raw_data().to_vec()).unwrap_or_default();
- // Step 3: Build code cell output with TYPE_ID type script.
+ // Step 3: Build the code Cell output with the optional Type Script.
let code_data_capacity = Capacity::bytes(spec.artifact_binary.len())?;
// We need to compute the actual code_hash which is blake2b of the artifact.
let data_hash = blake2b_256(&spec.artifact_binary);
@@ -685,12 +698,24 @@ pub fn build_deploy_transaction(spec: &DeployArtifactSpec) -> Result<(Transactio
for dep in &spec.header_deps {
builder.dedup_header_dep(dep.clone());
}
- // Placeholder witness for the first input (required by CKB protocol).
- let placeholder_witness = WitnessArgs::new_builder().build();
+ // Standard secp256k1-sighash-all signing placeholder. External wallets sign
+ // against this shape and replace the zero bytes with a recoverable signature.
+ let placeholder_witness = WitnessArgs::new_builder().lock(Some(Bytes::from(vec![0u8; 65])).pack()).build();
builder.witness(placeholder_witness.as_bytes().pack());
let tx = builder.build();
- let serialized_tx_size_bytes = tx.data().as_slice().len();
+ let serialized_tx_size_bytes = tx.data().serialized_size_in_block();
+ // CKB's default relay policy is 1,000 shannons per 1,000 bytes, so the
+ // numeric minimum at that rate equals the serialized byte count.
+ let minimum_fee_shannons = u64::try_from(serialized_tx_size_bytes)?;
+ if spec.fee_shannons < minimum_fee_shannons {
+ bail!(
+ "fee {} shannons is below the 1,000 shannons/KB policy floor of {} shannons for a {}-byte transaction",
+ spec.fee_shannons,
+ minimum_fee_shannons,
+ serialized_tx_size_bytes
+ );
+ }
// Verify outputs/outputs_data pairing.
assert_eq!(tx.outputs().len(), 2, "deploy tx must have 2 outputs");
@@ -710,7 +735,7 @@ pub fn build_deploy_transaction(spec: &DeployArtifactSpec) -> Result<(Transactio
schema: DEPLOY_EVIDENCE_SCHEMA,
state: "ResolvedDeployTx",
name: spec.name.clone(),
- artifact_hash: spec.artifact_hash.clone(),
+ artifact_hash: calculated_artifact_hash,
code_output_index: 0,
change_output_index: 1,
type_id_args,
@@ -1421,30 +1446,28 @@ pub fn require_script_code_dep(script: &Script, deps: &[ScriptCodeDep]) -> Resul
Ok(dep.to_cell_dep())
}
-pub fn place_entry_witness_payload(base: &WitnessArgs, placement: WitnessPlacement, payload: Bytes) -> Result {
- if payload.is_empty() {
- bail!("CellScript entry witness payload must be non-empty");
+/// Places a CellScript entry payload before any lock-script signing occurs.
+///
+/// `base.lock` may contain an SDK placeholder, but it must not contain live
+/// signatures. CKB lock signers commit to the complete serialized
+/// `WitnessArgs`, including `input_type`; mutating this field after signing
+/// invalidates the signatures.
+pub fn place_entry_witness_payload_before_signing(
+ base: &WitnessArgs,
+ placement: EntryWitnessPlacementAbi,
+ payload: Bytes,
+) -> Result {
+ if !payload.starts_with(ENTRY_WITNESS_PAYLOAD_MAGIC) {
+ bail!("CellScript entry witness payload must start with CSARGv1\\0");
}
match placement {
- WitnessPlacement::Lock => {
- if base.lock().to_opt().is_some() {
- bail!("refusing to overwrite WitnessArgs.lock; lock signatures must stay explicit");
- }
- Ok(base.clone().as_builder().lock(Some(payload).pack()).build())
- }
- WitnessPlacement::InputType => {
+ EntryWitnessPlacementAbi::WitnessArgsInputTypeV2 => {
if base.input_type().to_opt().is_some() {
bail!("refusing to overwrite WitnessArgs.input_type");
}
Ok(base.clone().as_builder().input_type(Some(payload).pack()).build())
}
- WitnessPlacement::OutputType => {
- if base.output_type().to_opt().is_some() {
- bail!("refusing to overwrite WitnessArgs.output_type");
- }
- Ok(base.clone().as_builder().output_type(Some(payload).pack()).build())
- }
}
}
@@ -1751,24 +1774,12 @@ pub fn signing_boundary_type() -> &'static str {
///
/// ```no_run
/// # fn main() -> anyhow::Result<()> {
-/// use ckb_types::packed::Script;
/// use cellscript_ckb_adapter::CellScriptAdapter;
///
/// // Connect to a CKB node
/// let adapter = CellScriptAdapter::connect("http://127.0.0.1:8114")?;
-///
-/// // Deploy an artifact
-/// let deployer_lock_script = Script::default();
-/// let (manifest, evidence) = adapter.deploy_artifact(
-/// "my-token",
-/// std::fs::read("artifact.bin")?.into(),
-/// deployer_lock_script,
-/// 1_000, // fee in shannons
-/// )?;
-///
-/// // Load an action plan and build a transaction
-/// let plan = adapter.load_action_plan("action.json")?;
-/// let resolved = adapter.resolve_action(&plan)?;
+/// let tip = adapter.get_tip_block_number()?;
+/// println!("CKB tip: {tip}");
/// # Ok(())
/// # }
/// ```
@@ -1791,124 +1802,6 @@ impl CellScriptAdapter {
Ok(Self { client })
}
- // ---- Deploy workflow ----
-
- /// Deploy a CellScript artifact as an on-chain code cell with TYPE_ID.
- ///
- /// This is the one-call deploy workflow that combines:
- /// 1. Finding a spendable capacity cell from the node
- /// 2. Building the deploy transaction (headless)
- /// 3. Estimating cycles and testing tx-pool acceptance
- /// 4. Submitting the transaction
- /// 5. Waiting for commitment
- /// 6. Building the deployment manifest
- ///
- /// Returns the `DeploymentManifest` and full `TransactionLifecycleEvidence`.
- pub fn deploy_artifact(
- &self,
- name: &str,
- artifact_binary: Bytes,
- deployer_lock: Script,
- fee_shannons: u64,
- ) -> Result<(DeploymentManifest, TransactionLifecycleEvidence)> {
- let artifact_hash = blake2b_256(&artifact_binary).iter().map(|b| format!("{:02x}", b)).collect::();
-
- // Find a spendable capacity cell.
- let capacity_input = self.find_capacity_for_deploy(&deployer_lock, &artifact_binary, fee_shannons)?;
-
- let spec = DeployArtifactSpec {
- name: name.to_string(),
- artifact_binary,
- artifact_hash,
- deployer_lock: deployer_lock.clone(),
- capacity_input: capacity_input.input,
- capacity_input_shannons: capacity_input.capacity_shannons,
- capacity_input_data: capacity_input.data,
- type_id_hash_type: ScriptHashType::Type,
- type_script: None,
- cell_deps: Vec::new(),
- header_deps: Vec::new(),
- fee_shannons,
- };
-
- let (tx, deploy_evidence) = build_deploy_transaction(&spec)?;
-
- // Estimate cycles.
- let estimate = self.client.estimate_cycles(to_rpc_transaction(&tx)).ok();
- let estimate_cycles = estimate.as_ref().map(|e| e.cycles.value());
-
- // Test tx-pool acceptance.
- let tx_pool_accepted = self.client.test_tx_pool_accept(to_rpc_transaction(&tx), Some(OutputsValidator::Passthrough)).is_ok();
-
- // Submit.
- let submitted = self.client.send_transaction(to_rpc_transaction(&tx), Some(OutputsValidator::Passthrough)).is_ok();
- let tx_hash = self.client.send_transaction(to_rpc_transaction(&tx), Some(OutputsValidator::Passthrough)).ok();
-
- // Wait for commitment.
- let committed = if let Some(ref hash) = tx_hash { self.wait_for_commitment(hash, 30, 500).ok() } else { None };
-
- // Build manifest from committed evidence.
- let manifest = if let Some(ref hash) = tx_hash {
- let mut hash_bytes = [0u8; 32];
- hash_bytes.copy_from_slice(hash.as_bytes());
- build_deployment_manifest_from_evidence(&deploy_evidence, &hash_bytes, 0)
- } else {
- build_deployment_manifest_from_evidence(&deploy_evidence, &[0u8; 32], 0)
- };
-
- let mut signing = SigningAdapter::new(vec!["deployer".to_string()]);
- if submitted {
- signing.mark_signed();
- }
-
- let lifecycle = TransactionLifecycleEvidence {
- schema: "cellscript-ckb-tx-lifecycle-v0.19",
- deploy_evidence: Some(deploy_evidence),
- action_evidence: None,
- signing: signing.evidence(),
- capacity: Some(CapacityBridge::new(deployer_lock, 1000).evidence()),
- estimate_cycles,
- tx_pool_accepted,
- submitted,
- committed,
- };
-
- Ok((manifest, lifecycle))
- }
-
- /// Build a headless deploy transaction without submitting it.
- ///
- /// Use this when you want to inspect the transaction before submitting,
- /// or when you need to add signing externally.
- pub fn build_deploy(
- &self,
- name: &str,
- artifact_binary: Bytes,
- deployer_lock: Script,
- fee_shannons: u64,
- ) -> Result<(TransactionView, ResolvedDeployEvidence)> {
- let artifact_hash = blake2b_256(&artifact_binary).iter().map(|b| format!("{:02x}", b)).collect::();
-
- let capacity_input = self.find_capacity_for_deploy(&deployer_lock, &artifact_binary, fee_shannons)?;
-
- let spec = DeployArtifactSpec {
- name: name.to_string(),
- artifact_binary,
- artifact_hash,
- deployer_lock,
- capacity_input: capacity_input.input,
- capacity_input_shannons: capacity_input.capacity_shannons,
- capacity_input_data: capacity_input.data,
- type_id_hash_type: ScriptHashType::Type,
- type_script: None,
- cell_deps: Vec::new(),
- header_deps: Vec::new(),
- fee_shannons,
- };
-
- build_deploy_transaction(&spec)
- }
-
// ---- Action workflow ----
/// Load an action plan from a file path.
@@ -1968,22 +1861,45 @@ impl CellScriptAdapter {
self.client.get_transaction(tx_hash.clone())
}
- // ---- Internal helpers ----
+ /// Fail closed unless the connected node is CKB mainnet.
+ pub fn require_mainnet(&self) -> Result<()> {
+ let consensus = self.client.get_consensus()?;
+ if consensus.genesis_hash != ckb_sdk::constants::GENESIS_BLOCK_HASH_MAINNET {
+ bail!(
+ "mainnet required: connected chain {} has genesis {}, expected {}",
+ consensus.id,
+ consensus.genesis_hash,
+ ckb_sdk::constants::GENESIS_BLOCK_HASH_MAINNET
+ );
+ }
+ Ok(())
+ }
- fn find_capacity_for_deploy(&self, _lock: &Script, artifact: &[u8], fee: u64) -> Result {
- // TODO: use CellCollector to find a real spendable cell.
- // For now, requires the caller to provide capacity input manually
- // via the lower-level `build_deploy_transaction` API.
- let _ = (_lock, artifact, fee);
- bail!("automatic live-cell collection is not yet implemented; use build_deploy_transaction() with a manually provided DeployArtifactSpec")
+ /// Resolve and validate a live, pure-capacity input owned by `expected_lock`.
+ ///
+ /// State-bearing Cells are rejected: the deployment flow must not silently
+ /// discard a Type Script or transform non-empty input data into untyped data.
+ pub fn resolve_pure_capacity_input(&self, out_point: &OutPoint, expected_lock: &Script) -> Result<(u64, Bytes)> {
+ let response = self.client.get_live_cell(out_point.clone().into(), true)?;
+ if response.status != "live" {
+ bail!("capacity input is not live (status: {})", response.status);
+ }
+ let cell = response.cell.ok_or_else(|| anyhow::anyhow!("live capacity input response is missing cell data"))?;
+ let output: CellOutput = cell.output.into();
+ if output.lock() != *expected_lock {
+ bail!("capacity input lock does not match the requested deployer lock");
+ }
+ if output.type_().to_opt().is_some() {
+ bail!("capacity input must not have a Type Script");
+ }
+ let data = cell.data.ok_or_else(|| anyhow::anyhow!("capacity input RPC response omitted cell data"))?.content.into_bytes();
+ if !data.is_empty() {
+ bail!("capacity input must have empty data");
+ }
+ Ok((output.capacity().unpack(), data))
}
-}
-/// A found capacity input cell for deployment.
-struct CapacityInput {
- input: CellInput,
- capacity_shannons: u64,
- data: Bytes,
+ // ---- Internal helpers ----
}
pub fn sample_resolved_action_tx() -> ResolvedActionTx {
@@ -2352,16 +2268,24 @@ mod tests {
}
#[test]
- fn places_cellscript_entry_payload_without_hiding_lock_signatures() {
- let base = WitnessArgs::new_builder().lock(Some(Bytes::from(vec![0x77u8; 65])).pack()).build();
+ fn places_cellscript_entry_payload_before_signing() {
+ let base = WitnessArgs::new_builder().lock(Some(Bytes::from(vec![0u8; 65])).pack()).build();
let payload = Bytes::from(b"CSARGv1\0\x4d\0\0\0\0\0\0\0".to_vec());
- let witness = place_entry_witness_payload(&base, WitnessPlacement::InputType, payload.clone()).unwrap();
+ let placement = EntryWitnessPlacementAbi::WitnessArgsInputTypeV2;
+ assert_eq!(placement.name(), "cellscript-witnessargs-input-type-v2");
+ let witness = place_entry_witness_payload_before_signing(&base, placement, payload.clone()).unwrap();
assert_eq!(witness.lock().to_opt().expect("lock preserved").raw_data().len(), 65);
assert_eq!(witness.input_type().to_opt().expect("entry payload").raw_data(), payload);
assert!(witness.output_type().to_opt().is_none());
- let error = place_entry_witness_payload(&base, WitnessPlacement::Lock, Bytes::from(vec![1u8])).unwrap_err().to_string();
- assert!(error.contains("lock signatures must stay explicit"), "{error}");
+ let occupied = witness;
+ let error = place_entry_witness_payload_before_signing(&occupied, placement, payload.clone()).unwrap_err().to_string();
+ assert!(error.contains("refusing to overwrite WitnessArgs.input_type"), "{error}");
+
+ let error = place_entry_witness_payload_before_signing(&base, placement, Bytes::from_static(b"not-cellscript"))
+ .unwrap_err()
+ .to_string();
+ assert!(error.contains("must start with CSARGv1"), "{error}");
}
#[test]
@@ -2545,15 +2469,48 @@ mod tests {
#[test]
fn deploy_data_hash_type_uses_artifact_hash_and_no_type_script() {
let mut spec = sample_deploy_spec();
- spec.type_id_hash_type = ScriptHashType::Data2;
+ spec.type_id_hash_type = ScriptHashType::Data1;
let (tx, evidence) = build_deploy_transaction(&spec).unwrap();
assert!(tx.outputs().get(0).unwrap().type_().to_opt().is_none());
assert_eq!(evidence.code_hash, blake2b_256(&spec.artifact_binary).to_vec());
- assert_eq!(evidence.hash_type, "data2");
+ assert_eq!(evidence.hash_type, "data1");
assert!(evidence.type_id_args.is_empty());
}
+ #[test]
+ fn deploy_rejects_artifact_hash_mismatch() {
+ let mut spec = sample_deploy_spec();
+ spec.artifact_hash = "00".repeat(32);
+ let error = build_deploy_transaction(&spec).unwrap_err().to_string();
+ assert!(error.contains("artifact hash mismatch"), "{error}");
+ }
+
+ #[test]
+ fn deploy_canonicalizes_equivalent_artifact_hash_text() {
+ let mut spec = sample_deploy_spec();
+ spec.artifact_hash = format!("0x{}", spec.artifact_hash.to_ascii_uppercase());
+ let (_, evidence) = build_deploy_transaction(&spec).unwrap();
+ assert_eq!(evidence.artifact_hash, hex::encode(blake2b_256(&spec.artifact_binary)));
+ }
+
+ #[test]
+ fn deploy_uses_standard_secp_signing_placeholder() {
+ let spec = sample_deploy_spec();
+ let (tx, _) = build_deploy_transaction(&spec).unwrap();
+ let witness = WitnessArgs::from_slice(tx.witnesses().get(0).unwrap().raw_data().as_ref()).unwrap();
+ let lock = witness.lock().to_opt().expect("secp placeholder lock").raw_data();
+ assert_eq!(lock.as_ref(), &[0u8; 65]);
+ }
+
+ #[test]
+ fn deploy_rejects_fee_below_default_relay_floor() {
+ let mut spec = sample_deploy_spec();
+ spec.fee_shannons = 1;
+ let error = build_deploy_transaction(&spec).unwrap_err().to_string();
+ assert!(error.contains("policy floor"), "{error}");
+ }
+
#[test]
fn deploy_rejects_empty_artifact() {
let mut spec = sample_deploy_spec();
diff --git a/crates/cellscript-fiber-adapter/Cargo.toml b/crates/cellscript-fiber-adapter/Cargo.toml
index 41133ea6..0ec961fb 100644
--- a/crates/cellscript-fiber-adapter/Cargo.toml
+++ b/crates/cellscript-fiber-adapter/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "cellscript-fiber-adapter"
-version = "0.22.0"
+version = "0.24.0"
edition = "2024"
rust-version = "1.97.1"
publish = false
@@ -23,7 +23,7 @@ regex = "1"
reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
-serde_yaml = "0.9"
+serde_yaml_ng = "0.10"
thiserror = "1.0"
[dev-dependencies]
diff --git a/crates/cellscript-fiber-adapter/src/deployment.rs b/crates/cellscript-fiber-adapter/src/deployment.rs
index 0efcff1f..484f56de 100644
--- a/crates/cellscript-fiber-adapter/src/deployment.rs
+++ b/crates/cellscript-fiber-adapter/src/deployment.rs
@@ -491,7 +491,7 @@ mod tests {
selected_type: "Asset".to_string(),
selected_invariant: "supply".to_string(),
selected_field: "quantity".to_string(),
- compiler_version: "0.22.0".to_string(),
+ compiler_version: cellscript::VERSION.to_string(),
metadata_schema_version: cellscript::METADATA_SCHEMA_VERSION,
source_hash: format!("0x{}", "01".repeat(32)),
artifact_hash: format!("0x{}", hex::encode(cellscript::ckb_blake2b256(data))),
diff --git a/crates/cellscript-fiber-adapter/src/fiber_config.rs b/crates/cellscript-fiber-adapter/src/fiber_config.rs
index 8734c29e..9fb23445 100644
--- a/crates/cellscript-fiber-adapter/src/fiber_config.rs
+++ b/crates/cellscript-fiber-adapter/src/fiber_config.rs
@@ -207,14 +207,14 @@ pub fn materialize_fiber_config(base_yaml: &str, configs: &[FiberUdtArgInfo]) ->
for config in configs {
config.validate()?;
}
- let mut document: serde_yaml::Value = serde_yaml::from_str(base_yaml)?;
+ let mut document: serde_yaml_ng::Value = serde_yaml_ng::from_str(base_yaml)?;
let root = document.as_mapping_mut().ok_or_else(|| anyhow::anyhow!("Fiber config root must be a YAML mapping"))?;
let ckb = root
- .get_mut(serde_yaml::Value::String("ckb".to_string()))
- .and_then(serde_yaml::Value::as_mapping_mut)
+ .get_mut(serde_yaml_ng::Value::String("ckb".to_string()))
+ .and_then(serde_yaml_ng::Value::as_mapping_mut)
.ok_or_else(|| anyhow::anyhow!("Fiber config must contain a ckb mapping"))?;
- ckb.insert(serde_yaml::Value::String("udt_whitelist".to_string()), serde_yaml::to_value(configs)?);
- Ok(serde_yaml::to_string(&document)?)
+ ckb.insert(serde_yaml_ng::Value::String("udt_whitelist".to_string()), serde_yaml_ng::to_value(configs)?);
+ Ok(serde_yaml_ng::to_string(&document)?)
}
fn json_string(value: &str) -> anyhow::Result {
@@ -307,7 +307,7 @@ mod tests {
let (config, _) = build_fiber_udt_config("sample::Asset", &script, Some(42), vec![direct_dep()]).unwrap();
let base = "fiber:\n chain: dev.toml\nrpc:\n listening_addr: 127.0.0.1:21714\nckb:\n rpc_url: http://127.0.0.1:8114\n udt_whitelist:\n - name: stale\n";
let rendered = materialize_fiber_config(base, &[config]).unwrap();
- let parsed: serde_yaml::Value = serde_yaml::from_str(&rendered).unwrap();
+ let parsed: serde_yaml_ng::Value = serde_yaml_ng::from_str(&rendered).unwrap();
assert_eq!(parsed["fiber"]["chain"].as_str(), Some("dev.toml"));
assert_eq!(parsed["rpc"]["listening_addr"].as_str(), Some("127.0.0.1:21714"));
assert_eq!(parsed["ckb"]["rpc_url"].as_str(), Some("http://127.0.0.1:8114"));
diff --git a/crates/cellscript-tools/Cargo.toml b/crates/cellscript-tools/Cargo.toml
new file mode 100644
index 00000000..93664e1f
--- /dev/null
+++ b/crates/cellscript-tools/Cargo.toml
@@ -0,0 +1,31 @@
+[package]
+name = "cellscript-tools"
+version = "0.24.0"
+edition = "2024"
+rust-version = "1.97.1"
+publish = false
+description = "Release, audit, and validation tooling for the CellScript workspace"
+license = "MIT"
+
+[[bin]]
+name = "cellscript-tools"
+path = "src/main.rs"
+
+[dependencies]
+anyhow = "1.0"
+blake2b-ref = "0.3"
+ckb-jsonrpc-types = "1.0.0"
+ckb-types = "1.0.0"
+clap = { version = "=4.5.49", features = ["derive"] }
+hex = "0.4"
+hex-literal = "0.4"
+k256 = { version = "0.13.4", default-features = false, features = ["schnorr"] }
+percent-encoding = "2"
+regex = "1"
+reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls"] }
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+sha2 = "0.10"
+time = { version = "0.3", features = ["formatting", "local-offset"] }
+toml = "0.8"
+wait-timeout = "0.2"
diff --git a/crates/cellscript-tools/fixtures/ckb_acceptance/transactions-v0.23.json b/crates/cellscript-tools/fixtures/ckb_acceptance/transactions-v0.23.json
new file mode 100644
index 00000000..905f2cdd
--- /dev/null
+++ b/crates/cellscript-tools/fixtures/ckb_acceptance/transactions-v0.23.json
@@ -0,0 +1,18177 @@
+{
+ "schema": "cellscript-ckb-acceptance-transaction-recipes-v0.23",
+ "source_evidence": {
+ "compiler_edition": "2026",
+ "entry_witness_abi": "cellscript-entry-witness-v1",
+ "entry_witness_container": "ckb-molecule-witness-args-input-type",
+ "artifact_hashes_match_edition_2026_build_report": true,
+ "extracted_from_passed_local_devnet": true,
+ "production_hardening_gate_status": "passed",
+ "measurement_run_mode": "production"
+ },
+ "transactions": {
+ "0x00409256e78106d58106d68a0fc529399530b444f5e73ebf74960616d208c2a4": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x006b521dc10d970574f21b5faf7d36e65b9242f7557bdf0f293020f759b2e568"
+ }
+ }
+ ],
+ "hash": "0x00409256e78106d58106d68a0fc529399530b444f5e73ebf74960616d208c2a4",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x6b1230cc7d06562c440c22b81e23c0cb7c253f5a1661ddfe23446ebe821353ba"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xdf8475800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xa1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x2540be400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x6c3bf0d1bc162b2c71378ec3ea55d34121ab8c66480524e83cc8943de6b26555",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xa1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x5354415445303031e8030000000000000500000000000000",
+ "0x05000000000000005354415445303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x44000000100000001000000044000000300000004353415247763100592df79115780f5dc228bfc2e484ffd93922029e726eb4f1896cfc2bbb6af72c0500000000000000"
+ ]
+ },
+ "0x014f954ce1b5dcd67562a3094bda3060e3807bd071a5da61a107a3c4c02716e2": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xa831ba0ff5d321de15b135872754b682e38d2ddd47c38d7315bce7f166e20ec4"
+ }
+ }
+ ],
+ "hash": "0x014f954ce1b5dcd67562a3094bda3060e3807bd071a5da61a107a3c4c02716e2",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x30596da5f51a5a9b2388bb40c5ae8011a74096b2a0f758784db69257d7b5b721"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xee0a4d051aeb5c2c39df4eeeda6a55b8cb9ea79a964b905d3288c0d83138fabc",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x52",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0xff00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ee000000f6000000fe000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd3080800000000000000be4bb273fc2295cd8466897942306079b3d1118c6150a000751ee6695e7d7c110064f944c22f0db7bfb29aa523b65cbb75a6a65b369febfbff0ffc17facacfe2dcf401000000000000000000000202000000be4bb273fc2295cd8466897942306079b3d1118c6150a000751ee6695e7d7c11edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae1400000000000000d00700000000000000",
+ "0x8d00000018000000380000007c0000007d00000085000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd30802000000be4bb273fc2295cd8466897942306079b3d1118c6150a000751ee6695e7d7c11edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x0495a8b89852af2a653540ebe699453d04134738225430a174119ef7db3fa047": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf99767aebf484c406de90a63140d8306eea1dbf509fb6b04f13f5594a27b4157"
+ }
+ }
+ ],
+ "hash": "0x0495a8b89852af2a653540ebe699453d04134738225430a174119ef7db3fa047",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa9cef4087fceb9817020e4d1c51f0831a16fca7ec406021f4632886a98f0289b"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x7cda3da79fb46eaed62752444d9d4f666897861039c77bf94f0532fc43162a70",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd308020000007d079c63043b805af33e1b72b25e83ba2897b47af215f9174932de79e9393d01edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0100000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x0538556ab99b85f0633cbb009edcc62be34efb26015f555c59d118424785c27b": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc1992e679cdcbc64bb722f94b5d226099b2b9ead0529e4ccf45833055f369b2a"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x2a9fbd7f43595d871d80e631baf1667f16d4e1cf6a44e85735c69684865db517"
+ }
+ }
+ ],
+ "hash": "0x0538556ab99b85f0633cbb009edcc62be34efb26015f555c59d118424785c27b",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x5e784733c02e52fe1d4c6996255dcfdbf2b792d69c36414970e539e90901d2b2"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0xf4",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x010000000000000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5c280000000000000001"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x4400000010000000100000004400000030000000435341524776310086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5c2800000000000000"
+ ]
+ },
+ "0x073245d0e75464ee92f0f4a3264f989fe4ea3c11dac3e4a1abd6084ea8dc2305": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdff9e4e52961c196f41c52c2d211468dfa6b3af8c4f194a02d4bc59bfe39d066"
+ }
+ }
+ ],
+ "hash": "0x073245d0e75464ee92f0f4a3264f989fe4ea3c11dac3e4a1abd6084ea8dc2305",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x30ec99674788122475be9ca8dc6a669a097535cac9d95a012e4cc78a1f6aba98"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xf7a0ff2f4e06b8af72ebbd3aa6a7e6ffe61d3ada8258397c6c224d217ae9d3cd",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x444444444444444444444444444444444444444444444444444444444444444411111111111111111111111111111111111111111111111111111111111111110001000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x08cbc0f0e4b4a1201e687be7ab5380399f3f971ab68bae873e7b6e5dde6dac8c": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x49ce2be6cbe254c0a78346d81c7b098e74f44601c4693a509ba36d4b3c681f69"
+ }
+ }
+ ],
+ "hash": "0x08cbc0f0e4b4a1201e687be7ab5380399f3f971ab68bae873e7b6e5dde6dac8c",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1bb3cf00c66b3d7592593c6aa356d47b2c5d6dee93a8c759dfca50af1fad03ac"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x1ef8dbe9b2f531b18576d6ec194fae7e744ac501952706adcb6382d1deea04b4",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x665fa3d657391cb8819d2c9e91e3c0e6f82db7b371416f04e0b06332990457a511111111111111111111111111111111111111111111111111111111111111110064000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x09a58ddb0bb12c02eb2ca45b0d43f56eb40ebbd1a58fe5224831bb01d8f394f1": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xd3fd27a5c0ce54a627bc8b585760471badce4816d4839254b64ded850b60bfba"
+ }
+ }
+ ],
+ "hash": "0x09a58ddb0bb12c02eb2ca45b0d43f56eb40ebbd1a58fe5224831bb01d8f394f1",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x264f70265a964d3719a86579311a2f1adb0b6de22fcf524908c46b500dca2770"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xafc1309eef287471f5feb8e01a6bad53624851301ed7e5117b803290c2362c80",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0x0b9fa823515ffce03746d1c4344db4e1e50bad3668c81088b7ca5eafc6040913": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x06fc2217647967fbbbb43852493f249d782b073b114cc29bbdca5e13bf830cfe"
+ }
+ }
+ ],
+ "hash": "0x0b9fa823515ffce03746d1c4344db4e1e50bad3668c81088b7ca5eafc6040913",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x21aaab6b34b6f7bd4c7672fe16baa2deacfe062cab95a9104c9c3d32de16165f"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x60",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x61",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x70",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x62",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x71",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x62",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x60",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x62",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4c41554e434830311027000000000000e803000000000000",
+ "0x0a000000000000004c41554e43483031",
+ "0x14000000000000004c41554e43483031",
+ "0xca030000000000004c41554e43483031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0xa40000001000000010000000a40000009000000043534152477631004c41554e434830311027000000000000e8030000000000006de4ed8e16e7400834559efc852ddca87762f738a5dd93853168a4cc390cdbf013e1988a98e068eb6128d8ad60febbec52113d16742917b29e9d0b753eb8e9710a000000000000006d7122fbd537293591fef620082e9213b875ee6f8a926497a533aee6f4ff93561400000000000000"
+ ]
+ },
+ "0x0cba9e700c8a662884ab05066a027cc22b03e79ac0facfcbe0d002acd391bc7f": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x04ff3d5eebf352f6edd435d3c42bba62a2b84b65b79504643548e80b2d4d150c"
+ }
+ }
+ ],
+ "hash": "0x0cba9e700c8a662884ab05066a027cc22b03e79ac0facfcbe0d002acd391bc7f",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xfc58dabd5905ecf2b854962eb2da28fddf66936a79180d756cc0e027e0c315ed"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x67c60bfc34958c28b1d5277be6995af9920d480f60ded40806eaf173c704d10d",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x0ea342c485118cb69e4ecbc668e9c916b479fd6be1a284ef27db92c29f0b7141": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x2da50f9b01999a58735ab822ba3bc2b743d5d297b196e77f7cbbe84bc2766aac"
+ }
+ }
+ ],
+ "hash": "0x0ea342c485118cb69e4ecbc668e9c916b479fd6be1a284ef27db92c29f0b7141",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xb33e7360ff7ccaba5bcf51715aa8987ae9413998e5fe860f10b52b2f4fdff670"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xaebdd9d7c1cd1a9b581bc3a42a6c5f40d5b41f2ee637f7a1b4e4eef38500c349",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000444444444444444444444444444444444444444444444444444444444444444402000000111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222220200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x0ed6bca9b7b257ea7fd5b25d4f686479d892da1349a94a24c20be92d396dcaa3": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xb402243a1be68cc9f3dd8f703010b6faadc4a98ac26dc19d4cca2703edb335a3"
+ }
+ }
+ ],
+ "hash": "0x0ed6bca9b7b257ea7fd5b25d4f686479d892da1349a94a24c20be92d396dcaa3",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x178476fefdc74a41929f6858dd8f6fe4094ee863ba6e8defbff459070e2f18dd"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x41",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41256455354303030310a00000000000000640000000000000001"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x550000001000000010000000550000004100000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41256455354303030310a00000000000000640000000000000001"
+ ]
+ },
+ "0x0fc3217536599ec792bf62408185b2a5c32103c994bd312fa19dbb7d02a957ac": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xec73cb2253c130c509a2fb0fa9557411c1bd607b51eb3ed20153393ca8c72157"
+ }
+ }
+ ],
+ "hash": "0x0fc3217536599ec792bf62408185b2a5c32103c994bd312fa19dbb7d02a957ac",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xcebe4151dcc7779bedbc9409ac44eca93448508b0770b287b1c9f8de763dfa30"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa34564aa114e28106b02f63243b50f5135adc633ff7a74e735d27e9404bf0710",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x100622e71992fc7f45b3e46ff83c5f30748a75144c05ed015a39acaa2aefe84e": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x6aa5c60e30df163649a614d6637228dab6e507b00d3a8fd6bd93b5cc525163e3"
+ }
+ }
+ ],
+ "hash": "0x100622e71992fc7f45b3e46ff83c5f30748a75144c05ed015a39acaa2aefe84e",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xbf1baada9a3c1c4dcb21d5976d2a309d27e94129b531610ad17412013ebad36b"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc5eb6cb03878c77e75b8462c561205189574fc4677e5538cc9136c10ab9921da",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x01",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc5eb6cb03878c77e75b8462c561205189574fc4677e5538cc9136c10ab9921da",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x02",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc5eb6cb03878c77e75b8462c561205189574fc4677e5538cc9136c10ab9921da",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x03",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4126bd943617d9642f1dad174449a64bb34f325c84fc257eb8fff578e00a50b0a9c0000000000000000000000000000000000",
+ "0x544f4b454e3030312a000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412",
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4126bd943617d9642f1dad174449a64bb34f325c84fc257eb8fff578e00a50b0a9c000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x1028526cfa99595cebeff3b2745d0bd5a2ef4003cb96a974c3766829f80594d5": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x204eecf4d7006584af493c734f69488ee4ca52dd1c2e7dd7ac075f8f5be3ac1e"
+ }
+ }
+ ],
+ "hash": "0x1028526cfa99595cebeff3b2745d0bd5a2ef4003cb96a974c3766829f80594d5",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x7bdb141dc64f601e73012e4488dd97f98aba20178792f4f35f66ae5f6da31370"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41205b4932b537bf8d7f006cb31700e23021bef615b652238322093b5534e7d71620064000000000000000000000000000000",
+ "0x61616161616161616161616161616161616161616161616161616161616161615151515151515151515151515151515151515151515151515151515151515151006e000000000000000000000000000000",
+ "0x626262626262626262626262626262626262626262626262626262626262626252525252525252525252525252525252525252525252525252525252525252520078000000000000000000000000000000",
+ "0x636363636363636363636363636363636363636363636363636363636363636353535353535353535353535353535353535353535353535353535353535353530082000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c01000010000000100000003c0100002801000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41261616161616161616161616161616161616161616161616161616161616161616262626262626262626262626262626262626262626262626262626262626262636363636363636363636363636363636363636363636363636363636363636305b4932b537bf8d7f006cb31700e23021bef615b652238322093b5534e7d716251515151515151515151515151515151515151515151515151515151515151515252525252525252525252525252525252525252525252525252525252525252535353535353535353535353535353535353535353535353535353535353535364000000000000006e0000000000000078000000000000008200000000000000"
+ ]
+ },
+ "0x10a51089ec0c33634bb2ed3d14f89840602faf9866fea6d2d4e51b5d7cf98b07": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc0bcb97f3c6a8c60d29eb5ed52c18597b102a5b43a1694a53a31d079a8814a95"
+ }
+ }
+ ],
+ "hash": "0x10a51089ec0c33634bb2ed3d14f89840602faf9866fea6d2d4e51b5d7cf98b07",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xd427ffbf8a602f10b6b1c845f50683fbc468d636c9749080b653c671827e22dd"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc1e7dce634480aceedc7bd5dfbb7df1e5951cd945fb0d10cb8ea70968af0443b",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412cb1122061d0f5f32c0026f47daff56cec9b2941ce08f87e1c0d8f2bbb71561e80064000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x640000001000000010000000640000005000000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412cb1122061d0f5f32c0026f47daff56cec9b2941ce08f87e1c0d8f2bbb71561e86400000000000000"
+ ]
+ },
+ "0x115b8ecbcb808b3b25b5f9cbc4883d27337aea43395ded9325a2db79ff74e71d": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x0ed6bca9b7b257ea7fd5b25d4f686479d892da1349a94a24c20be92d396dcaa3"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x8ad8c938473f108cf363d556d16de535af96f3ad0d3bc6be6893da0a11e8a96d"
+ }
+ }
+ ],
+ "hash": "0x115b8ecbcb808b3b25b5f9cbc4883d27337aea43395ded9325a2db79ff74e71d",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x8f31a148d525d4d627eda45d969275fb7966b3a1f0e425ba8bc1dbb441930b23"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x38a050dc2947e5bae1eb7526523ee43f60aecc0289e9a2e5c99ae5a46fd00e98"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x7902ead8098947fb0d9cf87ed357d821d21c0e85505621627fbd81d873290140",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x43",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x186046f747",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x007f263230cfbce124ee4756d36638c2577bb5e31459b4ecc8d1a3ca81acbceaea4d00000000000000000000000000000000000000000000000a0000000000000064000000000000005645535430303031",
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631007f263230cfbce124ee4756d36638c2577bb5e31459b4ecc8d1a3ca81acbceaea",
+ "0x"
+ ]
+ },
+ "0x1213c894962b0b93e2fd49eb38ba5121b5df709d1d78ee888b4a060534f99ab9": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x99bd2cc55653377b2109baa3f88393a406c039e1fdf0703dcb782552e3ac16eb"
+ }
+ }
+ ],
+ "hash": "0x1213c894962b0b93e2fd49eb38ba5121b5df709d1d78ee888b4a060534f99ab9",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xd7667380b5d51d175c28daf8373ec12ed820e1fa9db6e6b4b0b8382e5ca9f8da"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9da2791f3f0a46790e4b187a1d1dd15813f2c14883138631255c58b495a845d8",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd308020000004d594af7f4d8c8158e0225a7d1a80903f7ea8df3f81bc67791af289b03ae879dedf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x1231896def8739036e5e85f79df05e268e5900cf8285d1ed7601157a3e0cc38e": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x01c2a831918e3b54119d0952e4db1e3ebf65d73cec2c2bc3d9051fc0728f45c2"
+ }
+ }
+ ],
+ "hash": "0x1231896def8739036e5e85f79df05e268e5900cf8285d1ed7601157a3e0cc38e",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x00409256e78106d58106d68a0fc529399530b444f5e73ebf74960616d208c2a4"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x2540be400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x6c976866fb9c343bd28922b92aca893f292fed889e52b75a59a10f738b31f4e7",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xa1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x05000000000000005354415445303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631000545322f195fd3db3fa6a39e1e053fef4e3fa14589f8a8c41fc2b58b4028afab"
+ ]
+ },
+ "0x1535a036000b44931b13d0b9248ff807dcb50831b85c97aa6a6bb54e454c3d39": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xce13932ab95d93c1314a4d502849177e49ae562fef4b548150bba05bb04896b4"
+ }
+ }
+ ],
+ "hash": "0x1535a036000b44931b13d0b9248ff807dcb50831b85c97aa6a6bb54e454c3d39",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x3682c9124a707c7882a88d8e30916895d83e6989ee0538f9f4e3393cbed1c523"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x3682c9124a707c7882a88d8e30916895d83e6989ee0538f9f4e3393cbed1c523"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x2",
+ "tx_hash": "0x3682c9124a707c7882a88d8e30916895d83e6989ee0538f9f4e3393cbed1c523"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xee46f625f63eaccefbc7c9bf1393a21295d1d21e712fc704523d6f349a39ca26",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x69",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x66",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x6a",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0c2e7196a2c57e84d184146a4c2fae90ebbee6868385b48f6e790058d4cfb42149f070beeb4c781ae4867e862894a1678ed756948939c667bafbd6da9849e353414d4d4130303031414d4d42303030316e00000000000000dc000000000000004c040000000000001e00",
+ "0x64276f149001c22120e40a1153609d173a6125e6516694a465d0b1f0cb6d0ed264000000000000001c854ee8e7bc04b2afb2e79f831ead772e8f6c55bfb651f5fb27ed2417284f22"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631001c854ee8e7bc04b2afb2e79f831ead772e8f6c55bfb651f5fb27ed2417284f22",
+ "0x",
+ "0x"
+ ]
+ },
+ "0x15da87cfff34c6bfc7a7012177b4845fbdd717f50dd145d2772678981f5a14e4": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x7385b0cd1428d6b3de24c02748cd013790f75530ae9fe8bd125b74ba6388f97c"
+ }
+ }
+ ],
+ "hash": "0x15da87cfff34c6bfc7a7012177b4845fbdd717f50dd145d2772678981f5a14e4",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xba81c768f00b3ec0f4021965d5063059779fcc464e57ded1ca69acb85a0607f8"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc6c1fd22456162ae2457a61bb7fd4f0ad0ac92955adbc6a8da10a0caf1900362",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x1747065ef33181c2ef81ca3e925090b9f8d10d68db884951cb0d13d62bb8761a": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xb547f36f187c1934d41fdd9aa8a0e855842721d14c598386bdc850d6b17b5517"
+ }
+ }
+ ],
+ "hash": "0x1747065ef33181c2ef81ca3e925090b9f8d10d68db884951cb0d13d62bb8761a",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x5b11491c1b93c0e770b10e40426842c0e334f81178685b1578c2a8acd3fa1c76"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa983e55b6bf70b5e24415864e1ab3640ccef502351a814d229b66d6738e0c83a",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0xff00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ee000000f6000000fe000000444444444444444444444444444444444444444444444444444444444444444401000000000000001111111111111111111111111111111111111111111111111111111111111111003333333333333333333333333333333333333333333333333333333333333333f401000000000000000000000202000000111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222220a00000000000000d00700000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x17606461a3d98871a31a1d2dc71e0e81e47c2fb246665a0c19f207255b32f70a": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x7316d0640df6e12bf34469505237b41ef4ef81dd1d7cbe667d2bd929928a8ee9"
+ }
+ }
+ ],
+ "hash": "0x17606461a3d98871a31a1d2dc71e0e81e47c2fb246665a0c19f207255b32f70a",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x4a3e569f693934dcfca435644132ef1a44a29275ca54814354bb783db8a7ca7d"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x2e90edd000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x540be7d1575ea9e60a6df5678ec2e4dc857edb687f1ad2f8359317be2288ff60",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xf1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d0000008500000065dfc0aa4a73f351b42a0bad8e1e57f7befd37622ec7fc56087c9cad029905930200000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5cc7b799a057ff213011b152a94d895d9e5b1eeb05e376f7122464ff11bc93207a0200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x8d00000010000000100000008d00000079000000435341524776310065dfc0aa4a73f351b42a0bad8e1e57f7befd37622ec7fc56087c9cad02990593440000000200000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5cc7b799a057ff213011b152a94d895d9e5b1eeb05e376f7122464ff11bc93207a020a00000000000000"
+ ]
+ },
+ "0x189e7a1b87b0df7c8fb2117191bb6fd6fa7f33b4aac9f4a53edc5ca5cb913a6c": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x85999c8371807a66812a6db192e23c22335b1faf2cc3bcf873658c827ba80570"
+ }
+ }
+ ],
+ "hash": "0x189e7a1b87b0df7c8fb2117191bb6fd6fa7f33b4aac9f4a53edc5ca5cb913a6c",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xd54b6d7cbe380752b64a1276382ab3a2113a300ec6f4b9e11d56d68c3361b739"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xb3e0825b2df698b051e0a98c6ab4c0a645bfa1c53d9b592cabcd43359ba41a41"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xf865c651a7698fc1cb23b2531990494fde954fb6ebce096dc16ce6737195f4f1"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa25a0a55fe281903800eaceda49e70c8263ccf871ac163c4682b4c503486582e"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x5d21dba000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xb6d00cb658e0732961e4c25b5322160074ac41e52182067bc326353930063479",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x19f683cc8c1d057780fae566d09ef252abb98559730bc9c17e6bebc703240968": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xbe466bab7cff1e51bbd15ce13c297ff867f1b089231d2f4797f3e656f9f2fcdd"
+ }
+ }
+ ],
+ "hash": "0x19f683cc8c1d057780fae566d09ef252abb98559730bc9c17e6bebc703240968",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x5debff60864d562bb94f7020d6a1180c7736815ee352e48c9905b920bc0cdf31"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x5debff60864d562bb94f7020d6a1180c7736815ee352e48c9905b920bc0cdf31"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x2a00000000000000544f4b454e303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412",
+ "0x"
+ ]
+ },
+ "0x1c5ec34e3022bdcee5b055f54102be7267a807b4baf9885b20efd665ba5ccbd9": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf8ee78ee63762e2c05952e54e460b90a506c4160c9e4d420f83246162712be43"
+ }
+ }
+ ],
+ "hash": "0x1c5ec34e3022bdcee5b055f54102be7267a807b4baf9885b20efd665ba5ccbd9",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x32b4ee6800c6df5a7e795948fd42fdf5a21ecb453259903d0abad9a8706dadad"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x967d150b17ee92167fda6eb3b28e453cfc084f19c7cbfc773bb3f1b93d4dea61",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x860000001c000000350000003d0000005d000000650000006d00000015000000416363657074616e636520436f6c6c656374696f6e04000000414350543b27b52bcff21bb54b5ab2951b1ee1153fa29982ff473bf003e6097276b6d55c0a00000000000000e80300000000000015000000636b623a2f2f63656c6c7363726970742f6e66742f"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x1c8c4325505326f747420de5e8560c32794f3e1ef786c38d1bcd5b186c669784": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x92ba4f3a9f6ef2ef017253e99a5769579a4d9af3cb0b5bfeaf674c73f73e022f"
+ }
+ }
+ ],
+ "hash": "0x1c8c4325505326f747420de5e8560c32794f3e1ef786c38d1bcd5b186c669784",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x4dbde6eb4499b366a69afa2f677fe589f0cf9fd9d5892598771aecad786a4c38"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x91",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0xa0",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x92",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0xa1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x92",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0xa2",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x92",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0xa3",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x92",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x94",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x95",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x92",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4c41554e434830311027000000000000e803000000000000",
+ "0x0a000000000000004c41554e43483031",
+ "0x14000000000000004c41554e43483031",
+ "0x1e000000000000004c41554e43483031",
+ "0x28000000000000004c41554e43483031",
+ "0x0e837c401395a2f97c5b6c58fb3a7b3f989b392dc5811476208a5a05c6700503a7b2fc0390856f4faf9859a5fc0400e152e6885041ccbb362a2afba422d5636c4c41554e434830315041495230303031f401000000000000fa0000000000000061010000000000001e00",
+ "0x54c2bd6d1bbb50c7263f7bde6016ed68f7d316f4655b715730c2562117010c226101000000000000d13ecf0c119d1765ff5289703ae991ab33966c8b60d3cef4689c10e5e2a85bd0",
+ "0x90010000000000004c41554e43483031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0xfe0000001000000010000000fe000000ea00000043534152477631004c41554e434830311027000000000000e803000000000000f4010000000000001e00d13ecf0c119d1765ff5289703ae991ab33966c8b60d3cef4689c10e5e2a85bd0e8dc66e3889a831192e3875bf3e7e515f58af8b54977e276cb9a48e5580215190a00000000000000a170ea85f6abdedfaf0a65e938edef518dc415a34d89e29f9040b9d3c310becd14000000000000009e9aa836257cc9fd6746e7ec5a1094ee6086bea1db3b0694de51dfb35eab1df01e00000000000000c161ea4e831cc80a99d06c05717f807385040bf90533147f9f8c65ac98669cee2800000000000000"
+ ]
+ },
+ "0x1d50df7be4e0dc58deab8432cbcc769e2d8d00ff832dd9f6c55522f40c9360ed": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x6b76a471c376d588ebcc61b7ace0fd489d5015ce27ca1d261927a05e12c35e3f"
+ }
+ }
+ ],
+ "hash": "0x1d50df7be4e0dc58deab8432cbcc769e2d8d00ff832dd9f6c55522f40c9360ed",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x8e884dba5cfbc95c6e63d17866f4568b4fb2f28003b49d51d98ce98042d5c3b1"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x60",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x61",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x70",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x62",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x71",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x62",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x72",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x62",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x73",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x62",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x60",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x64",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x60",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x65",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x60",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x62",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4c41554e434830311027000000000000e803000000000000",
+ "0x0a000000000000004c41554e43483031",
+ "0x14000000000000004c41554e43483031",
+ "0x1e000000000000004c41554e43483031",
+ "0x28000000000000004c41554e43483031",
+ "0x6e764046853b3e6e5b2eb2f2d03e0f9fa119bf5da110166c48fdce579102826a0ba02773d63b6fa4b0ed6ce7a50816e8ca93d78005ca27c02a2d05b8e46f3c2c4c41554e434830315041495230303031f401000000000000fa0000000000000061010000000000001e00",
+ "0xbd925708cc9329a2ed2eef184ee313c1ec455027844c8ea227b3e589e5221a9a61010000000000006de4ed8e16e7400834559efc852ddca87762f738a5dd93853168a4cc390cdbf0",
+ "0x90010000000000004c41554e43483031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0xfe0000001000000010000000fe000000ea00000043534152477631004c41554e434830311027000000000000e803000000000000f4010000000000001e006de4ed8e16e7400834559efc852ddca87762f738a5dd93853168a4cc390cdbf013e1988a98e068eb6128d8ad60febbec52113d16742917b29e9d0b753eb8e9710a000000000000006d7122fbd537293591fef620082e9213b875ee6f8a926497a533aee6f4ff935614000000000000000e7da160d8e77e9274a6fa6f8243153d2bae61ddf817d97c42e9cc7861e1f8301e000000000000002193d72a508a8145c089e2c41bf0566c81b2088349a3d2a3656f774dc0b1ef552800000000000000"
+ ]
+ },
+ "0x1db48d9dedbc8fbf3feb809f32e63986b8e07ebe639b8dae8a2c7f9ed0134ba1": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc779774afe4bbb92248ad5e6f91ba71ddfac20bda122802790702264c6d8975f"
+ }
+ }
+ ],
+ "hash": "0x1db48d9dedbc8fbf3feb809f32e63986b8e07ebe639b8dae8a2c7f9ed0134ba1",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x40461a7a9e89d6574d81d1c496cd2ada9191d4a10684f6df1a632805c20fa75d"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x23",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000005000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4129600000000000000c8000000000000005041594d3030303100"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x7c00000010000000100000007c000000680000004353415247763100000000000000000000000000000000000000000000000000000000000000000005000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41296000000000000005041594d30303031c800000000000000"
+ ]
+ },
+ "0x1f7b418973fc0723338fc7f2ff45fbd774b0afe291bca5e12e501388fc0d1f8a": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xac7777ae99467a32a740f9f89776f0a5c1a17808c49e29e69a1b193d9f751e1b"
+ }
+ }
+ ],
+ "hash": "0x1f7b418973fc0723338fc7f2ff45fbd774b0afe291bca5e12e501388fc0d1f8a",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x0856a83e4feca4395f9f76af9b0318351ccf128f10c85c68ec3da697594b8fea"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x6d3f4ff4a0012611cfad302ba4de186169643407d6fb5b302cbd11183f5b280e",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000001000000000000001111111111111111111111111111111111111111111111111111111111111111f4010000000000000a0000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x2119c94d3c5beaff73b1cd02bacc32f3f83a69baded172e851e65d5d8a52f3f4": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x9572797579e20683ff0f7c6fe0152a168a9c6bade9800dcb77751ff651df8478"
+ }
+ }
+ ],
+ "hash": "0x2119c94d3c5beaff73b1cd02bacc32f3f83a69baded172e851e65d5d8a52f3f4",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xcdbe4aeeaf08d0f6b320458cdcbaaf3bbb2479277afe0c16a4bfc643736a99a3"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xe383a15d1b2e326df64363cab5778e79bd5edef2bc97a2ae3d4c77ab072752e3",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x980000001c0000003c0000005c0000006b0000007300000097000000444444444444444444444444444444444444444444444444444444444444444411111111111111111111111111111111111111111111111111111111111111116f70657261746f72207265766965770a0000000000000001000000111111111111111111111111111111111111111111111111111111111111111100"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x216dde4df2ea8fe1425edc0dedca51a7e00dd08d33941db55d205a18314c34af": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xaa5563e32d88035679d005517839675d1717431123ecccac41442e008f201abc"
+ }
+ }
+ ],
+ "hash": "0x216dde4df2ea8fe1425edc0dedca51a7e00dd08d33941db55d205a18314c34af",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x3318719ba10143a600ebda5a3f0b3a563c8f1d94d4c791831497295a4abcac74"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xe1350ee31a467cf4c84e39edfe45476a1ef4a77734cb0e48c4ef4e4e5c32d93b"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x513c43aa3e994cbdf9bcd7903f1e220882873ad830b3eb024cdeefe2ca3afcb3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xd3",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0xd5",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0xd2",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x3850aba1ee6b423273975d12fb627dde7af42441026f269f09c44615a1a85b0845e5adc64633f8c455d0a0257610c5915b8223518dfa9beb1ae64502628b36b7414d4d4130303031414d4d42303030310a000000000000000f000000000000000c000000000000001e00",
+ "0x0300000000000000414d4d4230303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x4400000010000000100000004400000030000000435341524776310002000000000000005019e51dad76aeffb28bfca8e1b6a9126043e66d35869f1610ce5f39d4014441",
+ "0x"
+ ]
+ },
+ "0x226c0a2e34cedaa363a9d4b223982d2daf4fc419d302115e05e98396b3d68c9b": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x4d0c0cc1df3a9620a55de0fb0691025fb805e651cda66536e620aa7ff04bd2ed"
+ }
+ }
+ ],
+ "hash": "0x226c0a2e34cedaa363a9d4b223982d2daf4fc419d302115e05e98396b3d68c9b",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x43398ca152e78764ed64cf42b6a5f61da59b38f9087e9714c4cbb8a070f642db"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x204920209dab2137b0f75335063856cc1e84d28b41d1e31c2160614832de50ec",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x204920209dab2137b0f75335063856cc1e84d28b41d1e31c2160614832de50ec",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x52",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000000000000000000000000000000000000000000000000000000000000000000002000000cf8cbc02d90b9e9bca7eb320ce67edfcf62400cd2a8bfb81a8104cf3942bca74edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0201000000000000000a00000000000000",
+ "0xdf00000034000000540000005c0000007c0000007d0000009d000000a5000000c9000000ca000000ce000000d6000000de00000000000000000000000000000000000000000000000000000000000000000000000100000000000000cf8cbc02d90b9e9bca7eb320ce67edfcf62400cd2a8bfb81a8104cf3942bca7401d07ba215cc89ea5a359c4a8ab2a8a483caf0f466281ce46d2d5b862e8d8dcc3d000000000000000020000000d07ba215cc89ea5a359c4a8ab2a8a483caf0f466281ce46d2d5b862e8d8dcc3d02000000001400000000000000b40500000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x64000000100000001000000064000000500000004353415247763100cf8cbc02d90b9e9bca7eb320ce67edfcf62400cd2a8bfb81a8104cf3942bca74d07ba215cc89ea5a359c4a8ab2a8a483caf0f466281ce46d2d5b862e8d8dcc3d1400000000000000"
+ ]
+ },
+ "0x264f70265a964d3719a86579311a2f1adb0b6de22fcf524908c46b500dca2770": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xd3fd27a5c0ce54a627bc8b585760471badce4816d4839254b64ded850b60bfba"
+ }
+ }
+ ],
+ "hash": "0x264f70265a964d3719a86579311a2f1adb0b6de22fcf524908c46b500dca2770",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xf81b8f3fa28f224801721f45024613cd91ff6d64ef6a1de494e265be03b2e9af"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xafc1309eef287471f5feb8e01a6bad53624851301ed7e5117b803290c2362c80",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000002000000000000009097611a54d809e6d5cd011ef4511e4259dd6c5594dc8670598498cfd6f33551000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x2746ae89bf4c9c652cebc4119bbd5a9df9f721f9eedd64182d188bbc17e5d489": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdb30f9d5f126ed97836bb953e06415433f7367a42dd24b0a6b53f934259b70c9"
+ }
+ }
+ ],
+ "hash": "0x2746ae89bf4c9c652cebc4119bbd5a9df9f721f9eedd64182d188bbc17e5d489",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xbf6aa2ba40fb3d8804ff896f05be4c8ef70e848d321b208c7136fbfefe9a3616"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xb68bc21ce6610e2236c25abb71e5dfef7272083f069416c9c9942040d792b13d"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x214893fb9dd10fe10e4a92ef80b06c126808256f524d308629c828a49c4327de",
+ "hash_type": "data1"
+ },
+ "type": null
+ },
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x214893fb9dd10fe10e4a92ef80b06c126808256f524d308629c828a49c4327de",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x544f4b454e30303164000000000000004444444444444444444444444444444444444444444444444444444444444444",
+ "0x444444444444444444444444444444444444444444444444444444444444444411111111111111111111111111111111111111111111111111111111111111110064000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x2ad1120afda308f8aabe45f3ace721125f268138917137a0e2681c435e47b6c6": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xd32db7375c2ca9b9df46c33c6d3c6ae4f1f86236633a3ad794086f2fa708f2e4"
+ }
+ }
+ ],
+ "hash": "0x2ad1120afda308f8aabe45f3ace721125f268138917137a0e2681c435e47b6c6",
+ "header_deps": [
+ "0xb35487c7b0d7a3c1351f9bdfdf76e178b01c7f93d4cfbbb84e1d07e800090bec"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x4a2f379980234301b6755cdb05bbcf5d46f407f31a8fe7228bf2cce0c29cbc7c"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x318333f71531adb7109813cd89f757d76d7a1a8aebb79e93d800df8f4f0bc3c3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x45",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x318333f71531adb7109813cd89f757d76d7a1a8aebb79e93d800df8f4f0bc3c3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x43",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x50000000000000005645535430303031",
+ "0x01b250afae197267ab716da7baa7d3077d66d0bfb6286f19ab4d0698a90737666e640000000000000064000000000000000000000000000000000000000000000001000000000000005645535430303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0x2b6f560e02fd1d710f9e47d3fb9771d37ae3b88362ebca48a822e3bee8e318f8": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x8c6940241808971b02b84d9bae41658d771003f1c281eb929b3aebd456b637d1"
+ }
+ }
+ ],
+ "hash": "0x2b6f560e02fd1d710f9e47d3fb9771d37ae3b88362ebca48a822e3bee8e318f8",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x331e2838307293ed62c8cc61101d0afe7de0e5e1cb0e14d1d369524fada9de22"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc13b702287bf01246fd600189482d58fb1e8bdadce497124858e010750a4b4cd",
+ "hash_type": "data1"
+ },
+ "type": null
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x",
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412a4dec0a82af4fefe10a664b9821c9e481efc2c7ca085bc82ed029a18282243140000000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x2b965ae1e6b62320a3cf421dc790d3a585e91e990f098ee61a63f21f8edfb669": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdb690265e0a48d6b81c1b38a4af3366976ec7d73515a63128a97e320a4664175"
+ }
+ }
+ ],
+ "hash": "0x2b965ae1e6b62320a3cf421dc790d3a585e91e990f098ee61a63f21f8edfb669",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xd955f7836227960c50e27364ab37f530f14adb8b1f47dc683539619b3db9b7fb"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x4e52ecbe274e6cefae5fdb1eba4f1cee15d92370a2a991bce607e86bd12c2cae",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0xff00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ee000000f6000000fe000000444444444444444444444444444444444444444444444444444444444444444401000000000000001111111111111111111111111111111111111111111111111111111111111111003333333333333333333333333333333333333333333333333333333333333333f401000000000000000000000202000000111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222220a00000000000000d00700000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x2c4b0dd0bcfb2f67d16e2dd6d86136b2d4c67596a13e419fed44981d1181bdf1": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x5722b21ca2e67ba87092e0fd80580aec5df50e30c37fb60efe7dcd24c426bca5"
+ }
+ }
+ ],
+ "hash": "0x2c4b0dd0bcfb2f67d16e2dd6d86136b2d4c67596a13e419fed44981d1181bdf1",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x216dde4df2ea8fe1425edc0dedca51a7e00dd08d33941db55d205a18314c34af"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x3318719ba10143a600ebda5a3f0b3a563c8f1d94d4c791831497295a4abcac74"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x96e685a42e14cd65be8a3b9f6b63f1da1f37852c82ace8d9f711077b3754de48"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0xd3",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x513c43aa3e994cbdf9bcd7903f1e220882873ad830b3eb024cdeefe2ca3afcb3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xd1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x513c43aa3e994cbdf9bcd7903f1e220882873ad830b3eb024cdeefe2ca3afcb3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xd2",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x16ed8284f2",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x3850aba1ee6b423273975d12fb627dde7af42441026f269f09c44615a1a85b0845e5adc64633f8c455d0a0257610c5915b8223518dfa9beb1ae64502628b36b7414d4d4130303031414d4d42303030310500000000000000080000000000000006000000000000001e00",
+ "0x0500000000000000414d4d4130303031",
+ "0x0700000000000000414d4d4230303031",
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c000000280000004353415247763100ed765278a6a68d4a9135c503f9ce0fc652eaad62fbb857b24bfdf9d6e0955a3c",
+ "0x",
+ "0x"
+ ]
+ },
+ "0x2f2a53ea7336cf1d1b199a59b22148e7357d2e12846050a664cce5bf73094e80": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x361ddd4cf352f5a027b10ac34cde394aaf28cb92f71dc04f00e4837643111170"
+ }
+ }
+ ],
+ "hash": "0x2f2a53ea7336cf1d1b199a59b22148e7357d2e12846050a664cce5bf73094e80",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xcdee5c008e17b8d31dbc8472c5f3771a959ed40826789829f30c56062390104f"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc5eb6cb03878c77e75b8462c561205189574fc4677e5538cc9136c10ab9921da",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xb1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x7d84ad3da83e8ccab86a945f8bb0b74ebaa3d29369b01c5370dff1f340078ac06bd943617d9642f1dad174449a64bb34f325c84fc257eb8fff578e00a50b0a9c000b000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x640000001000000010000000640000005000000043534152477631007d84ad3da83e8ccab86a945f8bb0b74ebaa3d29369b01c5370dff1f340078ac06bd943617d9642f1dad174449a64bb34f325c84fc257eb8fff578e00a50b0a9c0b00000000000000"
+ ]
+ },
+ "0x303ddda76da0fffdac25e53f5e93c2bfca6617c7281d37afd216d8f64410ceb3": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x969891936e2843de5c335b05af807ebe3ffc6d6f3e371e129c150b7944389b27"
+ }
+ }
+ ],
+ "hash": "0x303ddda76da0fffdac25e53f5e93c2bfca6617c7281d37afd216d8f64410ceb3",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xf8fad0a7c22671360bcbb8f74064995f7fc5dd371dcf699289d4e486aac23d0f"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x87c083fadb4ec6e5823e9bd76b000f7b98f4b374cea82ed6a528915317d8a59e",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x860000001c000000350000003d0000005d000000650000006d00000015000000416363657074616e636520436f6c6c656374696f6e040000004143505411111111111111111111111111111111111111111111111111111111111111110100000000000000e80300000000000015000000636b623a2f2f63656c6c7363726970742f6e66742f"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x31aa013f1e5e95cef0f8a5cc0a4dc6c069ad72d6a2989a7aa02e13c7d30576c8": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x1d3726f0eb930917dbb02cb08aa68622494014245a885c60e4d1df758f245b49"
+ }
+ }
+ ],
+ "hash": "0x31aa013f1e5e95cef0f8a5cc0a4dc6c069ad72d6a2989a7aa02e13c7d30576c8",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x29787f481c71ee1f761d3d7566fe53c6c08bb84fb99cdb5a1b59e4589d6bb866"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x11",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x12",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x13",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4125baf451ed7373f0615c332dd7cf063955378dcf10b7a6fc35b0146cf4ca5182b00f4010000000000000000000000000000",
+ "0x544f4b454e3030312a000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412",
+ "0xbe0000001c0000003c0000005c0000007100000079000000bd0000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4125baf451ed7373f0615c332dd7cf063955378dcf10b7a6fc35b0146cf4ca5182b11000000656d657267656e63792072656c656173650000000000000000020000004242424242424242424242424242424242424242424242424242424242424242434343434343434343434343434343434343434343434343434343434343434300"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x328af8fa27cee70d6009d30c6b9ce494b1cd01e8f30f36e7c0e8b1031056850b": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x4d298843298431d70021bb66737e15abfe84b67851ce6a99787c28941caee507"
+ }
+ }
+ ],
+ "hash": "0x328af8fa27cee70d6009d30c6b9ce494b1cd01e8f30f36e7c0e8b1031056850b",
+ "header_deps": [
+ "0xe3351eef7f5486f5e5199cceb0953a762e70ff1fde6fe6419eb1b3ea1af366dd"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xb7978d739c6d861ab1902226dbc51bfad44edf6dcfdee1dc303f50606f4c62ea"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xcc321278301291afc3c43ae43d5e3e3c10ce9cf0658c3063587b0123cdce7cef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x45",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xcc321278301291afc3c43ae43d5e3e3c10ce9cf0658c3063587b0123cdce7cef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x43",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x1e000000000000005645535430303031",
+ "0x00d51ef4e28799d94e9046a2873a2974c4fbe51572f6fd1d579cd43f4bf679fb87640000000000000032000000000000000000000000000000000000000000000002000000000000005645535430303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0x32a7a73a12207334bbb3966a636e22d5ea60ee3dbcf4b8f0d757c90e3cc282b6": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdb690265e0a48d6b81c1b38a4af3366976ec7d73515a63128a97e320a4664175"
+ }
+ }
+ ],
+ "hash": "0x32a7a73a12207334bbb3966a636e22d5ea60ee3dbcf4b8f0d757c90e3cc282b6",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x336a97dc34dcfb9fd522d94f3a0653fb50f2aaf7d4cba9278462fe43e92a70c9"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x240000001000000010000000240000001000000043534152477631006400000000000000"
+ ]
+ },
+ "0x330bd555021ad2b154510d81eeccf8cbd8e6e62ebae7c456e5fabc2831e5eb26": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdb73dd1332931d73fa333bb3e2b9ad2b0b93f3350e75420154005ba23a2d7d9d"
+ }
+ }
+ ],
+ "hash": "0x330bd555021ad2b154510d81eeccf8cbd8e6e62ebae7c456e5fabc2831e5eb26",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x375d660a387685e9e2fb3694a6329a5598d2879a50a794c0ce458f723c2788aa"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x375d660a387685e9e2fb3694a6329a5598d2879a50a794c0ce458f723c2788aa"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x2",
+ "tx_hash": "0x375d660a387685e9e2fb3694a6329a5598d2879a50a794c0ce458f723c2788aa"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x15",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x14",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x2a00000000000000544f4b454e303031",
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41200000000000000005baf451ed7373f0615c332dd7cf063955378dcf10b7a6fc35b0146cf4ca5182b"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631005baf451ed7373f0615c332dd7cf063955378dcf10b7a6fc35b0146cf4ca5182b",
+ "0x",
+ "0x"
+ ]
+ },
+ "0x3318719ba10143a600ebda5a3f0b3a563c8f1d94d4c791831497295a4abcac74": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xa641762dced489313320a33d0a25ad81848a3cfdf3e057d37e5313f5aa7bff7a"
+ }
+ }
+ ],
+ "hash": "0x3318719ba10143a600ebda5a3f0b3a563c8f1d94d4c791831497295a4abcac74",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x69a432d0677efdd81acdd9ee50ac097f3cfe6e4dc981c86cb3bf7b090d32b833"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1552617977bba10cb1d8df84ccaba2a68deaeac7eb39fc08462ecc5b9feec933"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x1552617977bba10cb1d8df84ccaba2a68deaeac7eb39fc08462ecc5b9feec933"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa3bdc8e44991a1790d469db884797763ce5dd7ef8631b77f45c2d925633dbbd9",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xd3",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x513c43aa3e994cbdf9bcd7903f1e220882873ad830b3eb024cdeefe2ca3afcb3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xd4",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x3850aba1ee6b423273975d12fb627dde7af42441026f269f09c44615a1a85b0845e5adc64633f8c455d0a0257610c5915b8223518dfa9beb1ae64502628b36b7414d4d4130303031414d4d4230303031080000000000000012000000000000000c000000000000001e00",
+ "0xe8564582cfb212e256ae6674d1224e7e09759592eb5dd7c1227430e9bf7132b40600000000000000ed765278a6a68d4a9135c503f9ce0fc652eaad62fbb857b24bfdf9d6e0955a3c"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c000000280000004353415247763100ed765278a6a68d4a9135c503f9ce0fc652eaad62fbb857b24bfdf9d6e0955a3c",
+ "0x",
+ "0x"
+ ]
+ },
+ "0x33611509a83b78a19cf2ce0980216ef2aa22a359ffb7d07bf31fbd73c339444c": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xb58deece93c4942aa5ab1e0722ebfceaa8f9fabe3c6e8eb01dff0f2bd44b176d"
+ }
+ }
+ ],
+ "hash": "0x33611509a83b78a19cf2ce0980216ef2aa22a359ffb7d07bf31fbd73c339444c",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x856f0d3868b6c46e2834ddd850509f63354c2041a60d3c48fb673727f339b185"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x734c3177a05355d83a3be6c68309e377cfa444fc62d5d6504b3664ea090e9b02",
+ "hash_type": "data1"
+ },
+ "type": null
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x",
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41294ad7e819f84f5e26539b71e3e49ce236802e80d09e5ad2f3a0c8a17264b144200f4010000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x336a97dc34dcfb9fd522d94f3a0653fb50f2aaf7d4cba9278462fe43e92a70c9": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdb690265e0a48d6b81c1b38a4af3366976ec7d73515a63128a97e320a4664175"
+ }
+ }
+ ],
+ "hash": "0x336a97dc34dcfb9fd522d94f3a0653fb50f2aaf7d4cba9278462fe43e92a70c9",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x48629d4a9cc3fc983106af03deb7b963ce23b7766cda59a21f07af3922e08714"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x4e52ecbe274e6cefae5fdb1eba4f1cee15d92370a2a991bce607e86bd12c2cae",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0xff00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ee000000f6000000fe000000444444444444444444444444444444444444444444444444444444444444444401000000000000001111111111111111111111111111111111111111111111111111111111111111003333333333333333333333333333333333333333333333333333333333333333f401000000000000000000000202000000111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222220a00000000000000d00700000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x349aa74d03c45384b56f8dbc5aef108759d23116eeba59a92774cfc08682bf67": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc8d09aa1bd1628fbcbaf36c8708d86a6ae276bbada0a5b3f032f3c4188bcc9f2"
+ }
+ }
+ ],
+ "hash": "0x349aa74d03c45384b56f8dbc5aef108759d23116eeba59a92774cfc08682bf67",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x93aa183f3781d22f64bdb65338ccc34ad23cd53b7565f2d38d2c09fac6480085"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x828a52262139378ce50e40ea7a24d4e8d8219cb2b9ae8f0e2a2cde2a8712a546",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x352b275582f167c4a2332d05c5bab89ffb39f2053dcc899f5d42f57a9f075234": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0x2b6f560e02fd1d710f9e47d3fb9771d37ae3b88362ebca48a822e3bee8e318f8"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x8c6940241808971b02b84d9bae41658d771003f1c281eb929b3aebd456b637d1"
+ }
+ }
+ ],
+ "hash": "0x352b275582f167c4a2332d05c5bab89ffb39f2053dcc899f5d42f57a9f075234",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x2b6f560e02fd1d710f9e47d3fb9771d37ae3b88362ebca48a822e3bee8e318f8"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc13b702287bf01246fd600189482d58fb1e8bdadce497124858e010750a4b4cd",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412a4dec0a82af4fefe10a664b9821c9e481efc2c7ca085bc82ed029a1828224314000000000000000000",
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c000000280000004353415247763100a4dec0a82af4fefe10a664b9821c9e481efc2c7ca085bc82ed029a1828224314"
+ ]
+ },
+ "0x359f39061473e35c6dbab0c66794d75a41382022924c32e1f8adb6b7e18bc87a": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x59e35a159719575477e11dfd15b9b1c0c0c895495034a74e23e8f89a884cfa44"
+ }
+ }
+ ],
+ "hash": "0x359f39061473e35c6dbab0c66794d75a41382022924c32e1f8adb6b7e18bc87a",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xdec8a1e44fc58f622184065d886f6bc08e932ba83a27375cdec8f9a63a5bc5fb"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x67cf56e6c2bcd82506436ade5d8a220f9b51ad099c307d7cb59de6629cca279e",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x444444444444444444444444444444444444444444444444444444444444444411111111111111111111111111111111111111111111111111111111111111110064000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x3682c9124a707c7882a88d8e30916895d83e6989ee0538f9f4e3393cbed1c523": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xce13932ab95d93c1314a4d502849177e49ae562fef4b548150bba05bb04896b4"
+ }
+ }
+ ],
+ "hash": "0x3682c9124a707c7882a88d8e30916895d83e6989ee0538f9f4e3393cbed1c523",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x2bb928938ac2f0268e5832c69104527e4d29a9e2b84d3202377da542cabccc9f"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xee46f625f63eaccefbc7c9bf1393a21295d1d21e712fc704523d6f349a39ca26",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x69",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xee46f625f63eaccefbc7c9bf1393a21295d1d21e712fc704523d6f349a39ca26",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x67",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xee46f625f63eaccefbc7c9bf1393a21295d1d21e712fc704523d6f349a39ca26",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x68",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0c2e7196a2c57e84d184146a4c2fae90ebbee6868385b48f6e790058d4cfb42149f070beeb4c781ae4867e862894a1678ed756948939c667bafbd6da9849e353414d4d4130303031414d4d42303030316400000000000000c800000000000000e8030000000000001e00",
+ "0x0a00000000000000414d4d4130303031",
+ "0x1400000000000000414d4d4230303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x39d8620d7cdab5fe38e1f273955366ec78088bb03ca244c8e652ca01eda72ffd": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x1e601e8f4a43db4216118fd235a8c21841e611d4d32208c6f8745d6ff5049d74"
+ }
+ }
+ ],
+ "hash": "0x39d8620d7cdab5fe38e1f273955366ec78088bb03ca244c8e652ca01eda72ffd",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x800bd3b016078a651b0e8291abfd3b01892cc2125e43c607d6d818e4d0986b7b"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xe47eaf52f41e951f3eb7ae9bfd1173ca26b884ecff101bfa931b5a75ddf1be70",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000001000000000000002222222222222222222222222222222222222222222222222222222222222222f401000000000000d0070000000000005041594d3030303100"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x3b5f601fb0d58eec101f8758734ca3adaa979411bc16d348e7dad955ae10f23d": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc1992e679cdcbc64bb722f94b5d226099b2b9ead0529e4ccf45833055f369b2a"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf0738d58ce079764795b431bbfd979cb1e39fa1672b01a35e6c50648a7831211"
+ }
+ }
+ ],
+ "hash": "0x3b5f601fb0d58eec101f8758734ca3adaa979411bc16d348e7dad955ae10f23d",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0xc1992e679cdcbc64bb722f94b5d226099b2b9ead0529e4ccf45833055f369b2a"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x1bf08eb000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xb5e6f61a513204507f6cf508cbc23b449a60d91ef6ebdfde79fcf886bf4cb020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xf2",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0xf3",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0xdf00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ce000000d6000000de00000065dfc0aa4a73f351b42a0bad8e1e57f7befd37622ec7fc56087c9cad02990593010000000000000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5c003664eabff06921f646efbb743006b9544de3a96a399db5870777e5e8d78a7b2df40100000000000000000000020100000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5c1400000000000000b40500000000000000",
+ "0x010000000000000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5c1e00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x4400000010000000100000004400000030000000435341524776310086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5c1e00000000000000"
+ ]
+ },
+ "0x3c849919043c16e3e898eda183516a34bbcdc02458f05c8d208cf134cf0ed8f0": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x59e35a159719575477e11dfd15b9b1c0c0c895495034a74e23e8f89a884cfa44"
+ }
+ }
+ ],
+ "hash": "0x3c849919043c16e3e898eda183516a34bbcdc02458f05c8d208cf134cf0ed8f0",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x359f39061473e35c6dbab0c66794d75a41382022924c32e1f8adb6b7e18bc87a"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631001111111111111111111111111111111111111111111111111111111111111111"
+ ]
+ },
+ "0x3e1251358de881931f81bfe6f8a80a66309befa2db94fef5889a81b57334bc13": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x757f318b25b23b441765bcbfac6ae04d0986ffcbdbc86cc58ebdd7eef79c65fc"
+ }
+ }
+ ],
+ "hash": "0x3e1251358de881931f81bfe6f8a80a66309befa2db94fef5889a81b57334bc13",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x5784153f26770fa3021edb7050dc2555d2f43f08ffaed620bb1ff9a76abaa993"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631001111111111111111111111111111111111111111111111111111111111111111"
+ ]
+ },
+ "0x402005d53808fc439e58003f9ffecbc77ab2cf229dbf93bff3888221c05c37cd": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x5a42e270ccd43a33e96ba446dc3305288ff81717caf6d657da2f20c5cfda25d8"
+ }
+ }
+ ],
+ "hash": "0x402005d53808fc439e58003f9ffecbc77ab2cf229dbf93bff3888221c05c37cd",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xc88b941d4c707c59ee2b460199746ffe18e32fd9b784d06b6a6245e0f477cea6"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x204920209dab2137b0f75335063856cc1e84d28b41d1e31c2160614832de50ec",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd30802000000cf8cbc02d90b9e9bca7eb320ce67edfcf62400cd2a8bfb81a8104cf3942bca74edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x402f7e5dd680c1d6dc63abfc07b59a2583aa577503c506bef3d00a3a9318608b": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x2f2a53ea7336cf1d1b199a59b22148e7357d2e12846050a664cce5bf73094e80"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x4e37ef1b4ef9ce4d4bf6e391a520856f1646deec3fd27518ee4b3fd932f3cde7"
+ }
+ }
+ ],
+ "hash": "0x402f7e5dd680c1d6dc63abfc07b59a2583aa577503c506bef3d00a3a9318608b",
+ "header_deps": [
+ "0x690c44e7f3605a4c984edfe17dc953047114aff5e42ae1b2f108dc042a37a34d"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x9081136c24df469f162ee5d2f811b20c93c9ab55686d7dc94a3c5396185d42e2"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc5eb6cb03878c77e75b8462c561205189574fc4677e5538cc9136c10ab9921da",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xb3",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x7d84ad3da83e8ccab86a945f8bb0b74ebaa3d29369b01c5370dff1f340078ac06bd943617d9642f1dad174449a64bb34f325c84fc257eb8fff578e00a50b0a9c0b0000000000000000",
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631006bd943617d9642f1dad174449a64bb34f325c84fc257eb8fff578e00a50b0a9c"
+ ]
+ },
+ "0x403c6468185cda532c013187efc8a8037ddab784faa77ffa2f598d8aac72eb71": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc922cbc382b9e65ed9852d188f4eac36d7b7e47c518639c0b6e39899aa32d440"
+ }
+ }
+ ],
+ "hash": "0x403c6468185cda532c013187efc8a8037ddab784faa77ffa2f598d8aac72eb71",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x0bb7448780f83f057e6175331a11fd4e901208c9d6d25387b8fdff8e5790b0eb"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xdebeeebed4b050592aeeda4cd26e530632ce8236e4a0481c150ee8264cfcdffb",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x44",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x41",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4d000000000000005645535430303031",
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41256455354303030310a00000000000000640000000000000001"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x40461a7a9e89d6574d81d1c496cd2ada9191d4a10684f6df1a632805c20fa75d": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc779774afe4bbb92248ad5e6f91ba71ddfac20bda122802790702264c6d8975f"
+ }
+ }
+ ],
+ "hash": "0x40461a7a9e89d6574d81d1c496cd2ada9191d4a10684f6df1a632805c20fa75d",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x3ff86d30f57d900405a644add9552daab4483d43befe2c3e75c1da4272e488ae"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xb961548b7fb156288df5e3c472a626d1791f0753906579980f1c75f1069698a1",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x42897b5ae6adaa91365deb19c8ce0fa269befa90f83fbb2d1aa06e7a3f64a131": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0xae0bc2b1731b075e540a5fd07c59b6bb03278cac9e259d21528e4b0e543ef2f0"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf3587c0b234657d49a8060ead24d3c0c6746964524c281738238c2eee58261cc"
+ }
+ }
+ ],
+ "hash": "0x42897b5ae6adaa91365deb19c8ce0fa269befa90f83fbb2d1aa06e7a3f64a131",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xae0bc2b1731b075e540a5fd07c59b6bb03278cac9e259d21528e4b0e543ef2f0"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xb68a0aa00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xf51e1060b13ba495ab2cac42ab5102d7ff6bb2c00df50f115846b5fcc9429298",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c000000280000004353415247763100fbf9445aa019c17dbdd072cae5c7840097cba346940a427fc4269257922e5bf7"
+ ]
+ },
+ "0x43aa34c172d01d43c427650825c520f05f0775b6691bb9448488bd542475db62": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc293f43936132ce8cb8f8a4a760f1de03c82dfd7464533a73b586d1867b92349"
+ }
+ }
+ ],
+ "hash": "0x43aa34c172d01d43c427650825c520f05f0775b6691bb9448488bd542475db62",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x2196617ba13ed7b92b5decac17cf16f966d584e267a76e3f5e64cd17669ccb22"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x24",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x24",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x23",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x00000000000000000000000000000000000000000000000000000000000000000700000000000000b185b58da000c8f9180f3ab6f8dc6b1c907fd1f44f8ace7fdbe46b7ea7ab3db4000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00",
+ "0xfa000000000000005041594d30303031",
+ "0x16260000000000005041594d30303031",
+ "0x000000000000000000000000000000000000000000000000000000000000000007000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4121027000000000000c8000000000000005041594d3030303100"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x444ee91ba47e5385db975ecd93a4a7ddbca24280a7b63c7ff4898461e206388a": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x4549c1c05bb03fe8c884c329830b6ba4cbc4fe2f560fa5db94addb128fc14015"
+ }
+ }
+ ],
+ "hash": "0x444ee91ba47e5385db975ecd93a4a7ddbca24280a7b63c7ff4898461e206388a",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xeaeed3d06f30198c983882e0221720faf11c02473429adb757bd570b910363f9"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0x44e53c1d471b7bdfbda6816b72152f0c83550a5296edac7313b645ccde8527dc": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x339055295d20077427f346e209218b486acf729ef51fab4051a6c08999fdf40a"
+ }
+ }
+ ],
+ "hash": "0x44e53c1d471b7bdfbda6816b72152f0c83550a5296edac7313b645ccde8527dc",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xfdca9e7b25faf9b61892db5728fab459dab21c39aeb6396438a4f321389d5327"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x6c3bf0d1bc162b2c71378ec3ea55d34121ab8c66480524e83cc8943de6b26555",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x2a00000000000000544f4b454e303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x4a2f379980234301b6755cdb05bbcf5d46f407f31a8fe7228bf2cce0c29cbc7c": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xd32db7375c2ca9b9df46c33c6d3c6ae4f1f86236633a3ad794086f2fa708f2e4"
+ }
+ }
+ ],
+ "hash": "0x4a2f379980234301b6755cdb05bbcf5d46f407f31a8fe7228bf2cce0c29cbc7c",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x8e35ffbe3c9554b756703995206443214379ee30e0377466223286b0d86de771"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x318333f71531adb7109813cd89f757d76d7a1a8aebb79e93d800df8f4f0bc3c3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x43",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x00b250afae197267ab716da7baa7d3077d66d0bfb6286f19ab4d0698a90737666e640000000000000014000000000000000000000000000000000000000000000001000000000000005645535430303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x4b79a85846e54477f3689cc8fa64e3488e1f6c7da2ad02b12b4d7a623a8093f4": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x605ff9349d7a02a281af3488d3f7eeedea672de6d61f015759297b95cec97b33"
+ }
+ }
+ ],
+ "hash": "0x4b79a85846e54477f3689cc8fa64e3488e1f6c7da2ad02b12b4d7a623a8093f4",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x19cde1adb4b5e9fed5e5e2837c79e19630eb2e3641809c73668aeef5847d2740"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2ca9877f46bc3e89b31d76e256714e075ad57732d7fcd489fdc6aa636772f93d",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x00000000000000000000000000000000000000000000000000000000000000000100000000000000ff63e89620213deea694117ec085da42e12c77ac38c0c86eeb6d2202ecb78edd000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x4cc2653d8451a590de947172988ec164e7bf5a4fe457fdb4e2908b77e66c9d6d": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x1f4e697b9f5155338b31392abc0794fe3e262a65e8ca61cc6eeea35fb8aa30f6"
+ }
+ }
+ ],
+ "hash": "0x4cc2653d8451a590de947172988ec164e7bf5a4fe457fdb4e2908b77e66c9d6d",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x73f7a36fbcffdd8b1001ae6cae57f5e3ff92992199c2fb83584503bd1898d3df"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x24",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x24",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x22",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000006000000000000007ec54f4d397c9e0406cb21db151b5b2844123b83ba7e8eb9ce9c0a3c3759b5fb000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00",
+ "0xfa000000000000005041594d30303031",
+ "0x16260000000000005041594d30303031",
+ "0x000000000000000000000000000000000000000000000000000000000000000006000000000000007ec54f4d397c9e0406cb21db151b5b2844123b83ba7e8eb9ce9c0a3c3759b5fb1027000000000000460000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x4d6d94bf0b85a090775f7c8c7127e5b0b4d334547d299080282dac7fc94eafd9": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xb547f36f187c1934d41fdd9aa8a0e855842721d14c598386bdc850d6b17b5517"
+ }
+ }
+ ],
+ "hash": "0x4d6d94bf0b85a090775f7c8c7127e5b0b4d334547d299080282dac7fc94eafd9",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1747065ef33181c2ef81ca3e925090b9f8d10d68db884951cb0d13d62bb8761a"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x240000001000000010000000240000001000000043534152477631006400000000000000"
+ ]
+ },
+ "0x4fd12d9427983bb4486b499152aa8b7cc9051c0e83f9baabe005a380bafbad07": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf90754033d45778b16034a348f5757b56b8578eab5fd81bd2707a4fa43572a7f"
+ }
+ }
+ ],
+ "hash": "0x4fd12d9427983bb4486b499152aa8b7cc9051c0e83f9baabe005a380bafbad07",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xbb4544c75dd32136bfbc6eeab20b2a7ca0539d8e059d3fadfbca9393629a94e8"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x2540be400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x544f4b454e303031e8030000000000000f00000000000000",
+ "0x0500000000000000544f4b454e303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x440000001000000010000000440000003000000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4120500000000000000"
+ ]
+ },
+ "0x515a67864ac1959d9cd4fa108ba421b195a4410f1878832bd01208b5d86e7fcd": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xba786ad1ae914446151de4ce6258fc3d780be1d17424330bbd6a36b6b87f30a1"
+ }
+ }
+ ],
+ "hash": "0x515a67864ac1959d9cd4fa108ba421b195a4410f1878832bd01208b5d86e7fcd",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x5dd59331ecc0a98010fba90d44799e98e082e54eff3b4b386afed335afaa42d4"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x7902ead8098947fb0d9cf87ed357d821d21c0e85505621627fbd81d873290140",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x43",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x41",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x00d714763e4a1855490e72ed7282ee94abb4ad846e79662f8423d83b4f5aca0c35640000000000000014000000000000000000000000000000000000000000000001000000000000005645535430303031",
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41256455354303030310a00000000000000640000000000000001"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x536a1329df3e98119af6bc48f9b8894650d7c85a852a37ae461fc28cd59ea098": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x1f4e697b9f5155338b31392abc0794fe3e262a65e8ca61cc6eeea35fb8aa30f6"
+ }
+ }
+ ],
+ "hash": "0x536a1329df3e98119af6bc48f9b8894650d7c85a852a37ae461fc28cd59ea098",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x4cc2653d8451a590de947172988ec164e7bf5a4fe457fdb4e2908b77e66c9d6d"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x4cc2653d8451a590de947172988ec164e7bf5a4fe457fdb4e2908b77e66c9d6d"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x2",
+ "tx_hash": "0x4cc2653d8451a590de947172988ec164e7bf5a4fe457fdb4e2908b77e66c9d6d"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x3",
+ "tx_hash": "0x4cc2653d8451a590de947172988ec164e7bf5a4fe457fdb4e2908b77e66c9d6d"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x24",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x24",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000006000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00",
+ "0xfa000000000000005041594d30303031",
+ "0x16260000000000005041594d30303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412",
+ "0x",
+ "0x",
+ "0x"
+ ]
+ },
+ "0x558ddcd2b7e2faf8b3e72f03235cee6ae1ab465b76732cfede9c6967ceb130ec": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x08a319c4fe820d63319732392e166c200c4f7eb811244ac8a4dd433065e8400c"
+ }
+ }
+ ],
+ "hash": "0x558ddcd2b7e2faf8b3e72f03235cee6ae1ab465b76732cfede9c6967ceb130ec",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1231896def8739036e5e85f79df05e268e5900cf8285d1ed7601157a3e0cc38e"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0xe9680f21dbf851055f0cb2fcc4cd51a05b5e2f6846b22b08462ffa12e7dc7d2d"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x1b82b117ab4e41de9f6652a54f2f2ee24abad190b04a935cf90075cf9f3da237",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xa1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0c000000000000005354415445303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c000000280000004353415247763100a200e27c78437ddcab853984e34033b1031f475d67a7ba28a463b7e9979cf7d8",
+ "0x"
+ ]
+ },
+ "0x563bdf20a03aa85513c4c052b7e8c1489f5c47d97ad0377084d898aabb32be0c": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0xbf23c0724ab21b007a7d3b7832a662b934e41b1c656f84b2544c87aacd5d8c48"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xbcad341f60c752aa595c93250be7968b9073f5c09b3e9c645fd115dec67eeb88"
+ }
+ }
+ ],
+ "hash": "0x563bdf20a03aa85513c4c052b7e8c1489f5c47d97ad0377084d898aabb32be0c",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xbf23c0724ab21b007a7d3b7832a662b934e41b1c656f84b2544c87aacd5d8c48"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x734c3177a05355d83a3be6c68309e377cfa444fc62d5d6504b3664ea090e9b02",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x22",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x7e0000001c0000003c0000005c00000071000000790000007d0000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41294ad7e819f84f5e26539b71e3e49ce236802e80d09e5ad2f3a0c8a17264b144211000000656d657267656e63792072656c6561736500000000000000000000000000",
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x5500000010000000100000005500000041000000435341524776310094ad7e819f84f5e26539b71e3e49ce236802e80d09e5ad2f3a0c8a17264b14421500000011000000656d657267656e63792072656c65617365"
+ ]
+ },
+ "0x5784153f26770fa3021edb7050dc2555d2f43f08ffaed620bb1ff9a76abaa993": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x757f318b25b23b441765bcbfac6ae04d0986ffcbdbc86cc58ebdd7eef79c65fc"
+ }
+ }
+ ],
+ "hash": "0x5784153f26770fa3021edb7050dc2555d2f43f08ffaed620bb1ff9a76abaa993",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x63a414a50f75bc973e2a1cf27953132d279058cfeb47d253134f4389a424e1fd"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0d708753715b0c50502a06fea8c0d48b890212a5217b4330b7a77805a71f3dd7",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0xff00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ee000000f6000000fe000000444444444444444444444444444444444444444444444444444444444444444401000000000000001111111111111111111111111111111111111111111111111111111111111111003333333333333333333333333333333333333333333333333333333333333333f401000000000000000000000202000000111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222220a00000000000000d00700000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x58389e2aa2f07b207b69c854bb471cbfa9e980b3fb0f5c5acde5d16fe4163f05": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x1e601e8f4a43db4216118fd235a8c21841e611d4d32208c6f8745d6ff5049d74"
+ }
+ }
+ ],
+ "hash": "0x58389e2aa2f07b207b69c854bb471cbfa9e980b3fb0f5c5acde5d16fe4163f05",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x8565bc40dac39e76130ebe55ea770cb776cb0892c0f2561d20de4b8db3b4e8e1"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xe47eaf52f41e951f3eb7ae9bfd1173ca26b884ecff101bfa931b5a75ddf1be70",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000001000000000000002222222222222222222222222222222222222222222222222222222222222222f401000000000000d0070000000000005041594d3030303100"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x58e74715d125d7cbd4c7a98b8aad1518cfaaf118e9e0defca5728b9430946249": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc71e873453ffa750d9ef781214a1e015b9fe92ba751672b9592f3593750cb2fd"
+ }
+ }
+ ],
+ "hash": "0x58e74715d125d7cbd4c7a98b8aad1518cfaaf118e9e0defca5728b9430946249",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x9c6275bfed126d72f67238e8617ef96a7d9f101a2efed8076d448c731ec8416e"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9b4ed74a5469e89dd428a35929c57c901ef5dee0ea5a3e1979ac81d53dc2ea4e",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x111111111111111111111111111111111111111111111111111111111111111156455354303030310a00000000000000640000000000000001"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x5a8ff906574c1edf1e5fbd1487c723f67038565705582d8ac112264d57cbfe07": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x0ed6bca9b7b257ea7fd5b25d4f686479d892da1349a94a24c20be92d396dcaa3"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xe2bfd1c340bd2b8f529bc256d9c58274f2e5c65e443ca77fc78a26d4904e4969"
+ }
+ }
+ ],
+ "hash": "0x5a8ff906574c1edf1e5fbd1487c723f67038565705582d8ac112264d57cbfe07",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x115b8ecbcb808b3b25b5f9cbc4883d27337aea43395ded9325a2db79ff74e71d"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x37e11d600",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x7902ead8098947fb0d9cf87ed357d821d21c0e85505621627fbd81d873290140",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x44",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x37e11d600",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x44",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x00000000000000005645535430303031",
+ "0x4d000000000000005645535430303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412"
+ ]
+ },
+ "0x5debff60864d562bb94f7020d6a1180c7736815ee352e48c9905b920bc0cdf31": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xbe466bab7cff1e51bbd15ce13c297ff867f1b089231d2f4797f3e656f9f2fcdd"
+ }
+ }
+ ],
+ "hash": "0x5debff60864d562bb94f7020d6a1180c7736815ee352e48c9905b920bc0cdf31",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa27c6e786f9e6d95b23f3db81ae171b79cd438041bcc74fce0f9382398849b92"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x6c976866fb9c343bd28922b92aca893f292fed889e52b75a59a10f738b31f4e7",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x37e11d600",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x6c976866fb9c343bd28922b92aca893f292fed889e52b75a59a10f738b31f4e7",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x2800000000000000544f4b454e303031",
+ "0x0200000000000000544f4b454e303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x5e784733c02e52fe1d4c6996255dcfdbf2b792d69c36414970e539e90901d2b2": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc1992e679cdcbc64bb722f94b5d226099b2b9ead0529e4ccf45833055f369b2a"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf0738d58ce079764795b431bbfd979cb1e39fa1672b01a35e6c50648a7831211"
+ }
+ }
+ ],
+ "hash": "0x5e784733c02e52fe1d4c6996255dcfdbf2b792d69c36414970e539e90901d2b2",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x3b5f601fb0d58eec101f8758734ca3adaa979411bc16d348e7dad955ae10f23d"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x14f46b0400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xee0a4d051aeb5c2c39df4eeeda6a55b8cb9ea79a964b905d3288c0d83138fabc",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xf2",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0xf3",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0xff00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ee000000f6000000fe00000065dfc0aa4a73f351b42a0bad8e1e57f7befd37622ec7fc56087c9cad02990593010000000000000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5c003664eabff06921f646efbb743006b9544de3a96a399db5870777e5e8d78a7b2df40100000000000000000000020200000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5cc7b799a057ff213011b152a94d895d9e5b1eeb05e376f7122464ff11bc93207a1400000000000000b40500000000000000",
+ "0x0100000000000000c7b799a057ff213011b152a94d895d9e5b1eeb05e376f7122464ff11bc93207a1f00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x44000000100000001000000044000000300000004353415247763100c7b799a057ff213011b152a94d895d9e5b1eeb05e376f7122464ff11bc93207a1f00000000000000"
+ ]
+ },
+ "0x5e9cccf3c3feeef58ad7e21e3b611b765752e45370870fbdcb2363fe645e714d": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x1d3726f0eb930917dbb02cb08aa68622494014245a885c60e4d1df758f245b49"
+ }
+ }
+ ],
+ "hash": "0x5e9cccf3c3feeef58ad7e21e3b611b765752e45370870fbdcb2363fe645e714d",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x31aa013f1e5e95cef0f8a5cc0a4dc6c069ad72d6a2989a7aa02e13c7d30576c8"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x31aa013f1e5e95cef0f8a5cc0a4dc6c069ad72d6a2989a7aa02e13c7d30576c8"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x2",
+ "tx_hash": "0x31aa013f1e5e95cef0f8a5cc0a4dc6c069ad72d6a2989a7aa02e13c7d30576c8"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x15",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x14",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x2a00000000000000544f4b454e303031",
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41200000000000000005baf451ed7373f0615c332dd7cf063955378dcf10b7a6fc35b0146cf4ca5182b"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631005baf451ed7373f0615c332dd7cf063955378dcf10b7a6fc35b0146cf4ca5182b",
+ "0x",
+ "0x"
+ ]
+ },
+ "0x5fae038da17633b4994474ccfab8cd4769b9670ca984573a047d8e73fa1321f9": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x1fc61e5ec8572c8853a001a40fa7acef0190c6833da6ec3e407bd2863c986a45"
+ }
+ }
+ ],
+ "hash": "0x5fae038da17633b4994474ccfab8cd4769b9670ca984573a047d8e73fa1321f9",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xe2caa37ca2e0591eb4662a9c263d9bbd2fb0c1717253b0e909e24658f5d5dbf9"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x540be7d1575ea9e60a6df5678ec2e4dc857edb687f1ad2f8359317be2288ff60",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x540be7d1575ea9e60a6df5678ec2e4dc857edb687f1ad2f8359317be2288ff60",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x52",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd3080200000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5cedf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0201000000000000000a00000000000000",
+ "0xbf00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ae000000b6000000be000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd308010000000000000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5c0064f944c22f0db7bfb29aa523b65cbb75a6a65b369febfbff0ffc17facacfe2dcf4010000000000000000000002000000001400000000000000b40500000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x6c00000010000000100000006c00000058000000435341524776310086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5c64f944c22f0db7bfb29aa523b65cbb75a6a65b369febfbff0ffc17facacfe2dcf4010000000000001400000000000000"
+ ]
+ },
+ "0x638614460e8f5f22cc0aff1077c4ab63559f16b230b4230bc0767abad961fd13": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x4549c1c05bb03fe8c884c329830b6ba4cbc4fe2f560fa5db94addb128fc14015"
+ }
+ }
+ ],
+ "hash": "0x638614460e8f5f22cc0aff1077c4ab63559f16b230b4230bc0767abad961fd13",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x14a53cee63255d44aa2c329fdf93f911de92ece53bfc45773039df1d26b4005d"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc39605e25bec7c9fe1297e640cf6ef42128dff83cec50c6e94bcc1eeb7aa268a",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0xdf00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ce000000d6000000de000000444444444444444444444444444444444444444444444444444444444444444401000000000000001111111111111111111111111111111111111111111111111111111111111111003333333333333333333333333333333333333333333333333333333333333333f40100000000000000000000020100000011111111111111111111111111111111111111111111111111111111111111110a00000000000000d00700000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x6643966a91792a95d2fa6dc1fa6e1cf1a1c1c677930c6d95df344e7edbbab27b": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x3ee712eb9ce234366e17d006c3a022f164cd052b1739c8d0b1ddfaae7fdab1b2"
+ }
+ }
+ ],
+ "hash": "0x6643966a91792a95d2fa6dc1fa6e1cf1a1c1c677930c6d95df344e7edbbab27b",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0xef62d924ff6af766acc21727b36c6e6483fac2768527599bf597348eb3c55a91"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x0a0b8c20de2b149b74926989ccef6f20ab3984e666b923dfb78610c569e753bc"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x0a0b8c20de2b149b74926989ccef6f20ab3984e666b923dfb78610c569e753bc"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xc67554cbd1c3973fe04e014c2271023a82d9874a4b84ec38bda8bca1f9a65b26"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0xc5",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0xc2",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x37e11d600",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x967d150b17ee92167fda6eb3b28e453cfc084f19c7cbfc773bb3f1b93d4dea61",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xc4",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x37e11d600",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xc4",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x01134f3e5fc0e711c8860ae1fe92cdf6797bb68e4059cf057a4ea9eae6b9e2d00100000000000000619e5495bb676cb83755e01c2a2e40f8d285eef0051bb7b6ccbec3d9810e023833333333333333333333333333333333333333333333333333333333333333333b27b52bcff21bb54b5ab2951b1ee1153fa29982ff473bf003e6097276b6d55cfa00",
+ "0xfa000000000000005041594d30303031",
+ "0x16260000000000005041594d30303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c000000280000004353415247763100619e5495bb676cb83755e01c2a2e40f8d285eef0051bb7b6ccbec3d9810e0238",
+ "0x",
+ "0x",
+ "0x"
+ ]
+ },
+ "0x67be331af3ce7812f3b9acc4dd3f4e6fdda26bce7daaf7e97250aa7a018214ce": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xac7777ae99467a32a740f9f89776f0a5c1a17808c49e29e69a1b193d9f751e1b"
+ }
+ }
+ ],
+ "hash": "0x67be331af3ce7812f3b9acc4dd3f4e6fdda26bce7daaf7e97250aa7a018214ce",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1f7b418973fc0723338fc7f2ff45fbd774b0afe291bca5e12e501388fc0d1f8a"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631001111111111111111111111111111111111111111111111111111111111111111"
+ ]
+ },
+ "0x69a432d0677efdd81acdd9ee50ac097f3cfe6e4dc981c86cb3bf7b090d32b833": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x86c3b29ad0bba4281c2d58d64030f41ad9242dcce7416f20c67130a0df8b5e46"
+ }
+ }
+ ],
+ "hash": "0x69a432d0677efdd81acdd9ee50ac097f3cfe6e4dc981c86cb3bf7b090d32b833",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x3a4ef8679d5d77f3e7cc52e77b60c86533a2bcb68dc4fd32b00e947a15a8aaa9"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x3a4ef8679d5d77f3e7cc52e77b60c86533a2bcb68dc4fd32b00e947a15a8aaa9"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xee46f625f63eaccefbc7c9bf1393a21295d1d21e712fc704523d6f349a39ca26",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xd3",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x513c43aa3e994cbdf9bcd7903f1e220882873ad830b3eb024cdeefe2ca3afcb3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xd4",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x3850aba1ee6b423273975d12fb627dde7af42441026f269f09c44615a1a85b0845e5adc64633f8c455d0a0257610c5915b8223518dfa9beb1ae64502628b36b7414d4d4130303031414d4d42303030310400000000000000090000000000000006000000000000001e00",
+ "0xe8564582cfb212e256ae6674d1224e7e09759592eb5dd7c1227430e9bf7132b40600000000000000ed765278a6a68d4a9135c503f9ce0fc652eaad62fbb857b24bfdf9d6e0955a3c"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3e00000010000000100000003e0000002a00000043534152477631001e00ed765278a6a68d4a9135c503f9ce0fc652eaad62fbb857b24bfdf9d6e0955a3c",
+ "0x"
+ ]
+ },
+ "0x69d4ed19143215adfaec3dd6a0030b59200a21d8931079cd8504c0726bbe866c": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf0f807aecb16aaf7820fdb2c70d719912dd02d8274f76343fc42eebdbc3bcc02"
+ }
+ }
+ ],
+ "hash": "0x69d4ed19143215adfaec3dd6a0030b59200a21d8931079cd8504c0726bbe866c",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x7a476dcd9c82d876e0f00b36dfd4fc1854b923a7bf7fd2a26150ab0513213348"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x18758b10cc53dcf2fcd775462ec3ad8052ca19f21158a315eedc926cd085d520",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x00000000000000000000000000000000000000000000000000000000000000000100000000000000111111111111111111111111111111111111111111111111111111111111111144444444444444444444444444444444444444444444444444444444444444442222222222222222222222222222222222222222222222222222222222222222fa00"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x6a3d32809ed36e7835e40e027dc05ee5adc36c9f04cc84866dfd3b58fe0f3043": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc71e873453ffa750d9ef781214a1e015b9fe92ba751672b9592f3593750cb2fd"
+ }
+ }
+ ],
+ "hash": "0x6a3d32809ed36e7835e40e027dc05ee5adc36c9f04cc84866dfd3b58fe0f3043",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x9b21a90dc923eaf2dc8abc0242fecb36d549408e6226138714851cab22d5e336"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9b4ed74a5469e89dd428a35929c57c901ef5dee0ea5a3e1979ac81d53dc2ea4e",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x111111111111111111111111111111111111111111111111111111111111111156455354303030310a00000000000000640000000000000001"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x6f6ed0c878e8dd8d80724a1b65adbc3ff9509f1727f2432790be4d5aebafb7ff": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc8d09aa1bd1628fbcbaf36c8708d86a6ae276bbada0a5b3f032f3c4188bcc9f2"
+ }
+ }
+ ],
+ "hash": "0x6f6ed0c878e8dd8d80724a1b65adbc3ff9509f1727f2432790be4d5aebafb7ff",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x349aa74d03c45384b56f8dbc5aef108759d23116eeba59a92774cfc08682bf67"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x828a52262139378ce50e40ea7a24d4e8d8219cb2b9ae8f0e2a2cde2a8712a546",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4128755508da7aa1fd862ab37b0e6ef59a8cb026c9bacc0c07e838683cb6cf3404e0119000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x640000001000000010000000640000005000000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4128755508da7aa1fd862ab37b0e6ef59a8cb026c9bacc0c07e838683cb6cf3404e1900000000000000"
+ ]
+ },
+ "0x715c3e373c2d4cc35c03c86a41031d7f8be2bc768e644461eac57e5eab004d28": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x54ea0c5e8948e5691f98bebe41b5071a4a8c762ca435c622761508af8cd4e51d"
+ }
+ }
+ ],
+ "hash": "0x715c3e373c2d4cc35c03c86a41031d7f8be2bc768e644461eac57e5eab004d28",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xc1a6e6f593ae6b52c28cab12c650db48041bbcb1ae6a7e06b800c199c6d8a4da"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x93f05f4fb67225c694ab2cb4c4b57125136e08fcff490458f42fa63e26086bdd",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x23",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0xbe0000001c0000003c0000005c0000007100000079000000bd0000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412414141414141414141414141414141414141414141414141414141414141414111000000656d657267656e63792072656c656173657800000000000000020000004242424242424242424242424242424242424242424242424242424242424242a5fa3ab929ac363193de55b810aaac99277989f8550a29501c8d393e11a16ee500"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c000000280000004353415247763100a5fa3ab929ac363193de55b810aaac99277989f8550a29501c8d393e11a16ee5"
+ ]
+ },
+ "0x71ebb2e3086c8a436787a22c176235cc45e7b75779ba47d34bd390f41b4b9af5": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xac7777ae99467a32a740f9f89776f0a5c1a17808c49e29e69a1b193d9f751e1b"
+ }
+ }
+ ],
+ "hash": "0x71ebb2e3086c8a436787a22c176235cc45e7b75779ba47d34bd390f41b4b9af5",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x8795ebb4c7d5d03abcc518a9b13121a77c850e6fa9e6b62e108c3c22b40b1cc6"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x6d3f4ff4a0012611cfad302ba4de186169643407d6fb5b302cbd11183f5b280e",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000001000000000000001111111111111111111111111111111111111111111111111111111111111111f4010000000000000a0000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x73908c7815c16a3a45f876d8695355d173f8d1ab68c8b7e74d2bd6d398d440ae": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x5a42e270ccd43a33e96ba446dc3305288ff81717caf6d657da2f20c5cfda25d8"
+ }
+ }
+ ],
+ "hash": "0x73908c7815c16a3a45f876d8695355d173f8d1ab68c8b7e74d2bd6d398d440ae",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x402005d53808fc439e58003f9ffecbc77ab2cf229dbf93bff3888221c05c37cd"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x204920209dab2137b0f75335063856cc1e84d28b41d1e31c2160614832de50ec",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x204920209dab2137b0f75335063856cc1e84d28b41d1e31c2160614832de50ec",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x52",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd30802000000cf8cbc02d90b9e9bca7eb320ce67edfcf62400cd2a8bfb81a8104cf3942bca74edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0201000000000000000a00000000000000",
+ "0xdf00000034000000540000005c0000007c0000007d0000009d000000a5000000c9000000ca000000ce000000d6000000de000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd3080100000000000000cf8cbc02d90b9e9bca7eb320ce67edfcf62400cd2a8bfb81a8104cf3942bca7401d07ba215cc89ea5a359c4a8ab2a8a483caf0f466281ce46d2d5b862e8d8dcc3d000000000000000020000000d07ba215cc89ea5a359c4a8ab2a8a483caf0f466281ce46d2d5b862e8d8dcc3d02000000001400000000000000b40500000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x64000000100000001000000064000000500000004353415247763100cf8cbc02d90b9e9bca7eb320ce67edfcf62400cd2a8bfb81a8104cf3942bca74d07ba215cc89ea5a359c4a8ab2a8a483caf0f466281ce46d2d5b862e8d8dcc3d1400000000000000"
+ ]
+ },
+ "0x740f68ba912a942022541741c57d332680fb0d6d73fece3763ce2f1a1a4d0628": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x297acc94d2c6e532490f039bfbfeed7c2e494fef06b7adb6cf00a4287dca0a73"
+ }
+ }
+ ],
+ "hash": "0x740f68ba912a942022541741c57d332680fb0d6d73fece3763ce2f1a1a4d0628",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1fb33087bb84449f9219ff127824406cc1ad70f99c4f04d583d6e4a80753cf3b"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x93f05f4fb67225c694ab2cb4c4b57125136e08fcff490458f42fa63e26086bdd",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x23",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x9e0000001c0000003c0000005c00000071000000790000009d0000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412414141414141414141414141414141414141414141414141414141414141414111000000656d657267656e63792072656c65617365780000000000000001000000424242424242424242424242424242424242424242424242424242424242424200"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x7a8b320dab64745045b14d0bc21679b0d6b136775eae11033b5041b6f2912c5a": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xeb13566917d6910918b1ccecac0c80f748dd0947169e3771684db5322187b986"
+ }
+ }
+ ],
+ "hash": "0x7a8b320dab64745045b14d0bc21679b0d6b136775eae11033b5041b6f2912c5a",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xb5bb69474889615326f43e030a432ec50a00f3a71c093557029ac47e171bb34d"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0xb5bb69474889615326f43e030a432ec50a00f3a71c093557029ac47e171bb34d"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x2",
+ "tx_hash": "0xb5bb69474889615326f43e030a432ec50a00f3a71c093557029ac47e171bb34d"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x3",
+ "tx_hash": "0xb5bb69474889615326f43e030a432ec50a00f3a71c093557029ac47e171bb34d"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x24",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x24",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000007000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00",
+ "0xfa000000000000005041594d30303031",
+ "0x16260000000000005041594d30303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100",
+ "0x",
+ "0x",
+ "0x"
+ ]
+ },
+ "0x7c08591b593710f6481af4afcbbdb671fa46332b64a890850192409e7a7242c2": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x16fe2ced0417b0a62f56bffaea8082d4901f2327c2b3f0e8e6f7d867575a1ee4"
+ }
+ }
+ ],
+ "hash": "0x7c08591b593710f6481af4afcbbdb671fa46332b64a890850192409e7a7242c2",
+ "header_deps": [
+ "0x8ddb85198d040fa97fc5d43e6d725e5b5ed0bf285022cc66a10e9bb1379bfecb"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x049df337a2dff720c87c75a9aee3508694c52030e387d1820a4afa28a14b8254"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xcc321278301291afc3c43ae43d5e3e3c10ce9cf0658c3063587b0123cdce7cef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x45",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xcc321278301291afc3c43ae43d5e3e3c10ce9cf0658c3063587b0123cdce7cef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x43",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x1e000000000000005645535430303031",
+ "0x00d51ef4e28799d94e9046a2873a2974c4fbe51572f6fd1d579cd43f4bf679fb87640000000000000032000000000000000000000000000000000000000000000016000000000000005645535430303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0x7dbcaed57f3138633b094969af7e098cfc7e5615d0822585ef1bc3d2a0621514": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xd0b58fa147e5809651e0e3ec1edf1ebd5d25f78cd62529195d11c23bebab6f72"
+ }
+ }
+ ],
+ "hash": "0x7dbcaed57f3138633b094969af7e098cfc7e5615d0822585ef1bc3d2a0621514",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x5065689f1cfd78aac7cf05f9f31ac375afbb37740bde275f017eb66b26aa2973"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x582102f2b60c104220dfb5607341b748d7a0651050af5d2ee44f3a5fc540ce1d",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x444444444444444444444444444444444444444444444444444444444444444411111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x7e40aa9553c4f2c63d5ae3732a4d57a9e697e14b8bf8428dcd99574709a66b9e": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xd0b58fa147e5809651e0e3ec1edf1ebd5d25f78cd62529195d11c23bebab6f72"
+ }
+ }
+ ],
+ "hash": "0x7e40aa9553c4f2c63d5ae3732a4d57a9e697e14b8bf8428dcd99574709a66b9e",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x7dbcaed57f3138633b094969af7e098cfc7e5615d0822585ef1bc3d2a0621514"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0x7ebc3eee04e3daaf2d17874dcb156ce493376dfb56327782ad398567d2d154ee": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x7f27bfaffe26061a6317a13ef25b9a6c7aa5ace6f31f4463fec22eb89aed6d18"
+ }
+ }
+ ],
+ "hash": "0x7ebc3eee04e3daaf2d17874dcb156ce493376dfb56327782ad398567d2d154ee",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x66714451088a178f55c3f7a67c56800a817ec3314fabd8ed14f3b8172b43f8d9"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x078a625eb933f34dee98290d89c9cd6b57ab95d8bb1a89f254f422649a972954",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4128a166edfc898dd17d9c3968fdee59e903e0b98ddf23d77c870dee1585cce89020064000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x8128c4595a00a0cc220271dded5f787a8106cbefee1554c9719e586e76b9893f": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x2da50f9b01999a58735ab822ba3bc2b743d5d297b196e77f7cbbe84bc2766aac"
+ }
+ }
+ ],
+ "hash": "0x8128c4595a00a0cc220271dded5f787a8106cbefee1554c9719e586e76b9893f",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x835773fb38ff3537ca5a342019797b8ac9f66e92beaf0308bd39cf93eec19ad0"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631001111111111111111111111111111111111111111111111111111111111111111"
+ ]
+ },
+ "0x835773fb38ff3537ca5a342019797b8ac9f66e92beaf0308bd39cf93eec19ad0": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x2da50f9b01999a58735ab822ba3bc2b743d5d297b196e77f7cbbe84bc2766aac"
+ }
+ }
+ ],
+ "hash": "0x835773fb38ff3537ca5a342019797b8ac9f66e92beaf0308bd39cf93eec19ad0",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xe698912826f745a5cd946be2a3714100a90cb83a80f7fd6d9563b819d96f5714"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xaebdd9d7c1cd1a9b581bc3a42a6c5f40d5b41f2ee637f7a1b4e4eef38500c349",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000444444444444444444444444444444444444444444444444444444444444444402000000111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222220200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x86a24cb3b26a8379df76a852b569c5148b51988ba34b411062d49a545fb0d876": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x757f318b25b23b441765bcbfac6ae04d0986ffcbdbc86cc58ebdd7eef79c65fc"
+ }
+ }
+ ],
+ "hash": "0x86a24cb3b26a8379df76a852b569c5148b51988ba34b411062d49a545fb0d876",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xabeea9b1c46e3715dd21a1fdbbc297ef86423d8fb3d2f10adfc60487cb3f7a49"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0d708753715b0c50502a06fea8c0d48b890212a5217b4330b7a77805a71f3dd7",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0xff00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ee000000f6000000fe000000444444444444444444444444444444444444444444444444444444444444444401000000000000001111111111111111111111111111111111111111111111111111111111111111003333333333333333333333333333333333333333333333333333333333333333f401000000000000000000000202000000111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222220a00000000000000d00700000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x8729c54e1abbda37d62f0a446976f690613c634292e5e895b063547c5caa8e70": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xec73cb2253c130c509a2fb0fa9557411c1bd607b51eb3ed20153393ca8c72157"
+ }
+ }
+ ],
+ "hash": "0x8729c54e1abbda37d62f0a446976f690613c634292e5e895b063547c5caa8e70",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x0fc3217536599ec792bf62408185b2a5c32103c994bd312fa19dbb7d02a957ac"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa34564aa114e28106b02f63243b50f5135adc633ff7a74e735d27e9404bf0710",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x860000001c000000350000003d0000005d000000650000006d00000015000000416363657074616e636520436f6c6c656374696f6e0400000041435054318db5041f6426dc6a98825d53904d3a1e578215ffdc93ce6322fa53b18cd3610000000000000000c80000000000000015000000636b623a2f2f63656c6c7363726970742f6e66742f"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x8a00000010000000100000008a000000760000004353415247763100318db5041f6426dc6a98825d53904d3a1e578215ffdc93ce6322fa53b18cd361c8000000000000001900000015000000416363657074616e636520436f6c6c656374696f6e0800000004000000414350541900000015000000636b623a2f2f63656c6c7363726970742f6e66742f"
+ ]
+ },
+ "0x899bac1c9e02a9ca6cd47386e6fd5470d06ba1348a018b2acd8d3d0bbde2bade": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc3d498167f8fa254bdaed6029f276aacea9d662a5cd393b4cc19cffa2889fe25"
+ }
+ }
+ ],
+ "hash": "0x899bac1c9e02a9ca6cd47386e6fd5470d06ba1348a018b2acd8d3d0bbde2bade",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xb72fc8f97ab673b26bfb904541e07cd3820cd528c0df3166619168b72f79bc37"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa3bdc8e44991a1790d469db884797763ce5dd7ef8631b77f45c2d925633dbbd9",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x73",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa3bdc8e44991a1790d469db884797763ce5dd7ef8631b77f45c2d925633dbbd9",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x71",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x6d7122fbd537293591fef620082e9213b875ee6f8a926497a533aee6f4ff93560e7da160d8e77e9274a6fa6f8243153d2bae61ddf817d97c42e9cc7861e1f830414d4d4130303031414d4d42303030311027000000000000204e00000000000010270000000000001e00",
+ "0xe803000000000000414d4d4130303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x8b4922b49150481d756b6c3af4236357618d9dcbff0eee4e164ff3288640e9f5": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xe483d497e40139e1da27c2904f8438c0682a4ff9578d41a24eed218fa5ff76fd"
+ }
+ }
+ ],
+ "hash": "0x8b4922b49150481d756b6c3af4236357618d9dcbff0eee4e164ff3288640e9f5",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x29d306ab03fdfef7ef8fe68ab222e5b318f9a82732f3126627e691b40b2994fe"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x7cda3da79fb46eaed62752444d9d4f666897861039c77bf94f0532fc43162a70",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x7cda3da79fb46eaed62752444d9d4f666897861039c77bf94f0532fc43162a70",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x52",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d000000850000000000000000000000000000000000000000000000000000000000000000000000020000007d079c63043b805af33e1b72b25e83ba2897b47af215f9174932de79e9393d01edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0101000000000000000a00000000000000",
+ "0xbf00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ae000000b6000000be000000000000000000000000000000000000000000000000000000000000000000000001000000000000007d079c63043b805af33e1b72b25e83ba2897b47af215f9174932de79e9393d0102edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae00000000000000000000000001000000001400000000000000b40500000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x640000001000000010000000640000005000000043534152477631007d079c63043b805af33e1b72b25e83ba2897b47af215f9174932de79e9393d01edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae1400000000000000"
+ ]
+ },
+ "0x8b85a45b4b3c0da4633ca155697290d15ec99bb27068b1a2f611d49214869704": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x6988a589235f9fd830f970f1302dbeb1685104a75ff5c95e13fa8f833fa67f84"
+ }
+ }
+ ],
+ "hash": "0x8b85a45b4b3c0da4633ca155697290d15ec99bb27068b1a2f611d49214869704",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x49806df28e0ddba29d6678861a68552f533ef8be66a3a554e12bfb4ff3228337"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x13814f1b2b6fa776385ebf4a63ee7ec94ebc806957ac34dc565d573e7f9b0f4f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x62",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x13814f1b2b6fa776385ebf4a63ee7ec94ebc806957ac34dc565d573e7f9b0f4f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x63",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0400000000000000414d4d4130303031",
+ "0x0900000000000000414d4d4230303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x8cfc356815eccbcae35af59d0034cdda7af6094bb3a6e95e1b89b799f5d4cca5": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xfc01255f8d4c79d2307cbf689795022d46555c16027b3c954bc9969ec7387d81"
+ }
+ }
+ ],
+ "hash": "0x8cfc356815eccbcae35af59d0034cdda7af6094bb3a6e95e1b89b799f5d4cca5",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x8e6c407a748b66fd7f9a77896102faaa945086fafdf0d3e01c4d595ff8834bbe"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xca92833ef77901845dd672a356fa9e568a3d46f179a1df5469dbbc05b7313427",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x1f",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x2a00000000000000544f4b454e303031",
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412156c2221f53a61d6d5a035d0d8ee30837f4503dd0cca1f1901317c357fdcacd800f4010000000000000100000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x8e884dba5cfbc95c6e63d17866f4568b4fb2f28003b49d51d98ce98042d5c3b1": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x6b76a471c376d588ebcc61b7ace0fd489d5015ce27ca1d261927a05e12c35e3f"
+ }
+ }
+ ],
+ "hash": "0x8e884dba5cfbc95c6e63d17866f4568b4fb2f28003b49d51d98ce98042d5c3b1",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x276185522c8293f202a9cd62aa08de0d351a79ad52619900408546cca3ffb5f8"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa082732704b5885b30b692c60030e4fc137fe6be30a8f0dc9a024458ac97f783"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x7141eb99856d0a6a3923546546cdd2c8dc894c542348e4f27acf6b20b52213fb"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xdbd009c29602a2a2cce27bdf67345b95a9950473b5d2abdb64508903b9092503"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x5d21dba000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x450a496151c4111710cd56ffe7558b63b2a5e22e0ad7fd33edcf52173121c440",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x63",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0xfa000000000000005041495230303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x90885689172ed74eedb55cca655df84188643e6cd752f1aa350dc8cb9679dd88": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xe274608e446e15ce0f9ec8680954950c72336954fb025575fb4a310bad2c3d63"
+ }
+ }
+ ],
+ "hash": "0x90885689172ed74eedb55cca655df84188643e6cd752f1aa350dc8cb9679dd88",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x5f7e68e39b7606ffe8fb6730ed62c594e8b84ad854fdb45df92b1e05ee199124"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2ca9877f46bc3e89b31d76e256714e075ad57732d7fcd489fdc6aa636772f93d",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000001000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412"
+ ]
+ },
+ "0x95cf642ae48c517930fe6e3c737fd3981c2f910242f22d5dee7ab53f44c20d9f": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x4e6498bb05ab2acef4f3dc7aca48bea59b65a76ba1be2359d334621a701672c0"
+ }
+ }
+ ],
+ "hash": "0x95cf642ae48c517930fe6e3c737fd3981c2f910242f22d5dee7ab53f44c20d9f",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x56c800e60d9f2a4a012acf29ebfa72256bbfa55276cacb9ba6c4e828372975f3"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x513c43aa3e994cbdf9bcd7903f1e220882873ad830b3eb024cdeefe2ca3afcb3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x6e",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0xdf8475800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x513c43aa3e994cbdf9bcd7903f1e220882873ad830b3eb024cdeefe2ca3afcb3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x6f",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0358b5b4af3799ee4f7fbb489135f67e4b316c3a6bc5ef6e31a7b80958ea1569ee44736c2a40bb9b927c93b719db9a3681696c42caa38f292b3a0423234fff93414d4d4130303031414d4d42303030316400000000000000c800000000000000e8030000000000001e00",
+ "0x1613b7f52b423c70c7351fd7417b8b1532df3b07313b23ccd595f51552ccf0e164000000000000005d4eec43082abf0f7a62b2f9682051adeb7e017c32f00756482c17985bef0bd6"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x964480ea9d113044f45b7aa836999dc9486a95c1f3786c7ffaa6df2a1457cc0c": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdff9e4e52961c196f41c52c2d211468dfa6b3af8c4f194a02d4bc59bfe39d066"
+ }
+ }
+ ],
+ "hash": "0x964480ea9d113044f45b7aa836999dc9486a95c1f3786c7ffaa6df2a1457cc0c",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x073245d0e75464ee92f0f4a3264f989fe4ea3c11dac3e4a1abd6084ea8dc2305"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0x96729af7693292d31397d4ebdf3624d743424a305cb8c4f7c6bdc5ad63111c9e": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc145bbbef86e1441c587b6a24a8007c687becdb42b503a349b06475e8a86de48"
+ }
+ }
+ ],
+ "hash": "0x96729af7693292d31397d4ebdf3624d743424a305cb8c4f7c6bdc5ad63111c9e",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x75b5f01c9b1084b6555ac61833d40d2860594ffd8f04544d09f94e4818bed2d8"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xf51e1060b13ba495ab2cac42ab5102d7ff6bb2c00df50f115846b5fcc9429298",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x52",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0xbf00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ae000000b6000000be000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd3080900000000000000fbf9445aa019c17dbdd072cae5c7840097cba346940a427fc4269257922e5bf70064f944c22f0db7bfb29aa523b65cbb75a6a65b369febfbff0ffc17facacfe2dcf4010000000000000000000002000000001400000000000000d00700000000000000",
+ "0x8d00000018000000380000007c0000007d00000085000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd30802000000fbf9445aa019c17dbdd072cae5c7840097cba346940a427fc4269257922e5bf7edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x98b4b13e3fc4f920bf1ae1626c1959f156e3d8ba0b608e4742e6e8ef998a149f": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdb30f9d5f126ed97836bb953e06415433f7367a42dd24b0a6b53f934259b70c9"
+ }
+ }
+ ],
+ "hash": "0x98b4b13e3fc4f920bf1ae1626c1959f156e3d8ba0b608e4742e6e8ef998a149f",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x03d0a2e99d75a22d0d4751e49817d0da8584223a20bfdca8ec32e4da959a0d9f"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x31d33d47ea68158d86bae548d378ef89d9ea6d80a7b8cded0320296ac8ff0a83"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x214893fb9dd10fe10e4a92ef80b06c126808256f524d308629c828a49c4327de",
+ "hash_type": "data1"
+ },
+ "type": null
+ },
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x214893fb9dd10fe10e4a92ef80b06c126808256f524d308629c828a49c4327de",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x544f4b454e30303164000000000000005555555555555555555555555555555555555555555555555555555555555555",
+ "0x444444444444444444444444444444444444444444444444444444444444444411111111111111111111111111111111111111111111111111111111111111110064000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x9c2c24f15cb3583f2f36a4bf4febc0fed09c369a71f5c3cd2148e206b8d788ee": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x7f27bfaffe26061a6317a13ef25b9a6c7aa5ace6f31f4463fec22eb89aed6d18"
+ }
+ }
+ ],
+ "hash": "0x9c2c24f15cb3583f2f36a4bf4febc0fed09c369a71f5c3cd2148e206b8d788ee",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x7ebc3eee04e3daaf2d17874dcb156ce493376dfb56327782ad398567d2d154ee"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x078a625eb933f34dee98290d89c9cd6b57ab95d8bb1a89f254f422649a972954",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4128a166edfc898dd17d9c3968fdee59e903e0b98ddf23d77c870dee1585cce8902006e000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x440000001000000010000000440000003000000043534152477631000a000000000000008a166edfc898dd17d9c3968fdee59e903e0b98ddf23d77c870dee1585cce8902"
+ ]
+ },
+ "0x9cc87bc8882895ab82b3cc4c91c1a6da4a0831019bad2b9454fb7195d703420f": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x339055295d20077427f346e209218b486acf729ef51fab4051a6c08999fdf40a"
+ }
+ }
+ ],
+ "hash": "0x9cc87bc8882895ab82b3cc4c91c1a6da4a0831019bad2b9454fb7195d703420f",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x44e53c1d471b7bdfbda6816b72152f0c83550a5296edac7313b645ccde8527dc"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x2a00000000000000544f4b454e303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412"
+ ]
+ },
+ "0xa0ad32ea6682bbe84f394ed740b42c4412c497273adb2955e6cbbba2d6d25137": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xef6eddcdb6a4500202839de5d3929cdcb7ade4274dee72021b5612314ad01235"
+ }
+ }
+ ],
+ "hash": "0xa0ad32ea6682bbe84f394ed740b42c4412c497273adb2955e6cbbba2d6d25137",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x3e7ce34e4208d96287e089a8e7cf9e706fac3c0735d0951c7669b1f4191b92c5"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2f95e743beef860d851bf2277fc56c036c5be0b956db68627791b404b45067e9",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x00000000000000000000000000000000000000000000000000000000000000000100000000000000111111111111111111111111111111111111111111111111111111111111111144444444444444444444444444444444444444444444444444444444444444442222222222222222222222222222222222222222222222222222222222222222fa00"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xa0d20ba71c2ee983d8b2ce0c261dad1978f0c078122ec9cf711ece0d24d6b223": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x605ff9349d7a02a281af3488d3f7eeedea672de6d61f015759297b95cec97b33"
+ }
+ }
+ ],
+ "hash": "0xa0d20ba71c2ee983d8b2ce0c261dad1978f0c078122ec9cf711ece0d24d6b223",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x4b79a85846e54477f3689cc8fa64e3488e1f6c7da2ad02b12b4d7a623a8093f4"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2ca9877f46bc3e89b31d76e256714e075ad57732d7fcd489fdc6aa636772f93d",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000001000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412"
+ ]
+ },
+ "0xa120df0ec121ee17c99593ca6475b3874bd6fff05693e1e579f03c878e6b6303": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x969891936e2843de5c335b05af807ebe3ffc6d6f3e371e129c150b7944389b27"
+ }
+ }
+ ],
+ "hash": "0xa120df0ec121ee17c99593ca6475b3874bd6fff05693e1e579f03c878e6b6303",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xcc6acde163e8d23052be1f9fa08173cc664713ef99f8921d8bfb8b71f9f6a9a6"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x87c083fadb4ec6e5823e9bd76b000f7b98f4b374cea82ed6a528915317d8a59e",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x860000001c000000350000003d0000005d000000650000006d00000015000000416363657074616e636520436f6c6c656374696f6e040000004143505411111111111111111111111111111111111111111111111111111111111111110100000000000000e80300000000000015000000636b623a2f2f63656c6c7363726970742f6e66742f"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xa278863a1589ef75f641ead8c869a21b4f426a167f4814927af651f01de54cea": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xfa1320af6eff6f2b2b69e30391ca3a027c259318a86dca32e3238884311b84d7"
+ }
+ }
+ ],
+ "hash": "0xa278863a1589ef75f641ead8c869a21b4f426a167f4814927af651f01de54cea",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x238f2ceedd51e0575705f189111340520552a861e09666e47b4517ef10757b01"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x12a05f2000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x967d150b17ee92167fda6eb3b28e453cfc084f19c7cbfc773bb3f1b93d4dea61",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xc1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d0000001c000000330000003b0000005b000000630000006b00000013000000537461746566756c20436f6c6c656374696f6e04000000534e46543b27b52bcff21bb54b5ab2951b1ee1153fa29982ff473bf003e6097276b6d55c0000000000000000c8000000000000001e000000636b623a2f2f63656c6c7363726970742f737461746566756c2d6e66742f"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x910000001000000010000000910000007d00000043534152477631003b27b52bcff21bb54b5ab2951b1ee1153fa29982ff473bf003e6097276b6d55cc8000000000000001700000013000000537461746566756c20436f6c6c656374696f6e0800000004000000534e4654220000001e000000636b623a2f2f63656c6c7363726970742f737461746566756c2d6e66742f"
+ ]
+ },
+ "0xa74c6e001ecc03a1e0432afe27307efcfb85090f1ad2734deca603240a2da157": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x9f02df0a573644347b6f73102ec88a9c6be51b35fb36c6305e17048c3f13ec0d"
+ }
+ }
+ ],
+ "hash": "0xa74c6e001ecc03a1e0432afe27307efcfb85090f1ad2734deca603240a2da157",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xadd93fd1d69b52f2de36bfa1d108d8d143b137d7c043622fe1d1175589f748ee"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x078a625eb933f34dee98290d89c9cd6b57ab95d8bb1a89f254f422649a972954",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4128a166edfc898dd17d9c3968fdee59e903e0b98ddf23d77c870dee1585cce8902006e000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x440000001000000010000000440000003000000043534152477631000a000000000000008a166edfc898dd17d9c3968fdee59e903e0b98ddf23d77c870dee1585cce8902"
+ ]
+ },
+ "0xa8e8c60bbed4ebf0747eb82243ce7c6644d925a506d822cdc080dfc26a067dd2": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x2f2a53ea7336cf1d1b199a59b22148e7357d2e12846050a664cce5bf73094e80"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x17fdc71ba9532d39718b8f52c521c40c1f5c19b7194bad896326abddc303c7bb"
+ }
+ }
+ ],
+ "hash": "0xa8e8c60bbed4ebf0747eb82243ce7c6644d925a506d822cdc080dfc26a067dd2",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x0f7ef307cd4762342d70d780814b26f305dd44d149a9e91c37443b622b72e34b"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc5eb6cb03878c77e75b8462c561205189574fc4677e5538cc9136c10ab9921da",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xb2",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x544f4b454e3030312a000000000000007d84ad3da83e8ccab86a945f8bb0b74ebaa3d29369b01c5370dff1f340078ac0",
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0xab0f22960f33ac447c3075073190a7127930d337a090125a7279a8544f3d28d5": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x84949d0ac6b772fbe9eddc7aaecf1527609fb591c42129deea687f59d3bde57b"
+ }
+ }
+ ],
+ "hash": "0xab0f22960f33ac447c3075073190a7127930d337a090125a7279a8544f3d28d5",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa8ec24a7d804f12cdf165ba7019d8af530517535622350a74dd0d7c3acff1843"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x8f6887aa0f2b4aa9e92983daca7c37343c9594fba07a73d56c4a1dbd71c7c10d"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x3a35294400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x25",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x860000001c000000350000003d0000005d000000650000006d00000015000000416363657074616e636520436f6c6c656374696f6e0400000041435054ad2efee9b2aa7cf537c64f1adbbf7bf4d35accce0f9c25dc9e7b111ea4dc87ea1400000000000000e80300000000000015000000636b623a2f2f63656c6c7363726970742f6e66742f"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xabf216907540017b954863b29e925febb092f833c52f4b0c4678603a0c60cfd7": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xd0b58fa147e5809651e0e3ec1edf1ebd5d25f78cd62529195d11c23bebab6f72"
+ }
+ }
+ ],
+ "hash": "0xabf216907540017b954863b29e925febb092f833c52f4b0c4678603a0c60cfd7",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x166d2f0593e62b5bd99da592327fdf69f784a0624f95140a614a41f0ec048c6f"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x582102f2b60c104220dfb5607341b748d7a0651050af5d2ee44f3a5fc540ce1d",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x444444444444444444444444444444444444444444444444444444444444444411111111111111111111111111111111111111111111111111111111111111110001000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xac9d28c6d3ff7bbf0357a655c0aac471c77bb9ad97374dbc2d507eae0541a733": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x9b6af43c1c3e7556bbb8d2b570bf4c0c29bfc13989a59bc601a05810d7a78d85"
+ }
+ }
+ ],
+ "hash": "0xac9d28c6d3ff7bbf0357a655c0aac471c77bb9ad97374dbc2d507eae0541a733",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x40d1840247d7ff684bec814254db3e3a8d2515f59a3c02c6bd95a99120f10c20"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9da2791f3f0a46790e4b187a1d1dd15813f2c14883138631255c58b495a845d8",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9da2791f3f0a46790e4b187a1d1dd15813f2c14883138631255c58b495a845d8",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x52",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d000000850000000000000000000000000000000000000000000000000000000000000000000000020000004d594af7f4d8c8158e0225a7d1a80903f7ea8df3f81bc67791af289b03ae879dedf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0201000000000000000a00000000000000",
+ "0xc000000034000000540000005c0000007c0000007d0000009d000000a5000000aa000000ab000000af000000b7000000bf000000000000000000000000000000000000000000000000000000000000000000000001000000000000004d594af7f4d8c8158e0225a7d1a80903f7ea8df3f81bc67791af289b03ae879d0300000000000000000000000000000000000000000000000000000000000000000200000000000000010000000202000000001400000000000000b40500000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x450000001000000010000000450000003100000043534152477631004d594af7f4d8c8158e0225a7d1a80903f7ea8df3f81bc67791af289b03ae879d021400000000000000"
+ ]
+ },
+ "0xad8a03597cf6aeceb16aa4a16ccc2828bcbd49b1aa2861b5fa01440d6fe803e3": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0x515a67864ac1959d9cd4fa108ba421b195a4410f1878832bd01208b5d86e7fcd"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xba786ad1ae914446151de4ce6258fc3d780be1d17424330bbd6a36b6b87f30a1"
+ }
+ }
+ ],
+ "hash": "0xad8a03597cf6aeceb16aa4a16ccc2828bcbd49b1aa2861b5fa01440d6fe803e3",
+ "header_deps": [
+ "0x933f1ca9e878cbe88f51849a169762b1d11758cf7d62db67824490dfdb39d8e1"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x515a67864ac1959d9cd4fa108ba421b195a4410f1878832bd01208b5d86e7fcd"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x42",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x45",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x45",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x50000000000000005645535430303031",
+ "0x00000000000000005645535430303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412",
+ "0x"
+ ]
+ },
+ "0xaf62b59e32e627da106edf13d40c811ce3dec551c1d67ea8831100cf3862c90f": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x969891936e2843de5c335b05af807ebe3ffc6d6f3e371e129c150b7944389b27"
+ }
+ }
+ ],
+ "hash": "0xaf62b59e32e627da106edf13d40c811ce3dec551c1d67ea8831100cf3862c90f",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa120df0ec121ee17c99593ca6475b3874bd6fff05693e1e579f03c878e6b6303"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631001111111111111111111111111111111111111111111111111111111111111111"
+ ]
+ },
+ "0xb112c9cde54c7772d740ce548093c97278a1c295fd05a60d2999dbab9ef7186c": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0x33611509a83b78a19cf2ce0980216ef2aa22a359ffb7d07bf31fbd73c339444c"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xb58deece93c4942aa5ab1e0722ebfceaa8f9fabe3c6e8eb01dff0f2bd44b176d"
+ }
+ }
+ ],
+ "hash": "0xb112c9cde54c7772d740ce548093c97278a1c295fd05a60d2999dbab9ef7186c",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x33611509a83b78a19cf2ce0980216ef2aa22a359ffb7d07bf31fbd73c339444c"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x734c3177a05355d83a3be6c68309e377cfa444fc62d5d6504b3664ea090e9b02",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x22",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x7e0000001c0000003c0000005c00000071000000790000007d0000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41294ad7e819f84f5e26539b71e3e49ce236802e80d09e5ad2f3a0c8a17264b144211000000656d657267656e63792072656c6561736500000000000000000000000000",
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x5500000010000000100000005500000041000000435341524776310094ad7e819f84f5e26539b71e3e49ce236802e80d09e5ad2f3a0c8a17264b14421500000011000000656d657267656e63792072656c65617365"
+ ]
+ },
+ "0xb492fefbdce3c5a93e58b60643f9b3f851703401e75a5f6070e6e016bb1b6e48": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf0f807aecb16aaf7820fdb2c70d719912dd02d8274f76343fc42eebdbc3bcc02"
+ }
+ }
+ ],
+ "hash": "0xb492fefbdce3c5a93e58b60643f9b3f851703401e75a5f6070e6e016bb1b6e48",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xc0ca46dcc6d0c1c6ba5944656d1e5650b877f934911cb540e2b52a1f191f85b9"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631001111111111111111111111111111111111111111111111111111111111111111"
+ ]
+ },
+ "0xb629ee7fb29df995ea9fae1d02db475f878ffea6657cea91d21fe1986779692f": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x14e410f98eb197fc6a336f68534cee7ce181ab0d6ea6bc28a8f66acb6a3c8c44"
+ }
+ }
+ ],
+ "hash": "0xb629ee7fb29df995ea9fae1d02db475f878ffea6657cea91d21fe1986779692f",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x0f7efec9879eec40f3a9034d15db163c4a51adbf41ac67eb171d8e3944cd680c"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x2540be400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x1b82b117ab4e41de9f6652a54f2f2ee24abad190b04a935cf90075cf9f3da237",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0700000000000000544f4b454e303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xb74d691e2b3b09ba70b33cae3a78c04ab723fede031598d5ebbb30f3f79c8442": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x04ff3d5eebf352f6edd435d3c42bba62a2b84b65b79504643548e80b2d4d150c"
+ }
+ }
+ ],
+ "hash": "0xb74d691e2b3b09ba70b33cae3a78c04ab723fede031598d5ebbb30f3f79c8442",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x0cba9e700c8a662884ab05066a027cc22b03e79ac0facfcbe0d002acd391bc7f"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x67c60bfc34958c28b1d5277be6995af9920d480f60ded40806eaf173c704d10d",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd30802000000d3c12a90f9db949dcb505dbc44a10f1ea772924a1629c2084e30f136ed7c1cbeedf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x8d00000010000000100000008d000000790000004353415247763100081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd3084400000002000000d3c12a90f9db949dcb505dbc44a10f1ea772924a1629c2084e30f136ed7c1cbeedf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae020a00000000000000"
+ ]
+ },
+ "0xb7978d739c6d861ab1902226dbc51bfad44edf6dcfdee1dc303f50606f4c62ea": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x4d298843298431d70021bb66737e15abfe84b67851ce6a99787c28941caee507"
+ }
+ }
+ ],
+ "hash": "0xb7978d739c6d861ab1902226dbc51bfad44edf6dcfdee1dc303f50606f4c62ea",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x031bde521ff6cd99aab9a6b71a0326c4e5b19b5f4d2ec63346bde69977b814c8"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xcc321278301291afc3c43ae43d5e3e3c10ce9cf0658c3063587b0123cdce7cef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x43",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x00d51ef4e28799d94e9046a2873a2974c4fbe51572f6fd1d579cd43f4bf679fb87640000000000000014000000000000000000000000000000000000000000000002000000000000005645535430303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xb81a922893475d9f7bb43877d52d7b7c15c1bc1db63a4cbdc5aa0a5d08abf784": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x05bdf82334e9817b9e706495e1e0897548dad8e635a07d19ae0dfb2551ed84e9"
+ }
+ }
+ ],
+ "hash": "0xb81a922893475d9f7bb43877d52d7b7c15c1bc1db63a4cbdc5aa0a5d08abf784",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x78e2458a9ec57a0cd427c4090f9903efcdc634d18a35c6850fab8c3c3a1f14c5"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x30999ca44c3638eceddd4d707a01242294bd06473c9e34f92f5cdea23c2bdb75",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x22",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0000000000000000000000000000000000000000000000000000000000000000040000000000000068e0283c1fd1128451c56b1271048ce1bdbadaaab224ea219c1277ee4cbabe7778000000000000003c0000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xb83abaee23854733da3a985f90440de3c831022c65e128ae2b0b1c0b2ca82850": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc3d498167f8fa254bdaed6029f276aacea9d662a5cd393b4cc19cffa2889fe25"
+ }
+ }
+ ],
+ "hash": "0xb83abaee23854733da3a985f90440de3c831022c65e128ae2b0b1c0b2ca82850",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x899bac1c9e02a9ca6cd47386e6fd5470d06ba1348a018b2acd8d3d0bbde2bade"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x899bac1c9e02a9ca6cd47386e6fd5470d06ba1348a018b2acd8d3d0bbde2bade"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa3bdc8e44991a1790d469db884797763ce5dd7ef8631b77f45c2d925633dbbd9",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x73",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x70",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x72",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x6d7122fbd537293591fef620082e9213b875ee6f8a926497a533aee6f4ff93560e7da160d8e77e9274a6fa6f8243153d2bae61ddf817d97c42e9cc7861e1f830414d4d4130303031414d4d4230303031f82a0000000000000b4700000000000010270000000000001e00",
+ "0x1507000000000000414d4d4230303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x44000000100000001000000044000000300000004353415247763100140700000000000013e1988a98e068eb6128d8ad60febbec52113d16742917b29e9d0b753eb8e971",
+ "0x"
+ ]
+ },
+ "0xb97f4c75e0015d8deae35de3cc121201aae47742a6e57687c1c8b5049796759c": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x84949d0ac6b772fbe9eddc7aaecf1527609fb591c42129deea687f59d3bde57b"
+ }
+ }
+ ],
+ "hash": "0xb97f4c75e0015d8deae35de3cc121201aae47742a6e57687c1c8b5049796759c",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xab0f22960f33ac447c3075073190a7127930d337a090125a7279a8544f3d28d5"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x25",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x5d21dba00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x5d21dba00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x5d21dba00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x5d21dba00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x860000001c000000350000003d0000005d000000650000006d00000015000000416363657074616e636520436f6c6c656374696f6e0400000041435054ad2efee9b2aa7cf537c64f1adbbf7bf4d35accce0f9c25dc9e7b111ea4dc87ea1800000000000000e80300000000000015000000636b623a2f2f63656c6c7363726970742f6e66742f",
+ "0x95adf7ef6067c00ecc240badc9e98ac4ee50b6b6a7cecdf150c0cfc15d54e3fd15000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fad2efee9b2aa7cf537c64f1adbbf7bf4d35accce0f9c25dc9e7b111ea4dc87eafa00",
+ "0x95adf7ef6067c00ecc240badc9e98ac4ee50b6b6a7cecdf150c0cfc15d54e3fd160000000000000031313131313131313131313131313131313131313131313131313131313131314141414141414141414141414141414141414141414141414141414141414141ad2efee9b2aa7cf537c64f1adbbf7bf4d35accce0f9c25dc9e7b111ea4dc87eafa00",
+ "0x95adf7ef6067c00ecc240badc9e98ac4ee50b6b6a7cecdf150c0cfc15d54e3fd170000000000000032323232323232323232323232323232323232323232323232323232323232324242424242424242424242424242424242424242424242424242424242424242ad2efee9b2aa7cf537c64f1adbbf7bf4d35accce0f9c25dc9e7b111ea4dc87eafa00",
+ "0x95adf7ef6067c00ecc240badc9e98ac4ee50b6b6a7cecdf150c0cfc15d54e3fd180000000000000033333333333333333333333333333333333333333333333333333333333333334343434343434343434343434343434343434343434343434343434343434343ad2efee9b2aa7cf537c64f1adbbf7bf4d35accce0f9c25dc9e7b111ea4dc87eafa00"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c01000010000000100000001c0100000801000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412313131313131313131313131313131313131313131313131313131313131313132323232323232323232323232323232323232323232323232323232323232323333333333333333333333333333333333333333333333333333333333333333000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f414141414141414141414141414141414141414141414141414141414141414142424242424242424242424242424242424242424242424242424242424242424343434343434343434343434343434343434343434343434343434343434343"
+ ]
+ },
+ "0xb9f8fd253e6da658201c7d51eb1d64c53ae37639fc94ead37dce09dc7b8a122f": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x9572797579e20683ff0f7c6fe0152a168a9c6bade9800dcb77751ff651df8478"
+ }
+ }
+ ],
+ "hash": "0xb9f8fd253e6da658201c7d51eb1d64c53ae37639fc94ead37dce09dc7b8a122f",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x16fb3f1a0ef711b6deb76b0595105e225d61ca83d2a609474c0e12683e399f39"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xe383a15d1b2e326df64363cab5778e79bd5edef2bc97a2ae3d4c77ab072752e3",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0xb80000001c0000003c0000005c0000006b00000073000000b7000000444444444444444444444444444444444444444444444444444444444444444411111111111111111111111111111111111111111111111111111111111111116f70657261746f72207265766965770a00000000000000020000001111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222200"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xba87194e3b5862bb583ac228ca3b79b0230c2667d71c095fb5c8e33f375c4006": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x7385b0cd1428d6b3de24c02748cd013790f75530ae9fe8bd125b74ba6388f97c"
+ }
+ }
+ ],
+ "hash": "0xba87194e3b5862bb583ac228ca3b79b0230c2667d71c095fb5c8e33f375c4006",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x15da87cfff34c6bfc7a7012177b4845fbdd717f50dd145d2772678981f5a14e4"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x41",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41256455354303030310a00000000000000640000000000000001"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x550000001000000010000000550000004100000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41256455354303030310a00000000000000640000000000000001"
+ ]
+ },
+ "0xbb4544c75dd32136bfbc6eeab20b2a7ca0539d8e059d3fadfbca9393629a94e8": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf90754033d45778b16034a348f5757b56b8578eab5fd81bd2707a4fa43572a7f"
+ }
+ }
+ ],
+ "hash": "0xbb4544c75dd32136bfbc6eeab20b2a7ca0539d8e059d3fadfbca9393629a94e8",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x7e440ad501421b27a482372d706506acb9652daa062b70d002f0f316402003a5"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x544f4b454e303031e8030000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xc0ca46dcc6d0c1c6ba5944656d1e5650b877f934911cb540e2b52a1f191f85b9": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf0f807aecb16aaf7820fdb2c70d719912dd02d8274f76343fc42eebdbc3bcc02"
+ }
+ }
+ ],
+ "hash": "0xc0ca46dcc6d0c1c6ba5944656d1e5650b877f934911cb540e2b52a1f191f85b9",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xed6ef86b9918c6e673cfdbe410350eeb3e3e9f0fc480fc2fe2273c3da3308917"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x18758b10cc53dcf2fcd775462ec3ad8052ca19f21158a315eedc926cd085d520",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x00000000000000000000000000000000000000000000000000000000000000000100000000000000111111111111111111111111111111111111111111111111111111111111111144444444444444444444444444444444444444444444444444444444444444442222222222222222222222222222222222222222222222222222222222222222fa00"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xc1027a7241ef72189a265f99ee6df274cffd53983ff85f0fc6e51b3372bb47a7": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x85999c8371807a66812a6db192e23c22335b1faf2cc3bcf873658c827ba80570"
+ }
+ }
+ ],
+ "hash": "0xc1027a7241ef72189a265f99ee6df274cffd53983ff85f0fc6e51b3372bb47a7",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x189e7a1b87b0df7c8fb2117191bb6fd6fa7f33b4aac9f4a53edc5ca5cb913a6c"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x60",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x61",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x70",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x62",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x71",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x62",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x60",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x62",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4c41554e434830311027000000000000e803000000000000",
+ "0x0a000000000000004c41554e43483031",
+ "0x14000000000000004c41554e43483031",
+ "0xca030000000000004c41554e43483031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0xa40000001000000010000000a40000009000000043534152477631004c41554e434830311027000000000000e8030000000000006de4ed8e16e7400834559efc852ddca87762f738a5dd93853168a4cc390cdbf013e1988a98e068eb6128d8ad60febbec52113d16742917b29e9d0b753eb8e9710a000000000000006d7122fbd537293591fef620082e9213b875ee6f8a926497a533aee6f4ff93561400000000000000"
+ ]
+ },
+ "0xc10773a7ba18c8d32e4deab978518e5d1f4665d833b6361ccc306d5382387f7a": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x14a44b8c532b2bb73f71cbaee290f3e62ae5a4c3b2b083dacfa2018de393dc3a"
+ }
+ }
+ ],
+ "hash": "0xc10773a7ba18c8d32e4deab978518e5d1f4665d833b6361ccc306d5382387f7a",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xeeec2214dbcab6baf139332667732583af8de6f940dad430156d5b6ff2c494b5"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xb5e6f61a513204507f6cf508cbc23b449a60d91ef6ebdfde79fcf886bf4cb020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x52",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0xdf00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ce000000d6000000de000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd308070000000000000054c5b8ead560f70812f047450079e4d44d711bd08a9fc8068bf1278932736b840064f944c22f0db7bfb29aa523b65cbb75a6a65b369febfbff0ffc17facacfe2dcf40100000000000000000000020100000054c5b8ead560f70812f047450079e4d44d711bd08a9fc8068bf1278932736b841400000000000000d00700000000000000",
+ "0x8d00000018000000380000007c0000007d00000085000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd3080200000054c5b8ead560f70812f047450079e4d44d711bd08a9fc8068bf1278932736b84edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xc1992e679cdcbc64bb722f94b5d226099b2b9ead0529e4ccf45833055f369b2a": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xfe8eb1d61e9167f5864fa5b417edb0c6976b8e3729c172ac6ec50382bd634b61"
+ }
+ }
+ ],
+ "hash": "0xc1992e679cdcbc64bb722f94b5d226099b2b9ead0529e4ccf45833055f369b2a",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x17606461a3d98871a31a1d2dc71e0e81e47c2fb246665a0c19f207255b32f70a"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x540be7d1575ea9e60a6df5678ec2e4dc857edb687f1ad2f8359317be2288ff60",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xf1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x22ecb25c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xb5e6f61a513204507f6cf508cbc23b449a60d91ef6ebdfde79fcf886bf4cb020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xf2",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d0000008500000065dfc0aa4a73f351b42a0bad8e1e57f7befd37622ec7fc56087c9cad029905930200000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5cc7b799a057ff213011b152a94d895d9e5b1eeb05e376f7122464ff11bc93207a0201000000000000000a00000000000000",
+ "0xbf00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ae000000b6000000be00000065dfc0aa4a73f351b42a0bad8e1e57f7befd37622ec7fc56087c9cad02990593010000000000000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5c003664eabff06921f646efbb743006b9544de3a96a399db5870777e5e8d78a7b2df4010000000000000000000002000000001400000000000000b40500000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x6c00000010000000100000006c00000058000000435341524776310086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5c3664eabff06921f646efbb743006b9544de3a96a399db5870777e5e8d78a7b2df4010000000000001400000000000000"
+ ]
+ },
+ "0xc390427394790da202c9564f872551a36bcee7747e19fcc58d0eac765d7bbaae": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf99767aebf484c406de90a63140d8306eea1dbf509fb6b04f13f5594a27b4157"
+ }
+ }
+ ],
+ "hash": "0xc390427394790da202c9564f872551a36bcee7747e19fcc58d0eac765d7bbaae",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x0495a8b89852af2a653540ebe699453d04134738225430a174119ef7db3fa047"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x7cda3da79fb46eaed62752444d9d4f666897861039c77bf94f0532fc43162a70",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x7cda3da79fb46eaed62752444d9d4f666897861039c77bf94f0532fc43162a70",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x52",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd308020000007d079c63043b805af33e1b72b25e83ba2897b47af215f9174932de79e9393d01edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0101000000000000000a00000000000000",
+ "0xbf00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ae000000b6000000be000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd30801000000000000007d079c63043b805af33e1b72b25e83ba2897b47af215f9174932de79e9393d0102edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae00000000000000000000000001000000001400000000000000b40500000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x640000001000000010000000640000005000000043534152477631007d079c63043b805af33e1b72b25e83ba2897b47af215f9174932de79e9393d01edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae1400000000000000"
+ ]
+ },
+ "0xc5f4a0ba516ae824a4b48b2c604120abd7d5140c18b0f27ac2b13dba0aec548a": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x8713577264f34e7acd5e5d74b494dbfb1c09c70af8f30a7fb1c3570aa4cbf1d4"
+ }
+ }
+ ],
+ "hash": "0xc5f4a0ba516ae824a4b48b2c604120abd7d5140c18b0f27ac2b13dba0aec548a",
+ "header_deps": [
+ "0x88ce0e52d92e34dad6b737cc8c81d31badc9eaf981c783b52e3082c663d48093"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x967df738576d6c83283ed92ef71a0e174e45556fed0ac222f2b4e450150f91a3"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x318333f71531adb7109813cd89f757d76d7a1a8aebb79e93d800df8f4f0bc3c3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x45",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x318333f71531adb7109813cd89f757d76d7a1a8aebb79e93d800df8f4f0bc3c3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x43",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x50000000000000005645535430303031",
+ "0x01b250afae197267ab716da7baa7d3077d66d0bfb6286f19ab4d0698a90737666e64000000000000006400000000000000000000000000000000000000000000000b000000000000005645535430303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0xc67554cbd1c3973fe04e014c2271023a82d9874a4b84ec38bda8bca1f9a65b26": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0xef62d924ff6af766acc21727b36c6e6483fac2768527599bf597348eb3c55a91"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x165cc6ad0c8d376ed93c10aea3246877f219e1a0cf40d9bd33bb4ebdd3c49bb8"
+ }
+ }
+ ],
+ "hash": "0xc67554cbd1c3973fe04e014c2271023a82d9874a4b84ec38bda8bca1f9a65b26",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x5a8483ebb69040dee1659744182b76fe71c973610ea4d31cc84d86f171d9dda9"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xc3",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x01134f3e5fc0e711c8860ae1fe92cdf6797bb68e4059cf057a4ea9eae6b9e2d001000000000000007ec54f4d397c9e0406cb21db151b5b2844123b83ba7e8eb9ce9c0a3c3759b5fb1027000000000000000000000000000000",
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x240000001000000010000000240000001000000043534152477631001027000000000000"
+ ]
+ },
+ "0xc8a5c0e66095d60b6955962dd47327012167b91791b6f762684de515b9c1354e": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x297acc94d2c6e532490f039bfbfeed7c2e494fef06b7adb6cf00a4287dca0a73"
+ }
+ }
+ ],
+ "hash": "0xc8a5c0e66095d60b6955962dd47327012167b91791b6f762684de515b9c1354e",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x740f68ba912a942022541741c57d332680fb0d6d73fece3763ce2f1a1a4d0628"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x93f05f4fb67225c694ab2cb4c4b57125136e08fcff490458f42fa63e26086bdd",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x23",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0xbe0000001c0000003c0000005c0000007100000079000000bd0000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412414141414141414141414141414141414141414141414141414141414141414111000000656d657267656e63792072656c656173657800000000000000020000004242424242424242424242424242424242424242424242424242424242424242a5fa3ab929ac363193de55b810aaac99277989f8550a29501c8d393e11a16ee500"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c000000280000004353415247763100a5fa3ab929ac363193de55b810aaac99277989f8550a29501c8d393e11a16ee5"
+ ]
+ },
+ "0xc962300d035f0d3e1a401d57d0420ee6e984c4cabc0da7cf8beae28bb3b0c040": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0xc10773a7ba18c8d32e4deab978518e5d1f4665d833b6361ccc306d5382387f7a"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x14a44b8c532b2bb73f71cbaee290f3e62ae5a4c3b2b083dacfa2018de393dc3a"
+ }
+ }
+ ],
+ "hash": "0xc962300d035f0d3e1a401d57d0420ee6e984c4cabc0da7cf8beae28bb3b0c040",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xc10773a7ba18c8d32e4deab978518e5d1f4665d833b6361ccc306d5382387f7a"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xdf8475800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xb5e6f61a513204507f6cf508cbc23b449a60d91ef6ebdfde79fcf886bf4cb020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x52",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xb5e6f61a513204507f6cf508cbc23b449a60d91ef6ebdfde79fcf886bf4cb020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x53",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0xff00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ee000000f6000000fe000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd308070000000000000054c5b8ead560f70812f047450079e4d44d711bd08a9fc8068bf1278932736b840064f944c22f0db7bfb29aa523b65cbb75a6a65b369febfbff0ffc17facacfe2dcf40100000000000000000000020200000054c5b8ead560f70812f047450079e4d44d711bd08a9fc8068bf1278932736b84edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae1400000000000000d00700000000000000",
+ "0x0700000000000000edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae1e00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x44000000100000001000000044000000300000004353415247763100edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae1e00000000000000"
+ ]
+ },
+ "0xcaf1e3fead81946aed95a54b532f739b4c68b6fbae7165a5f1ff919c8f8b3756": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x4e6498bb05ab2acef4f3dc7aca48bea59b65a76ba1be2359d334621a701672c0"
+ }
+ }
+ ],
+ "hash": "0xcaf1e3fead81946aed95a54b532f739b4c68b6fbae7165a5f1ff919c8f8b3756",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x95cf642ae48c517930fe6e3c737fd3981c2f910242f22d5dee7ab53f44c20d9f"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x95cf642ae48c517930fe6e3c737fd3981c2f910242f22d5dee7ab53f44c20d9f"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x9502f9000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x513c43aa3e994cbdf9bcd7903f1e220882873ad830b3eb024cdeefe2ca3afcb3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x6e",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x6b",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x6c",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x6b",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x6d",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0358b5b4af3799ee4f7fbb489135f67e4b316c3a6bc5ef6e31a7b80958ea1569ee44736c2a40bb9b927c93b719db9a3681696c42caa38f292b3a0423234fff93414d4d4130303031414d4d42303030315a00000000000000b40000000000000084030000000000001e00",
+ "0x0a00000000000000414d4d4130303031",
+ "0x1400000000000000414d4d4230303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631005d4eec43082abf0f7a62b2f9682051adeb7e017c32f00756482c17985bef0bd6",
+ "0x"
+ ]
+ },
+ "0xceaaabab7b6cb8b1b1a6332e8f0624978e76fa9931a2e5097dbb48abebb09df2": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x59e35a159719575477e11dfd15b9b1c0c0c895495034a74e23e8f89a884cfa44"
+ }
+ }
+ ],
+ "hash": "0xceaaabab7b6cb8b1b1a6332e8f0624978e76fa9931a2e5097dbb48abebb09df2",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa7a79ee082961201fac154d42dd5c86501e52e1b53d360444c7a3393264cffa6"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x67cf56e6c2bcd82506436ade5d8a220f9b51ad099c307d7cb59de6629cca279e",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x444444444444444444444444444444444444444444444444444444444444444411111111111111111111111111111111111111111111111111111111111111110064000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xd097c95c41a0970b66c253c9abe6b3f276282b2a8f6126dda3cf18494340b2c3": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x1e601e8f4a43db4216118fd235a8c21841e611d4d32208c6f8745d6ff5049d74"
+ }
+ }
+ ],
+ "hash": "0xd097c95c41a0970b66c253c9abe6b3f276282b2a8f6126dda3cf18494340b2c3",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x58389e2aa2f07b207b69c854bb471cbfa9e980b3fb0f5c5acde5d16fe4163f05"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631002222222222222222222222222222222222222222222222222222222222222222"
+ ]
+ },
+ "0xd12b75240c9745693c87a94242cc383e3f4facb87b3d5a0e23a9f4e8242d9c5c": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0xebdaef4d2108c25778301a3237fbdcf71a260c384e1d8d3f738d16b65d7a66b8"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x5c75c5ca82dabee1d0aece80ed61f066c6afd349accbfedd76aa203a1e447cf6"
+ }
+ }
+ ],
+ "hash": "0xd12b75240c9745693c87a94242cc383e3f4facb87b3d5a0e23a9f4e8242d9c5c",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xebdaef4d2108c25778301a3237fbdcf71a260c384e1d8d3f738d16b65d7a66b8"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xaaf97b20c59720fa641958ba0c26eb2bfd3ed6c23444975811f4f1c08989c368",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x22",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000003000000000000003a5455bdce07967f3d95167e932e52a7f094a6778ce77761b4d3e5c2d51e332e6400000000000000000000000000000000",
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x240000001000000010000000240000001000000043534152477631006400000000000000"
+ ]
+ },
+ "0xd427ffbf8a602f10b6b1c845f50683fbc468d636c9749080b653c671827e22dd": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc0bcb97f3c6a8c60d29eb5ed52c18597b102a5b43a1694a53a31d079a8814a95"
+ }
+ }
+ ],
+ "hash": "0xd427ffbf8a602f10b6b1c845f50683fbc468d636c9749080b653c671827e22dd",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x76401b481b980abeb6e3ca4cc414ef2dc28819eff96b4e4c32d26f1febc6ae20"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc1e7dce634480aceedc7bd5dfbb7df1e5951cd945fb0d10cb8ea70968af0443b",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xd44187944519beb8fb0d67544e148c80880dc5e12336bae473be6e788ff980c2": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x71eff92809d8a4981a72e97209d0b726be408aefa00d1508a26c8b1fff164552"
+ }
+ }
+ ],
+ "hash": "0xd44187944519beb8fb0d67544e148c80880dc5e12336bae473be6e788ff980c2",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1c8c4325505326f747420de5e8560c32794f3e1ef786c38d1bcd5b186c669784"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x91",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x2540be400",
+ "lock": {
+ "args": "0xa4",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x92",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4c41554e4348303110270000000000000104000000000000",
+ "0x19000000000000004c41554e43483031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x4400000010000000100000004400000030000000435341524776310096fce7ed113ae01b9c4b1d6b3065804825a5708ba868b624ed12e30c5665d1e61900000000000000"
+ ]
+ },
+ "0xd5fa5dcfd1dc5ac7749aac58e2ccc70953e8e86adcbbd315e7d28eac991c6bbc": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x6aa5c60e30df163649a614d6637228dab6e507b00d3a8fd6bd93b5cc525163e3"
+ }
+ }
+ ],
+ "hash": "0xd5fa5dcfd1dc5ac7749aac58e2ccc70953e8e86adcbbd315e7d28eac991c6bbc",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x100622e71992fc7f45b3e46ff83c5f30748a75144c05ed015a39acaa2aefe84e"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x100622e71992fc7f45b3e46ff83c5f30748a75144c05ed015a39acaa2aefe84e"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x2",
+ "tx_hash": "0x100622e71992fc7f45b3e46ff83c5f30748a75144c05ed015a39acaa2aefe84e"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc5eb6cb03878c77e75b8462c561205189574fc4677e5538cc9136c10ab9921da",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x05",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc5eb6cb03878c77e75b8462c561205189574fc4677e5538cc9136c10ab9921da",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x04",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x2a00000000000000544f4b454e303031",
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41200000000000000006bd943617d9642f1dad174449a64bb34f325c84fc257eb8fff578e00a50b0a9c"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631006bd943617d9642f1dad174449a64bb34f325c84fc257eb8fff578e00a50b0a9c",
+ "0x",
+ "0x"
+ ]
+ },
+ "0xd6d214048b0d486197d309dcd9317e52a42e3e20cc4f049c4e87281d1f5a6d5a": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x49cc066a2d2f6275cc83080d71ede68d3ae540573353901dfabd8d031fc528c6"
+ }
+ }
+ ],
+ "hash": "0xd6d214048b0d486197d309dcd9317e52a42e3e20cc4f049c4e87281d1f5a6d5a",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xc516c050781b8fe2ba57c8c4fd4a54969299ffb31a0377fc9f497cf2bf4f9fbe"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x22ecb25c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xd7d1822d5820493f4a5c03812e71ecf7a2943734611dfe351598146890453059": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x80ec8fc6e4986da8bc215946af429bbdb6fe26ab543bc6735377b480fcc8418a"
+ }
+ }
+ ],
+ "hash": "0xd7d1822d5820493f4a5c03812e71ecf7a2943734611dfe351598146890453059",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x078d6b393501851b72052db4c6f1e8b439ede7a80a15ed84a8fa2f777eed8054"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x30999ca44c3638eceddd4d707a01242294bd06473c9e34f92f5cdea23c2bdb75",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0xd816ab4444154f8550b94676b6195160a7a09d0ba5d9d42ccee11c4d34370f1e": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xef6eddcdb6a4500202839de5d3929cdcb7ade4274dee72021b5612314ad01235"
+ }
+ }
+ ],
+ "hash": "0xd816ab4444154f8550b94676b6195160a7a09d0ba5d9d42ccee11c4d34370f1e",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa0ad32ea6682bbe84f394ed740b42c4412c497273adb2955e6cbbba2d6d25137"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0xd8c0053e479d1e7c9f45e2abc8c2f082194cd47634c2d6388f4e2e7a240366a7": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xbdba2f98f29414b88797bc5942b6c00d6a887dffeee6e3af43579372ea4d612e"
+ }
+ }
+ ],
+ "hash": "0xd8c0053e479d1e7c9f45e2abc8c2f082194cd47634c2d6388f4e2e7a240366a7",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xda0a4d13e2a3cabdaa0001fee1acb48209ee68b4d786311af2629448b52dcfc2"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x23",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000005000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4129600000000000000c8000000000000005041594d3030303100"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x7c00000010000000100000007c000000680000004353415247763100000000000000000000000000000000000000000000000000000000000000000005000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41296000000000000005041594d30303031c800000000000000"
+ ]
+ },
+ "0xd8e30c66d1da8a5af3a43c6e7514e691948b6aea907874ed80858eaae0201caf": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x6988a589235f9fd830f970f1302dbeb1685104a75ff5c95e13fa8f833fa67f84"
+ }
+ }
+ ],
+ "hash": "0xd8e30c66d1da8a5af3a43c6e7514e691948b6aea907874ed80858eaae0201caf",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x8b85a45b4b3c0da4633ca155697290d15ec99bb27068b1a2f611d49214869704"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x8b85a45b4b3c0da4633ca155697290d15ec99bb27068b1a2f611d49214869704"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x64",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x61",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x65",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x6e764046853b3e6e5b2eb2f2d03e0f9fa119bf5da110166c48fdce579102826a0ba02773d63b6fa4b0ed6ce7a50816e8ca93d78005ca27c02a2d05b8e46f3c2c414d4d4130303031414d4d42303030310400000000000000090000000000000006000000000000001e00",
+ "0xbd925708cc9329a2ed2eef184ee313c1ec455027844c8ea227b3e589e5221a9a0600000000000000a2159af3fb001c55e6c3e8fbfe034c52699451a5e88086ebb684fdcdac2d6748"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3e00000010000000100000003e0000002a00000043534152477631001e00a2159af3fb001c55e6c3e8fbfe034c52699451a5e88086ebb684fdcdac2d6748",
+ "0x"
+ ]
+ },
+ "0xdb5b770c97e55457e5b576a9612fa4a5ba8867c9c11899060f2193129e51d923": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x5f2c3eb45b63be5422acd84352c33591c0c51bdbc2bcdaa28b541c4dcbe6ec1d"
+ }
+ }
+ ],
+ "hash": "0xdb5b770c97e55457e5b576a9612fa4a5ba8867c9c11899060f2193129e51d923",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x696b5e896adf0a8d68ed777f00d8549883fb64692d00257693656264ce126e65"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x828a52262139378ce50e40ea7a24d4e8d8219cb2b9ae8f0e2a2cde2a8712a546",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4128755508da7aa1fd862ab37b0e6ef59a8cb026c9bacc0c07e838683cb6cf3404e0119000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x640000001000000010000000640000005000000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4128755508da7aa1fd862ab37b0e6ef59a8cb026c9bacc0c07e838683cb6cf3404e1900000000000000"
+ ]
+ },
+ "0xdf6318fdf0dc8c8103363dc325dff2676b363c85405355debbdd24a41e424998": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x49cc066a2d2f6275cc83080d71ede68d3ae540573353901dfabd8d031fc528c6"
+ }
+ }
+ ],
+ "hash": "0xdf6318fdf0dc8c8103363dc325dff2676b363c85405355debbdd24a41e424998",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xd6d214048b0d486197d309dcd9317e52a42e3e20cc4f049c4e87281d1f5a6d5a"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41205b4932b537bf8d7f006cb31700e23021bef615b652238322093b5534e7d71620064000000000000000000000000000000",
+ "0x61616161616161616161616161616161616161616161616161616161616161615151515151515151515151515151515151515151515151515151515151515151006e000000000000000000000000000000",
+ "0x626262626262626262626262626262626262626262626262626262626262626252525252525252525252525252525252525252525252525252525252525252520078000000000000000000000000000000",
+ "0x636363636363636363636363636363636363636363636363636363636363636353535353535353535353535353535353535353535353535353535353535353530082000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c01000010000000100000003c0100002801000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41261616161616161616161616161616161616161616161616161616161616161616262626262626262626262626262626262626262626262626262626262626262636363636363636363636363636363636363636363636363636363636363636305b4932b537bf8d7f006cb31700e23021bef615b652238322093b5534e7d716251515151515151515151515151515151515151515151515151515151515151515252525252525252525252525252525252525252525252525252525252525252535353535353535353535353535353535353535353535353535353535353535364000000000000006e0000000000000078000000000000008200000000000000"
+ ]
+ },
+ "0xdfb65c7699a692c39bdba73ec0647d99c56398310465d1db372c8a63369c0c93": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x99bd2cc55653377b2109baa3f88393a406c039e1fdf0703dcb782552e3ac16eb"
+ }
+ }
+ ],
+ "hash": "0xdfb65c7699a692c39bdba73ec0647d99c56398310465d1db372c8a63369c0c93",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1213c894962b0b93e2fd49eb38ba5121b5df709d1d78ee888b4a060534f99ab9"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9da2791f3f0a46790e4b187a1d1dd15813f2c14883138631255c58b495a845d8",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9da2791f3f0a46790e4b187a1d1dd15813f2c14883138631255c58b495a845d8",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x52",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd308020000004d594af7f4d8c8158e0225a7d1a80903f7ea8df3f81bc67791af289b03ae879dedf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0201000000000000000a00000000000000",
+ "0xc000000034000000540000005c0000007c0000007d0000009d000000a5000000aa000000ab000000af000000b7000000bf000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd30801000000000000004d594af7f4d8c8158e0225a7d1a80903f7ea8df3f81bc67791af289b03ae879d0300000000000000000000000000000000000000000000000000000000000000000200000000000000010000000202000000001400000000000000b40500000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x450000001000000010000000450000003100000043534152477631004d594af7f4d8c8158e0225a7d1a80903f7ea8df3f81bc67791af289b03ae879d021400000000000000"
+ ]
+ },
+ "0xe2caa37ca2e0591eb4662a9c263d9bbd2fb0c1717253b0e909e24658f5d5dbf9": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x1fc61e5ec8572c8853a001a40fa7acef0190c6833da6ec3e407bd2863c986a45"
+ }
+ }
+ ],
+ "hash": "0xe2caa37ca2e0591eb4662a9c263d9bbd2fb0c1717253b0e909e24658f5d5dbf9",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x0d0cd5183c0b46372c241150800abd62f029fdb3a378118e9b6cb40742e885f0"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x540be7d1575ea9e60a6df5678ec2e4dc857edb687f1ad2f8359317be2288ff60",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000081a5dcf3714186936153512187ce7c99c78f3280f00ae5a985a3d1cddacd3080200000086a76e2fc301d88cf9fed4a493b210edf5a21bc839886e7869bac99766ed6a5cedf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xe32ba198cf261e9245eeb097056d69457006704701255e84c64181d8115d1fea": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf6c1dea3d39f795519ada0030abe07e5524aa5b99b89b86733664a7e038c7d96"
+ }
+ }
+ ],
+ "hash": "0xe32ba198cf261e9245eeb097056d69457006704701255e84c64181d8115d1fea",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x558ddcd2b7e2faf8b3e72f03235cee6ae1ab465b76732cfede9c6967ceb130ec"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0xe36126e163f21a6ca37cad04416acdee8215a45efb9627b21209c0d73f8e70aa": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xef6eddcdb6a4500202839de5d3929cdcb7ade4274dee72021b5612314ad01235"
+ }
+ }
+ ],
+ "hash": "0xe36126e163f21a6ca37cad04416acdee8215a45efb9627b21209c0d73f8e70aa",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x3e92751afe9579893059de61e15723d1664c34d6b00e1c6dfbf81fe795395494"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2f95e743beef860d851bf2277fc56c036c5be0b956db68627791b404b45067e9",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x00000000000000000000000000000000000000000000000000000000000000000100000000000000111111111111111111111111111111111111111111111111111111111111111144444444444444444444444444444444444444444444444444444444444444442222222222222222222222222222222222222222222222222222222222222222e903"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xe5d28d78e2c97cfb5cd0fb6d236304cd6b66cbeb235ca2b5cf7468378817844a": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xd0734aa42e646234c69b1fc13a8352a746230eb748a3b4f0ed577b37a59c97a6"
+ }
+ }
+ ],
+ "hash": "0xe5d28d78e2c97cfb5cd0fb6d236304cd6b66cbeb235ca2b5cf7468378817844a",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x8e0dc6fb8bde56d6fa372501bab5f137df3c09dcd0ae455d6396cd38a1bc3e18"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x25",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x5d21dba00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x5d21dba00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x5d21dba00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x5d21dba00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x860000001c000000350000003d0000005d000000650000006d00000015000000416363657074616e636520436f6c6c656374696f6e0400000041435054ad2efee9b2aa7cf537c64f1adbbf7bf4d35accce0f9c25dc9e7b111ea4dc87ea1800000000000000e80300000000000015000000636b623a2f2f63656c6c7363726970742f6e66742f",
+ "0x95adf7ef6067c00ecc240badc9e98ac4ee50b6b6a7cecdf150c0cfc15d54e3fd15000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1fad2efee9b2aa7cf537c64f1adbbf7bf4d35accce0f9c25dc9e7b111ea4dc87eafa00",
+ "0x95adf7ef6067c00ecc240badc9e98ac4ee50b6b6a7cecdf150c0cfc15d54e3fd160000000000000031313131313131313131313131313131313131313131313131313131313131314141414141414141414141414141414141414141414141414141414141414141ad2efee9b2aa7cf537c64f1adbbf7bf4d35accce0f9c25dc9e7b111ea4dc87eafa00",
+ "0x95adf7ef6067c00ecc240badc9e98ac4ee50b6b6a7cecdf150c0cfc15d54e3fd170000000000000032323232323232323232323232323232323232323232323232323232323232324242424242424242424242424242424242424242424242424242424242424242ad2efee9b2aa7cf537c64f1adbbf7bf4d35accce0f9c25dc9e7b111ea4dc87eafa00",
+ "0x95adf7ef6067c00ecc240badc9e98ac4ee50b6b6a7cecdf150c0cfc15d54e3fd180000000000000033333333333333333333333333333333333333333333333333333333333333334343434343434343434343434343434343434343434343434343434343434343ad2efee9b2aa7cf537c64f1adbbf7bf4d35accce0f9c25dc9e7b111ea4dc87eafa00"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c01000010000000100000001c0100000801000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412313131313131313131313131313131313131313131313131313131313131313132323232323232323232323232323232323232323232323232323232323232323333333333333333333333333333333333333333333333333333333333333333000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f414141414141414141414141414141414141414141414141414141414141414142424242424242424242424242424242424242424242424242424242424242424343434343434343434343434343434343434343434343434343434343434343"
+ ]
+ },
+ "0xe60611e6f8611fb019ebb0dac2c76cfa5081ef8d05ae8b57c44c3e887cd656dd": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x05bdf82334e9817b9e706495e1e0897548dad8e635a07d19ae0dfb2551ed84e9"
+ }
+ }
+ ],
+ "hash": "0xe60611e6f8611fb019ebb0dac2c76cfa5081ef8d05ae8b57c44c3e887cd656dd",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xb81a922893475d9f7bb43877d52d7b7c15c1bc1db63a4cbdc5aa0a5d08abf784"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x30999ca44c3638eceddd4d707a01242294bd06473c9e34f92f5cdea23c2bdb75",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0xe712cd2c89aeadb85ad178be1df80fa32c72c563007d02022307da44d2b10f17": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc71e873453ffa750d9ef781214a1e015b9fe92ba751672b9592f3593750cb2fd"
+ }
+ }
+ ],
+ "hash": "0xe712cd2c89aeadb85ad178be1df80fa32c72c563007d02022307da44d2b10f17",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x6a3d32809ed36e7835e40e027dc05ee5adc36c9f04cc84866dfd3b58fe0f3043"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631001111111111111111111111111111111111111111111111111111111111111111"
+ ]
+ },
+ "0xe795d5d96599dbae3f86bf88419c29ea037bd479b9339acb1fa189f5ebd5d259": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0x8cfc356815eccbcae35af59d0034cdda7af6094bb3a6e95e1b89b799f5d4cca5"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xfc01255f8d4c79d2307cbf689795022d46555c16027b3c954bc9969ec7387d81"
+ }
+ }
+ ],
+ "hash": "0xe795d5d96599dbae3f86bf88419c29ea037bd479b9339acb1fa189f5ebd5d259",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x8cfc356815eccbcae35af59d0034cdda7af6094bb3a6e95e1b89b799f5d4cca5"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xca92833ef77901845dd672a356fa9e568a3d46f179a1df5469dbbc05b7313427",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x20",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x544f4b454e3030312a000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412",
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0xe9680f21dbf851055f0cb2fcc4cd51a05b5e2f6846b22b08462ffa12e7dc7d2d": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x006b521dc10d970574f21b5faf7d36e65b9242f7557bdf0f293020f759b2e568"
+ }
+ }
+ ],
+ "hash": "0xe9680f21dbf851055f0cb2fcc4cd51a05b5e2f6846b22b08462ffa12e7dc7d2d",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x00409256e78106d58106d68a0fc529399530b444f5e73ebf74960616d208c2a4"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xa1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x2540be400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x6c976866fb9c343bd28922b92aca893f292fed889e52b75a59a10f738b31f4e7",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xa1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x5354415445303031e8030000000000000c00000000000000",
+ "0x07000000000000005354415445303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x440000001000000010000000440000003000000043534152477631000545322f195fd3db3fa6a39e1e053fef4e3fa14589f8a8c41fc2b58b4028afab0700000000000000"
+ ]
+ },
+ "0xe9f918cc4cd4842ac8cc6f54c0bd1c2158ceb0105d1b71b97c22524acef3e33f": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc293f43936132ce8cb8f8a4a760f1de03c82dfd7464533a73b586d1867b92349"
+ }
+ }
+ ],
+ "hash": "0xe9f918cc4cd4842ac8cc6f54c0bd1c2158ceb0105d1b71b97c22524acef3e33f",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x43aa34c172d01d43c427650825c520f05f0775b6691bb9448488bd542475db62"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x1",
+ "tx_hash": "0x43aa34c172d01d43c427650825c520f05f0775b6691bb9448488bd542475db62"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x2",
+ "tx_hash": "0x43aa34c172d01d43c427650825c520f05f0775b6691bb9448488bd542475db62"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x3",
+ "tx_hash": "0x43aa34c172d01d43c427650825c520f05f0775b6691bb9448488bd542475db62"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x24",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x24",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000007000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00",
+ "0xfa000000000000005041594d30303031",
+ "0x16260000000000005041594d30303031"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100",
+ "0x",
+ "0x",
+ "0x"
+ ]
+ },
+ "0xeaeed3d06f30198c983882e0221720faf11c02473429adb757bd570b910363f9": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x4549c1c05bb03fe8c884c329830b6ba4cbc4fe2f560fa5db94addb128fc14015"
+ }
+ }
+ ],
+ "hash": "0xeaeed3d06f30198c983882e0221720faf11c02473429adb757bd570b910363f9",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x16abacfaf5234b72cb013ac1485f1b92e39d1153ffee2019af44716d17ab1fdc"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc39605e25bec7c9fe1297e640cf6ef42128dff83cec50c6e94bcc1eeb7aa268a",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0xff00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ee000000f6000000fe000000444444444444444444444444444444444444444444444444444444444444444401000000000000001111111111111111111111111111111111111111111111111111111111111111003333333333333333333333333333333333333333333333333333333333333333f401000000000000000000000202000000111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222220a00000000000000d00700000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xebdaef4d2108c25778301a3237fbdcf71a260c384e1d8d3f738d16b65d7a66b8": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x5c75c5ca82dabee1d0aece80ed61f066c6afd349accbfedd76aa203a1e447cf6"
+ }
+ }
+ ],
+ "hash": "0xebdaef4d2108c25778301a3237fbdcf71a260c384e1d8d3f738d16b65d7a66b8",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xd7290b2b90834c131df36fabd447cc248f102a94cb5cefb0d12f78df742c836b"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xaaf97b20c59720fa641958ba0c26eb2bfd3ed6c23444975811f4f1c08989c368",
+ "hash_type": "data1"
+ },
+ "type": null
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x",
+ "0x000000000000000000000000000000000000000000000000000000000000000003000000000000003a5455bdce07967f3d95167e932e52a7f094a6778ce77761b4d3e5c2d51e332e000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xec6798ce41a5f6e605ff145156155055fa3de7d9d3ae339a7a362f91fdc060c9": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0x403c6468185cda532c013187efc8a8037ddab784faa77ffa2f598d8aac72eb71"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc922cbc382b9e65ed9852d188f4eac36d7b7e47c518639c0b6e39899aa32d440"
+ }
+ }
+ ],
+ "hash": "0xec6798ce41a5f6e605ff145156155055fa3de7d9d3ae339a7a362f91fdc060c9",
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x403c6468185cda532c013187efc8a8037ddab784faa77ffa2f598d8aac72eb71"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x48ae74b55eea7d34804fb2aab0a86fb3bd2a193051315e9c4a16cdd0aaccda91"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x42",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x43",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x337b00807f",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x00d714763e4a1855490e72ed7282ee94abb4ad846e79662f8423d83b4f5aca0c354d00000000000000000000000000000000000000000000000a0000000000000064000000000000005645535430303031",
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c000000280000004353415247763100d714763e4a1855490e72ed7282ee94abb4ad846e79662f8423d83b4f5aca0c35"
+ ]
+ },
+ "0xed204f9b9fa736fae8691f41c9674b625c5a831a7d6fa0d5d2b50c1d4ce5e142": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdff9e4e52961c196f41c52c2d211468dfa6b3af8c4f194a02d4bc59bfe39d066"
+ }
+ }
+ ],
+ "hash": "0xed204f9b9fa736fae8691f41c9674b625c5a831a7d6fa0d5d2b50c1d4ce5e142",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x7a756cb6c7c9658d5f5285e65e36c3f513227686918ae70c9fad31ca8064b26a"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xf7a0ff2f4e06b8af72ebbd3aa6a7e6ffe61d3ada8258397c6c224d217ae9d3cd",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x444444444444444444444444444444444444444444444444444444444444444411111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xef62d924ff6af766acc21727b36c6e6483fac2768527599bf597348eb3c55a91": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x7e9657ed8c1aabb75e70fe5a6f3e2b06aa9dc8c78551e69b967d148803ef9f0e"
+ }
+ }
+ ],
+ "hash": "0xef62d924ff6af766acc21727b36c6e6483fac2768527599bf597348eb3c55a91",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa278863a1589ef75f641ead8c869a21b4f426a167f4814927af651f01de54cea"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x967d150b17ee92167fda6eb3b28e453cfc084f19c7cbfc773bb3f1b93d4dea61",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xc1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xc2",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d0000001c000000330000003b0000005b000000630000006b00000013000000537461746566756c20436f6c6c656374696f6e04000000534e46543b27b52bcff21bb54b5ab2951b1ee1153fa29982ff473bf003e6097276b6d55c0100000000000000c8000000000000001e000000636b623a2f2f63656c6c7363726970742f737461746566756c2d6e66742f",
+ "0x01134f3e5fc0e711c8860ae1fe92cdf6797bb68e4059cf057a4ea9eae6b9e2d001000000000000007ec54f4d397c9e0406cb21db151b5b2844123b83ba7e8eb9ce9c0a3c3759b5fb33333333333333333333333333333333333333333333333333333333333333333b27b52bcff21bb54b5ab2951b1ee1153fa29982ff473bf003e6097276b6d55cfa00"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x5c00000010000000100000005c0000004800000043534152477631007ec54f4d397c9e0406cb21db151b5b2844123b83ba7e8eb9ce9c0a3c3759b5fb3333333333333333333333333333333333333333333333333333333333333333"
+ ]
+ },
+ "0xf0d43d47f20b19cd70aed45f330cbb4c98a5898d4ad3096cf5b588b5dfe6f834": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xb547f36f187c1934d41fdd9aa8a0e855842721d14c598386bdc850d6b17b5517"
+ }
+ }
+ ],
+ "hash": "0xf0d43d47f20b19cd70aed45f330cbb4c98a5898d4ad3096cf5b588b5dfe6f834",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x40467f4762c9f86e4f0c6d4b05ce196efd2b10594db8648a8599ec48e661dbab"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa983e55b6bf70b5e24415864e1ab3640ccef502351a814d229b66d6738e0c83a",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0xff00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ee000000f6000000fe000000444444444444444444444444444444444444444444444444444444444444444401000000000000001111111111111111111111111111111111111111111111111111111111111111003333333333333333333333333333333333333333333333333333333333333333f401000000000000000000000202000000111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222220a00000000000000d00700000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xf18073c9dd4436dfca5146f8b7aac0e4bfe4398b8b6f91f1727873aeef202c9d": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0x014f954ce1b5dcd67562a3094bda3060e3807bd071a5da61a107a3c4c02716e2"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xa831ba0ff5d321de15b135872754b682e38d2ddd47c38d7315bce7f166e20ec4"
+ }
+ }
+ ],
+ "hash": "0xf18073c9dd4436dfca5146f8b7aac0e4bfe4398b8b6f91f1727873aeef202c9d",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x014f954ce1b5dcd67562a3094bda3060e3807bd071a5da61a107a3c4c02716e2"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xee0a4d051aeb5c2c39df4eeeda6a55b8cb9ea79a964b905d3288c0d83138fabc",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x54",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0800000000000000be4bb273fc2295cd8466897942306079b3d1118c6150a000751ee6695e7d7c11280000000000000001"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x44000000100000001000000044000000300000004353415247763100be4bb273fc2295cd8466897942306079b3d1118c6150a000751ee6695e7d7c112800000000000000"
+ ]
+ },
+ "0xf212913e057843c248eea6ca642ad7cd8c1d930865fdea6604f4588b07f5e9f4": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf8ee78ee63762e2c05952e54e460b90a506c4160c9e4d420f83246162712be43"
+ }
+ }
+ ],
+ "hash": "0xf212913e057843c248eea6ca642ad7cd8c1d930865fdea6604f4588b07f5e9f4",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1c5ec34e3022bdcee5b055f54102be7267a807b4baf9885b20efd665ba5ccbd9"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x967d150b17ee92167fda6eb3b28e453cfc084f19c7cbfc773bb3f1b93d4dea61",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x860000001c000000350000003d0000005d000000650000006d00000015000000416363657074616e636520436f6c6c656374696f6e04000000414350543b27b52bcff21bb54b5ab2951b1ee1153fa29982ff473bf003e6097276b6d55c0b00000000000000e80300000000000015000000636b623a2f2f63656c6c7363726970742f6e66742f",
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4120b000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f3b27b52bcff21bb54b5ab2951b1ee1153fa29982ff473bf003e6097276b6d55cfa00"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x5c00000010000000100000005c0000004800000043534152477631004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"
+ ]
+ },
+ "0xf222cd329af79ea45c70e20dca573edbfb9d93769d15c1cf06d0c6d30f572804": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0x96729af7693292d31397d4ebdf3624d743424a305cb8c4f7c6bdc5ad63111c9e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc145bbbef86e1441c587b6a24a8007c687becdb42b503a349b06475e8a86de48"
+ }
+ }
+ ],
+ "hash": "0xf222cd329af79ea45c70e20dca573edbfb9d93769d15c1cf06d0c6d30f572804",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x96729af7693292d31397d4ebdf3624d743424a305cb8c4f7c6bdc5ad63111c9e"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xb68a0aa00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xf51e1060b13ba495ab2cac42ab5102d7ff6bb2c00df50f115846b5fcc9429298",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c000000280000004353415247763100fbf9445aa019c17dbdd072cae5c7840097cba346940a427fc4269257922e5bf7"
+ ]
+ },
+ "0xf36de341cb16e3887aa7fca0f4421e35bc3bd224f9e39d215606a49f73dabee4": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x75810e2bb00c39358795f31d647c7aab850fef67bf4c17be74391898f2699887"
+ }
+ }
+ ],
+ "hash": "0xf36de341cb16e3887aa7fca0f4421e35bc3bd224f9e39d215606a49f73dabee4",
+ "header_deps": [
+ "0x690c44e7f3605a4c984edfe17dc953047114aff5e42ae1b2f108dc042a37a34d"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x2f2a53ea7336cf1d1b199a59b22148e7357d2e12846050a664cce5bf73094e80"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa8e8c60bbed4ebf0747eb82243ce7c6644d925a506d822cdc080dfc26a067dd2"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x402f7e5dd680c1d6dc63abfc07b59a2583aa577503c506bef3d00a3a9318608b"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc5eb6cb03878c77e75b8462c561205189574fc4677e5538cc9136c10ab9921da",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xb5",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0xb4",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x2a00000000000000544f4b454e303031",
+ "0x7d84ad3da83e8ccab86a945f8bb0b74ebaa3d29369b01c5370dff1f340078ac00b000000000000006bd943617d9642f1dad174449a64bb34f325c84fc257eb8fff578e00a50b0a9c"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631006bd943617d9642f1dad174449a64bb34f325c84fc257eb8fff578e00a50b0a9c",
+ "0x",
+ "0x"
+ ]
+ },
+ "0xf784caf50f8ff3466cfb61ca40b3fecb90bff03f1dfb1916ca749f33b54d216d": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x49ce2be6cbe254c0a78346d81c7b098e74f44601c4693a509ba36d4b3c681f69"
+ }
+ }
+ ],
+ "hash": "0xf784caf50f8ff3466cfb61ca40b3fecb90bff03f1dfb1916ca749f33b54d216d",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x08cbc0f0e4b4a1201e687be7ab5380399f3f971ab68bae873e7b6e5dde6dac8c"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631006666666666666666666666666666666666666666666666666666666666666666"
+ ]
+ },
+ "0xf7a35513fabdaa0d83307fa67eb92badabb850a2b71ec2a2f67b49229ed9dc59": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x49ce2be6cbe254c0a78346d81c7b098e74f44601c4693a509ba36d4b3c681f69"
+ }
+ }
+ ],
+ "hash": "0xf7a35513fabdaa0d83307fa67eb92badabb850a2b71ec2a2f67b49229ed9dc59",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xc189d2e59e3097eaa6265afdb58616ac0e806fbf8e57efeaf08c455a1f63a0c5"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x1ef8dbe9b2f531b18576d6ec194fae7e744ac501952706adcb6382d1deea04b4",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x665fa3d657391cb8819d2c9e91e3c0e6f82db7b371416f04e0b06332990457a511111111111111111111111111111111111111111111111111111111111111110064000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xfa2e16ceccde2faf8a2ddcd8bedd2cbdbf0438cedb74d8e2684fea9e6ad98496": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x14e410f98eb197fc6a336f68534cee7ce181ab0d6ea6bc28a8f66acb6a3c8c44"
+ }
+ }
+ ],
+ "hash": "0xfa2e16ceccde2faf8a2ddcd8bedd2cbdbf0438cedb74d8e2684fea9e6ad98496",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xb629ee7fb29df995ea9fae1d02db475f878ffea6657cea91d21fe1986779692f"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x2540be400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x1b82b117ab4e41de9f6652a54f2f2ee24abad190b04a935cf90075cf9f3da237",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0xfc4b81ff774304b41f674c3e53c374264a3ec988118144a8d49ebb87e66e2f00": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x9572797579e20683ff0f7c6fe0152a168a9c6bade9800dcb77751ff651df8478"
+ }
+ }
+ ],
+ "hash": "0xfc4b81ff774304b41f674c3e53c374264a3ec988118144a8d49ebb87e66e2f00",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xb9f8fd253e6da658201c7d51eb1d64c53ae37639fc94ead37dce09dc7b8a122f"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0xfe15000508fa702953f7966b7da93a3ee01952d7fbf7968c831b4d4103a1f587": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0x2746ae89bf4c9c652cebc4119bbd5a9df9f721f9eedd64182d188bbc17e5d489"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdb30f9d5f126ed97836bb953e06415433f7367a42dd24b0a6b53f934259b70c9"
+ }
+ }
+ ],
+ "hash": "0xfe15000508fa702953f7966b7da93a3ee01952d7fbf7968c831b4d4103a1f587",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x2746ae89bf4c9c652cebc4119bbd5a9df9f721f9eedd64182d188bbc17e5d489"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100",
+ "0x"
+ ]
+ },
+ "0xffe1382e9db1645da25b1602fba1f38b7df1a11b2e72bc98420e9e7353a4ae27": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x628d5d167bfdc69330f8a4f4e972147c622618d8bc847d5bb4f52d4446ba2f48"
+ }
+ }
+ ],
+ "hash": "0xffe1382e9db1645da25b1602fba1f38b7df1a11b2e72bc98420e9e7353a4ae27",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa7bfa9832a57afa6de3ba0566d10e89e25c051df7f69a13fa66d0938dfa2a176"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xafc1309eef287471f5feb8e01a6bad53624851301ed7e5117b803290c2362c80",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "0x049df337a2dff720c87c75a9aee3508694c52030e387d1820a4afa28a14b8254": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x16fe2ced0417b0a62f56bffaea8082d4901f2327c2b3f0e8e6f7d867575a1ee4"
+ }
+ }
+ ],
+ "hash": "0x049df337a2dff720c87c75a9aee3508694c52030e387d1820a4afa28a14b8254",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xbb14cef29b87d090c2c61031652ca3d70c2e1919990f018ae285bb30c15998bc"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xcc321278301291afc3c43ae43d5e3e3c10ce9cf0658c3063587b0123cdce7cef",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x43",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x00d51ef4e28799d94e9046a2873a2974c4fbe51572f6fd1d579cd43f4bf679fb87640000000000000014000000000000000000000000000000000000000000000016000000000000005645535430303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x078d6b393501851b72052db4c6f1e8b439ede7a80a15ed84a8fa2f777eed8054": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x80ec8fc6e4986da8bc215946af429bbdb6fe26ab543bc6735377b480fcc8418a"
+ }
+ }
+ ],
+ "hash": "0x078d6b393501851b72052db4c6f1e8b439ede7a80a15ed84a8fa2f777eed8054",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xec8e911ac2a4e9edc0c1412df26ec7cd9d7b2147e4f0cd3f2d542fb6fecb829b"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x30999ca44c3638eceddd4d707a01242294bd06473c9e34f92f5cdea23c2bdb75",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x22",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0000000000000000000000000000000000000000000000000000000000000000040000000000000068e0283c1fd1128451c56b1271048ce1bdbadaaab224ea219c1277ee4cbabe7778000000000000003c0000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x0a0b8c20de2b149b74926989ccef6f20ab3984e666b923dfb78610c569e753bc": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x3ee712eb9ce234366e17d006c3a022f164cd052b1739c8d0b1ddfaae7fdab1b2"
+ }
+ }
+ ],
+ "hash": "0x0a0b8c20de2b149b74926989ccef6f20ab3984e666b923dfb78610c569e753bc",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x170908af85e2cfd612ba186fe782233e08dab212177255e3e15e236df1f2b526"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xc4",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xc4",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0xfa000000000000005041594d30303031",
+ "0x16260000000000005041594d30303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x0f7ef307cd4762342d70d780814b26f305dd44d149a9e91c37443b622b72e34b": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x17fdc71ba9532d39718b8f52c521c40c1f5c19b7194bad896326abddc303c7bb"
+ }
+ }
+ ],
+ "hash": "0x0f7ef307cd4762342d70d780814b26f305dd44d149a9e91c37443b622b72e34b",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1f20dc94201a9ba20df40dd1a35a5c272817b83e2dec88e13e12670034c573a0"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xca92833ef77901845dd672a356fa9e568a3d46f179a1df5469dbbc05b7313427",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xb5",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x2a00000000000000544f4b454e303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x1552617977bba10cb1d8df84ccaba2a68deaeac7eb39fc08462ecc5b9feec933": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xa641762dced489313320a33d0a25ad81848a3cfdf3e057d37e5313f5aa7bff7a"
+ }
+ }
+ ],
+ "hash": "0x1552617977bba10cb1d8df84ccaba2a68deaeac7eb39fc08462ecc5b9feec933",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x268eeff71c5758b0a41cd7a4264d01ee0ef1bfaea8bb5cae50ebc17317c991a9"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xee46f625f63eaccefbc7c9bf1393a21295d1d21e712fc704523d6f349a39ca26",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xd1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xee46f625f63eaccefbc7c9bf1393a21295d1d21e712fc704523d6f349a39ca26",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xd2",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0400000000000000414d4d4130303031",
+ "0x0900000000000000414d4d4230303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x178476fefdc74a41929f6858dd8f6fe4094ee863ba6e8defbff459070e2f18dd": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xb402243a1be68cc9f3dd8f703010b6faadc4a98ac26dc19d4cca2703edb335a3"
+ }
+ }
+ ],
+ "hash": "0x178476fefdc74a41929f6858dd8f6fe4094ee863ba6e8defbff459070e2f18dd",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1a0161c46f8d9218cea883867b37c3ad655c5dd7533a56a374ac1b046cab598f"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc6c1fd22456162ae2457a61bb7fd4f0ad0ac92955adbc6a8da10a0caf1900362",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x21aaab6b34b6f7bd4c7672fe16baa2deacfe062cab95a9104c9c3d32de16165f": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x06fc2217647967fbbbb43852493f249d782b073b114cc29bbdca5e13bf830cfe"
+ }
+ }
+ ],
+ "hash": "0x21aaab6b34b6f7bd4c7672fe16baa2deacfe062cab95a9104c9c3d32de16165f",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x134f2b5f75013ce63a904e32e4aca008207118fe843570cb8af04243850b35fa"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1f82090965f2d38d5fd0f1f654345a0c146476db869bf5452392702eeab55bff"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x0b3ac2602d34b52a0f8d258890d4fe3a2a0c86c8e7c5062442abd00106adeb98"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xe64d0051791f2f2d161d51734ee363180b843910429ae5de3c45381c57126855"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x5d21dba000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xb6d00cb658e0732961e4c25b5322160074ac41e52182067bc326353930063479",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x238f2ceedd51e0575705f189111340520552a861e09666e47b4517ef10757b01": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xfa1320af6eff6f2b2b69e30391ca3a027c259318a86dca32e3238884311b84d7"
+ }
+ }
+ ],
+ "hash": "0x238f2ceedd51e0575705f189111340520552a861e09666e47b4517ef10757b01",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x56b2587c1da48156ff216bfa71a78ac16845676c4205a92347e0b0a8951ef475"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x14f46b0400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa34564aa114e28106b02f63243b50f5135adc633ff7a74e735d27e9404bf0710",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x29d306ab03fdfef7ef8fe68ab222e5b318f9a82732f3126627e691b40b2994fe": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xe483d497e40139e1da27c2904f8438c0682a4ff9578d41a24eed218fa5ff76fd"
+ }
+ }
+ ],
+ "hash": "0x29d306ab03fdfef7ef8fe68ab222e5b318f9a82732f3126627e691b40b2994fe",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xb9d6137b85cd3fd51d1aab0521d70016c0085e5fbdabe1c48cc7ea21399ef7c5"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x7cda3da79fb46eaed62752444d9d4f666897861039c77bf94f0532fc43162a70",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d000000850000000000000000000000000000000000000000000000000000000000000000000000020000007d079c63043b805af33e1b72b25e83ba2897b47af215f9174932de79e9393d01edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0100000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x375d660a387685e9e2fb3694a6329a5598d2879a50a794c0ce458f723c2788aa": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdb73dd1332931d73fa333bb3e2b9ad2b0b93f3350e75420154005ba23a2d7d9d"
+ }
+ }
+ ],
+ "hash": "0x375d660a387685e9e2fb3694a6329a5598d2879a50a794c0ce458f723c2788aa",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa8f6c62104531f95cecf9575b1bf69b8aa65f5fa918fc67dba08aeb3bd06d7f1"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x11",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x12",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x13",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4125baf451ed7373f0615c332dd7cf063955378dcf10b7a6fc35b0146cf4ca5182b00f4010000000000000000000000000000",
+ "0x544f4b454e3030312a000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412",
+ "0xbe0000001c0000003c0000005c0000007100000079000000bd0000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4125baf451ed7373f0615c332dd7cf063955378dcf10b7a6fc35b0146cf4ca5182b11000000656d657267656e63792072656c656173650000000000000000020000004242424242424242424242424242424242424242424242424242424242424242434343434343434343434343434343434343434343434343434343434343434300"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x3a4ef8679d5d77f3e7cc52e77b60c86533a2bcb68dc4fd32b00e947a15a8aaa9": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x86c3b29ad0bba4281c2d58d64030f41ad9242dcce7416f20c67130a0df8b5e46"
+ }
+ }
+ ],
+ "hash": "0x3a4ef8679d5d77f3e7cc52e77b60c86533a2bcb68dc4fd32b00e947a15a8aaa9",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xb49cf495a3c4ee97ce38cf01f2473446d47eb46398df16d1c8b44d6ccf1dad4e"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x13814f1b2b6fa776385ebf4a63ee7ec94ebc806957ac34dc565d573e7f9b0f4f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xd1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x13814f1b2b6fa776385ebf4a63ee7ec94ebc806957ac34dc565d573e7f9b0f4f",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xd2",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0400000000000000414d4d4130303031",
+ "0x0900000000000000414d4d4230303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x40d1840247d7ff684bec814254db3e3a8d2515f59a3c02c6bd95a99120f10c20": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x9b6af43c1c3e7556bbb8d2b570bf4c0c29bfc13989a59bc601a05810d7a78d85"
+ }
+ }
+ ],
+ "hash": "0x40d1840247d7ff684bec814254db3e3a8d2515f59a3c02c6bd95a99120f10c20",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xbd4be51e8f1b998cee8782c11b81bdb58fd93c400679a7d974bb748cbb65a453"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9da2791f3f0a46790e4b187a1d1dd15813f2c14883138631255c58b495a845d8",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d000000850000000000000000000000000000000000000000000000000000000000000000000000020000004d594af7f4d8c8158e0225a7d1a80903f7ea8df3f81bc67791af289b03ae879dedf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x43398ca152e78764ed64cf42b6a5f61da59b38f9087e9714c4cbb8a070f642db": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x4d0c0cc1df3a9620a55de0fb0691025fb805e651cda66536e620aa7ff04bd2ed"
+ }
+ }
+ ],
+ "hash": "0x43398ca152e78764ed64cf42b6a5f61da59b38f9087e9714c4cbb8a070f642db",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xc33a319da6ef4a430f15bad1a102aefe90e7fd0da81a3852c1c0e0627b2e8575"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x204920209dab2137b0f75335063856cc1e84d28b41d1e31c2160614832de50ec",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x8d00000018000000380000007c0000007d00000085000000000000000000000000000000000000000000000000000000000000000000000002000000cf8cbc02d90b9e9bca7eb320ce67edfcf62400cd2a8bfb81a8104cf3942bca74edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x4a3e569f693934dcfca435644132ef1a44a29275ca54814354bb783db8a7ca7d": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x7316d0640df6e12bf34469505237b41ef4ef81dd1d7cbe667d2bd929928a8ee9"
+ }
+ }
+ ],
+ "hash": "0x4a3e569f693934dcfca435644132ef1a44a29275ca54814354bb783db8a7ca7d",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x6eabbb604a1c3deae9c66db4ddf0808656fd8719a7f74066f9e023e6dbd14c54"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x56243615bf571a99518758be09271fe4246d7a980607b2a46d0a8f5041de3593"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x2e90edd000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x67c60bfc34958c28b1d5277be6995af9920d480f60ded40806eaf173c704d10d",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x4dbde6eb4499b366a69afa2f677fe589f0cf9fd9d5892598771aecad786a4c38": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x92ba4f3a9f6ef2ef017253e99a5769579a4d9af3cb0b5bfeaf674c73f73e022f"
+ }
+ }
+ ],
+ "hash": "0x4dbde6eb4499b366a69afa2f677fe589f0cf9fd9d5892598771aecad786a4c38",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x6e63e49770c170c81862de53e554b17c85275ee24e3eadb44f349c8b4bf2d162"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xfa97e4b195e88b2e154d7d260df3f1d27a35618b4aaeff97ba01eb9911a15901"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xcb4fe44af248bedef5c7264fca05dc1bc480add1d06f1bcb90dfcd0910810b1e"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xaee2bfa44ca0e72a6e48400e8c88c3dab0ff606940465e89846849b1087f25b9"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x5d21dba000",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x450a496151c4111710cd56ffe7558b63b2a5e22e0ad7fd33edcf52173121c440",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x93",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0xfa000000000000005041495230303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x5a8483ebb69040dee1659744182b76fe71c973610ea4d31cc84d86f171d9dda9": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x165cc6ad0c8d376ed93c10aea3246877f219e1a0cf40d9bd33bb4ebdd3c49bb8"
+ }
+ }
+ ],
+ "hash": "0x5a8483ebb69040dee1659744182b76fe71c973610ea4d31cc84d86f171d9dda9",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x539786ed07dc7e15fc8970663c2204577798f45340780faf130b707ae6667f55"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xaaf97b20c59720fa641958ba0c26eb2bfd3ed6c23444975811f4f1c08989c368",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x5f7e68e39b7606ffe8fb6730ed62c594e8b84ad854fdb45df92b1e05ee199124": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xe274608e446e15ce0f9ec8680954950c72336954fb025575fb4a310bad2c3d63"
+ }
+ }
+ ],
+ "hash": "0x5f7e68e39b7606ffe8fb6730ed62c594e8b84ad854fdb45df92b1e05ee199124",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xc3584e126f722a6908b615f3a9ce62a15e5470951aaba467b9610cf9cc929ec2"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2ca9877f46bc3e89b31d76e256714e075ad57732d7fcd489fdc6aa636772f93d",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x00000000000000000000000000000000000000000000000000000000000000000100000000000000ff63e89620213deea694117ec085da42e12c77ac38c0c86eeb6d2202ecb78edd000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x696b5e896adf0a8d68ed777f00d8549883fb64692d00257693656264ce126e65": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x5f2c3eb45b63be5422acd84352c33591c0c51bdbc2bcdaa28b541c4dcbe6ec1d"
+ }
+ }
+ ],
+ "hash": "0x696b5e896adf0a8d68ed777f00d8549883fb64692d00257693656264ce126e65",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1229e1587b3c431f1590ed6d18911dc6f451f656f3d6da52fd66440c5acef798"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x828a52262139378ce50e40ea7a24d4e8d8219cb2b9ae8f0e2a2cde2a8712a546",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x6b1230cc7d06562c440c22b81e23c0cb7c253f5a1661ddfe23446ebe821353ba": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x006b521dc10d970574f21b5faf7d36e65b9242f7557bdf0f293020f759b2e568"
+ }
+ }
+ ],
+ "hash": "0x6b1230cc7d06562c440c22b81e23c0cb7c253f5a1661ddfe23446ebe821353ba",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xff2efd4828d6c567ffe542ed50c0296a5604711eb7ecc4130581eab4346eb97a"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x104c533c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xa1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x5354415445303031e8030000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x7bdb141dc64f601e73012e4488dd97f98aba20178792f4f35f66ae5f6da31370": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x204eecf4d7006584af493c734f69488ee4ca52dd1c2e7dd7ac075f8f5be3ac1e"
+ }
+ }
+ ],
+ "hash": "0x7bdb141dc64f601e73012e4488dd97f98aba20178792f4f35f66ae5f6da31370",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x40fc9998ddbecc43260cf84806c7c7e71494a4161dee1d05314457af0d58c5ea"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xfb48437de0a39605beb256eff10ddaf2923e2bcc880af813371bade22152f464"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x22ecb25c00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x8e0dc6fb8bde56d6fa372501bab5f137df3c09dcd0ae455d6396cd38a1bc3e18": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xd0734aa42e646234c69b1fc13a8352a746230eb748a3b4f0ed577b37a59c97a6"
+ }
+ }
+ ],
+ "hash": "0x8e0dc6fb8bde56d6fa372501bab5f137df3c09dcd0ae455d6396cd38a1bc3e18",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x8452495fa641e5ea1654b9f5c1f388bd94e1c51aeeb51bc1fc4b3bc824a2fccd"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xf8feaa6faa28c75b4743f98c90340855926a41147ca443dca6d0d9d18636afb9"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x542086a6c5151ff4a2781b2e169f56b148125f0d389351411a14cee4819c1033"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x3a35294400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x25",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x860000001c000000350000003d0000005d000000650000006d00000015000000416363657074616e636520436f6c6c656374696f6e0400000041435054ad2efee9b2aa7cf537c64f1adbbf7bf4d35accce0f9c25dc9e7b111ea4dc87ea1400000000000000e80300000000000015000000636b623a2f2f63656c6c7363726970742f6e66742f"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x8f31a148d525d4d627eda45d969275fb7966b3a1f0e425ba8bc1dbb441930b23": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x8ad8c938473f108cf363d556d16de535af96f3ad0d3bc6be6893da0a11e8a96d"
+ }
+ }
+ ],
+ "hash": "0x8f31a148d525d4d627eda45d969275fb7966b3a1f0e425ba8bc1dbb441930b23",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xa22db1026c273393d0405ab6cd1fcc23705cfca478f4b9ea9b0540d804b322b2"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xdebeeebed4b050592aeeda4cd26e530632ce8236e4a0481c150ee8264cfcdffb",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x44",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4d000000000000005645535430303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x9081136c24df469f162ee5d2f811b20c93c9ab55686d7dc94a3c5396185d42e2": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x4e37ef1b4ef9ce4d4bf6e391a520856f1646deec3fd27518ee4b3fd932f3cde7"
+ }
+ }
+ ],
+ "hash": "0x9081136c24df469f162ee5d2f811b20c93c9ab55686d7dc94a3c5396185d42e2",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xf86ab2de6450c0c56de9e9e88ad52b3be1e65ab42d89573cdb91ff56baf5fd58"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc13b702287bf01246fd600189482d58fb1e8bdadce497124858e010750a4b4cd",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0x967df738576d6c83283ed92ef71a0e174e45556fed0ac222f2b4e450150f91a3": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x8713577264f34e7acd5e5d74b494dbfb1c09c70af8f30a7fb1c3570aa4cbf1d4"
+ }
+ }
+ ],
+ "hash": "0x967df738576d6c83283ed92ef71a0e174e45556fed0ac222f2b4e450150f91a3",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x081b01df9d673856b1b6171d4731be5338d1df8efdc29220615bd99db2506708"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x318333f71531adb7109813cd89f757d76d7a1a8aebb79e93d800df8f4f0bc3c3",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x43",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x00b250afae197267ab716da7baa7d3077d66d0bfb6286f19ab4d0698a90737666e64000000000000001400000000000000000000000000000000000000000000000b000000000000005645535430303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xa7bfa9832a57afa6de3ba0566d10e89e25c051df7f69a13fa66d0938dfa2a176": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x628d5d167bfdc69330f8a4f4e972147c622618d8bc847d5bb4f52d4446ba2f48"
+ }
+ }
+ ],
+ "hash": "0xa7bfa9832a57afa6de3ba0566d10e89e25c051df7f69a13fa66d0938dfa2a176",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xf7011418b95f6ac5cc75eecc9b2ef3ef8e4e45113ccde9eb1fc01e9d73ea4ecc"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xafc1309eef287471f5feb8e01a6bad53624851301ed7e5117b803290c2362c80",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x000000000000000000000000000000000000000000000000000000000000000002000000000000009097611a54d809e6d5cd011ef4511e4259dd6c5594dc8670598498cfd6f33551000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xadd93fd1d69b52f2de36bfa1d108d8d143b137d7c043622fe1d1175589f748ee": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x9f02df0a573644347b6f73102ec88a9c6be51b35fb36c6305e17048c3f13ec0d"
+ }
+ }
+ ],
+ "hash": "0xadd93fd1d69b52f2de36bfa1d108d8d143b137d7c043622fe1d1175589f748ee",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xd3da18803e0dbf16680e781495d8d5a052aee2145d6d31a9915c1b11d26eb5d0"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x078a625eb933f34dee98290d89c9cd6b57ab95d8bb1a89f254f422649a972954",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4128a166edfc898dd17d9c3968fdee59e903e0b98ddf23d77c870dee1585cce89020064000000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xae0bc2b1731b075e540a5fd07c59b6bb03278cac9e259d21528e4b0e543ef2f0": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf3587c0b234657d49a8060ead24d3c0c6746964524c281738238c2eee58261cc"
+ }
+ }
+ ],
+ "hash": "0xae0bc2b1731b075e540a5fd07c59b6bb03278cac9e259d21528e4b0e543ef2f0",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xce59b12e61da7e64eb59e3aa77c07a5a2e00b427ddfe09cd41ecc932ca007b96"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xf51e1060b13ba495ab2cac42ab5102d7ff6bb2c00df50f115846b5fcc9429298",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x52",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x51",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0xbf00000034000000540000005c0000007c0000007d0000009d000000a5000000a9000000aa000000ae000000b6000000be00000000000000000000000000000000000000000000000000000000000000000000000900000000000000fbf9445aa019c17dbdd072cae5c7840097cba346940a427fc4269257922e5bf70064f944c22f0db7bfb29aa523b65cbb75a6a65b369febfbff0ffc17facacfe2dcf4010000000000000000000002000000001400000000000000d00700000000000000",
+ "0x8d00000018000000380000007c0000007d00000085000000000000000000000000000000000000000000000000000000000000000000000002000000fbf9445aa019c17dbdd072cae5c7840097cba346940a427fc4269257922e5bf7edf9f440e51fb1f87aec693c7e925c2d99c8f80582115bb8d68ed68da2c50eae0200000000000000000a00000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xb5bb69474889615326f43e030a432ec50a00f3a71c093557029ac47e171bb34d": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xeb13566917d6910918b1ccecac0c80f748dd0947169e3771684db5322187b986"
+ }
+ }
+ ],
+ "hash": "0xb5bb69474889615326f43e030a432ec50a00f3a71c093557029ac47e171bb34d",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x601c3f2e01908dfea7fd1a3e1fb40e788559e0776307d785f867b44adbdd5282"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x936f404b8bb2d8004894245c812d2aab8eea81718b0c98a695f8013f4c85e2a2"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x21",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x24",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x24",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ },
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x23",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x00000000000000000000000000000000000000000000000000000000000000000700000000000000b185b58da000c8f9180f3ab6f8dc6b1c907fd1f44f8ace7fdbe46b7ea7ab3db4000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412fa00",
+ "0xfa000000000000005041594d30303031",
+ "0x16260000000000005041594d30303031",
+ "0x000000000000000000000000000000000000000000000000000000000000000007000000000000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc4121027000000000000c8000000000000005041594d3030303100"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xbf23c0724ab21b007a7d3b7832a662b934e41b1c656f84b2544c87aacd5d8c48": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xbcad341f60c752aa595c93250be7968b9073f5c09b3e9c645fd115dec67eeb88"
+ }
+ }
+ ],
+ "hash": "0xbf23c0724ab21b007a7d3b7832a662b934e41b1c656f84b2544c87aacd5d8c48",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x9941f70304f5a63b2d27792e7ef9da7905c27f901753b32e34a159eb59c6df5f"
+ },
+ "since": "0x0"
+ },
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xe1e1f0891c918064293563725caa2e611df3a63a85b2881504b7caba679c50d2"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x734c3177a05355d83a3be6c68309e377cfa444fc62d5d6504b3664ea090e9b02",
+ "hash_type": "data1"
+ },
+ "type": null
+ },
+ {
+ "capacity": "0x6fc23ac00",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x",
+ "0x4ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc41294ad7e819f84f5e26539b71e3e49ce236802e80d09e5ad2f3a0c8a17264b144200f4010000000000000000000000000000"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xc1a6e6f593ae6b52c28cab12c650db48041bbcb1ae6a7e06b800c199c6d8a4da": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x54ea0c5e8948e5691f98bebe41b5071a4a8c762ca435c622761508af8cd4e51d"
+ }
+ }
+ ],
+ "hash": "0xc1a6e6f593ae6b52c28cab12c650db48041bbcb1ae6a7e06b800c199c6d8a4da",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x3203d951615a5ddd3662a45c4981f21ad1a6f8d9d64c77897afbdf62868e8d0a"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x93f05f4fb67225c694ab2cb4c4b57125136e08fcff490458f42fa63e26086bdd",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0x23",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x9e0000001c0000003c0000005c00000071000000790000009d0000004ceaa32f692948413e213ce6f3a83337145bde6e11fd8cb94377ce2637dcc412414141414141414141414141414141414141414141414141414141414141414111000000656d657267656e63792072656c65617365780000000000000001000000424242424242424242424242424242424242424242424242424242424242424200"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xcdee5c008e17b8d31dbc8472c5f3771a959ed40826789829f30c56062390104f": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x361ddd4cf352f5a027b10ac34cde394aaf28cb92f71dc04f00e4837643111170"
+ }
+ }
+ ],
+ "hash": "0xcdee5c008e17b8d31dbc8472c5f3771a959ed40826789829f30c56062390104f",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x077d5b8fd1645ca64627fce7e7811836529ebda1ab14ec01222cc221ec59b8fa"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0xba43b7400",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xc1e7dce634480aceedc7bd5dfbb7df1e5951cd945fb0d10cb8ea70968af0443b",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xda0a4d13e2a3cabdaa0001fee1acb48209ee68b4d786311af2629448b52dcfc2": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xbdba2f98f29414b88797bc5942b6c00d6a887dffeee6e3af43579372ea4d612e"
+ }
+ }
+ ],
+ "hash": "0xda0a4d13e2a3cabdaa0001fee1acb48209ee68b4d786311af2629448b52dcfc2",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xaf97e8864072e46943255a3337698dc111a3efcfc193a6529ea82365abc44e94"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xb961548b7fb156288df5e3c472a626d1791f0753906579980f1c75f1069698a1",
+ "hash_type": "data1"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ },
+ "0xe1350ee31a467cf4c84e39edfe45476a1ef4a77734cb0e48c4ef4e4e5c32d93b": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xaa5563e32d88035679d005517839675d1717431123ecccac41442e008f201abc"
+ }
+ }
+ ],
+ "hash": "0xe1350ee31a467cf4c84e39edfe45476a1ef4a77734cb0e48c4ef4e4e5c32d93b",
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x1d0d2bf472e7601333557354d681513aa86a587fb5084243cf1a27ff5988c904"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x4a817c800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0xa3bdc8e44991a1790d469db884797763ce5dd7ef8631b77f45c2d925633dbbd9",
+ "hash_type": "data1"
+ },
+ "type": {
+ "args": "0xd1",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ }
+ }
+ ],
+ "outputs_data": [
+ "0x0200000000000000414d4d4130303031"
+ ],
+ "version": "0x0",
+ "witnesses": []
+ }
+ },
+ "cell_deps": {
+ "0x006b521dc10d970574f21b5faf7d36e65b9242f7557bdf0f293020f759b2e568:0x0": {
+ "data_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020"
+ },
+ "0x014f954ce1b5dcd67562a3094bda3060e3807bd071a5da61a107a3c4c02716e2:0x1": {
+ "data_hash": "0x236ce882a6f9c2ec9ef0fd90e96f581fe711c10ccdf9cd39d178fa84a9c2bbc8"
+ },
+ "0x01c2a831918e3b54119d0952e4db1e3ebf65d73cec2c2bc3d9051fc0728f45c2:0x0": {
+ "data_hash": "0x6c3bf0d1bc162b2c71378ec3ea55d34121ab8c66480524e83cc8943de6b26555"
+ },
+ "0x04ff3d5eebf352f6edd435d3c42bba62a2b84b65b79504643548e80b2d4d150c:0x0": {
+ "data_hash": "0x67c60bfc34958c28b1d5277be6995af9920d480f60ded40806eaf173c704d10d"
+ },
+ "0x05bdf82334e9817b9e706495e1e0897548dad8e635a07d19ae0dfb2551ed84e9:0x0": {
+ "data_hash": "0x30999ca44c3638eceddd4d707a01242294bd06473c9e34f92f5cdea23c2bdb75"
+ },
+ "0x06fc2217647967fbbbb43852493f249d782b073b114cc29bbdca5e13bf830cfe:0x0": {
+ "data_hash": "0xb6d00cb658e0732961e4c25b5322160074ac41e52182067bc326353930063479"
+ },
+ "0x08a319c4fe820d63319732392e166c200c4f7eb811244ac8a4dd433065e8400c:0x0": {
+ "data_hash": "0x6c976866fb9c343bd28922b92aca893f292fed889e52b75a59a10f738b31f4e7"
+ },
+ "0x0ed6bca9b7b257ea7fd5b25d4f686479d892da1349a94a24c20be92d396dcaa3:0x0": {
+ "data_hash": "0xbb4e6287d83e99d7184fbca2c277f0326b25eee7917e5815e0817cf79f2d4fe5"
+ },
+ "0x14a44b8c532b2bb73f71cbaee290f3e62ae5a4c3b2b083dacfa2018de393dc3a:0x0": {
+ "data_hash": "0xb5e6f61a513204507f6cf508cbc23b449a60d91ef6ebdfde79fcf886bf4cb020"
+ },
+ "0x14e410f98eb197fc6a336f68534cee7ce181ab0d6ea6bc28a8f66acb6a3c8c44:0x0": {
+ "data_hash": "0x1b82b117ab4e41de9f6652a54f2f2ee24abad190b04a935cf90075cf9f3da237"
+ },
+ "0x165cc6ad0c8d376ed93c10aea3246877f219e1a0cf40d9bd33bb4ebdd3c49bb8:0x0": {
+ "data_hash": "0xaaf97b20c59720fa641958ba0c26eb2bfd3ed6c23444975811f4f1c08989c368"
+ },
+ "0x16fe2ced0417b0a62f56bffaea8082d4901f2327c2b3f0e8e6f7d867575a1ee4:0x0": {
+ "data_hash": "0xcc321278301291afc3c43ae43d5e3e3c10ce9cf0658c3063587b0123cdce7cef"
+ },
+ "0x17fdc71ba9532d39718b8f52c521c40c1f5c19b7194bad896326abddc303c7bb:0x0": {
+ "data_hash": "0xca92833ef77901845dd672a356fa9e568a3d46f179a1df5469dbbc05b7313427"
+ },
+ "0x1d3726f0eb930917dbb02cb08aa68622494014245a885c60e4d1df758f245b49:0x0": {
+ "data_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64"
+ },
+ "0x1e601e8f4a43db4216118fd235a8c21841e611d4d32208c6f8745d6ff5049d74:0x0": {
+ "data_hash": "0xe47eaf52f41e951f3eb7ae9bfd1173ca26b884ecff101bfa931b5a75ddf1be70"
+ },
+ "0x1f4e697b9f5155338b31392abc0794fe3e262a65e8ca61cc6eeea35fb8aa30f6:0x0": {
+ "data_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f"
+ },
+ "0x1fc61e5ec8572c8853a001a40fa7acef0190c6833da6ec3e407bd2863c986a45:0x0": {
+ "data_hash": "0x540be7d1575ea9e60a6df5678ec2e4dc857edb687f1ad2f8359317be2288ff60"
+ },
+ "0x204eecf4d7006584af493c734f69488ee4ca52dd1c2e7dd7ac075f8f5be3ac1e:0x0": {
+ "data_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef"
+ },
+ "0x2746ae89bf4c9c652cebc4119bbd5a9df9f721f9eedd64182d188bbc17e5d489:0x1": {
+ "data_hash": "0x3e7d3fe3d81dd97dd69bbd3df405b56a165e54fa37415fbb148caa1a16dfa70a"
+ },
+ "0x297acc94d2c6e532490f039bfbfeed7c2e494fef06b7adb6cf00a4287dca0a73:0x0": {
+ "data_hash": "0x93f05f4fb67225c694ab2cb4c4b57125136e08fcff490458f42fa63e26086bdd"
+ },
+ "0x2a9fbd7f43595d871d80e631baf1667f16d4e1cf6a44e85735c69684865db517:0x0": {
+ "data_hash": "0xee0a4d051aeb5c2c39df4eeeda6a55b8cb9ea79a964b905d3288c0d83138fabc"
+ },
+ "0x2b6f560e02fd1d710f9e47d3fb9771d37ae3b88362ebca48a822e3bee8e318f8:0x1": {
+ "data_hash": "0xfafb763bf3b8d90faf46356618babfef4aefe9003fff84129a9d322fdd1d32f1"
+ },
+ "0x2da50f9b01999a58735ab822ba3bc2b743d5d297b196e77f7cbbe84bc2766aac:0x0": {
+ "data_hash": "0xaebdd9d7c1cd1a9b581bc3a42a6c5f40d5b41f2ee637f7a1b4e4eef38500c349"
+ },
+ "0x2f2a53ea7336cf1d1b199a59b22148e7357d2e12846050a664cce5bf73094e80:0x0": {
+ "data_hash": null
+ },
+ "0x33611509a83b78a19cf2ce0980216ef2aa22a359ffb7d07bf31fbd73c339444c:0x1": {
+ "data_hash": "0xabb8fe08184a7964042c7ebd5817749c066dfdfc506d88f6bb1e60b4552b65ac"
+ },
+ "0x339055295d20077427f346e209218b486acf729ef51fab4051a6c08999fdf40a:0x0": {
+ "data_hash": "0x6c3bf0d1bc162b2c71378ec3ea55d34121ab8c66480524e83cc8943de6b26555"
+ },
+ "0x361ddd4cf352f5a027b10ac34cde394aaf28cb92f71dc04f00e4837643111170:0x0": {
+ "data_hash": "0xc1e7dce634480aceedc7bd5dfbb7df1e5951cd945fb0d10cb8ea70968af0443b"
+ },
+ "0x3ee712eb9ce234366e17d006c3a022f164cd052b1739c8d0b1ddfaae7fdab1b2:0x0": {
+ "data_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f"
+ },
+ "0x403c6468185cda532c013187efc8a8037ddab784faa77ffa2f598d8aac72eb71:0x1": {
+ "data_hash": "0xbb4e6287d83e99d7184fbca2c277f0326b25eee7917e5815e0817cf79f2d4fe5"
+ },
+ "0x4549c1c05bb03fe8c884c329830b6ba4cbc4fe2f560fa5db94addb128fc14015:0x0": {
+ "data_hash": "0xc39605e25bec7c9fe1297e640cf6ef42128dff83cec50c6e94bcc1eeb7aa268a"
+ },
+ "0x49cc066a2d2f6275cc83080d71ede68d3ae540573353901dfabd8d031fc528c6:0x0": {
+ "data_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef"
+ },
+ "0x49ce2be6cbe254c0a78346d81c7b098e74f44601c4693a509ba36d4b3c681f69:0x0": {
+ "data_hash": "0x1ef8dbe9b2f531b18576d6ec194fae7e744ac501952706adcb6382d1deea04b4"
+ },
+ "0x4d0c0cc1df3a9620a55de0fb0691025fb805e651cda66536e620aa7ff04bd2ed:0x0": {
+ "data_hash": "0x204920209dab2137b0f75335063856cc1e84d28b41d1e31c2160614832de50ec"
+ },
+ "0x4d298843298431d70021bb66737e15abfe84b67851ce6a99787c28941caee507:0x0": {
+ "data_hash": "0xcc321278301291afc3c43ae43d5e3e3c10ce9cf0658c3063587b0123cdce7cef"
+ },
+ "0x4e37ef1b4ef9ce4d4bf6e391a520856f1646deec3fd27518ee4b3fd932f3cde7:0x0": {
+ "data_hash": "0xc13b702287bf01246fd600189482d58fb1e8bdadce497124858e010750a4b4cd"
+ },
+ "0x4e6498bb05ab2acef4f3dc7aca48bea59b65a76ba1be2359d334621a701672c0:0x0": {
+ "data_hash": "0x513c43aa3e994cbdf9bcd7903f1e220882873ad830b3eb024cdeefe2ca3afcb3"
+ },
+ "0x515a67864ac1959d9cd4fa108ba421b195a4410f1878832bd01208b5d86e7fcd:0x1": {
+ "data_hash": "0xbb4e6287d83e99d7184fbca2c277f0326b25eee7917e5815e0817cf79f2d4fe5"
+ },
+ "0x54ea0c5e8948e5691f98bebe41b5071a4a8c762ca435c622761508af8cd4e51d:0x0": {
+ "data_hash": "0x93f05f4fb67225c694ab2cb4c4b57125136e08fcff490458f42fa63e26086bdd"
+ },
+ "0x5722b21ca2e67ba87092e0fd80580aec5df50e30c37fb60efe7dcd24c426bca5:0x0": {
+ "data_hash": "0x513c43aa3e994cbdf9bcd7903f1e220882873ad830b3eb024cdeefe2ca3afcb3"
+ },
+ "0x59e35a159719575477e11dfd15b9b1c0c0c895495034a74e23e8f89a884cfa44:0x0": {
+ "data_hash": "0x67cf56e6c2bcd82506436ade5d8a220f9b51ad099c307d7cb59de6629cca279e"
+ },
+ "0x5a42e270ccd43a33e96ba446dc3305288ff81717caf6d657da2f20c5cfda25d8:0x0": {
+ "data_hash": "0x204920209dab2137b0f75335063856cc1e84d28b41d1e31c2160614832de50ec"
+ },
+ "0x5c75c5ca82dabee1d0aece80ed61f066c6afd349accbfedd76aa203a1e447cf6:0x0": {
+ "data_hash": "0xaaf97b20c59720fa641958ba0c26eb2bfd3ed6c23444975811f4f1c08989c368"
+ },
+ "0x5f2c3eb45b63be5422acd84352c33591c0c51bdbc2bcdaa28b541c4dcbe6ec1d:0x0": {
+ "data_hash": "0x828a52262139378ce50e40ea7a24d4e8d8219cb2b9ae8f0e2a2cde2a8712a546"
+ },
+ "0x605ff9349d7a02a281af3488d3f7eeedea672de6d61f015759297b95cec97b33:0x0": {
+ "data_hash": "0x2ca9877f46bc3e89b31d76e256714e075ad57732d7fcd489fdc6aa636772f93d"
+ },
+ "0x628d5d167bfdc69330f8a4f4e972147c622618d8bc847d5bb4f52d4446ba2f48:0x0": {
+ "data_hash": "0xafc1309eef287471f5feb8e01a6bad53624851301ed7e5117b803290c2362c80"
+ },
+ "0x6988a589235f9fd830f970f1302dbeb1685104a75ff5c95e13fa8f833fa67f84:0x0": {
+ "data_hash": "0x13814f1b2b6fa776385ebf4a63ee7ec94ebc806957ac34dc565d573e7f9b0f4f"
+ },
+ "0x6aa5c60e30df163649a614d6637228dab6e507b00d3a8fd6bd93b5cc525163e3:0x0": {
+ "data_hash": "0xc5eb6cb03878c77e75b8462c561205189574fc4677e5538cc9136c10ab9921da"
+ },
+ "0x6b76a471c376d588ebcc61b7ace0fd489d5015ce27ca1d261927a05e12c35e3f:0x0": {
+ "data_hash": "0x450a496151c4111710cd56ffe7558b63b2a5e22e0ad7fd33edcf52173121c440"
+ },
+ "0x71eff92809d8a4981a72e97209d0b726be408aefa00d1508a26c8b1fff164552:0x0": {
+ "data_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020"
+ },
+ "0x7316d0640df6e12bf34469505237b41ef4ef81dd1d7cbe667d2bd929928a8ee9:0x0": {
+ "data_hash": "0x67c60bfc34958c28b1d5277be6995af9920d480f60ded40806eaf173c704d10d"
+ },
+ "0x7385b0cd1428d6b3de24c02748cd013790f75530ae9fe8bd125b74ba6388f97c:0x0": {
+ "data_hash": "0xc6c1fd22456162ae2457a61bb7fd4f0ad0ac92955adbc6a8da10a0caf1900362"
+ },
+ "0x757f318b25b23b441765bcbfac6ae04d0986ffcbdbc86cc58ebdd7eef79c65fc:0x0": {
+ "data_hash": "0x0d708753715b0c50502a06fea8c0d48b890212a5217b4330b7a77805a71f3dd7"
+ },
+ "0x75810e2bb00c39358795f31d647c7aab850fef67bf4c17be74391898f2699887:0x0": {
+ "data_hash": "0xc5eb6cb03878c77e75b8462c561205189574fc4677e5538cc9136c10ab9921da"
+ },
+ "0x7e9657ed8c1aabb75e70fe5a6f3e2b06aa9dc8c78551e69b967d148803ef9f0e:0x0": {
+ "data_hash": "0x967d150b17ee92167fda6eb3b28e453cfc084f19c7cbfc773bb3f1b93d4dea61"
+ },
+ "0x7f27bfaffe26061a6317a13ef25b9a6c7aa5ace6f31f4463fec22eb89aed6d18:0x0": {
+ "data_hash": "0x078a625eb933f34dee98290d89c9cd6b57ab95d8bb1a89f254f422649a972954"
+ },
+ "0x80ec8fc6e4986da8bc215946af429bbdb6fe26ab543bc6735377b480fcc8418a:0x0": {
+ "data_hash": "0x30999ca44c3638eceddd4d707a01242294bd06473c9e34f92f5cdea23c2bdb75"
+ },
+ "0x84949d0ac6b772fbe9eddc7aaecf1527609fb591c42129deea687f59d3bde57b:0x0": {
+ "data_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35"
+ },
+ "0x85999c8371807a66812a6db192e23c22335b1faf2cc3bcf873658c827ba80570:0x0": {
+ "data_hash": "0xb6d00cb658e0732961e4c25b5322160074ac41e52182067bc326353930063479"
+ },
+ "0x86c3b29ad0bba4281c2d58d64030f41ad9242dcce7416f20c67130a0df8b5e46:0x0": {
+ "data_hash": "0x13814f1b2b6fa776385ebf4a63ee7ec94ebc806957ac34dc565d573e7f9b0f4f"
+ },
+ "0x8713577264f34e7acd5e5d74b494dbfb1c09c70af8f30a7fb1c3570aa4cbf1d4:0x0": {
+ "data_hash": "0x318333f71531adb7109813cd89f757d76d7a1a8aebb79e93d800df8f4f0bc3c3"
+ },
+ "0x8ad8c938473f108cf363d556d16de535af96f3ad0d3bc6be6893da0a11e8a96d:0x0": {
+ "data_hash": "0xdebeeebed4b050592aeeda4cd26e530632ce8236e4a0481c150ee8264cfcdffb"
+ },
+ "0x8c6940241808971b02b84d9bae41658d771003f1c281eb929b3aebd456b637d1:0x0": {
+ "data_hash": "0xc13b702287bf01246fd600189482d58fb1e8bdadce497124858e010750a4b4cd"
+ },
+ "0x8cfc356815eccbcae35af59d0034cdda7af6094bb3a6e95e1b89b799f5d4cca5:0x1": {
+ "data_hash": "0x8ca88d88c4ccb8cdfc2645226faf2aa49f6f9b52c7dbae3ce5cc6ced0500229b"
+ },
+ "0x92ba4f3a9f6ef2ef017253e99a5769579a4d9af3cb0b5bfeaf674c73f73e022f:0x0": {
+ "data_hash": "0x450a496151c4111710cd56ffe7558b63b2a5e22e0ad7fd33edcf52173121c440"
+ },
+ "0x9572797579e20683ff0f7c6fe0152a168a9c6bade9800dcb77751ff651df8478:0x0": {
+ "data_hash": "0xe383a15d1b2e326df64363cab5778e79bd5edef2bc97a2ae3d4c77ab072752e3"
+ },
+ "0x96729af7693292d31397d4ebdf3624d743424a305cb8c4f7c6bdc5ad63111c9e:0x1": {
+ "data_hash": "0x54ff9579c276449e10cf3ab6189cc3e82a911b83eb3ec89b2940bbf692d1106b"
+ },
+ "0x969891936e2843de5c335b05af807ebe3ffc6d6f3e371e129c150b7944389b27:0x0": {
+ "data_hash": "0x87c083fadb4ec6e5823e9bd76b000f7b98f4b374cea82ed6a528915317d8a59e"
+ },
+ "0x99bd2cc55653377b2109baa3f88393a406c039e1fdf0703dcb782552e3ac16eb:0x0": {
+ "data_hash": "0x9da2791f3f0a46790e4b187a1d1dd15813f2c14883138631255c58b495a845d8"
+ },
+ "0x9b6af43c1c3e7556bbb8d2b570bf4c0c29bfc13989a59bc601a05810d7a78d85:0x0": {
+ "data_hash": "0x9da2791f3f0a46790e4b187a1d1dd15813f2c14883138631255c58b495a845d8"
+ },
+ "0x9f02df0a573644347b6f73102ec88a9c6be51b35fb36c6305e17048c3f13ec0d:0x0": {
+ "data_hash": "0x078a625eb933f34dee98290d89c9cd6b57ab95d8bb1a89f254f422649a972954"
+ },
+ "0xa641762dced489313320a33d0a25ad81848a3cfdf3e057d37e5313f5aa7bff7a:0x0": {
+ "data_hash": "0xee46f625f63eaccefbc7c9bf1393a21295d1d21e712fc704523d6f349a39ca26"
+ },
+ "0xa831ba0ff5d321de15b135872754b682e38d2ddd47c38d7315bce7f166e20ec4:0x0": {
+ "data_hash": "0xee0a4d051aeb5c2c39df4eeeda6a55b8cb9ea79a964b905d3288c0d83138fabc"
+ },
+ "0xaa5563e32d88035679d005517839675d1717431123ecccac41442e008f201abc:0x0": {
+ "data_hash": "0xa3bdc8e44991a1790d469db884797763ce5dd7ef8631b77f45c2d925633dbbd9"
+ },
+ "0xac7777ae99467a32a740f9f89776f0a5c1a17808c49e29e69a1b193d9f751e1b:0x0": {
+ "data_hash": "0x6d3f4ff4a0012611cfad302ba4de186169643407d6fb5b302cbd11183f5b280e"
+ },
+ "0xae0bc2b1731b075e540a5fd07c59b6bb03278cac9e259d21528e4b0e543ef2f0:0x1": {
+ "data_hash": "0x8ad83f727b350baccd6804275e333b8168861f8ee098d35119f5e32f2f298f55"
+ },
+ "0xb402243a1be68cc9f3dd8f703010b6faadc4a98ac26dc19d4cca2703edb335a3:0x0": {
+ "data_hash": "0xc6c1fd22456162ae2457a61bb7fd4f0ad0ac92955adbc6a8da10a0caf1900362"
+ },
+ "0xb547f36f187c1934d41fdd9aa8a0e855842721d14c598386bdc850d6b17b5517:0x0": {
+ "data_hash": "0xa983e55b6bf70b5e24415864e1ab3640ccef502351a814d229b66d6738e0c83a"
+ },
+ "0xb58deece93c4942aa5ab1e0722ebfceaa8f9fabe3c6e8eb01dff0f2bd44b176d:0x0": {
+ "data_hash": "0x734c3177a05355d83a3be6c68309e377cfa444fc62d5d6504b3664ea090e9b02"
+ },
+ "0xba786ad1ae914446151de4ce6258fc3d780be1d17424330bbd6a36b6b87f30a1:0x0": {
+ "data_hash": "0x7902ead8098947fb0d9cf87ed357d821d21c0e85505621627fbd81d873290140"
+ },
+ "0xbcad341f60c752aa595c93250be7968b9073f5c09b3e9c645fd115dec67eeb88:0x0": {
+ "data_hash": "0x734c3177a05355d83a3be6c68309e377cfa444fc62d5d6504b3664ea090e9b02"
+ },
+ "0xbdba2f98f29414b88797bc5942b6c00d6a887dffeee6e3af43579372ea4d612e:0x0": {
+ "data_hash": "0xb961548b7fb156288df5e3c472a626d1791f0753906579980f1c75f1069698a1"
+ },
+ "0xbe466bab7cff1e51bbd15ce13c297ff867f1b089231d2f4797f3e656f9f2fcdd:0x0": {
+ "data_hash": "0x6c976866fb9c343bd28922b92aca893f292fed889e52b75a59a10f738b31f4e7"
+ },
+ "0xbf23c0724ab21b007a7d3b7832a662b934e41b1c656f84b2544c87aacd5d8c48:0x1": {
+ "data_hash": "0xabb8fe08184a7964042c7ebd5817749c066dfdfc506d88f6bb1e60b4552b65ac"
+ },
+ "0xc0bcb97f3c6a8c60d29eb5ed52c18597b102a5b43a1694a53a31d079a8814a95:0x0": {
+ "data_hash": "0xc1e7dce634480aceedc7bd5dfbb7df1e5951cd945fb0d10cb8ea70968af0443b"
+ },
+ "0xc10773a7ba18c8d32e4deab978518e5d1f4665d833b6361ccc306d5382387f7a:0x1": {
+ "data_hash": "0x4d8f78c8205152c06842e724696959f882e8ed7c35a738f6a43f271ddbdaaf47"
+ },
+ "0xc145bbbef86e1441c587b6a24a8007c687becdb42b503a349b06475e8a86de48:0x0": {
+ "data_hash": "0xf51e1060b13ba495ab2cac42ab5102d7ff6bb2c00df50f115846b5fcc9429298"
+ },
+ "0xc1992e679cdcbc64bb722f94b5d226099b2b9ead0529e4ccf45833055f369b2a:0x0": {
+ "data_hash": "0x506f0fcad78f1aac2f1d95006a2a62b4dfbbfa2334a0838fd43f4610547b275e"
+ },
+ "0xc293f43936132ce8cb8f8a4a760f1de03c82dfd7464533a73b586d1867b92349:0x0": {
+ "data_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275"
+ },
+ "0xc3d498167f8fa254bdaed6029f276aacea9d662a5cd393b4cc19cffa2889fe25:0x0": {
+ "data_hash": "0xa3bdc8e44991a1790d469db884797763ce5dd7ef8631b77f45c2d925633dbbd9"
+ },
+ "0xc71e873453ffa750d9ef781214a1e015b9fe92ba751672b9592f3593750cb2fd:0x0": {
+ "data_hash": "0x9b4ed74a5469e89dd428a35929c57c901ef5dee0ea5a3e1979ac81d53dc2ea4e"
+ },
+ "0xc779774afe4bbb92248ad5e6f91ba71ddfac20bda122802790702264c6d8975f:0x0": {
+ "data_hash": "0xb961548b7fb156288df5e3c472a626d1791f0753906579980f1c75f1069698a1"
+ },
+ "0xc8d09aa1bd1628fbcbaf36c8708d86a6ae276bbada0a5b3f032f3c4188bcc9f2:0x0": {
+ "data_hash": "0x828a52262139378ce50e40ea7a24d4e8d8219cb2b9ae8f0e2a2cde2a8712a546"
+ },
+ "0xc922cbc382b9e65ed9852d188f4eac36d7b7e47c518639c0b6e39899aa32d440:0x0": {
+ "data_hash": "0xdebeeebed4b050592aeeda4cd26e530632ce8236e4a0481c150ee8264cfcdffb"
+ },
+ "0xce13932ab95d93c1314a4d502849177e49ae562fef4b548150bba05bb04896b4:0x0": {
+ "data_hash": "0xee46f625f63eaccefbc7c9bf1393a21295d1d21e712fc704523d6f349a39ca26"
+ },
+ "0xd0734aa42e646234c69b1fc13a8352a746230eb748a3b4f0ed577b37a59c97a6:0x0": {
+ "data_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35"
+ },
+ "0xd0b58fa147e5809651e0e3ec1edf1ebd5d25f78cd62529195d11c23bebab6f72:0x0": {
+ "data_hash": "0x582102f2b60c104220dfb5607341b748d7a0651050af5d2ee44f3a5fc540ce1d"
+ },
+ "0xd32db7375c2ca9b9df46c33c6d3c6ae4f1f86236633a3ad794086f2fa708f2e4:0x0": {
+ "data_hash": "0x318333f71531adb7109813cd89f757d76d7a1a8aebb79e93d800df8f4f0bc3c3"
+ },
+ "0xd3fd27a5c0ce54a627bc8b585760471badce4816d4839254b64ded850b60bfba:0x0": {
+ "data_hash": "0xafc1309eef287471f5feb8e01a6bad53624851301ed7e5117b803290c2362c80"
+ },
+ "0xdb30f9d5f126ed97836bb953e06415433f7367a42dd24b0a6b53f934259b70c9:0x0": {
+ "data_hash": "0x214893fb9dd10fe10e4a92ef80b06c126808256f524d308629c828a49c4327de"
+ },
+ "0xdb690265e0a48d6b81c1b38a4af3366976ec7d73515a63128a97e320a4664175:0x0": {
+ "data_hash": "0x4e52ecbe274e6cefae5fdb1eba4f1cee15d92370a2a991bce607e86bd12c2cae"
+ },
+ "0xdb73dd1332931d73fa333bb3e2b9ad2b0b93f3350e75420154005ba23a2d7d9d:0x0": {
+ "data_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64"
+ },
+ "0xdff9e4e52961c196f41c52c2d211468dfa6b3af8c4f194a02d4bc59bfe39d066:0x0": {
+ "data_hash": "0xf7a0ff2f4e06b8af72ebbd3aa6a7e6ffe61d3ada8258397c6c224d217ae9d3cd"
+ },
+ "0xe274608e446e15ce0f9ec8680954950c72336954fb025575fb4a310bad2c3d63:0x0": {
+ "data_hash": "0x2ca9877f46bc3e89b31d76e256714e075ad57732d7fcd489fdc6aa636772f93d"
+ },
+ "0xe2bfd1c340bd2b8f529bc256d9c58274f2e5c65e443ca77fc78a26d4904e4969:0x0": {
+ "data_hash": "0x7902ead8098947fb0d9cf87ed357d821d21c0e85505621627fbd81d873290140"
+ },
+ "0xe483d497e40139e1da27c2904f8438c0682a4ff9578d41a24eed218fa5ff76fd:0x0": {
+ "data_hash": "0x7cda3da79fb46eaed62752444d9d4f666897861039c77bf94f0532fc43162a70"
+ },
+ "0xeb13566917d6910918b1ccecac0c80f748dd0947169e3771684db5322187b986:0x0": {
+ "data_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275"
+ },
+ "0xebdaef4d2108c25778301a3237fbdcf71a260c384e1d8d3f738d16b65d7a66b8:0x1": {
+ "data_hash": "0xc735c3a898cf40f0f97cab804ca6b5f54b2d324994af8396ddd1e1bb4ceb5d99"
+ },
+ "0xec73cb2253c130c509a2fb0fa9557411c1bd607b51eb3ed20153393ca8c72157:0x0": {
+ "data_hash": "0xa34564aa114e28106b02f63243b50f5135adc633ff7a74e735d27e9404bf0710"
+ },
+ "0xef62d924ff6af766acc21727b36c6e6483fac2768527599bf597348eb3c55a91:0x1": {
+ "data_hash": null
+ },
+ "0xef6eddcdb6a4500202839de5d3929cdcb7ade4274dee72021b5612314ad01235:0x0": {
+ "data_hash": "0x2f95e743beef860d851bf2277fc56c036c5be0b956db68627791b404b45067e9"
+ },
+ "0xf0738d58ce079764795b431bbfd979cb1e39fa1672b01a35e6c50648a7831211:0x0": {
+ "data_hash": "0xb5e6f61a513204507f6cf508cbc23b449a60d91ef6ebdfde79fcf886bf4cb020"
+ },
+ "0xf0f807aecb16aaf7820fdb2c70d719912dd02d8274f76343fc42eebdbc3bcc02:0x0": {
+ "data_hash": "0x18758b10cc53dcf2fcd775462ec3ad8052ca19f21158a315eedc926cd085d520"
+ },
+ "0xf3587c0b234657d49a8060ead24d3c0c6746964524c281738238c2eee58261cc:0x0": {
+ "data_hash": "0xf51e1060b13ba495ab2cac42ab5102d7ff6bb2c00df50f115846b5fcc9429298"
+ },
+ "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e:0x5": {
+ "data_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5"
+ },
+ "0xf6c1dea3d39f795519ada0030abe07e5524aa5b99b89b86733664a7e038c7d96:0x0": {
+ "data_hash": "0x1b82b117ab4e41de9f6652a54f2f2ee24abad190b04a935cf90075cf9f3da237"
+ },
+ "0xf8ee78ee63762e2c05952e54e460b90a506c4160c9e4d420f83246162712be43:0x0": {
+ "data_hash": "0x967d150b17ee92167fda6eb3b28e453cfc084f19c7cbfc773bb3f1b93d4dea61"
+ },
+ "0xf90754033d45778b16034a348f5757b56b8578eab5fd81bd2707a4fa43572a7f:0x0": {
+ "data_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020"
+ },
+ "0xf99767aebf484c406de90a63140d8306eea1dbf509fb6b04f13f5594a27b4157:0x0": {
+ "data_hash": "0x7cda3da79fb46eaed62752444d9d4f666897861039c77bf94f0532fc43162a70"
+ },
+ "0xfa1320af6eff6f2b2b69e30391ca3a027c259318a86dca32e3238884311b84d7:0x0": {
+ "data_hash": "0xa34564aa114e28106b02f63243b50f5135adc633ff7a74e735d27e9404bf0710"
+ },
+ "0xfc01255f8d4c79d2307cbf689795022d46555c16027b3c954bc9969ec7387d81:0x0": {
+ "data_hash": "0xca92833ef77901845dd672a356fa9e568a3d46f179a1df5469dbbc05b7313427"
+ },
+ "0xfe8eb1d61e9167f5864fa5b417edb0c6976b8e3729c172ac6ec50382bd634b61:0x0": {
+ "data_hash": "0x540be7d1575ea9e60a6df5678ec2e4dc857edb687f1ad2f8359317be2288ff60"
+ }
+ },
+ "headers": {
+ "0x690c44e7f3605a4c984edfe17dc953047114aff5e42ae1b2f108dc042a37a34d": {
+ "number": "0x4a38",
+ "epoch": "0x708000000000b",
+ "timestamp": "0x19f98075357"
+ },
+ "0x88ce0e52d92e34dad6b737cc8c81d31badc9eaf981c783b52e3082c663d48093": {
+ "number": "0x4d6e",
+ "epoch": "0x708033600000b",
+ "timestamp": "0x19f9807a56b"
+ },
+ "0x8ddb85198d040fa97fc5d43e6d725e5b5ed0bf285022cc66a10e9bb1379bfecb": {
+ "number": "0x4d8d",
+ "epoch": "0x708035500000b",
+ "timestamp": "0x19f9807a840"
+ },
+ "0x933f1ca9e878cbe88f51849a169762b1d11758cf7d62db67824490dfdb39d8e1": {
+ "number": "0x411",
+ "epoch": "0x7080029000001",
+ "timestamp": "0x19f9802b6fb"
+ },
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5": {
+ "number": "0x0",
+ "epoch": "0x0",
+ "timestamp": "0x0"
+ },
+ "0xb35487c7b0d7a3c1351f9bdfdf76e178b01c7f93d4cfbbb84e1d07e800090bec": {
+ "number": "0x3fa",
+ "epoch": "0x7080012000001",
+ "timestamp": "0x19f9802b42b"
+ },
+ "0xe3351eef7f5486f5e5199cceb0953a762e70ff1fde6fe6419eb1b3ea1af366dd": {
+ "number": "0x3e8",
+ "epoch": "0x7080000000001",
+ "timestamp": "0x19f9802b205"
+ }
+ },
+ "action_cases": [
+ {
+ "name": "token.cell:mint_with_authority",
+ "action": "mint_with_authority",
+ "artifact_data_hash": "0x10f75e072356b123d3864ae553870a4759943c4ed71d373218ca17b611795020",
+ "initial_tx": "0xbb4544c75dd32136bfbc6eeab20b2a7ca0539d8e059d3fadfbca9393629a94e8",
+ "valid_tx": "0x4fd12d9427983bb4486b499152aa8b7cc9051c0e83f9baabe005a380bafbad07",
+ "acceptance_harness_name": "token-action-builder-v1",
+ "acceptance_harness_implementation": "token-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 586,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1255,
+ "measured_cycles": 10306,
+ "measured_output_capacity_shannons": [
+ 20000000000,
+ 10000000000
+ ],
+ "occupied_capacity_shannons": 18800000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 2,
+ "output_data_bytes": 40,
+ "output_occupied_capacity_shannons": [
+ 9800000000,
+ 9000000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 68,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "token.cell:transfer_token",
+ "action": "transfer_token",
+ "artifact_data_hash": "0x6c3bf0d1bc162b2c71378ec3ea55d34121ab8c66480524e83cc8943de6b26555",
+ "initial_tx": "0x44e53c1d471b7bdfbda6816b72152f0c83550a5296edac7313b645ccde8527dc",
+ "valid_tx": "0x9cc87bc8882895ab82b3cc4c91c1a6da4a0831019bad2b9454fb7195d703420f",
+ "acceptance_harness_name": "token-action-builder-v1",
+ "acceptance_harness_implementation": "token-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 412,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 916,
+ "measured_cycles": 6901,
+ "measured_output_capacity_shannons": [
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 9000000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 20000000000,
+ "output_count": 1,
+ "output_data_bytes": 16,
+ "output_occupied_capacity_shannons": [
+ 9000000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "token.cell:burn",
+ "action": "burn",
+ "artifact_data_hash": "0x1b82b117ab4e41de9f6652a54f2f2ee24abad190b04a935cf90075cf9f3da237",
+ "initial_tx": "0xb629ee7fb29df995ea9fae1d02db475f878ffea6657cea91d21fe1986779692f",
+ "valid_tx": "0xfa2e16ceccde2faf8a2ddcd8bedd2cbdbf0438cedb74d8e2684fea9e6ad98496",
+ "acceptance_harness_name": "token-action-builder-v1",
+ "acceptance_harness_implementation": "token-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 311,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 712,
+ "measured_cycles": 4918,
+ "measured_output_capacity_shannons": [
+ 10000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 10000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "token.cell:merge",
+ "action": "merge",
+ "artifact_data_hash": "0x6c976866fb9c343bd28922b92aca893f292fed889e52b75a59a10f738b31f4e7",
+ "initial_tx": "0x5debff60864d562bb94f7020d6a1180c7736815ee352e48c9905b920bc0cdf31",
+ "valid_tx": "0x19f683cc8c1d057780fae566d09ef252abb98559730bc9c17e6bebc703240968",
+ "acceptance_harness_name": "token-action-builder-v1",
+ "acceptance_harness_implementation": "token-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 464,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 2,
+ "json_envelope_size_bytes": 1050,
+ "measured_cycles": 8734,
+ "measured_output_capacity_shannons": [
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 9000000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 1,
+ "output_data_bytes": 16,
+ "output_occupied_capacity_shannons": [
+ 9000000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 2
+ }
+ },
+ {
+ "name": "nft.cell:create_collection",
+ "action": "create_collection",
+ "artifact_data_hash": "0xa34564aa114e28106b02f63243b50f5135adc633ff7a74e735d27e9404bf0710",
+ "initial_tx": "0x0fc3217536599ec792bf62408185b2a5c32103c994bd312fa19dbb7d02a957ac",
+ "valid_tx": "0x8729c54e1abbda37d62f0a446976f690613c634292e5e895b063547c5caa8e70",
+ "acceptance_harness_name": "nft-action-builder-v1",
+ "acceptance_harness_implementation": "nft-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 608,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1310,
+ "measured_cycles": 10653,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 20800000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 134,
+ "output_occupied_capacity_shannons": [
+ 20800000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 138,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "nft.cell:mint",
+ "action": "mint",
+ "artifact_data_hash": "0x967d150b17ee92167fda6eb3b28e453cfc084f19c7cbfc773bb3f1b93d4dea61",
+ "initial_tx": "0x1c5ec34e3022bdcee5b055f54102be7267a807b4baf9885b20efd665ba5ccbd9",
+ "valid_tx": "0xf212913e057843c248eea6ca642ad7cd8c1d930865fdea6604f4588b07f5e9f4",
+ "acceptance_harness_name": "nft-action-builder-v1",
+ "acceptance_harness_implementation": "nft-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 842,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1767,
+ "measured_cycles": 17699,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 42000000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 60000000000,
+ "output_count": 2,
+ "output_data_bytes": 272,
+ "output_occupied_capacity_shannons": [
+ 20800000000,
+ 21200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 92,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "nft.cell:transfer",
+ "action": "transfer",
+ "artifact_data_hash": "0x2ca9877f46bc3e89b31d76e256714e075ad57732d7fcd489fdc6aa636772f93d",
+ "initial_tx": "0x4b79a85846e54477f3689cc8fa64e3488e1f6c7da2ad02b12b4d7a623a8093f4",
+ "valid_tx": "0xa0d20ba71c2ee983d8b2ce0c261dad1978f0c078122ec9cf711ece0d24d6b223",
+ "acceptance_harness_name": "nft-action-builder-v1",
+ "acceptance_harness_implementation": "nft-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 534,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1162,
+ "measured_cycles": 15274,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 21200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 138,
+ "output_occupied_capacity_shannons": [
+ 21200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "nft.cell:create_listing",
+ "action": "create_listing",
+ "artifact_data_hash": "0xaaf97b20c59720fa641958ba0c26eb2bfd3ed6c23444975811f4f1c08989c368",
+ "initial_tx": "0xebdaef4d2108c25778301a3237fbdcf71a260c384e1d8d3f738d16b65d7a66b8",
+ "valid_tx": "0xd12b75240c9745693c87a94242cc383e3f4facb87b3d5a0e23a9f4e8242d9c5c",
+ "acceptance_harness_name": "nft-action-builder-v1",
+ "acceptance_harness_implementation": "nft-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 620,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1378,
+ "measured_cycles": 10434,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 70000000000
+ ],
+ "occupied_capacity_shannons": 20500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 89,
+ "output_occupied_capacity_shannons": [
+ 16400000000,
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 36,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "nft.cell:cancel_listing",
+ "action": "cancel_listing",
+ "artifact_data_hash": "0x30999ca44c3638eceddd4d707a01242294bd06473c9e34f92f5cdea23c2bdb75",
+ "initial_tx": "0xb81a922893475d9f7bb43877d52d7b7c15c1bc1db63a4cbdc5aa0a5d08abf784",
+ "valid_tx": "0xe60611e6f8611fb019ebb0dac2c76cfa5081ef8d05ae8b57c44c3e887cd656dd",
+ "acceptance_harness_name": "nft-action-builder-v1",
+ "acceptance_harness_implementation": "nft-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 311,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 712,
+ "measured_cycles": 4723,
+ "measured_output_capacity_shannons": [
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "nft.cell:buy_from_listing",
+ "action": "buy_from_listing",
+ "artifact_data_hash": "0xd305deeaaf5715086b9ca367189279b7709450c3df4a6b73620f841578e1195f",
+ "initial_tx": "0x4cc2653d8451a590de947172988ec164e7bf5a4fe457fdb4e2908b77e66c9d6d",
+ "valid_tx": "0x536a1329df3e98119af6bc48f9b8894650d7c85a852a37ae461fc28cd59ea098",
+ "acceptance_harness_name": "nft-action-builder-v1",
+ "acceptance_harness_implementation": "nft-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 1009,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 4,
+ "json_envelope_size_bytes": 2183,
+ "measured_cycles": 31755,
+ "measured_output_capacity_shannons": [
+ 100000000000,
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 39500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 140000000000,
+ "output_count": 3,
+ "output_data_bytes": 170,
+ "output_occupied_capacity_shannons": [
+ 21300000000,
+ 9100000000,
+ 9100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 4
+ }
+ },
+ {
+ "name": "nft.cell:create_offer",
+ "action": "create_offer",
+ "artifact_data_hash": "0xb961548b7fb156288df5e3c472a626d1791f0753906579980f1c75f1069698a1",
+ "initial_tx": "0x40461a7a9e89d6574d81d1c496cd2ada9191d4a10684f6df1a632805c20fa75d",
+ "valid_tx": "0x1db48d9dedbc8fbf3feb809f32e63986b8e07ebe639b8dae8a2c7f9ed0134ba1",
+ "acceptance_harness_name": "nft-action-builder-v1",
+ "acceptance_harness_implementation": "nft-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 590,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1276,
+ "measured_cycles": 10188,
+ "measured_output_capacity_shannons": [
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 17200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 1,
+ "output_data_bytes": 97,
+ "output_occupied_capacity_shannons": [
+ 17200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 124,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "nft.cell:accept_offer",
+ "action": "accept_offer",
+ "artifact_data_hash": "0x9c1a6fed0b778db0b8006116e9d9a6213d2b5dadf1ac391118790c44a9ffe275",
+ "initial_tx": "0x43aa34c172d01d43c427650825c520f05f0775b6691bb9448488bd542475db62",
+ "valid_tx": "0xe9f918cc4cd4842ac8cc6f54c0bd1c2158ceb0105d1b71b97c22524acef3e33f",
+ "acceptance_harness_name": "nft-action-builder-v1",
+ "acceptance_harness_implementation": "nft-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 1009,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 4,
+ "json_envelope_size_bytes": 2187,
+ "measured_cycles": 30706,
+ "measured_output_capacity_shannons": [
+ 100000000000,
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 39500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 140000000000,
+ "output_count": 3,
+ "output_data_bytes": 170,
+ "output_occupied_capacity_shannons": [
+ 21300000000,
+ 9100000000,
+ 9100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 4
+ }
+ },
+ {
+ "name": "nft.cell:burn",
+ "action": "burn",
+ "artifact_data_hash": "0xafc1309eef287471f5feb8e01a6bad53624851301ed7e5117b803290c2362c80",
+ "initial_tx": "0x264f70265a964d3719a86579311a2f1adb0b6de22fcf524908c46b500dca2770",
+ "valid_tx": "0x09a58ddb0bb12c02eb2ca45b0d43f56eb40ebbd1a58fe5224831bb01d8f394f1",
+ "acceptance_harness_name": "nft-action-builder-v1",
+ "acceptance_harness_implementation": "nft-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 311,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 713,
+ "measured_cycles": 4739,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "nft.cell:batch_mint",
+ "action": "batch_mint",
+ "artifact_data_hash": "0x0a4cb03cd7e44ca4449ded0f8c6014c0f919819072badeb07bd51e0add611f35",
+ "initial_tx": "0xab0f22960f33ac447c3075073190a7127930d337a090125a7279a8544f3d28d5",
+ "valid_tx": "0xb97f4c75e0015d8deae35de3cc121201aae47742a6e57687c1c8b5049796759c",
+ "acceptance_harness_name": "nft-action-builder-v1",
+ "acceptance_harness_implementation": "nft-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 1879,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 3816,
+ "measured_cycles": 42230,
+ "measured_output_capacity_shannons": [
+ 100000000000,
+ 25000000000,
+ 25000000000,
+ 25000000000,
+ 25000000000
+ ],
+ "occupied_capacity_shannons": 106100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 200000000000,
+ "output_count": 5,
+ "output_data_bytes": 686,
+ "output_occupied_capacity_shannons": [
+ 20900000000,
+ 21300000000,
+ 21300000000,
+ 21300000000,
+ 21300000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 284,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:create_absolute_lock",
+ "action": "create_absolute_lock",
+ "artifact_data_hash": "0xc1e7dce634480aceedc7bd5dfbb7df1e5951cd945fb0d10cb8ea70968af0443b",
+ "initial_tx": "0xd427ffbf8a602f10b6b1c845f50683fbc468d636c9749080b653c671827e22dd",
+ "valid_tx": "0x10a51089ec0c33634bb2ed3d14f89840602faf9866fea6d2d4e51b5d7cf98b07",
+ "acceptance_harness_name": "timelock-action-builder-v1",
+ "acceptance_harness_implementation": "timelock-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 549,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1195,
+ "measured_cycles": 8253,
+ "measured_output_capacity_shannons": [
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 15500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 1,
+ "output_data_bytes": 81,
+ "output_occupied_capacity_shannons": [
+ 15500000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 100,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:create_relative_lock",
+ "action": "create_relative_lock",
+ "artifact_data_hash": "0x828a52262139378ce50e40ea7a24d4e8d8219cb2b9ae8f0e2a2cde2a8712a546",
+ "initial_tx": "0x349aa74d03c45384b56f8dbc5aef108759d23116eeba59a92774cfc08682bf67",
+ "valid_tx": "0x6f6ed0c878e8dd8d80724a1b65adbc3ff9509f1727f2432790be4d5aebafb7ff",
+ "acceptance_harness_name": "timelock-action-builder-v1",
+ "acceptance_harness_implementation": "timelock-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 549,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1195,
+ "measured_cycles": 8279,
+ "measured_output_capacity_shannons": [
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 15500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 1,
+ "output_data_bytes": 81,
+ "output_occupied_capacity_shannons": [
+ 15500000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 100,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:lock_asset",
+ "action": "lock_asset",
+ "artifact_data_hash": "0xca92833ef77901845dd672a356fa9e568a3d46f179a1df5469dbbc05b7313427",
+ "initial_tx": "0x8cfc356815eccbcae35af59d0034cdda7af6094bb3a6e95e1b89b799f5d4cca5",
+ "valid_tx": "0xe795d5d96599dbae3f86bf88419c29ea037bd479b9339acb1fa189f5ebd5d259",
+ "acceptance_harness_name": "timelock-action-builder-v1",
+ "acceptance_harness_implementation": "timelock-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 539,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1212,
+ "measured_cycles": 8660,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 70000000000
+ ],
+ "occupied_capacity_shannons": 16400000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 48,
+ "output_occupied_capacity_shannons": [
+ 12300000000,
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:request_release",
+ "action": "request_release",
+ "artifact_data_hash": "0xc13b702287bf01246fd600189482d58fb1e8bdadce497124858e010750a4b4cd",
+ "initial_tx": "0x2b6f560e02fd1d710f9e47d3fb9771d37ae3b88362ebca48a822e3bee8e318f8",
+ "valid_tx": "0x352b275582f167c4a2332d05c5bab89ffb39f2053dcc899f5d42f57a9f075234",
+ "acceptance_harness_name": "timelock-action-builder-v1",
+ "acceptance_harness_implementation": "timelock-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 628,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1394,
+ "measured_cycles": 10961,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 70000000000
+ ],
+ "occupied_capacity_shannons": 18900000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 73,
+ "output_occupied_capacity_shannons": [
+ 14800000000,
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:request_emergency_release",
+ "action": "request_emergency_release",
+ "artifact_data_hash": "0x734c3177a05355d83a3be6c68309e377cfa444fc62d5d6504b3664ea090e9b02",
+ "initial_tx": "0x33611509a83b78a19cf2ce0980216ef2aa22a359ffb7d07bf31fbd73c339444c",
+ "valid_tx": "0xb112c9cde54c7772d740ce548093c97278a1c295fd05a60d2999dbab9ef7186c",
+ "acceptance_harness_name": "timelock-action-builder-v1",
+ "acceptance_harness_implementation": "timelock-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 706,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1550,
+ "measured_cycles": 12910,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 70000000000
+ ],
+ "occupied_capacity_shannons": 24200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 126,
+ "output_occupied_capacity_shannons": [
+ 20100000000,
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 85,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:approve_emergency_release",
+ "action": "approve_emergency_release",
+ "artifact_data_hash": "0x93f05f4fb67225c694ab2cb4c4b57125136e08fcff490458f42fa63e26086bdd",
+ "initial_tx": "0x740f68ba912a942022541741c57d332680fb0d6d73fece3763ce2f1a1a4d0628",
+ "valid_tx": "0xc8a5c0e66095d60b6955962dd47327012167b91791b6f762684de515b9c1354e",
+ "acceptance_harness_name": "timelock-action-builder-v1",
+ "acceptance_harness_implementation": "timelock-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 587,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1268,
+ "measured_cycles": 13061,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 26500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 190,
+ "output_occupied_capacity_shannons": [
+ 26500000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:extend_lock",
+ "action": "extend_lock",
+ "artifact_data_hash": "0x078a625eb933f34dee98290d89c9cd6b57ab95d8bb1a89f254f422649a972954",
+ "initial_tx": "0x7ebc3eee04e3daaf2d17874dcb156ce493376dfb56327782ad398567d2d154ee",
+ "valid_tx": "0x9c2c24f15cb3583f2f36a4bf4febc0fed09c369a71f5c3cd2148e206b8d788ee",
+ "acceptance_harness_name": "timelock-action-builder-v1",
+ "acceptance_harness_implementation": "timelock-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 517,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1132,
+ "measured_cycles": 13726,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 15500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 81,
+ "output_occupied_capacity_shannons": [
+ 15500000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 68,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:execute_release",
+ "action": "execute_release",
+ "artifact_data_hash": "0xc5eb6cb03878c77e75b8462c561205189574fc4677e5538cc9136c10ab9921da",
+ "initial_tx": "0x100622e71992fc7f45b3e46ff83c5f30748a75144c05ed015a39acaa2aefe84e",
+ "valid_tx": "0xd5fa5dcfd1dc5ac7749aac58e2ccc70953e8e86adcbbd315e7d28eac991c6bbc",
+ "acceptance_harness_name": "timelock-action-builder-v1",
+ "acceptance_harness_implementation": "timelock-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 764,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 3,
+ "json_envelope_size_bytes": 1676,
+ "measured_cycles": 23303,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 23800000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 60000000000,
+ "output_count": 2,
+ "output_data_bytes": 88,
+ "output_occupied_capacity_shannons": [
+ 9100000000,
+ 14700000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 3
+ }
+ },
+ {
+ "name": "timelock.cell:execute_emergency_release",
+ "action": "execute_emergency_release",
+ "artifact_data_hash": "0xa80dc0eca06d915541974ed828b671ef3583818828c8fd86aaf8922a8d282f64",
+ "initial_tx": "0x31aa013f1e5e95cef0f8a5cc0a4dc6c069ad72d6a2989a7aa02e13c7d30576c8",
+ "valid_tx": "0x5e9cccf3c3feeef58ad7e21e3b611b765752e45370870fbdcb2363fe645e714d",
+ "acceptance_harness_name": "timelock-action-builder-v1",
+ "acceptance_harness_implementation": "timelock-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 764,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 3,
+ "json_envelope_size_bytes": 1676,
+ "measured_cycles": 23092,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 23800000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 60000000000,
+ "output_count": 2,
+ "output_data_bytes": 88,
+ "output_occupied_capacity_shannons": [
+ 9100000000,
+ 14700000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 3
+ }
+ },
+ {
+ "name": "timelock.cell:batch_create_locks",
+ "action": "batch_create_locks",
+ "artifact_data_hash": "0x2eb610fca034a18303d192bcbf52ba0f68e6ee8b1cafa90b200d5edad55257ef",
+ "initial_tx": "0xd6d214048b0d486197d309dcd9317e52a42e3e20cc4f049c4e87281d1f5a6d5a",
+ "valid_tx": "0xdf6318fdf0dc8c8103363dc325dff2676b363c85405355debbdd24a41e424998",
+ "acceptance_harness_name": "timelock-action-builder-v1",
+ "acceptance_harness_implementation": "timelock-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 1434,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 2938,
+ "measured_cycles": 22840,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 30000000000,
+ 30000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 62000000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 120000000000,
+ "output_count": 4,
+ "output_data_bytes": 324,
+ "output_occupied_capacity_shannons": [
+ 15500000000,
+ 15500000000,
+ 15500000000,
+ 15500000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 316,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:create_wallet",
+ "action": "create_wallet",
+ "artifact_data_hash": "0x67c60bfc34958c28b1d5277be6995af9920d480f60ded40806eaf173c704d10d",
+ "initial_tx": "0x0cba9e700c8a662884ab05066a027cc22b03e79ac0facfcbe0d002acd391bc7f",
+ "valid_tx": "0xb74d691e2b3b09ba70b33cae3a78c04ab723fede031598d5ebbb30f3f79c8442",
+ "acceptance_harness_name": "multisig-action-builder-v1",
+ "acceptance_harness_implementation": "multisig-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 619,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1332,
+ "measured_cycles": 10500,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 21600000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 141,
+ "output_occupied_capacity_shannons": [
+ 21600000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 141,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:propose_transfer",
+ "action": "propose_transfer",
+ "artifact_data_hash": "0x540be7d1575ea9e60a6df5678ec2e4dc857edb687f1ad2f8359317be2288ff60",
+ "initial_tx": "0xe2caa37ca2e0591eb4662a9c263d9bbd2fb0c1717253b0e909e24658f5d5dbf9",
+ "valid_tx": "0x5fae038da17633b4994474ccfab8cd4769b9670ca984573a047d8e73fa1321f9",
+ "acceptance_harness_name": "multisig-action-builder-v1",
+ "acceptance_harness_implementation": "multisig-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 920,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1925,
+ "measured_cycles": 20931,
+ "measured_output_capacity_shannons": [
+ 70000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 48200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 332,
+ "output_occupied_capacity_shannons": [
+ 21600000000,
+ 26600000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 108,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:record_approval",
+ "action": "record_approval",
+ "artifact_data_hash": "0xb5e6f61a513204507f6cf508cbc23b449a60d91ef6ebdfde79fcf886bf4cb020",
+ "initial_tx": "0xc10773a7ba18c8d32e4deab978518e5d1f4665d833b6361ccc306d5382387f7a",
+ "valid_tx": "0xc962300d035f0d3e1a401d57d0420ee6e984c4cabc0da7cf8beae28bb3b0c040",
+ "acceptance_harness_name": "multisig-action-builder-v1",
+ "acceptance_harness_implementation": "multisig-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 888,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1913,
+ "measured_cycles": 24951,
+ "measured_output_capacity_shannons": [
+ 60000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 45300000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 90000000000,
+ "output_count": 2,
+ "output_data_bytes": 303,
+ "output_occupied_capacity_shannons": [
+ 33000000000,
+ 12300000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 68,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:propose_add_signer",
+ "action": "propose_add_signer",
+ "artifact_data_hash": "0x204920209dab2137b0f75335063856cc1e84d28b41d1e31c2160614832de50ec",
+ "initial_tx": "0x402005d53808fc439e58003f9ffecbc77ab2cf229dbf93bff3888221c05c37cd",
+ "valid_tx": "0x73908c7815c16a3a45f876d8695355d173f8d1ab68c8b7e74d2bd6d398d440ae",
+ "acceptance_harness_name": "multisig-action-builder-v1",
+ "acceptance_harness_implementation": "multisig-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 944,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1973,
+ "measured_cycles": 22313,
+ "measured_output_capacity_shannons": [
+ 70000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 51400000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 364,
+ "output_occupied_capacity_shannons": [
+ 21600000000,
+ 29800000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 100,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:propose_remove_signer",
+ "action": "propose_remove_signer",
+ "artifact_data_hash": "0x7cda3da79fb46eaed62752444d9d4f666897861039c77bf94f0532fc43162a70",
+ "initial_tx": "0x0495a8b89852af2a653540ebe699453d04134738225430a174119ef7db3fa047",
+ "valid_tx": "0xc390427394790da202c9564f872551a36bcee7747e19fcc58d0eac765d7bbaae",
+ "acceptance_harness_name": "multisig-action-builder-v1",
+ "acceptance_harness_implementation": "multisig-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 912,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1909,
+ "measured_cycles": 21975,
+ "measured_output_capacity_shannons": [
+ 70000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 48200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 332,
+ "output_occupied_capacity_shannons": [
+ 21600000000,
+ 26600000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 100,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:propose_change_threshold",
+ "action": "propose_change_threshold",
+ "artifact_data_hash": "0x9da2791f3f0a46790e4b187a1d1dd15813f2c14883138631255c58b495a845d8",
+ "initial_tx": "0x1213c894962b0b93e2fd49eb38ba5121b5df709d1d78ee888b4a060534f99ab9",
+ "valid_tx": "0xdfb65c7699a692c39bdba73ec0647d99c56398310465d1db372c8a63369c0c93",
+ "acceptance_harness_name": "multisig-action-builder-v1",
+ "acceptance_harness_implementation": "multisig-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 882,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1849,
+ "measured_cycles": 20324,
+ "measured_output_capacity_shannons": [
+ 70000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 48300000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 333,
+ "output_occupied_capacity_shannons": [
+ 21600000000,
+ 26700000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 69,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:execute_proposal",
+ "action": "execute_proposal",
+ "artifact_data_hash": "0xee0a4d051aeb5c2c39df4eeeda6a55b8cb9ea79a964b905d3288c0d83138fabc",
+ "initial_tx": "0x014f954ce1b5dcd67562a3094bda3060e3807bd071a5da61a107a3c4c02716e2",
+ "valid_tx": "0xf18073c9dd4436dfca5146f8b7aac0e4bfe4398b8b6f91f1727873aeef202c9d",
+ "acceptance_harness_name": "multisig-action-builder-v1",
+ "acceptance_harness_implementation": "multisig-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 491,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1128,
+ "measured_cycles": 12997,
+ "measured_output_capacity_shannons": [
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 12400000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 20000000000,
+ "output_count": 1,
+ "output_data_bytes": 49,
+ "output_occupied_capacity_shannons": [
+ 12400000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 68,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:cancel_proposal",
+ "action": "cancel_proposal",
+ "artifact_data_hash": "0xf51e1060b13ba495ab2cac42ab5102d7ff6bb2c00df50f115846b5fcc9429298",
+ "initial_tx": "0x96729af7693292d31397d4ebdf3624d743424a305cb8c4f7c6bdc5ad63111c9e",
+ "valid_tx": "0xf222cd329af79ea45c70e20dca573edbfb9d93769d15c1cf06d0c6d30f572804",
+ "acceptance_harness_name": "multisig-action-builder-v1",
+ "acceptance_harness_implementation": "multisig-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 380,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 903,
+ "measured_cycles": 9378,
+ "measured_output_capacity_shannons": [
+ 49000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 49000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "vesting.cell:create_vesting_config",
+ "action": "create_vesting_config",
+ "artifact_data_hash": "0xc6c1fd22456162ae2457a61bb7fd4f0ad0ac92955adbc6a8da10a0caf1900362",
+ "initial_tx": "0x15da87cfff34c6bfc7a7012177b4845fbdd717f50dd145d2772678981f5a14e4",
+ "valid_tx": "0xba87194e3b5862bb583ac228ca3b79b0230c2667d71c095fb5c8e33f375c4006",
+ "acceptance_harness_name": "vesting-action-builder-v1",
+ "acceptance_harness_implementation": "vesting-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 479,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1050,
+ "measured_cycles": 7798,
+ "measured_output_capacity_shannons": [
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 13200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 1,
+ "output_data_bytes": 57,
+ "output_occupied_capacity_shannons": [
+ 13200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 85,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "vesting.cell:grant_vesting",
+ "action": "grant_vesting",
+ "artifact_data_hash": "0xdebeeebed4b050592aeeda4cd26e530632ce8236e4a0481c150ee8264cfcdffb",
+ "initial_tx": "0x403c6468185cda532c013187efc8a8037ddab784faa77ffa2f598d8aac72eb71",
+ "valid_tx": "0xec6798ce41a5f6e605ff145156155055fa3de7d9d3ae339a7a362f91fdc060c9",
+ "acceptance_harness_name": "vesting-action-builder-v1",
+ "acceptance_harness_implementation": "vesting-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 681,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 2,
+ "json_envelope_size_bytes": 1540,
+ "measured_cycles": 12327,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 118011109343
+ ],
+ "occupied_capacity_shannons": 19800000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 148011109343,
+ "output_count": 2,
+ "output_data_bytes": 81,
+ "output_occupied_capacity_shannons": [
+ 15700000000,
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "vesting.cell:claim_vested",
+ "action": "claim_vested",
+ "artifact_data_hash": "0xcc321278301291afc3c43ae43d5e3e3c10ce9cf0658c3063587b0123cdce7cef",
+ "initial_tx": "0xb7978d739c6d861ab1902226dbc51bfad44edf6dcfdee1dc303f50606f4c62ea",
+ "valid_tx": "0x328af8fa27cee70d6009d30c6b9ce494b1cd01e8f30f36e7c0e8b1031056850b",
+ "acceptance_harness_name": "vesting-action-builder-v1",
+ "acceptance_harness_implementation": "vesting-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 637,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1362,
+ "measured_cycles": 18801,
+ "measured_output_capacity_shannons": [
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 24700000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 40000000000,
+ "output_count": 2,
+ "output_data_bytes": 97,
+ "output_occupied_capacity_shannons": [
+ 9100000000,
+ 15600000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "vesting.cell:claim_fully_vested",
+ "action": "claim_fully_vested",
+ "artifact_data_hash": "0x318333f71531adb7109813cd89f757d76d7a1a8aebb79e93d800df8f4f0bc3c3",
+ "initial_tx": "0x4a2f379980234301b6755cdb05bbcf5d46f407f31a8fe7228bf2cce0c29cbc7c",
+ "valid_tx": "0x2ad1120afda308f8aabe45f3ace721125f268138917137a0e2681c435e47b6c6",
+ "acceptance_harness_name": "vesting-action-builder-v1",
+ "acceptance_harness_implementation": "vesting-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 637,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1362,
+ "measured_cycles": 12869,
+ "measured_output_capacity_shannons": [
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 24700000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 40000000000,
+ "output_count": 2,
+ "output_data_bytes": 97,
+ "output_occupied_capacity_shannons": [
+ 9100000000,
+ 15600000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "vesting.cell:revoke_grant",
+ "action": "revoke_grant",
+ "artifact_data_hash": "0x7902ead8098947fb0d9cf87ed357d821d21c0e85505621627fbd81d873290140",
+ "initial_tx": "0x515a67864ac1959d9cd4fa108ba421b195a4410f1878832bd01208b5d86e7fcd",
+ "valid_tx": "0xad8a03597cf6aeceb16aa4a16ccc2828bcbd49b1aa2861b5fa01440d6fe803e3",
+ "acceptance_harness_name": "vesting-action-builder-v1",
+ "acceptance_harness_implementation": "vesting-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 650,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1428,
+ "measured_cycles": 15427,
+ "measured_output_capacity_shannons": [
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 18300000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 40000000000,
+ "output_count": 2,
+ "output_data_bytes": 32,
+ "output_occupied_capacity_shannons": [
+ 9200000000,
+ 9100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 2
+ }
+ },
+ {
+ "name": "amm_pool.cell:seed_pool",
+ "action": "seed_pool",
+ "artifact_data_hash": "0x13814f1b2b6fa776385ebf4a63ee7ec94ebc806957ac34dc565d573e7f9b0f4f",
+ "initial_tx": "0x8b85a45b4b3c0da4633ca155697290d15ec99bb27068b1a2f611d49214869704",
+ "valid_tx": "0xd8e30c66d1da8a5af3a43c6e7514e691948b6aea907874ed80858eaae0201caf",
+ "acceptance_harness_name": "amm-action-builder-v1",
+ "acceptance_harness_implementation": "amm-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 773,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 2,
+ "json_envelope_size_bytes": 1658,
+ "measured_cycles": 21009,
+ "measured_output_capacity_shannons": [
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 32900000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 40000000000,
+ "output_count": 2,
+ "output_data_bytes": 178,
+ "output_occupied_capacity_shannons": [
+ 18100000000,
+ 14800000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 62,
+ "witness_count": 2
+ }
+ },
+ {
+ "name": "amm_pool.cell:add_liquidity",
+ "action": "add_liquidity",
+ "artifact_data_hash": "0xee46f625f63eaccefbc7c9bf1393a21295d1d21e712fc704523d6f349a39ca26",
+ "initial_tx": "0x3682c9124a707c7882a88d8e30916895d83e6989ee0538f9f4e3393cbed1c523",
+ "valid_tx": "0x1535a036000b44931b13d0b9248ff807dcb50831b85c97aa6a6bb54e454c3d39",
+ "acceptance_harness_name": "amm-action-builder-v1",
+ "acceptance_harness_implementation": "amm-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 823,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 3,
+ "json_envelope_size_bytes": 1789,
+ "measured_cycles": 35100,
+ "measured_output_capacity_shannons": [
+ 40000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 32900000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 60000000000,
+ "output_count": 2,
+ "output_data_bytes": 178,
+ "output_occupied_capacity_shannons": [
+ 18100000000,
+ 14800000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 3
+ }
+ },
+ {
+ "name": "amm_pool.cell:swap_a_for_b",
+ "action": "swap_a_for_b",
+ "artifact_data_hash": "0xa3bdc8e44991a1790d469db884797763ce5dd7ef8631b77f45c2d925633dbbd9",
+ "initial_tx": "0x899bac1c9e02a9ca6cd47386e6fd5470d06ba1348a018b2acd8d3d0bbde2bade",
+ "valid_tx": "0xb83abaee23854733da3a985f90440de3c831022c65e128ae2b0b1c0b2ca82850",
+ "acceptance_harness_name": "amm-action-builder-v1",
+ "acceptance_harness_implementation": "amm-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 723,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 2,
+ "json_envelope_size_bytes": 1559,
+ "measured_cycles": 34234,
+ "measured_output_capacity_shannons": [
+ 40000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 27300000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 60000000000,
+ "output_count": 2,
+ "output_data_bytes": 122,
+ "output_occupied_capacity_shannons": [
+ 18100000000,
+ 9200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 68,
+ "witness_count": 2
+ }
+ },
+ {
+ "name": "amm_pool.cell:remove_liquidity",
+ "action": "remove_liquidity",
+ "artifact_data_hash": "0x513c43aa3e994cbdf9bcd7903f1e220882873ad830b3eb024cdeefe2ca3afcb3",
+ "initial_tx": "0x95cf642ae48c517930fe6e3c737fd3981c2f910242f22d5dee7ab53f44c20d9f",
+ "valid_tx": "0xcaf1e3fead81946aed95a54b532f739b4c68b6fbae7165a5f1ff919c8f8b3756",
+ "acceptance_harness_name": "amm-action-builder-v1",
+ "acceptance_harness_implementation": "amm-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 875,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 2,
+ "json_envelope_size_bytes": 1853,
+ "measured_cycles": 33668,
+ "measured_output_capacity_shannons": [
+ 40000000000,
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 36500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 80000000000,
+ "output_count": 3,
+ "output_data_bytes": 138,
+ "output_occupied_capacity_shannons": [
+ 18100000000,
+ 9200000000,
+ 9200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 2
+ }
+ },
+ {
+ "name": "launch.cell:launch_token",
+ "action": "launch_token",
+ "artifact_data_hash": "0x450a496151c4111710cd56ffe7558b63b2a5e22e0ad7fd33edcf52173121c440",
+ "initial_tx": "0x8e884dba5cfbc95c6e63d17866f4568b4fb2f28003b49d51d98ce98042d5c3b1",
+ "valid_tx": "0x1d50df7be4e0dc58deab8432cbcc769e2d8d00ff832dd9f6c55522f40c9360ed",
+ "acceptance_harness_name": "launch-action-builder-v1",
+ "acceptance_harness_implementation": "launch-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 1882,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 3786,
+ "measured_cycles": 43676,
+ "measured_output_capacity_shannons": [
+ 40000000000,
+ 20000000000,
+ 20000000000,
+ 20000000000,
+ 20000000000,
+ 40000000000,
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 89000000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 200000000000,
+ "output_count": 8,
+ "output_data_bytes": 282,
+ "output_occupied_capacity_shannons": [
+ 10000000000,
+ 9200000000,
+ 9200000000,
+ 9200000000,
+ 9200000000,
+ 18200000000,
+ 14800000000,
+ 9200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 254,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "launch.cell:bootstrap_token",
+ "action": "bootstrap_token",
+ "artifact_data_hash": "0xb6d00cb658e0732961e4c25b5322160074ac41e52182067bc326353930063479",
+ "initial_tx": "0x189e7a1b87b0df7c8fb2117191bb6fd6fa7f33b4aac9f4a53edc5ca5cb913a6c",
+ "valid_tx": "0xc1027a7241ef72189a265f99ee6df274cffd53983ff85f0fc6e51b3372bb47a7",
+ "acceptance_harness_name": "launch-action-builder-v1",
+ "acceptance_harness_implementation": "launch-action-builder-v1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 1006,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 2074,
+ "measured_cycles": 16332,
+ "measured_output_capacity_shannons": [
+ 40000000000,
+ 20000000000,
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 37600000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 4,
+ "output_data_bytes": 72,
+ "output_occupied_capacity_shannons": [
+ 10000000000,
+ 9200000000,
+ 9200000000,
+ 9200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 164,
+ "witness_count": 1
+ }
+ }
+ ],
+ "lock_cases": [
+ {
+ "name": "nft.cell:nft_ownership",
+ "example": "nft.cell",
+ "lock": "nft_ownership",
+ "artifact_data_hash": "0x18758b10cc53dcf2fcd775462ec3ad8052ca19f21158a315eedc926cd085d520",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0xc0ca46dcc6d0c1c6ba5944656d1e5650b877f934911cb540e2b52a1f191f85b9",
+ "valid_tx": "0xb492fefbdce3c5a93e58b60643f9b3f851703401e75a5f6070e6e016bb1b6e48",
+ "invalid_create_tx": "0x69d4ed19143215adfaec3dd6a0030b59200a21d8931079cd8504c0726bbe866c",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xf0f807aecb16aaf7820fdb2c70d719912dd02d8274f76343fc42eebdbc3bcc02"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x69d4ed19143215adfaec3dd6a0030b59200a21d8931079cd8504c0726bbe866c"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631003333333333333333333333333333333333333333333333333333333333333333"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 343,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 776,
+ "measured_cycles": 5119,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "nft.cell:listing_seller",
+ "example": "nft.cell",
+ "lock": "listing_seller",
+ "artifact_data_hash": "0x6d3f4ff4a0012611cfad302ba4de186169643407d6fb5b302cbd11183f5b280e",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0x1f7b418973fc0723338fc7f2ff45fbd774b0afe291bca5e12e501388fc0d1f8a",
+ "valid_tx": "0x67be331af3ce7812f3b9acc4dd3f4e6fdda26bce7daaf7e97250aa7a018214ce",
+ "invalid_create_tx": "0x71ebb2e3086c8a436787a22c176235cc45e7b75779ba47d34bd390f41b4b9af5",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xac7777ae99467a32a740f9f89776f0a5c1a17808c49e29e69a1b193d9f751e1b"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x71ebb2e3086c8a436787a22c176235cc45e7b75779ba47d34bd390f41b4b9af5"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631003333333333333333333333333333333333333333333333333333333333333333"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 343,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 776,
+ "measured_cycles": 5103,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "nft.cell:offer_buyer",
+ "example": "nft.cell",
+ "lock": "offer_buyer",
+ "artifact_data_hash": "0xe47eaf52f41e951f3eb7ae9bfd1173ca26b884ecff101bfa931b5a75ddf1be70",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0x58389e2aa2f07b207b69c854bb471cbfa9e980b3fb0f5c5acde5d16fe4163f05",
+ "valid_tx": "0xd097c95c41a0970b66c253c9abe6b3f276282b2a8f6126dda3cf18494340b2c3",
+ "invalid_create_tx": "0x39d8620d7cdab5fe38e1f273955366ec78088bb03ca244c8e652ca01eda72ffd",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x1e601e8f4a43db4216118fd235a8c21841e611d4d32208c6f8745d6ff5049d74"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x39d8620d7cdab5fe38e1f273955366ec78088bb03ca244c8e652ca01eda72ffd"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631003333333333333333333333333333333333333333333333333333333333333333"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 343,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 776,
+ "measured_cycles": 5111,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "nft.cell:valid_royalty",
+ "example": "nft.cell",
+ "lock": "valid_royalty",
+ "artifact_data_hash": "0x2f95e743beef860d851bf2277fc56c036c5be0b956db68627791b404b45067e9",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0xa0ad32ea6682bbe84f394ed740b42c4412c497273adb2955e6cbbba2d6d25137",
+ "valid_tx": "0xd816ab4444154f8550b94676b6195160a7a09d0ba5d9d42ccee11c4d34370f1e",
+ "invalid_create_tx": "0xe36126e163f21a6ca37cad04416acdee8215a45efb9627b21209c0d73f8e70aa",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xef6eddcdb6a4500202839de5d3929cdcb7ade4274dee72021b5612314ad01235"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xe36126e163f21a6ca37cad04416acdee8215a45efb9627b21209c0d73f8e70aa"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 311,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 712,
+ "measured_cycles": 2557,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "nft.cell:collection_creator",
+ "example": "nft.cell",
+ "lock": "collection_creator",
+ "artifact_data_hash": "0x87c083fadb4ec6e5823e9bd76b000f7b98f4b374cea82ed6a528915317d8a59e",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0xa120df0ec121ee17c99593ca6475b3874bd6fff05693e1e579f03c878e6b6303",
+ "valid_tx": "0xaf62b59e32e627da106edf13d40c811ce3dec551c1d67ea8831100cf3862c90f",
+ "invalid_create_tx": "0x303ddda76da0fffdac25e53f5e93c2bfca6617c7281d37afd216d8f64410ceb3",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x969891936e2843de5c335b05af807ebe3ffc6d6f3e371e129c150b7944389b27"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x303ddda76da0fffdac25e53f5e93c2bfca6617c7281d37afd216d8f64410ceb3"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631003333333333333333333333333333333333333333333333333333333333333333"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 343,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 776,
+ "measured_cycles": 4995,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:can_unlock_lock",
+ "example": "timelock.cell",
+ "lock": "can_unlock_lock",
+ "artifact_data_hash": "0x582102f2b60c104220dfb5607341b748d7a0651050af5d2ee44f3a5fc540ce1d",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0x7dbcaed57f3138633b094969af7e098cfc7e5615d0822585ef1bc3d2a0621514",
+ "valid_tx": "0x7e40aa9553c4f2c63d5ae3732a4d57a9e697e14b8bf8428dcd99574709a66b9e",
+ "invalid_create_tx": "0xabf216907540017b954863b29e925febb092f833c52f4b0c4678603a0c60cfd7",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xd0b58fa147e5809651e0e3ec1edf1ebd5d25f78cd62529195d11c23bebab6f72"
+ }
+ }
+ ],
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xabf216907540017b954863b29e925febb092f833c52f4b0c4678603a0c60cfd7"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 343,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 780,
+ "measured_cycles": 3221,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:is_owner",
+ "example": "timelock.cell",
+ "lock": "is_owner",
+ "artifact_data_hash": "0x67cf56e6c2bcd82506436ade5d8a220f9b51ad099c307d7cb59de6629cca279e",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0x359f39061473e35c6dbab0c66794d75a41382022924c32e1f8adb6b7e18bc87a",
+ "valid_tx": "0x3c849919043c16e3e898eda183516a34bbcdc02458f05c8d208cf134cf0ed8f0",
+ "invalid_create_tx": "0xceaaabab7b6cb8b1b1a6332e8f0624978e76fa9931a2e5097dbb48abebb09df2",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x59e35a159719575477e11dfd15b9b1c0c0c895495034a74e23e8f89a884cfa44"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xceaaabab7b6cb8b1b1a6332e8f0624978e76fa9931a2e5097dbb48abebb09df2"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631003333333333333333333333333333333333333333333333333333333333333333"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 343,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 776,
+ "measured_cycles": 5097,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:lock_id_commitment",
+ "example": "timelock.cell",
+ "lock": "lock_id_commitment",
+ "artifact_data_hash": "0x1ef8dbe9b2f531b18576d6ec194fae7e744ac501952706adcb6382d1deea04b4",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0x08cbc0f0e4b4a1201e687be7ab5380399f3f971ab68bae873e7b6e5dde6dac8c",
+ "valid_tx": "0xf784caf50f8ff3466cfb61ca40b3fecb90bff03f1dfb1916ca749f33b54d216d",
+ "invalid_create_tx": "0xf7a35513fabdaa0d83307fa67eb92badabb850a2b71ec2a2f67b49229ed9dc59",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x49ce2be6cbe254c0a78346d81c7b098e74f44601c4693a509ba36d4b3c681f69"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xf7a35513fabdaa0d83307fa67eb92badabb850a2b71ec2a2f67b49229ed9dc59"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631005555555555555555555555555555555555555555555555555555555555555555"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 343,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 776,
+ "measured_cycles": 17895,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:asset_matches",
+ "example": "timelock.cell",
+ "lock": "asset_matches",
+ "artifact_data_hash": "0x214893fb9dd10fe10e4a92ef80b06c126808256f524d308629c828a49c4327de",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0x2746ae89bf4c9c652cebc4119bbd5a9df9f721f9eedd64182d188bbc17e5d489",
+ "valid_tx": "0xfe15000508fa702953f7966b7da93a3ee01952d7fbf7968c831b4d4103a1f587",
+ "invalid_create_tx": "0x98b4b13e3fc4f920bf1ae1626c1959f156e3d8ba0b608e4742e6e8ef998a149f",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x1",
+ "tx_hash": "0x98b4b13e3fc4f920bf1ae1626c1959f156e3d8ba0b608e4742e6e8ef998a149f"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdb30f9d5f126ed97836bb953e06415433f7367a42dd24b0a6b53f934259b70c9"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x98b4b13e3fc4f920bf1ae1626c1959f156e3d8ba0b608e4742e6e8ef998a149f"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100",
+ "0x"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 356,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 844,
+ "measured_cycles": 4608,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 2
+ }
+ },
+ {
+ "name": "timelock.cell:not_expired",
+ "example": "timelock.cell",
+ "lock": "not_expired",
+ "artifact_data_hash": "0xf7a0ff2f4e06b8af72ebbd3aa6a7e6ffe61d3ada8258397c6c224d217ae9d3cd",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0x073245d0e75464ee92f0f4a3264f989fe4ea3c11dac3e4a1abd6084ea8dc2305",
+ "valid_tx": "0x964480ea9d113044f45b7aa836999dc9486a95c1f3786c7ffaa6df2a1457cc0c",
+ "invalid_create_tx": "0xed204f9b9fa736fae8691f41c9674b625c5a831a7d6fa0d5d2b50c1d4ce5e142",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdff9e4e52961c196f41c52c2d211468dfa6b3af8c4f194a02d4bc59bfe39d066"
+ }
+ }
+ ],
+ "header_deps": [
+ "0xb1308c5915db1ae2ed1511f83daf95224bbdef11e226d7054b5720b9efee90d5"
+ ],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xed204f9b9fa736fae8691f41c9674b625c5a831a7d6fa0d5d2b50c1d4ce5e142"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 343,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 780,
+ "measured_cycles": 3164,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "timelock.cell:emergency_approved",
+ "example": "timelock.cell",
+ "lock": "emergency_approved",
+ "artifact_data_hash": "0xe383a15d1b2e326df64363cab5778e79bd5edef2bc97a2ae3d4c77ab072752e3",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0xb9f8fd253e6da658201c7d51eb1d64c53ae37639fc94ead37dce09dc7b8a122f",
+ "valid_tx": "0xfc4b81ff774304b41f674c3e53c374264a3ec988118144a8d49ebb87e66e2f00",
+ "invalid_create_tx": "0x2119c94d3c5beaff73b1cd02bacc32f3f83a69baded172e851e65d5d8a52f3f4",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x9572797579e20683ff0f7c6fe0152a168a9c6bade9800dcb77751ff651df8478"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x2119c94d3c5beaff73b1cd02bacc32f3f83a69baded172e851e65d5d8a52f3f4"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 311,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 712,
+ "measured_cycles": 2710,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:is_signer_lock",
+ "example": "multisig.cell",
+ "lock": "is_signer_lock",
+ "artifact_data_hash": "0xaebdd9d7c1cd1a9b581bc3a42a6c5f40d5b41f2ee637f7a1b4e4eef38500c349",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0x835773fb38ff3537ca5a342019797b8ac9f66e92beaf0308bd39cf93eec19ad0",
+ "valid_tx": "0x8128c4595a00a0cc220271dded5f787a8106cbefee1554c9719e586e76b9893f",
+ "invalid_create_tx": "0x0ea342c485118cb69e4ecbc668e9c916b479fd6be1a284ef27db92c29f0b7141",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x2da50f9b01999a58735ab822ba3bc2b743d5d297b196e77f7cbbe84bc2766aac"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x0ea342c485118cb69e4ecbc668e9c916b479fd6be1a284ef27db92c29f0b7141"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631003333333333333333333333333333333333333333333333333333333333333333"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 343,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 776,
+ "measured_cycles": 5078,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:can_execute",
+ "example": "multisig.cell",
+ "lock": "can_execute",
+ "artifact_data_hash": "0x4e52ecbe274e6cefae5fdb1eba4f1cee15d92370a2a991bce607e86bd12c2cae",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0x336a97dc34dcfb9fd522d94f3a0653fb50f2aaf7d4cba9278462fe43e92a70c9",
+ "valid_tx": "0x32a7a73a12207334bbb3966a636e22d5ea60ee3dbcf4b8f0d757c90e3cc282b6",
+ "invalid_create_tx": "0x2b965ae1e6b62320a3cf421dc790d3a585e91e990f098ee61a63f21f8edfb669",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xdb690265e0a48d6b81c1b38a4af3366976ec7d73515a63128a97e320a4664175"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x2b965ae1e6b62320a3cf421dc790d3a585e91e990f098ee61a63f21f8edfb669"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x24000000100000001000000024000000100000004353415247763100c409000000000000"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 319,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 728,
+ "measured_cycles": 4771,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 36,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:can_cancel",
+ "example": "multisig.cell",
+ "lock": "can_cancel",
+ "artifact_data_hash": "0x0d708753715b0c50502a06fea8c0d48b890212a5217b4330b7a77805a71f3dd7",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0x5784153f26770fa3021edb7050dc2555d2f43f08ffaed620bb1ff9a76abaa993",
+ "valid_tx": "0x3e1251358de881931f81bfe6f8a80a66309befa2db94fef5889a81b57334bc13",
+ "invalid_create_tx": "0x86a24cb3b26a8379df76a852b569c5148b51988ba34b411062d49a545fb0d876",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x757f318b25b23b441765bcbfac6ae04d0986ffcbdbc86cc58ebdd7eef79c65fc"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x86a24cb3b26a8379df76a852b569c5148b51988ba34b411062d49a545fb0d876"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631002222222222222222222222222222222222222222222222222222222222222222"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 343,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 776,
+ "measured_cycles": 5055,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:has_enough_approvals",
+ "example": "multisig.cell",
+ "lock": "has_enough_approvals",
+ "artifact_data_hash": "0xc39605e25bec7c9fe1297e640cf6ef42128dff83cec50c6e94bcc1eeb7aa268a",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0xeaeed3d06f30198c983882e0221720faf11c02473429adb757bd570b910363f9",
+ "valid_tx": "0x444ee91ba47e5385db975ecd93a4a7ddbca24280a7b63c7ff4898461e206388a",
+ "invalid_create_tx": "0x638614460e8f5f22cc0aff1077c4ab63559f16b230b4230bc0767abad961fd13",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0x4549c1c05bb03fe8c884c329830b6ba4cbc4fe2f560fa5db94addb128fc14015"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x638614460e8f5f22cc0aff1077c4ab63559f16b230b4230bc0767abad961fd13"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x1c00000010000000100000001c000000080000004353415247763100"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 311,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 712,
+ "measured_cycles": 3046,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 28,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "multisig.cell:not_expired",
+ "example": "multisig.cell",
+ "lock": "not_expired",
+ "artifact_data_hash": "0xa983e55b6bf70b5e24415864e1ab3640ccef502351a814d229b66d6738e0c83a",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0x1747065ef33181c2ef81ca3e925090b9f8d10d68db884951cb0d13d62bb8761a",
+ "valid_tx": "0x4d6d94bf0b85a090775f7c8c7127e5b0b4d334547d299080282dac7fc94eafd9",
+ "invalid_create_tx": "0xf0d43d47f20b19cd70aed45f330cbb4c98a5898d4ad3096cf5b588b5dfe6f834",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xb547f36f187c1934d41fdd9aa8a0e855842721d14c598386bdc850d6b17b5517"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0xf0d43d47f20b19cd70aed45f330cbb4c98a5898d4ad3096cf5b588b5dfe6f834"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x24000000100000001000000024000000100000004353415247763100c409000000000000"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 319,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 728,
+ "measured_cycles": 4190,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 36,
+ "witness_count": 1
+ }
+ },
+ {
+ "name": "vesting.cell:vesting_admin",
+ "example": "vesting.cell",
+ "lock": "vesting_admin",
+ "artifact_data_hash": "0x9b4ed74a5469e89dd428a35929c57c901ef5dee0ea5a3e1979ac81d53dc2ea4e",
+ "acceptance_harness_name": "cellscript-lock-spend-matrix-builder-v1",
+ "acceptance_harness_implementation": "builder-backed-local-ckb-lock-spend-matrix",
+ "valid_create_tx": "0x6a3d32809ed36e7835e40e027dc05ee5adc36c9f04cc84866dfd3b58fe0f3043",
+ "valid_tx": "0xe712cd2c89aeadb85ad178be1df80fa32c72c563007d02022307da44d2b10f17",
+ "invalid_create_tx": "0x58e74715d125d7cbd4c7a98b8aad1518cfaaf118e9e0defca5728b9430946249",
+ "invalid_tx": {
+ "cell_deps": [
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x5",
+ "tx_hash": "0xf45444cf5da12e571a468cb521b52ba1e0b79adfb1ca7b42ab925b0c5dc6fc7e"
+ }
+ },
+ {
+ "dep_type": "code",
+ "out_point": {
+ "index": "0x0",
+ "tx_hash": "0xc71e873453ffa750d9ef781214a1e015b9fe92ba751672b9592f3593750cb2fd"
+ }
+ }
+ ],
+ "header_deps": [],
+ "inputs": [
+ {
+ "previous_output": {
+ "index": "0x0",
+ "tx_hash": "0x58e74715d125d7cbd4c7a98b8aad1518cfaaf118e9e0defca5728b9430946249"
+ },
+ "since": "0x0"
+ }
+ ],
+ "outputs": [
+ {
+ "capacity": "0x174876e800",
+ "lock": {
+ "args": "0x",
+ "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
+ "hash_type": "data"
+ },
+ "type": null
+ }
+ ],
+ "outputs_data": [
+ "0x"
+ ],
+ "version": "0x0",
+ "witnesses": [
+ "0x3c00000010000000100000003c0000002800000043534152477631003333333333333333333333333333333333333333333333333333333333333333"
+ ]
+ },
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 343,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 776,
+ "measured_cycles": 5156,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 60,
+ "witness_count": 1
+ }
+ }
+ ],
+ "stateful_scenarios": [
+ {
+ "name": "token.mint-with-authority-transfer-mint-with-authority-merge-burn",
+ "kind": "stateful-scenario",
+ "action_ids": [
+ "token.cell:mint_with_authority",
+ "token.cell:transfer_token",
+ "token.cell:merge",
+ "token.cell:burn"
+ ],
+ "steps": [
+ {
+ "step": "mint_first_token_to_transfer",
+ "old_tx_hash": "0x00409256e78106d58106d68a0fc529399530b444f5e73ebf74960616d208c2a4",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 568,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1220,
+ "measured_cycles": 9321,
+ "measured_output_capacity_shannons": [
+ 60000000000,
+ 10000000000
+ ],
+ "occupied_capacity_shannons": 19000000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 70000000000,
+ "output_count": 2,
+ "output_data_bytes": 40,
+ "output_occupied_capacity_shannons": [
+ 9900000000,
+ 9100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 48,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "transfer_first_token_to_merge",
+ "old_tx_hash": "0x1231896def8739036e5e85f79df05e268e5900cf8285d1ed7601157a3e0cc38e",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 393,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 879,
+ "measured_cycles": 6044,
+ "measured_output_capacity_shannons": [
+ 10000000000
+ ],
+ "occupied_capacity_shannons": 9100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 10000000000,
+ "output_count": 1,
+ "output_data_bytes": 16,
+ "output_occupied_capacity_shannons": [
+ 9100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ },
+ {
+ "step": "mint_second_token_to_merge",
+ "old_tx_hash": "0xe9680f21dbf851055f0cb2fcc4cd51a05b5e2f6846b22b08462ffa12e7dc7d2d",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 568,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1220,
+ "measured_cycles": 9321,
+ "measured_output_capacity_shannons": [
+ 50000000000,
+ 10000000000
+ ],
+ "occupied_capacity_shannons": 19000000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 60000000000,
+ "output_count": 2,
+ "output_data_bytes": 40,
+ "output_occupied_capacity_shannons": [
+ 9900000000,
+ 9100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 48,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "merge_tokens_to_burn",
+ "old_tx_hash": "0x558ddcd2b7e2faf8b3e72f03235cee6ae1ab465b76732cfede9c6967ceb130ec",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 445,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 2,
+ "json_envelope_size_bytes": 1013,
+ "measured_cycles": 7877,
+ "measured_output_capacity_shannons": [
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 9100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 20000000000,
+ "output_count": 1,
+ "output_data_bytes": 16,
+ "output_occupied_capacity_shannons": [
+ 9100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 2
+ },
+ "outputs_live": {
+ "0": true
+ }
+ },
+ {
+ "step": "burn_merged_token",
+ "old_tx_hash": "0xe32ba198cf261e9245eeb097056d69457006704701255e84c64181d8115d1fea",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 291,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 671,
+ "measured_cycles": 4918,
+ "measured_output_capacity_shannons": [
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 20000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 8,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "nft.mint-list-transfer-by-listing",
+ "kind": "stateful-scenario",
+ "action_ids": [
+ "nft.cell:create_collection",
+ "nft.cell:mint",
+ "nft.cell:create_listing",
+ "nft.cell:buy_from_listing"
+ ],
+ "steps": [
+ {
+ "step": "create_collection_for_live_mint",
+ "old_tx_hash": "0xa278863a1589ef75f641ead8c869a21b4f426a167f4814927af651f01de54cea",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 603,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1300,
+ "measured_cycles": 8664,
+ "measured_output_capacity_shannons": [
+ 80000000000
+ ],
+ "occupied_capacity_shannons": 21600000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 80000000000,
+ "output_count": 1,
+ "output_data_bytes": 141,
+ "output_occupied_capacity_shannons": [
+ 21600000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 125,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ },
+ {
+ "step": "mint_nft_for_listing_sale",
+ "old_tx_hash": "0xef62d924ff6af766acc21727b36c6e6483fac2768527599bf597348eb3c55a91",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 831,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1746,
+ "measured_cycles": 16983,
+ "measured_output_capacity_shannons": [
+ 50000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 42900000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 80000000000,
+ "output_count": 2,
+ "output_data_bytes": 279,
+ "output_occupied_capacity_shannons": [
+ 21600000000,
+ 21300000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 72,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "create_listing_from_live_nft_dep",
+ "old_tx_hash": "0xc67554cbd1c3973fe04e014c2271023a82d9874a4b84ec38bda8bca1f9a65b26",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 600,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1337,
+ "measured_cycles": 9961,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 20500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 50000000000,
+ "output_count": 2,
+ "output_data_bytes": 89,
+ "output_occupied_capacity_shannons": [
+ 16400000000,
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 16,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "buy_listing_from_live_nft_and_listing",
+ "old_tx_hash": "0x6643966a91792a95d2fa6dc1fa6e1cf1a1c1c677930c6d95df344e7edbbab27b",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 990,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 4,
+ "json_envelope_size_bytes": 2144,
+ "measured_cycles": 30898,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 15000000000,
+ 15000000000
+ ],
+ "occupied_capacity_shannons": 39600000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 60000000000,
+ "output_count": 3,
+ "output_data_bytes": 170,
+ "output_occupied_capacity_shannons": [
+ 21400000000,
+ 9100000000,
+ 9100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 4
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true,
+ "2": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "timelock.create-lock-lock-asset-request-release-execute",
+ "kind": "stateful-scenario",
+ "action_ids": [
+ "timelock.cell:create_absolute_lock",
+ "timelock.cell:lock_asset",
+ "timelock.cell:request_release",
+ "timelock.cell:execute_release"
+ ],
+ "steps": [
+ {
+ "step": "create_absolute_lock_for_release",
+ "old_tx_hash": "0x2f2a53ea7336cf1d1b199a59b22148e7357d2e12846050a664cce5bf73094e80",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 530,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1157,
+ "measured_cycles": 6756,
+ "measured_output_capacity_shannons": [
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 15600000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 1,
+ "output_data_bytes": 81,
+ "output_occupied_capacity_shannons": [
+ 15600000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 80,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ },
+ {
+ "step": "lock_asset_against_live_lock",
+ "old_tx_hash": "0xa8e8c60bbed4ebf0747eb82243ce7c6644d925a506d822cdc080dfc26a067dd2",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 519,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1172,
+ "measured_cycles": 8660,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 70000000000
+ ],
+ "occupied_capacity_shannons": 16400000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 48,
+ "output_occupied_capacity_shannons": [
+ 12300000000,
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 8,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "request_release_from_live_lock",
+ "old_tx_hash": "0x402f7e5dd680c1d6dc63abfc07b59a2583aa577503c506bef3d00a3a9318608b",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 608,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1354,
+ "measured_cycles": 10104,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 70000000000
+ ],
+ "occupied_capacity_shannons": 18900000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 73,
+ "output_occupied_capacity_shannons": [
+ 14800000000,
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "execute_release_from_live_cells",
+ "old_tx_hash": "0xf36de341cb16e3887aa7fca0f4421e35bc3bd224f9e39d215606a49f73dabee4",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 744,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 3,
+ "json_envelope_size_bytes": 1635,
+ "measured_cycles": 22446,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 23800000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 60000000000,
+ "output_count": 2,
+ "output_data_bytes": 88,
+ "output_occupied_capacity_shannons": [
+ 9100000000,
+ 14700000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 3
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "launch.launch-token-then-mint-with-authority",
+ "kind": "stateful-scenario",
+ "action_ids": [
+ "launch.cell:launch_token",
+ "token.cell:mint_with_authority"
+ ],
+ "steps": [
+ {
+ "step": "launch_token_to_live_mint_authority",
+ "old_tx_hash": "0x1c8c4325505326f747420de5e8560c32794f3e1ef786c38d1bcd5b186c669784",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 1858,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 3741,
+ "measured_cycles": 39715,
+ "measured_output_capacity_shannons": [
+ 40000000000,
+ 20000000000,
+ 20000000000,
+ 20000000000,
+ 20000000000,
+ 40000000000,
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 88600000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 200000000000,
+ "output_count": 8,
+ "output_data_bytes": 282,
+ "output_occupied_capacity_shannons": [
+ 9900000000,
+ 9200000000,
+ 9200000000,
+ 9200000000,
+ 9200000000,
+ 18100000000,
+ 14700000000,
+ 9100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 234,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true,
+ "2": true,
+ "3": true,
+ "4": true,
+ "5": true,
+ "6": true,
+ "7": true
+ }
+ },
+ {
+ "step": "mint_with_authority_again_from_launched_authority",
+ "old_tx_hash": "0xd44187944519beb8fb0d67544e148c80880dc5e12336bae473be6e788ff980c2",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 569,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1221,
+ "measured_cycles": 9858,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 10000000000
+ ],
+ "occupied_capacity_shannons": 19100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 40000000000,
+ "output_count": 2,
+ "output_data_bytes": 40,
+ "output_occupied_capacity_shannons": [
+ 9900000000,
+ 9200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 48,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "amm.seed-add-swap-remove",
+ "kind": "stateful-scenario",
+ "action_ids": [
+ "amm_pool.cell:seed_pool",
+ "amm_pool.cell:add_liquidity",
+ "amm_pool.cell:swap_a_for_b",
+ "amm_pool.cell:remove_liquidity"
+ ],
+ "steps": [
+ {
+ "step": "seed_pool_for_add_liquidity",
+ "old_tx_hash": "0x69a432d0677efdd81acdd9ee50ac097f3cfe6e4dc981c86cb3bf7b090d32b833",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 752,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 2,
+ "json_envelope_size_bytes": 1618,
+ "measured_cycles": 20120,
+ "measured_output_capacity_shannons": [
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 32800000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 40000000000,
+ "output_count": 2,
+ "output_data_bytes": 178,
+ "output_occupied_capacity_shannons": [
+ 18100000000,
+ 14700000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 42,
+ "witness_count": 2
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "add_liquidity_to_live_pool",
+ "old_tx_hash": "0x3318719ba10143a600ebda5a3f0b3a563c8f1d94d4c791831497295a4abcac74",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 802,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 3,
+ "json_envelope_size_bytes": 1748,
+ "measured_cycles": 34243,
+ "measured_output_capacity_shannons": [
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 32800000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 40000000000,
+ "output_count": 2,
+ "output_data_bytes": 178,
+ "output_occupied_capacity_shannons": [
+ 18100000000,
+ 14700000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 3
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "swap_against_live_pool",
+ "old_tx_hash": "0x216dde4df2ea8fe1425edc0dedca51a7e00dd08d33941db55d205a18314c34af",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 703,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 2,
+ "json_envelope_size_bytes": 1519,
+ "measured_cycles": 33249,
+ "measured_output_capacity_shannons": [
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 27300000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 40000000000,
+ "output_count": 2,
+ "output_data_bytes": 122,
+ "output_occupied_capacity_shannons": [
+ 18100000000,
+ 9200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 48,
+ "witness_count": 2
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "remove_liquidity_from_live_pool",
+ "old_tx_hash": "0x2c4b0dd0bcfb2f67d16e2dd6d86136b2d4c67596a13e419fed44981d1181bdf1",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 994,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 3,
+ "json_envelope_size_bytes": 2110,
+ "measured_cycles": 33348,
+ "measured_output_capacity_shannons": [
+ 20000000000,
+ 20000000000,
+ 20000000000,
+ 98474034418
+ ],
+ "occupied_capacity_shannons": 40400000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 158474034418,
+ "output_count": 4,
+ "output_data_bytes": 138,
+ "output_occupied_capacity_shannons": [
+ 18100000000,
+ 9100000000,
+ 9100000000,
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 3
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true,
+ "2": true,
+ "3": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "vesting.create-config-grant-revoke",
+ "kind": "stateful-scenario",
+ "action_ids": [
+ "vesting.cell:create_vesting_config",
+ "vesting.cell:grant_vesting",
+ "vesting.cell:revoke_grant"
+ ],
+ "steps": [
+ {
+ "step": "create_config_for_grant",
+ "old_tx_hash": "0x0ed6bca9b7b257ea7fd5b25d4f686479d892da1349a94a24c20be92d396dcaa3",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 459,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1010,
+ "measured_cycles": 6541,
+ "measured_output_capacity_shannons": [
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 13200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 1,
+ "output_data_bytes": 57,
+ "output_occupied_capacity_shannons": [
+ 13200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 65,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ },
+ {
+ "step": "grant_vesting_from_live_config",
+ "old_tx_hash": "0x115b8ecbcb808b3b25b5f9cbc4883d27337aea43395ded9325a2db79ff74e71d",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 668,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 2,
+ "json_envelope_size_bytes": 1504,
+ "measured_cycles": 11470,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 104694478663
+ ],
+ "occupied_capacity_shannons": 19700000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 134694478663,
+ "output_count": 2,
+ "output_data_bytes": 81,
+ "output_occupied_capacity_shannons": [
+ 15600000000,
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 2
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "revoke_live_grant",
+ "old_tx_hash": "0x5a8ff906574c1edf1e5fbd1487c723f67038565705582d8ac112264d57cbfe07",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 621,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1382,
+ "measured_cycles": 14841,
+ "measured_output_capacity_shannons": [
+ 15000000000,
+ 15000000000
+ ],
+ "occupied_capacity_shannons": 18200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 2,
+ "output_data_bytes": 32,
+ "output_occupied_capacity_shannons": [
+ 9100000000,
+ 9100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "multisig.create-propose-approve-approve-execute",
+ "kind": "stateful-scenario",
+ "action_ids": [
+ "multisig.cell:create_wallet",
+ "multisig.cell:propose_transfer",
+ "multisig.cell:record_approval",
+ "multisig.cell:execute_proposal"
+ ],
+ "steps": [
+ {
+ "step": "create_wallet_for_proposal",
+ "old_tx_hash": "0x17606461a3d98871a31a1d2dc71e0e81e47c2fb246665a0c19f207255b32f70a",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 599,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1292,
+ "measured_cycles": 8347,
+ "measured_output_capacity_shannons": [
+ 200000000000
+ ],
+ "occupied_capacity_shannons": 21600000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 200000000000,
+ "output_count": 1,
+ "output_data_bytes": 141,
+ "output_occupied_capacity_shannons": [
+ 21600000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 121,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ },
+ {
+ "step": "propose_transfer_from_live_wallet",
+ "old_tx_hash": "0xc1992e679cdcbc64bb722f94b5d226099b2b9ead0529e4ccf45833055f369b2a",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 900,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1885,
+ "measured_cycles": 19306,
+ "measured_output_capacity_shannons": [
+ 50000000000,
+ 150000000000
+ ],
+ "occupied_capacity_shannons": 48200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 200000000000,
+ "output_count": 2,
+ "output_data_bytes": 332,
+ "output_occupied_capacity_shannons": [
+ 21600000000,
+ 26600000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 88,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "record_first_approval",
+ "old_tx_hash": "0x3b5f601fb0d58eec101f8758734ca3adaa979411bc16d348e7dad955ae10f23d",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 836,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1809,
+ "measured_cycles": 21716,
+ "measured_output_capacity_shannons": [
+ 120000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 42100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 150000000000,
+ "output_count": 2,
+ "output_data_bytes": 271,
+ "output_occupied_capacity_shannons": [
+ 29800000000,
+ 12300000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 48,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "record_second_approval",
+ "old_tx_hash": "0x5e784733c02e52fe1d4c6996255dcfdbf2b792d69c36414970e539e90901d2b2",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 868,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1873,
+ "measured_cycles": 23966,
+ "measured_output_capacity_shannons": [
+ 90000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 45300000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 120000000000,
+ "output_count": 2,
+ "output_data_bytes": 303,
+ "output_occupied_capacity_shannons": [
+ 33000000000,
+ 12300000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 48,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ },
+ {
+ "step": "execute_approved_proposal",
+ "old_tx_hash": "0x0538556ab99b85f0633cbb009edcc62be34efb26015f555c59d118424785c27b",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 471,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1087,
+ "measured_cycles": 12012,
+ "measured_output_capacity_shannons": [
+ 40000000000
+ ],
+ "occupied_capacity_shannons": 12400000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 40000000000,
+ "output_count": 1,
+ "output_data_bytes": 49,
+ "output_occupied_capacity_shannons": [
+ 12400000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 48,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "launch.cell.bootstrap_token.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "launch.cell:bootstrap_token"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0x0b9fa823515ffce03746d1c4344db4e1e50bad3668c81088b7ca5eafc6040913",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 986,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 2034,
+ "measured_cycles": 13811,
+ "measured_output_capacity_shannons": [
+ 40000000000,
+ 20000000000,
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 37600000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 4,
+ "output_data_bytes": 72,
+ "output_occupied_capacity_shannons": [
+ 10000000000,
+ 9200000000,
+ 9200000000,
+ 9200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 144,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true,
+ "2": true,
+ "3": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "multisig.cell.cancel_proposal.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "multisig.cell:cancel_proposal"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0x42897b5ae6adaa91365deb19c8ce0fa269befa90f83fbb2d1aa06e7a3f64a131",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 360,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 863,
+ "measured_cycles": 8521,
+ "measured_output_capacity_shannons": [
+ 49000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 49000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "multisig.cell.propose_add_signer.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "multisig.cell:propose_add_signer"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0x226c0a2e34cedaa363a9d4b223982d2daf4fc419d302115e05e98396b3d68c9b",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 924,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1933,
+ "measured_cycles": 20816,
+ "measured_output_capacity_shannons": [
+ 70000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 51400000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 364,
+ "output_occupied_capacity_shannons": [
+ 21600000000,
+ 29800000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 80,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "multisig.cell.propose_change_threshold.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "multisig.cell:propose_change_threshold"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0xac9d28c6d3ff7bbf0357a655c0aac471c77bb9ad97374dbc2d507eae0541a733",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 862,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1809,
+ "measured_cycles": 19323,
+ "measured_output_capacity_shannons": [
+ 70000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 48300000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 333,
+ "output_occupied_capacity_shannons": [
+ 21600000000,
+ 26700000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 49,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "multisig.cell.propose_remove_signer.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "multisig.cell:propose_remove_signer"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0x8b4922b49150481d756b6c3af4236357618d9dcbff0eee4e164ff3288640e9f5",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 892,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1869,
+ "measured_cycles": 20478,
+ "measured_output_capacity_shannons": [
+ 70000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 48200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 332,
+ "output_occupied_capacity_shannons": [
+ 21600000000,
+ 26600000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 80,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "nft.cell.accept_offer.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "nft.cell:accept_offer"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0x7a8b320dab64745045b14d0bc21679b0d6b136775eae11033b5041b6f2912c5a",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 989,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 4,
+ "json_envelope_size_bytes": 2147,
+ "measured_cycles": 30706,
+ "measured_output_capacity_shannons": [
+ 100000000000,
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 39500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 140000000000,
+ "output_count": 3,
+ "output_data_bytes": 170,
+ "output_occupied_capacity_shannons": [
+ 21300000000,
+ 9100000000,
+ 9100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 8,
+ "witness_count": 4
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true,
+ "2": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "nft.cell.batch_mint.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "nft.cell:batch_mint"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0xe5d28d78e2c97cfb5cd0fb6d236304cd6b66cbeb235ca2b5cf7468378817844a",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 1859,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 3776,
+ "measured_cycles": 37789,
+ "measured_output_capacity_shannons": [
+ 100000000000,
+ 25000000000,
+ 25000000000,
+ 25000000000,
+ 25000000000
+ ],
+ "occupied_capacity_shannons": 106100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 200000000000,
+ "output_count": 5,
+ "output_data_bytes": 686,
+ "output_occupied_capacity_shannons": [
+ 20900000000,
+ 21300000000,
+ 21300000000,
+ 21300000000,
+ 21300000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 264,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true,
+ "2": true,
+ "3": true,
+ "4": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "nft.cell.burn.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "nft.cell:burn"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0xffe1382e9db1645da25b1602fba1f38b7df1a11b2e72bc98420e9e7353a4ae27",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 291,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 673,
+ "measured_cycles": 4739,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 8,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "nft.cell.cancel_listing.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "nft.cell:cancel_listing"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0xd7d1822d5820493f4a5c03812e71ecf7a2943734611dfe351598146890453059",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 291,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 672,
+ "measured_cycles": 4723,
+ "measured_output_capacity_shannons": [
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 4100000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 1,
+ "output_data_bytes": 0,
+ "output_occupied_capacity_shannons": [
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 8,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "nft.cell.create_offer.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "nft.cell:create_offer"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0xd8c0053e479d1e7c9f45e2abc8c2f082194cd47634c2d6388f4e2e7a240366a7",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 570,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1236,
+ "measured_cycles": 8307,
+ "measured_output_capacity_shannons": [
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 17200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 1,
+ "output_data_bytes": 97,
+ "output_occupied_capacity_shannons": [
+ 17200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 104,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "nft.cell.transfer.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "nft.cell:transfer"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0x90885689172ed74eedb55cca655df84188643e6cd752f1aa350dc8cb9679dd88",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 514,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1122,
+ "measured_cycles": 14417,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 21200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 138,
+ "output_occupied_capacity_shannons": [
+ 21200000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "timelock.cell.approve_emergency_release.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "timelock.cell:approve_emergency_release"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0x715c3e373c2d4cc35c03c86a41031d7f8be2bc768e644461eac57e5eab004d28",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 567,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 0,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1228,
+ "measured_cycles": 12204,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 26500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 190,
+ "output_occupied_capacity_shannons": [
+ 26500000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "timelock.cell.batch_create_locks.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "timelock.cell:batch_create_locks"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0x1028526cfa99595cebeff3b2745d0bd5a2ef4003cb96a974c3766829f80594d5",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 1414,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 2898,
+ "measured_cycles": 17887,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 30000000000,
+ 30000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 62000000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 120000000000,
+ "output_count": 4,
+ "output_data_bytes": 324,
+ "output_occupied_capacity_shannons": [
+ 15500000000,
+ 15500000000,
+ 15500000000,
+ 15500000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 296,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true,
+ "2": true,
+ "3": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "timelock.cell.create_relative_lock.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "timelock.cell:create_relative_lock"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0xdb5b770c97e55457e5b576a9612fa4a5ba8867c9c11899060f2193129e51d923",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 529,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1155,
+ "measured_cycles": 6782,
+ "measured_output_capacity_shannons": [
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 15500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 30000000000,
+ "output_count": 1,
+ "output_data_bytes": 81,
+ "output_occupied_capacity_shannons": [
+ 15500000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 80,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "timelock.cell.execute_emergency_release.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "timelock.cell:execute_emergency_release"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0x330bd555021ad2b154510d81eeccf8cbd8e6e62ebae7c456e5fabc2831e5eb26",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 744,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 3,
+ "json_envelope_size_bytes": 1636,
+ "measured_cycles": 22235,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 30000000000
+ ],
+ "occupied_capacity_shannons": 23800000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 60000000000,
+ "output_count": 2,
+ "output_data_bytes": 88,
+ "output_occupied_capacity_shannons": [
+ 9100000000,
+ 14700000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 40,
+ "witness_count": 3
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "timelock.cell.extend_lock.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "timelock.cell:extend_lock"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0xa74c6e001ecc03a1e0432afe27307efcfb85090f1ad2734deca603240a2da157",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 497,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1092,
+ "measured_cycles": 12741,
+ "measured_output_capacity_shannons": [
+ 100000000000
+ ],
+ "occupied_capacity_shannons": 15500000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 1,
+ "output_data_bytes": 81,
+ "output_occupied_capacity_shannons": [
+ 15500000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 48,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "timelock.cell.request_emergency_release.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "timelock.cell:request_emergency_release"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0x563bdf20a03aa85513c4c052b7e8c1489f5c47d97ad0377084d898aabb32be0c",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 3,
+ "consensus_serialized_tx_size_bytes": 686,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1510,
+ "measured_cycles": 11653,
+ "measured_output_capacity_shannons": [
+ 30000000000,
+ 70000000000
+ ],
+ "occupied_capacity_shannons": 24200000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 100000000000,
+ "output_count": 2,
+ "output_data_bytes": 126,
+ "output_occupied_capacity_shannons": [
+ 20100000000,
+ 4100000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 65,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "vesting.cell.claim_fully_vested.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "vesting.cell:claim_fully_vested"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0xc5f4a0ba516ae824a4b48b2c604120abd7d5140c18b0f27ac2b13dba0aec548a",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 617,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1322,
+ "measured_cycles": 12869,
+ "measured_output_capacity_shannons": [
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 24700000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 40000000000,
+ "output_count": 2,
+ "output_data_bytes": 97,
+ "output_occupied_capacity_shannons": [
+ 9100000000,
+ 15600000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 8,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ }
+ ]
+ },
+ {
+ "name": "vesting.cell.claim_vested.stateful-branch",
+ "kind": "stateful-action-branch",
+ "action_ids": [
+ "vesting.cell:claim_vested"
+ ],
+ "steps": [
+ {
+ "step": "valid_action_branch",
+ "old_tx_hash": "0x7c08591b593710f6481af4afcbbdb671fa46332b64a890850192409e7a7242c2",
+ "measured_constraints": {
+ "capacity_is_sufficient": true,
+ "cell_dep_count": 2,
+ "consensus_serialized_tx_size_bytes": 617,
+ "cycles_status": "dry-run-measured",
+ "header_dep_count": 1,
+ "input_count": 1,
+ "json_envelope_size_bytes": 1322,
+ "measured_cycles": 18801,
+ "measured_output_capacity_shannons": [
+ 20000000000,
+ 20000000000
+ ],
+ "occupied_capacity_shannons": 24700000000,
+ "occupied_capacity_status": "derived-by-cellscript-ckb-tx-measure",
+ "output_capacity_shannons": 40000000000,
+ "output_count": 2,
+ "output_data_bytes": 97,
+ "output_occupied_capacity_shannons": [
+ 9100000000,
+ 15600000000
+ ],
+ "tx_measure_error": null,
+ "tx_size_status": "measured-by-cellscript-ckb-tx-measure",
+ "under_capacity_output_indexes": [],
+ "witness_bytes": 8,
+ "witness_count": 1
+ },
+ "outputs_live": {
+ "0": true,
+ "1": true
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/crates/cellscript-tools/src/acceptance_helpers.rs b/crates/cellscript-tools/src/acceptance_helpers.rs
new file mode 100644
index 00000000..8797e5bc
--- /dev/null
+++ b/crates/cellscript-tools/src/acceptance_helpers.rs
@@ -0,0 +1,344 @@
+use std::collections::BTreeSet;
+use std::fs;
+use std::path::{Path, PathBuf};
+
+use anyhow::{bail, Context, Result};
+use serde_json::{json, Value};
+
+use crate::shared::stable_json_pretty;
+
+fn read_json(path: &Path) -> Result {
+ serde_json::from_slice(&fs::read(path).with_context(|| format!("failed to read {}", path.display()))?)
+ .with_context(|| format!("failed to parse {} as JSON", path.display()))
+}
+
+fn scalar(value: Option<&Value>) -> String {
+ match value {
+ Some(Value::Bool(value)) => value.to_string(),
+ Some(Value::String(value)) => value.clone(),
+ Some(Value::Number(value)) => value.to_string(),
+ Some(Value::Null) | None => "unknown".into(),
+ Some(value) => value.to_string(),
+ }
+}
+
+fn require(condition: bool, message: impl Into) -> Result<()> {
+ if !condition {
+ bail!(message.into());
+ }
+ Ok(())
+}
+
+pub fn novaseal_summary(report_path: &Path) -> Result<()> {
+ let report = read_json(report_path)?;
+ println!(
+ "{}\t{}\t{}\t{}\t{}\t{}",
+ scalar(report.get("status")),
+ scalar(report.get("live_devnet_rpc_executed")),
+ scalar(report.get("local_blocker_count")),
+ scalar(report.get("acceptance_blocker_count")),
+ scalar(report.get("blocker_count")),
+ scalar(report.pointer("/external_endpoint_coverage/status")),
+ );
+ Ok(())
+}
+
+pub fn fiber_report_binding(compatibility_path: &Path, acceptance_path: &Path, expected_revision: &str) -> Result<()> {
+ let compatibility = read_json(compatibility_path)?;
+ let acceptance = read_json(acceptance_path)?;
+ require(
+ compatibility.pointer("/binding/fiber_revision").and_then(Value::as_str) == Some(expected_revision),
+ "compatibility report Fiber revision does not match the pinned checkout",
+ )?;
+ require(
+ compatibility.get("binding_fingerprint") == acceptance.get("binding_fingerprint"),
+ "acceptance report is not bound to compatibility.json",
+ )?;
+ require(
+ matches!(
+ compatibility.get("status").and_then(Value::as_str),
+ Some("LocalNodeAdvertised" | "ChannelReady" | "TopologyCertified")
+ ),
+ "full acceptance requires at least LocalNodeAdvertised compatibility evidence",
+ )
+}
+
+pub fn ecosystem_reuse_contracts(compatibility_path: &Path, action_path: &Path) -> Result<()> {
+ let compatibility = read_json(compatibility_path)?;
+ let action = read_json(action_path)?;
+ require(compatibility["status"] == "ok", "CKB compatibility status must be ok")?;
+ require(compatibility["schema"] == "cellscript-ckb-std-compat-report-v0.19", "CKB compatibility schema drift")?;
+ require(
+ compatibility.pointer("/inline_abi/syscalls/load_cell_by_field") == Some(&json!(2081)),
+ "load_cell_by_field syscall drift",
+ )?;
+ require(compatibility.pointer("/inline_abi/syscalls/load_witness") == Some(&json!(2074)), "load_witness syscall drift")?;
+ require(compatibility.pointer("/inline_abi/sources/group_input") == Some(&json!((1_u64 << 56) | 1)), "group_input source drift")?;
+ require(
+ compatibility.pointer("/inline_abi/sources/group_output") == Some(&json!((1_u64 << 56) | 2)),
+ "group_output source drift",
+ )?;
+ require(
+ compatibility.pointer("/witness_args_policy/entry_payload_abi") == Some(&json!("cellscript-entry-witness-v1")),
+ "entry witness ABI drift",
+ )?;
+ require(
+ compatibility.pointer("/witness_args_policy/final_witness_args_owner") == Some(&json!("adapter")),
+ "WitnessArgs ownership drift",
+ )?;
+ require(
+ compatibility.pointer("/adapter_boundary/compiler_core_uses_ckb_sdk_rust") == Some(&json!(false)),
+ "compiler core SDK boundary drift",
+ )?;
+ require(
+ compatibility.pointer("/test_evidence/script_construction_api") == Some(&json!(true)),
+ "script construction evidence missing",
+ )?;
+ require(
+ compatibility.pointer("/adapter_boundary/script_construction/packed_type") == Some(&json!("ckb_types::packed::Script")),
+ "packed Script type drift",
+ )?;
+ require(
+ compatibility.pointer("/adapter_boundary/script_construction/evidence_schema")
+ == Some(&json!("cellscript-ckb-script-evidence-v0.19")),
+ "script evidence schema drift",
+ )?;
+ let supports = compatibility
+ .pointer("/adapter_boundary/script_construction/supports")
+ .and_then(Value::as_array)
+ .context("compatibility supports must be an array")?;
+ for required in ["args_exact_prefix_suffix", "script_ref_readback", "explicit_cell_dep_binding"] {
+ require(supports.iter().any(|value| value == required), format!("missing adapter support {required}"))?;
+ }
+
+ require(action["status"] == "ok", "action build status must be ok")?;
+ require(action["policy"] == "cellscript-action-builder-plan-v1", "action build policy drift")?;
+ require(action["headless"] == true, "action build must remain headless")?;
+ require(action["ui_scope"] == "none", "action build UI scope drift")?;
+ require(action.pointer("/transaction_draft/state") == Some(&json!("ActionPlan")), "transaction draft state drift")?;
+ require(action.pointer("/transaction_draft/can_submit") == Some(&json!(false)), "unmaterialized action must not submit")?;
+ require(
+ action.pointer("/transaction_draft/requires_packed_materialization") == Some(&json!(true)),
+ "packed materialization must remain required",
+ )?;
+ for (field, expected) in [
+ ("transaction", "ckb_types::packed::Transaction"),
+ ("script", "ckb_types::packed::Script"),
+ ("out_point", "ckb_types::packed::OutPoint"),
+ ] {
+ require(
+ action.pointer(&format!("/transaction_draft/packed_materialization/{field}")) == Some(&json!(expected)),
+ format!("packed materialization {field} drift"),
+ )?;
+ }
+ require(
+ action.pointer("/adapter_contract/schema") == Some(&json!("cellscript-ckb-adapter-contract-v0.19")),
+ "adapter contract schema drift",
+ )?;
+ require(
+ action.pointer("/adapter_contract/witness_policy/default_action_payload_field") == Some(&json!("input_type")),
+ "default action payload field drift",
+ )?;
+ require(
+ action.pointer("/adapter_contract/witness_policy/lock_signature_policy")
+ == Some(&json!("explicit-adapter-owned-do-not-overwrite")),
+ "lock signature policy drift",
+ )?;
+ let required_fields = action
+ .pointer("/adapter_contract/resolved_tx_required_fields")
+ .and_then(Value::as_array)
+ .context("resolved_tx_required_fields must be an array")?;
+ for required in ["outputs_data", "cell_deps", "lineage"] {
+ require(required_fields.iter().any(|value| value == required), format!("resolved transaction field missing: {required}"))?;
+ }
+ require(
+ action.pointer("/adapter_contract/acceptance_report_template/schema")
+ == Some(&json!("cellscript-ckb-action-acceptance-report-v0.19")),
+ "adapter acceptance template schema drift",
+ )
+}
+
+fn collect_entries<'a>(metadata: &'a Value, group: &str, field: &str) -> impl Iterator- {
+ metadata[group].as_array().into_iter().flatten().flat_map(move |entry| entry[field].as_array().into_iter().flatten())
+}
+
+pub fn scope_014(out_dir: &Path, metadata_paths: &[PathBuf]) -> Result<()> {
+ require(
+ metadata_paths.len() == 7,
+ format!("0.14 scope metadata oracle failed: expected 7 v0.14 language metadata files, got {}", metadata_paths.len()),
+ )?;
+ let mut features = BTreeSet::new();
+ let mut operations = BTreeSet::new();
+ let mut purposes = BTreeSet::new();
+ let mut capacity_types = BTreeSet::new();
+ let mut has_type_id_plan = false;
+ let mut has_output_data_binding = false;
+ let mut names = Vec::new();
+ for path in metadata_paths {
+ let metadata = read_json(path).map_err(|error| anyhow::anyhow!("0.14 scope metadata oracle failed: {error:#}"))?;
+ names.push(path.file_name().context("metadata path has no file name")?.to_string_lossy().into_owned());
+ let profile = &metadata["target_profile"];
+ for (field, expected) in [
+ ("name", "ckb"),
+ ("source_encoding", "ckb-source-group-high-bit"),
+ ("witness_abi", "ckb-molecule-witness-args-input-type-v2+cellscript-entry-witness-v1"),
+ ("spawn_ipc_abi", "ckb-vm-v2-spawn-ipc-syscalls-2601-2608"),
+ ("output_data_abi", "ckb-outputs-and-outputs-data-index-aligned"),
+ ("type_id_abi", "ckb-type-id-v1"),
+ ] {
+ require(
+ profile[field] == expected,
+ format!("0.14 scope metadata oracle failed: {} target profile {field} drift", path.display()),
+ )?;
+ }
+ require(
+ metadata["artifact_hash"].as_str().is_some_and(|value| !value.is_empty()),
+ format!("{} missing artifact hash", path.display()),
+ )?;
+ require(metadata["artifact_size_bytes"].as_u64().unwrap_or(0) > 0, format!("{} missing artifact size", path.display()))?;
+ let ckb = metadata.pointer("/constraints/ckb").and_then(Value::as_object).context("metadata missing constraints.ckb")?;
+ let abi = ckb.get("profile_abi_contract").context("metadata missing profile_abi_contract")?;
+ require(abi["witness_abi"] == profile["witness_abi"], format!("{} profile ABI witness drift", path.display()))?;
+ require(abi["output_data_abi"] == profile["output_data_abi"], format!("{} profile ABI output_data drift", path.display()))?;
+ for value in metadata.pointer("/runtime/ckb_runtime_features").and_then(Value::as_array).into_iter().flatten() {
+ if let Some(value) = value.as_str() {
+ features.insert(value.to_owned());
+ }
+ }
+ let runtime_accesses = metadata.pointer("/runtime/ckb_runtime_accesses").and_then(Value::as_array).into_iter().flatten();
+ for access in runtime_accesses.chain(collect_entries(&metadata, "actions", "ckb_runtime_accesses")).chain(collect_entries(
+ &metadata,
+ "locks",
+ "ckb_runtime_accesses",
+ )) {
+ if let Some(value) = access["operation"].as_str() {
+ operations.insert(value.to_owned());
+ }
+ }
+ for reference in ckb.get("script_references").and_then(Value::as_array).into_iter().flatten() {
+ if let Some(purpose) = reference["purpose"].as_str() {
+ purposes.insert(purpose.to_owned());
+ if purpose == "spawn-target" {
+ require(
+ reference["dep_source"] == "CellDep-or-DepGroup",
+ format!("{} spawn target dep_source overclaimed", path.display()),
+ )?;
+ require(
+ reference["status"] == "runtime-required-builder-resolved",
+ format!("{} spawn target status drift", path.display()),
+ )?;
+ require(
+ reference["code_hash"].is_null() && reference["hash_type"].is_null() && reference["args"].is_null(),
+ format!("{} spawn target must remain builder-resolved", path.display()),
+ )?;
+ }
+ }
+ }
+ for floor in ckb.get("declared_capacity_floors").and_then(Value::as_array).into_iter().flatten() {
+ if let Some(kind) = floor["type_name"].as_str() {
+ capacity_types.insert(kind.to_owned());
+ }
+ require(floor["source"] == "dsl-with_capacity_floor", format!("{} capacity floor source drift", path.display()))?;
+ require(floor["shannons"].as_u64().unwrap_or(0) > 0, format!("{} non-positive capacity floor", path.display()))?;
+ }
+ for create in collect_entries(&metadata, "actions", "create_set").chain(collect_entries(&metadata, "locks", "create_set")) {
+ has_type_id_plan |= !create["ckb_type_id"].is_null();
+ has_output_data_binding |= !create["ckb_output_data"].is_null();
+ }
+ }
+ for required in [
+ "ckb-spawn-ipc",
+ "ckb-source-view",
+ "ckb-witness-args",
+ "ckb-lock-args",
+ "ckb-sighash-all",
+ "ckb-declarative-since",
+ "ckb-declarative-capacity",
+ "ckb-blake2b",
+ ] {
+ require(features.contains(required), format!("0.14 scope metadata oracle failed: missing runtime feature {required}"))?;
+ }
+ for required in [
+ "spawn",
+ "wait",
+ "pipe",
+ "pipe-write",
+ "pipe-read",
+ "close-fd",
+ "source-group-input",
+ "witness-lock",
+ "lock-args",
+ "sighash-all",
+ "require-maturity",
+ "require-time",
+ "require-epoch-after",
+ "require-epoch-relative",
+ "occupied-capacity",
+ "hash-blake2b",
+ ] {
+ require(operations.contains(required), format!("0.14 scope metadata oracle failed: missing runtime operation {required}"))?;
+ }
+ require(purposes.contains("spawn-target"), "0.14 scope metadata oracle failed: missing spawn target script-reference obligation")?;
+ require(
+ purposes.contains("type-id-create-output"),
+ "0.14 scope metadata oracle failed: missing TYPE_ID create script-reference obligation",
+ )?;
+ require(capacity_types.contains("TimedToken"), "0.14 scope metadata oracle failed: missing TimedToken capacity floor")?;
+ require(has_type_id_plan, "0.14 scope metadata oracle failed: missing TYPE_ID output plan in language examples")?;
+ require(has_output_data_binding, "0.14 scope metadata oracle failed: missing outputs_data binding in language examples")?;
+ let report = json!({
+ "status": "passed",
+ "metadata_files": names,
+ "features": features,
+ "operations": operations,
+ "script_reference_purposes": purposes,
+ "capacity_floor_types": capacity_types,
+ });
+ let report_path = out_dir.join("cellscript-0-14-scope-audit-report.json");
+ fs::write(&report_path, format!("{}\n", stable_json_pretty(&report)?))?;
+ println!("valid CellScript 0.14 scope audit: {}", report_path.display());
+ Ok(())
+}
+
+pub fn cellfabric_bridge(envelope_path: &Path, summary_path: &Path) -> Result<()> {
+ let envelope = read_json(envelope_path)?;
+ let summary = read_json(summary_path)?;
+ let source = &envelope["source"];
+ for (condition, message) in [
+ (envelope["schema"] == "cellscript-cellfabric-intent-envelope-v0.20", "envelope schema mismatch"),
+ (envelope["status"] == "requires-runtime-binding", "envelope status mismatch"),
+ (summary["schema"] == "cellscript-cellfabric-intent-envelope-v0.20", "summary schema mismatch"),
+ (summary["import_status"] == "requires-runtime-binding", "import status mismatch"),
+ (summary["status"] == "submitted-and-soft-confirmed-non-final", "flow status mismatch"),
+ (summary["action_plan_hash_hex"] == source["action_plan_hash"], "action_plan_hash mismatch"),
+ (summary["chain_id"] == source["target_profile"], "chain_id mismatch"),
+ (summary["app_namespace"] == source["module"], "app_namespace mismatch"),
+ (summary["action"] == source["action"], "action mismatch"),
+ (summary["payload_format"] == "cellscript-action-plan-json-v1", "payload format mismatch"),
+ (summary["requires_signature"] == true, "summary must require signature"),
+ (summary["submitted"] == true, "summary must claim gateway submission"),
+ (summary["soft_confirmed"] == true, "summary must claim soft confirmation"),
+ (summary["l1_final"] == false, "summary must not claim L1 finality"),
+ (summary["gateway_status"] == "Indexed", "gateway status mismatch"),
+ (summary.pointer("/ledger_status/status/SoftConfirmed/non_final") == Some(&json!(true)), "ledger status mismatch"),
+ (summary["bundle_intent_count"] == 1, "bundle must contain one intent"),
+ (summary["excluded_conflict_count"] == 0, "unexpected excluded conflicts"),
+ (summary["receipt_non_final"] == true, "receipt must remain non-final"),
+ (summary["soft_confirmation_confidence"] == "unsigned-non-final-receipt", "unexpected soft confirmation confidence label"),
+ (summary["settlement_requires_external_builder"] == true, "CellScript settlement must require external runtime builder"),
+ ] {
+ require(condition, message)?;
+ }
+ for field in ["intent_id", "bundle_id"] {
+ let value = summary[field].as_str().unwrap_or_default();
+ require(value.starts_with("0x") && value.len() == 66, format!("{field} must be 0x-prefixed 32-byte hash"))?;
+ }
+ println!("valid CellScript -> CellFabric bridge flow summary");
+ Ok(())
+}
+
+pub fn rust_toolchain_channel(root: &Path) -> Result<()> {
+ let manifest: toml::Value = toml::from_str(&fs::read_to_string(root.join("rust-toolchain.toml"))?)?;
+ println!("{}", manifest["toolchain"]["channel"].as_str().context("rust-toolchain.toml is missing toolchain.channel")?);
+ Ok(())
+}
diff --git a/crates/cellscript-tools/src/bip340_tcb.rs b/crates/cellscript-tools/src/bip340_tcb.rs
new file mode 100644
index 00000000..23ea849b
--- /dev/null
+++ b/crates/cellscript-tools/src/bip340_tcb.rs
@@ -0,0 +1,273 @@
+//! Local NovaSeal BIP340 runtime-verifier TCB review bundle.
+
+use std::fs;
+use std::path::{Path, PathBuf};
+use std::process::Command;
+
+use anyhow::{Context, Result};
+use serde_json::{json, Value};
+use sha2::{Digest, Sha256};
+
+use crate::crypto::sha256_hex;
+use crate::shared::{lexical_path, stable_json_pretty};
+
+fn load(root: &Path, path: &Path) -> Result {
+ if !path.exists() {
+ return Ok(json!({ "missing": true, "path": path.strip_prefix(root).unwrap_or(path).to_string_lossy().replace('\\', "/") }));
+ }
+ serde_json::from_slice(&fs::read(path)?).with_context(|| format!("failed to decode {}", path.display()))
+}
+
+fn collect_source(root: &Path, directory: &Path, files: &mut Vec, invalid: &mut Vec) -> Result<()> {
+ let mut entries = fs::read_dir(directory)?.collect::, _>>()?;
+ entries.sort_by_key(std::fs::DirEntry::path);
+ for entry in entries {
+ let path = entry.path();
+ let metadata = fs::symlink_metadata(&path)?;
+ if metadata.file_type().is_symlink() {
+ invalid.push(path.strip_prefix(root).unwrap_or(&path).to_string_lossy().replace('\\', "/"));
+ continue;
+ }
+ if metadata.is_dir() {
+ let name = entry.file_name();
+ if ["target", "build", ".git"].iter().any(|skip| name == *skip) {
+ continue;
+ }
+ collect_source(root, &path, files, invalid)?;
+ } else if metadata.is_file() {
+ let name = entry.file_name();
+ if path.extension().and_then(|value| value.to_str()) == Some("rs")
+ || ["Cargo.toml", "Cargo.lock", "README.md"].iter().any(|allowed| name == *allowed)
+ {
+ files.push(path);
+ }
+ }
+ }
+ Ok(())
+}
+
+fn source_inventory(root: &Path, verifier_dirs: &[PathBuf]) -> Result {
+ let mut files = Vec::new();
+ let mut invalid = Vec::new();
+ for directory in verifier_dirs {
+ collect_source(root, directory, &mut files, &mut invalid)?;
+ }
+ files.sort();
+ invalid.sort();
+ let mut rows = Vec::new();
+ let mut tree = Sha256::new();
+ let mut unsafe_hits = Vec::new();
+ let mut review_hits = Vec::new();
+ let mut total_lines = 0_usize;
+ for path in files {
+ let relative = path.strip_prefix(root).unwrap_or(&path).to_string_lossy().replace('\\', "/");
+ let bytes = fs::read(&path)?;
+ let digest = sha256_hex(&bytes);
+ let text = String::from_utf8_lossy(&bytes);
+ let lines = text.matches('\n').count() + usize::from(!text.ends_with('\n'));
+ total_lines += lines;
+ rows.push(json!({ "path": relative, "sha256": format!("0x{digest}"), "lines": lines }));
+ tree.update(relative.as_bytes());
+ tree.update([0]);
+ tree.update(hex::decode(&digest)?);
+ for (index, line) in text.lines().enumerate() {
+ let stripped = line.trim();
+ if stripped.contains("unsafe") {
+ unsafe_hits.push(json!({ "path": relative, "line": index + 1, "text": stripped }));
+ }
+ if ["TODO", "todo!", "unimplemented!", "panic!"].iter().any(|token| stripped.contains(token)) {
+ review_hits.push(json!({ "path": relative, "line": index + 1, "text": stripped }));
+ }
+ }
+ }
+ Ok(json!({
+ "source_tree_sha256": format!("0x{}", hex::encode(tree.finalize())),
+ "files": rows,
+ "total_files": rows.len(),
+ "total_lines": total_lines,
+ "valid": invalid.is_empty(),
+ "invalid_paths": invalid,
+ "unsafe_hits": unsafe_hits,
+ "review_hits": review_hits
+ }))
+}
+
+fn gate(name: &str, passed: bool, evidence: &str, detail: Value) -> Value {
+ json!({ "name": name, "status": if passed { "passed" } else { "failed" }, "evidence": evidence, "detail": detail })
+}
+
+fn bool_at(value: &Value, pointer: &str) -> bool {
+ value.pointer(pointer).and_then(Value::as_bool) == Some(true)
+}
+
+fn equal_at(value: &Value, left: &str, right: &str) -> bool {
+ value.pointer(left) == value.pointer(right)
+}
+
+fn git_commit(root: &Path) -> Option {
+ let output = Command::new("git").args(["rev-parse", "HEAD"]).current_dir(root).output().ok()?;
+ output.status.success().then(|| String::from_utf8_lossy(&output.stdout).trim().to_owned())
+}
+
+pub fn run(root: &Path, output: Option<&Path>, pretty: bool) -> Result {
+ let core = root.join("proposals/novaseal/v0-mvp-skeleton");
+ let target = root.join("target");
+ let report_paths = [
+ ("reference_vectors", core.join("target/novaseal-btc-verifier-vectors.json")),
+ ("ipc_vectors", core.join("target/novaseal-btc-verifier-ipc-vectors.json")),
+ ("shell_report", core.join("target/novaseal-btc-verifier-shell-report.json")),
+ ("riscv_artifact", core.join("target/novaseal-riscv-shell-artifact.json")),
+ ("child_verifier_ckb_vm", core.join("target/novaseal-ckb-vm-child-verifier-report.json")),
+ ("parent_lock_ckb_vm", core.join("target/novaseal-parent-lock-ckb-vm-report.json")),
+ ("combined_tx_ckb_vm", core.join("target/novaseal-combined-tx-report.json")),
+ ("core_live_devnet", target.join("novaseal-devnet-stateful-live.json")),
+ ("agreement_live_devnet", target.join("novaseal-agreement-devnet-stateful-live.json")),
+ ];
+ let mut reports = serde_json::Map::new();
+ for (name, path) in report_paths {
+ reports.insert(name.to_owned(), load(root, &path)?);
+ }
+ let reports = Value::Object(reports);
+ let vectors = reports.pointer("/reference_vectors/summary").cloned().unwrap_or_else(|| json!({}));
+ let ipc = reports.pointer("/ipc_vectors/summary").cloned().unwrap_or_else(|| json!({}));
+ let shell = reports.pointer("/shell_report/summary").cloned().unwrap_or_else(|| json!({}));
+ let artifact = reports.get("riscv_artifact").cloned().unwrap_or_else(|| json!({}));
+ let child = reports.pointer("/child_verifier_ckb_vm/summary").cloned().unwrap_or_else(|| json!({}));
+ let parent = reports.pointer("/parent_lock_ckb_vm/summary").cloned().unwrap_or_else(|| json!({}));
+ let combined = reports.pointer("/combined_tx_ckb_vm/summary").cloned().unwrap_or_else(|| json!({}));
+ let core_live = reports.get("core_live_devnet").cloned().unwrap_or_else(|| json!({}));
+ let agreement_live = reports.get("agreement_live_devnet").cloned().unwrap_or_else(|| json!({}));
+ let artifact_hash = artifact
+ .pointer("/staged_release_elf/sha256")
+ .and_then(Value::as_str)
+ .map(|value| if value.starts_with("0x") { value.to_owned() } else { format!("0x{value}") })
+ .map(Value::String)
+ .unwrap_or(Value::Null);
+ let gates = vec![
+ gate(
+ "reference_bip340_vectors",
+ vectors.get("positive_self_verified").and_then(Value::as_u64).unwrap_or(0) > 0
+ && equal_at(&vectors, "/positive_self_verified", "/positive_vectors")
+ && equal_at(&vectors, "/negative_self_rejected", "/negative_vectors"),
+ "target/novaseal-btc-verifier-vectors.json",
+ vectors,
+ ),
+ gate(
+ "fixed_ipc_vectors",
+ ipc.get("expected_accept").and_then(Value::as_u64).unwrap_or(0) > 0
+ && ipc.get("expected_reject").and_then(Value::as_u64).unwrap_or(0) > 0
+ && ipc.get("total_vectors").and_then(Value::as_u64).unwrap_or(0)
+ == ipc.get("expected_accept").and_then(Value::as_u64).unwrap_or(0)
+ + ipc.get("expected_reject").and_then(Value::as_u64).unwrap_or(0),
+ "target/novaseal-btc-verifier-ipc-vectors.json",
+ ipc,
+ ),
+ gate(
+ "riscv_shell_spawn_word_report",
+ bool_at(&shell, "/all_expected_matched") && equal_at(&shell, "/matched_expected", "/total_vectors"),
+ "target/novaseal-btc-verifier-shell-report.json",
+ shell,
+ ),
+ gate(
+ "riscv_artifact_preflight",
+ bool_at(&artifact, "/staged_matches_release")
+ && bool_at(&artifact, "/status/preflight_passed")
+ && bool_at(&artifact, "/status/ready_for_ckb_vm_dry_run"),
+ "target/novaseal-riscv-shell-artifact.json",
+ json!({
+ "artifact_hash": artifact_hash,
+ "size_bytes": artifact.pointer("/staged_release_elf/size_bytes").cloned().unwrap_or(Value::Null),
+ "production_ready_claim": artifact.pointer("/status/production_ready").cloned().unwrap_or(Value::Null)
+ }),
+ ),
+ gate(
+ "child_verifier_ckb_vm",
+ bool_at(&child, "/child_verifier_ckb_vm_executed")
+ && equal_at(&child, "/matched_expected", "/total_cases")
+ && child.get("mismatched").and_then(Value::as_u64) == Some(0),
+ "target/novaseal-ckb-vm-child-verifier-report.json",
+ child,
+ ),
+ gate(
+ "parent_lock_spawn_ckb_vm",
+ bool_at(&parent, "/parent_spawn_executed")
+ && bool_at(&parent, "/child_verifier_ckb_vm_executed")
+ && bool_at(&parent, "/full_transaction_verifier_matched_expected")
+ && equal_at(&parent, "/matched_expected", "/total_cases"),
+ "target/novaseal-parent-lock-ckb-vm-report.json",
+ parent,
+ ),
+ gate(
+ "combined_lock_type_node_stack",
+ ((bool_at(&combined, "/ckb_node_verification_stack_executed")
+ && equal_at(&combined, "/node_stack_matched_expected", "/total_cases"))
+ || (bool_at(&combined, "/combined_full_transaction_executed")
+ && equal_at(&combined, "/matched_expected", "/total_cases")
+ && bool_at(&combined, "/lock_and_type_script_groups_present")))
+ && bool_at(&combined, "/child_spawn_target_cell_dep0_modelled"),
+ "target/novaseal-combined-tx-report.json",
+ combined,
+ ),
+ gate(
+ "live_local_devnet_core_and_agreement",
+ core_live.get("status").and_then(Value::as_str) == Some("passed")
+ && bool_at(&core_live, "/live_devnet_rpc_executed")
+ && agreement_live.get("status").and_then(Value::as_str) == Some("passed")
+ && bool_at(&agreement_live, "/live_devnet_rpc_executed"),
+ "target/novaseal-devnet-stateful-live.json + target/novaseal-agreement-devnet-stateful-live.json",
+ json!({
+ "core_status": core_live.get("status").cloned().unwrap_or(Value::Null),
+ "agreement_status": agreement_live.get("status").cloned().unwrap_or(Value::Null),
+ "core_verifier_data_hash": core_live.pointer("/artifacts/verifier/data_hash").cloned().unwrap_or(Value::Null),
+ "agreement_verifier_data_hash": agreement_live.pointer("/artifacts/verifier/data_hash").cloned().unwrap_or(Value::Null)
+ }),
+ ),
+ ];
+ let verifier_dirs = [
+ core.join("verifier/novaseal_btc_verifier_core"),
+ core.join("verifier/novaseal_btc_verifier_riscv"),
+ core.join("verifier/novaseal_btc_verifier"),
+ ];
+ let inventory = source_inventory(root, &verifier_dirs)?;
+ let passed = gates.iter().all(|gate| gate["status"] == "passed") && inventory["valid"] == true;
+ let report = json!({
+ "schema": "novaseal-bip340-tcb-review-v0.1",
+ "status": if passed { "passed_local_review_external_attestation_required" } else { "failed" },
+ "repo_commit": git_commit(root),
+ "verifier_id": "btc.bip340.v0",
+ "ipc_abi": "cellscript-btc-bip340-ipc-v0",
+ "runtime_artifact": {
+ "name": "cellscript_btc_bip340_verifier_riscv",
+ "role": "runtime_verifier",
+ "artifact_hash": artifact_hash,
+ "artifact_hash_algorithm": "sha256",
+ "size_bytes": artifact.pointer("/staged_release_elf/size_bytes").cloned().unwrap_or(Value::Null)
+ },
+ "local_review_gates": gates,
+ "source_inventory": inventory,
+ "tcb_boundary": {
+ "included": ["BIP340 verifier core", "RISC-V spawn/pipe/wait shell", "IPC envelope parser", "artifact hash used by NovaSeal manifests"],
+ "excluded": ["NovaSeal .cell protocol code", "CKB node implementation", "test harness Rust used only to construct evidence", "wallet UI implementation"]
+ },
+ "external_review": {
+ "required_for_production": true,
+ "attestation_file": "proposals/novaseal/v0-mvp-skeleton/proofs/bip340_external_tcb_review_attestation.json",
+ "template": "proposals/novaseal/v0-mvp-skeleton/proofs/bip340_external_tcb_review_attestation.template.json",
+ "status": "missing_attestation"
+ }
+ });
+ let default_output = target.join("novaseal-bip340-tcb-review.json");
+ let output = lexical_path(output.unwrap_or(&default_output));
+ fs::create_dir_all(output.parent().context("output path has no parent")?)?;
+ fs::write(&output, format!("{}\n", stable_json_pretty(&report)?))?;
+ if pretty {
+ println!(
+ "wrote {} status={} artifact={} local_gates={}",
+ output.display(),
+ report["status"].as_str().unwrap_or("failed"),
+ report.pointer("/runtime_artifact/artifact_hash").and_then(Value::as_str).unwrap_or("None"),
+ report["local_review_gates"].as_array().map_or(0, Vec::len)
+ );
+ }
+ Ok(if passed { 0 } else { 1 })
+}
diff --git a/crates/cellscript-tools/src/btc_anchor.rs b/crates/cellscript-tools/src/btc_anchor.rs
new file mode 100644
index 00000000..e1a53259
--- /dev/null
+++ b/crates/cellscript-tools/src/btc_anchor.rs
@@ -0,0 +1,67 @@
+//! Shared NovaSeal BTC public-anchor shape checks.
+
+use std::collections::BTreeSet;
+
+use serde_json::{Map, Value};
+
+use crate::crypto::nonzero_hex32;
+
+fn exact_keys(value: &Map, keys: &[&str]) -> bool {
+ value.keys().map(String::as_str).collect::>() == keys.iter().copied().collect::>()
+}
+
+fn non_negative_integer(value: Option<&Value>) -> bool {
+ value.and_then(Value::as_i64).is_some_and(|number| number >= 0) || value.and_then(Value::as_u64).is_some()
+}
+
+fn positive_integer(value: Option<&Value>) -> bool {
+ value.and_then(Value::as_i64).is_some_and(|number| number > 0) || value.and_then(Value::as_u64).is_some_and(|number| number > 0)
+}
+
+pub fn public_btc_anchor_shape_matches_profile(profile: &str, anchor: Option<&Value>) -> bool {
+ let Some(anchor) = anchor.and_then(Value::as_object) else {
+ return false;
+ };
+ if profile == "btc-transaction-commitment-profile-v0" {
+ return exact_keys(
+ anchor,
+ &["kind", "anchor_source", "btc_txid", "btc_wtxid", "btc_output_index", "btc_amount_sats", "ckb_btc_commitment_hash"],
+ ) && anchor.get("kind").and_then(Value::as_str) == Some("btc_transaction_commitment")
+ && anchor.get("anchor_source").and_then(Value::as_str).is_some_and(|source| !source.is_empty())
+ && anchor.get("btc_txid").is_some_and(nonzero_hex32)
+ && anchor.get("btc_wtxid").is_some_and(nonzero_hex32)
+ && non_negative_integer(anchor.get("btc_output_index"))
+ && positive_integer(anchor.get("btc_amount_sats"))
+ && anchor.get("ckb_btc_commitment_hash").is_some_and(nonzero_hex32);
+ }
+ if matches!(profile, "btc-utxo-seal-profile-v0" | "dual-seal-profile-v0") {
+ let expected_kind = if profile == "btc-utxo-seal-profile-v0" { "btc_utxo_spend" } else { "dual_seal_btc_closure" };
+ return exact_keys(
+ anchor,
+ &[
+ "kind",
+ "anchor_source",
+ "sealed_btc_txid",
+ "sealed_btc_vout_index",
+ "sealed_btc_amount_sats",
+ "script_pubkey_hash",
+ "btc_txid",
+ "btc_wtxid",
+ "spend_input_index",
+ "ckb_btc_commitment_hash",
+ "sealed_utxo_commitment_hash",
+ ],
+ ) && anchor.get("kind").and_then(Value::as_str) == Some(expected_kind)
+ && anchor.get("anchor_source").and_then(Value::as_str).is_some_and(|source| !source.is_empty())
+ && anchor.get("sealed_btc_txid").is_some_and(nonzero_hex32)
+ && non_negative_integer(anchor.get("sealed_btc_vout_index"))
+ && positive_integer(anchor.get("sealed_btc_amount_sats"))
+ && anchor.get("script_pubkey_hash").is_some_and(nonzero_hex32)
+ && anchor.get("btc_txid").is_some_and(nonzero_hex32)
+ && anchor.get("btc_wtxid").is_some_and(nonzero_hex32)
+ && non_negative_integer(anchor.get("spend_input_index"))
+ && anchor.get("ckb_btc_commitment_hash").is_some_and(nonzero_hex32)
+ && anchor.get("sealed_utxo_commitment_hash").is_some_and(nonzero_hex32);
+ }
+ false
+}
diff --git a/crates/cellscript-tools/src/btc_spv_adapter.rs b/crates/cellscript-tools/src/btc_spv_adapter.rs
new file mode 100644
index 00000000..03d71586
--- /dev/null
+++ b/crates/cellscript-tools/src/btc_spv_adapter.rs
@@ -0,0 +1,276 @@
+//! Rust port of the NovaSeal public BTC SPV evidence adapter request.
+
+use std::fs;
+use std::path::Path;
+
+use anyhow::{Context, Result};
+use serde_json::{json, Value};
+
+use crate::crypto::canonical_report_hash;
+use crate::shared::{lexical_path, stable_json_pretty};
+
+const PERSON: &[u8] = b"NovaBtcSpvReqV0";
+const PROFILES: [&str; 3] = ["btc-transaction-commitment-profile-v0", "btc-utxo-seal-profile-v0", "dual-seal-profile-v0"];
+
+fn scenario(profile: &str) -> &'static str {
+ match profile {
+ "btc-transaction-commitment-profile-v0" => "btc-transaction-commitment-transition",
+ "btc-utxo-seal-profile-v0" => "btc-utxo-seal-closure",
+ _ => "dual-seal-finality",
+ }
+}
+
+fn production_anchor(profile: &str) -> &'static str {
+ if profile == "btc-transaction-commitment-profile-v0" {
+ "external_public_btc_transaction"
+ } else {
+ "external_public_btc_spend"
+ }
+}
+
+fn hash(label: &str, value: &Value) -> Result {
+ canonical_report_hash(PERSON, label, value)
+}
+
+fn hex32(value: &Value) -> bool {
+ value.as_str().is_some_and(|text| {
+ text.len() == 66 && text.starts_with("0x") && text[2..].chars().all(|character| character.is_ascii_hexdigit())
+ })
+}
+
+fn non_negative(value: &Value) -> bool {
+ value.as_i64().is_some_and(|number| number >= 0) || value.as_u64().is_some()
+}
+
+fn positive(value: &Value) -> bool {
+ value.as_i64().is_some_and(|number| number > 0) || value.as_u64().is_some_and(|number| number > 0)
+}
+
+fn truthy(value: &Value) -> bool {
+ match value {
+ Value::Null | Value::Bool(false) => false,
+ Value::String(text) => !text.is_empty(),
+ Value::Array(values) => !values.is_empty(),
+ Value::Object(values) => !values.is_empty(),
+ Value::Number(number) => number.as_f64().is_some_and(|number| number != 0.0),
+ Value::Bool(true) => true,
+ }
+}
+
+pub(crate) fn required_fields() -> Value {
+ json!([
+ "network",
+ "generated_at",
+ "evidence_provider",
+ "required_profiles",
+ "profile",
+ "scenario",
+ "ckb_live_tx_hash",
+ "live_report_hash",
+ "service_builder_case_hash",
+ "service_builder_tx_skeleton_hash",
+ "service_builder_receipt_binding_hash",
+ "ckb_btc_commitment_hash",
+ "btc_txid",
+ "btc_wtxid",
+ "btc_tx_hex",
+ "btc_block_hash",
+ "btc_block_header",
+ "btc_merkle_proof.tx_index",
+ "btc_merkle_proof.merkle_branch",
+ "btc_merkle_proof.merkle_root",
+ "btc_merkle_proof.block_height",
+ "btc_merkle_proof.observed_tip_height",
+ "btc_transaction_binding.kind",
+ "btc_transaction_binding.btc_output_index",
+ "btc_transaction_binding.btc_amount_sats",
+ "btc_transaction_binding.spend_input_index",
+ "btc_transaction_binding.sealed_btc_txid",
+ "btc_transaction_binding.sealed_btc_vout_index",
+ "btc_transaction_binding.sealed_btc_amount_sats",
+ "btc_transaction_binding.script_pubkey_hash",
+ "btc_transaction_binding.sealed_btc_tx_hex",
+ "btc_transaction_binding.sealed_utxo_commitment_hash",
+ "spv_proof_hash",
+ "minimum_confirmations",
+ "confirmations",
+ "spv_client_cell_dep.out_point",
+ "spv_client_cell_dep.data_hash",
+ "spv_client_cell_dep.dep_type",
+ "spv_client_cell_dep.hash_type",
+ "source_service.name",
+ "source_service.commit",
+ "source_service.report_hash",
+ "request_handoff.bundle",
+ "request_handoff.bundle_hash",
+ "request_handoff.bundle_hash_algorithm",
+ "request_handoff.group"
+ ])
+}
+
+pub(crate) fn field_constraints() -> Value {
+ json!({
+ "network": "explicit public mainnet/testnet name; placeholders and local/devnet/regtest/simnet/private/fake labels are rejected",
+ "generated_at": "UTC timestamp in YYYY-MM-DDTHH:MM:SSZ form; future timestamps are rejected",
+ "evidence_provider": "real external provider identity; placeholder, first-party NovaSeal/CellScript/a19q3, local/devnet/fake/internal, example, and unknown tokens are rejected",
+ "ckb_live_tx_hash": "0x-prefixed 32-byte CKB live transaction hash matching the current NovaSeal service-builder case",
+ "live_report_hash": "0x-prefixed 32-byte hash of the current NovaSeal live devnet report for this profile",
+ "service_builder_case_hash": "0x-prefixed 32-byte hash of the current NovaSeal service-builder case for this profile",
+ "service_builder_tx_skeleton_hash": "0x-prefixed 32-byte service-builder transaction skeleton hash for this profile",
+ "service_builder_receipt_binding_hash": "0x-prefixed 32-byte service-builder receipt binding hash for this profile",
+ "ckb_btc_commitment_hash": "0x-prefixed 32-byte CKB-side BTC commitment hash from the current live profile report",
+ "btc_txid": "0x-prefixed 32-byte non-placeholder Bitcoin transaction id",
+ "btc_wtxid": "0x-prefixed 32-byte Bitcoin witness transaction id derived from btc_tx_hex",
+ "btc_tx_hex": "0x-prefixed raw Bitcoin transaction bytes whose txid/wtxid match the public evidence case",
+ "btc_block_hash": "0x-prefixed 32-byte non-placeholder Bitcoin block hash anchoring the SPV proof",
+ "btc_block_header": "0x-prefixed 80-byte Bitcoin block header whose double-SHA256 hash matches btc_block_hash",
+ "btc_merkle_proof.tx_index": "zero-based transaction index used to orient the Merkle branch",
+ "btc_merkle_proof.merkle_branch": "array of 0x-prefixed 32-byte Bitcoin sibling hashes in display order; empty only for tx_index 0 in a single-transaction block",
+ "btc_merkle_proof.merkle_root": "0x-prefixed 32-byte Bitcoin Merkle root matching the block header",
+ "btc_merkle_proof.block_height": "public Bitcoin block height containing btc_txid",
+ "btc_merkle_proof.observed_tip_height": "public Bitcoin tip height used to compute confirmations",
+ "btc_transaction_binding.kind": "profile-specific binding kind: btc_transaction_output, btc_utxo_spend, or dual_seal_btc_closure",
+ "btc_transaction_binding.btc_output_index": "BTC transaction commitment output index; required for btc-transaction-commitment-profile-v0",
+ "btc_transaction_binding.btc_amount_sats": "BTC transaction commitment output amount in sats; required for btc-transaction-commitment-profile-v0",
+ "btc_transaction_binding.spend_input_index": "Bitcoin spend input index; required for UTXO and dual-seal closure profiles",
+ "btc_transaction_binding.sealed_btc_txid": "sealed Bitcoin transaction id whose output is spent; required for btc-utxo-seal-profile-v0 and dual-seal-profile-v0",
+ "btc_transaction_binding.sealed_btc_vout_index": "sealed Bitcoin output index; required for btc-utxo-seal-profile-v0 and dual-seal-profile-v0",
+ "btc_transaction_binding.sealed_btc_amount_sats": "sealed Bitcoin output amount in sats; required for btc-utxo-seal-profile-v0 and dual-seal-profile-v0",
+ "btc_transaction_binding.script_pubkey_hash": "0x-prefixed CKB Blake2b-256 hash of the sealed output scriptPubKey bytes; required for btc-utxo-seal-profile-v0 and dual-seal-profile-v0",
+ "btc_transaction_binding.sealed_btc_tx_hex": "0x-prefixed raw sealed Bitcoin transaction bytes; required for btc-utxo-seal-profile-v0 and dual-seal-profile-v0",
+ "btc_transaction_binding.sealed_utxo_commitment_hash": "0x-prefixed 32-byte CKB-side sealed UTXO commitment hash; required for btc-utxo-seal-profile-v0 and dual-seal-profile-v0",
+ "spv_proof_hash": "0x-prefixed SHA-256 hash of the canonical BTC SPV proof material carried in this case",
+ "minimum_confirmations": "integer confirmation floor; at least 6",
+ "confirmations": "integer observed confirmations meeting minimum_confirmations",
+ "spv_client_cell_dep.out_point": "0x-prefixed 32-byte CKB transaction hash plus numeric output index",
+ "spv_client_cell_dep.data_hash": "0x-prefixed 32-byte non-placeholder SPV client data hash",
+ "spv_client_cell_dep.dep_type": "code",
+ "spv_client_cell_dep.hash_type": "data, data1, or type CKB script hash type",
+ "source_service.name": "real external SPV service identity; placeholder, first-party NovaSeal/CellScript/a19q3, local/devnet/fake/internal, example, and unknown tokens are rejected",
+ "source_service.commit": "40-character hex service source commit",
+ "source_service.report_hash": "0x-prefixed 32-byte non-placeholder SPV service report hash",
+ "request_handoff.bundle": "target/novaseal-external-evidence-handoff-bundle.json",
+ "request_handoff.bundle_hash": "0x-prefixed 32-byte hash of the NovaSeal external evidence handoff bundle",
+ "request_handoff.bundle_hash_algorithm": "blake2b-256(person=NovaExtHandoff)",
+ "request_handoff.group": "public_btc_spv_evidence"
+ })
+}
+
+fn find_profile<'a>(cases: Option<&'a Vec>, profile: &str) -> Option<&'a Value> {
+ cases?.iter().find(|case| case.get("profile").and_then(Value::as_str) == Some(profile))
+}
+
+fn profile_cases(service: &Value, template: &Value) -> Result> {
+ let builder_cases = service.get("cases").and_then(Value::as_array);
+ let template_cases = template.get("cases").and_then(Value::as_array);
+ let mut cases = Vec::new();
+ for profile in PROFILES {
+ let builder = find_profile(builder_cases, profile);
+ let template_case = find_profile(template_cases, profile);
+ let external_inputs = builder
+ .and_then(|case| case.pointer("/request/production_external_inputs"))
+ .and_then(Value::as_array)
+ .cloned()
+ .unwrap_or_default();
+ let live_inputs = builder.and_then(|case| case.pointer("/request/required_live_inputs")).cloned().unwrap_or_else(|| json!({}));
+ let anchor = live_inputs.get("public_btc_anchor").filter(|value| value.is_object()).cloned().unwrap_or_else(|| json!({}));
+ let builder_value = builder.cloned().unwrap_or(Value::Null);
+ let template_value = template_case.cloned().unwrap_or(Value::Null);
+ let request = json!({
+ "profile": profile,
+ "scenario": template_case.and_then(|case| case.get("scenario")).cloned().unwrap_or(Value::Null),
+ "minimum_confirmations": template_case.and_then(|case| case.get("minimum_confirmations")).cloned().unwrap_or(Value::from(6)),
+ "required_public_fields": required_fields(),
+ "field_constraints": field_constraints(),
+ "required_external_inputs": external_inputs,
+ "ckb_live_tx_hash": live_inputs.get("live_devnet_tx_hash").cloned().unwrap_or(Value::Null),
+ "live_report_hash": live_inputs.get("live_report_hash").cloned().unwrap_or(Value::Null),
+ "service_builder_case_hash": hash("service_builder_case", &builder_value)?,
+ "service_builder_tx_skeleton_hash": builder.and_then(|case| case.pointer("/response/tx_skeleton_hash")).cloned().unwrap_or(Value::Null),
+ "service_builder_receipt_binding_hash": builder.and_then(|case| case.pointer("/response/receipt_binding_hash")).cloned().unwrap_or(Value::Null),
+ "local_anchor_source": anchor.get("anchor_source").cloned().unwrap_or(Value::Null),
+ "expected_anchor_source": production_anchor(profile),
+ "ckb_btc_commitment_hash": anchor.get("ckb_btc_commitment_hash").cloned().unwrap_or(Value::Null),
+ "expected_btc_txid": anchor.get("btc_txid").cloned().unwrap_or(Value::Null),
+ "expected_btc_wtxid": anchor.get("btc_wtxid").cloned().unwrap_or(Value::Null),
+ "expected_btc_output_index": anchor.get("btc_output_index").cloned().unwrap_or(Value::Null),
+ "expected_btc_amount_sats": anchor.get("btc_amount_sats").cloned().unwrap_or(Value::Null),
+ "expected_sealed_btc_txid": anchor.get("sealed_btc_txid").cloned().unwrap_or(Value::Null),
+ "expected_sealed_btc_vout_index": anchor.get("sealed_btc_vout_index").cloned().unwrap_or(Value::Null),
+ "expected_sealed_btc_amount_sats": anchor.get("sealed_btc_amount_sats").cloned().unwrap_or(Value::Null),
+ "expected_script_pubkey_hash": anchor.get("script_pubkey_hash").cloned().unwrap_or(Value::Null),
+ "expected_spend_input_index": anchor.get("spend_input_index").cloned().unwrap_or(Value::Null),
+ "expected_sealed_utxo_commitment_hash": anchor.get("sealed_utxo_commitment_hash").cloned().unwrap_or(Value::Null),
+ "template_case_hash": hash("template_case", &template_value)?
+ });
+ let transaction = profile == PROFILES[0];
+ let utxo = profile == PROFILES[1];
+ let dual = profile == PROFILES[2];
+ let utxo_fields = hex32(&request["expected_sealed_btc_txid"])
+ && non_negative(&request["expected_sealed_btc_vout_index"])
+ && positive(&request["expected_sealed_btc_amount_sats"])
+ && hex32(&request["expected_script_pubkey_hash"])
+ && non_negative(&request["expected_spend_input_index"])
+ && hex32(&request["expected_sealed_utxo_commitment_hash"]);
+ let checks = json!({
+ "service_builder_case_present": builder.is_some(),
+ "template_case_present": template_case.is_some(),
+ "scenario_matches_required_profile": request["scenario"] == scenario(profile),
+ "public_btc_spv_external_input_named": request["required_external_inputs"].as_array().is_some_and(|items| items.iter().any(|item| item == "public_btc_spv_evidence")),
+ "minimum_confirmations_at_least_six": non_negative(&request["minimum_confirmations"]) && request["minimum_confirmations"].as_u64().unwrap_or(0) >= 6,
+ "live_binding_hashes_present": hex32(&request["ckb_live_tx_hash"]) && hex32(&request["live_report_hash"]),
+ "service_builder_hashes_present": hex32(&request["service_builder_tx_skeleton_hash"]) && hex32(&request["service_builder_receipt_binding_hash"]),
+ "expected_anchor_source_production_eligible": request["expected_anchor_source"] == production_anchor(profile),
+ "local_anchor_source_present": truthy(&request["local_anchor_source"]),
+ "ckb_btc_commitment_hash_present": hex32(&request["ckb_btc_commitment_hash"]),
+ "expected_btc_txid_present": hex32(&request["expected_btc_txid"]),
+ "expected_btc_wtxid_present": hex32(&request["expected_btc_wtxid"]),
+ "expected_output_fields_present": !transaction || (non_negative(&request["expected_btc_output_index"]) && positive(&request["expected_btc_amount_sats"])),
+ "expected_utxo_fields_present": !utxo || utxo_fields,
+ "expected_dual_sealed_utxo_fields_present": !dual || utxo_fields,
+ "required_public_fields_complete": request["required_public_fields"].as_array().is_some_and(|fields| fields.len() == 46)
+ });
+ let passed = checks.as_object().is_some_and(|map| map.values().all(|value| value == &Value::Bool(true)));
+ cases.push(
+ json!({ "profile": profile, "status": if passed { "passed" } else { "failed" }, "checks": checks, "request": request }),
+ );
+ }
+ Ok(cases)
+}
+
+pub fn run(root: &Path, service_builder: Option<&Path>, template: Option<&Path>, output: Option<&Path>, pretty: bool) -> Result {
+ let default_service = root.join("target/novaseal-service-builder-fixtures.json");
+ let default_template = root.join("proposals/novaseal/v0-mvp-skeleton/proofs/public_btc_spv_evidence.template.json");
+ let default_output = root.join("target/novaseal-btc-spv-evidence-adapter.json");
+ let service = serde_json::from_slice::(&fs::read(lexical_path(service_builder.unwrap_or(&default_service)))?)?;
+ let template = serde_json::from_slice::(&fs::read(lexical_path(template.unwrap_or(&default_template)))?)?;
+ let cases = profile_cases(&service, &template)?;
+ let matched = cases.iter().filter(|case| case["status"] == "passed").count();
+ let passed = matched == cases.len();
+ let report = json!({
+ "schema": "novaseal-btc-spv-evidence-adapter-v0.1",
+ "status": if passed { "passed" } else { "failed" },
+ "adapter_status": "request_ready_external_evidence_required",
+ "source_service_builder_report": "target/novaseal-service-builder-fixtures.json",
+ "source_service_builder_report_hash": hash("service_builder_report", &service)?,
+ "source_public_btc_spv_template": "proposals/novaseal/v0-mvp-skeleton/proofs/public_btc_spv_evidence.template.json",
+ "source_public_btc_spv_template_hash": hash("public_btc_spv_template", &template)?,
+ "production_output": "proposals/novaseal/v0-mvp-skeleton/proofs/public_btc_spv_evidence.json",
+ "production_boundary": "This adapter proves the request contract is complete; it does not prove BTC inclusion, spend validity, confirmation depth, or public SPV client deployment.",
+ "summary": { "total": cases.len(), "matched": matched, "required_profiles": PROFILES },
+ "cases": cases
+ });
+ let output = lexical_path(output.unwrap_or(&default_output));
+ fs::create_dir_all(output.parent().context("output path has no parent")?)?;
+ fs::write(&output, format!("{}\n", stable_json_pretty(&report)?))?;
+ if pretty {
+ println!(
+ "wrote {} status={} profiles={}/{}",
+ output.display(),
+ report["status"].as_str().unwrap_or("failed"),
+ matched,
+ report["summary"]["total"]
+ );
+ }
+ Ok(if passed { 0 } else { 1 })
+}
diff --git a/crates/cellscript-tools/src/ckb_acceptance.rs b/crates/cellscript-tools/src/ckb_acceptance.rs
new file mode 100644
index 00000000..6205aeaf
--- /dev/null
+++ b/crates/cellscript-tools/src/ckb_acceptance.rs
@@ -0,0 +1,634 @@
+use std::collections::BTreeSet;
+use std::env;
+use std::fs;
+use std::path::{Path, PathBuf};
+use std::process::{Command, Output};
+
+use anyhow::{bail, Context, Result};
+use serde_json::{json, Map, Value};
+use sha2::{Digest, Sha256};
+use time::format_description::well_known::Rfc3339;
+use time::OffsetDateTime;
+
+use crate::ckb_devnet::{ckb_hash_hex, sha256_hex};
+use crate::production_evidence::{
+ self, ACTION_RUNS, BUILD_REPORT_SCHEMA, EXPECTED_CRITICAL_ELF_ABI_EXAMPLES, EXPECTED_EXAMPLES, EXPECTED_LANGUAGE_EXAMPLES,
+ EXPECTED_NON_PRODUCTION_EXAMPLES, LOCKS, PUBLIC_TIMELOCK_ACTIONS, SOURCE_PROVENANCE_SCHEMA,
+};
+
+const PROFILE_TRAILER: &[u8] = b"SPORABI\0";
+const TRAMPOLINE: [u8; 20] = hex_literal::hex!("97000000e7804001b70800009388d80573000000");
+
+#[derive(Clone)]
+pub(crate) struct ArtifactRecord {
+ pub name: String,
+ pub kind: String,
+ pub example: Option,
+ pub entry: Option,
+ pub entry_flag: Option,
+ pub source: PathBuf,
+ pub path: PathBuf,
+ pub bytes: Vec,
+ pub data_hash: String,
+ pub sha256: String,
+ pub abi: Value,
+}
+
+pub(crate) struct CompileEvidence {
+ pub report: Value,
+ pub artifacts: Vec,
+ pub report_path: PathBuf,
+ pub run_dir: PathBuf,
+}
+
+fn command_output(command: &mut Command, label: &str) -> Result