1个不稳定版本
0.1.0 | 2020年2月24日 |
---|
#9 在 #cbc
210KB
3.5K SLoC
核心CBC Casper
CBC Casper的抽象消息库,用Rust编写。
免责声明: 此库是实验性的,处于开发中,未经审查,可能发生重大变化。
此库的目的是抽象定义如介绍“最小”CBC Casper共识协议所定义的CBC Casper,消息结构,并定义构建和正确执行Casper家族协议的函数。我们的目标是尽可能将功能直接推送到抽象消息层,以便开发者能够使用此库较容易地创建协议。
设计决策是尽可能通用,将所有具体内容留给协议实现者。目前,我们的目标是数学正确性以及主要纯函数式协议执行,而不是性能。我们的想法是拥有数学正确但可能效率不高的函数实现,这些函数可以用作与高效实现进行比较的基准。
使用此库
为了从建立在CBC Casper安全证明之上的此库中受益,必须实现 validator::ValidatorName
和 estimmator::Estimator
特性。
我们还提供了一个基本区块链实现,该实现正在积极开发中。您还可以在 tests/
中找到另一个整数共识的实现。
但为了开始使用此库,最好的方法是研究文档和示例文件夹(正在开发中)中的示例。阅读和运行测试也是有益的。
Cargo
您可以在依赖关系中使用此库
[dependencies]
core_cbc_casper = "0.1"
示例
我们提供了一个朴素一致性协议的例子:一个使用泛型类型 message::Message<estimator::Estimator>
实现来生成协议的三元一致性。
已知限制
性能
如前所述,我们目前的重点是实现的正确性,而不是性能。
错误处理
目前对错误处理的关注不足。在库可以被认为是生产就绪之前,必须适当地研究和修复潜在的故障点。
测试
我们使用 proptest
crate 生成属性测试。该库具有由 proptest 框架使用的功能 integration_test
。要运行特定的 proptest
测试,使用
cargo test --test generative_tests --features "integration_test"
要运行其他测试,只需使用 cargo test
。
基准测试
我们使用 criterion
crate 进行基准测试。该库提供了对性能回归和改进的统计分析,并且可选地依赖于 gnuplot
来绘制基准测试结果的详细图表。要运行基准测试,使用
cargo bench
工件
图表和保存的数据存储在 target/criterion/$BENCHMARK_NAME/
。
“new” 文件夹包含最后基准测试运行的统计信息,而“base”文件夹包含最后在“base”基线上的运行的统计信息(有关基线的更多信息,请参阅命令行选项)。图表存储在“report”文件夹中。Criterion.rs 只保留最后运行的历更数据。在“report/both”文件夹中包含在一张图表上显示两次运行的图表,而在“report/change”文件夹中包含显示最后两次运行之间差异的图表。此示例显示了默认的“bench_function”基准测试方法生成的图表。其他方法可能会生成额外的图表,其详细信息将在各自的页面上进行说明。
有关更多信息,请参阅图表和图形
贡献
到目前为止,这个库的开发仅限于内部。如果您想做出贡献,请联系库的作者之一(请参阅 Cargo.toml)。
代码格式
我们使用 rustfmt
默认配置来确保整个项目中代码格式的连贯性。使用 rustup component add rustfmt
安装 rustfmt
。
代码 linting
我们使用 clippy
来确保代码库尽可能干净和功能齐全。使用 rustup component add clippy
安装它,并使用 cargo clippy --all-targets --all-features -- -D warnings
运行它。
关于 CBC Casper 的更多信息
要了解更多关于 CBC Casper 的信息
- Casper CBC,简化版!,作者 Aditya Asgaonkar。
依赖项
~2.7–4MB
~82K SLoC