1.0.0-alpha.1 |
|
---|
#7 in #shimmer
63KB
1.5K SLoC
ledger.rs
ledger.rs
库实现了 Ledger Nano S/X 应用程序的所有API命令,并提供了一些通用任务的抽象,例如生成地址或签名要素。
它不依赖于其他IOTA特定库(如 iota.rs
或 bee
)。
API规范可以在以下位置找到: API规范
示例
以下是一个如何实例化ledger对象以及生成地址并将其转换为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)或真实设备上自动测试应用程序。
与 ledger.rs
相比,cli.rs
测试程序依赖于 bee
。
它做了什么
程序为几种不同的账户、输入、输出、余数配置构建(伪)随机消息要素。
运行次数是伪随机的。目前,总共生成了10000个伪随机配置,但只测试了唯一配置 - 其余的将被跳过。在这种情况下,总运行次数为62。
目前,“有效配置”的数量受限于 MAX_SUM_INPUTS_OUTPUTS
,该值为16。这意味着,生成总计16(输入数和输出数的总和)的要素,包括和不含额外余数。
测试程序还可以记录APDU传输为 bin
、hex
或 json
,以便与一个无依赖项的C测试程序自动测试 依赖项。
此外,还可以进行交互式或非交互式测试。两者的区别在于,在非交互模式下,签名 essences 不需要用户交互。只有当应用使用 app 并编译了 DEBUG=1
或 SPECULOS=1
标志时,才支持非交互模式。调试标志还将 bip32-path 更改为 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=1
或 SPECULOS=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 调用读取的设备信息也不同。
依赖关系
~3-4MB
~83K SLoC