Skip to main content
Technical proposal SIMD-0444 Review

Relax program data account check in migration

  1. Idea
  2. Draft
  3. Review
  4. Accept
  5. Implement
  6. Active

Decision brief

Why this proposal matters

This proposal relaxes the requirements for runtime-level migrations of programs (such as builtins) to permit system-owned programdata accounts to hold lamports.

Source-backed reading aid · source language: EN

Proposal at a glance

What changes

  • Improve the check for target program data accounts to relax the requirement that they must not exist. If an account with the derived address for the target program data account already exists, holds lamports, and is owned by the system program, the migration proceeds.
  • Important Note: If the system-owned programdata account contains lamports, those lamports must be burned during any runtime-level program migrations by updating the Bank's capitalization.
  • This proposal relaxes the requirements for runtime-level migrations of programs (such as builtins) to permit system-owned programdata accounts to hold lamports.

Stakeholder map

Who is affected

Builders & client teams Medium impact

This change prevents the migration from failing when the target program data account is pre-funded.

Action requirement unknown
Validators & operators Impact unknown

No proposal-specific evidence was found for this group.

Action requirement unknown
Users & stakers Impact unknown

No proposal-specific evidence was found for this group.

Action requirement unknown
Governance & ecosystem Medium impact

This proposal itself does not introduce any breaking changes.

Action requirement unknown

Exact source revision

Full proposal document

Source-language document. Technical identifiers and evidence remain unchanged. 0616093b2952

Summary

This proposal relaxes the requirements for runtime-level migrations of programs (such as builtins) to permit system-owned programdata accounts to hold lamports.

Motivation

Currently, runtime-level program migrations require that the target program data account must not already exist. This means the account must have zero lamports. If the program data account is pre-funded (i.e., has a lamports balance greater than 0), the migration will not proceed.

Alternatives Considered

Taking no action will result in a situation in which pre-funding a target program data account prevents the migration from being completed.

New Terminology

N/A

Detailed Design

Improve the check for target program data accounts to relax the requirement that they must not exist. If an account with the derived address for the target program data account already exists, holds lamports, and is owned by the system program, the migration proceeds.

Current logic (pseudo-code):

// The program data account should not exist and have zero lamports.
if bank.get_account(&program_data_address).is_some() {
    // --> return error
}

Logic after this SIMD is enabled:

// The program data account should not exist, but a system account with funded
// lamports is acceptable.
if let Some(account) = bank.get_account(&program_data_address) {
    if account.owner() != &SYSTEM_PROGRAM_ID {
        // --> return error
    }
}

Note that an ownership check is sufficient, since allocating a Loader V3 programdata PDA under System is not feasible.

Important Note: If the system-owned programdata account contains lamports, those lamports must be burned during any runtime-level program migrations by updating the Bank's capitalization.

Impact

This change prevents the migration from failing when the target program data account is pre-funded.

Security Considerations

N/A

Backwards Compatibility

This proposal itself does not introduce any breaking changes.

Evidence graph

Related proposals and rollout

One or more sources are unavailable.

Upstream review record

Upstream discussion & review

One or more sources are unavailable.

simd.watch community discussion · SIMD-0444

Powered by Giscus · Sign in with GitHub to comment

Community comments load when this section approaches the viewport.

Provenance

Evidence & technical details

Rollout or chain data, source revisions, freshness and integrity.
3

SIMD

Deployment Status

Document lifecycleReview
CategoryCore protocol
Devnetactive Epoch 1043
Testnetactive Epoch 928
Mainnet-Betaactive Epoch 956
rexav5eNTUSNT1K2N7cfRjnthwhcP5BC25v2tA4rW4h

Exact source revision

Sources & integrity

  • Proposal document pinned_commit_blob
    0616093b2952ed6de52c4a27d66aadd11d48d4f9
  • simd-document document · stale · Sep 11, 2026
    0616093b2952ed6de52c4a27d66aadd11d48d4f9

One or more sources are unavailable.

One or more sources are unavailable.