#bolt #bitcoin #lightning #serialization #message #array #message-format

no-std serde_bolt

比特币闪电BOLT风格消息序列化/反序列化器

30次发布

0.4.1 2024年8月12日
0.3.5 2024年4月27日
0.3.4 2023年12月13日
0.3.1 2023年8月11日
0.1.6 2021年9月24日

#288 in 编码

Download history 1054/week @ 2024-04-27 956/week @ 2024-05-04 1306/week @ 2024-05-11 803/week @ 2024-05-18 923/week @ 2024-05-25 773/week @ 2024-06-01 565/week @ 2024-06-08 732/week @ 2024-06-15 413/week @ 2024-06-22 361/week @ 2024-06-29 350/week @ 2024-07-06 350/week @ 2024-07-13 395/week @ 2024-07-20 547/week @ 2024-07-27 493/week @ 2024-08-03 709/week @ 2024-08-10

2,224 每月下载量
用于 16 个crate (5 个直接)

Apache-2.0

38KB
875 代码行

serde-BOLT

Crate Documentation Safety Dance

闪电BOLT消息序列化格式的未完整实现。与rust-bitcoin的EncodableDecodable特性兼容。

与rust-bitcoin不同,默认是大端编码,对于以下类型的长度字段使用u16/u32

  • 字节(u16长度字段)
  • 数组(u16长度字段)
  • 大字节(u32长度字段)
  • 忽略大字节(u32长度字段)

Option实现为一个单字节,None0x00Some0x01,随后是值。

特定领域的类型尚未实现。您可以使用Array<u8>或其包装版本,例如[u8; nnn]

结构和元组被认为是透明的 - 它们在流中不被分隔。

未实现

  • TLVs

用法

    use hex::{encode, decode};
    extern crate alloc;

    use serde_bolt::{to_vec, from_vec, bitcoin::consensus::{Encodable, Decodable}, Array};
    use bitcoin_consensus_derive::{Encodable, Decodable};

    #[derive(Encodable, Decodable, PartialEq, Debug)]
    struct Thing([u8; 3]);
    
    #[derive(Encodable, Decodable, Debug)]
    struct Test {
        x: bool,
        a: u32,
        b: u8,
        c: Option<u16>,
        d: Option<u16>,
        e: Array<u8>,
        /// Sub-structs are transparent
        f: Thing
    }

    #[test]
    fn test_simple() {
        let test = Test {
            x: true,
            a: 65538, b:160, c: None, d: Some(3),
            e: vec![0x33, 0x44].into(),
            f: Thing([0x55, 0x66, 0x77])
        };
        let result = to_vec(&test).unwrap();
        assert_eq!("0100010002a00001000300023344556677", encode(&result));
    
        let decoded: Test = from_vec(&mut result.clone()).unwrap();
        assert_eq!(test.a, decoded.a);
		assert_eq!(test.f, decoded.f);
    }

依赖项

~8.5MB
~116K SLoC