1 个不稳定版本
0.0.0 | 2019年8月24日 |
---|
#15 in #ssz
48KB
937 行
证明
Proof
是一个用于验证和操作部分对象梅克尔证明的库。
该库符合不断发展的以太坊2.0 规范 梅克尔证明部分。直到版本 1.0
,API 可能是不稳定的。
入门
将以下内容添加到您的项目 Cargo.toml
中的 [dependencies]
proof = { git = "https://github.com/c-o-l-o-r/proof" }
proof_derive = { git = "https://github.com/c-o-l-o-r/proof" }
如果您打算使用 ssz_types
,也请添加
ssz_types = { git = "https://github.com/sigp/lighthouse" }
示例
// S's merkle tree representation
//
// root(0)
// / \
// a(1) b(2) -----+
// / \
// +-- data(5) --+ len(6)
// / \
// i(11) i(12)
// / \ / \
// b[0,1](23) b[2,3](24) b[4,5](26) b[6,7](27)
use proof::{Proof, Path, SerializedProof, hash_children};
#[derive(Provable)]
struct S {
a: u64,
b: VariableList<u128, U8>,
}
fn main() {
// Build the 32-byte chunks
let one = vec![0u8; 32];
let six = vec![0u8; 32];
let twelve = hash_children(&[0u8; 32], &[0u8; 32]);
let twenty_three = vec![1u8; 32];
let twenty_four = vec![2u8; 32];
// Generate the proof
let serialized_proof = SerializedProof {
indices: vec![1, 6, 12, 23, 24],
chunks: vec![one, six, twelve, twenty_three, twenty_four].into_iter().flatten().collect(),
};
// Load the proof
let mut proof = Proof::<S>::new(serialized_proof.clone());
// Fill in chunks that can be inferred
assert_eq!(proof.fill(), Ok(()));
// Extract a proof to `S.b[2]`
assert_eq!(
proof.extract(vec![Path::Ident("b".to_string()), Path::Index(2)]),
Ok(serialized_proof)
);
}
有关更多使用示例,请参阅 测试 目录。
许可证
Apache License,版本2.0 (http://www.apache.org/licenses/LICENSE-2.0) 许可
依赖项
~3MB
~66K SLoC