在我们深入了解 Record 之前,我们首先要了解 Aleo 是什么,以及为什么它选择 Record 模型作为其核心数据结构。Aleo 是一个 L1 区块链,可以将通用可编程性与隐私性相结合。
Aleo 背后的核心思想是最初在 2018 年的这篇研究论文中提出的 ZEXE 和 ZK执行。它首先引入了 Record 模型,该模型扩展了 Zcash 的 UTXO 模型,能够存储和加密任意数据(用户资产和应用程序状态),而不仅仅是特定的资产或代币的价值。
区块链中有两种主要的状态模型 - UTXO(未花费交易输出)和账户模型(由以太坊引入)。
Aleo 使用 UTXO 模型的变体 - Record 模型。
在以太坊使用的账户模型中,可以通过引用特定地址来找到应用程序状态。
因此,任何人只要知道地址,就可以查看任何帐户的所有活动记录。
在 Record 模型中,应用程序状态及其所有者被加密并存储在区块链上。
Record 是一种基本数据结构,可以包含任何数据,并用于对用户资产或应用程序状态进行编码。Record 代表了链上保存的全局状态的一部分。例如,您在某个账户中的积分余额是由以您所拥有的所有积分 Record 组成的。
Aleo Record 按以下格式序列化编码:
Record 示例:
{
owner: aleo13ssze66adjjkt795z9u5wpq8h6kn0y2657726h4h3e3wfnez4vqsm3008q.private,
amount: 100u64.private,
_nonce: 5861592911433819692697358191094794940442348980903696700646555355124091569429group.public
}
owner aleo13ssze66adjjkt795z9u5wpq8h6kn0y2657726h4h3e3wfnez4vqsm3008q
owner 是一个帐户地址,是有权使用这条 Record 的账户。
data 100u64
该 Record 可以对任意信息进行编码。 amount
就像我们所熟悉的 key - value 结构的 key 。
nonce 5861592911433819692697358191094794940442348980903696700646555355124091569429group
nonce 用于为每个 Record 创建唯一标识符。
在 Record 模型中,应用程序通过使用包含旧状态的 Record 并生成包含新状态的新 Record 来更新其状态。已使用的旧的 Record 将被标记为已用且不能再次使用。这里和比特币的 UTXO 很类似,可以有多个输入 Record 和多个输出 Record。
Record 的消耗和生成通常在 transition 函数中完成。 Aleo 中的一笔交易最多可以包含 32 个 transition,其中一个转换用于支付交易费用。
在基于帐户的模型中,应用程序的数据存储在与应用程序帐户关联的 slot 中,并且直接对此存储的数据进行更新。对于使用此模型的典型代币转移交易,用户余额将存储在将用户帐户地址映射到其各自余额的表中。当用户A向用户B转账时,A表中的余额减少,B的余额增加等量。
虽然账户模型对于开发者来说更加直观,但它使用账户地址来索引全局状态。这意味着,虽然私人账户模型可以实现输入和输出的隐私,但由于账户地址无法加密,它仍然会损害用户隐私。私人帐户模型的另一个问题是缺乏并发性,因为一次只有一个用户可以访问和更新整个程序状态。
Aleo 的 Record 模型使用程序 ID 来唯一标识程序,而不是帐户地址。这提高了隐私性并使程序能够具有内部状态。这种方法效率更高,并且解决了并发问题。
Aleo 是新的 L1 区块链,强调隐私编程和可扩展性。它选择 Record 模型作为其基本数据结构,因为基于帐户的模型无法提供具有可扩展性的隐私。Record 模型还对比特币中使用的 UTXO 模型进行了增强,它能够对任意数据进行编码,从而提供可编程的隐私。
Aleo 官方链接: