#blockchain #standard #resources #allocation #embedded-devices #memory #foundation

no-std foundation-ur

区块链通用统一资源(UR)标准的实现,为嵌入式设备提供静态内存分配,同时允许在资源更丰富的平台上使用动态内存分配

3 个版本 (破坏性更新)

0.3.0 2024 年 7 月 15 日
0.2.0 2024 年 5 月 15 日
0.1.0 2024 年 2 月 16 日

#foundation 中排名 36

Download history 90/week @ 2024-05-03 304/week @ 2024-05-10 250/week @ 2024-05-17 92/week @ 2024-05-24 56/week @ 2024-05-31 71/week @ 2024-06-07 103/week @ 2024-06-14 126/week @ 2024-06-21 124/week @ 2024-06-28 82/week @ 2024-07-05 501/week @ 2024-07-12 351/week @ 2024-07-19 255/week @ 2024-07-26 150/week @ 2024-08-02 196/week @ 2024-08-09 246/week @ 2024-08-16

每月下载量 882

MIT 许可证

155KB
3.5K SLoC

ur 是一个用于与 "Uniform Resources (UR)" 二进制数据编码交互的 crate。

编码方案优化了在 URI 和 QR 码中的传输。

编码器 允许字节有效载荷分多阶段传输,同时遵守最大大小要求。底层使用 fountain 编码器创建一个无界的 URI 流,接收端可以将其中的一部分重新组合成有效载荷。

例如

const MAX_FRAGMENT_LENGTH: usize = 5;

let data = "Ten chars!".repeat(10);

encoder.start("bytes", data.as_bytes(), MAX_FRAGMENT_LENGTH);
assert_eq!(
    encoder.next_part().to_string(),
    "ur:bytes/1-20/lpadbbcsiecyvdidatkpfeghihjtcxiabdfevlms"
);

while !decoder.is_complete() {
    let sequence = encoder.current_sequence();
    let part = encoder.next_part();
    // Simulate some communication loss
    if sequence & 1 > 0 {
        decoder.receive(part).unwrap();
    }
}
assert_eq!(decoder.message().unwrap().as_deref(), Some(data.as_bytes()));

以下有用的构建块也是公共 API 的一部分

  • bytewords 模块包含将字节有效载荷编码为合适字母表的功能,实现每字符十六进制字节效率。

  • fountain 模块提供了一个 fountain 编码器的实现,它将字节有效载荷分割成多个部分,并发出一个无界的部分流,接收端的解码器可以将这些部分重新组合。

依赖项

~3MB
~58K SLoC