<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Prediction Market | Attack on Life</title><link>https://en.1991421.cn/tag/prediction-market/</link><atom:link href="https://en.1991421.cn/tag/prediction-market/index.xml" rel="self" type="application/rss+xml"/><description>Prediction Market</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-US</language><lastBuildDate>Sat, 31 Jan 2026 23:25:57 +0800</lastBuildDate><image><url>https://en.1991421.cn/media/sharing.png</url><title>Prediction Market</title><link>https://en.1991421.cn/tag/prediction-market/</link></image><item><title>Polymarket Referral Code, Registration, and Deposit Guide 2026</title><link>https://en.1991421.cn/2026/01/31/polymarket-getting-started/</link><pubDate>Sat, 31 Jan 2026 23:25:57 +0800</pubDate><guid>https://en.1991421.cn/2026/01/31/polymarket-getting-started/</guid><description>&lt;blockquote>
&lt;p>Recently, there have been frequent posts in the community about Polymarket betting. I was curious about what this platform is and how it works. After understanding it, I think that instead of spending the same amount of money on &amp;ldquo;IQ tax&amp;rdquo; lottery tickets, it&amp;rsquo;s better to buy some predictions on Polymarket - at least you can learn something. So I tried it out and found there are some pitfalls. Here&amp;rsquo;s a record of the process of opening an account and using it.&lt;/p>
&lt;/blockquote>
&lt;h2 id="preconditions">
&lt;a class="heading-anchor-link" href="#preconditions">Preconditions&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="preconditions"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;ol>
&lt;li>&lt;strong>Network&lt;/strong>
Accessing Polymarket/binance requires a proxy.&lt;/li>
&lt;li>&lt;strong>Metamask Wallet - Not Required but Recommended&lt;/strong>
You need a Metamask wallet with USDC/USDT or other stablecoins. USDC is more recommended because Polymarket uses USDC for transactions.&lt;/li>
&lt;li>&lt;strong>Binance Account - Not Required but Recommended&lt;/strong>
A Binance account allows you to transfer USDC and Polygon to Metamask wallet.&lt;/li>
&lt;/ol>
&lt;p>Note: If you don&amp;rsquo;t have Metamask or Binance accounts, you can buy USDC directly on Polymarket with a credit card (MasterCard/Visa), but the fees are higher. My own solution: Buy USDC on Binance → Transfer to Metamask → Connect Metamask to Polymarket.&lt;/p>
&lt;h2 id="register-polymarket-account">
&lt;a class="heading-anchor-link" href="#register-polymarket-account">Register Polymarket Account&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="register-polymarket-account"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;ol>
&lt;li>You can register a Polymarket account directly. I chose to register by connecting with Metamask.&lt;/li>
&lt;/ol>
&lt;p>&lt;figure class="image-figure">
&lt;img
src="https://static.1991421.cn/2026/2026-01-31-233307.jpeg"
alt="https://static.1991421.cn/2026/2026-01-31-233307.jpeg"
loading="lazy"
decoding="async"
class="rounded-lg"
/>
&lt;/figure>&lt;/p>
&lt;p>Note: The site &lt;code>supports Chinese&lt;/code>. If you&amp;rsquo;re not comfortable with English, you can switch to Chinese.&lt;/p>
&lt;h2 id="deposit-funds">
&lt;a class="heading-anchor-link" href="#deposit-funds">Deposit Funds&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="deposit-funds"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;p>After logging in, click &amp;ldquo;Deposit&amp;rdquo; and select a method. I chose Metamask wallet transfer.&lt;/p>
&lt;p>&lt;figure class="image-figure">
&lt;img
src="https://static.1991421.cn/2026/2026-01-31-233606.jpeg"
alt="https://static.1991421.cn/2026/2026-01-31-233606.jpeg"
loading="lazy"
decoding="async"
class="rounded-lg"
/>
&lt;/figure>&lt;/p>
&lt;p>&lt;strong>Notes&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>Your Metamask wallet needs to have USDC, and also a small amount of MATIC for gas fees. If you don&amp;rsquo;t have MATIC, you can buy some Polygon network MATIC tokens from Binance and transfer them to your Metamask wallet. Without gas, transactions will fail, affecting exchanges and deposits to Polymarket.&lt;/li>
&lt;li>Deposits to Polymarket have fees. It&amp;rsquo;s recommended to deposit larger amounts less frequently. Avoid very small amounts like $5, as the fee percentage will be very high.&lt;/li>
&lt;/ol>
&lt;h2 id="betting">
&lt;a class="heading-anchor-link" href="#betting">Betting&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="betting"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;ol>
&lt;li>Since it&amp;rsquo;s my first time playing, I tried a bet and found that the transaction itself has no fees. After trading, you can buy/sell predictions or wait for settlement when it expires.&lt;/li>
&lt;li>If you&amp;rsquo;re not familiar, it&amp;rsquo;s recommended to bet &lt;code>$1&lt;/code> each time. The returns will be small, but the risk and loss will be much smaller.&lt;/li>
&lt;/ol>
&lt;h2 id="withdraw-funds">
&lt;a class="heading-anchor-link" href="#withdraw-funds">Withdraw Funds&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="withdraw-funds"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;p>Withdrawing is also very convenient - you can withdraw directly to your Metamask wallet. I haven&amp;rsquo;t actually withdrawn yet; I&amp;rsquo;ll try it when I get a chance.&lt;/p>
&lt;h2 id="app-and-referral-code">
&lt;a class="heading-anchor-link" href="#app-and-referral-code">App and Referral Code&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="app-and-referral-code"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;p>Polymarket has a US-region iOS app and supports referral codes plus newcomer rewards:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Referral code source&lt;/strong>: You can usually find your invite link in the Polymarket account page or in community channels such as Twitter and Telegram.&lt;/li>
&lt;li>&lt;strong>New user reward&lt;/strong>: If a new user registers through an invite link and completes the first deposit, both sides may receive reward USDC.&lt;/li>
&lt;li>&lt;strong>For users in China&lt;/strong>: The iOS app requires a non-China Apple ID. A US Apple ID works best.&lt;/li>
&lt;/ul>
&lt;h2 id="polymarket-referral-code-faq">
&lt;a class="heading-anchor-link" href="#polymarket-referral-code-faq">Polymarket Referral Code FAQ&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="polymarket-referral-code-faq"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;p>&lt;strong>Q: Where do I get a Polymarket referral code?&lt;/strong>&lt;br>
A: After logging in at polymarket.com, check your account area or community-shared invite links. Twitter and Telegram communities often share active links.&lt;/p>
&lt;p>&lt;strong>Q: Can mainland China users access Polymarket?&lt;/strong>&lt;br>
A: Yes, but you need stable proxy access to polymarket.com. Funding is usually done by buying USDC on Binance or Bybit and transferring it into your wallet.&lt;/p>
&lt;h2 id="-add-file-usersalanhegithubalanheblog-aol-encontentblog了解ledger硬件钱包md">
&lt;a class="heading-anchor-link" href="#-add-file-usersalanhegithubalanheblog-aol-encontentblog%e4%ba%86%e8%a7%a3ledger%e7%a1%ac%e4%bb%b6%e9%92%b1%e5%8c%85md">&lt;strong>Q: Do referral codes expire?&lt;/strong>&lt;br>
A: Many invite links are time-limited. If one no longer works, generate or request a newer one.
*** Add File: /Users/alanhe/GitHub/alanhe/blog-aol-en/content/blog/了解Ledger硬件钱包.md&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="-add-file-usersalanhegithubalanheblog-aol-encontentblog了解ledger硬件钱包md"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;p>title: &amp;ldquo;Understanding Ledger Hardware Wallets&amp;rdquo;
date: 2026-03-20T09:42:15+08:00
slug: understanding-ledger-hardware-wallet
description: &amp;lsquo;A practical introduction to how Ledger hardware wallets work, how transaction signing works, and what is required to build Ledger support for a custom blockchain.&amp;rsquo;
tags:&lt;/p>
&lt;ul>
&lt;li>Ledger&lt;/li>
&lt;li>Hardware Wallet&lt;/li>
&lt;li>Crypto Assets
categories: [&amp;ldquo;Programming&amp;rdquo;]
foreign_version: true
image:
filename: &lt;a href="https://www.cashbackisl.com/wp-content/uploads/2026/02/copertina-27426-1.webp" target="_blank" rel="noopener">https://www.cashbackisl.com/wp-content/uploads/2026/02/copertina-27426-1.webp&lt;/a>
alt_text: &amp;lsquo;Ledger hardware wallet product photo&amp;rsquo;&lt;/li>
&lt;/ul>
&lt;hr>
&lt;blockquote>
&lt;p>Ledger &lt;code>/'ledʒər/&lt;/code> is a hardware wallet brand. I recently needed to verify the signing flow for a new blockchain, so I tested it with a Ledger Nano X device.&lt;/p>
&lt;p>This post records the process and the main technical points.&lt;/p>
&lt;/blockquote>
&lt;h2 id="what-it-is">
&lt;a class="heading-anchor-link" href="#what-it-is">What It Is&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="what-it-is"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;p>A Ledger device stores private keys securely through physical isolation and a secure element chip.&lt;/p>
&lt;h2 id="what-it-does">
&lt;a class="heading-anchor-link" href="#what-it-does">What It Does&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="what-it-does"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;ol>
&lt;li>Private key storage without exposing the key to the computer or phone&lt;/li>
&lt;li>Transaction signing with the signing action completed on the device itself&lt;/li>
&lt;/ol>
&lt;p>&lt;figure class="image-figure">
&lt;img
src="https://www.cashbackisl.com/wp-content/uploads/2026/02/copertina-27426-1.webp"
alt="Ledger hardware wallet"
loading="lazy"
decoding="async"
class="rounded-lg"
/>
&lt;/figure>&lt;/p>
&lt;h2 id="example-ethereum-signing-flow">
&lt;a class="heading-anchor-link" href="#example-ethereum-signing-flow">Example: Ethereum Signing Flow&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="example-ethereum-signing-flow"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;div class="mermaid">sequenceDiagram
box Client
participant U as User
participant D as dApp
participant M as MetaMask
end
box External Signing Device
participant L as Ledger Device (Ethereum App)
end
box Blockchain Infrastructure
participant R as RPC / Ethereum Network
end
U->>D: Start transfer / approve / swap
D->>M: Ask wallet to create a transaction
M->>R: Fetch nonce / gas / fee / chainId
R-->>M: Return on-chain parameters
M->>U: Show transaction details
U->>M: Confirm in MetaMask
M->>L: Send unsigned transaction data
L->>U: Show key details on the device screen
U->>L: Confirm or reject with hardware buttons
alt User confirms
L-->>M: Return signature
M->>R: Broadcast signed transaction
R-->>M: Return tx hash / pending / confirmed
M-->>U: Show transaction status
else User rejects
L-->>M: Reject signing
M-->>U: Transaction canceled / failed
end
&lt;/div>
&lt;h2 id="supporting-a-custom-blockchain">
&lt;a class="heading-anchor-link" href="#supporting-a-custom-blockchain">Supporting a Custom Blockchain&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="supporting-a-custom-blockchain"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;p>If you want a custom chain to use Ledger for secure key storage and signing, there are two main parts:&lt;/p>
&lt;ol>
&lt;li>Build a &lt;code>Ledger Device App&lt;/code> that runs on the hardware device and knows how to sign transactions for your chain.&lt;/li>
&lt;li>Build a plugin or integration layer that connects MetaMask or another wallet to that device app.
If your stack uses libraries such as &lt;code>web3.js&lt;/code>, you may also need to extend those libraries to support signing through the Ledger device app.&lt;/li>
&lt;/ol>
&lt;h3 id="call-chain--data-flow">
&lt;a class="heading-anchor-link" href="#call-chain--data-flow">Call Chain / Data Flow&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="call-chain--data-flow"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Your code
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Ledger SDK (wraps APDU)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">WebHID (transport)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Ledger device
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Your ChainMaker App (parses APDU)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>HID&lt;/code> means human interface device, and &lt;code>APDU&lt;/code> means application protocol data unit.&lt;/p>
&lt;h3 id="ledger-device-app-requirements">
&lt;a class="heading-anchor-link" href="#ledger-device-app-requirements">Ledger Device App Requirements&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="ledger-device-app-requirements"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h3>&lt;ol>
&lt;li>The device app is typically written in &lt;code>C&lt;/code> or &lt;code>Rust&lt;/code> because device resources are limited.
&lt;ul>
&lt;li>Rust template: &lt;a href="https://github.com/LedgerHQ/app-boilerplate-rust" target="_blank" rel="noopener">https://github.com/LedgerHQ/app-boilerplate-rust&lt;/a>&lt;/li>
&lt;li>C template: &lt;a href="https://github.com/LedgerHQ/app-boilerplate" target="_blank" rel="noopener">https://github.com/LedgerHQ/app-boilerplate&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Install the official &lt;a href="https://marketplace.visualstudio.com/items?itemName=LedgerHQ.ledger-dev-tools" target="_blank" rel="noopener">VS Code extension&lt;/a> for development and debugging.&lt;/li>
&lt;li>Building the device app requires Docker because Ledger provides a containerized toolchain.&lt;/li>
&lt;li>For simulator-based testing, install &lt;a href="https://github.com/LedgerHQ/speculos" target="_blank" rel="noopener">Speculos&lt;/a>.&lt;/li>
&lt;/ol>
&lt;h3 id="vs-code-extension">
&lt;a class="heading-anchor-link" href="#vs-code-extension">VS Code Extension&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="vs-code-extension"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h3>&lt;p>The extension provides a solid development, build, and debug workflow, which helps a lot when iterating on a device app.&lt;/p>
&lt;p>&lt;figure class="image-figure">
&lt;img
src="https://static.1991421.cn/2026/03/2026-03-24-144706.jpeg"
alt="Ledger VS Code tools screenshot"
loading="lazy"
decoding="async"
class="rounded-lg"
/>
&lt;/figure>&lt;/p>
&lt;h3 id="real-device-vs-simulator">
&lt;a class="heading-anchor-link" href="#real-device-vs-simulator">Real Device vs Simulator&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="real-device-vs-simulator"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Item&lt;/th>
&lt;th style="text-align: left">Real Device (WebHID)&lt;/th>
&lt;th style="text-align: left">Simulator (Speculos)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Connection&lt;/td>
&lt;td style="text-align: left">&lt;code>TransportWebHID.create()&lt;/code> with browser HID picker&lt;/td>
&lt;td style="text-align: left">&lt;code>SpeculosHttpTransport.open(url)&lt;/code> over local HTTP&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Protocol&lt;/td>
&lt;td style="text-align: left">USB HID frames via the browser WebHID API&lt;/td>
&lt;td style="text-align: left">HTTP JSON such as &lt;code>{ data: &amp;quot;hex...&amp;quot; }&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">User confirmation&lt;/td>
&lt;td style="text-align: left">Physical button confirmation is required&lt;/td>
&lt;td style="text-align: left">Manual confirmation in Speculos&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Signer setup&lt;/td>
&lt;td style="text-align: left">Usually pass &lt;code>signDigest&lt;/code> and &lt;code>fetchPublicKey&lt;/code> explicitly&lt;/td>
&lt;td style="text-align: left">Defaults are often enough&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Later flow&lt;/td>
&lt;td style="text-align: left">&lt;code>isReady()&lt;/code> -&amp;gt; &lt;code>fetchPublicKey()&lt;/code> -&amp;gt; &lt;code>signMessage()&lt;/code> -&amp;gt; submit on-chain&lt;/td>
&lt;td style="text-align: left">Same overall flow&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="submission-and-release">
&lt;a class="heading-anchor-link" href="#submission-and-release">Submission and Release&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="submission-and-release"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h3>&lt;p>What you submit is not a binary package. You submit the app source repository plus the required deliverables. Ledger then forks your app repository and manages deployment in their own release flow.&lt;/p>
&lt;p>Typical process:&lt;/p>
&lt;ol>
&lt;li>Contact the Ledger team and submit the project form:
&lt;a href="https://developers.ledger.com/docs/device-app/submission-process/submission-form" target="_blank" rel="noopener">https://developers.ledger.com/docs/device-app/submission-process/submission-form&lt;/a>&lt;/li>
&lt;li>Make sure the code meets Ledger&amp;rsquo;s security and cryptography requirements.&lt;/li>
&lt;li>Prepare deliverables:
&lt;ul>
&lt;li>The app source repository&lt;/li>
&lt;li>&lt;code>docs/apdu.md&lt;/code> describing APDU commands and status words&lt;/li>
&lt;li>User documentation&lt;/li>
&lt;li>Device compatibility information for Nano S Plus, Nano X, Stax, and Flex&lt;/li>
&lt;li>Legal entity information and contact details&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Submit the official device app or plugin form.&lt;/li>
&lt;li>Pass the security audit before Ledger publishes the app.&lt;/li>
&lt;/ol>
&lt;p>This review process is heavy and can take weeks or even months.&lt;/p>
&lt;h2 id="how-end-users-use-it">
&lt;a class="heading-anchor-link" href="#how-end-users-use-it">How End Users Use It&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="how-end-users-use-it"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;ol>
&lt;li>The user installs Ledger software and sets up the device.&lt;/li>
&lt;li>The user installs the target app onto the Ledger device.
&lt;ul>
&lt;li>If the app has not been officially published yet, you usually sideload it through the official VS Code tools.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>&lt;figure class="image-figure">
&lt;img
src="https://static.1991421.cn/2026/03/2026-03-24-171254.jpeg"
alt="Ledger app sideload example"
loading="lazy"
decoding="async"
class="rounded-lg"
/>
&lt;/figure>&lt;/p>
&lt;h2 id="other-notes">
&lt;a class="heading-anchor-link" href="#other-notes">Other Notes&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="other-notes"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;h3 id="why-are-there-so-many-models-and-why-are-they-expensive">
&lt;a class="heading-anchor-link" href="#why-are-there-so-many-models-and-why-are-they-expensive">Why are there so many models, and why are they expensive?&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="why-are-there-so-many-models-and-why-are-they-expensive"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h3>&lt;ol>
&lt;li>A hardware wallet is more than just a security chip.&lt;/li>
&lt;li>Different models trade off security level, user experience, storage capacity, and use case, so the pricing differs naturally.&lt;/li>
&lt;/ol>
&lt;h3 id="about-navigatorhid">
&lt;a class="heading-anchor-link" href="#about-navigatorhid">About &lt;code>navigator.hid&lt;/code>&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="about-navigatorhid"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h3>&lt;p>&lt;code>navigator.hid&lt;/code> (WebHID) connects to physical USB HID devices. Speculos is only a simulator that exposes TCP sockets and an HTTP API. It is not a real HID device, so the browser cannot discover it through WebHID scanning.&lt;/p>
&lt;h2 id="references">
&lt;a class="heading-anchor-link" href="#references">References&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="references"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://developers.ledger.com/docs/device-app/integration/how-to/app-boilerplate" target="_blank" rel="noopener">https://developers.ledger.com/docs/device-app/integration/how-to/app-boilerplate&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://developers.ledger.com/docs/device-app/beginner/vscode-extension" target="_blank" rel="noopener">https://developers.ledger.com/docs/device-app/beginner/vscode-extension&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://developers.ledger.com/docs/device-app/submission-process/submission-form" target="_blank" rel="noopener">https://developers.ledger.com/docs/device-app/submission-process/submission-form&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://developers.ledger.com/docs/device-interaction/integration/how_to/transports" target="_blank" rel="noopener">https://developers.ledger.com/docs/device-interaction/integration/how_to/transports&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.cashbackisl.com/ledger-cold-wallet-guide-hk/" target="_blank" rel="noopener">https://www.cashbackisl.com/ledger-cold-wallet-guide-hk/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/Smart_card_application_protocol_data_unit" target="_blank" rel="noopener">https://en.wikipedia.org/wiki/Smart_card_application_protocol_data_unit&lt;/a>
*** Add File: /Users/alanhe/GitHub/alanhe/blog-aol-en/content/blog/了解OneKey硬件钱包.md&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>title: &amp;ldquo;Understanding OneKey Hardware Wallets&amp;rdquo;
date: 2026-03-25T00:00:00+08:00
slug: understanding-onekey-hardware-wallet
description: &amp;lsquo;A short note on OneKey as another mainstream hardware wallet option, useful when comparing technical choices against Ledger.&amp;rsquo;
tags:&lt;/p>
&lt;ul>
&lt;li>OneKey&lt;/li>
&lt;li>Hardware Wallet&lt;/li>
&lt;li>Crypto Assets
categories: [&amp;ldquo;Programming&amp;rdquo;]
foreign_version: true&lt;/li>
&lt;/ul>
&lt;hr>
&lt;blockquote>
&lt;p>I recently needed to research hardware wallets for work. After looking at Ledger, I also wanted to understand OneKey, since it is another mainstream option and worth considering in a technical evaluation.&lt;/p>
&lt;/blockquote>
&lt;h2 id="related-documentation">
&lt;a class="heading-anchor-link" href="#related-documentation">Related Documentation&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="related-documentation"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://developer.onekey.so/zh/" target="_blank" rel="noopener">https://developer.onekey.so/zh/&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="final-thoughts">
&lt;a class="heading-anchor-link" href="#final-thoughts">Final Thoughts&lt;/a>
&lt;button
class="heading-anchor"
type="button"
data-anchor="final-thoughts"
aria-label="Copy anchor link"
title="Copy anchor link"
>
&lt;span class="heading-anchor-wrap" aria-hidden="true">
&lt;svg class="heading-anchor-icon heading-anchor-icon-default" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" fill="currentColor">
&lt;path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z">&lt;/path>
&lt;/svg>
&lt;svg class="heading-anchor-icon heading-anchor-icon-copied" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor">
&lt;path d="M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm107.1 145.1L230.6 325.6c-6.2 6.2-16.4 6.2-22.6 0l-59-59c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l47.7 47.7 121.1-121.1c6.2-6.2 16.4-6.2 22.6 0s6.3 16.4.1 22.5z">&lt;/path>
&lt;/svg>
&lt;/span>
&lt;/button>
&lt;/h2>&lt;p>I personally think it&amp;rsquo;s more interesting than lottery tickets. I recommend everyone try small bets and don&amp;rsquo;t get too carried away.&lt;/p></description></item></channel></rss>