Aleo允许构建高效,安全和匿名的应用。
基本概念
账户
账户包括 private key
, view key
和 address
。
private key
: 用于授权交易,更新账户记录record
的全局状态
proving key
: 由私钥派生,可允许其他证明者为用户交易生成证明
view key
: 用于解密账户记录record
, record
由address
进行加密
address
: 用于和他人交互,发送和接收record
的应用数据
程序
program
用于表示应用程序的逻辑和状态。Aleo引入一种新的编程语言Leo
用于开发匿名应用。 Leo
是一种静态的,功能型编程语言,用于开发隐私保护的应用。
circuit Point {
x: u32,
y: u32,
function new() -> Self {
return Self {
x: 0,
y: 0,
};
}
function add(self) -> u32 {
return self.x + self.y;
}
}
function main() {
let p = Point::new();
p.x = 4u32;
p.y = 6u32;
let sum = p.add();
console.log("The sum is {}", sum);
}
ID
: 每个program
有一个ID, 由验证密钥的hash生成;
input
: 由用户提供的程序运行的输入,输入为隐私的,除非用户想公开;
state
: 应用的状态;
output
: 用于表示应用的输出,由零知识证明验证输出的有效性;
程序寄存器: 允许两个program
运行时进行交互。
记录
record
用来编码用户资产和应用程序的状态。
每个交易可以消耗一个record
, 并生成新的record
。
record
的结构如下:
-
owner
: 拥有者地址; -
value
: 记录的金额; -
payload
: 记录任意应用程序信息; -
birth program id
: 创建record
时指定; -
death program id
: 在消耗record
时指定。 -
serial number nonce
: 当record
被花掉时,生成的一个随机数, 用于防止双花; -
commitment randomness
: 生成record commitment
交易
交易的结构如下:
-
old_serial_number
: 被花掉的record
的序列号; -
new_commitments
: 新生成的记录的承诺; -
program_commits
: 程序的承诺 -
local data root
:对old records, new records, memorandum, network ID
的承诺 -
value balance
: 输入减输出的值,用于计算fee。 -
memorandum
: 交易的任意公开的信息 -
network
ID: 网络id -
signatue
: 交易的签名 -
Ledger digest
:包含所有记录承诺的Merkle 树根 -
Encrypted record
: 交易新创建的记录 -
transaction proof
: 交易的证明,用于证明交易的有效性
区块
区块的结构如下:
-
header
: 区块头,503个字节; -
num_transactions
交易的个数; -
transactions
: 交易的列表
区块链头header
包括如下字段:
-
previous block hash
: 前一区块链的hash; -
Merkle root hash
: 所有交易Merkle树的根; -
Pedersen Merkle root hash
: 所有交易的Merkle 树的根,采用pedersen hash计算; -
proof of succint work
: 共识的证明; -
timestamp
: 时间戳 -
Difficult Target
: 动态设置挖矿的难度值; -
Nonce
: POSW谜题的解
共识机制
Aleo采用POSW (Proof of Succinct Work ) 共识机制,由一种基于SNARK的POW算法,用于激励开发SNARK加速的硬件。
矿工主要需要计算一个有效的nonce
, 解决POSW
谜题。
参考
https://aleo.org/post/welcome-to-aleo
https://github.com/AleoHQ/snarkVM
https://github.com/AleoHQ/zexe
网友评论