#casper #cbc #blockchain

core_cbc_casper

抽象定义了CBC Casper消息结构,并定义了构建和正确执行Casper家族协议的函数

1个不稳定版本

0.1.0 2020年2月24日

#9#cbc

自定义许可

210KB
3.5K SLoC

pipeline status License: AGPL v3

核心CBC Casper

CBC Casper的抽象消息库,用Rust编写。

免责声明: 此库是实验性的,处于开发中,未经审查,可能发生重大变化。

此库的目的是抽象定义如介绍“最小”CBC Casper共识协议所定义的CBC Casper,消息结构,并定义构建和正确执行Casper家族协议的函数。我们的目标是尽可能将功能直接推送到抽象消息层,以便开发者能够使用此库较容易地创建协议。

设计决策是尽可能通用,将所有具体内容留给协议实现者。目前,我们的目标是数学正确性以及主要纯函数式协议执行,而不是性能。我们的想法是拥有数学正确但可能效率不高的函数实现,这些函数可以用作与高效实现进行比较的基准。

使用此库

为了从建立在CBC Casper安全证明之上的此库中受益,必须实现 validator::ValidatorNameestimmator::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 的信息

依赖项

~2.7–4MB
~82K SLoC