# MagicBlock：commit后账户为何仍锁定，怎样核解除委托与费用

整理：链小知（AI 辅助）
资料核对日期：2026-10-14
引用地址：https://lianxiaozhi.com/tools/guides/magicblock-delegation-commit-owner-and-fee-check
难度：进阶
核验方式：官方文档整理，未执行真实账户操作

按已有开发和回执材料，核选定PDA委托、ER提交、Magic Action认证、提交限额与押金退款，区分状态同步和基础层owner恢复。

## 使用工具
- [MagicBlock（Ephemeral Rollups）](https://lianxiaozhi.com/tools/magicblock) · [官方入口](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/how-to-guide/quickstart)

## 前置条件
- 准备已有项目的依赖版本、网络/程序/PDA、validator、委托和提交回执、付款方与rent_payer记录。
- 准备Action账户及错误、提交序号、押金/实时收费和基础层最终材料；缺项保留未知，不用示例数字替代实际配置。

## 1. 固定程序、账户、环境与版本

从已有项目和回执材料记录Solana网络、程序ID、目标PDA、原owner程序和所选ER validator。不要把用户钱包、程序owner、委托费用付款方与validator当同一个主体，也不要把Mainnet、Devnet和Localnet地址混用。

当前Quickstart的示例使用MagicIntentBundleBuilder，并将commit_accounts及commit_and_undelegate_accounts标deprecated；记录实际依赖版本后再比对方法，不直接复制旧帮助函数。v1.0.0仍有experimental分支，发布日不是本人安装版本的证明。若是Private ER，还要单列TEE与显式访问规则，默认账户仍公开。

核对结果：网络、程序/PDA、原owner、validator与实际版本有对应材料；隐私与普通执行分支分开。
依据：[MagicBlock：当前委托与Intent Bundle方法（选读）](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/how-to-guide/quickstart.md)
依据：[MagicBlock：Delegate、Commit与Undelegate生命周期](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/introduction/ephemeral-rollup.md)
依据：[MagicBlock：v1.0.0发布说明及experimental范围](https://github.com/magicblock-labs/magicblock-validator/releases/tag/v1.0.0)
依据：[MagicBlock：Private ER的默认公开、授权与硬件信任](https://docs.magicblock.gg/pages/private-ephemeral-rollups-pers/introduction/onchain-privacy.md)

## 2. 核委托的是选定状态账户

文档中Delegate发生在基础层，将所选PDA的owner改为Delegation Program（DELeGGvXpWV2fqJUhqcF5ZSYMS4JTLjteaAMARRSaeSh），同时指定validator及相关配置。核已有记录中的账户集合与配置，不将一次委托理解成整个钱包或全部程序迁移。

首笔ER交易会从基础层克隆已委托账户。程序还需具备解除委托回调处理器；Quickstart说明#[ephemeral]会注入对应回调。没有委托成功、正确validator或回调材料时，后续只标待确认，不把普通Solana账户直接视为可在任意ER写入。

核对结果：目标账户、基础层委托和ER初始状态相互对应，必要回调或validator缺项已标明。
依据：[MagicBlock：Delegate、Commit与Undelegate生命周期](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/introduction/ephemeral-rollup.md)
依据：[MagicBlock：当前委托与Intent Bundle方法（选读）](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/how-to-guide/quickstart.md)

## 3. 区分ER执行、安排commit与基础层最终状态

已有记录若使用MagicIntentBundleBuilder，分别核.commit(&[...])与.commit_and_undelegate(&[...])的目标账户集合；前者同步状态，后者还请求恢复基础层owner。示例中build_and_invoke会发起调用，不能当成纯查询。

Quickstart的increment_and_commit例子先对修改过的Anchor账户执行exit，再交给CPI读取；不能笼统假设所有内存修改都会被提交。普通Commit完成finalization后PDA仍锁在基础层，可继续在ER执行；请求已安排、ER状态变化与基础层最终状态须有各自材料。

核对结果：执行环境、提交账户集合、状态序列化和基础层最终结果分列，commit未误记为解除委托。
依据：[MagicBlock：当前委托与Intent Bundle方法（选读）](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/how-to-guide/quickstart.md)
依据：[MagicBlock：Delegate、Commit与Undelegate生命周期](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/introduction/ephemeral-rollup.md)

## 4. 有Magic Action时另核认证与失败范围

Magic Actions使用刚提交的状态在Solana基础层执行。若handler不执行，先对照已有材料中的instruction discriminator、请求compute_units、ShortAccountMeta账户列表及is_writable；不要把任意失败都归为ER网络问题。

#[action]让处理器可被提交后分发，并不阻止直接调用。当前故障文档要求escrow为signer且地址匹配派生；处理器使用程序自有PDA权限时，还要将escrow_auth绑定到该PDA。用户付款的路径没有固定程序PDA可硬套，仍需签名与派生检查。Action失败会回退同一commit交易，不把这种原子性扩大到整个应用的所有历史ER操作。

核对结果：Action账户、计算预算、escrow认证及适用权限分支已核；失败未冒充基础层提交成功。
依据：[MagicBlock：提交后执行的Magic Actions](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/magic-actions/overview.md)
依据：[MagicBlock：Action错误、调用方认证与原子性](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/magic-actions/troubleshooting.md)
依据：[MagicBlock：2026-10-06 Validator 1.0官方说明](https://magicblock.xyz/blog/validator-v1)

## 5. 按提交次数定位失败与两套收费

不带delegated fee payer的普通commit只接受前10次，第11次为0xA0000000；最终commit-and-undelegate仍可运行以解除委托，但不恢复更多普通commit额度。带付款方时需该validator对应的magic_fee_vault：无或错误为MissingAccount，不满足writable/delegated为IllegalOwner；付款方不足全额为InsufficientFunds，不作部分扣款。

费用页的两套账要同时保留：解除委托结算3,000,000加首个commit以后每次1,000,000 lamports，最多扣Solana押金；带付款方的第26次起，另即时收每个提交账户100,000 lamports。两个账户各到第26次，实时部分为200,000，不能当两套账互相替代或前25次全免费。数值是该页标注8月20日的说明，当前配置缺材料就保留未知。

Base Action另按请求CU计算，callback另5,000 lamports；充值helper的300,000设置费、转入本金、Solana网络费及可退款存储资金也分别记录。付款方可以不同于提交账户；使用共用付款方时不能由委托权限推定无限支出权限。

核对结果：提交序号、具体错误、押金结算与实时付款分开，费用数值的文档时点及当前未知项明确。
依据：[MagicBlock：押金、提交限额、实时费用与退款](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/introduction/fees-and-commit-economics.md)

## 6. 以owner恢复和退款对象完成核对

解除委托会提交状态并触发finalization；核已有基础层记录中目标PDA的owner已从Delegation Program回到原程序，且状态对应。只有ER中调用undelegate或看见commit请求，还不足以证明账户已在基础层解锁。

费用文档写未用押金退给当初记录的rent_payer；押金少于计算费用时最多拿走押金，不另生债务或仅因此使解除委托失败。将押金、扣款、退款对象、实际退款和网络费分列，别把validator结算时的lamport对账都算固定服务费。缺owner恢复、基础层结果或退款材料时，对应层保留未确认。

核对结果：基础层账户owner及状态已恢复或明确待确认；费用和rent_payer实收有独立证据。
依据：[MagicBlock：Delegate、Commit与Undelegate生命周期](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/introduction/ephemeral-rollup.md)
依据：[MagicBlock：当前委托与Intent Bundle方法（选读）](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/how-to-guide/quickstart.md)
依据：[MagicBlock：押金、提交限额、实时费用与退款](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/introduction/fees-and-commit-economics.md)

## 常见错误
- 普通commit后账户仍可能委托，ER调用完成不代表基础层解锁。
- 实时无额外费用的commit仍可能在解除委托时扣押金，普通ER交易0费也不包括其他费用。
- 仅有#[action]、地址/owner约束或escrow的任意签名，不等于完整提交路径认证。

## 完成检查
- 已得到按委托、ER状态、基础层结果、owner和退款分列的核对记录。
- 未取得的当前配置、实际部署/权限、隐私与费用回执仍明确待确认。

## 相关知识

## 官方依据
- [MagicBlock：2026-10-06 Validator 1.0官方说明](https://magicblock.xyz/blog/validator-v1)
- [MagicBlock：v1.0.0发布说明及experimental范围](https://github.com/magicblock-labs/magicblock-validator/releases/tag/v1.0.0)
- [MagicBlock：Delegate、Commit与Undelegate生命周期](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/introduction/ephemeral-rollup.md)
- [MagicBlock：押金、提交限额、实时费用与退款](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/introduction/fees-and-commit-economics.md)
- [MagicBlock：当前委托与Intent Bundle方法（选读）](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/how-to-guide/quickstart.md)
- [MagicBlock：提交后执行的Magic Actions](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/magic-actions/overview.md)
- [MagicBlock：Action错误、调用方认证与原子性](https://docs.magicblock.gg/pages/ephemeral-rollups-ers/magic-actions/troubleshooting.md)
- [MagicBlock：Private ER的默认公开、授权与硬件信任](https://docs.magicblock.gg/pages/private-ephemeral-rollups-pers/introduction/onchain-privacy.md)
