Files
lambda-prize/prizes/LP-0010.md
2026-03-27 12:30:06 +01:00

86 lines
5.2 KiB
Markdown

# LP-0010: Shell dApp Integration Proof of Concept [CLOSED]
**`Logos Circle: N/A`**
## Overview
Build a dApp that integrates directly with Shell through QR codes, 100% airgapped, no browser extension. The dApp demonstrates three things: connecting to Shell by scanning a QR code it presents, displaying the user's public keys and addresses across derivation paths (BIP-44 for EVM and Bitcoin legacy, BIP-84 for native SegWit, BIP-49 for nested SegWit), and signing a simple message with one of those keys.
## Motivation
This dApp will serve as a reference implementation showing how any dApp can integrate directly with Shell without a browser extension. A working example that developers can read, run, and fork lowers the barrier to building on Shell significantly.
## Success Criteria
### Functionality
- [ ] The dApp connects to Shell by scanning a QR code, with no browser extension or native app required.
- [ ] After connection, the dApp displays the user's public keys and addresses for BIP-44 (EVM and Bitcoin legacy), BIP-84 (native SegWit), and BIP-49 (nested SegWit) derivation paths.
- [ ] The dApp asks the user for a message to sign and to choose one of the above keys. The dApp then provides a QR code for Shell to sign this message. personal_sign (EIP-191) is used for EVM, and BIP-322 for Bitcoin. Shell scans the QR and returns the signature to the dApp, completing the full QR-based signing round-trip.
- [ ] The entire interaction is airgapped — no data leaves or enters Shell except via QR codes.
- [ ] Documentation written as a developer integration guide, and a clean public repository under MIT or Apache-2.0.
### Reliability
- [ ] If a QR scan fails or times out, the dApp surfaces a clear error and allows the user to retry without losing connection state.
- [ ] The dApp handles malformed or unexpected QR payloads gracefully without crashing.
### Performance
- [ ] The animated QR code display renders at a frame rate sufficient for reliable scanning on common mobile devices, documented with the UR library settings used.
### Supportability
- [ ] End-to-end integration tests covering the connection, address display, and signing flows are included in CI.
- [ ] CI must be green on the default branch.
- [ ] A README documents end-to-end usage: local build instructions, step-by-step instructions for connecting Shell and completing a signing round-trip, and the QR exchange format.
- [ ] A recorded video demo of the end-to-end flow (QR connection, address display, and message signing) is included in the submission.
## Scope
### In Scope
- Web dApp integrating with Shell via QR codes: connection, address display across derivation paths, and message signing.
- Developer integration guide covering QR exchange format, connection flow, derivation paths, and signing protocol.
### Out of Scope
- Browser extensions, transaction broadcasting, full wallet functionality, mobile-native apps.
## Prize Structure
- **Total Prize:** $400
- **Effort:** Small
## Eligibility
Open to any individual or team. Submissions must be original work. Teams must hold the rights to all submitted code and agree to license it under MIT or Apache-2.0.
## Submission Requirements
- Public repository with all dApp code under MIT or Apache-2.0.
- Working demo (video or live link) showing connection, address display, and message signing.
- Developer integration guide covering the QR exchange format, connection flow, and signing protocol.
## Evaluation Process
Submissions are evaluated first-come-first-served against the success criteria. The first submission that satisfies all criteria wins.
Evaluators will independently clone the repository and run the application from a clean environment. Evaluators may also ask technical follow-up questions to verify authorship and understanding of the implementation.
## Resources
- [ERC-4527: QR Code Based Air-Gapped Signer Interface](https://eips.ethereum.org/EIPS/eip-4527) — the standard for QR-based communication between airgapped signers and watch-only wallets, built on UR (Uniform Resources). Keystone pioneered this standard and provides mature SDKs implementing it.
- [Keystone Developer Portal](https://dev.keyst.one/) — integration guides and documentation
- [keystone-sdk-web](https://github.com/KeystoneHQ/keystone-sdk-web) — TypeScript SDK implementing ERC-4527; handles UR encoding/decoding, animated QR codes, and supports both EVM and Bitcoin (including PSBTs and multi-account derivation paths)
- [@keystonehq/animated-qr](https://www.npmjs.com/package/@keystonehq/animated-qr) — animated QR code presenting and scanning
- [keystone-sdk-android-demo](https://github.com/KeystoneHQ/keystone-sdk-android-demo/) — Android demo app
- [keystone-sdk-ios-demo](https://github.com/KeystoneHQ/keystone-sdk-ios-demo/) — iOS demo app
- [Shell by Keystone](https://keyst.one/)
- [BIP-44: Multi-Account Hierarchy for Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki)
- [BIP-49: Derivation scheme for P2WPKH-nested-in-P2SH](https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki)
- [BIP-84: Derivation scheme for P2WPKH](https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki)
## Potential for Subsequent λPrizes
No follow-up prize is anticipated at this time.