mirror of
https://github.com/logos-blockchain/logos-execution-zone.git
synced 2026-07-25 07:03:13 +00:00
* refactor(keycard_wallet): replace keycard-py (pyo3) with native keycard-rs Rewrites the Keycard integration to talk to the LEE-flavored applet directly from Rust via keycard-rs (pinned git dependency), dropping the pyo3 shim, python_path.rs, and the vendored keycard-py Python library entirely. Verified end-to-end against real hardware: pairing, PIN verification, mnemonic loading, BIP340 Schnorr signing, and transfers between keycard and public/private accounts. Also cleans up the pyo3 usage that had leaked into wallet's signing path (signing.rs, account_manager.rs) beyond the keycard CLI itself, and trims wallet_with_keycard.sh's Python setup down to just pyscard, which is only needed by the force_unpower.py test helper now. * Updated to v2 secure communication * ci: install libpcsclite-dev for pcsc crate builds * docs(keycard): clarify personalization is mandatory and document default CA Reinstalling the applet via `./gradlew install` wipes any existing personalization regardless of firmware source, which wasn't previously called out and is a common source of "card not available" confusion. Also state plainly that personalization is required before any command works, and document keycard-rs's actual baked-in default CA public key instead of only describing the override mechanism. Export KEYCARD_CA_PUBLIC_KEY in all keycard test scripts so they work against the dev/test-CA personalization flow they rely on. * fix(keycard): address PR #595 review comments - Propagate the load_mnemonic error instead of swallowing it behind is_ok(), matching every other command handler in this file. - Add deny.toml allowing the keycard-rs git source, fixing the source-not-allowed failure in `cargo deny check`. Licenses and advisories checks still have pre-existing, separate failures not addressed here. - Drop the pinned rev for the keycard-rs git dependency so it tracks the upstream default branch instead. * chore(deny): trim deny.toml to essentials and allow all in-use licenses Replace the full cargo-deny init template with just the two sections that matter: the keycard-rs git-source allowance, and an explicit license allow-list covering every license currently in the dependency tree. cargo deny check now passes on sources, bans, and licenses; advisories still fails on a pre-existing, unrelated RUSTSEC advisory. * fix(deny): remove second config and add source to the original one * chore: pin keycard-rs dependency and fix factory-reset debug-gate doc * chore: regenerate test fixture and lockfile after rebase onto dev --------- Co-authored-by: Daniil Polyakov <arjentix@gmail.com>
132 lines
4.9 KiB
Bash
Executable File
132 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# Run `cargo install --path lez/wallet --force` first
|
|
|
|
export KEYCARD_PIN=111111
|
|
export KEYCARD_CA_PUBLIC_KEY=025877220aaae6e54a6f974602d5995c0fe24a3ea7ddabd8644bec795b9da00743
|
|
|
|
# Tests wallet keycard available
|
|
# - Checks whether smart reader and keycard are both available.
|
|
echo "Test: wallet keycard available"
|
|
wallet keycard available
|
|
|
|
# Install a new mnemonic phrase to keycard
|
|
echo "Test: wallet keycard load"
|
|
export KEYCARD_MNEMONIC="fashion degree mountain wool question damp current pond grow dolphin chronic then"
|
|
wallet keycard load
|
|
unset KEYCARD_MNEMONIC
|
|
|
|
echo "Test: wallet auth-transfer init --account-id \"m/44'/60'/0'/0/0\""
|
|
wallet auth-transfer init --account-id "m/44'/60'/0'/0/0"
|
|
|
|
echo "Test: wallet account get --account-id \"m/44'/60'/0'/0/0\""
|
|
wallet account get --account-id "m/44'/60'/0'/0/0"
|
|
|
|
echo "Test: wallet pinata claim --to \"m/44'/60'/0'/0/0\""
|
|
wallet pinata claim --to "m/44'/60'/0'/0/0"
|
|
|
|
echo "Test: wallet account get --account-id \"m/44'/60'/0'/0/0\""
|
|
wallet account get --account-id "m/44'/60'/0'/0/0"
|
|
|
|
echo ""
|
|
echo "=== Test: Keycard account to Keycard account ==="
|
|
wallet auth-transfer init --account-id "m/44'/60'/0'/0/1"
|
|
wallet auth-transfer send --amount 40 --from "m/44'/60'/0'/0/0" --to "m/44'/60'/0'/0/1"
|
|
|
|
echo "Test: wallet account get --account-id \"m/44'/60'/0'/0/0\""
|
|
wallet account get --account-id "m/44'/60'/0'/0/0"
|
|
|
|
echo "Test: wallet account get --account-id \"m/44'/60'/0'/0/1\""
|
|
wallet account get --account-id "m/44'/60'/0'/0/1"
|
|
|
|
echo ""
|
|
echo "=== Test: Keycard account to public local account ==="
|
|
echo "Test: create local wallet account"
|
|
LOCAL_ACCOUNT_ID=$(wallet account new public 2>&1 | grep -oP '(?<=Public/)\S+')
|
|
echo "Created local account: Public/${LOCAL_ACCOUNT_ID}"
|
|
|
|
echo "Test: wallet auth-transfer init local account"
|
|
wallet auth-transfer init --account-id "Public/${LOCAL_ACCOUNT_ID}"
|
|
|
|
|
|
echo "Test: wallet auth-transfer send from keycard to local account"
|
|
wallet auth-transfer send --amount 10 --from "m/44'/60'/0'/0/0" --to "Public/${LOCAL_ACCOUNT_ID}"
|
|
|
|
echo "Test: wallet account get --account-id \"m/44'/60'/0'/0/0\""
|
|
wallet account get --account-id "m/44'/60'/0'/0/0"
|
|
|
|
echo "Test: wallet account get --account-id \"Public/${LOCAL_ACCOUNT_ID}\""
|
|
wallet account get --account-id "Public/${LOCAL_ACCOUNT_ID}"
|
|
|
|
echo ""
|
|
echo "=== Test: public local account to Keycard account ==="
|
|
|
|
echo "Test: wallet auth-transfer send from local account to keycard account"
|
|
wallet auth-transfer send --amount 10 --from "Public/${LOCAL_ACCOUNT_ID}" --to "m/44'/60'/0'/0/1"
|
|
|
|
echo "Test: wallet account get --account-id \"Public/${LOCAL_ACCOUNT_ID}\""
|
|
wallet account get --account-id "Public/${LOCAL_ACCOUNT_ID}"
|
|
|
|
echo "Test: wallet account get --account-id \"m/44'/60'/0'/0/1\""
|
|
wallet account get --account-id "m/44'/60'/0'/0/1"
|
|
|
|
echo ""
|
|
echo "=== Test: Keycard account to foreign recipient (no signature required) ==="
|
|
echo "Test: wallet account get --account-id \"m/44'/60'/0'/0/0\""
|
|
wallet account get --account-id "Public/7wHg9sbJwc6h3NP1S9bekfAzB8CHifEcxKswCKUt3YQo"
|
|
|
|
echo "Test: wallet auth-transfer send from keycard to local account"
|
|
wallet auth-transfer send --amount 10 --from "m/44'/60'/0'/0/0" --to "Public/7wHg9sbJwc6h3NP1S9bekfAzB8CHifEcxKswCKUt3YQo"
|
|
|
|
echo "Test: wallet account get --account-id \"m/44'/60'/0'/0/0\""
|
|
wallet account get --account-id "m/44'/60'/0'/0/0"
|
|
|
|
echo "Test: wallet account get --account-id \"m/44'/60'/0'/0/0\""
|
|
wallet account get --account-id "Public/7wHg9sbJwc6h3NP1S9bekfAzB8CHifEcxKswCKUt3YQo"
|
|
|
|
echo ""
|
|
echo "=== Test: Shielded auth-transfer to owned private account ==="
|
|
|
|
SHIELDED_RECV=$(wallet account new private | grep -o 'Private/[^[:space:]]*' | head -1)
|
|
echo "Private recipient: $SHIELDED_RECV"
|
|
SHIELDED_KEYS=$(wallet account show-keys --account-id "$SHIELDED_RECV")
|
|
SHIELDED_NPK=$(echo "$SHIELDED_KEYS" | head -1)
|
|
SHIELDED_VPK=$(echo "$SHIELDED_KEYS" | tail -1)
|
|
|
|
wallet auth-transfer send --amount 2 \
|
|
--from "m/44'/60'/0'/0/0" \
|
|
--to-npk "$SHIELDED_NPK" \
|
|
--to-vpk "$SHIELDED_VPK"
|
|
echo "Shielded auth-transfer sent"
|
|
|
|
sleep 15
|
|
wallet account get --account-id "m/44'/60'/0'/0/0"
|
|
|
|
echo ""
|
|
echo "=== Test: Deshielded auth-transfer: private account → keycard path 1 ==="
|
|
|
|
PRIV_SENDER=$(wallet account new private | grep -o 'Private/[^[:space:]]*' | head -1)
|
|
echo "Fresh private sender account: $PRIV_SENDER"
|
|
|
|
wallet auth-transfer init --account-id "$PRIV_SENDER"
|
|
|
|
echo "Test: wallet pinata claim to private sender"
|
|
wallet pinata claim --to "$PRIV_SENDER"
|
|
|
|
sleep 15
|
|
|
|
echo "priv-sender state after claim:"
|
|
wallet account get --account-id "$PRIV_SENDER"
|
|
|
|
wallet auth-transfer send \
|
|
--from "$PRIV_SENDER" \
|
|
--to "m/44'/60'/0'/0/1" \
|
|
--amount 5
|
|
echo "Deshielded transfer of 5: $PRIV_SENDER → keycard path 1"
|
|
|
|
sleep 15
|
|
|
|
echo "priv-sender state (balance should have decreased by 5):"
|
|
wallet account get --account-id "$PRIV_SENDER"
|
|
echo "Keycard path 1 state (balance should have increased by 5):"
|
|
wallet account get --account-id "m/44'/60'/0'/0/1"
|