#substrate #xdr #stellar

substrate-stellar-xdr

Stellar XDR 类型的编解码器

15 个版本

0.2.9 2021 年 7 月 15 日
0.2.8 2021 年 7 月 15 日
0.2.6 2021 年 6 月 21 日
0.1.5 2021 年 6 月 16 日

#17 in #xdr

Apache-2.0

335KB
8K SLoC

已弃用

该包已弃用,现在它是 Substrate Stellar SDK 的一部分。

Stellar XDR 类型的编解码器

此仓库生成用于 Stellar 中所有 XDR 类型的 Rust 解码器和编码器。代码是通过 Substrate Stellar XDR 生成器 生成的。

用法

这是解码和编码 Stellar 交易的示例代码。

use substrate_stellar_xdr::{xdr, xdr_codec::XdrCodec};

const ENVELOPE: &str =
    "AAAAAgAAAAC9xFYU1gQJeH4apEfzJkMCsW5DL4GEWRpyVjQHOlWVzgAAAZA\
    CGsQoAAQytgAAAAAAAAAAAAAAAgAAAAAAAAADAAAAAVhMUEcAAAAAxxJMrxQQOx9raxDm3\
    lINsLvksi7tj1BCQXzWTtqigbgAAAAAAAAAAAbK5N8CprKDAExLQAAAAAAAAAAAAAAAAAA\
    AAAMAAAAAAAAAAVhMUEcAAAAAxxJMrxQQOx9raxDm3lINsLvksi7tj1BCQXzWTtqigbgAA\
    AAAlV2+xQAEaBMAJiWgAAAAAAAAAAAAAAAAAAAAATpVlc4AAABAaX11e1dGcDkXrFT5s3Q\
    N6x3v4kQqJ/1VIjqO00y6OStd70/aYiXR35e4289RvmBTudJ5Q05PaRsD8p1qa17VDQ==";

fn main() {
    let envelope = xdr::TransactionEnvelope::from_base64_xdr(ENVELOPE).unwrap();
    println!("{:#?}", envelope);
    assert_eq!(xdr, envelope.to_xdr());
}

所有 Stellar XDR 类型都在 xdr 模块中定义。每个类型都实现了 xdr_codex::XdrCodec 特性,该特性定义了以下两个有用的方法

  • fn to_xdr(&self) -> Vec<u8>: 以二进制 XDR 编码
  • fn to_base64_xdr(&self) -> Vec<u8>: 以 XDR 编码,然后以 base64 编码结果
  • from_xdr<T: AsRef<[u8]>>(input: T) -> Result<Self, DecodeError>: 解码二进制 XDR
  • from_base64_xdr<T: AsRef<[u8]>>(input: T) -> Result<Self, DecodeError>:将base64解码,然后将结果解码为XDR

特性

  • all-types:当指定时,将生成所有类型——否则仅生成类型TransactionEnvelopeTransactionResultTransactionMetaEnvelopeTypeTransactionSignaturePayload的依赖树中的类型

依赖

~250KB