My previous commit broke this repo's CI on main, and the mechanism is worth recording. Measured, by asking each cache for the path that failed (l5g04kz8cd8amnpxmq8bfm69kypqfpkj-alloy-eip7928-0.3.4): logos-co.cachix.org 200 <- present cache.nix.logos.co/public 404 cache.nix.logos.co/ci 404 cache.nixos.org 404 CI never built that crate. It substituted it from Cachix on every run. Dropping Cachix from the substituters therefore did not merely cost cache hits -- it turned "fetch a prebuilt path" into "build it from source", and that build fails, taking cargo-vendor-dir and the whole module down with it. So Cachix stays as a READ-ONLY substituter until Attic has the paths. It is credential-free (the cache is public) and nothing publishes to it any more: pushes go to Attic, public on main and ci elsewhere. Drop these two lines once Attic is seeded. The Attic side is confirmed working in the failing run itself -- it substituted python3-env and doctest from cache.nix.logos.co/public -- and the push step correctly skipped, since this repo has no public-cache environment yet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
logos-evm-keystore-module
A Logos core module (Rust, rust-first cdylib) that is the keystore for the
Logos multi-chain EVM wallet: scrypt-encrypted vaults, BIP39/BIP32 HD derivation,
and secp256k1 signing. It does no networking, and private keys never cross the
module boundary — only addresses, signed payloads, and (re-encrypted) keystore
JSON do.
Built on well-established crates: alloy
(signing, tx encoding), eth-keystore
(Web3 Secure Storage scrypt vaults), and coins-bip39/coins-bip32 (HD wallets).
Contract (KeystoreModule)
create_mnemonic, import_mnemonic, new_account, import_private_key,
import_keystore_json, export_keystore_json, list_accounts, has_address,
delete_account, unlock/timed_unlock/lock/is_unlocked,
sign_transaction (legacy EIP-155 + EIP-1559), sign_message (EIP-191). Event:
accounts_changed. All structured values cross the IPC boundary as JSON strings.
Build & test
# crypto core (no Logos runtime needed)
cd rust-lib && cargo test --no-default-features
# full module (Qt plugin) + .lgx package
nix build .#install # -> result/modules/keystore_module/
nix build .#lgx
The crypto core is feature-gated away from the Logos glue so it stays
cargo test-able on its own; the builder compiles the glue via the default
logos_module feature. See the wallet plan for the full architecture.