#ledger #unc #transport #public-key #path #devices #transaction

unc-ledger

与 UNC Ledger 应用集成的传输库

10 个版本 (5 个破坏性更新)

0.12.2 2024年5月31日
0.10.2 2024年5月15日
0.7.3 2024年4月12日
0.6.1 2024年3月21日
0.1.0 2024年3月6日

#13 in #unc


4 个 crate 中使用 (3 个直接使用)

MITGPL-2.0-or-later

53KB
312 行代码(不含注释)

unc-ledger-rs

Rust

它是 UNC 与 Ledger 之间的传输

提供了一组可以执行的命令,用于与安装在 Ledger 设备上的 UNC 应用进行通信

  • 通过 HD 路径从 Ledger 设备读取公钥
  • 签名交易

示例

从 Ledger 获取公钥

use unc_ledger::get_public_key;
use slip10::BIP32Path;
use std::str::FromStr;

let hd_path = BIP32Path::from_str("44'/397'/0'/0'/1'").unwrap();
let public_key = get_public_key(hd_path).unwrap();
println!("{:#?}", public_key);

技巧

要将答案转换为 unc_crypto::PublicKey,请执行

let public_key = unc_crypto::PublicKey::ED25519(
    unc_crypto::ED25519PublicKey::from(
        public_key.to_bytes(),
    )
);

如何签名交易

use unc_ledger::{sign_transaction, SignTarget};
use unc_primitives::borsh::BorshSerialize;
use slip10::BIP32Path;
use std::str::FromStr;

let hd_path = BIP32Path::from_str("44'/397'/0'/0'/1'").unwrap();
let borsh_transaction = unc_unsigned_transaction.try_to_vec().unwrap();
let signature = sign_transaction(SignTarget::BorshUnsignedTx(borsh_transaction), hd_path).unwrap();
println!("{:#?}", signature);

技巧

要将答案转换为 unc_crypto::Signature,请执行

let signature = unc_crypto::Signature::from_parts(unc_crypto::KeyType::ED25519, &signature)
    .expect("Signature is not expected to fail on deserialization");

可执行示例

获取版本

RUST_LOG=info cargo run --example get_version

从 Ledger 获取公钥

显示

RUST_LOG=info cargo run --example get_public_key_display

静默

RUST_LOG=info cargo run --example get_public_key_silent

从 Ledger 获取钱包 ID

RUST_LOG=info cargo run --example get_wallet_id

签名交易

转账

RUST_LOG=info cargo run --example sign_transfer

其他

export RUST_LOG=info
cargo run --example sign_create_account
cargo run --example sign_delete_account_short
cargo run --example sign_delete_account_long
cargo run --example sign_delete_key_ed25519
cargo run --example sign_delete_key_secp256k1
cargo run --example sign_stake
cargo run --example sign_add_key_fullaccess
cargo run --example sign_add_key_functioncall
cargo run --example sign_deploy_contract
cargo run --example sign_functioncall_str
cargo run --example sign_functioncall_bin
cargo run --example sign_functioncall_str_parse_err
cargo run --example sign_batch_all_actions

签名 NEP-413 消息

RUST_LOG=info cargo run --example sign_nep_413_message

签名 NEP-366 代理操作

RUST_LOG=info cargo run --example sign_nep_366_delegate_action

依赖项

~39–56MB
~857K SLoC