作为一名对ZKP刚兴趣的小白,参加了OpenBuild组织的zkApp实战课程,遇到了很多问题,尤其是对Mina的一些核心概念都不了解,实践起来真的会摸不着头脑。
为了能真正提升自己的能力,而不是机械低效的Ctrl + C / Ctrl + V,先从基本概念入手,利用ChatGPT来弄懂Mina。
Mina
Mina Protocol 是一种轻量级区块链,被称为“世界上最轻的区块链”。其目标是通过极小的链上数据大小和强大的隐私保护技术解决传统区块链的扩展性和隐私问题
特点
-
固定大小的区块链
- Mina 的区块链大小始终保持约 22 KB(相当于几条推文的大小)。
- 采用 zk-SNARKs(零知识证明)的递归压缩技术,无需存储完整的区块链历史。
-
轻量化与去中心化
- 用户可以运行一个完整的 Mina 节点,硬件需求极低(如普通手机或笔记本电脑)。
- 降低了参与区块链网络的门槛,增强了去中心化。
-
zkApps(零知识应用)
- Mina 提供基于零知识证明的智能合约(zkApps),允许构建具有隐私保护功能的去中心化应用。
- zkApps 支持在不泄露数据的情况下验证交易逻辑。
-
隐私优先
- Mina 使用零知识证明保护链上交易和账户状态的隐私。
- 用户可以证明某些条件成立(如拥有资产或满足某条件),而无需暴露详细数据。
-
与 Web3 集成
- Mina 致力于成为 Web3 的轻量级入口,通过 zkApps 实现与现有区块链和互联网的无缝连接。
Mina账号模型
组成
-
Public Key(公钥)
- Mina 中的账户由公钥标识。
- 公钥是通过私钥生成的,用户通过签名交易来证明对账户的控制权。
-
Nonce
- 每当用户发送一笔交易,
nonce
值会递增,确保每笔交易的唯一性。
- 用于防止重放攻击。
-
Balance(余额)
- 账户的代币余额,单位是 Mina Token。
- 用于支付交易费用(手续费)和账户操作。
-
Account State(账户状态)
- 包含账户相关的状态信息,例如 zkApp 的存储状态(如果账户是 zkApp 合约账户)。
-
Permissions(权限)
- 定义账户的操作权限,例如更新账户状态的权限、发送交易的权限等。
- zkApp 的权限控制特别重要,因为它涉及到谁可以调用合约方法。
-
Delegate(委托人)
- Mina 使用权益证明(Proof of Stake, PoS)作为共识机制,账户可以将其权益(余额)委托给验证者(Validator)。
- 委托不需要转移资金,委托权仅影响共识机制中的投票权。
-
zkApp 信息
类型
普通账户
-
标准用户账户,用于存储 Mina Token 和发送交易。
-
典型功能:
- 接收和发送 Mina Token。
- 委托权益给验证者。
- 支付交易费用。
-
zkApp 合约账户
-
特殊账户,用于部署和运行 zkApps(Mina 的智能合约)。
-
具有额外的属性:
- 存储 zkApp 状态。
- 包含验证 zk-SNARK 的逻辑。
-
zkApp 合约账户只能通过零知识证明来改变其状态,确保链上的隐私和效率。
存储与状态管理
-
轻量级状态存储
- Mina 使用 zk-SNARK 技术压缩整个链的状态,因此链上的每个账户状态都可以通过零知识证明快速验证,而不需要存储完整历史记录。
-
状态更新
- 当账户的余额、nonce 或 zkApp 状态发生变化时,这些变化会被打包到新的区块,并通过 zk-SNARK 更新全网状态。
-
账户初始化
- 账户在 Mina 上首次出现时,需要被 "初始化"。
初始化通常通过发送交易或部署 zkApp 合约完成
。
- 未初始化的公钥不会被视为链上的账户。
相关操作
- 账户初始化
- 当某个公钥首次接收 Mina Token 或 zkApp 部署时,该账户会在链上注册。
- 账户交易
-
Mina 的每笔交易都需要:
- 签名:用私钥签名交易,证明操作权限。
- Nonce:保证交易唯一性。
- zkApp 状态更新
- zkApp 合约账户的状态只能通过零知识证明和链上的合约逻辑来修改。
- 状态更新需要验证 zk-SNARK 的有效性。
独创性
- zk-SNARK 压缩链上状态
- Mina 的区块链大小固定,账户状态由 zk-SNARK 的递归证明管理。
- 每个账户的状态更新会通过 zk-SNARK 验证并合并到全局状态。
- 轻量化账户
- 账户模型设计高度简洁,普通账户和 zkApp 合约账户都围绕 "状态压缩" 进行优化。
- 权限控制
- zkApp 合约账户允许开发者设置精细的权限规则,确保只有经过验证的交易或方法调用能够更新账户状态
优势
-
轻量级与高效性
- 不需要存储所有历史交易,只存储必要的状态信息。
- 节省了存储和验证资源。
-
强大的隐私支持
- zk-SNARK 技术保护了账户状态更新的隐私性。
- zkApp 状态更新可以在不公开输入数据的情况下完成。
-
灵活性
- 支持普通账户和 zkApp 合约账户的多样化需求。
- 提供细粒度的权限控制,适应不同场景