1 unstable release
0.1.0 | Jun 16, 2023 |
---|
#10 in #ledger-hardware
28KB
579 lines
Rust wrapper for executing Speculos via local install or docker image, provided to simplify CI/CD with ledger applications.
Drivers are provided for Docker and Local execution, with a Generic abstraction to support runtime driver selection.
Examples:
use ledger_sim::{GenericDriver, DriverMode, Driver, Model, Options};
use ledger_lib::{Device, transport::{Transport, TcpTransport, TcpInfo}, DEFAULT_TIMEOUT};
use ledger_proto::apdus::{AppInfoReq, AppInfoResp};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Setup driver for speculos connection
let driver = GenericDriver::new(DriverMode::Docker)?;
// Launch speculos with the provided app
let opts = Options {
model: Model::NanoX,
apdu_port: Some(1237),
..Default::default()
};
let mut handle = driver.run("ledger-app", opts).await?;
// Setup TCP APDU transport to speculos
let mut transport = TcpTransport::new()?;
let mut device = transport.connect(TcpInfo::default()).await?;
// Fetch app info via transport
let mut buff = [0u8; 256];
let info = device.request::<AppInfoResp>(AppInfoReq{}, &mut buff, DEFAULT_TIMEOUT).await?;
// Await simulator exit or exit signal
tokio::select!(
// Await simulator task completion
_ = driver.wait(&mut handle) => {
debug!("Complete!");
}
// Exit on ctrl + c
_ = tokio::signal::ctrl_c() => {
debug!("Exit!");
driver.exit(handle).await?;
},
);
Ok(())
}
Dependencies
~24–38MB
~605K SLoC