Skip to content

fix(platform)!: decode remote input with untrusted bincode and disk loads with trusted decoders - #4625

Merged
QuantumExplorer merged 63 commits into
v4.2-devfrom
codex/grovedb-untrusted-bincode
Sep 13, 2026
Merged

QuantumExplorer merged 63 commits into
v4.2-devfrom
codex/grovedb-untrusted-bincode

Conversation

@QuantumExplorer

@QuantumExplorer QuantumExplorer commented Sep 8, 2026

Copy link
Copy Markdown
Member

Issue being fixed or feature implemented

Follows #4635 (merged), which advanced GroveDB to 6.0.0, moved the workspace to the published grovedb-bincode 2.1.0 and adapted to the GroveDB API changes. This PR contains only the untrusted-decoding adoption.

Adopt GroveDB #938 and its explicit untrusted decoding APIs. A short input containing an inflated collection length must fail without first reserving memory for the claimed payload. Updating the dependency alone does not change ordinary Decode implementations, so Platform's external input paths must opt in throughout their type graphs.

What was done?

Disk loads and remote input choose their decoder explicitly:

  • The single PlatformDeserialize derive is split into PlatformDeserializeTrusted (bincode's ordinary decoder, which reserves each collection from its length prefix; also carries the type's PlatformVersionedDecode body) and PlatformDeserializeUntrusted (the untrusted decoder, which reserves nothing before the announced elements are read; requires DecodeUntrusted on the type graph). Each implements its own trait family with suffixed methods (deserialize_from_bytes_trusted / _untrusted, versioned_deserialize_trusted / _untrusted, versioned_limit_deserialize_..., versioned_deserialize_with_bytes_len_...), so no plain name survives and every call site states its trust level; grep deserialize_from_bytes_trusted is the audit list of disk paths. The wire-only helpers are named deserialize_from_bytes_untrusted_in_version and deserialize_many_untrusted. The hand-written DataContract and CreatedDataContract impls gain trusted twins.
  • Trusted (bytes this node wrote itself): Drive fetches from GroveDB, the vote-poll query key decoders, drive-abci platform-state and checkpoint loads and the contract query's round-trip of fetched bytes, the wallet's own persisted state transitions, SQLite blobs and changesets, host-persisted asset-lock proofs, and the strategy-tests formats.
  • Untrusted (bytes from a peer, a client, a proof or a host caller): proof verification in Drive, check_tx and state-transition processing, request cursors and state-transition bytes in query handlers, DAPI error mapping, rs-sdk, rs-sdk-ffi, all WASM crates, the wallet FFI parse entry points, and asset-lock proofs arriving live from Core. Native untrusted derives are added across DPP with custom wire schemas, validation, depth limits and configured budgets preserved; the immutable-structure CI check rewrites each #[derive(...)] as one canonical line with only DecodeUntrusted removed before diffing, so the tagged types derive it like everything else while every other derive, the fields, the variants and the encoding attributes stay guarded.
  • Types derive both unless only ever decoded one way: the proof-verifier mock formats derive Trusted alone (replacing the old trusted attribute flag). A type deriving only one side makes the other entry point a compile error, which is how a wire-only type is kept off the trusted path.
  • Ordinary-only foreign decoders at the FFI boundary (key-wallet account xpubs for ECDSA, BLS and EdDSA; BLS keys; FFI payloads) receive explicit byte budgets. Custom Value collections grow only after decoding entries.

Cost of the split, measured on the pinned grovedb-bincode 2.1.0 in release mode: untrusted decoding is 6% to 25% slower than ordinary on collection-heavy structures (a document-like struct 643 ns vs 794 ns; a 100-document page 61 µs vs 75 µs; byte vectors within 6%), which is why block execution's stored-object decodes stay on the trusted side.

How Has This Been Tested?

Local macOS Rust checks on the final head (merged with v4.2-dev at 4.2.0-dev.9):

  • cargo check --workspace --all-targets --all-features, CI-flag clippy (--workspace --all-targets --all-features --locked -- --no-deps -D warnings) and cargo fmt --all --check clean.
  • DPP serialization, shielded-transition and CreatedDataContract tests: 226 passed; the untrusted-decode integration suites (DPP + platform-value): 9 passed, covering malformed lengths, observed allocation sizes, owned/borrowed decoding, wire compatibility, custom validation and the Trusted-only fixture.
  • Drive verify:: 257 passed; drive-abci decode_raw_state_transitions, platform_state, fetch_platform_state and check_tx filters 82 passed.
  • Wallet: platform-wallet-ffi 366 passed (including the BLS xpub budget test), platform-wallet-storage 983 passed, platform-wallet shielded 180 passed.
  • The immutable-structure guard was run locally with the workflow's own step body: it passes this PR and fails when Encode is removed from BlockInfo's derive list.

Earlier rounds ran the CI Rust job's full nextest package set locally (14,864 passed) before the trusted/untrusted split. Device/browser execution and a live network upgrade were not exercised.

Breaking Changes

PlatformDeserialize and the PlatformDeserializable* traits are replaced by their Trusted / Untrusted twins with suffixed method names; downstream code must derive the side(s) it decodes as and rename its calls. Custom wallet blob types are unaffected (the base's PersistableBlob shape stands).

Existing bincode encoding and the C ABI are unchanged. Ordinary Decode and the separate PlatformVersionedDecode APIs retain their existing contracts.

Checklist:

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have added "!" to the title and described breaking changes in the corresponding section if my code contains any
  • I have made corresponding changes to the documentation if needed

For repository code-owners and collaborators only

  • I have assigned this pull request to a milestone

@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 684 files, which is 584 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: d88539a0-bc80-4cb3-95a3-ea5770f68d88

📥 Commits

Reviewing files that changed from the base of the PR and between 91b06f2 and 175714d.

📒 Files selected for processing (684)
  • .github/workflows/tests-rs-workspace.yml
  • packages/rs-dapi/src/services/platform_service/error_mapping.rs
  • packages/rs-dpp/src/address_funds/fee_strategy/mod.rs
  • packages/rs-dpp/src/address_funds/platform_address.rs
  • packages/rs-dpp/src/address_funds/witness.rs
  • packages/rs-dpp/src/asset_lock/reduced_asset_lock_value/mod.rs
  • packages/rs-dpp/src/asset_lock/reduced_asset_lock_value/v0/mod.rs
  • packages/rs-dpp/src/balances/credits.rs
  • packages/rs-dpp/src/balances/total_single_token_balance/mod.rs
  • packages/rs-dpp/src/block/block_info/mod.rs
  • packages/rs-dpp/src/block/epoch/mod.rs
  • packages/rs-dpp/src/block/extended_block_info/mod.rs
  • packages/rs-dpp/src/block/extended_block_info/v0/mod.rs
  • packages/rs-dpp/src/block/extended_epoch_info/mod.rs
  • packages/rs-dpp/src/block/extended_epoch_info/v0/mod.rs
  • packages/rs-dpp/src/block/finalized_epoch_info/mod.rs
  • packages/rs-dpp/src/block/finalized_epoch_info/v0/mod.rs
  • packages/rs-dpp/src/core_types/validator/v0/mod.rs
  • packages/rs-dpp/src/core_types/validator_set/mod.rs
  • packages/rs-dpp/src/core_types/validator_set/v0/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_configuration/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_configuration/v0/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_configuration_convention/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_configuration_convention/v0/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_configuration_item.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_configuration_localization/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_configuration_localization/v0/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_distribution_key.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_distribution_rules/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_distribution_rules/v0/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_keeps_history_rules/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_keeps_history_rules/v0/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_marketplace_rules/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_marketplace_rules/v0/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/distribution_function/encode.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/distribution_recipient.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/reward_distribution_moment/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/reward_distribution_type/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_perpetual_distribution/v0/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/mod.rs
  • packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/v0/mod.rs
  • packages/rs-dpp/src/data_contract/change_control_rules/authorized_action_takers.rs
  • packages/rs-dpp/src/data_contract/change_control_rules/mod.rs
  • packages/rs-dpp/src/data_contract/change_control_rules/v0/mod.rs
  • packages/rs-dpp/src/data_contract/config/mod.rs
  • packages/rs-dpp/src/data_contract/config/v0/mod.rs
  • packages/rs-dpp/src/data_contract/config/v1/mod.rs
  • packages/rs-dpp/src/data_contract/created_data_contract/mod.rs
  • packages/rs-dpp/src/data_contract/created_data_contract/v0/mod.rs
  • packages/rs-dpp/src/data_contract/document_type/property/mod.rs
  • packages/rs-dpp/src/data_contract/document_type/random_document.rs
  • packages/rs-dpp/src/data_contract/document_type/restricted_creation/mod.rs
  • packages/rs-dpp/src/data_contract/document_type/v0/random_document_type.rs
  • packages/rs-dpp/src/data_contract/errors/contract.rs
  • packages/rs-dpp/src/data_contract/errors/json_schema_error.rs
  • packages/rs-dpp/src/data_contract/extra/drive_api_tests.rs
  • packages/rs-dpp/src/data_contract/factory/v0/mod.rs
  • packages/rs-dpp/src/data_contract/group/mod.rs
  • packages/rs-dpp/src/data_contract/group/v0/mod.rs
  • packages/rs-dpp/src/data_contract/mod.rs
  • packages/rs-dpp/src/data_contract/serialized_version/mod.rs
  • packages/rs-dpp/src/data_contract/serialized_version/v0/mod.rs
  • packages/rs-dpp/src/data_contract/serialized_version/v1/mod.rs
  • packages/rs-dpp/src/data_contract/storage_requirements/keys_for_document_type.rs
  • packages/rs-dpp/src/data_contract/v0/serialization/mod.rs
  • packages/rs-dpp/src/data_contract/v1/serialization/mod.rs
  • packages/rs-dpp/src/document/document_factory/v0/mod.rs
  • packages/rs-dpp/src/document/extended_document/v0/serialize.rs
  • packages/rs-dpp/src/document/specialized_document_factory/v0/mod.rs
  • packages/rs-dpp/src/errors/consensus/basic/basic_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/contested_unique_index_on_mutable_document_type_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/contested_unique_index_with_unique_index_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_required_fields_update_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_token_configuration_update_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/document_types_are_missing_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_index_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/duplicate_keywords_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/group_exceeds_max_members_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/group_has_too_few_members_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/group_member_has_power_of_zero_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/group_member_has_power_over_limit_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/group_non_unilateral_member_power_has_less_than_required_power_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/group_position_does_not_exist_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/group_required_power_is_invalid_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/group_total_power_has_less_than_required_power_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_document_type_schema_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_compound_index_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_description_length_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_document_type_name_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_document_type_required_security_level.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_index_property_type_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_indexed_property_constraint_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_keyword_character_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_keyword_length_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_base_supply_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_divide_by_zero_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_incoherence_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_invalid_parameter_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_distribution_function_invalid_parameter_tuple_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_language_code_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_name_character_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/invalid_token_name_length_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/keywords_over_limit.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/main_group_is_not_defined.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/new_tokens_destination_identity_option_required_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/non_contiguous_contract_group_positions_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/non_contiguous_contract_token_positions_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/redundant_document_paid_for_by_token_with_contract_id.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/system_property_index_already_present_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/token_decimals_over_limit_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/token_payment_by_burning_only_allowed_on_internal_token_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/undefined_index_property_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/unique_indices_limit_reached_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_document_action_token_effect_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_document_creation_restriction_mode_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_gas_fees_paid_by_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_security_level_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_storage_key_requirements_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_trade_mode_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/data_contract/unknown_transferable_type_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/decode/decoding_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/decode/version_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/contested_documents_temporarily_not_allowed_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/document_creation_not_allowed_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/document_field_max_size_exceeded_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/document_transitions_are_absent_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/identity_contract_nonce_out_of_bounds_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/invalid_document_type_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/max_documents_transitions_exceeded_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/missing_data_contract_id_basic_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/missing_document_transition_action_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/missing_document_transition_type_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/missing_document_type_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/document/missing_positions_in_document_type_properties_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/group/group_action_not_allowed_on_transition_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/data_contract_bounds_not_present_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/disabling_key_id_also_being_added_in_same_transition_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_basic_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_basic_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_state_transition_replay_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_consumed_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_not_enough_balance_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_too_many_inputs_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/identity_credit_transfer_to_self_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_credit_withdrawal_transition_core_fee_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_credit_withdrawal_transition_output_script_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_transfer_amount_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_amount_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_update_transition_disable_keys_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_update_transition_empty_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/invalid_key_purpose_for_contract_bounds_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/missing_master_public_key_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/not_implemented_credit_withdrawal_transition_pooling_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/too_many_master_public_key_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/identity/withdrawal_output_script_not_allowed_when_signing_with_owner_key.rs
  • packages/rs-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/invalid_identifier_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/json_schema_compilation_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/json_schema_error/error.rs
  • packages/rs-dpp/src/errors/consensus/basic/overflow_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_duplicate_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_empty_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_index_out_of_bounds_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/fee_strategy_too_many_steps_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/input_below_minimum_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/input_output_balance_mismatch_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/input_witness_count_mismatch_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/inputs_not_less_than_outputs_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/insufficient_funding_amount_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/invalid_remainder_output_count_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/output_address_also_input_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/output_below_minimum_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/outputs_not_greater_than_inputs_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_empty_proof_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_encrypted_note_size_mismatch_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_implicit_fee_cap_exceeded_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_invalid_denomination_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_invalid_value_balance_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_no_actions_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_too_many_actions_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_zero_anchor_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/state_transition_not_active_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_no_inputs_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_no_outputs_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_over_max_inputs_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/transition_over_max_outputs_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/withdrawal_balance_mismatch_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/withdrawal_below_min_amount_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/choosing_token_mint_recipient_not_allowed_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/contract_has_no_tokens_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/destination_identity_for_token_minting_not_set_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/invalid_action_id_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_amount_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_config_update_no_change_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_block_interval_too_short_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_time_interval_not_minute_aligned_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_distribution_time_interval_too_short_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_id_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_note_too_big_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/invalid_token_position_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/missing_default_localization.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/token_note_only_allowed_on_proposer_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/token_pricing_schedule_empty_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/token/token_transfer_to_ourselves_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/unsupported_feature_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/unsupported_version_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/value_error.rs
  • packages/rs-dpp/src/errors/consensus/consensus_error.rs
  • packages/rs-dpp/src/errors/consensus/fee/balance_is_not_enough_error.rs
  • packages/rs-dpp/src/errors/consensus/fee/fee_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/basic_bls_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/basic_ecdsa_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/identity_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/invalid_identity_public_key_type_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/invalid_signature_public_key_purpose_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/invalid_signature_public_key_security_level_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/invalid_state_transition_signature_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/missing_public_key_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/public_key_is_disabled_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/public_key_security_level_not_met_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/signature_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/signature_should_not_be_present_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/uncompressed_public_key_not_allowed_error.rs
  • packages/rs-dpp/src/errors/consensus/signature/wrong_public_key_purpose_error.rs
  • packages/rs-dpp/src/errors/consensus/state/address_funds/address_does_not_exist_error.rs
  • packages/rs-dpp/src/errors/consensus/state/address_funds/address_invalid_nonce_error.rs
  • packages/rs-dpp/src/errors/consensus/state/address_funds/address_not_enough_funds_error.rs
  • packages/rs-dpp/src/errors/consensus/state/address_funds/addresses_not_enough_funds_error.rs
  • packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs
  • packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_config_update_error.rs
  • packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_is_readonly_error.rs
  • packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_update_action_not_allowed_error.rs
  • packages/rs-dpp/src/errors/consensus/state/data_contract/data_contract_update_permission_error.rs
  • packages/rs-dpp/src/errors/consensus/state/data_contract/document_type_update_error.rs
  • packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_condition_error.rs
  • packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_execution_error.rs
  • packages/rs-dpp/src/errors/consensus/state/data_trigger/data_trigger_invalid_result_error.rs
  • packages/rs-dpp/src/errors/consensus/state/data_trigger/mod.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_already_present_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_contest_currently_locked_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_contest_document_with_same_id_already_present_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_contest_identity_already_contestant.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_contest_index_mismatch_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_joinable_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_paid_for_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_contest_not_required_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_incorrect_purchase_price_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_not_for_sale_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_timestamps_are_equal_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/duplicate_unique_index_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/invalid_document_revision_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/referenced_document_property_agreement_invalid_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/referenced_document_property_mismatch_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/referenced_document_type_deletable_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/referenced_document_type_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/referenced_entity_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/referenced_identity_key_disabled_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/referenced_identity_key_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/state/document/referenced_key_id_property_invalid_error.rs
  • packages/rs-dpp/src/errors/consensus/state/group/group_action_already_completed_error.rs
  • packages/rs-dpp/src/errors/consensus/state/group/group_action_already_signed_by_identity_error.rs
  • packages/rs-dpp/src/errors/consensus/state/group/group_action_does_not_exist_error.rs
  • packages/rs-dpp/src/errors/consensus/state/group/identity_for_group_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/state/group/identity_not_member_of_group_error.rs
  • packages/rs-dpp/src/errors/consensus/state/group/modification_of_group_action_main_parameters_not_permitted_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/identity_already_exists_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/identity_for_token_configuration_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/identity_insufficient_balance_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_already_exists_for_unique_contract_bounds_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/identity_to_freeze_does_not_exist_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_contract_nonce_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/invalid_identity_revision_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/master_public_key_update_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/missing_identity_public_key_ids_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/missing_transfer_key_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/no_transfer_key_for_core_withdrawal_available_error.rs
  • packages/rs-dpp/src/errors/consensus/state/identity/recipient_identity_does_not_exist_error.rs
  • packages/rs-dpp/src/errors/consensus/state/prefunded_specialized_balances/prefunded_specialized_balance_insufficient_error.rs
  • packages/rs-dpp/src/errors/consensus/state/prefunded_specialized_balances/prefunded_specialized_balance_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/state/shielded/insufficient_pool_notes_error.rs
  • packages/rs-dpp/src/errors/consensus/state/shielded/insufficient_shielded_fee_error.rs
  • packages/rs-dpp/src/errors/consensus/state/shielded/invalid_anchor_error.rs
  • packages/rs-dpp/src/errors/consensus/state/shielded/invalid_shielded_proof_error.rs
  • packages/rs-dpp/src/errors/consensus/state/shielded/nullifier_already_spent_error.rs
  • packages/rs-dpp/src/errors/consensus/state/state_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/identity_does_not_have_enough_token_balance_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/identity_has_not_agreed_to_pay_required_token_amount_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_already_frozen_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_frozen_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/identity_token_account_not_frozen_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/identity_trying_to_pay_with_wrong_token_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/invalid_group_position_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_no_current_rewards.rs
  • packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_property_mismatch.rs
  • packages/rs-dpp/src/errors/consensus/state/token/invalid_token_claim_wrong_claimant.rs
  • packages/rs-dpp/src/errors/consensus/state/token/invalid_token_position_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_group_does_not_exist_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_identity_does_not_exist_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/new_authorized_action_taker_main_group_not_set_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/new_tokens_destination_identity_does_not_exist_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/required_token_payment_info_not_set_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/token_already_paused_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/token_amount_under_minimum_sale_amount.rs
  • packages/rs-dpp/src/errors/consensus/state/token/token_direct_purchase_user_price_too_low.rs
  • packages/rs-dpp/src/errors/consensus/state/token/token_is_paused_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/token_mint_past_max_supply_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/token_not_for_direct_sale.rs
  • packages/rs-dpp/src/errors/consensus/state/token/token_not_paused_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/token_setting_max_supply_to_less_than_current_supply_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/token_transfer_recipient_identity_not_exist_error.rs
  • packages/rs-dpp/src/errors/consensus/state/token/unauthorized_token_action_error.rs
  • packages/rs-dpp/src/errors/consensus/state/voting/masternode_incorrect_voter_identity_id_error.rs
  • packages/rs-dpp/src/errors/consensus/state/voting/masternode_incorrect_voting_address_error.rs
  • packages/rs-dpp/src/errors/consensus/state/voting/masternode_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/state/voting/masternode_vote_already_present_error.rs
  • packages/rs-dpp/src/errors/consensus/state/voting/masternode_voted_too_many_times.rs
  • packages/rs-dpp/src/errors/consensus/state/voting/vote_poll_not_available_for_voting_error.rs
  • packages/rs-dpp/src/errors/consensus/state/voting/vote_poll_not_found_error.rs
  • packages/rs-dpp/src/errors/consensus/test_consensus_error.rs
  • packages/rs-dpp/src/fee/fee_result/refunds.rs
  • packages/rs-dpp/src/group/action_event.rs
  • packages/rs-dpp/src/group/group_action/mod.rs
  • packages/rs-dpp/src/group/group_action/v0/mod.rs
  • packages/rs-dpp/src/group/mod.rs
  • packages/rs-dpp/src/identity/core_script.rs
  • packages/rs-dpp/src/identity/identity.rs
  • packages/rs-dpp/src/identity/identity_factory.rs
  • packages/rs-dpp/src/identity/identity_nonce.rs
  • packages/rs-dpp/src/identity/identity_public_key/contract_bounds/mod.rs
  • packages/rs-dpp/src/identity/identity_public_key/key_type.rs
  • packages/rs-dpp/src/identity/identity_public_key/mod.rs
  • packages/rs-dpp/src/identity/identity_public_key/purpose.rs
  • packages/rs-dpp/src/identity/identity_public_key/security_level.rs
  • packages/rs-dpp/src/identity/identity_public_key/v0/mod.rs
  • packages/rs-dpp/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs
  • packages/rs-dpp/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs
  • packages/rs-dpp/src/identity/state_transition/asset_lock_proof/mod.rs
  • packages/rs-dpp/src/identity/v0/mod.rs
  • packages/rs-dpp/src/metadata.rs
  • packages/rs-dpp/src/serialization/mod.rs
  • packages/rs-dpp/src/serialization/serialization_traits.rs
  • packages/rs-dpp/src/serialization/untrusted.rs
  • packages/rs-dpp/src/shielded/mod.rs
  • packages/rs-dpp/src/state_transition/mod.rs
  • packages/rs-dpp/src/state_transition/serialization.rs
  • packages/rs-dpp/src/state_transition/state_transition_factory.rs
  • packages/rs-dpp/src/state_transition/state_transition_types.rs
  • packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_credit_withdrawal_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_credit_withdrawal_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funding_from_asset_lock_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funding_from_asset_lock_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funds_transfer_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funds_transfer_transition/signing_tests.rs
  • packages/rs-dpp/src/state_transition/state_transitions/address_funds/address_funds_transfer_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_create_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_create_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_update_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_update_transition/serialize.rs
  • packages/rs-dpp/src/state_transition/state_transitions/contract/data_contract_update_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_base_transition/v1/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_create_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_delete_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_delete_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_index_only_delete_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_index_only_delete_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_purchase_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_purchase_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_replace_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transfer_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transfer_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_transition.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_update_price_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/document_update_price_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_base_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_base_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_burn_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_burn_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_claim_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_claim_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_destroy_frozen_funds_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_destroy_frozen_funds_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_direct_purchase_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_direct_purchase_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_emergency_action_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_emergency_action_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_freeze_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_freeze_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_mint_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_mint_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_set_price_for_direct_purchase_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_set_price_for_direct_purchase_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transfer_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transfer_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_transition.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_unfreeze_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_unfreeze_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/v1/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_from_addresses_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_from_addresses_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_create_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_to_addresses_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_to_addresses_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_transfer_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_credit_withdrawal_transition/v1/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_from_addresses_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_from_addresses_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_topup_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_update_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/identity_update_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/masternode_vote_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/masternode_vote_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/public_key_in_creation/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/identity/public_key_in_creation/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/identity_create_from_shielded_pool_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/identity_create_from_shielded_pool_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/identity_top_up_from_shielded_pool_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/identity_top_up_from_shielded_pool_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_identity_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_identity_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/traits/state_transition_identity_signed.rs
  • packages/rs-dpp/src/tokens/contract_info/mod.rs
  • packages/rs-dpp/src/tokens/contract_info/v0/mod.rs
  • packages/rs-dpp/src/tokens/emergency_action.rs
  • packages/rs-dpp/src/tokens/gas_fees_paid_by.rs
  • packages/rs-dpp/src/tokens/info/mod.rs
  • packages/rs-dpp/src/tokens/info/v0/mod.rs
  • packages/rs-dpp/src/tokens/status/mod.rs
  • packages/rs-dpp/src/tokens/status/v0/mod.rs
  • packages/rs-dpp/src/tokens/token_event.rs
  • packages/rs-dpp/src/tokens/token_payment_info/mod.rs
  • packages/rs-dpp/src/tokens/token_payment_info/v0/mod.rs
  • packages/rs-dpp/src/tokens/token_pricing_schedule.rs
  • packages/rs-dpp/src/voting/contender_structs/contender/mod.rs
  • packages/rs-dpp/src/voting/contender_structs/contender/v0/mod.rs
  • packages/rs-dpp/src/voting/contender_structs/mod.rs
  • packages/rs-dpp/src/voting/vote_choices/resource_vote_choice/mod.rs
  • packages/rs-dpp/src/voting/vote_choices/yes_no_abstain_vote_choice/mod.rs
  • packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_stored_info/mod.rs
  • packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_stored_info/v0/mod.rs
  • packages/rs-dpp/src/voting/vote_info_storage/contested_document_vote_poll_winner_info/mod.rs
  • packages/rs-dpp/src/voting/vote_polls/contested_document_resource_vote_poll/mod.rs
  • packages/rs-dpp/src/voting/vote_polls/mod.rs
  • packages/rs-dpp/src/voting/votes/mod.rs
  • packages/rs-dpp/src/voting/votes/resource_vote/mod.rs
  • packages/rs-dpp/src/voting/votes/resource_vote/v0/mod.rs
  • packages/rs-dpp/src/withdrawal/mod.rs
  • packages/rs-dpp/tests/untrusted_decode.rs
  • packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs
  • packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/perform_events_on_first_block_of_protocol_change/v0/mod.rs
  • packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/decode_raw_state_transitions/v0/mod.rs
  • packages/rs-drive-abci/src/execution/storage/fetch_platform_state/v0/mod.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/address_credit_withdrawal/tests.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/address_funds_transfer/tests.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/batch/tests/document/replacement.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_create_from_addresses/tests.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_credit_transfer_to_addresses/tests.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/masternode_vote/mod.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/mod.rs
  • packages/rs-drive-abci/src/mimic/mod.rs
  • packages/rs-drive-abci/src/platform_types/platform/mock.rs
  • packages/rs-drive-abci/src/platform_types/platform/mod.rs
  • packages/rs-drive-abci/src/platform_types/platform_state/mod.rs
  • packages/rs-drive-abci/src/query/data_contract_based_queries/data_contract/v0/mod.rs
  • packages/rs-drive-abci/src/query/data_contract_based_queries/data_contract_history/v0/mod.rs
  • packages/rs-drive-abci/src/query/identity_based_queries/identities_contract_keys/v0/mod.rs
  • packages/rs-drive-abci/src/query/identity_based_queries/keys/v0/mod.rs
  • packages/rs-drive-abci/src/query/proofs/v0/mod.rs
  • packages/rs-drive-abci/src/query/voting/decode_index_value.rs
  • packages/rs-drive-abci/tests/strategy_tests/query.rs
  • packages/rs-drive-proof-verifier/src/from_request.rs
  • packages/rs-drive-proof-verifier/src/lib.rs
  • packages/rs-drive-proof-verifier/src/proof.rs
  • packages/rs-drive-proof-verifier/src/types.rs
  • packages/rs-drive-proof-verifier/src/types/evonode_status.rs
  • packages/rs-drive-proof-verifier/tests/vectors_identity.rs
  • packages/rs-drive/src/drive/asset_lock/fetch_asset_lock_outpoint_info/v0/mod.rs
  • packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs
  • packages/rs-drive/src/drive/contract/get_fetch/fetch_contract/v0/mod.rs
  • packages/rs-drive/src/drive/contract/get_fetch/fetch_contract_with_history/v0/mod.rs
  • packages/rs-drive/src/drive/contract/get_fetch/fetch_contracts/v0/mod.rs
  • packages/rs-drive/src/drive/credit_pools/epochs/get_finalized_epoch_info/v0/mod.rs
  • packages/rs-drive/src/drive/group/fetch/fetch_action_infos/v0/mod.rs
  • packages/rs-drive/src/drive/group/fetch/fetch_active_action_info/v0/mod.rs
  • packages/rs-drive/src/drive/group/fetch/fetch_group_info/v0/mod.rs
  • packages/rs-drive/src/drive/group/fetch/fetch_group_infos/v0/mod.rs
  • packages/rs-drive/src/drive/group/mod.rs
  • packages/rs-drive/src/drive/identity/key/fetch/mod.rs
  • packages/rs-drive/src/drive/tokens/contract_info/fetch_token_contract_info/v0/mod.rs
  • packages/rs-drive/src/drive/tokens/direct_purchase/fetch_token_direct_purchase_price/v0/mod.rs
  • packages/rs-drive/src/drive/tokens/direct_purchase/fetch_tokens_direct_purchase_price/v0/mod.rs
  • packages/rs-drive/src/drive/tokens/freeze/v0/mod.rs
  • packages/rs-drive/src/drive/tokens/info/fetch_identities_token_infos/v0/mod.rs
  • packages/rs-drive/src/drive/tokens/info/fetch_identity_token_info/v0/mod.rs
  • packages/rs-drive/src/drive/tokens/info/fetch_identity_token_infos/v0/mod.rs
  • packages/rs-drive/src/drive/tokens/status/fetch_token_status/v0/mod.rs
  • packages/rs-drive/src/drive/tokens/status/fetch_token_statuses/v0/mod.rs
  • packages/rs-drive/src/drive/tokens/unfreeze/v0/mod.rs
  • packages/rs-drive/src/drive/votes/fetch/fetch_contested_document_vote_poll_stored_info/v0/mod.rs
  • packages/rs-drive/src/drive/votes/storage_form/contested_document_resource_reference_storage_form/mod.rs
  • packages/rs-drive/src/query/vote_poll_vote_state_query.rs
  • packages/rs-drive/src/query/vote_polls_by_end_date_query.rs
  • packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/mod.rs
  • packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v0/mod.rs
  • packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v1/mod.rs
  • packages/rs-drive/src/verify/address_funds/verify_recent_address_balance_changes/v0/mod.rs
  • packages/rs-drive/src/verify/bounded_decode.rs
  • packages/rs-drive/src/verify/contract/verify_contract_return_serialization/v0/mod.rs
  • packages/rs-drive/src/verify/group/verify_active_action_infos/v0/mod.rs
  • packages/rs-drive/src/verify/group/verify_group_info/v0/mod.rs
  • packages/rs-drive/src/verify/group/verify_group_infos_in_contract/v0/mod.rs
  • packages/rs-drive/src/verify/identity/verify_full_identity_by_identity_id/v0/mod.rs
  • packages/rs-drive/src/verify/identity/verify_identities_contract_keys/v0/mod.rs
  • packages/rs-drive/src/verify/identity/verify_identity_keys_by_identity_id/v0/mod.rs
  • packages/rs-drive/src/verify/state_transition/verify_state_transition_was_executed_with_proof/v0/mod.rs
  • packages/rs-drive/src/verify/system/verify_finalized_epoch_infos/v0/mod.rs
  • packages/rs-drive/src/verify/tokens/verify_token_contract_info/v0/mod.rs
  • packages/rs-drive/src/verify/tokens/verify_token_direct_selling_price/v0/mod.rs
  • packages/rs-drive/src/verify/tokens/verify_token_direct_selling_prices/v0/mod.rs
  • packages/rs-drive/src/verify/tokens/verify_token_info_for_identity_id/v0/mod.rs
  • packages/rs-drive/src/verify/tokens/verify_token_infos_for_identity_id/v0/mod.rs
  • packages/rs-drive/src/verify/tokens/verify_token_infos_for_identity_ids/v0/mod.rs
  • packages/rs-drive/src/verify/tokens/verify_token_status/v0/mod.rs
  • packages/rs-drive/src/verify/tokens/verify_token_statuses/v0/mod.rs
  • packages/rs-drive/src/verify/voting/verify_vote_poll_vote_state_proof/v0/mod.rs
  • packages/rs-drive/src/verify/voting/verify_vote_polls_end_date_query/v0/mod.rs
  • packages/rs-platform-serialization-derive/src/deserialize_enum.rs
  • packages/rs-platform-serialization-derive/src/deserialize_struct.rs
  • packages/rs-platform-serialization-derive/src/lib.rs
  • packages/rs-platform-value/src/lib.rs
  • packages/rs-platform-value/src/types/binary_data.rs
  • packages/rs-platform-value/src/types/bytes_20.rs
  • packages/rs-platform-value/src/types/bytes_32.rs
  • packages/rs-platform-value/src/types/bytes_36.rs
  • packages/rs-platform-value/src/types/identifier.rs
  • packages/rs-platform-value/tests/untrusted_decode.rs
  • packages/rs-platform-wallet-ffi/src/asset_lock/sync.rs
  • packages/rs-platform-wallet-ffi/src/core_wallet/transaction_builder.rs
  • packages/rs-platform-wallet-ffi/src/managed_identity.rs
  • packages/rs-platform-wallet-ffi/src/parse_state_transition.rs
  • packages/rs-platform-wallet-ffi/src/persistence.rs
  • packages/rs-platform-wallet-ffi/src/xpub_render.rs
  • packages/rs-platform-wallet/src/wallet/shielded/activity_recorder.rs
  • packages/rs-platform-wallet/src/wallet/shielded/coordinator.rs
  • packages/rs-platform-wallet/src/wallet/shielded/file_store.rs
  • packages/rs-platform-wallet/src/wallet/shielded/operations.rs
  • packages/rs-sdk-ffi/src/address/mod.rs
  • packages/rs-sdk-ffi/src/sdk.rs
  • packages/rs-sdk-ffi/src/token/burn.rs
  • packages/rs-sdk-ffi/src/token/claim.rs
  • packages/rs-sdk-ffi/src/token/config_update.rs
  • packages/rs-sdk-ffi/src/token/destroy_frozen_funds.rs
  • packages/rs-sdk-ffi/src/token/emergency_action.rs
  • packages/rs-sdk-ffi/src/token/freeze.rs
  • packages/rs-sdk-ffi/src/token/mint.rs
  • packages/rs-sdk-ffi/src/token/purchase.rs
  • packages/rs-sdk-ffi/src/token/set_price.rs
  • packages/rs-sdk-ffi/src/token/transfer.rs
  • packages/rs-sdk-ffi/src/token/unfreeze.rs
  • packages/rs-sdk/src/error.rs
  • packages/rs-sdk/src/mock/requests.rs
  • packages/rs-sdk/src/platform/address_sync/mod.rs
  • packages/rs-sdk/src/sdk.rs
  • packages/strategy-tests/src/lib.rs
  • packages/strategy-tests/src/operations.rs
  • packages/wasm-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs
  • packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs
  • packages/wasm-dpp/src/errors/consensus/deserialize.rs
  • packages/wasm-dpp/src/identity/identity.rs
  • packages/wasm-dpp/src/identity/identity_public_key/mod.rs
  • packages/wasm-dpp/src/identity/mod.rs
  • packages/wasm-dpp/src/utils.rs
  • packages/wasm-dpp2/src/asset_lock_proof/chain.rs
  • packages/wasm-dpp2/src/asset_lock_proof/proof.rs
  • packages/wasm-dpp2/src/consensus_error.rs
  • packages/wasm-dpp2/src/data_contract/model.rs
  • packages/wasm-dpp2/src/data_contract/transitions/create.rs
  • packages/wasm-dpp2/src/data_contract/transitions/update.rs
  • packages/wasm-dpp2/src/identity/model.rs
  • packages/wasm-dpp2/src/identity/public_key.rs
  • packages/wasm-dpp2/src/identity/transitions/create_transition.rs
  • packages/wasm-dpp2/src/identity/transitions/credit_withdrawal_transition.rs
  • packages/wasm-dpp2/src/identity/transitions/identity_credit_transfer_transition.rs
  • packages/wasm-dpp2/src/identity/transitions/masternode_vote_transition.rs
  • packages/wasm-dpp2/src/identity/transitions/top_up_transition.rs
  • packages/wasm-dpp2/src/identity/transitions/update_transition.rs
  • packages/wasm-dpp2/src/platform_address/transitions/address_credit_withdrawal_transition.rs
  • packages/wasm-dpp2/src/platform_address/transitions/address_funding_from_asset_lock_transition.rs
  • packages/wasm-dpp2/src/platform_address/transitions/address_funds_transfer_transition.rs
  • packages/wasm-dpp2/src/platform_address/transitions/identity_create_from_addresses_transition.rs
  • packages/wasm-dpp2/src/platform_address/transitions/identity_credit_transfer_to_addresses_transition.rs
  • packages/wasm-dpp2/src/platform_address/transitions/identity_top_up_from_addresses_transition.rs
  • packages/wasm-dpp2/src/shielded/identity_create_from_shielded_pool_transition.rs
  • packages/wasm-dpp2/src/shielded/identity_top_up_from_shielded_pool_transition.rs
  • packages/wasm-dpp2/src/shielded/shield_from_asset_lock_transition.rs
  • packages/wasm-dpp2/src/shielded/shield_from_identity_transition.rs
  • packages/wasm-dpp2/src/shielded/shield_transition.rs
  • packages/wasm-dpp2/src/shielded/shielded_transfer_transition.rs
  • packages/wasm-dpp2/src/shielded/shielded_withdrawal_transition.rs
  • packages/wasm-dpp2/src/shielded/unshield_transition.rs
  • packages/wasm-dpp2/src/state_transitions/base/state_transition.rs
  • packages/wasm-dpp2/src/state_transitions/batch/batch_transition.rs
  • packages/wasm-drive-verify/src/document/verify_proof.rs
  • packages/wasm-drive-verify/src/document/verify_proof_keep_serialized.rs
  • packages/wasm-drive-verify/src/document/verify_start_at_document_in_proof.rs
  • packages/wasm-drive-verify/src/voting/verify_identity_votes_given_proof.rs
  • packages/wasm-drive-verify/src/voting/verify_masternode_vote.rs
  • packages/wasm-drive-verify/src/voting/verify_vote_poll_vote_state_proof.rs
  • packages/wasm-drive-verify/src/voting/verify_vote_poll_votes_proof.rs
  • packages/wasm-drive-verify/src/voting/verify_vote_polls_end_date_query.rs
  • packages/wasm-sdk/src/queries/identity.rs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Sep 8, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 79.48207% with 103 lines in your changes missing coverage. Please review.
✅ Project coverage is 83.49%. Comparing base (91b06f2) to head (175714d).
⚠️ Report is 1 commits behind head on v4.2-dev.

Files with missing lines Patch % Lines
...ontract/associated_token/token_distribution_key.rs 0.00% 7 Missing ⚠️
...act/associated_token/token_configuration/v0/mod.rs 0.00% 5 Missing ⚠️
...n_perpetual_distribution/distribution_recipient.rs 0.00% 5 Missing ⚠️
...pp/src/data_contract/document_type/property/mod.rs 0.00% 5 Missing ⚠️
...ckages/rs-dpp/src/data_contract/errors/contract.rs 0.00% 5 Missing ⚠️
...-dpp/src/data_contract/errors/json_schema_error.rs 0.00% 5 Missing ⚠️
...associated_token/token_marketplace_rules/v0/mod.rs 0.00% 4 Missing ⚠️
packages/rs-dpp/src/block/block_info/mod.rs 0.00% 3 Missing ⚠️
...ciated_token/token_configuration_convention/mod.rs 0.00% 3 Missing ⚠️
...ted_token/token_configuration_convention/v0/mod.rs 0.00% 3 Missing ⚠️
... and 42 more
Additional details and impacted files
@@             Coverage Diff              @@
##           v4.2-dev    #4625      +/-   ##
============================================
+ Coverage     81.72%   83.49%   +1.76%     
============================================
  Files          2827     2828       +1     
  Lines        390006   387629    -2377     
============================================
+ Hits         318730   323646    +4916     
+ Misses        71276    63983    -7293     
Components Coverage Δ
dpp 83.89% <79.48%> (+0.13%) ⬆️
drive 84.46% <ø> (+2.59%) ⬆️
drive-abci 86.41% <ø> (+2.19%) ⬆️
sdk ∅ <ø> (∅)
dapi-client ∅ <ø> (∅)
platform-version ∅ <ø> (∅)
platform-value 70.49% <ø> (-0.43%) ⬇️
platform-wallet ∅ <ø> (∅)
drive-proof-verifier 39.90% <ø> (+6.00%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@thepastaclaw

thepastaclaw commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

🕓 Queued for automated review — 2nd in line, estimated start in ~20 min (commit 175714d)
Estimated review time once started: ~40 min (two-phase automated review; median of recent runs).

  • Request priority review — tick this box and the review moves to the front of the queue.

QuantumExplorer and others added 9 commits September 8, 2026 23:58
… items

Clippy's items_after_test_module lint (denied under -D warnings in CI)
rejects the test module that sat between two exported FFI functions.
Move it to the end of the file; the tests are unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
librocksdb-sys 0.19.0+11.8.1 (pulled in by rocksdb 0.25) targets the
RocksDB 11 C API, which dropped the deprecated in_range callback from
rocksdb_slicetransform_create. The Docker image and the librocksdb
GitHub action still built RocksDB 10.4.2 and 9.9.3, so bindgen produced
the six-argument signature and the rocksdb crate failed to compile
against it. Build 11.8.1 in both places to match the vendored version.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
GroveDB #948 and rust-dashcore #1005 are merged. Point at the merge
commits on grovedb develop (985ece65) and rust-dashcore dev (057e79cd)
instead of the pull-request heads. The rust-dashcore tree is identical;
the grovedb merge only adds the #947 release workflow change on top of
the previously pinned tree.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… it in derives

Every derive that spelled bincode::DecodeUntrusted now names DecodeUntrusted
and imports it beside Decode and Encode, the way the other bincode derives
are written. The two files that had no bincode import at all (credit
operations and the compacted address balance proof) import Encode and
Decode the same way instead of path-qualifying them. The Txid adapter in
serialization/untrusted.rs keeps its fully qualified call: that module has
no imports by design.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ng untrusted decoding

CI diffs every @immutable and @append_only block against the base branch
and rejects any change to the former and any deleted line in the latter.
Adding DecodeUntrusted to those derive lists reflowed them, which read as
a change or a deletion.

BlockInfo is tagged immutable, so its derive list is restored verbatim and
DecodeUntrusted is implemented by hand outside the block, reading the
fields in declaration order like the derived Decode; a test pins the two
decoders to each other. The four append-only enums keep their derive
lists and carry the new derive as a separate attribute; a comment between
the two keeps rustfmt from merging them.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
GroveDB now refuses a V1 layer proof that is read in the other op family
(grovedb #863): a layer proof is emitted entirely in the family of the
direction its query walks. When a document query carries a startAt or
startAfter cursor, the prover merges the one-key cursor lookup into the
page proof, and since grovedb's merge needs every input to walk the same
way, the cursor layer is emitted in the page's orderBy direction. The
verifier rebuilt that lookup as a fresh ascending single-key query, so
every proved descending page with a cursor failed with InvalidProof.

Read the cursor layer in the page's direction when it is verified as a
subset of the page proof. The direction comes from the same query
builder the prover uses and never depends on the cursor document; a
single key decodes identically either way.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Keep the workspace bincode alias and the GroveDB pin from this branch;
take the crates.io versioned-feature-core from #4631.
cargo fmt --check fails on v4.2-dev since #4218 landed this test unformatted.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

@QuantumExplorer QuantumExplorer left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed commit 462faae and found one P1 regression, detailed inline. Before posting, I checked the new head, 5dd5d62: it aligns the cursor verification query with the page's direction and appears to address the finding. I have not rerun the four failing pagination tests against that fix, so this is a review comment rather than a request for changes on the new head.

Validation on the originally reviewed commit: 1,708 local tests passed across platform-value, platform-serialization, and the DPP untrusted-decoding regression suite. FFI inspection found no additional actionable issue; the FFI tests could not run because a dependency build attempted a download that failed. No live network upgrade or browser/device execution was performed.

Comment thread packages/rs-drive/Cargo.toml Outdated
QuantumExplorer and others added 8 commits September 9, 2026 05:18
…der and cursor

The proved contestant-votes helper verified every proof with a fixed
ascending, unlimited query regardless of the request it had just sent.
GroveDB now refuses a layer proof read in the other op family, so the
descending request failed with InvalidProof. Mirror the request's order,
count and cursor into the verifier query, as the SDK's proof verifier
does.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The @immutable and @append_only check text-diffs a tagged block against
the base branch, and the derive attribute sits inside that block, so
adding a derive (which rustfmt reflows onto separate lines) read as a
change to the structure. A derive list cannot change how the existing
fields or variants serialize. Strip #[derive(...)] attributes, single-
or multi-line, before diffing; fields, variants and the attributes that
do shape the encoding (serde, repr, platform_serialize) stay compared
verbatim.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
With the immutable structure check ignoring derive lists, BlockInfo and
the four append-only enums derive DecodeUntrusted like every other type.
This replaces the hand-written BlockInfo decoder and the separate derive
attributes that only existed to keep those blocks byte-identical.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…de 2.1.0

Advance GroveDB to develop 985ece65 (6.0.0) and rust-dashcore to dev
057e79cd, use rocksdb 0.25.0 from crates.io instead of the rust-rocksdb
fork, and make the workspace bincode dependency an alias for the published
grovedb-bincode 2.1.0 so GroveDB, rust-dashcore and Platform share one
set of bincode traits without a Cargo patch.

Adapt to the GroveDB API changes: batch options in Drive's grove
operations, element verification aligned with the prover's right-to-left
traversal, which GroveDB now checks strictly, and the new backward
reference element variants rendered by the FFI and wasm SDK path element
queries.

BREAKING CHANGE: Rust consumers serializing Platform or Core types must
use the published grovedb-bincode 2.1.0 crate; bincode trait identities
now come from it. Wire encodings and the C ABI are unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
librocksdb-sys 0.19.0+11.8.1 (pulled in by rocksdb 0.25) targets the
RocksDB 11 C API, which dropped the deprecated in_range callback from
rocksdb_slicetransform_create. The Docker image and the librocksdb
GitHub action still built RocksDB 10.4.2 and 9.9.3, so bindgen produced
the six-argument signature and the rocksdb crate failed to compile
against it. Build 11.8.1 in both places to match the vendored version.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
GroveDB now refuses a V1 layer proof that is read in the other op family
(grovedb #863): a layer proof is emitted entirely in the family of the
direction its query walks. When a document query carries a startAt or
startAfter cursor, the prover merges the one-key cursor lookup into the
page proof, and since grovedb's merge needs every input to walk the same
way, the cursor layer is emitted in the page's orderBy direction. The
verifier rebuilt that lookup as a fresh ascending single-key query, so
every proved descending page with a cursor failed with InvalidProof.

Read the cursor layer in the page's direction when it is verified as a
subset of the page proof. The direction comes from the same query
builder the prover uses and never depends on the cursor document; a
single key decodes identically either way.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…der and cursor

The proved contestant-votes helper verified every proof with a fixed
ascending, unlimited query regardless of the request it had just sent.
GroveDB now refuses a layer proof read in the other op family, so the
descending request failed with InvalidProof. Mirror the request's order,
count and cursor into the verifier query, as the SDK's proof verifier
does.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
cargo fmt --check fails on v4.2-dev since #4218 landed this test unformatted.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
QuantumExplorer and others added 8 commits September 13, 2026 10:56
… calls

The new history-keeping cursor round trip calls
`execute_with_proof_only_get_elements`, which exists only with both the
`server` and `verify` features, so the test now carries the same gate as
its sibling in query_tests.rs (review suggestion).

Also declare the `serde` feature on the two crates that call
`bincode::serde` directly (wasm-dpp2, rs-platform-wallet-storage) instead
of relying on `dpp` enabling it for them (review suggestion).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Picks up the fix that keeps each partial-batch DeleteTree removal's cleanup
behavior on the observed deletion instead of a path-keyed map. No Drive
change; rs-drive and the fee baselines are unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Test-only change on the GroveDB side (coverage for the twin ops); no Drive
change and the fee baselines are unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
GroveDB #953 (per-operation backward-reference declarations through the
DontCheckForBackwardsReferences twins) is merged; the pins move from the
PR head to the develop merge commit. The Rust tree is identical to the
previous pin; only CI workflow files differ.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Base automatically changed from build/grovedb-6-0-0-bincode-2-1-0 to v4.2-dev September 13, 2026 10:05

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Final validation — Phase 1 + Phase 2

The PR correctly adopts untrusted decoding across the principal external-input paths and adds effective allocation-sensitive wallet blob coverage. Two issues remain: the immutable-structure CI guard removes every derive attribute instead of only the new untrusted-decoder derive, and two host-supplied xpub decoders still use ordinary unbounded bincode decoding. Both are in scope for the PR’s stated external-input hardening and should be addressed.

🟡 2 suggestion(s)

2 finding(s) not shown inline (GitHub refused the PR diff as too large)

🟡 Suggestion: Do not remove all derive attributes from immutable-structure comparisons
.github/workflows/tests-rs-workspace.yml:287-296

strip_derives() removes every #[derive(...)] attribute before comparing @immutable and @append_only blocks. Although adding DecodeUntrusted itself is wire-layout neutral, blanket removal also hides changes to other derives, including serialization-related derives such as Encode, Decode, Serialize, Deserialize, or project-specific encoding derives. A future derive-only change could therefore alter serialization behavior or remove a required serialization implementation without the immutable-structure guard detecting it. Normalize only the DecodeUntrusted addition, including its multiline form, while retaining the other derives in the comparison.

source: muse-spark-1.3-contributor (phase1-reviewer: general, ffi-engineer, rust-quality); gpt-6-astra (phase2-reviewer: ffi-engineer, rust-quality, security-auditor)

🟡 Suggestion: Bound the remaining ordinary decoding of host-supplied xpubs
packages/rs-platform-wallet-ffi/src/persistence.rs:5039-5041

The ProviderPlatformKeys EdDSA path and the fallback ExtendedPubKey path still call ordinary bincode::decode_from_slice(..., config::standard()) on xpub_bytes received through the host persistence boundary. The PR’s stated policy is to use untrusted decoding or an explicit budget for foreign type graphs that cannot implement it. Even if the current key structures are fixed-width, leaving these decoders unbounded makes the boundary depend on that implementation detail and is inconsistent with the newly bounded BLS path; the ignored consumed length also permits trailing bytes. Apply the same small explicit limit used for BLS and validate that the entire input was consumed, or migrate these type graphs to DecodeUntrusted.

source: muse-spark-1.3-contributor (phase1-reviewer: general, ffi-engineer, rust-quality, security-auditor); gpt-6-astra (phase2-reviewer: security-auditor)

Review provenance

Source: reviewer 1: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 2: muse-spark-1.3-contributor (agent: phase1-reviewer, role: ffi-engineer); reviewer 3: muse-spark-1.3-contributor (agent: phase1-reviewer, role: rust-quality); reviewer 4: muse-spark-1.3-contributor (agent: phase1-reviewer, role: security-auditor); reviewer 5: gpt-6-astra (agent: phase2-reviewer, role: general); reviewer 6: gpt-6-astra (agent: phase2-reviewer, role: ffi-engineer); reviewer 7: gpt-6-astra (agent: phase2-reviewer, role: rust-quality); reviewer 8: gpt-6-astra (agent: phase2-reviewer, role: security-auditor); final verifier: gpt-6-astra (agent: astra-verifier, role: final-verifier)

  • Triage: critical by gpt-6-astra (effort low) — This is a large, cross-cutting change that directly modifies peer-facing and externally supplied bincode deserialization across DPP, proof verification, SDK/FFI/WASM inputs, wallet persistence, and consensus-relevant data structures.
  • Phase 1 reviewers: muse-spark-1.3-contributor — general (completed, effort xhigh); agent phase1-reviewer, muse-spark-1.3-contributor — ffi-engineer (completed, effort xhigh); agent phase1-reviewer, muse-spark-1.3-contributor — rust-quality (completed, effort xhigh); agent phase1-reviewer, muse-spark-1.3-contributor — security-auditor (completed, effort xhigh); agent phase1-reviewer
  • Phase 1 model: muse-spark-1.3-contributor — not quota-gated; passed over gemini-3.8-flash-high (antigravity below 15% reserve: weekly 11% left, 5h 100% left), glm-5.3-flash (zai below 15% reserve: 5h 99% left, weekly 13% left)
  • Fresh verifier: gpt-6-astra — final-verifier; agent astra-verifier
  • Phase 2 reviewers: gpt-6-astra — general (completed, effort xhigh); agent phase2-reviewer, gpt-6-astra — ffi-engineer (completed, effort xhigh); agent phase2-reviewer, gpt-6-astra — rust-quality (completed, effort xhigh); agent phase2-reviewer, gpt-6-astra — security-auditor (completed, effort xhigh); agent phase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.

In `.github/workflows/tests-rs-workspace.yml`:
- [SUGGESTION] .github/workflows/tests-rs-workspace.yml:287-296: Do not remove all derive attributes from immutable-structure comparisons
  `strip_derives()` removes every `#[derive(...)]` attribute before comparing `@immutable` and `@append_only` blocks. Although adding `DecodeUntrusted` itself is wire-layout neutral, blanket removal also hides changes to other derives, including serialization-related derives such as `Encode`, `Decode`, `Serialize`, `Deserialize`, or project-specific encoding derives. A future derive-only change could therefore alter serialization behavior or remove a required serialization implementation without the immutable-structure guard detecting it. Normalize only the `DecodeUntrusted` addition, including its multiline form, while retaining the other derives in the comparison.

In `packages/rs-platform-wallet-ffi/src/persistence.rs`:
- [SUGGESTION] packages/rs-platform-wallet-ffi/src/persistence.rs:5039-5041: Bound the remaining ordinary decoding of host-supplied xpubs
  The `ProviderPlatformKeys` EdDSA path and the fallback `ExtendedPubKey` path still call ordinary `bincode::decode_from_slice(..., config::standard())` on `xpub_bytes` received through the host persistence boundary. The PR’s stated policy is to use untrusted decoding or an explicit budget for foreign type graphs that cannot implement it. Even if the current key structures are fixed-width, leaving these decoders unbounded makes the boundary depend on that implementation detail and is inconsistent with the newly bounded BLS path; the ignored consumed length also permits trailing bytes. Apply the same small explicit limit used for BLS and validate that the entire input was consumed, or migrate these type graphs to `DecodeUntrusted`.

QuantumExplorer and others added 4 commits September 13, 2026 21:06
…rom v4.2-dev

ShieldFromIdentity (#4708) and IdentityTopUpFromShieldedPool (#4711)
landed on v4.2-dev after this branch adopted untrusted decoding, so they
derived Decode only and no longer satisfied the StateTransition graph's
DecodeUntrusted bound.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…f dropping them

Stripping every #[derive(...)] attribute let a swap of a serialization
derive (Serialize_repr for Serialize, or dropping Encode) through the
@immutable/@append_only comparison. Rewrite each derive attribute as one
canonical line with only DecodeUntrusted removed, so a rustfmt reflow of
the list still reads as unchanged while every other derive is compared.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The upstream key-wallet xpub decoders do not implement DecodeUntrusted, so
the ECDSA and EdDSA restoration branches and platform_wallet_account_xpub_to_string
now run under the same explicit ACCOUNT_XPUB_DECODE_LIMIT_BYTES budget the
BLS branch already had, and the stale RUSTSEC-2025-0141 note goes away now
that the workspace is on grovedb-bincode. A regression test pins that a
BLS xpub whose public-key length prefix claims a gigabyte fails on the
budget rather than on an allocation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@QuantumExplorer

Copy link
Copy Markdown
Member Author

Rebased onto v4.2-dev now that #4635 is merged (merge commit 13ed7db; the only textual conflict was the pending_tree_already_queued refactor from #4581, resolved to the base's helper, which already matches both DeleteTree variants). The shielded transitions from #4708/#4711 now derive DecodeUntrusted (07143a4) so the StateTransition graph compiles again.

Both remaining automated-review suggestions are addressed:

  • Immutable-structure guard (d0ba7e1): strip_derives is replaced by normalize_derives, which rewrites each #[derive(...)] attribute, single- or multi-line, as one canonical line with only DecodeUntrusted removed. A rustfmt reflow of the list still reads as unchanged, while every other derive is compared. Verified with the workflow's own step body: it passes this PR's five tagged types and fails when Encode is dropped from BlockInfo's derive list (the old filter passed that mutation).
  • Host-supplied xpub decodes (8f85f71): the ECDSA and EdDSA restoration branches and platform_wallet_account_xpub_to_string now run under the same explicit budget as the BLS branch, shared as ACCOUNT_XPUB_DECODE_LIMIT_BYTES (1 KiB; a complete xpub of any kind is under 200 bytes). ExtendedPubKey and ExtendedEd25519PubKey are fixed-width in the pinned key-wallet, so the budget removes the dependence on that detail rather than fixing an allocation; the BLS graph is the one with a length-prefixed field, and a new test pins that a public-key prefix claiming 1 GiB fails with LimitExceeded. Trailing bytes stay ignored, the same deferral the flush boundary records; the stale RUSTSEC-2025-0141 note is gone now that the workspace is on grovedb-bincode.

🤖 Addressed by Claude Code

QuantumExplorer and others added 3 commits September 13, 2026 23:08
…sted derives

Disk loads and remote input now choose their decoder explicitly. The single
PlatformDeserialize derive becomes PlatformDeserializeTrusted, which runs
bincode's ordinary decoder and carries the PlatformVersionedDecode body, and
PlatformDeserializeUntrusted, which runs the untrusted decoder and requires
DecodeUntrusted on the type graph. Each implements its own trait family with
suffixed methods (deserialize_from_bytes_trusted / _untrusted,
versioned_deserialize_trusted / _untrusted, ...), so no plain name survives
and every call site reads its trust level.

Call sites: Drive fetches from GroveDB, the vote-poll query key decoders,
drive-abci state and checkpoint loads, the wallet's own persisted state
transitions and the strategy-tests formats decode trusted; proof
verification, check_tx and state-transition processing, request cursors,
DAPI error mapping, the SDKs, WASM, FFI parse entry points and host-supplied
bytes decode untrusted. Types derive both unless only ever decoded one way;
the proof-verifier mock formats derive Trusted alone, replacing the
`trusted` attribute flag. The hand-written DataContract and
CreatedDataContract impls gain trusted twins, and the wire-only helpers are
named deserialize_from_bytes_untrusted_in_version and
deserialize_many_untrusted.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…inary bincode

App-private storage the wallet wrote itself is a disk load, not remote
input: SQLite blobs, the persisted identity-key and asset-lock rows, the
changeset serde adapter and the host-persisted asset-lock proof go back to
ordinary decoding under their existing size bounds, and the untrusted
BlobDecode opt-in plus its allocation test go away. Bytes arriving live from
Core through the FFI keep the untrusted path.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…rusted-bincode

# Conflicts:
#	packages/rs-dpp/src/state_transition/serialization.rs
@QuantumExplorer QuantumExplorer changed the title fix(platform)!: decode external input with untrusted bincode decoders fix(platform)!: decode remote input with untrusted bincode and disk loads with trusted decoders Sep 13, 2026
@QuantumExplorer

Copy link
Copy Markdown
Member Author

Reworked per discussion: disk loads decode trusted, remote input decodes untrusted, and the choice is explicit at every call site.

  • 0f32bf0b96 splits PlatformDeserialize into PlatformDeserializeTrusted / PlatformDeserializeUntrusted with their own trait families and suffixed methods (no plain deserialize_from_bytes survives). Drive's GroveDB fetches, drive-abci state/checkpoint loads, the wallet's own persisted state transitions and the strategy-tests formats are trusted; proof verification, check_tx/state-transition processing, query cursors, DAPI, SDK, WASM and FFI parse entry points are untrusted. Trusted is the only derive that emits the PlatformVersionedDecode body, so a type can derive both; the proof-verifier mocks derive Trusted alone, which replaces the trusted attribute flag.
  • c2b51875a4 returns the wallet's app-private storage (SQLite blobs, persisted key/asset-lock rows, changeset adapter, host-persisted proofs) to ordinary decoding under the existing size bounds, dropping the BlobDecode opt-in and its allocation test; proofs arriving live from Core keep the untrusted path.
  • 9a8ca68ee4 merges v4.2-dev at dev.9 (test(dpp): run deep value serialization tests on a large stack #4725's large-stack test wrapper onto the renamed helper).

Measured cost that motivated the split (release, pinned grovedb-bincode 2.1.0): untrusted decoding is 6% to 25% slower than ordinary on collection-heavy structures, so block execution's stored-object decodes stay trusted. Local: workspace check, CI-flag clippy and fmt clean; dpp 226 + 9 untrusted suites, Drive verify 257, drive-abci 82, wallet-ffi 366, wallet-storage 983, wallet shielded 180 passed.

🤖 Addressed by Claude Code

QuantumExplorer and others added 4 commits September 13, 2026 23:31
The SpecificKeys tests landed on v4.2-dev against the old
PlatformDeserializable name; response key bytes decode untrusted.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…guard

The tagged types now derive PlatformDeserializeTrusted and
PlatformDeserializeUntrusted where the base derives PlatformDeserialize. A
derive that only generates a decoder cannot change the wire layout, so the
normalizer drops that family alongside DecodeUntrusted while every other
derive stays compared.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Pins that the trusted entry points agree with the untrusted ones on
well-formed bytes, consumed length included, and reject garbage and empty
input with PlatformDeserializationError.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@QuantumExplorer
QuantumExplorer merged commit 2c0b811 into v4.2-dev Sep 13, 2026
42 of 43 checks passed
@QuantumExplorer
QuantumExplorer deleted the codex/grovedb-untrusted-bincode branch September 13, 2026 18:10
QuantumExplorer added a commit that referenced this pull request Sep 15, 2026
Resolves conflicts with the trusted/untrusted decoder split (#4625) and the
new shielded identity transitions (#4708, #4711):

- scoped consensus errors and the AuthenticationScope family derive
  DecodeUntrusted plus PlatformDeserializeTrusted/Untrusted
- AuthenticationScope::from_bytes decodes with the untrusted bincode decoder
- Identity keeps the 256 MiB scoped-key decode budget on the new derives
- tests use the *_untrusted decoder entry points

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants