#merkle-tree #board #merkle #bulletin #back-end #verifiable

bin+lib merkle-tree-bulletin-board-backend-mysql

merkle-tree-bulletin-board 的 mysql 后端

4 个版本 (2 个重大变更)

0.3.0 2023年3月10日
0.2.0 2022年11月30日
0.1.1 2022年2月24日
0.1.0 2021年11月23日

#1715 in 密码学

MIT/Apache

620KB
1.5K SLoC

Merkle tree Bulletin board,mysql 后端

这是为 merkle-tree-bulletin-board crate 提供的基于 mysql/mariadb 的后端。

它部分作为基于 SQL 的后端的一个演示,但它本身也是可用的。

提供了一个名为 test_mysql 的二进制测试程序;这只是为了演示目的,在生产系统中没有任何功能。

我不是 SQL 调优专家;这不如 merkle-tree-bulletin-board crate 的代码那么谨慎,然而每个操作都是 O(mysql 单索引操作)*O(数据大小),数据大小通常是 O(log Bulletin board 大小)。也就是说,没有操作应该很慢。

如何使用

定义一些函数来获取到数据库的 mysql 连接,例如

fn get_bulletin_board_connection() -> Conn {
    let opts = Opts::from_url(&CONFIG.database.bulletinboard).expect("Could not parse bulletin_board_url url");
    Conn::new(opts).expect("Could not connect to bulletin board database")
}

然后以某种方式初始化数据库

/// Delete all data and recreate the schema.
pub fn initialize_bulletin_board_database() -> anyhow::Result<()> {
    let mut conn = get_bulletin_board_connection();
    conn.query_drop("drop table if exists PUBLISHED_ROOTS")?;
    conn.query_drop("drop table if exists PUBLISHED_ROOT_REFERENCES")?;
    conn.query_drop("drop table if exists BRANCH")?;
    conn.query_drop("drop table if exists LEAF")?;

    let schema = merkle_tree_bulletin_board_backend_mysql::SCHEMA;
    conn.query_drop(schema)?;
    Ok(())
}

然后创建后端,例如

   let conn = get_bulletin_board_connection();
   let backend = merkle_tree_bulletin_board_backend_mysql::BackendMysql{ connection: std::sync::Mutex::new(Box::new(conn)) };

许可证

版权所有 2021 Thinking Cybersecurity Pty. Ltd.

在您选择的下列许可证下使用:

任选其一。

贡献

除非您明确声明,否则您提交的任何有意包含在作品中的贡献,根据 Apache-2.0 许可证定义,将按上述方式双许可,不附加任何额外条款或条件。

版本说明

0.2:依赖项中 mysql 版本的变化。旧版本有一个被撤回的间接依赖项 funty 1.2。

0.3:匹配 0.3 版 bulletin board - 更好的错误处理(API 错误更改)。

依赖项

~14–28MB
~451K SLoC