{"author":{"address":null,"user":"https://learnblockchain.cn/people/24556"},"content":{"body":"Mina Protocol 是一条轻量级区块链，以其固定大小的区块链和零知识证明（zk-SNARKs）为核心特点。\r\n\r\n这篇文章，将深入探讨 Mina 的账户初始化过程，让我们更好地理解和应用 Mina 网络\r\n\r\n## **账户初始化的过程**\r\n\r\n在 Mina 网络中，账户并非默认存在，而是通过特定操作（如首次接收资金或部署 zkApp）进行初始化。\r\n\r\n以下是账户初始化的详细流程。\r\n\r\n### **1. 账户初始化的条件**\r\n\r\nMina 中的账户在以下两种情况下会被初始化：\r\n\r\n1. **首次接收 Mina Token 或资金**：当一个账户地址首次接收到 Mina Token 时，会触发账户的初始化。\r\n2. **部署 zkApp**：将一个 zkApp 合约部署到账户地址。\r\n\r\n\r\n在此之前，即使账户的公钥是合法的，但它不会出现在区块链状态中，也无法参与任何链上操作。\r\n\r\n\r\n### **2. 初始化的具体流程**\r\n\r\n#### **普通账户的初始化**\r\n\r\n当一个普通账户首次接收资金时：\r\n\r\n1. **交易广播**\r\n\r\n   * 一个已初始化的账户向目标账户（未初始化账户）发送一笔交易，如 Mina Token 的转账。\r\n\r\n2. **账户状态创建**\r\n\r\n   * 区块生成节点验证目标公钥的有效性后，会为该账户分配存储空间，初始化其状态。\r\n\r\n   * 初始状态包括：\r\n\r\n     * 公钥（Public Key）\r\n     * Nonce（初始值为 0）\r\n     * 余额（根据交易内容设置）\r\n     * 默认权限（允许基本操作）\r\n\r\n3. **链上存储**\r\n\r\n   * 初始化后的账户信息会被写入链上的状态证明中，并通过 zk-SNARK 的递归证明更新。\r\n\r\n#### **zkApp 合约账户的初始化**\r\n\r\n当 zkApp 部署时：\r\n\r\n1. **创建账户地址**\r\n\r\n   * zkApp 的账户地址由开发者提供的公钥（`zkAppPublicKey`）指定。\r\n\r\n2. **zkApp 部署交易**\r\n\r\n   * 部署 zkApp 的交易将以下内容存储在链上：\r\n\r\n     * zkApp 的验证逻辑（验证密钥）\r\n     * 合约的初始状态\r\n\r\n3. **账户标记为 zkApp 合约账户**\r\n\r\n   * 系统会将该账户标记为 zkApp 类型，其状态和权限逻辑完全由合约代码控制。\r\n\r\n4. **链上存储**\r\n\r\n   * zkApp 账户的状态通过 zk-SNARK 的递归证明存储在链上。\r\n\r\n### **未初始化账户的特性**\r\n\r\n* 公钥是合法的 Mina 地址，但在链上未初始化的公钥无法接收资金，也无法参与链上交互。\r\n* 初始化操作使账户成为链上状态的一部分","title":"Mina之账号初始化流程"},"history":null,"timestamp":1733899846,"version":1}