#ledger-nano #iota #shimmer #generate

iota-ledger-nano

与IOTA和Shimmer Ledger Nano应用程序通信的库

15 个版本 (4 个稳定版)

1.0.4-alpha.32024年2月19日
1.0.1 2023年12月4日
1.0.0 2023年10月9日
1.0.0-alpha.42022年10月8日
1.0.0-alpha.12022年7月14日

#927 in 神奇豆

Download history 159/week @ 2024-04-01 50/week @ 2024-04-08 259/week @ 2024-04-15 78/week @ 2024-04-22 252/week @ 2024-04-29 168/week @ 2024-05-06 86/week @ 2024-05-13 113/week @ 2024-05-20 18/week @ 2024-05-27 36/week @ 2024-06-03 60/week @ 2024-06-10 97/week @ 2024-06-17 70/week @ 2024-06-24 62/week @ 2024-07-01 42/week @ 2024-07-08 37/week @ 2024-07-15

224 每月下载量
用于 iota-sdk

Apache-2.0

80KB
1.5K SLoC

ledger.rs

ledger.rs 库实现了 Ledger Nano S/X 应用程序的所有API命令,并为生成地址或签名本质等常见任务提供了一些抽象。

它不依赖于其他iota特定库(如 iota.rsbee)。

API规范可以在以下位置找到: API规范

示例

以下是如何实例化一个账本对象并生成一个转换为bech32表示的地址的示例

const HARDENED : u32 = 0x80000000;

// bip32 path follows: 2c'/107a'/account'/change'/index'
let mut ledger = iota_ledger::get_ledger_by_type(0 | HARDENED, TransportTypes::TCP, None)?;

let input_bip32_index = LedgerBIP32Index {
    bip32_index: 1 | HARDENED,
    bip32_change: 0 | HARDENED,
};

// get one single address, don't show it on the UI
let input_addr_bytes: [u8; 32] = ledger
    .get_addresses(false, input_bip32_index, 1)
    .expect("error get new address")
    .first()
    .unwrap();

// add the address_type byte
let mut addr_bytes_with_type = [0u8; 33];
addr_bytes_with_type[0] = 0; // ed25519 address_type
addr_bytes_with_type[1..33].clone_from_slice(&input_addr_bytes[..]);

// convert the 33 byte address into a bech32 string
let bech32_address = bech32::encode("iota", 
    addr_bytes_with_type.to_base32()).unwrap();

// output the address
println!("{}", bech32_address);

测试程序 cli.rs

有一个测试程序,可以用于在Speculos模拟器(Nano S和Nano X)或真实设备上运行的app的自动测试。

ledger.rs 相比,cli.rs 测试程序依赖于 bee

它的作用

该程序为多个不同的账户、输入、输出、余数配置构建(伪随机)消息本质。

运行次数是伪随机的。目前,总共生成了10000个伪随机配置,但只测试了唯一的配置 - 其余的都被跳过了。在这种情况下,总运行次数为62。

目前,“有效配置”的数量受限于MAX_SUM_INPUTS_OUTPUTS,其值为16。这意味着,生成了最多16个(输入和输出的数量之和)带有和没有额外余数的精华。

测试程序还可以将APDU传输记录为binhexjson格式,以便与一个无依赖项的C测试程序进行自动测试。这里是设置它的说明。

此外,可以进行交互式或非交互式测试。区别在于,在非交互模式下,无需用户交互即可签名精华。只有当应用程序使用DEBUG=1SPECULOS=1标志编译时,才可用非交互模式。 (调试标志还将bip32路径更改为2c'/1'/account/change/index,并且bech32地址以HRP atoi开头,表明应用程序是为测试网编译的。)

Speculos模拟器可以与测试程序一起使用。这里是设置它的说明。

参数

ledger iota tester 1.0
Thomas Pototschnig <microengineer18@gmail.com>

USAGE:
    cli [FLAGS] [OPTIONS]

FLAGS:
    -d, --dump               dump memory after tests
    -h, --help               Prints help information
    -s, --simulator          select the simulator as transport
    -n, --non-interactive    run the program in non-interactive mode for automatic testing
    -V, --version            Prints version information

OPTIONS:
    -f, --format <format>        user output format hex, bin, json (default) as output file format
    -l, --limit <limit>          maximum number of tests done
    -r, --recorder <recorder>    record APDU requests and responses to a file

dump标志有点特殊,因为它在测试运行后执行完整的内存转储。只有当应用程序使用DEBUG=1SPECULOS=1编译时才可用。主要用途是手动和视觉上验证堆是否没有增长到数据部分。这仅对开发应用程序的人感兴趣。

可以通过执行以下操作创建CI测试的bin-测试文件

$ cli -n -s -r=reference.bin -f=bin

请注意,Nano S和Nano X的参考文件不同,因为ledger.rs库使用单签名模式对Nano S进行签名以节省RAM,但在Nano X上使用另一种(更快的)签名模式。另外,可以通过get_app_config API调用读出的设备信息也不同。

依赖关系

~1–12MB
~91K SLoC