Ledger Live Mac Intel vs Apple Silicon: Launch Time and Responsiveness Under Translation





Ledger Live Mac Intel vs Apple Silicon: Native vs Rosetta


Ledger Live Mac Intel vs Apple Silicon: Launch Time and Responsiveness Under Translation

Here is a complete standalone HTML article comparing native arm64 vs x86-64 Rosetta 2 builds of the desktop wallet client, with practical verification steps and a comparison table for choosing the right bundle.

Research Notice: This article explains instruction-set behaviour, bundle slices and host-side accounting using publicly documented platform mechanisms; version numbers, download sizes, minimum operating systems and available packages change with each release and are published on the vendor’s official page.

Ledger Live Mac Intel vs Apple Silicon Performance comes down to one checkable fact: whether the bundle you launched contains an arm64 slice or an x86-64 slice that a translation layer must rewrite at load time. The difference is measurable at cold start, during a full portfolio refresh and while firmware streams to a connected signer, and it is invisible in routine account browsing. Install the arm64 build on M-series hardware, keep the x86-64 build only for machines that cannot run an arm64 slice, and confirm the architecture field after every update.

How the bundled client executes on each processor family

Execution is decided by the slice inside the application bundle, not by the name printed on the case. An arm64 slice runs directly on the M-series processors; an x86-64 slice is rewritten instruction by instruction by a translation layer when the process starts. The renderer and the background service both inherit that decision.

A slice is the compiled portion of a bundle that matches one instruction set, and a universal package carries more than one; the scripting engine that draws the interface is compiled separately for each slice.

Instruction translation costs startup and steady-state time

Translation is not a one-off conversion; the layer caches rewritten code and keeps a mapping table in memory, so both cold start and resident footprint grow. The cost shows up where the process touches a lot of native code at once – enumerating hundreds of accounts, decrypting a long operation history, or spawning the service that talks to the connected device. Pure scripting work inside the interface is affected far less, because the engine has already compiled it for the host.

The rendering thread, not the core count, sets the practical ceiling

Most visible lag inside the client comes from the interface thread and its drawing work, which is effectively single-threaded, so extra cores do not shorten it. Blocking work on that thread – a synchronous price refresh, a large table re-render, or a modal waiting on a device reply – freezes the window no matter how many cores sit idle. Moving work to background threads helps only when the task can genuinely leave the main thread.

Device communication is architecture-neutral

The link to a hardware signer is a USB or Bluetooth pipe carrying small fixed-size frames, and its speed is dominated by the device’s own firmware loop rather than by the host instruction set. Both bundles therefore produce nearly identical confirmation timing. What changes is scheduling: a translated process busy rewriting code can delay the read loop by a few milliseconds, which shows as a stalled progress bar, not as a different cryptographic result.

Who runs which bundle, and when the difference becomes visible

Anyone on an M-series machine should run the arm64 bundle; the x86-64 bundle exists for pre-2020 hardware and for completing an update that has not yet shipped a native build. The difference is visible at cold start, during a full portfolio refresh, and while a firmware image streams to a connected signer; routine account browsing feels similar on both.

Cold start and the first account sync

Launch time splits into loading the bundled runtime and building the local database view. The runtime load is where a translated bundle pays most, because every native module inside it must be rewritten before the first window appears. The first sync then walks the same derivation paths and the same price endpoints on both architectures, so the search itself takes comparable time; only the surrounding overhead differs. A user with one account notices seconds; a user with dozens notices more.

Streaming a firmware image to a connected device

Firmware transfer is the longest single operation most users perform, and it is paced by the device, which acknowledges each chunk before the next is sent. The host only has to keep the pipe fed. On a translated process the read loop competes with rewrite activity, so a slow transfer is more likely to stall visibly; on a native process the same transfer runs at the device-limited rate with fewer host-side hiccups.

Eight-gigabyte machines that also run a browser

On a machine with 8 GB of memory, the client competes with a browser, a mail program and a background indexer for the same pool, and the translated bundle asks for more of it. Paging to the internal drive then dominates everything else, which is why users on small machines report the widest gap between the two builds. Closing the browser recovers more speed than switching builds on such a machine.

Which bundle should you install on your machine?

Install the arm64 bundle on every M-series machine and the x86-64 bundle only where the processor is a Core-generation part. Where a universal bundle is published, it covers both and removes the decision. The download page states which bundles exist for the current release, and the architecture field in the system information panel states which one you are actually running.

Three desktop bundles and one alternative way to watch a portfolio are compared below on the criteria that decide the choice: which hardware each one fits, what constrains it, the effort required at first launch, and how a reader confirms which is installed. Download size and minimum operating system are published on the official source for each release.

Desktop client options compared by fit, constraint and verification
Option Fits best Main constraint How to verify
arm64-native bundle Machines with M-series processors Will not launch on older x86-64 hardware Architecture field reads arm64 for the process
x86-64 bundle under translation Pre-2020 laptops and desktops Extra startup time and larger resident footprint Architecture field reads x86_64 for the process
Universal bundle Mixed fleets and shared installs Larger download than either single-slice build Package inspection lists two slices
Mobile companion app Monitoring balances away from the desk No desktop-grade export or reporting Version shown in the settings screen

The arm64 bundle is the default answer and the only one that avoids translation entirely; it is the wrong choice only when the machine predates the M-series. The x86-64 bundle remains correct on hardware that cannot run an arm64 slice, and it is the fallback when an update has not yet produced a native build – check the release notes on the vendor’s download page for the desktop client rather than assuming a universal package exists. A universal bundle suits shared or family machines, at the cost of a larger download.

Reading the architecture field instead of trusting the file name

File names are unreliable: an installer labelled for one architecture can still contain the other slice, and an updater can replace a native app with a translated one without asking. The system information panel and the activity viewer both expose the architecture of a running process, which is the only authoritative signal. Check it after every update, because the mismatch is silent – the client starts and works, just more slowly, and no error is shown.

Where the universal bundle is the safer operational choice

On a fleet that mixes old and new hardware, one universal package removes a class of support calls, because the same file works everywhere and the operating system picks the matching slice. The trade-off is download size and, occasionally, an older build of a bundled dependency. For a single personal machine, the architecture-specific package keeps the install smaller and the update path simpler.

Translation overhead, memory ceilings and benchmarks that mislead

Three mistakes explain most bad advice here: quoting a benchmark from an unrelated workload, assuming one bundle is slower everywhere, and reading a permission prompt as a processor limit. Translation costs are real but bounded, and they vanish whenever the work is waiting on the network or on the attached device.

Benchmarks borrowed from the wrong workload

A published comparison that measures video export, compilation or gaming says nothing about a portfolio client whose heavy work is text parsing, local database queries and short cryptographic operations. The relevant measurements are cold start to a usable window, the time to refresh a full account set, and the time to complete a device-confirmed transfer. If a comparison does not name those operations, its numbers cannot be transferred to this application.

Unified memory shared with the graphics side

On M-series machines the processor and graphics cores draw from one memory pool, so a translated process holding a larger resident set competes with everything else, including window drawing. The visible symptom is not a crash but stutter while scrolling a long operation list. Reducing the number of simultaneously loaded accounts, or closing other heavy applications, changes the measured result more than switching between the two bundles.

Permission dialogs mistaken for slowness

First contact with the signing device triggers an operating-system dialog for the USB or Bluetooth interface; while that dialog is open, the client appears frozen because the read loop cannot start. This happens identically on both bundles and is not evidence of translation cost. Granting the permission once and retrying the same operation is the way to separate a real slowdown from a blocked prompt.

How do you verify which architecture your client is running?

You need the application bundle on disk, the system information panel, and the release notes for the version you installed. The procedure below confirms the instruction set of the running process, checks it against what the download page offers, and repeats the check after an update, because an updater can silently replace a native bundle with a translated one.

Step 1: Quit the client completely

Quit the client completely, including its menu-bar helper, rather than closing the window. A background helper keeps the old process alive, and the architecture you read afterwards would belong to the wrong instance.

Step 2: Read the bundle architecture

Open the system information panel, select the applications list and locate the entry for the client. This reports the architecture of the bundle stored on disk, which is the value you compare against the running process in the next step.

Step 3: Read the running process

Launch the client and read the architecture of its main process in the activity viewer. A translated process is listed as x86_64 while a native one is listed as arm64, and the difference is invisible in the interface itself.

Step 4: Compare against the published packages

Compare both readings with the release notes and download options listed on the vendor’s download page. If only an x86-64 package exists for your version, the translated reading is expected and is not a misconfiguration.

Step 5: Repeat after every update

Repeat the check after every update, reinstall or system migration. Updaters replace the bundle in place, and a translated build can appear where a native one used to run without any warning in the interface.

What still shifts as the runtime and the processors change?

Three things move on their own schedules: the platform maker’s support window for the translation layer, the bundled runtime the client depends on, and the processor generations the vendor compiles for. None of these are fixed by the wallet software itself, so any comparison older than the current release should be treated as historical.

The translation layer’s support window is set by the platform maker

Translation is a compatibility bridge, and the company that ships the operating system decides how long it stays. When it is withdrawn or restricted, the x86-64 bundle stops working on newer systems even though nothing about the wallet changed. That is the main reason to prefer a native bundle now: it removes a dependency whose end date you do not control, and the announcement will come from the platform vendor, not from the wallet publisher.

Bundled runtime upgrades arrive on their own cadence

The client does not ship its own drawing engine and scripting runtime from scratch; it depends on upstream versions that gain and lose optimisations release by release. A build that measured poorly against another at one version can reverse at the next. Treat any side-by-side figure as valid only for the two version numbers actually tested, and re-measure after a major release.

Comparisons that mix different sessions

Reports often compare a cold first launch against a warm second one, or a fresh install against a database that already holds years of history, and then attribute the difference to the processor. Match the state before comparing: same account count, same cache condition, same network, same connected device. Where a figure depends on version, machine or account type, take it from the vendor’s published release notes rather than a third-party summary.

Here is the standalone HTML article comparing native Apple Silicon and Rosetta 2 performance for Ledger Live on Mac, covering launch time, UI responsiveness, and practical verification steps.

Research Notice: This article distinguishes measured startup and redraw behaviour from system settings that change it; version-specific details belong to the vendor’s official download page, and no benchmark numbers are quoted because they shift with storage, memory and release.

Ledger Live Mac Intel vs Apple Silicon Performance narrows to one install decision: an arm64 package the processor executes directly, or an x86_64 package a translation layer rewrites as it runs. Cold starts and interface redraws expose that decision first, because both depend on how much work finishes before the first window paints. The sections below separate the mechanisms from the habits and settings that quietly change the numbers.

Native Apple Silicon vs Rosetta 2: Ledger Live Launch Time and UI Responsiveness

The arm64 build opens faster and holds a steadier interface than the translated x86_64 package on the same machine, and the gap is widest on the first launch after a restart or during chart refreshes. Install the arm64 download on current chips and keep the x86_64 package only where no arm64 build exists.

The table weighs four configurations of the same desktop client: a native arm64 package on current chips, an x86_64 package running through the translation layer on those same chips, an x86_64 package on prior-generation chips where no translation occurs at all, and an arm64 package deliberately forced through the translation layer as a control. Criteria are the work completed before the first window draws, redraw cadence during scroll and refresh, and the situation each configuration genuinely suits.

Desktop build configurations compared on startup work, redraw cadence and fit
Build and host Cold start Interface redraw When it fits
arm64 package on current chips Shortest; no instruction rewriting before the first window Even frame timing on charts and long lists Default choice for anyone on current hardware
x86_64 package on current chips Longer; rewriting begins before the window appears Visible stutter during refresh and scrolling Fallback only when the arm64 package will not run
x86_64 package on prior-generation chips Baseline for that hardware; no layer engages Set by chip and storage, not by the layer The only realistic option on those machines
arm64 package forced through the layer Adds delay on top of the native start Cadence falls toward the translated path Diagnostic comparison only, never a daily setup

Each configuration fits a narrow case. The arm64 package on current hardware suits anyone who scrolls history or watches live balances, and it stops fitting only if a signed dependency has no arm64 slice, which the vendor lists per release. The translated package remains reasonable on machines that never had a native build, and it stops being reasonable the moment an arm64 download exists for the same machine, because the extra work buys nothing. Forcing a native binary through the layer is an exception that proves the point: it isolates the layer’s cost from every other variable, and it should be reversed immediately afterwards.

Cold-start cost sits in the seconds before the first window

Rewriting happens before the first window exists, so it inflates the interval a user actually feels: the pause between a double-click and a visible frame. The layer converts blocks of instructions in batches and stores the results in a cache, which means the second launch of the same version reuses them and looks closer to native speed. That cache is keyed to the binary, so every application update discards it and the slow first start returns once per version. Anyone judging the two packages from a single warm launch will understate the difference by a wide margin.

Redraw cadence depends on how often work crosses into system frameworks

A translated call into a system framework pays a boundary cost that direct execution avoids, and a scrolling list makes that crossing repeatedly rather than once. The effect compounds during continuous refresh: a price tick that redraws a chart triggers layout, drawing and text shaping in sequence, and each stage inherits the same small overhead. Because the overhead is per call rather than per pixel, the visible result is uneven frame pacing instead of a uniformly slower interface. Rows with animated transitions and expanding detail panes are where that unevenness becomes easiest to notice.

How the translation layer alters startup work and redraw cadence

Rewriting happens once per binary and then persists in a cache, so steady-state cost is smaller than first-run cost. What never disappears is indirection: every call that crosses from rewritten code into a system framework pays a boundary cost, and interface redraws make those crossings thousands of times per second while a window is on screen.

Rewritten blocks persist in a cache after the first launch

The layer decodes instructions ahead of execution and keeps the converted output on disk, so subsequent launches skip most of the conversion work. That is why a second start of the same build feels noticeably closer to a native one. The cache invalidates whenever the binary changes, which ties the slow first start to every application update rather than to the hardware. A user who updates frequently therefore meets the slow path more often than someone who stays on one version for months, even on identical machines.

Framework calls cross a boundary that direct execution skips

Each call into a shared system framework passes through a translation shim that marshals arguments and converts return values. The single crossing is cheap; the aggregate is not, and an interface built from many small calls accumulates more of them than one built from few large ones. This is why two screens in the same application can differ: a static settings page barely touches the boundary, while a dashboard that redraws continuously touches it constantly. The mechanism also explains why faster storage helps less than expected, since the dominant cost is conversion and dispatch rather than reading bytes.

Which workflows actually expose the gap?

Three workflows expose it: the first window after an operating system restart, scrolling a long transaction history, and any screen that refreshes balance or price data continuously. Routine actions such as opening a settings pane or reviewing a single transaction show a difference too small to notice, which is why impressions formed from light use often contradict measured timings.

First window after an operating system restart

On a cold boot, file caches are empty and the system is still launching its own background services, so the application competes for disk and processor time at the worst moment. The translated build adds its conversion work on top of that contention, while the native build starts competing only for resources. Measuring both packages in the same minute after a restart is the fairest comparison a single machine allows, and it is also the scenario most users describe when they say the client feels slow. Repeating it three times and discarding the first run removes most of the noise.

Scrolling a long transaction history

A history list forces the interface to build, lay out and draw many rows as the viewport moves, and each row triggers several framework calls. Under translation those calls pass through the boundary in sequence, so the total time per frame grows with row complexity rather than with row count alone. Rows with icons, formatted amounts and address labels cost more than plain text rows, which is why a filtered view can feel smoother than an unfiltered one on the same account. Watching for dropped frames while flicking through the list is a more reliable signal than timing a single scroll.

Continuously refreshing dashboards

A screen that redraws on a timer keeps the boundary busy even when the user is not touching anything, so it exposes the difference without any input at all. Chart rendering combines text shaping, path drawing and layout recalculation, and each stage repeats on every update. When the update interval is shorter than the time a frame needs, the interface queues work and the visible result is lag between a value changing and the display catching up. Shortening the refresh interval makes the translated build fall behind sooner, which is why the setting exaggerates the gap.

Limits, risks and the mistakes that skew side-by-side tests

The main risk is drawing a conclusion from a comparison that changed two variables at once. Heat, background indexing and different storage devices each move launch time by more than the build choice does, so a test run on two separate machines measures the machines rather than the packages, and the result usually favours whichever device happens to be newer.

Heat flattens the difference within minutes

Sustained load pushes a thin laptop into a reduced clock state, and once that happens both builds slow down and the measured gap narrows. A test that runs the translated build first and the native build second therefore records an advantage for the second package that belongs to the machine’s cooling behaviour. Alternating the runs, or testing an interface that does not push either build hard, keeps thermal drift from deciding the outcome. Anyone comparing chart scrolling should watch clock behaviour alongside the timings rather than trusting a single stopwatch reading.

Background sync and indexing distort first-run timing

Both builds synchronise chain data and rebuild local indexes after an update or a long absence, and that work dwarfs startup differences until it finishes. Running a timing test while synchronisation is still in progress produces numbers that reflect network latency and database writes instead of code paths. Waiting until the interface stops showing pending work, then running three cold starts and taking the median, gives a value the build choice actually controls. The same rule applies after restoring from a backup, when indexing restarts from zero.

Comparing two machines instead of two packages

A newer device with faster storage will beat an older one regardless of which package runs on each, so cross-device comparisons answer a different question. The only fair setup installs both packages on one machine, alternates their launch order, and clears the rewrite cache between runs so neither benefits from the other’s leftovers. Where a single machine cannot run both versions because no translated package is offered, the honest statement is that the comparison was not performed rather than that the difference is small.

How do you confirm which code path your installation runs?

Confirm the code path by reading the architecture label on the download page, then checking what the running process is tagged as and testing one forced translated launch for comparison. You need both packages available, a stopwatch or the system activity viewer, and one machine that stays on the same power source and network throughout the test.

Step 1: Read the architecture label on the official download page before installing.

Read the architecture label on the official download page before installing. The two packages are listed separately, and the label is the only reliable way to know which one an installer places on disk.

Step 2: Open the application’s information panel and note the kind entry.

Open the application’s information panel and note the kind entry. The panel reports whether the running copy is built for the current instruction set or for the older one that requires translation.

Step 3: Check the architecture column for the running process in the system activity viewer.

Check the architecture column for the running process in the system activity viewer. A process launched through the translation layer is tagged there, which confirms what the information panel reported.

Step 4: Force a single translated run and time the cold start yourself.

Force a single translated run and time the cold start yourself. Do the comparison on one machine, alternating the two configurations, so storage and memory stay constant across runs.

Step 5: Remove the launch override and confirm the tag disappears.

Remove the launch override and confirm the tag disappears. Leaving the override in place means every later measurement reflects the slower path and not the machine.

What stays unsettled as toolchains and release cadences shift

Two questions stay open: whether a single universal installer replaces the separate downloads, and how much of the remaining gap survives each framework upgrade the vendor ships. Neither answer is fixed, and both belong to the release notes rather than to forum impressions, which age quickly and describe versions that are already superseded.

A universal installer would remove the choice entirely

Packaging both instruction-set slices into one download would make the decision invisible, and the layer would only matter for users on hardware that predates the current chip family. Whether the vendor moves that way depends on installer size limits and signing workflow, neither of which is settled. Until then, the label on the download page remains the deciding factor, and it is worth checking on the vendor’s download page each time a major version arrives, because the available packages do change between releases.

Long-run battery and thermal data remain thin

Published comparisons concentrate on start-up and interaction, while multi-hour measurements of power draw under the translation layer are rare and hard to reproduce. A single test run cannot separate the layer’s cost from screen brightness, network activity and sync load, all of which dominate over a full work session. Treat any battery claim without a stated test duration, brightness level and sync state as unverified, and measure your own usage if the machine runs on a battery for long stretches.

Layer updates arrive with the operating system, not with the application

The translation layer is maintained by the operating system vendor, so its speed can change with a system update that the application had no part in. That means an interface can feel different after a routine system patch even though the application binary is unchanged, which is why a bad measurement should be repeated before any conclusion is drawn. Checking the system version alongside the application version keeps this variable visible instead of hidden inside a date.

Q&A:

Does Ledger Live run natively on Apple Silicon, or does it still use Rosetta on an M1/M2/M3 Mac?

It depends on the Ledger Live version. Newer releases for macOS are built as universal or Apple Silicon-native apps, so they can run without Rosetta 2. Older releases were Intel-only and macOS would translate them through Rosetta. You can check by opening Ledger Live, going to Settings > About, or by looking at the app in Finder > Get Info. If “Open using Rosetta” is checked, the app is being translated. If it is unchecked and the app is universal, it uses the Arm code path on Apple Silicon. Using the native build usually gives faster startup, lower CPU use, and less battery drain than Rosetta. If you are on an older Ledger Live version, updating is the first thing to try.

Is there a real speed difference between an Intel MacBook Pro and an M1/M2/M3 Mac when opening Ledger Live, syncing accounts, and sending crypto?

Yes, but the size of the gap depends on the task. On Apple Silicon with a native build, Ledger Live tends to open in a second or two, account lists scroll more smoothly, and portfolio charts redraw with less lag. Syncing is partly limited by your internet connection and the blockchain nodes Ledger uses, so an Intel Mac with an SSD, 16 GB RAM, and a good connection can still feel close. Sending a transaction is light for both machines; the CPU waits on network and device confirmation. The biggest visible differences show up when you have many accounts, open price charts, or run Ledger Live while other apps are busy. An older dual-core Intel Mac with 8 GB RAM will feel the gap more than a late Intel quad-core or six-core model.

Why does Ledger Live make my Intel Mac’s fans spin up, but my M1 Mac stays quiet?

Ledger Live can trigger background sync, price updates, and USB or Bluetooth communication. On Intel Macs, those tasks can push the CPU to a higher power state, and the cooling system may spin the fans to keep temperatures down. Apple Silicon chips do the same work with less power and heat, so the fans may stay off or run slower. The app itself is not a heavy 3D game or video editor, so fan noise often points to other factors: an old macOS version, a failing battery, dust in the vents, many open tabs, or a third-party antivirus scanner. If your Intel Mac gets hot only during account sync, try closing other apps and checking Activity Monitor for CPU use. If it gets hot all the time, the issue may be system-level rather than Ledger Live.

Does Ledger Live use less battery on Apple Silicon than on Intel, and does Rosetta change that?

Apple Silicon Macs generally use less battery for the same Ledger Live tasks because the chip is more power-frugal at idle and under light load. A native Arm build gives the best result. If Ledger Live runs through Rosetta 2, it can use more CPU and battery than the native version, and startup may feel slower. On Intel Macs, battery life depends on the model, battery health, screen brightness, and whether the discrete GPU is active. For simple tasks like checking a balance or confirming a transaction, the difference may be small. For long sessions with many accounts and charts, an M-series MacBook Air or Pro can last longer and run cooler. If battery life is your main reason to switch, check whether your current Ledger Live version has an Apple Silicon build first.

Should I upgrade from an Intel Mac to an Apple Silicon Mac just for Ledger Live?

For most people, no. Ledger Live is not a demanding app, and an Intel Mac that already runs it without crashes or long sync delays can keep doing the job. The hardware wallet, firmware updates, and how you store your recovery phrase affect your safety more than the CPU inside your Mac. An upgrade makes sense if you also want better battery life, a cooler laptop, faster everyday macOS tasks, or you need a Mac that still gets current macOS updates. If you only use Ledger Live a few times a week to check balances or send funds, the money is better spent on a backup hardware wallet or a safe place for your seed phrase. If you have an old dual-core Intel Mac with 8 GB RAM and you see beachballs during every sync, an M1 or newer model will feel much more responsive.

Will Ledger Live feel much faster on an Apple Silicon Mac than on an Intel Mac, and does that change how quickly transactions confirm?

For most people, yes, the app itself feels quicker on an Apple Silicon Mac, but transaction confirmation speed is not mainly decided by the Mac’s processor. Ledger Live handles the interface, account syncing, price charts, portfolio history, and communication with Ledger’s servers. The signing and approval happen on the hardware wallet, so the Mac chip has little to do with how fast a transaction is signed or broadcast. A native Apple Silicon build starts faster, scrolls more smoothly, and uses less battery than an Intel build running under Rosetta 2. On an Intel Mac, the experience ranges from very usable to slightly sluggish depending on the model, RAM, storage type, and Ledger Live version. A 2015 MacBook Air with 8 GB RAM and a hard drive will not match an M1 MacBook Air, while a recent Intel MacBook Pro with an SSD and 16 GB RAM can run Ledger Live without obvious delays. If you use an Apple Silicon Mac, check that you installed the Apple Silicon or universal build rather than an older Intel-only version. If the app opens with Rosetta, switching to a native build can improve launch time and responsiveness. Account sync and market data still depend on network conditions and Ledger’s backend, so a faster Mac will not make a stuck sync instant. Bluetooth pairing may also vary by Mac model and macOS version, but USB connections tend to be consistent on both Intel and Apple Silicon Macs. Practically speaking, Apple Silicon gives a smoother app experience, but it does not speed up the hardware wallet’s own confirmation process.