diff --git a/404.html b/404.html index aaa9ca2138..1c211226dd 100644 --- a/404.html +++ b/404.html @@ -27,11 +27,11 @@ Wasabi Docs - - + + -

404

How did we get here?
Take me home
- +

404

Looks like we've got some broken links.
Take me home
+ diff --git a/FAQ/FAQ-Contribution.html b/FAQ/FAQ-Contribution.html index 564af6976a..094bb1c8d6 100644 --- a/FAQ/FAQ-Contribution.html +++ b/FAQ/FAQ-Contribution.html @@ -27,11 +27,11 @@ Contribution FAQ | Wasabi Docs - - + +

Contributions to Wasabi

How to donate to Wasabi Wallet?

Adam Ficsor had a donation address for a few years while he was working alone on Wasabi. It's not the case anymore. Though it's most likely not an issue to accept Bitcoin donations, zkSNACKs team discontinued accepting donations because they don't want to get into accidental legal gray areas. Wasabi has a coordination fee that is capped at 0.3% for every CoinJoin and it became zkSNACKs' main income. To help Wasabi development, just CoinJoin your bitcoins via Wasabi! If you want to read more about fees here is a nice explanation: What are the fees for the CoinJoin.

The Wasabikas

Who is contributing to Wasabi already?

There are many Wasabikas working with great effort and care to manifest this powerful tool of self-defense. Over 50 peersopen in new window have already contributed to the repository. Four of the main contributors are Ádám Ficsoropen in new window [co-founder and former CTO of zkSNACKs Ltdopen in new window, co-author of the zero link Bitcoin fungibility frameworkopen in new window], Lucas Ontiveroopen in new window [lead engineer of zkSNACKs Ltdopen in new window], Dávid Molnáropen in new window [CTO of zkSNACKs Ltdopen in new window], and Dan Walmsleyopen in new window [co-maintainer of Avalonia UI Frameworkopen in new window].

Watch the videoopen in new window

Watch the videoopen in new window

Watch the videoopen in new window

Who reviews and merges the pull requests?

As the Wasabi code is libre and open-source, anyone has access to review the latest contributions and browse the open pull requestsopen in new window. The review of any Wasabika is not just deeply appreciated, but desperately needed! Wasabi is cutting-edge, high security software, and there can never be enough eyes seeking and squashing bugs. Especially review by experienced C# developers are vitally important, yet even typo and grammar fixes are necessary.

There are four developers who have the ability to merge code into master branch. Per default, they require at least one approving reviewopen in new window by one of the other maintainers before a pull request can be merged. However, since all four are administrators, they can still force the merge without the approval of others, but this will be noticed by many contributors.

What is on the future roadmap of Wasabi development?

Wasabi is far from complete, there are many Wasabikas contributing every day to make this tool of self-defense even more powerful. Because Wasabi is libre and open-source software, anyone can support the project without asking for permission. Thus it is relatively tricky to give a precise roadmap with what will be implemented in the near and distant future.

You can become a Wasabika

How should I start contributing to Wasabi?

Thank you for considering to support this beautiful libre and open-source project! It is the responsibility of everyone using the software to contribute to its growth. Your help is deeply appreciated, and very much needed! First please read the contribution checklist to get introduced to the project and to start out in the right direction. Join our Slackopen in new window and check out our GitHub repositoryopen in new window, so that you can stay up-to-date with the latest contributions.

Is there a bounty program?

Yes! The beauty of Wasabi is that it's not just a very awesome wallet by default, but it has the additional opt-in CoinJoin service. This is provided by zkSNACKs Ltd.open in new window, and in exchange for this service, the user pays a coordination fee. In return, zkSNACKs is supporting several developers to dedicate their full time to contribute to this open-source project. There are also contribution games where a bounty is paid out to any contributor worthy the prize.

How can I report a bug?

Code is speech, and can never be perfect. Thus it is expected that there are many known and unknown bugs, quirks and issues in Wasabi. Such a complex software requires constant and rigorous review by the developers and the users, this is everyone's responsibility working with Wasabi.

When you stumble upon an issue that needs fixing, please first check the open issuesopen in new window and pull requestsopen in new window if there is already someone working on it. If yes, then you can comment your situation and bug report under the open issue. If no, then please consider to open a new issueopen in new window and give a detailed report on the problem. It is especially helpful when you provide a step-by-step guide on how to reproduce what you have found. There is constantly a lot of work done to the code base, thus it's good to know which version of Wasabi, and what operating system you are using. In some cases it might be useful to see your logs, though please consider your privacy and encrypt this data properly in direct communication with the developers.

DANGER

If you find a bug that puts users' privacy or security at serious risk, please take great care with responsible disclosure! Send an email to adam.ficsor73@gmail.com, preferably using PGP encryption 21D7 CA45 565D BCCE BE45 115D B4B7 2266 C47E 075Eopen in new window.

How can I request a feature?

Wasabi is a quite beautiful piece of software already. Yet there are also 1001 things that could be just a little better, or even quite substantially superior. The beauty and bane of libre and open-source software is that it is never complete, there is always more work to be done.

Regardless if you are a new user of Wasabi, or a veteran black belt Wasabika, any suggestions on how to improve are very welcome. Please first check the existing issuesopen in new window and pull requestsopen in new window if someone has the same feature request as you. If yes, then you can comment your desired improvement under the open issue. If no, then please consider to open a new issueopen in new window and give a detailed request. It makes sense to first explain the problem you have in the incumbent version of Wasabi, this is the place to express your frustrations and annoyances. Then describe the solution that you have envisioned, with all the nuances and details of how this would fix your problem. To flesh our your argument, please consider alternatives and different approaches to this feature request.

How can I get help and support?

You are already on the right track by first checking this documentationopen in new window for the knowledge you are seeking. It's likely that you are not the first person who has an issue or a question, and hopefully someone has curated the answer in here already. You can use the search function in the top navbar to look for a specific topic, and the sidebar menu as a table of content. You can also use our GitHub Discussionsopen in new window to find solutions to different issues and to ask questions if necessary. If your trouble is specific to the code, then it might also be suitable to check the existing GitHub issuesopen in new window and open a new one.

What does the Wasabi project need help with?

Wasabi is libre and open-source software, thus it relies on the support of several contributors on all fronts. Of course, this includes coding new features, bug fixes and stability improvements. Yet just equally important is the review of the commits of all other Wasabikas. It's not just the contributions to the code, but also to the documentation and the effort to educate peers using Wasabi. This includes education in meatspace tribe gatherings, but also in cyberspace peer support. So basically, we need help with building and shilling Wasabi!

- + diff --git a/FAQ/FAQ-GeneralBitcoinPrivacy.html b/FAQ/FAQ-GeneralBitcoinPrivacy.html index 3af2b46b65..20dc8259f5 100644 --- a/FAQ/FAQ-GeneralBitcoinPrivacy.html +++ b/FAQ/FAQ-GeneralBitcoinPrivacy.html @@ -27,8 +27,8 @@ Bitcoin Privacy FAQ | Wasabi Docs - - + +

General Bitcoin Privacy

Why Privacy matters

I have nothing to hide, do I still need financial privacy?

What did you say to your spouse in bed last night? How much money did you earn last month? What websites have you visited yesterday?

TIP

It's not that I have nothing to hide, it's that I have nothing to share.

There are many tasks in everyday life that are simply none of your business. Knowledge you choose not to share with others, things you only tell one individual, actions that you do while nobody is watching. How much money you earn, and where you spend it, is only your business, and of no concern to most other individuals.

How is financial privacy an essential element to fungibility in Bitcoin?

Fungibility is the possibility for an individual receiving bitcoin to safely ignore any connection between this bitcoin and any particular individual or use case it interacted with in the past. If you can meaningfully distinguish one coin from another, then their fungibility is weak. If Bitcoin fungibility is too weak in practice, then it cannot be decentralized: if someone important announces a list of stolen coins they won't accept coins derived from, you must carefully check coins you receive against that list and return the ones that fail. Everyone gets stuck checking blacklists issued by various authorities because in that world we'd all not like to get stuck with bad coins. This adds friction and transactional costs and makes Bitcoin less valuable as money.

How is financial privacy essential for entrepreneurs?

If you run a business, you cannot effectively set prices if your suppliers and customers can see all your transactions against your will. You cannot compete effectively if your competition is tracking your sales. Individually your informational leverage is lost in your private dealings if you don't have privacy over your accounts: if you pay your landlord in Bitcoin without enough privacy in place, your landlord will see when you've received a pay raise and can hit you up for more rent.

How is financial privacy essential for personal safety?

If thieves can see your income, holdings, and spending, they can use this information to target and exploit you. Without privacy, malicious parties have more ability to steal your identity, snatch your large purchases off your doorstep, or impersonate businesses you transact with towards you. They can tell exactly how much to try to scam you for. If thieves don't know how much bitcoin you have, then they don't know if you are worth the effort to attack.

How is financial privacy essential for human dignity?

No one wants the snotty barista at the coffee shop or their nosy neighbors commenting on their income or spending habits. No one wants their baby-crazy in-laws asking why they're buying contraception (or sex toys). Your employer has no business knowing what church you donate to. Only in a perfectly enlightened discrimination-free world where no one has undue authority over anyone else could we retain our dignity and make our lawful transactions freely without self-censorship if we don't have privacy.

Most importantly, financial privacy isn't incompatible with things like law enforcement or transparency. You can always keep records, be ordered (or volunteer) to provide them to whomever, have judges hold against your interest when you can't produce records (as is the case today). None of this requires globally visible public records.

The Privacy of Bitcoin

How is Bitcoin good in terms of privacy?

Privacy in traditional banking is guaranteed by the institutions that make up the system, such as banks, credit card companies, and governments. They (try to) ensure that your bank balance stays a secret. This puts them in a powerful position, where only they have complete oversight as to what is going on.

Instead, in Bitcoin pseudonyms protect your identity. In the Bitcoin ecosystem, everyone can see the history of every account balance, but they cannot see who controls an account. All addresses and transactions are recorded in Bitcoin’s publicly distributed database, the blockchain. The addresses do not have names or IP addresses attached to them, so it is not always possible to know which transaction belongs to which individual.

How is Bitcoin bad in terms of privacy?

Bitcoin is by default a transparent system, in which every piece of information is available to the public. As such, every Bitcoin user requires some level of protection. Anyone with substantial wealth in Bitcoin would not want to advertise their funds to every person they transact with, for obvious reasons. But every time you spend just a tiny portion of your bitcoin, you might reveal your wealth to the other party. Doing that on the internet is like flashing large stacks of cash in a dark back alley, so obviously it’s not advisable! A criminal might see how much you have and decide to come after it. Distributing your wealth between several wallets and using a different address for each transaction is a common practice that prevents others from knowing how much bitcoin you have.

Each Bitcoin transaction contains at least one input (where the Bitcoin are from) and at least one output (where the Bitcoin are being sent). This means that once a single address is known, there is a trail to follow the Bitcoin.

Another characteristic of Bitcoin transactions is that the value of the input always needs to match the value of the previous transaction output. If you previously received 1 bitcoin, and you want to spend 0.4 bitcoin, the transaction needs to spend the whole 1 bitcoin. 0.4 bitcoin will go as payment, then 0.6 bitcoin will return to you as change. Your Bitcoin wallet will handle this process automatically, but it is important to understand the principle in order to use it anonymously.

The owner of the original bitcoin doesn't know whom you paid the money or what you did with it, but they can see the amounts and addresses involved. They can see two outputs of the transaction: one worth 0.4 bitcoin and one worth 0.6 bitcoin. They might not know for certain which is the purchase and which is the change, but they can apply heuristics to estimate it.

Similarly, if you receive 0.5 bitcoin but want to spend 1 bitcoin, you need to own additional coins with a combined value of at least 0.5 bitcoin in them. When spending two coins within one transaction, it is often assumed that both of these coins belong to the same entity, this is the common input ownership heuristic.

Why is it important to run a full node?

TIP

Not your node ~ not your rules

When you download and install bitcoindopen in new window, you define the precise rules of your monetary system. Then you call out to other nodes and only connect to the peers who have agreed to play by the same rules. All those who break your own rules, you simply disconnect and ignore. Your full node defines, verifies and enforces the sound money you use to store your value.

How does a full node protect my privacy?

When you run your own full node, then on your local computer you can verify exactly if the bitcoin you receive are actually valid. When you do not verify this for yourself, then you need to ask another trusted third party how much money you have. Regardless how you ask this other server, there is now more metadata available to potentially link your coins to your identity. There are bad ways to communicate, like querying a block explorer over clearnet, and good ways to communicate, like using BIP 158open in new window block filters over Tor. But regardless, running your own full node means that you don't need to communicate with anyone about your specific coins and this is strictly better.

How can I set up a full node?

Wasabi comes pre-installed with bitcoind from Bitcoin Knotsopen in new window and it can be started on the same desktop or laptop computer with just one click. This is likely the most convenient solution for Wasabikas.

There are also other node implementations different from Bitcoin Knots, such as Bitcoin Coreopen in new window or Libbitcoinopen in new window, that could be used as well.

Instead, if you prefer to use some dedicated hardware solutions, these are some of the most reliable projects:

Why is it important to use a new address for every payment?

Addresses being used more than once is very damaging to privacy because that links together more blockchain transactions with proof that they were created by the same entity. The most private and secure way to use bitcoin is to send a brand new address to each person who pays you. After an address has received a coin, it should never be used again. Also, a brand new bitcoin address should be demanded from the recipient when sending bitcoin. Wasabi has a user interface which discourages address reuse by removing from the GUI addresses which have received a coin.

It has been argued that the phrase "bitcoin address" was a bad name for this object because it implies it can be reused like an email address. A better name would be something like "bitcoin invoice".

Bitcoin isn't anonymous but pseudonymous, and the pseudonyms are bitcoin addresses. Avoiding address reuse is like throwing away a pseudonym after it has been used.

What is a coinjoin Sudoku?

Coinjoin Sudoku is a type of intra-transaction analysis attack on coinjoin transactions that aims to link inputs and outputs together based on their combinatorial sums. You can read more about coinjoin Sudoku hereopen in new window.

The Privacy of Tor

How does Tor protect my network-level privacy?

When you make a Bitcoin transaction, you are essentially creating a message on your phone or computer and sending it to the Bitcoin network. Someone operating a large number of nodes on the Bitcoin network might be able to match some of your transactions to your IP address, then deanonymize your stack of bitcoin.

It is relatively easy to avoid this on a computer by relaying all transactions through the Tor network. Wasabi routes all traffic via Tor’s SOCKS5 proxy, by default.

To maintain your anonymity, use the Tor Browser or the Tails operating system, if possible. Route everything through Tor by default.

It is also good practice to route your chats through the Tor network. You can also configure many cloud storage providers in this way.

Why does Tor process keep running after closing Wasabi Wallet?

There are two main reasons: user experience and privacy.

If a user closes Wasabi and then starts it again, he's already connected to Tor and he does not need to build a new Tor circuit. This means that Wasabi's startup will be much faster, because the Tor circuit is already established.

Regarding the privacy, this is done to avoid time correlation attacks when using Wasabi Wallet. In fact, if a user creates a new Tor circuit every time he opens Wasabi Wallet, he would send a series of information to the Bitcoin network, which could allow a correlation and deanonymization of the user himself.

My country/ISP is blocking/censoring Tor, how can I use Wasabi with Tor bridges?

WARNING

Feature not yet ported to Wasabi 2.0

Tor bridges, also called Tor bridge relays, are alternative entry points to the Tor network that are not all listed publicly. If you suspect your access to the Tor network is being blocked, you may want to use bridges. You can read more on The Tor Project's dedicated page about bridgesopen in new window.

TIP

If you are using Tor Browser Bundle it is extremely easy to configure it to use bridges. Configuring Tor bridges running in a daemon mode is more difficult and takes more time.

Steps with Tor Browser:

  1. Download and install the Tor Browseropen in new window
  2. Change the Settings of the Tor Browser to use one of the bridges or pluggable transports
  3. Leave Tor Browser running after connecting with a bridge
  4. Change the Settings of Wasabi Wallet and edit TorSocks5 Endpoint from 127.0.0.1:9050 to 127.0.0.1:9150
  5. Restart Wasabi

After this, Wasabi will connect to Tor using the Tor Browser's connection via a random bridge.

WARNING

To make use of Tor bridges on Wasabi, you must always keep Tor Browser open.

Steps with Tor Daemon on Linux:

TIP

These are commands for Debian. Feel free to edit these commands according to your distribution.

  1. Get Tor Bridgesopen in new window
  2. Install Tor daemon with sudo apt-get install tor
  3. Install OBFS4 support (needed to connect to bridges), by editing your /etc/apt/sources.list and adding this line:
# Tor Bridges
@@ -42,6 +42,6 @@
 
 ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy
 
  1. Restart Tor with sudo service tor restart and check logs with sudo tail -f /var/log/tor/log to verify that everything is working properly
- + diff --git a/FAQ/FAQ-Installation.html b/FAQ/FAQ-Installation.html index 70876057c1..c285ed6a97 100644 --- a/FAQ/FAQ-Installation.html +++ b/FAQ/FAQ-Installation.html @@ -27,11 +27,11 @@ Installation FAQ | Wasabi Docs - - + +

Installation of Wasabi

Installing the Package

Where can I download Wasabi?

You can find the recent version of the compiled packages for Linux, Windows and Mac available on the official wasabiwallet.ioopen in new window. It's always best to download software directly from the official source acknowledged by the developers. In order to preserve your network level privacy from the very first step on, please consider visiting the Tor onion service wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onionopen in new window. The old versions of the software can be found in the releasesopen in new window of the GitHub repository, hereopen in new window you also find the libre & open source code for when you want to build it yourself. Please take special care to verify the PGP signatures of zkSNACKs' PGP public key 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861Eopen in new window over the software packages and code commits.

Why is it important to verify PGP signatures?

DANGER

Don't trust ~ verify.

These are not just empty words. Self sovereignty is at the core of Bitcoin in general, and Wasabi specifically. You have powerful tools at your disposal, yet they only work when used as they are designed. Wasabi is tailor made so that you do not have to trust anyone, but you have the power to verify everything.

With PGP signatures you can verify that the software package you download is actually the one by the developers. Every release of Wasabi is signed by zkSNACKsopen in new window, the company behind Wasabi. You can verify that the PGP public key 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861Eopen in new window is actually the one of zkSNACKsopen in new window by exploring the web of trustopen in new window. When you have a software package that was signed by this PGP public key, then you can be sure that this is an official release approved by zkSNACKs. This protects you against malicious man in the middle attacks where bad guys give you a fake version of Wasabi with malicious code.

Watch the videoopen in new window

How can I verify PGP signatures?

On the WasabiWallet.ioopen in new window website you can download the packages of the latest release. To verify the signature you also need to download the separate signature .asc file. In the terminal, change the directory to the one with the downloaded files, and verify the signature with gpg --verify + the corresponding signature file name, depending on which operating system you are.

Everything is valid if it returns Good signature from zkSNACKs and that it was signed with the Primary key fingerprint: 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E.

For an in-depth guide for Debian and Ubuntu, other Linux, Windows, and macOS see the main documentation.

Watch the videoopen in new window

How do I install Wasabi on Debian and Ubuntu?

Download the most recent .deb package and the .deb.asc signature file from the wasabiwallet.ioopen in new window or the Tor onion serviceopen in new window.

Download Wasabi Wallet for Debian

Verify the signature of the package with gpg --verify Wasabi-2.0.7.1.deb.asc Wasabi-2.0.7.1.deb and ensure that the software was signed by zkSNACKs' PGP public key 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861Eopen in new window.

Now install Wasabi with sudo apt install ./Wasabi-2.0.7.1.deb, and run it with wassabee. Check out the main documentation for a step-by-step guide.

Watch the videoopen in new window

How do I install Wasabi on other Linux?

Download the most recent .tar.gz package and the .tar.gz.asc signature file from the wasabiwallet.ioopen in new window or the Tor onion serviceopen in new window.

Download Wasabi Wallet for Linux

Verify the signature of the package with gpg --verify Wasabi-2.0.7.1.tar.gz.asc Wasabi-2.0.7.1.tar.gz and ensure that the software was signed by zkSNACKs' PGP public key 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861Eopen in new window. Now install Wasabi with sudo tar -pxzf Wasabi-2.0.7.1.tar.gz, and run it with ./wassabee. Check out the main documentation for a step-by-step guide.

How do I install Wasabi on Windows?

Download the most recent .msi package and the .msi.asc signature file from the wasabiwallet.ioopen in new window or the Tor onion serviceopen in new window.

Download Wasabi Wallet for Windows

The Wasabi package is signed and automatically verified on Windows upon installation.

Wasabi Wallet Windows signature verification

Optionally, you can still verify the PGP signature of the package by right-clicking on the signature file > More GpgEX options > Verify and ensure the software was signed by zkSNACKs' PGP public key 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861Eopen in new window. Now install Wasabi by double-clicking the .msi file. Check out the main documentation for a step-by-step guide.

How do I install Wasabi on macOS?

Download the most recent .dmg package and the .dmg.asc signature file from the wasabiwallet.ioopen in new window or the Tor onion serviceopen in new window.

Download Wasabi Wallet for macOS

The Wasabi package is signed and automatically verified on macOS upon installation.

Optionally, you can still verify the PGP signature of the package with sudo gpg2 --verify Wasabi-2.0.7.1.dmg.asc and ensure that the software has been signed by zkSNACKs' PGP public key 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861Eopen in new window. Now install Wasabi by double-clicking the .dmg file. Check out the main documentation for a step-by-step guide.

Watch the videoopen in new window

Why are there two different packages for macOS (intel and Apple Silicon)?

Intel and Apple Silicon are two different processors types that Apple uses for their computers. These processors work a bit differently from each other. With the architecture that Wasabi uses, these two different processors need their own specific code binary in order to make it work.

What happens when I install the wrong package for macOS?

Wasabi will crash on startup or run significantly slower than it should. This will not harm your computer.

Do I need to install Tor separately?

No, because Wasabi has Tor built into the software. All Wasabi network traffic goes via Tor by default - no need to set up Tor yourself.

You can turn off Tor in the Settings. Be careful, as this will compromise your privacy. When you coinjoin over clearnet, the coordinator would know the links between your inputs and outputs based on your IP address. When you broadcast a transaction over clearnet, the connected full node will know the link between your transaction and your IP address.

Can I use Wasabi on Tails?

No, it is not possible to install Wasabi on Tails, because Wasabi uses the Tor control port, which is not exposed in this operating system.

Can I use Wasabi on Whonix?

No, it is not possible to install Wasabi on Whonix, because Wasabi uses the Tor control port, which is not exposed in this operating system.

What are the differences between the Debian/Ubuntu version and the "Other Linux" version?

Debian/Ubuntu version contains .deb package. Other Linux version contains .tar.gz package.

The advantages of the .deb format is solely packaging related. It installs Wasabi in your computer, so you're able to access it from start menu, remove it through apt, and so on.

The "Other Linux" option is just a generic install method not targeted to Debian/Ubuntu specifically but that works on it anyway because it is still linux.

There's no difference in the code, the same binaries are being delivered in different formats.

Update Wasabi

Why should I update Wasabi?

Wasabi is cutting edge software and is being worked on by the developers on a daily basis. Once in a while (+- every month) all the changes/improvements are being released in a new Wasabi version. The changes can contain (critical) bug fixes, small improvements, new features etc. It's always a good idea to run (one of) the latest Wasabi versions.

How do I check the current version of Wasabi?

In the GUI, go to the SearchBar at the top of the screen and click on About Wasabi. Here the current version of your Wasabi is displayed.

You can also verify the version using the command line by executing wassabeed --version.

Wasabi is cutting edge software, so it is well-advised to stay up-to-date.

How do I know about a new version of Wasabi?

When a new major version [v2.X.X] has been released, you'll see an orange update icon in the bottom right, upon hovering over it you can see Version 2.X.X is now available.

Wasabi Update Available

Clicking on Update uses the default browser to go to the website, where you can download this new version. There are occasional silent releases like [v2.X.X.X] which fix small issues, and these are not announced in the GUI, so you will not see the orange update icon. The websiteopen in new window always contains the most recent version. All releases (major and minor) are announced on the social media like Twitteropen in new window and Redditopen in new window.

How do I securely upgrade Wasabi?

To upgrade Wasabi, you need to download the new version. Downloading and installing the newer Wasabi package will overwrite the previous one, while preserving your files like your wallets etc. So to upgrade Wasabi, simply download and install the new version like at first install.

You can download the software build for the different operating systems on the main websiteopen in new window or better over Toropen in new window. For extra security, it is reccommended to also download the signatures of the build and verify them with zkSNACKs' PGP public keyopen in new window. For step-by-step instructions, follow this guide or see this video: Watch the videoopen in new window

What does Auto download new version in the settings mean?

If enabled, the software will automatically download the new version's installer upon a new release. If disabled, the software will only signal, but not automatically download, that there is a new version available.

Auto download new version is currently only available for Windows and macOS

For Linux, this setting does not work. A new version will have to be installed manually.

How does the Auto download new version work?

The software will automatically download the new version's installer upon a new release. After it is downloaded, the user can press "Update on Close" to run the installer when closing Wasabi. The installer is downloaded from GitHubopen in new window.

Advanced Installation

How do I compile Wasabi from source?

If you cannot wait until the next release, and you want to experience the most cutting-edge version of Wasabi, then you can build the source code.

The only two required tools are Gitopen in new window and .NET 8.0 SDKopen in new window for "Build apps". You can download every line of the Wasabi code by git clone https://github.com/zkSNACKs/WalletWasabi.git, this will create a new directory called WalletWasabi. In order to build and run the Wallet software, change directory to cd WalletWasabi/WalletWasabi.Fluent.Desktop. Wasabi is written in C# with the .NET framework, and it is very easy to run it. Simply execute dotnet run from the WalletWasabi.Fluent.Desktop folder. You can update the master branch with git pull.

How can I verify the deterministic build?

The guide for the deterministic builds can be found in the WalletWasabi repositoryopen in new window.

My antivirus marks Wasabi Wallet as a virus. Am I downloading the right software?

After you have downloaded Wasabi from the official websiteopen in new window or from the official GitHub repositoryopen in new window, make sure you have verified the PGP signatures.

If you have downloaded and verified digital signatures and your antivirus continues to report Wasabi as positive, you don't have to worry about anything; it is a false positive.

If you are still not sure, before starting Wasabi, you can check that it is safe by uploading and scan it via VirusTotalopen in new window.

TIP

Remember to report Wasabi as a safe software/false positive to your antivirus. In doing so you will help users who use the same antivirus.

Why is the executable called wassabee?

The most obvious thing would be to call the executable Wasabi Wallet.exe on Windows and Wasabi Wallet on Linux and Mac.

However launching Wasabi Wallet from certain terminals/command lines is problematic, so we should remove the spacing: WasabiWallet, and the case sensitivity differences between the operating systems can also cause issues, so that must go too: wasabiwallet.

But it's too long, it needs a faster way to launch: wasabi.

However this is too generic, it'll certainly cause conflicts, we need to make it unique: wassabee.

Also, this sounds awesome and is a fun inside jokeopen in new window.

- + diff --git a/FAQ/FAQ-Introduction.html b/FAQ/FAQ-Introduction.html index 7073afc27c..03299132c9 100644 --- a/FAQ/FAQ-Introduction.html +++ b/FAQ/FAQ-Introduction.html @@ -27,11 +27,11 @@ Introduction FAQ | Wasabi Docs - - + +

Introduction to Wasabi

The Basics

Who can use Wasabi?

Every single line of code in Wasabi, the walletopen in new window, the backend serveropen in new window, the daemonopen in new window, the testsopen in new window, the packageropen in new window, the libraryopen in new window, the apiopen in new window, the documentationopen in new window - has always been and will always be libre and open-source under the MIT licenseopen in new window. This means that anyone, yes, ANYONE can use Wasabi without permission, for any use case, free of charge.

Wasabi is used by individuals to make everyday payments, to manage their hardware wallet long term hodlings, and to CoinJoin their sats for added privacy. Entrepreneurs may use Wasabi to defend their customers from spies and to ensure a private business relationship. While kids may use Wasabi to stack the sats gifted by grandma, and learn the importance of hodling.

TIP

Wasabi is a tool for everyone.

What is a coinjoin?

Coinjoin is a mechanism by which multiple participants combine their coins (or UTXOs, to be more precise) into one large transaction with multiple inputs and multiple outputs. An observer cannot determine which output belongs to which input, and neither can the participants themselves. This makes it difficult for outside parties to trace where a particular coin originated from and where it was sent to (as opposed to regular bitcoin transactions, where there is usually one sender and one receiver).

This can be done with non-custodial software like Wasabi that eliminates the risk of funds disappearing or being stolen. Each of the signatures are created on the participants’ computers after thorough verification, so nobody can alter the transaction or redirect the funds. The funds will always be in a Bitcoin address that you control.

In very simple terms, coinjoin means: “when you want to make a transaction, find someone else who also wants to make a transaction and make a joint transaction together”.

See also the Bitcoin Wiki on coinjoinsopen in new window

Do I need to trust Wasabi with my coins?

Since Wasabi's coinjoin implementation is trustless by design, there is no need for participants to trust each other or a third party. Both the sending address (the coinjoin input) and the receiving address (the coinjoin output) are controlled by your own private keys. The Wasabi server merely coordinates the process of combining each participant's input into one single transaction, but the Wasabi Wallet can neither steal your coins, nor figure out which outputs belong to which inputs (look up “WabiSabi coinjoin” if you want to know more).

What is the privacy I get after mixing with Wasabi?

This depends on how you handle your outputs after the coinjoin. There are some ways how you can unintentionally undo the mixing by being careless. For example, if you send a mixed coin to an already used address, then anyone can see that both coins are controlled by the same entity. More importantly, anyone who knows that the address belongs to you knows that you own that mixed coin. Address reuse compromises your privacy. Another deanonymizing scenario occurs when you combine mixed outputs with unmixed ones when sending: a third party will be able to make the connection between them as belonging to the same sender. This is why you need to be careful with non-private/change coins.

The practice of being careful with your post-mix outputs is commonly facilitated through coin control. Find out more about coin control in here. However, Wasabi Wallet is build in a way to help the user to avoid privacy leaks when using the wallet.

Why is Wasabi Bitcoin-only?

There are countless reasons why it is the only logical choice to be bitcoin-only. With Bitcoin we have a once in a lifetime opportunity to manifest libre sound money. If we succeed, then an utmost beautiful agora of sovereign individuals may emerge. If we fail, then this will conjure up the most horrific Orwellian nightmare. There is no room for wasted time and energy, this great work requires our full attention. Any line of code written to support a random shitcoin takes away scarce developer time to work on real problems.

What is considered a sufficient anonymity score?

It is difficult to determine a sufficient anonymity score since enough research hasn’t been conducted to provide a definitive answer. The right anonymity score depends on your own personal threat model. However, to be on the safe side, with Wasabi Wallet 2.0 an anonymity score of 5 and above could be considered sufficient.

Is there a way to check Wasabi's uptime status?

Yes, you can check the status of Wasabi-related services and websites (like APIs, Backend, etc.) via UptimeRobot Wasabi Status Pageopen in new window.

What software supplies the block filters that Wasabi uses?

The zkSNACKs coordinator supplies identical filters to every client. This means that you rely on the Wasabi backendopen in new window to provide valid filters. But because you download the blocks from a random Bitcoin peer-to-peer node - or your own node - the coordinator cannot spy on which blocks you are interested in. Furthermore, the random node will only know which block is needed but it won't have any clue which transaction(s) belongs to the wallet.

Is the Backend's (Coordinator) code open-source?

Yes, you can verify the code on GitHubopen in new window.

Is there an Android/iOs version?

No, Wasabi and CoinJoin features require considerable computational power, not currently replicable on a smartphone.

Where can I find Wasabi Wallet on social media?

You can find us on Twitteropen in new window, Redditopen in new window, YouTubeopen in new window, Facebookopen in new window, Instagramopen in new window and Discordopen in new window. For chat groups you can find us on Slackopen in new window, Telegramopen in new window and Keybaseopen in new window.

Also, remember to follow our blogopen in new window to get the latest insights and information about Wasabi Wallet and Bitcoin privacy.

For advanced Wasabikas

Can the coordinator attack me?

The developers have gone to great lengths to ensure that the coordinator cannot steal funds nor link inputs to outputs. The nature of Wasabi is that you should not need to trust the developers or the Wasabi coordinating server, as you can verify that the code does not leak information to anyone. Due to the nature of coinjoin transactions users don't need to trust other users or the coordinator against theft, leaving denial of service and attacks on privacy as the main concerns

The only known possible 'malicious' actions that the server could perform are two sides of the same coin;

  • Blacklisted UTXO's: Though this would not affect the users who are able to successfully mix with other 'honest/real' peers.
  • Targeted Sybil Attack: The follow-up concern is the inverse of the above. It is possible that the server could only include one 'honest/real' coin in the mix and supply the other coins themselves. This gives a false sense of security, but does not worsen the existing privacy of the coin. It would also be noticeable to all users excluding the user being targeted as their coins would not be mixed. It has been argued that this 'attack' would be very costly in terms of fees because the number of coins being mixed is verifiable. Though it is true that remixes pay zero coordination fee to zkSNACKs, they do pay mining fees. See hereopen in new window for more info.

What is the history of Wasabi?

Ádám Ficsor worked with several others on a privacy-focused Bitcoin wallet called Hidden Wallet all the way back in December 2015open in new window. Wasabi 1.0 was unveiled in 2018 at the Building on Bitcoin conference by Ádám. At the time, Wasabi was essentially HiddenWallet rebranded and rewritten from scratch with some new features. Key dates:

  • The 1.0 Beta release was on August 1, 2018 (on the first anniversary of UASF)
  • The 1.0 release was on October 31, 2018 (on the tenth anniversary of the Bitcoin Whitepaper)
  • The 2.0 Testnet release was on March 1, 2022
  • The 2.0 release was on June 15, 2022

Watch the videoopen in new window

Watch the videoopen in new window

Why is Wasabi libre and open-source software?

Wasabi follows Bitcoin's philosophy by making the software open-sourceopen in new window and by publishing it under MIT licenseopen in new window. Bitcoin users prefer open-source software to proprietary software for a number of reasons, including:

Control

Many people prefer open-source software because they have more control over the software they run.

They can examine the code to make sure it's not doing anything they don't want it to do, and they can change parts of it they don't like. Users who aren't programmers also benefit from open-source software, since they can use this software for any purpose.

Training

Other people like open-source software because it helps them become better programmers.

Open-source code is publicly accessible. Students can easily study it as they learn to make better software. Students can also share their work with others, inviting comments and critique, as they develop their skills. When people discover mistakes in programs' source code, they can share those mistakes with others to help them avoid making those same mistakes themselves.

Security

Some people prefer open-source software because they consider it more secure and stable than proprietary software.

Anyone can view and modify open-source software. Other users may spot and correct errors or omissions that a program's original authors might have missed. And because so many programmers can work on a piece of open-source software without asking for permission from original authors, they can fix, update, and upgrade open-source software more quickly than they can proprietary software.

Stability

Many users prefer open-source software to proprietary software for important, long-term projects.

Programmers publicly distribute the source code for open-source software. Users relying on that software for critical tasks can be sure their tools won't disappear or fall into disrepair if their original creators stop working on them. Additionally, open-source software tends to both incorporate and operate according to open standards.

What is the general idea of WabiSabi coinjoin?

While fungibility is an essential property of good money, Bitcoin has its limitations in this area. Numerous fungibility improvements have been proposed; however, none of them have addressed the privacy issues in full. WabiSabi is designed so that no participant, outside observer or even the coordinator can spy on the user. The scope of WabiSabi is not limited to a single transaction, it extends to transaction chains and it addresses various network layer deanonymizations. However, its scope is limited to Bitcoin's first layer. Even if an off-chain anonymity solution gets widely adopted, ultimately the entrance and exit transactions will always be settled on-chain. Therefore, there will always be need for on-chain privacy.

Ideal fungibility requires every Bitcoin transaction to be indistinguishable from each other, but it is an unrealistic goal. WabiSabi's objective is to break all links between coins. Thus, WabiSabi enables the usage of Bitcoin in a fully anonymous way.

WabiSabi defines a pre-mix and a post-mix wallet and a mixing technique. Pre-mix wallet functionality can be added to any Bitcoin wallet without much overhead. Post-mix wallets on the other hand have strong privacy requirements, regarding coin selection, private transaction and balance retrieval, transaction input and output indexing and broadcasting. The requirements and recommendations for pre and post-mix wallets together define the Wallet Privacy Framework. Coins from pre-mix wallets to post-mix wallets are moved by mixing. Most on-chain mixing techniques, like CoinShuffle, CoinShuffle++, TumbleBit's Classic Tumbler mode, or ZeroLink can be used. However WabiSabi defines its own mixing technique: WabiSabi coinjoin.

For more info please see WabiSabiopen in new window.

What are the supported operating systems?

Wasabi runs in most operating systems with 64-bit architecture. For the complete list of all the officially supported operating systems, click hereopen in new window.

What are the minimal requirements to run Wasabi?

As long as your operating system is supportedopen in new window, Wasabi should be able to run on your hardware. The more transactions a wallet has made, the more resources Wasabi will consume, particularly RAM. The software can also consume a significant amount of CPU for specific tasks, such as coinjoins or wallet loading. Approximately 3 GB of disk space are also needed, mainly to store the block filters. If you are running the wallet on a system with scarce resources, consider using the daemonopen in new window instead of the GUI application.

- + diff --git a/FAQ/FAQ-UseWasabi.html b/FAQ/FAQ-UseWasabi.html index e84b01c993..56391ec85f 100644 --- a/FAQ/FAQ-UseWasabi.html +++ b/FAQ/FAQ-UseWasabi.html @@ -27,8 +27,8 @@ Use of Wasabi FAQ | Wasabi Docs - - + +

Use of Wasabi

General

How do I start using Wasabi?

  1. Download & Install Wasabi (like with any other software) from the official websiteopen in new window.
  2. Create a new wallet or use an already existing one, by importing or recovering your own wallet.
  3. Receive some bitcoin.
  4. Wait, and let the wallet do some coinjoins. Your wallet's privacy progress % will increase.
  5. Enjoy your private bitcoin funds! Spend some, send to your hardware wallet (for cold storage) or leave them in Wasabi for a while.

How do I generate a new wallet?

You can generate as many new wallets as you'd like, for no extra cost and without asking for permission.

Click the Add Wallet button in the bottom left corner of the main view or in the searchbar.

Add new wallet in Wasabi

Click Create a new wallet.

Create a new wallet in Wasabi

As with everything in Wasabi, you are required to label this new wallet. Make sure that you are precise so that you know what this wallet is for and click Continue.

Name a new wallet in Wasabi

Now you will see the 12 recovery words. This is the mnemonic seed that you should back up, together with the password you create in the next phase, in order to recover your wallet. When you've backed everything up, click Continue.

Wasabi Wallet recovery words

In this page you should confirm the words, as a check that you've written down your mnemonic seed in the correct order. Once you're done, click Continue.

Confirm recovery words

Add a password. It is used to encrypt the private key (extracted from the extended private key) on the computer and needed to open the wallet and to recovered it in the future. Make sure that you properly back up and write down this password.

Confirm the password and click Continue.

Add a password in Wasabi

Careful!!

Without knowledge of the password, you CANNOT spend your bitcoin!!

Make sure, and triple-check that you have done a proper backup of BOTH the password AND the mnemonic. If you only have the recovery words, but not the password, then you will NOT be able to open your wallet or to recover it.

In order to protect your backup, consider storing the password and recovery words in different locations.

Now you get to choose your wallets coinjoin strategy. Select one and click Continue.

Wasabi Wallet coinjoin strategies

Can I rename my Wallet?

Yes. A wallet can be renamed at the Wallet Settings.

Alternatively, the wallet file can be manually renamed by doing the following: Type Wallet Folder in the search bar at the top of the main view to access the Wallets folder and rename the .json wallet file. Or you can navigate to the Wallets folder (inside the Wasabi data folder) and rename the .json wallet file. Then go to WalletBackups folder (inside the Wasabi data folder) and rename the .json wallet file.

TIP

You need to mark the “show hidden files” setting to see the Wasabi data folder.

WARNING

To avoid problems, make sure you close Wasabi Wallet before proceeding to rename any of your wallets.

What is the password used for?

The password you set is used:

Wasabi stores only the BIP38 encrypted blob, so you'll need to type in the password to open the wallet and to spend from Wasabi.

DANGER

The password will unlock your bitcoin to anyone who has access to the recovery words backup or the computer! If your backup gets compromised, this password is the only thing protecting your precious sats.

What password should I use?

DANGER

It is VERY important to use a random and long password.

Since it is very difficult for humans to generate true randomness, it is good to use a tool to help find a strong password. This can be the Diceware english wordlistopen in new window for true off-line password generation. A secure password manager software might also be used, but be careful here.

Where can I find the Wasabi data folder?

You can easily reach it from inside Wasabi by typing Data Folder in the search bar at the top of the main view.

Or you can manually navigate to it (depending on which OS you have):

  • Windows: /Users/{your username}/AppData/Roaming/WalletWasabi/Client
  • Linux: /home/{your username}/.walletwasabi/client
  • macOS: /Users/{your username}/.walletwasabi/client

TIP

You need to mark the “show hidden files” setting to see it.

Can I spend my bitcoin without the password?

DANGER

NO!!! Without knowledge of your password, even when you have the wallet file and recovery words, you CANNOT spend your bitcoin!

When creating a new wallet, after labeling it properly, the next step is to select a long and random password. Every time you want to spend your coins from Wasabi, you MUST provide this password. So even if you have these words securely engraved in metal, without the password, you cannot restore the backup of your wallet.

TIP

Always back up your mnemonic recovery words, and your password in two separate secure locations.

Why BIP 38?

BIP 38open in new window is a good standard, a well-tested and very secure way to encrypt a private key. It is also implemented in the NBitcoin libraryopen in new window, which is used by Wasabi. Additionally, there is no standard way (BIP) to encrypt HD wallets. Take into account that it is not only encryption what BIP 38 provides but also a brute-force protection.

What are the terms and conditions?

The most important parts of the legal documents are summarized in the following points:

  • The service is open-source under the MIT license.
  • The service is provided on a non-custodial basis. Safekeeping of keys are the sole responsibility of the user.
  • The user is solely responsible to act according to their local laws and regulations.
  • We do not store any personally identifiable information. Moreover, our trustless software architecture prevents us from gathering this information in the first place.
  • A transaction fee is only charged by the service provider for CoinJoin transactions.
  • We only provide written support, and NEVER ask for recovery words, passwords or similar security critical information.

Read the whole document of terms and conditions, privacy policy, and legal statement hereopen in new window

Can I import a watch-only extended public key?

Yes, but not yet in the GUI, you will need to manually create a new wallet file.

Open a text editor and paste the following wallet structure:

{
@@ -74,6 +74,6 @@
                       0.3 BTC (Change Coin Charlie)
 

There is no way to know which of the anon set output coins are owned by which of the input owners.

All an observer knows is that a specific anon set output coin is owned by one of the owners of one of the input coins, that is 3 people - hence an anonymity set of 3.

Your Wasabi software has limited information on what the actually achieved anonymity set is, so the anonymity set that the software presents you is just an estimation, not an accurate value. With Wasabi we are trying to do lower estimations, rather than higher ones.

What is the anonymity score?

The anonymity score is a way to estimate the level of entropy of a UTXO in an unequal-but-highly-composable output value coinjoin.

It is different than anonymity set. For example, if the outputs are [1, 1, 1, 1, 0.5, 0.5, 0.5, 0.5, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, 0.1, 0.1] then, even when each of those 1s have anonscore 4, there are still lots of combinations of outputs that sum up to 1, so the anonset should be much higher but the anonscore is extremely conservative and takes into account many other things.

What is the difference between anonymity set and anonymity score?

The anonscore evolved into existence from the anonset, but with some differences. What differs is the kind of coinjoins they are applied to, where anonset was for Wasabi 1 and anonscore is for current Wasabi 2. In Wasabi 1 coinjoins there are unequal inputs, some equal outputs, and change coins. In Wasabi 2 coinjoins there are many equal inputs, many equal outputs, and (sometimes) some unique value outputs, that are not necessarily change coins. In fact most of the times they are well mixed coins.

Basically the anonymity score is an extremely conservative anonymity set calculation.

What are the equal denominations created in a coinjoin round?

The standard denominations are: 5000, 6561, 8192, 10000, 13122, 16384, 19683, 20000, 32768, 39366, 50000, 59049, 65536, 100000, 118098, 131072, 177147, 200000, 262144, 354294, 500000, 524288, 531441, 1000000, 1048576, 1062882, 1594323, 2000000, 2097152, 3188646, 4194304, 4782969, 5000000, 8388608, 9565938, 10000000, 14348907, 16777216, 20000000, 28697814, 33554432, 43046721, 50000000, 67108864, 86093442, 100000000, 129140163, 134217728, 200000000, 258280326, 268435456, 387420489, 500000000, 536870912, 774840978, 1000000000, 1073741824, 1162261467, 2000000000, 2147483648, 2324522934, 3486784401, 4294967296, 5000000000, 6973568802, 8589934592, 10000000000, 10460353203, 17179869184, 20000000000, 20920706406, 31381059609, 34359738368, 50000000000, 62762119218, 68719476736, 94143178827, 100000000000, 137438953472 sats.

So, there are 79 denominations from 0.00005000 BTC up to 1374.38953472 BTC.

What is happening in the input registration phase?

During this phase the client selects which coin(s) will be registered for coinjoin. Wasabi then generates the related input proofs. After that, a unique Tor identity will be generated for each input, which will be used to send the input ownership proof to the coordinator.

The coordinator now verifies that this input is allowed to register (i.e. there is still room for more inputs, the coin is confirmed, the input proof is valid etc.). If all checks are valid, the coordinator creates and sends back the credentials.

Since the goal is to have at least 150 inputs in one round, the input registration phase can fail if too few participants registered in the available time frame.

What is happening in the connection confirmation phase?

Because the input registration phase takes some time, the coordinator needs to ensure that everyone is still online and ready to continue. So in the connection confirmation phase every Alice sends a signal to the coordinator that she is still online, and when all Alices do so, or after a timeout and the number of online Alices is still larger than the minimum number of inputs, this phase ends.

What is happening in the output registration phase?

In this phase, every client needs to change the value of their credentials to the desired output values. For example, the client presents to the coordinator two old credentials and two newly created ones. The two pairs sum up to the exact same value, which the coordinator can verify, without knowing the amount value of the credentials. This process may repeat multiple times.

The client now creates a new Tor identity called Bob, which is not tied to Alice. Bob now sends the coordinator an unblinded credential (signed by the coordinator) and a bitcoin address.

What is happening in the signing phase?

After all inputs and outputs are registered, the coordinator has all the information to build the coinjoin transaction. This raw (unsigned) transaction is sent to all Alices, each of them verifies that the transaction is valid and then signs it. The signatures are sent back to the coordinator who accumulates all of them. The singing phase is concluded when the coordinator receives all the valid signatures for all registered inputs.

What is happening during the blame round?

If the signing phase fails from becoming successful due to some Alices disrupting the round, then a blame round will be created with the successful Alices. In the blame round a new coinjoin will be constructed by repeating the coinjoin phases. All Alices have to sign this new transaction and send their signature to the coordinator.

What is happening in the broadcasting phase?

In the broadcasting phase the coordinator sends the signed final CoinJoin transaction to several random Bitcoin peer to peer nodes, and it is gossiped throughout the network to the miners.

Is there any additional anonymity using multiple wallets for CoinJoins?

You'd gain 1 less anonymity set than if you'd only mix with one wallet (and Wasabi doesn't display that). On the other hand, the systemic anonymity is slightly improved if a few people are mixing with multiple wallets, because that removes the certainty on this Blockchain analysis assumption.

How is the anonymity set target determined for CoinJoins?

2*2 = 4 and 3*3 = 9. 2->3: 50% increase, 4->9:125% increase. So remixing with larger anonsets is exponentially more effective than smaller anonsets. Regarding why do we want 100 number, is among some other reasons, because that was our calculation to be that would make rounds happen in every 2-5 minutes, considering the liquidity of some custodial mixers. Regarding DoS attack, right now our DoS configuration is set to be pretty permissive and this seems to be sufficient for the time being. If a DoS attack would happen, Wasabi team would just harden it in the config file and would kick the bad actors out. Now if even that would fail, then we can start thinking about lowering the required peers and also other methods.

I'd like to experience coinjoin but I'm not comfortable using real Bitcoin. What can I do?

You can try to make a coinjoin via Wasabi on the Bitcoin TestNet (an alternative Bitcoin network, to be used for testing). Go to Settings > Bitcoin and change the network to TestNet. Then restart your Wasabi and create a new wallet, this is needed because Wasabi differentiates between "Main wallets" and "TestNet wallets". This wallet will synchronize for the TestNet, and generate TestNet addresses. You can get tBTC from faucets like: coinfaucet.eu/en/btc-testnetopen in new window or bitcoinfaucet.uo1.netopen in new window

Does Wasabi have to stay on during coinjoin?

Yes, Wasabi needs to stay on during coinjoins, you cannot be offline and still participate in coinjoins.

A coinjoin transaction is different from a normal transaction (where you are the only person signing), as it requires multiple participants to sign the same transaction.

Here is how Wasabi handles different scenarios:

During input registration phaseAfter input registration phase
You close WasabiYour registered coins are automatically dequeuedWasabi will make you wait until the round finishes
Wasabi goes offlineYour registered coins are automatically timed out by the coordinator after 1 minuteThe coin(s) that disrupted the round will be banned for 6h from participating in another coinjoin. (This is to prevent DoS attacksopen in new window)

What if there's a power outage during CoinJoin? Do I lose my coins?

No you don't. CoinJoins are atomic, they either happen or they don't. If your wallet crashes or your computer goes offline during CoinJoin you simply don't participate in this CoinJoin, look at table here for more info.

How much anonymity set do I need?

The amount of privacy needed depends on your individual threat model, who is trying to deanonymize you? It is commonly said that an anonymity set of 50 is sufficient to evade low-level blockchain forensics analysis, but it might not protect you against large adversaries. At least one round to re-mix your coins can increase your privacy drastically. With Wasabi this can be achieved in a matter of hours.

How does my wallet communicate with the Wasabi coordinator server?

Wasabi communicates in many ways to the coordinator server, and it is always over the Tor network.

First of all, Wasabi uses BIP 158 block filtersopen in new window to ensure network level privacy. You can follow these FAQs to have a full explanation on the theme:

Then, there are five different phases in a CoinJoin. You can follow these links to have a full explanation on that:

  1. Input registration phase
  2. Connection confirmation phase
  3. Output registration phase
  4. Signing phase
  5. Broadcasting phase

The backend server also sends you information about the current mempool for fee estimation as well as the US Dollar exchange rate.

What is the address of the coordinator?

The coordinator possibly gets paid in every coinjoin. Wasabi is using a fresh unused coordinator address for every coinjoin round.

What is the maximum number of coins that can be registered in a coinjoin?

Wasabi Wallet's default client is configured to register 1 up to 10 inputs per coinjoin round. However, as the coordinator cannot enforce this, a custom client could use a different configuration.

How many coins/outputs do I get from a coinjoin?

Wasabi Wallet's default client is configured to register 1 up to 10 outputs per coinjoin round. However, as the coordinator cannot enforce this, a custom client could use a different configuration.

Can I manually select which coins to register for coinjoin?

No, that is currently not possible. The automatic coinjoin robot registers the coins, based on multiple factors.

TIP

You can enable the red coin isolation setting, in case you want to prevent possible input heuristics (from outside observers) of anonscore 1 coins into the same coinjoin round.

How to exclude/freeze coins from coinjoin?

This is currently not possible to do from the GUI, however one can manually exclude specific coins from coinjoin using the excludefromcoinjoin RPC call.

How long does it take to make my wallet 100% private?

Depending on many factors, like the Anonymity score target, the coinjoin strategy, and the amount of bitcoin, it can take from a couple hours to multiple days.

What coinjoin strategy should I select?

There is no answer for all, or a "best" strategy, it depends on the user's privacy needs. The coinjoin strategy should be selected according to the user's preference: Do you want to Minimize costs, Maximize speed, or Maximize privacy? Or the user can create their own Custom strategy.

Wasabi Coinjoin Strategy

The default coinjoin strategy is `Maximize Speed`

This strategy is sufficient for most users

What is the coinjoin strategy?

A coinjoin strategy has specific pre-configured coinjoin settings.

There are multiple coinjoin settings which the user is able to configure according to their own prefence. Each coinjoin strategy has different specific settings for optimal performance. After a coinjoin strategy is selected, its settings are applied. It is supposed to make it easy for the user to select their preference, without having to know about the specific settings and how to configure them themselves.

Read more here.

What are the differences/settings per coinjoin strategy?

Minimize CostsMaximize SpeedMaximize Privacy
Anonymity score target55random between 27 and 75
Coinjoin time preferenceweekshourshours
Red coin isolationnot enablednot enabledenabled

What does the Auto-start coinjoin threshold mean in the coinjoin settings?

It is the amount at which your funds will automatically participate in coinjoin in the background. If the non-private wallet balance is less than this amount coinjoin will not automatically start. A use case is that it might not be economical to coinjoin with this non-private amount (fee amount compared to coinjoin amount).

For example, if the non-private balance is 0.005 BTC and the Auto-start coinjoin threshold is 0.01 BTC, the user will have to manually press Play to start coinjoining. The default Auto-start coinjoin threshold is 0.01 BTC.

Auto-start coinjoin threshold

What does the Red coin isolation mean in the coinjoin settings?

When the Red coin isolation is enabled, only a single coin with anonymity score 1 will be allowed into the coinjoin registration. To prevent possible coinjoin input heuristics from outside observers. The Red coin isolation is enabled by default when the Maximize Privacy coinjoin strategy is selected.

Red Coin Isolation

Do coinjoin transactions signal RBF?

No. Coinjoin transactions do not signal RBF.

Why do my coins occasionally get banned from participating in CoinJoin?

A CoinJoin consists of multiple users registering inputs (coins) and blinded outputs. Once the appropriate number of participants have registered, the actual transaction (the CoinJoin) is constructed by the coordinator, and given to all participants in the span of about 60 seconds. At this point, all registered participants must sign off on the CoinJoin, and if a single one of the participants fails to sign their input, the entire CoinJoin must be restarted.

So this introduces a problem, or an attack vector - a malicious user could purposefully register coins, only to wait for the signing phase and not sign. This would halt the entire CoinJoin process for all other participants and Wasabi would no longer work. This is also known as denial of service attackopen in new window.

So a simple solution looks like this - the coordinator could collect signatures from all inputs, and if one or more input refuses to sign, the coordinator could record that input and temporarily (or even permanently) ban that coin from participation. This is a nice solution, as it mitigates a single coin from ruining all CoinJoins, but it too comes with trade-offs.

For example, most of the time, users fail to sign a CoinJoin for non-malicious reasons. Perhaps their Tor connection went down in precisely that moment, or perhaps their WiFi had a temporary flicker at the wrong time. Further, some users don't even realize that the signing phase is happening, and sometimes shut down their computer at exactly the wrong moment. All of these things hinder a successful CoinJoin for all other participants, but by pure accident.

If you are one of the victims of this temporary banning then simply wait for the ban to expire and try again. The best thing you can do to avoid the issue is to have a strong internet connection and keep your computer online throughout the whole process.

Note:

Banning does not mean freezing. You can send banned coins to anyone you want. This is a temporary ban on your coins in participation of the CoinJoin.

Backup and Recovery

How do I back up my mnemonic words?

TIP

Write down your recovery words!

Wasabi uses BIP 39: mnemonic code for generating deterministic keysopen in new window to enable easy backups of all private keys in the wallet. The mnemonic is displayed as 12 recovery words that are only shown once during the wallet generation.

Wasabi Wallet recovery words

DANGER

In order to restore a wallet, you need BOTH the recovery words AND the password!

It is a good idea to keep the two in separate analog backups, such as a laminated paper written with pencil. In order to defend against nature destroying fragile paper, you can consider stamping the words into metal. Use two different backups and locations for the mnemonic and password, because whoever has both [including a physical attacker] has full access to your sats. Find a secure physical location to store the backups, maybe a home safe, or an expert security deposit box.

Please see Wasabi Backup Best Practices for more information about backups.

How do I back up my wallet file?

Although you can back up your private keys with the mnemonic words and password, this is only a last resort recovery. If you want to also secure your address labels, the anonscore and additional metadata, then you can do a digital backup. Simply copy the WalletBackups folder with the wallet.json files from your Wasabi data folder onto suitable hardware, for example an encrypted USB stick. Note that this file has the encrypted private key (extracted from the extended private key), meaning that you only need the password to spend the bitcoin. This also contains the extended public key, the public keys, and the address labels, meaning that it completely links all the coins, both pre and post mix, with clear proof.

WARNING

Make sure to back up your password separately because it is necessary to spend your bitcoin.

TIP

The wallet file backup is sensitive, in terms of privacy, but not critical in terms of loss of funds (if a password was used when generating the wallet). So it is good advice to encrypt this wallet file.

What do I need to recover my wallet?

To recover your wallet you need either your Recovery Words + Password, or the Wallet File + Password, as shown in the table below.

Recovery WordsWallet FilePassword
Recovery Words✔️
Wallet File✔️
Password✔️✔️

TIP

If no password was entered at the wallet creation, then the Recovery Words or Wallet File alone are enough to recover the wallet.

Can I recover my wallet without the password?

No. The password you set is used as a 13th word (passphrase) as described in BIP39, you should back it up when you generate a wallet. It is necessary to spend your bitcoin or to recover your wallet, as shown in this table.

What should I do if I forget my password?

Try to use the Password Finder Tool to find your password. Having a close guess of what the password is increases the possibility that you get your password.

I lost the recovery words but I still have the .json file and the password. Is my wallet still recoverable?

Yes, but in this case it is advisable to create a new wallet and back up the new recovery words and the password, then move your bitcoin there.

The .json file contains the encrypted secret that requires the password to derive your private keys. That gives you access to your bitcoin.

Can I verify the Recovery Words of an existing wallet?

Yes. Go to Wallet Settings > Verify Recovery Words. Type in your recovery words in the correct order, click on Verify and it will show you if they are correct or not.

Wasabi Wallet Verify Recovery Words

Hardware Wallet

Watch the videoopen in new window

Watch the videoopen in new window

Watch the videoopen in new window

What hardware wallets does Wasabi support?

Wasabi uses the Bitcoin Core Hardware Wallet Interface (HWI)open in new window which allows it to support a variety of hardware wallets. For the complete list of all the officially supported hardware wallets, click hereopen in new window.

Why does Wasabi use the Hardware Wallet Interface?

Wasabi uses the Bitcoin Core Hardware Wallet Interface [HWI]open in new window, a python library tool for proper integration of off-line signing devices. It provides a standard way for any software wallet to communicate with any hardware wallet without needing any device specific drivers. HWI was developed and carefully reviewed over several years, with outstanding contributions by Andrew Chowopen in new window. Wasabi implements C# code that executes the HWI tool. Wasabi uses this powerful tool because there are no other dependencies necessary to support all the existing and future hardware wallets.

Does Wasabi support the hidden wallets of hardware wallets?

Partially. Only device side passphrase is supported. PC side passphrase is not. This means that the hidden wallet feature can be used with Trezor T, Ledger Nano S, Nano S Plus, Nano X and ColdCard. After the 12 or 24 words, enter the passphrase as the 13th or 25th word on the hardware wallet. It’s part of BIP 39open in new window.

How can I generate a Wasabi skeleton wallet file in ColdCard?

On the ColdCard you go to Advanced > MicroSD Card > Export Wallet > Wasabi Wallet and it will save a skeleton json-file to the MicroSD card in the hardware wallet.

Read more here.

How can I import the Wasabi skeleton wallet file?

Take the MicroSD card from the ColdCard and plug it in the computer with the Wasabi Wallet software. In Wasabi Wallet go to Add Wallet and select Import a wallet. Now select the Wasabi skeleton json-file from the MicroSD card, if this fails you can manually enter the file location in Wasabi Wallet window and load the file.

Read more here.

How can I generate a receiving address of my hardware wallet?

In Wasabi Wallet you load your previously imported wallet (from Wasabi skeleton, or USB detection) and go to the Receive dialog, here you enter a label for the observers of the incoming transaction and click Continue. In the receive dialog, previously generated addresses (which haven't received any funds yet) can be viewed and copied at Addresses Awaiting Payment.

Read more here.

How can I sign a transaction with a USB connected hardware wallet?

To send a transaction you will need to connect your hardware wallet and unlock the device (using PIN or password).

  • Go to Send, enter the address to send to and the amount of bitcoin to spend.
  • Enter the label of whom you are sending to.
  • At the Preview Transaction screen, check if all the information is correct.
  • After you have checked that everything is correct, click Send Now to sign it with the connected hardware wallet and broadcast the transaction to the network.

Read more here.

How can I build and export a transaction to ColdCard?

  • Enable PSBT workflow in the Wallet Settings.
  • Go to Send and enter the destination address and amount.
  • Click Continue.
  • Enter the label of whom you are sending to.
  • At the Preview Transaction screen, check that everything is correct.
  • Click on Save PSBT file and save the file to the MicroSD card.
  • You can then insert the MicroSD card (containing the PSBT) in the Coldcard for manual verification and signing.

Read more here.

How can I sign a transaction on the ColdCard?

On the ColdCard (Mk2, firmware 2.1.1 and up) you enter the PIN code to unlock the hardware wallet and press Ready To Sign with the MicroSD card containing the previously generated transaction or PSBT-file. Verify the address and amount and the ColdCard will then create a signed.psbt and final.txn file on the MicroSD card. The finalized transaction (xxx-final.txn) can now be broadcast by Wasabi Wallet with the Broadcaster tool, or even a radio or satellite dish if someone is listening!

Read more here.

How can I import and broadcast a final transaction from ColdCard?

In the top search bar, go to Broadcaster and then select Import Transaction, now you can select the previously finalized (and signed) transaction file from the MicroSD card. If this fails you can manually type the path to this file in Wasabi Wallet to load the transaction. Now click Broadcast Transaction to send it off over Tor to a random Bitcoin node so it can flood over to the miners for confirmation in a block.

Read more here.

TIP

A Broadcast button will be displayed next to the Send button, when PSBT workflow is enabled, for an easier workflow.

Can I coinjoin bitcoins on my hardware wallet?

No, that is currently not possible. A coinjoin is a multi round interactive process, and requires fast signing by the participants, thus the keys need to be on a hot computer. Thus currently you have to send the bitcoins from your hardware wallet to a hot Wasabi Wallet, do the coinjoin and then send them back to a new address on the Hardware wallet for cold-storage.

Read more here.

TIP

Trezor now supports coinjoin with the Trezor Suite, using same rounds as Wasabi Wallet users. Read more hereopen in new window.

Does Ledger Live send my public keys and addresses to a third party server?

Only if you add your accounts in the app, but not if you update your device firmware or install apps. When using the Ledger Live software wallet to manage your coins, you send all of your used, and 20 unused addresses to Ledger's nodes. Sourceopen in new window

Your extended public key, however, is not shared with Ledger's node, but rather stored encrypted on your local machine.

Read more hereopen in new window.

Ledger could potentially analyze information from API calls to their nodes to link addresses to individual users, though Ledger says no logs are kept during normal operation.

To avoid any privacy leak, you can use a Ledger hardware wallet in combination with Wasabi as a software interface, and because Wasabi does not leak your addresses, your transaction history is not shared with anyone.

After I coinjoined my coins and reached 100% privacy, I sent them to my hardware wallet and now the coins have anonscore 1. Why?

Everything is working as expected.

The anonymity score (number) is tied to your wallet that you used to coinjoin, if you send a coinjoined coin to another Wasabi Wallet of yours (hardware wallet or normal wallet) it will have an anonscore of 1 because this wallet doesn't know all of the coinjoin history.

You should put a meaningful label when you generate a receive address in your hardware wallet, e.g. "private UTXO" (something that reminds you that you got this UTXO from your Wasabi Wallet and that it was coinjoined).

Can I use Trezor One with Wasabi?

No. Unfortunately, Trezor One is not supported by Wasabi Wallet. For the complete list of all the officially supported hardware wallets, click hereopen in new window.

Can I use BitBox with Wasabi?

No. Unfortunately, BitBox is not supported by Wasabi Wallet. For the complete list of all the officially supported hardware wallets, click hereopen in new window.

How can I type in the passphrase of my Trezor T?

After connecting the Trezor T to your computer and upon trying to load your wallet, you get a message on the Trezor T to choose where to type your passphrase, on the device or the host (computer), choose the first option (device) then enter the passprase using the touchscreen of your Trezor T. Wasabi wallet will now load this passphrase protected wallet.

I have coinjoined with a Trezor device on Trezor Suite, but in Wasabi I cannot see my coins?

Trezor uses only Taproot for coinjoin, with a non-standard derivation path. So Wasabi does not know about the existence of the Trezor Suite coinjoin coins.

How can I use Hardware Wallets on Linux (udev rules)?

On Linux, you need to create a set of udev rules for the hardware wallet to be reachable.

Udev rules instructions can be found hereopen in new window.

History

How can I check the transactions history?

The wallet's main page displays the history of all transactions made with this specific wallet. It includes receiving, sending, and coinjoin transactions.

Wasabi Wallet History

How can I see coinjoins in the history list?

Coinjoin transactions are indicated with a shield icon:

History Coinjoin

When the wallet has made multiple coinjoins, the coinjoins will be clustered. Coinjoin clusters are indicated with a double shield icon. To see the individual coinjoins, the cluster can be expanded by clicking the arrow on the left:

History Coinjoin Expanded

A coinjoin is a payment within the same wallet, thus it only shows the coordination fee (if any) and mining fee leaving the wallet.

Can I sort the history items?

Yes, the history items can be sorted by clicking on the column title:

Sort Date Column

Can I search for a transaction ID in the history?

Yes. This can be done by pasting the transaction ID into the search bar or by manually typing part of the transaction ID. After clicking the result, the transaction will be highlighted in the history.

SearchBar Search TX

TIP

It will only show results of the wallets which are currently open.

Can I export a list of transactions?

There is currently no convenient way to export a list with transaction details inside the GUI. However, you can see the wallet.json files inside the WalletBackups folder (you can find it in your Wasabi data folder) which contains all the public keys, labels and anonset.

You can use the Wasabi RPC server gethistory call to get a list of all transactions, including date, block height, amount, label and tx id.

Settings

How do I connect my own full node to Wasabi?

There are three different ways of using your Bitcoin full node with Wasabi:

  • If you have a full node already running on the same computer as Wasabi, it will automatically be detected and used by default.
  • If you have a full node on a remote computer, then you can connect to it by specifying the local network IP address or Tor onion service in the Wasabi Settings tab.

Wasabi Wallet Remote P2P Bitcoin Endpoint full node

  • If you are not yet running a full node, Wasabi has the bitcoind binaries included, and with one click in the Settings, you can start Bitcoin Knots together with Wasabi.

Wasabi Wallet local Bitcoin Knots full node integration

Watch the videoopen in new window

How can I turn off Tor?

You can turn off Network anonymization (Tor) in the Settings. Note that this is a privacy concern, especially when you coinjoin and when you broadcast a transaction. In the first case, the coordinator would know the links between your inputs and outputs based on your IP address. In the second case, if you happen to broadcast a transaction of yours to a full node that is spying on you, it will know the link between your transaction and your IP address.

DANGER

It is recommended to always use Tor! The setting to turn it off is only intended for debugging and trouble shooting.

How can I change the anonymity score target?

The anonscore target is a wallet specific setting which is determined by the Coinjoin Strategy, but can also be manually changed in the Coinjoin Settings dialog.

On the main view click the three dots on the top right corner after loading the wallet. Choose Coinjoin Settings, click Change (Coinjoin strategy), click Customize. Move the Anonymity score target slider to the desired value and click Done.

Coinjoin Settings Anonymity score target

Alternatively, you can change the anonymity score target by editing the wallet file. Go to the SearchBar and click Wallet Folder and open the wallet json file and edit the AnonScoreTarget value.

"AnonScoreTarget": 5,
 

What is the dust threshold?

Dust can mean a lot of thingsopen in new window, depending on how you look at it. It can be a non-economical input, that is a UTXO that has less value than the fees it would cost to spend this coin. A dust attack is actually about forced address reuseopen in new window, the malicious actor sends very small amounts into old addresses and consolidation of these dust UTXOs can link several coins in a wallet cluster.

Specifically in the context of Wasabi, with the dust threshold settings you can limit the value of spam coins shown in the GUI. Coins that you receive from other wallets (so no self-spend) which are less than the dust threshold in value and are received on an already used address are not shown. For example: When it is set to 0.0000 5000 BTC, and you receive a coin worth 0.0000 4000 BTC from a different wallet to an already used address, then this transaction and the coin in the coin list will not be shown.

Wasabi Wallet Dust threshold settings

Where can I find the logs?

In the SearchBar you can see there are several logs available.

  • The Logs shows the general log information about Wasabi Wallet.
  • The Tor Logs shows the Tor specific logs.

Wasabi Wallet SearchBar Help&Support and Open

Alternatively, you can find the logs inside your Wasabi data folder.

How to activate/deactivate discreet mode?

You can activate/deactivate Discreet Mode by clicking the Discreet Mode icon in the bottom left corner of the main view.

Read more here.

Discreet Mode Icon

How can I change to the white theme?

You can change from the default dark to the white theme by disabling Dark Mode in the Settings. Alternatively, you can switch to Dark Mode in the .walletwasabi/client/UIConfig.json data folder. Open the UIConfig.json file and change the line from "DarkModeEnabled": true to "DarkModeEnabled": false. Save the file and restart Wasabi. Please note that Wasabi is designed for the dark theme, and some color schemes might not look beautiful in the white mode.

Wasabi Wallet white theme

Coin Control Best Practices

What are coins?

Bitcoin uses a system of inputs and outputs to keep track of who owns how many sats. Every transaction specifies one or more inputs, the chunk of bitcoin being spent, and one or more outputs, the destination of who receives the bitcoin. A coin is also called an unspent transaction output (UTXO), meaning that this output has not been used as the input of a new transaction - it is yet to be spent. In order to spend a UTXO, the valid signature and script has to be provided in the transaction. This ensures that only with knowledge of the correct private key can this coin be sent to a new address. This chain of links between inputs being spent and outputs being generated is verified by every full node, and stored on the blockchain.

How can I enable (manual) coin control?

The default send workflow uses the automatic coin selection algorithm, which is optimized in a way that "traditional" coin control is obsolete. However, the user can review which coins are selected, or select different coins using the (manual) coin control. This can be done by pressing and holding the keystroke alt (or option on mac device) at the Preview Transaction screen, which will bring up the Review coins button to click on.

Send Review Coins

This is a developer feature

Do NOT use the manual coin control if you do not know what you are doing. Misusing it can have seriously bad privacy consequences.

How do I select coins for spending?

In the normal send workflow, Wasabi automatically selects which coins to send.

To send a specific coin, the user can use the Wallet Coins dialog (a.k.a coinlist). The coinlist can be brought up by pressing the keyboard combination CTRL + C + D simultaneously on the main view or via the search bar.

This is for advanced usage only

Users should stick to the default send workflow. Misusing the coinlist for sending can result in critical privacy risks.

Wallet Coins Send Selected Coins

This is not full coin control

You can only send coins in full. There is no possiblity to enter a bitcoin amount or receive change.

Can I consolidate anonset coins?

It is advisable to limit the recombining of mixed coins because it can only decrease the privacy of these coins. This reveals that all the consolidated UTXOs are controlled by one entity, which was not known before the consolidation. That said, if you combine only a couple of mixed coins, you might not reveal your pre-coinjoin transaction history, especially when you did several re-mixes. So consolidating some private coins is OK to do.

Take great care!

Never consolidate non-private coins with private (mixed) coins, as this negates the privacy benefits of the coinjoin.

Watch the videoopen in new window

How can I send my anonset coins to my hardware wallet?

Most hardware wallets communicate with servers to provide you with your balance. This reveals your public key to the server, which damages your privacy - the hardware wallet company can now link together all your addresses. As a result it is not recommended that you send your mixed coins to an address associated with your hardware wallet unless you are confident that you have set up your hardware wallet in a way that it does not communicate with a 3rd party server (see below).

You can, however, manage your hardware wallet with the Wasabi interface. Alternatively, you can use your hardware wallet with Electrum, and in order to not leak any information to third-party servers run your own Electrum Personal Serveropen in new window, ElectrumXopen in new window or Electrsopen in new window.

What can I do with small change?

There are no hard and fast rules for what to do with the change. Generally try to avoid having change by using the change avoidance suggestions when sending. Generally change should be coinjoined, Wasabi automatically coinjoins the change if possible (if the change is more than the coinjoin minimum).

You should treat change as a kind of toxic waste (handled with great care). You can spend the change to the same entity as the initial transaction, without loosing much privacy. Only spend the change to another entity, if these two won't make you trouble knowing you interact with both of them. If needed, you can consolidate several change coins, but we advise you to do it in a coinjoin. In JoinMarket you can specify the exact amount of coinjoin, so it can be exactly the amount of the change. Or open a new Lightning Network node (not your main Lightning node), create a channel to a random peer on the network and route the funds back to you.

TIP

For more information, see this dedicated chapter.

Music Box

What does Awaiting cheaper coinjoins mean?

It means your wallet is waiting to participate in a cheaper coinjoin round(s) because the fee rate of the current coinjoin(s) is higher than the median of the selected Coinjoin time preference.

What does Awaiting the blame round mean?

If some other participant disrupted the round by failing to sign the coinjoin transaction, this message briefly appears before a new coinjoin, known as the blame round, is created with the responsive participants from the failed round.

What does Insufficient funds eligible for coinjoin mean?

This message is displayed when some coins cannot coinjoin, for example when they are unconfirmed or below the minimum coinjoin amount.

What does Some funds are rejected from coinjoining mean?

If an input has failed to sign during a previous round it registered to, it will be temporarily banned to prevent denial of service attacks. Coinjoin coordinators may also reject funds for risk management purposes. You can view the ban time at the Wallet Coins dialog via the search bar or with the keyboard shortcut “CTRL + C + D”.

Buy Anything Button

What is the Buy Anything Button?

The Buy Anything button was introduced in Wasabi version 2.0.5 which can be used to make purchases directly with Bitcoin. The button is an integration using Shopinbit'sopen in new window premium concierge service and travel booking services which are now conveniently accessible from your wallet. You can Buy Anything because ShopinBit has a team of experts that handle your customized orders, whether it's electronics, cars, flights, or hotels. There is currently a $1,000 minimum purchase limit for this service.

How does the Buy Anything Button work?

When clicking on the Buy Anything Button, the user communicates with ShopinBit over a new Tor identity (unless Tor is disabled in the Settings). The user gets asked some questions, like what he wants to buy, and some follow-up questions needed for the order. After the details are confirmed in the chat, a bitcoin address gets displayed to pay the invoice. Once ShopinBit has received the bitcoin on the address with a confirmation, they will start processing the order. The processing time depends on what has been bought. For example, a physical product may take weeks to deliver but a spontaneous travel booking can be arranged within days.

Does the Buy Anything Button hurt my privacy?

The Buy Anything Button does not compromise your wallet's privacy. Things like the wallet balance and history are still private. However, when providing some personal details like e-mail and shipping address for the order, then ShopinBit is aware of these, the same as when ordering directly from them or any other merchant. They are aware of this and that's why they ask for the minimal required info possible to complete the order. Your wallet information is never connected to the information used for ordering anything.

But of course, make sure to use private coins when sending them/anyone your bitcoin!

What can I order and for whom is this available?

ShopinBit can get you anything that is legal in Poland. Some services may or may not be available depending on the jurisdiction. Their Terms and Conditions are displayed and required to be accepted before ordering. For (legal) information and questions, please refer to the Shopinbit websiteopen in new window.

Advanced Usage

Can I change the default ports for the Wasabi's bundled Tor?

Yes. Since Wasabi version 2.0.6open in new window it is possible to specify the Tor SOCKS5 and the Tor control ports. This can be done by specifying the port(s) at startup with the startup parameters.

Where does the BTC exchange rate come from?

Wasabi fetches the BTC/USD exchange rate from one of these exchanges: blockchain.com, Bitstamp, CoinGecko, Coinbase, Gemini and Coingate. It first tries to fetch the exchange rate from blockchain.com, if that's not possible it will try to fetch it from the next exchange in the listed order (and so on, until success).

- + diff --git a/FAQ/index.html b/FAQ/index.html index b9a0870734..680c4d1c56 100644 --- a/FAQ/index.html +++ b/FAQ/index.html @@ -27,11 +27,11 @@ Frequently Asked Questions | Wasabi Docs - - + +

Frequently Asked Questions

This is an archive with many questions that Wasabikas have asked most frequently, including:

  • Answers about the basics of privacy and Bitcoin in general.
  • The important details of how to install Wasabi properly, and the best practices for using it.
  • Further guidance for those who are interested in contributing to Wasabi.

Chapters

- + diff --git a/assets/404.html-CbyfL9Ee.js b/assets/404.html-BStBYnh5.js similarity index 82% rename from assets/404.html-CbyfL9Ee.js rename to assets/404.html-BStBYnh5.js index 93df49abc5..e668ec9985 100644 --- a/assets/404.html-CbyfL9Ee.js +++ b/assets/404.html-BStBYnh5.js @@ -1 +1 @@ -import{_ as t,o as e,c as o,a}from"./app-BPKesm5h.js";const n={},c=a("p",null,"404 Not Found",-1),l=[c];function s(_,r){return e(),o("div",null,l)}const d=t(n,[["render",s],["__file","404.html.vue"]]),h=JSON.parse('{"path":"/404.html","title":"","lang":"en-US","frontmatter":{"layout":"NotFound"},"headers":[],"git":{},"filePathRelative":null}');export{d as comp,h as data}; +import{_ as t,o as e,c as o,a}from"./app-BgbPjqpx.js";const n={},c=a("p",null,"404 Not Found",-1),l=[c];function s(_,r){return e(),o("div",null,l)}const d=t(n,[["render",s],["__file","404.html.vue"]]),h=JSON.parse('{"path":"/404.html","title":"","lang":"en-US","frontmatter":{"layout":"NotFound"},"headers":[],"git":{},"filePathRelative":null}');export{d as comp,h as data}; diff --git a/assets/AddressReuse.html-D74GBKra.js b/assets/AddressReuse.html-AL4Hzje_.js similarity index 98% rename from assets/AddressReuse.html-D74GBKra.js rename to assets/AddressReuse.html-AL4Hzje_.js index 1a7987c7d6..ea3d582980 100644 --- a/assets/AddressReuse.html-D74GBKra.js +++ b/assets/AddressReuse.html-AL4Hzje_.js @@ -1 +1 @@ -import{_ as d,r as o,o as r,c as u,a as e,d as t,w as a,b as s,e as c}from"./app-BPKesm5h.js";const h={},p=e("h1",{id:"address-reuse",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#address-reuse"},[e("span",null,"Address Reuse")])],-1),m=e("p",null,"The first rule of Bitcoin privacy:",-1),_=e("blockquote",null,[e("p",null,"Never reuse addresses!")],-1),f=e("p",null,"The second rule of Bitcoin privacy:",-1),b=e("blockquote",null,[e("p",null,"NEVER reuse addresses!!")],-1),y={class:"table-of-contents"},v=e("hr",null,null,-1),g=e("h2",{id:"problem",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#problem"},[e("span",null,"Problem")])],-1),w=e("h3",{id:"easy-wallet-clustering",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#easy-wallet-clustering"},[e("span",null,"Easy wallet clustering")])],-1),k=e("p",null,"If an address is used more than once, it means that the same private key can spend all its coins. It is very easy to find all the UTXOs of an address, and thus to find out how many bitcoin the private key holds.",-1),x=e("p",null,"Further, in a transaction where one output has a reused address, then it is very likely that this output is the payment destination, and not the change. Most wallets automatically generate new change addresses for every transaction, but payment addresses are selected manually by the user.",-1),A={href:"https://en.bitcoin.it/wiki/Address_reuse",target:"_blank",rel:"noopener noreferrer"},R={href:"https://en.bitcoin.it/Privacy#Address_reuse",target:"_blank",rel:"noopener noreferrer"},P=e("p",null,"There are different types of address reuse:",-1),I=e("h3",{id:"publicly-advertised-addresses-donations",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#publicly-advertised-addresses-donations"},[e("span",null,"Publicly advertised addresses (donations)")])],-1),T=e("p",null,"Here, a person publishes a single address to a public forum, like in the bio of a social media network or on a website, and anyone can send bitcoin to this address.",-1),W=e("h3",{id:"dusting",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dusting"},[e("span",null,"Dusting")])],-1),B={href:"https://en.bitcoin.it/Privacy#Forced_address_reuse",target:"_blank",rel:"noopener noreferrer"},E=c('

Intentionally malicious

Since Wasabi is libre and open-source, anyone can modify a fork of Wasabi to make sure the same two addresses are recycled in every CoinJoin registration. This is someone intentionally deanonymizing himself, and he might have quite dubious motives.

Wasabi's Solution

Remove used address from GUI

Wasabi encourages the user to not reuse addresses. You always get a new Bitcoin address whenever you generate one. Previously generated addresses, which haven't received bitcoin yet, are displayed at Addresses Awaiting Payment. An address is automatically removed from the Addresses Awaiting Payment list once that address receives funds.

',5);function N(S,U){const n=o("router-link"),i=o("ExternalLinkIcon"),l=o("RouteLink");return r(),u("div",null,[p,m,_,f,b,e("nav",y,[e("ul",null,[e("li",null,[t(n,{to:"#problem"},{default:a(()=>[s("Problem")]),_:1}),e("ul",null,[e("li",null,[t(n,{to:"#easy-wallet-clustering"},{default:a(()=>[s("Easy wallet clustering")]),_:1})]),e("li",null,[t(n,{to:"#publicly-advertised-addresses-donations"},{default:a(()=>[s("Publicly advertised addresses (donations)")]),_:1})]),e("li",null,[t(n,{to:"#dusting"},{default:a(()=>[s("Dusting")]),_:1})]),e("li",null,[t(n,{to:"#intentionally-malicious"},{default:a(()=>[s("Intentionally malicious")]),_:1})])])]),e("li",null,[t(n,{to:"#wasabi-s-solution"},{default:a(()=>[s("Wasabi's Solution")]),_:1}),e("ul",null,[e("li",null,[t(n,{to:"#remove-used-address-from-gui"},{default:a(()=>[s("Remove used address from GUI")]),_:1})])])])])]),v,g,w,k,x,e("p",null,[s("Read more about the privacy concerns of address reuse in the "),e("a",A,[s("separate entry"),t(i)]),s(" and the "),e("a",R,[s("privacy chapter"),t(i)]),s(" of the Bitcoin wiki.")]),P,I,T,W,e("p",null,[s("With a "),e("a",B,[s("forced address reuse attack"),t(i)]),s(", an attacker sends a small amount of bitcoin to an already existing address. The attacker hopes that this dust coin is consolidated with another coin, thus linking the two in a cluster.")]),E,e("p",null,[s("To protect against forced address reuse attack (Dusting), Wasabi has a modifiable "),t(l,{to:"/FAQ/FAQ-UseWasabi.html#what-is-the-dust-threshold"},{default:a(()=>[s("dust limit")]),_:1}),s(", where the wallet does not show coins below a certain threshold value.")])])}const D=d(h,[["render",N],["__file","AddressReuse.html.vue"]]),F=JSON.parse(`{"path":"/why-wasabi/AddressReuse.html","title":"Address Reuse","lang":"en-US","frontmatter":{"title":"Address Reuse","description":"On the nuances of address reuse, why it is bad and how to fix it. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Problem","slug":"problem","link":"#problem","children":[{"level":3,"title":"Easy wallet clustering","slug":"easy-wallet-clustering","link":"#easy-wallet-clustering","children":[]},{"level":3,"title":"Publicly advertised addresses (donations)","slug":"publicly-advertised-addresses-donations","link":"#publicly-advertised-addresses-donations","children":[]},{"level":3,"title":"Dusting","slug":"dusting","link":"#dusting","children":[]},{"level":3,"title":"Intentionally malicious","slug":"intentionally-malicious","link":"#intentionally-malicious","children":[]}]},{"level":2,"title":"Wasabi's Solution","slug":"wasabi-s-solution","link":"#wasabi-s-solution","children":[{"level":3,"title":"Remove used address from GUI","slug":"remove-used-address-from-gui","link":"#remove-used-address-from-gui","children":[]}]}],"git":{"updatedTime":1684228793000},"filePathRelative":"why-wasabi/AddressReuse.md"}`);export{D as comp,F as data}; +import{_ as d,r as o,o as r,c as u,a as e,d as t,w as a,b as s,e as c}from"./app-BgbPjqpx.js";const h={},p=e("h1",{id:"address-reuse",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#address-reuse"},[e("span",null,"Address Reuse")])],-1),m=e("p",null,"The first rule of Bitcoin privacy:",-1),_=e("blockquote",null,[e("p",null,"Never reuse addresses!")],-1),f=e("p",null,"The second rule of Bitcoin privacy:",-1),b=e("blockquote",null,[e("p",null,"NEVER reuse addresses!!")],-1),y={class:"table-of-contents"},v=e("hr",null,null,-1),g=e("h2",{id:"problem",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#problem"},[e("span",null,"Problem")])],-1),w=e("h3",{id:"easy-wallet-clustering",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#easy-wallet-clustering"},[e("span",null,"Easy wallet clustering")])],-1),k=e("p",null,"If an address is used more than once, it means that the same private key can spend all its coins. It is very easy to find all the UTXOs of an address, and thus to find out how many bitcoin the private key holds.",-1),x=e("p",null,"Further, in a transaction where one output has a reused address, then it is very likely that this output is the payment destination, and not the change. Most wallets automatically generate new change addresses for every transaction, but payment addresses are selected manually by the user.",-1),A={href:"https://en.bitcoin.it/wiki/Address_reuse",target:"_blank",rel:"noopener noreferrer"},R={href:"https://en.bitcoin.it/Privacy#Address_reuse",target:"_blank",rel:"noopener noreferrer"},P=e("p",null,"There are different types of address reuse:",-1),I=e("h3",{id:"publicly-advertised-addresses-donations",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#publicly-advertised-addresses-donations"},[e("span",null,"Publicly advertised addresses (donations)")])],-1),T=e("p",null,"Here, a person publishes a single address to a public forum, like in the bio of a social media network or on a website, and anyone can send bitcoin to this address.",-1),W=e("h3",{id:"dusting",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dusting"},[e("span",null,"Dusting")])],-1),B={href:"https://en.bitcoin.it/Privacy#Forced_address_reuse",target:"_blank",rel:"noopener noreferrer"},E=c('

Intentionally malicious

Since Wasabi is libre and open-source, anyone can modify a fork of Wasabi to make sure the same two addresses are recycled in every CoinJoin registration. This is someone intentionally deanonymizing himself, and he might have quite dubious motives.

Wasabi's Solution

Remove used address from GUI

Wasabi encourages the user to not reuse addresses. You always get a new Bitcoin address whenever you generate one. Previously generated addresses, which haven't received bitcoin yet, are displayed at Addresses Awaiting Payment. An address is automatically removed from the Addresses Awaiting Payment list once that address receives funds.

',5);function N(S,U){const n=o("router-link"),i=o("ExternalLinkIcon"),l=o("RouteLink");return r(),u("div",null,[p,m,_,f,b,e("nav",y,[e("ul",null,[e("li",null,[t(n,{to:"#problem"},{default:a(()=>[s("Problem")]),_:1}),e("ul",null,[e("li",null,[t(n,{to:"#easy-wallet-clustering"},{default:a(()=>[s("Easy wallet clustering")]),_:1})]),e("li",null,[t(n,{to:"#publicly-advertised-addresses-donations"},{default:a(()=>[s("Publicly advertised addresses (donations)")]),_:1})]),e("li",null,[t(n,{to:"#dusting"},{default:a(()=>[s("Dusting")]),_:1})]),e("li",null,[t(n,{to:"#intentionally-malicious"},{default:a(()=>[s("Intentionally malicious")]),_:1})])])]),e("li",null,[t(n,{to:"#wasabi-s-solution"},{default:a(()=>[s("Wasabi's Solution")]),_:1}),e("ul",null,[e("li",null,[t(n,{to:"#remove-used-address-from-gui"},{default:a(()=>[s("Remove used address from GUI")]),_:1})])])])])]),v,g,w,k,x,e("p",null,[s("Read more about the privacy concerns of address reuse in the "),e("a",A,[s("separate entry"),t(i)]),s(" and the "),e("a",R,[s("privacy chapter"),t(i)]),s(" of the Bitcoin wiki.")]),P,I,T,W,e("p",null,[s("With a "),e("a",B,[s("forced address reuse attack"),t(i)]),s(", an attacker sends a small amount of bitcoin to an already existing address. The attacker hopes that this dust coin is consolidated with another coin, thus linking the two in a cluster.")]),E,e("p",null,[s("To protect against forced address reuse attack (Dusting), Wasabi has a modifiable "),t(l,{to:"/FAQ/FAQ-UseWasabi.html#what-is-the-dust-threshold"},{default:a(()=>[s("dust limit")]),_:1}),s(", where the wallet does not show coins below a certain threshold value.")])])}const D=d(h,[["render",N],["__file","AddressReuse.html.vue"]]),F=JSON.parse(`{"path":"/why-wasabi/AddressReuse.html","title":"Address Reuse","lang":"en-US","frontmatter":{"title":"Address Reuse","description":"On the nuances of address reuse, why it is bad and how to fix it. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Problem","slug":"problem","link":"#problem","children":[{"level":3,"title":"Easy wallet clustering","slug":"easy-wallet-clustering","link":"#easy-wallet-clustering","children":[]},{"level":3,"title":"Publicly advertised addresses (donations)","slug":"publicly-advertised-addresses-donations","link":"#publicly-advertised-addresses-donations","children":[]},{"level":3,"title":"Dusting","slug":"dusting","link":"#dusting","children":[]},{"level":3,"title":"Intentionally malicious","slug":"intentionally-malicious","link":"#intentionally-malicious","children":[]}]},{"level":2,"title":"Wasabi's Solution","slug":"wasabi-s-solution","link":"#wasabi-s-solution","children":[{"level":3,"title":"Remove used address from GUI","slug":"remove-used-address-from-gui","link":"#remove-used-address-from-gui","children":[]}]}],"git":{"updatedTime":1684228793000},"filePathRelative":"why-wasabi/AddressReuse.md"}`);export{D as comp,F as data}; diff --git a/assets/BIPs.html-BNCOrWwH.js b/assets/BIPs.html-D0DnGh8g.js similarity index 98% rename from assets/BIPs.html-BNCOrWwH.js rename to assets/BIPs.html-D0DnGh8g.js index 0b44bce23a..6b2959ad4d 100644 --- a/assets/BIPs.html-BNCOrWwH.js +++ b/assets/BIPs.html-D0DnGh8g.js @@ -1 +1 @@ -import{_ as a,r as n,o as l,c as p,a as e,d as t,w as s,b as i}from"./app-BPKesm5h.js";const b={},c=e("h1",{id:"supported-bips",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#supported-bips"},[e("span",null,"Supported BIPs")])],-1),h={class:"table-of-contents"},d=e("p",null,"Wasabi Wallet strives toward establishing solid industry best practices and standards. Here is a list of all the supported and integrated Bitcoin Improvement Proposals:",-1),u=e("h2",{id:"what-is-supported",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-supported"},[e("span",null,"What is supported")])],-1),m={href:"https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki",target:"_blank",rel:"noopener noreferrer"},P={href:"https://github.com/bitcoin/bips/blob/master/bip-0072.mediawiki",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/bitcoin/bips/blob/master/bip-0078.mediawiki",target:"_blank",rel:"noopener noreferrer"},B={href:"https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki",target:"_blank",rel:"noopener noreferrer"},I={href:"https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki",target:"_blank",rel:"noopener noreferrer"},W={href:"https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},T={href:"https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki",target:"_blank",rel:"noopener noreferrer"},K={href:"https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki",target:"_blank",rel:"noopener noreferrer"},V=e("h2",{id:"what-is-not-supported",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-not-supported"},[e("span",null,"What is not supported")])],-1),C={href:"https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki",target:"_blank",rel:"noopener noreferrer"},H={href:"https://github.com/bitcoin/bips/blob/master/bip-0069.mediawiki",target:"_blank",rel:"noopener noreferrer"};function L(N,O){const r=n("router-link"),o=n("ExternalLinkIcon");return l(),p("div",null,[c,e("nav",h,[e("ul",null,[e("li",null,[t(r,{to:"#what-is-supported"},{default:s(()=>[i("What is supported")]),_:1})]),e("li",null,[t(r,{to:"#what-is-not-supported"},{default:s(()=>[i("What is not supported")]),_:1})])])]),d,u,e("ul",null,[e("li",null,[e("a",m,[i("BIP 21: URI Scheme"),t(o)])]),e("li",null,[e("a",_,[i("BIP 32: Hierarchical Deterministic Wallets"),t(o)])]),e("li",null,[e("a",f,[i("BIP 38: Password-Protected Private Key"),t(o)])]),e("li",null,[e("a",g,[i("BIP 39: Mnemonic Code for Generating Deterministic Keys"),t(o)])]),e("li",null,[e("a",k,[i("BIP 44: Multi-Account Hierarchy for Deterministic Wallets"),t(o)])]),e("li",null,[e("a",P,[i("BIP 72: bitcoin: uri extensions for Payment Protocol"),t(o)])]),e("li",null,[e("a",w,[i("BIP 78: A Simple Payjoin Proposal"),t(o)])]),e("li",null,[e("a",B,[i("BIP 84: Derivation scheme for P2WPKH based accounts"),t(o)])]),e("li",null,[e("a",I,[i("BIP 86: Key Derivation for Single Key P2TR Outputs"),t(o)])]),e("li",null,[e("a",v,[i("BIP 125: Opt-In full Replace-by-Fee Signaling"),t(o)])]),e("li",null,[e("a",W,[i("BIP 141: Segregated Witness (Consensus Layer)"),t(o)])]),e("li",null,[e("a",S,[i("BIP 143: Transaction Signature Verification for Version 0 Witness Program"),t(o)])]),e("li",null,[e("a",x,[i("BIP 144: Segregated Witness (Peer Services)"),t(o)])]),e("li",null,[e("a",y,[i("BIP 158: Block filters"),t(o)])]),e("li",null,[e("a",T,[i("BIP 173: Base32 address format for native v0-16 witness outputs"),t(o)])]),e("li",null,[e("a",D,[i("BIP 174: Partially Signed Bitcoin Transaction Format"),t(o)])]),e("li",null,[e("a",K,[i("BIP 341: Taproot: SegWit version 1 spending rules"),t(o)])])]),V,e("ul",null,[e("li",null,[e("a",C,[i("BIP 37: Bloom filters"),t(o)])]),e("li",null,[e("a",H,[i("BIP 69: Lexicographical Indexing of Transaction Inputs and Outputs"),t(o)])])])])}const A=a(b,[["render",L],["__file","BIPs.html.vue"]]),E=JSON.parse('{"path":"/using-wasabi/BIPs.html","title":"Supported BIPs","lang":"en-US","frontmatter":{"title":"Supported BIPs","description":"A collection and explanation of all the Bitcoin Improvement Proposals that are supported by Wasabi. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"What is supported","slug":"what-is-supported","link":"#what-is-supported","children":[]},{"level":2,"title":"What is not supported","slug":"what-is-not-supported","link":"#what-is-not-supported","children":[]}],"git":{"updatedTime":1678183642000},"filePathRelative":"using-wasabi/BIPs.md"}');export{A as comp,E as data}; +import{_ as a,r as n,o as l,c as p,a as e,d as t,w as s,b as i}from"./app-BgbPjqpx.js";const b={},c=e("h1",{id:"supported-bips",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#supported-bips"},[e("span",null,"Supported BIPs")])],-1),h={class:"table-of-contents"},d=e("p",null,"Wasabi Wallet strives toward establishing solid industry best practices and standards. Here is a list of all the supported and integrated Bitcoin Improvement Proposals:",-1),u=e("h2",{id:"what-is-supported",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-supported"},[e("span",null,"What is supported")])],-1),m={href:"https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki",target:"_blank",rel:"noopener noreferrer"},P={href:"https://github.com/bitcoin/bips/blob/master/bip-0072.mediawiki",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/bitcoin/bips/blob/master/bip-0078.mediawiki",target:"_blank",rel:"noopener noreferrer"},B={href:"https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki",target:"_blank",rel:"noopener noreferrer"},I={href:"https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki",target:"_blank",rel:"noopener noreferrer"},W={href:"https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},T={href:"https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki",target:"_blank",rel:"noopener noreferrer"},K={href:"https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki",target:"_blank",rel:"noopener noreferrer"},V=e("h2",{id:"what-is-not-supported",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-not-supported"},[e("span",null,"What is not supported")])],-1),C={href:"https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki",target:"_blank",rel:"noopener noreferrer"},H={href:"https://github.com/bitcoin/bips/blob/master/bip-0069.mediawiki",target:"_blank",rel:"noopener noreferrer"};function L(N,O){const r=n("router-link"),o=n("ExternalLinkIcon");return l(),p("div",null,[c,e("nav",h,[e("ul",null,[e("li",null,[t(r,{to:"#what-is-supported"},{default:s(()=>[i("What is supported")]),_:1})]),e("li",null,[t(r,{to:"#what-is-not-supported"},{default:s(()=>[i("What is not supported")]),_:1})])])]),d,u,e("ul",null,[e("li",null,[e("a",m,[i("BIP 21: URI Scheme"),t(o)])]),e("li",null,[e("a",_,[i("BIP 32: Hierarchical Deterministic Wallets"),t(o)])]),e("li",null,[e("a",f,[i("BIP 38: Password-Protected Private Key"),t(o)])]),e("li",null,[e("a",g,[i("BIP 39: Mnemonic Code for Generating Deterministic Keys"),t(o)])]),e("li",null,[e("a",k,[i("BIP 44: Multi-Account Hierarchy for Deterministic Wallets"),t(o)])]),e("li",null,[e("a",P,[i("BIP 72: bitcoin: uri extensions for Payment Protocol"),t(o)])]),e("li",null,[e("a",w,[i("BIP 78: A Simple Payjoin Proposal"),t(o)])]),e("li",null,[e("a",B,[i("BIP 84: Derivation scheme for P2WPKH based accounts"),t(o)])]),e("li",null,[e("a",I,[i("BIP 86: Key Derivation for Single Key P2TR Outputs"),t(o)])]),e("li",null,[e("a",v,[i("BIP 125: Opt-In full Replace-by-Fee Signaling"),t(o)])]),e("li",null,[e("a",W,[i("BIP 141: Segregated Witness (Consensus Layer)"),t(o)])]),e("li",null,[e("a",S,[i("BIP 143: Transaction Signature Verification for Version 0 Witness Program"),t(o)])]),e("li",null,[e("a",x,[i("BIP 144: Segregated Witness (Peer Services)"),t(o)])]),e("li",null,[e("a",y,[i("BIP 158: Block filters"),t(o)])]),e("li",null,[e("a",T,[i("BIP 173: Base32 address format for native v0-16 witness outputs"),t(o)])]),e("li",null,[e("a",D,[i("BIP 174: Partially Signed Bitcoin Transaction Format"),t(o)])]),e("li",null,[e("a",K,[i("BIP 341: Taproot: SegWit version 1 spending rules"),t(o)])])]),V,e("ul",null,[e("li",null,[e("a",C,[i("BIP 37: Bloom filters"),t(o)])]),e("li",null,[e("a",H,[i("BIP 69: Lexicographical Indexing of Transaction Inputs and Outputs"),t(o)])])])])}const A=a(b,[["render",L],["__file","BIPs.html.vue"]]),E=JSON.parse('{"path":"/using-wasabi/BIPs.html","title":"Supported BIPs","lang":"en-US","frontmatter":{"title":"Supported BIPs","description":"A collection and explanation of all the Bitcoin Improvement Proposals that are supported by Wasabi. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"What is supported","slug":"what-is-supported","link":"#what-is-supported","children":[]},{"level":2,"title":"What is not supported","slug":"what-is-not-supported","link":"#what-is-not-supported","children":[]}],"git":{"updatedTime":1678183642000},"filePathRelative":"using-wasabi/BIPs.md"}');export{A as comp,E as data}; diff --git a/assets/BackupBestPractices.html-Bd0zJ7KI.js b/assets/BackupBestPractices.html-XHQT6mek.js similarity index 99% rename from assets/BackupBestPractices.html-Bd0zJ7KI.js rename to assets/BackupBestPractices.html-XHQT6mek.js index 357881e143..a97306bfd6 100644 --- a/assets/BackupBestPractices.html-Bd0zJ7KI.js +++ b/assets/BackupBestPractices.html-XHQT6mek.js @@ -1 +1 @@ -import{_ as n,r,o as l,c as s,a as e,d as t,w as i,e as d,b as o}from"./app-BPKesm5h.js";const c={},h=e("h1",{id:"wasabi-backup-best-practices",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wasabi-backup-best-practices"},[e("span",null,"Wasabi Backup Best Practices")])],-1),p={class:"table-of-contents"},u=d('

Common mediums for backups

Written on a piece of paper

Printed on a piece of paper

On laminated paper

Engraved / etched / ablated / stamped on a piece of metal

Stored digitally on a computer

Stored digitally on CD, floppy disk, laserdisc, or mini-disc

Stored digitally on a flash drive

A pre-funded physical bitcoin coin (where the manufacturer generates and installs the secret key)

These are the methods you can use for your Wasabi backup and their benefits and tradeoffs.

',18);function m(f,y){const a=r("router-link");return l(),s("div",null,[h,e("nav",p,[e("ul",null,[e("li",null,[t(a,{to:"#common-mediums-for-backups"},{default:i(()=>[o("Common mediums for backups")]),_:1}),e("ul",null,[e("li",null,[t(a,{to:"#written-on-a-piece-of-paper"},{default:i(()=>[o("Written on a piece of paper")]),_:1})]),e("li",null,[t(a,{to:"#printed-on-a-piece-of-paper"},{default:i(()=>[o("Printed on a piece of paper")]),_:1})]),e("li",null,[t(a,{to:"#on-laminated-paper"},{default:i(()=>[o("On laminated paper")]),_:1})]),e("li",null,[t(a,{to:"#engraved-etched-ablated-stamped-on-a-piece-of-metal"},{default:i(()=>[o("Engraved / etched / ablated / stamped on a piece of metal")]),_:1})]),e("li",null,[t(a,{to:"#stored-digitally-on-a-computer"},{default:i(()=>[o("Stored digitally on a computer")]),_:1})]),e("li",null,[t(a,{to:"#stored-digitally-on-cd-floppy-disk-laserdisc-or-mini-disc"},{default:i(()=>[o("Stored digitally on CD, floppy disk, laserdisc, or mini-disc")]),_:1})]),e("li",null,[t(a,{to:"#stored-digitally-on-a-flash-drive"},{default:i(()=>[o("Stored digitally on a flash drive")]),_:1})]),e("li",null,[t(a,{to:"#a-pre-funded-physical-bitcoin-coin-where-the-manufacturer-generates-and-installs-the-secret-key"},{default:i(()=>[o("A pre-funded physical bitcoin coin (where the manufacturer generates and installs the secret key)")]),_:1})])])])])]),u])}const b=n(c,[["render",m],["__file","BackupBestPractices.html.vue"]]),k=JSON.parse('{"path":"/using-wasabi/BackupBestPractices.html","title":"Wasabi Backup Best Practices","lang":"en-US","frontmatter":{"title":"Wasabi Backup Best Practices","description":"A detailed guide about the best practices of backing up your passwords and recovery words. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Common mediums for backups","slug":"common-mediums-for-backups","link":"#common-mediums-for-backups","children":[{"level":3,"title":"Written on a piece of paper","slug":"written-on-a-piece-of-paper","link":"#written-on-a-piece-of-paper","children":[]},{"level":3,"title":"Printed on a piece of paper","slug":"printed-on-a-piece-of-paper","link":"#printed-on-a-piece-of-paper","children":[]},{"level":3,"title":"On laminated paper","slug":"on-laminated-paper","link":"#on-laminated-paper","children":[]},{"level":3,"title":"Engraved / etched / ablated / stamped on a piece of metal","slug":"engraved-etched-ablated-stamped-on-a-piece-of-metal","link":"#engraved-etched-ablated-stamped-on-a-piece-of-metal","children":[]},{"level":3,"title":"Stored digitally on a computer","slug":"stored-digitally-on-a-computer","link":"#stored-digitally-on-a-computer","children":[]},{"level":3,"title":"Stored digitally on CD, floppy disk, laserdisc, or mini-disc","slug":"stored-digitally-on-cd-floppy-disk-laserdisc-or-mini-disc","link":"#stored-digitally-on-cd-floppy-disk-laserdisc-or-mini-disc","children":[]},{"level":3,"title":"Stored digitally on a flash drive","slug":"stored-digitally-on-a-flash-drive","link":"#stored-digitally-on-a-flash-drive","children":[]},{"level":3,"title":"A pre-funded physical bitcoin coin (where the manufacturer generates and installs the secret key)","slug":"a-pre-funded-physical-bitcoin-coin-where-the-manufacturer-generates-and-installs-the-secret-key","link":"#a-pre-funded-physical-bitcoin-coin-where-the-manufacturer-generates-and-installs-the-secret-key","children":[]}]}],"git":{"updatedTime":1713400415000},"filePathRelative":"using-wasabi/BackupBestPractices.md"}');export{b as comp,k as data}; +import{_ as n,r,o as l,c as s,a as e,d as t,w as i,e as d,b as o}from"./app-BgbPjqpx.js";const c={},h=e("h1",{id:"wasabi-backup-best-practices",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wasabi-backup-best-practices"},[e("span",null,"Wasabi Backup Best Practices")])],-1),p={class:"table-of-contents"},u=d('

Common mediums for backups

Written on a piece of paper

Printed on a piece of paper

On laminated paper

Engraved / etched / ablated / stamped on a piece of metal

Stored digitally on a computer

Stored digitally on CD, floppy disk, laserdisc, or mini-disc

Stored digitally on a flash drive

A pre-funded physical bitcoin coin (where the manufacturer generates and installs the secret key)

These are the methods you can use for your Wasabi backup and their benefits and tradeoffs.

',18);function m(f,y){const a=r("router-link");return l(),s("div",null,[h,e("nav",p,[e("ul",null,[e("li",null,[t(a,{to:"#common-mediums-for-backups"},{default:i(()=>[o("Common mediums for backups")]),_:1}),e("ul",null,[e("li",null,[t(a,{to:"#written-on-a-piece-of-paper"},{default:i(()=>[o("Written on a piece of paper")]),_:1})]),e("li",null,[t(a,{to:"#printed-on-a-piece-of-paper"},{default:i(()=>[o("Printed on a piece of paper")]),_:1})]),e("li",null,[t(a,{to:"#on-laminated-paper"},{default:i(()=>[o("On laminated paper")]),_:1})]),e("li",null,[t(a,{to:"#engraved-etched-ablated-stamped-on-a-piece-of-metal"},{default:i(()=>[o("Engraved / etched / ablated / stamped on a piece of metal")]),_:1})]),e("li",null,[t(a,{to:"#stored-digitally-on-a-computer"},{default:i(()=>[o("Stored digitally on a computer")]),_:1})]),e("li",null,[t(a,{to:"#stored-digitally-on-cd-floppy-disk-laserdisc-or-mini-disc"},{default:i(()=>[o("Stored digitally on CD, floppy disk, laserdisc, or mini-disc")]),_:1})]),e("li",null,[t(a,{to:"#stored-digitally-on-a-flash-drive"},{default:i(()=>[o("Stored digitally on a flash drive")]),_:1})]),e("li",null,[t(a,{to:"#a-pre-funded-physical-bitcoin-coin-where-the-manufacturer-generates-and-installs-the-secret-key"},{default:i(()=>[o("A pre-funded physical bitcoin coin (where the manufacturer generates and installs the secret key)")]),_:1})])])])])]),u])}const b=n(c,[["render",m],["__file","BackupBestPractices.html.vue"]]),k=JSON.parse('{"path":"/using-wasabi/BackupBestPractices.html","title":"Wasabi Backup Best Practices","lang":"en-US","frontmatter":{"title":"Wasabi Backup Best Practices","description":"A detailed guide about the best practices of backing up your passwords and recovery words. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Common mediums for backups","slug":"common-mediums-for-backups","link":"#common-mediums-for-backups","children":[{"level":3,"title":"Written on a piece of paper","slug":"written-on-a-piece-of-paper","link":"#written-on-a-piece-of-paper","children":[]},{"level":3,"title":"Printed on a piece of paper","slug":"printed-on-a-piece-of-paper","link":"#printed-on-a-piece-of-paper","children":[]},{"level":3,"title":"On laminated paper","slug":"on-laminated-paper","link":"#on-laminated-paper","children":[]},{"level":3,"title":"Engraved / etched / ablated / stamped on a piece of metal","slug":"engraved-etched-ablated-stamped-on-a-piece-of-metal","link":"#engraved-etched-ablated-stamped-on-a-piece-of-metal","children":[]},{"level":3,"title":"Stored digitally on a computer","slug":"stored-digitally-on-a-computer","link":"#stored-digitally-on-a-computer","children":[]},{"level":3,"title":"Stored digitally on CD, floppy disk, laserdisc, or mini-disc","slug":"stored-digitally-on-cd-floppy-disk-laserdisc-or-mini-disc","link":"#stored-digitally-on-cd-floppy-disk-laserdisc-or-mini-disc","children":[]},{"level":3,"title":"Stored digitally on a flash drive","slug":"stored-digitally-on-a-flash-drive","link":"#stored-digitally-on-a-flash-drive","children":[]},{"level":3,"title":"A pre-funded physical bitcoin coin (where the manufacturer generates and installs the secret key)","slug":"a-pre-funded-physical-bitcoin-coin-where-the-manufacturer-generates-and-installs-the-secret-key","link":"#a-pre-funded-physical-bitcoin-coin-where-the-manufacturer-generates-and-installs-the-secret-key","children":[]}]}],"git":{"updatedTime":1713400415000},"filePathRelative":"using-wasabi/BackupBestPractices.md"}');export{b as comp,k as data}; diff --git a/assets/BitcoinFullNode.html-BnTWJ1TQ.js b/assets/BitcoinFullNode.html-C_yN9emI.js similarity index 99% rename from assets/BitcoinFullNode.html-BnTWJ1TQ.js rename to assets/BitcoinFullNode.html-C_yN9emI.js index 29fca9b5a4..804287a59c 100644 --- a/assets/BitcoinFullNode.html-BnTWJ1TQ.js +++ b/assets/BitcoinFullNode.html-C_yN9emI.js @@ -1 +1 @@ -import{a as r,_ as c}from"./SettingsBitcoinCore-DgSldI_2.js";import{_ as d,r as l,o as u,c as h,a as e,d as n,w as i,b as o,e as f}from"./app-BPKesm5h.js";const b={},y=e("h1",{id:"bitcoin-full-node",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoin-full-node"},[e("span",null,"Bitcoin Full Node")])],-1),p={class:"table-of-contents"},g=e("h2",{id:"the-importance-of-running-a-full-node",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#the-importance-of-running-a-full-node"},[e("span",null,"The importance of running a full node")])],-1),w=e("p",null,"When running a Bitcoin full node, you define the precise monetary rules that you voluntarily agree on. Nobody else forces this choice upon you. Thus any sovereign individual who wants to claim financial independence must run a full node. Once your own rules are firmly established, your software discovers other nodes in the Bitcoin peer-to-peer network which do not break your rules. These peers send you transactions and blocks which are valid according to their set of rules, and you verify for yourself if they are also correct for you. If one of the proposed transactions breaks your own rules, then you mark it as invalid, disconnect from and ban the node who sent you the malicious transaction.",-1),m=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"Claim your monetary sovereignty"),e("p",null,"With your full node you define, verify, and enforce the rules of your sound money Bitcoin.")],-1),_=e("p",null,"Only by running a full node, do you verify by yourself that the money you receive is actually valid bitcoin. You do not trust an external third party, and thus you also do not leak any sensitive financial information.",-1),v={href:"https://bitcoincore.org/",target:"_blank",rel:"noopener noreferrer"},k={href:"https://bitcoinknots.org/",target:"_blank",rel:"noopener noreferrer"},W={href:"https://libbitcoin.info/",target:"_blank",rel:"noopener noreferrer"},B=e("h2",{id:"how-does-wasabi-use-your-bitcoin-full-node",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-does-wasabi-use-your-bitcoin-full-node"},[e("span",null,"How does Wasabi use your Bitcoin full node")])],-1),x={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},T=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"Work in progress"),e("p",null,[o("The zkSNACKs server has to be trusted to serve correct filters. This current work in progress integration "),e("strong",null,"does not"),o(" verify consensus within Wasabi.")])],-1),N=e("code",null,"smartfee",-1),P=e("p",null,"The future goal is that the local full node (Knots) is used to generate the BIP 158 block filters from the verified blocks. Only then is there full verification, and no trust in the zkSNACKs server.",-1),I=e("h2",{id:"bitcoind-within-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoind-within-wasabi"},[e("span",null,"bitcoind within Wasabi")])],-1),C={href:"https://bitcoinknots.org",target:"_blank",rel:"noopener noreferrer"},K=f('

Wasabi Wallet Bitcoin Knots full node integration

Using an already existing local Bitcoin full node

If you have a Bitcoin full node already pre-installed on the same computer you use to run Wasabi Wallet, then Wasabi will use your node by default. You do not need to change anything in the settings, it should work plug and play. This is especially useful to save on bandwidth, as you have already downloaded and verified a block with your full node, so you don't need to download it again with Wasabi.

Using an already existing remote Bitcoin full node

If you have a Bitcoin full node already on a remote computer, then Wasabi Wallet can use this too. In the Bitcoin settings, specify the local IP address and port or the Tor onion service of your full node.

Wasabi Wallet remote Bitcoin P2P full node endpoint

Verify that Wasabi is connected to your full node

There are two ways to confirm that your Wasabi client is connected to your own full node.

First, in the Wasabi logs. Once you receive a transaction Wasabi downloads the block containing that transaction from your node, and in the logs you should see: Block {hash} acquired from node '{node}'.

Second, by checking the connected peers inside your full node. Wasabi will show up as one of the connected peers while it is downloading a block. You can check this in the Bitcoin Core / Knots GUI by clicking on Window -> Peers. During the period when Wasabi is fetching a block, it will show up in the User Agent column. Alternatively, you can use the Bitcoin RPC call bitcoin-cli getpeerinfo and see the Wasabi client listed.

',10);function U(F,S){const t=l("router-link"),a=l("ExternalLinkIcon"),s=l("RouteLink");return u(),h("div",null,[y,e("nav",p,[e("ul",null,[e("li",null,[n(t,{to:"#the-importance-of-running-a-full-node"},{default:i(()=>[o("The importance of running a full node")]),_:1})]),e("li",null,[n(t,{to:"#how-does-wasabi-use-your-bitcoin-full-node"},{default:i(()=>[o("How does Wasabi use your Bitcoin full node")]),_:1})]),e("li",null,[n(t,{to:"#bitcoind-within-wasabi"},{default:i(()=>[o("bitcoind within Wasabi")]),_:1})]),e("li",null,[n(t,{to:"#using-an-already-existing-local-bitcoin-full-node"},{default:i(()=>[o("Using an already existing local Bitcoin full node")]),_:1})]),e("li",null,[n(t,{to:"#using-an-already-existing-remote-bitcoin-full-node"},{default:i(()=>[o("Using an already existing remote Bitcoin full node")]),_:1})]),e("li",null,[n(t,{to:"#verify-that-wasabi-is-connected-to-your-full-node"},{default:i(()=>[o("Verify that Wasabi is connected to your full node")]),_:1})])])]),g,w,m,_,e("p",null,[o("There are several software implementations that function as a full node, for example, "),e("a",v,[o("Bitcoin Core"),n(a)]),o(", "),e("a",k,[o("Bitcoin Knots"),n(a)]),o(", or "),e("a",W,[o("LibBitcoin"),n(a)]),o(".")]),B,e("p",null,[o("Wasabi currently has a work in progress partial Bitcoin Knots integration. As of now, the zkSNACKs coordinating server broadcasts "),e("a",x,[o("BIP 158 block filters"),n(a)]),o(" to all Wasabi clients, who locally check if the filter hits for their public keys. Then you know that this block has a transaction of yours included, or maybe it is a false positive.")]),T,e("p",null,[o("If a full node is connected to Wasabi, then the relevant block is fetched from this trusted node, and not from a random P2P node. Wasabi also queries if your local mempool has unconfirmed transactions that are of interest to you. Further, your full node is used to estimate the current mining fee level based on the bitcoind "),N,o(" algorithm. Your full node is not used to broadcast your transactions, as this is done through a random peer-to-peer node with a new tor identity, which is better for your "),n(s,{to:"/why-wasabi/NetworkLevelPrivacy.html"},{default:i(()=>[o("network-level privacy")]),_:1}),o(".")]),P,I,e("p",null,[o("Wasabi Wallet ships with "),e("a",C,[o("Bitcoin Knots"),n(a)]),o(". This means that every Wasabi client has the necessary software to run a Bitcoin full node and define, verify, and enforce monetary consensus with bitcoind, but this verification is not yet used within Wasabi itself, it is a work in progress. By default, bitcoind is not started together with Wasabi. This must be activated explicitly in the settings because this is a bandwidth, CPU and storage-intensive program. It is optional to keep bitcoind running even after Wasabi Wallet is shut down, so as to verify blocks as soon as they are received.")]),K])}const L=d(b,[["render",U],["__file","BitcoinFullNode.html.vue"]]),O=JSON.parse('{"path":"/using-wasabi/BitcoinFullNode.html","title":"Bitcoin Full Node","lang":"en-US","frontmatter":{"title":"Bitcoin Full Node","description":"Information and step-by-step guides on how to use your own Bitcoin Core full node together with Wasabi Wallet. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"The importance of running a full node","slug":"the-importance-of-running-a-full-node","link":"#the-importance-of-running-a-full-node","children":[]},{"level":2,"title":"How does Wasabi use your Bitcoin full node","slug":"how-does-wasabi-use-your-bitcoin-full-node","link":"#how-does-wasabi-use-your-bitcoin-full-node","children":[]},{"level":2,"title":"bitcoind within Wasabi","slug":"bitcoind-within-wasabi","link":"#bitcoind-within-wasabi","children":[]},{"level":2,"title":"Using an already existing local Bitcoin full node","slug":"using-an-already-existing-local-bitcoin-full-node","link":"#using-an-already-existing-local-bitcoin-full-node","children":[]},{"level":2,"title":"Using an already existing remote Bitcoin full node","slug":"using-an-already-existing-remote-bitcoin-full-node","link":"#using-an-already-existing-remote-bitcoin-full-node","children":[]},{"level":2,"title":"Verify that Wasabi is connected to your full node","slug":"verify-that-wasabi-is-connected-to-your-full-node","link":"#verify-that-wasabi-is-connected-to-your-full-node","children":[]}],"git":{"updatedTime":1693380909000},"filePathRelative":"using-wasabi/BitcoinFullNode.md"}');export{L as comp,O as data}; +import{a as r,_ as c}from"./SettingsBitcoinCore-DgSldI_2.js";import{_ as d,r as l,o as u,c as h,a as e,d as n,w as i,b as o,e as f}from"./app-BgbPjqpx.js";const b={},y=e("h1",{id:"bitcoin-full-node",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoin-full-node"},[e("span",null,"Bitcoin Full Node")])],-1),p={class:"table-of-contents"},g=e("h2",{id:"the-importance-of-running-a-full-node",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#the-importance-of-running-a-full-node"},[e("span",null,"The importance of running a full node")])],-1),w=e("p",null,"When running a Bitcoin full node, you define the precise monetary rules that you voluntarily agree on. Nobody else forces this choice upon you. Thus any sovereign individual who wants to claim financial independence must run a full node. Once your own rules are firmly established, your software discovers other nodes in the Bitcoin peer-to-peer network which do not break your rules. These peers send you transactions and blocks which are valid according to their set of rules, and you verify for yourself if they are also correct for you. If one of the proposed transactions breaks your own rules, then you mark it as invalid, disconnect from and ban the node who sent you the malicious transaction.",-1),m=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"Claim your monetary sovereignty"),e("p",null,"With your full node you define, verify, and enforce the rules of your sound money Bitcoin.")],-1),_=e("p",null,"Only by running a full node, do you verify by yourself that the money you receive is actually valid bitcoin. You do not trust an external third party, and thus you also do not leak any sensitive financial information.",-1),v={href:"https://bitcoincore.org/",target:"_blank",rel:"noopener noreferrer"},k={href:"https://bitcoinknots.org/",target:"_blank",rel:"noopener noreferrer"},W={href:"https://libbitcoin.info/",target:"_blank",rel:"noopener noreferrer"},B=e("h2",{id:"how-does-wasabi-use-your-bitcoin-full-node",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-does-wasabi-use-your-bitcoin-full-node"},[e("span",null,"How does Wasabi use your Bitcoin full node")])],-1),x={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},T=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"Work in progress"),e("p",null,[o("The zkSNACKs server has to be trusted to serve correct filters. This current work in progress integration "),e("strong",null,"does not"),o(" verify consensus within Wasabi.")])],-1),N=e("code",null,"smartfee",-1),P=e("p",null,"The future goal is that the local full node (Knots) is used to generate the BIP 158 block filters from the verified blocks. Only then is there full verification, and no trust in the zkSNACKs server.",-1),I=e("h2",{id:"bitcoind-within-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoind-within-wasabi"},[e("span",null,"bitcoind within Wasabi")])],-1),C={href:"https://bitcoinknots.org",target:"_blank",rel:"noopener noreferrer"},K=f('

Wasabi Wallet Bitcoin Knots full node integration

Using an already existing local Bitcoin full node

If you have a Bitcoin full node already pre-installed on the same computer you use to run Wasabi Wallet, then Wasabi will use your node by default. You do not need to change anything in the settings, it should work plug and play. This is especially useful to save on bandwidth, as you have already downloaded and verified a block with your full node, so you don't need to download it again with Wasabi.

Using an already existing remote Bitcoin full node

If you have a Bitcoin full node already on a remote computer, then Wasabi Wallet can use this too. In the Bitcoin settings, specify the local IP address and port or the Tor onion service of your full node.

Wasabi Wallet remote Bitcoin P2P full node endpoint

Verify that Wasabi is connected to your full node

There are two ways to confirm that your Wasabi client is connected to your own full node.

First, in the Wasabi logs. Once you receive a transaction Wasabi downloads the block containing that transaction from your node, and in the logs you should see: Block {hash} acquired from node '{node}'.

Second, by checking the connected peers inside your full node. Wasabi will show up as one of the connected peers while it is downloading a block. You can check this in the Bitcoin Core / Knots GUI by clicking on Window -> Peers. During the period when Wasabi is fetching a block, it will show up in the User Agent column. Alternatively, you can use the Bitcoin RPC call bitcoin-cli getpeerinfo and see the Wasabi client listed.

',10);function U(F,S){const t=l("router-link"),a=l("ExternalLinkIcon"),s=l("RouteLink");return u(),h("div",null,[y,e("nav",p,[e("ul",null,[e("li",null,[n(t,{to:"#the-importance-of-running-a-full-node"},{default:i(()=>[o("The importance of running a full node")]),_:1})]),e("li",null,[n(t,{to:"#how-does-wasabi-use-your-bitcoin-full-node"},{default:i(()=>[o("How does Wasabi use your Bitcoin full node")]),_:1})]),e("li",null,[n(t,{to:"#bitcoind-within-wasabi"},{default:i(()=>[o("bitcoind within Wasabi")]),_:1})]),e("li",null,[n(t,{to:"#using-an-already-existing-local-bitcoin-full-node"},{default:i(()=>[o("Using an already existing local Bitcoin full node")]),_:1})]),e("li",null,[n(t,{to:"#using-an-already-existing-remote-bitcoin-full-node"},{default:i(()=>[o("Using an already existing remote Bitcoin full node")]),_:1})]),e("li",null,[n(t,{to:"#verify-that-wasabi-is-connected-to-your-full-node"},{default:i(()=>[o("Verify that Wasabi is connected to your full node")]),_:1})])])]),g,w,m,_,e("p",null,[o("There are several software implementations that function as a full node, for example, "),e("a",v,[o("Bitcoin Core"),n(a)]),o(", "),e("a",k,[o("Bitcoin Knots"),n(a)]),o(", or "),e("a",W,[o("LibBitcoin"),n(a)]),o(".")]),B,e("p",null,[o("Wasabi currently has a work in progress partial Bitcoin Knots integration. As of now, the zkSNACKs coordinating server broadcasts "),e("a",x,[o("BIP 158 block filters"),n(a)]),o(" to all Wasabi clients, who locally check if the filter hits for their public keys. Then you know that this block has a transaction of yours included, or maybe it is a false positive.")]),T,e("p",null,[o("If a full node is connected to Wasabi, then the relevant block is fetched from this trusted node, and not from a random P2P node. Wasabi also queries if your local mempool has unconfirmed transactions that are of interest to you. Further, your full node is used to estimate the current mining fee level based on the bitcoind "),N,o(" algorithm. Your full node is not used to broadcast your transactions, as this is done through a random peer-to-peer node with a new tor identity, which is better for your "),n(s,{to:"/why-wasabi/NetworkLevelPrivacy.html"},{default:i(()=>[o("network-level privacy")]),_:1}),o(".")]),P,I,e("p",null,[o("Wasabi Wallet ships with "),e("a",C,[o("Bitcoin Knots"),n(a)]),o(". This means that every Wasabi client has the necessary software to run a Bitcoin full node and define, verify, and enforce monetary consensus with bitcoind, but this verification is not yet used within Wasabi itself, it is a work in progress. By default, bitcoind is not started together with Wasabi. This must be activated explicitly in the settings because this is a bandwidth, CPU and storage-intensive program. It is optional to keep bitcoind running even after Wasabi Wallet is shut down, so as to verify blocks as soon as they are received.")]),K])}const L=d(b,[["render",U],["__file","BitcoinFullNode.html.vue"]]),O=JSON.parse('{"path":"/using-wasabi/BitcoinFullNode.html","title":"Bitcoin Full Node","lang":"en-US","frontmatter":{"title":"Bitcoin Full Node","description":"Information and step-by-step guides on how to use your own Bitcoin Core full node together with Wasabi Wallet. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"The importance of running a full node","slug":"the-importance-of-running-a-full-node","link":"#the-importance-of-running-a-full-node","children":[]},{"level":2,"title":"How does Wasabi use your Bitcoin full node","slug":"how-does-wasabi-use-your-bitcoin-full-node","link":"#how-does-wasabi-use-your-bitcoin-full-node","children":[]},{"level":2,"title":"bitcoind within Wasabi","slug":"bitcoind-within-wasabi","link":"#bitcoind-within-wasabi","children":[]},{"level":2,"title":"Using an already existing local Bitcoin full node","slug":"using-an-already-existing-local-bitcoin-full-node","link":"#using-an-already-existing-local-bitcoin-full-node","children":[]},{"level":2,"title":"Using an already existing remote Bitcoin full node","slug":"using-an-already-existing-remote-bitcoin-full-node","link":"#using-an-already-existing-remote-bitcoin-full-node","children":[]},{"level":2,"title":"Verify that Wasabi is connected to your full node","slug":"verify-that-wasabi-is-connected-to-your-full-node","link":"#verify-that-wasabi-is-connected-to-your-full-node","children":[]}],"git":{"updatedTime":1693380909000},"filePathRelative":"using-wasabi/BitcoinFullNode.md"}');export{L as comp,O as data}; diff --git a/assets/BuildSource.html-Coa4JuE6.js b/assets/BuildSource.html-BTPFzo1C.js similarity index 99% rename from assets/BuildSource.html-Coa4JuE6.js rename to assets/BuildSource.html-BTPFzo1C.js index 28fddf812c..5b4e1c9e1a 100644 --- a/assets/BuildSource.html-Coa4JuE6.js +++ b/assets/BuildSource.html-BTPFzo1C.js @@ -1,4 +1,4 @@ -import{_ as c,r as i,o as d,c as u,a as e,d as t,w as n,b as a,e as r}from"./app-BPKesm5h.js";const h={},p=e("h1",{id:"build-from-source-code",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#build-from-source-code"},[e("span",null,"Build from source code")])],-1),b={class:"table-of-contents"},m=e("h2",{id:"introduction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#introduction"},[e("span",null,"Introduction")])],-1),g=e("h2",{id:"get-the-requirements",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#get-the-requirements"},[e("span",null,"Get The Requirements")])],-1),f={href:"https://git-scm.com/downloads",target:"_blank",rel:"noopener noreferrer"},v={href:"https://dotnet.microsoft.com/download",target:"_blank",rel:"noopener noreferrer"},_=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"Optional for privacy"),e("p",null,"You can disable .NET's telemetry, which is sending some usage information to Microsoft, by typing:"),e("p",null,[e("code",null,"export DOTNET_CLI_TELEMETRY_OPTOUT=1"),a(" on Linux and macOS.")]),e("p",null,[e("code",null,"setx DOTNET_CLI_TELEMETRY_OPTOUT 1"),a(" to disable it permanently on Windows.")])],-1),k=r(`

Get Wasabi

Clone Wasabi repository:

git clone https://github.com/zkSNACKs/WalletWasabi.git
+import{_ as c,r as i,o as d,c as u,a as e,d as t,w as n,b as a,e as r}from"./app-BgbPjqpx.js";const h={},p=e("h1",{id:"build-from-source-code",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#build-from-source-code"},[e("span",null,"Build from source code")])],-1),b={class:"table-of-contents"},m=e("h2",{id:"introduction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#introduction"},[e("span",null,"Introduction")])],-1),g=e("h2",{id:"get-the-requirements",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#get-the-requirements"},[e("span",null,"Get The Requirements")])],-1),f={href:"https://git-scm.com/downloads",target:"_blank",rel:"noopener noreferrer"},v={href:"https://dotnet.microsoft.com/download",target:"_blank",rel:"noopener noreferrer"},_=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"Optional for privacy"),e("p",null,"You can disable .NET's telemetry, which is sending some usage information to Microsoft, by typing:"),e("p",null,[e("code",null,"export DOTNET_CLI_TELEMETRY_OPTOUT=1"),a(" on Linux and macOS.")]),e("p",null,[e("code",null,"setx DOTNET_CLI_TELEMETRY_OPTOUT 1"),a(" to disable it permanently on Windows.")])],-1),k=r(`

Get Wasabi

Clone Wasabi repository:

git clone https://github.com/zkSNACKs/WalletWasabi.git
 cd WalletWasabi/WalletWasabi.Fluent.Desktop
 

Run Wasabi

Build and run the Wasabi client application from the WalletWasabi.Fluent.Desktop folder:

dotnet run
 

Update Wasabi

git pull
diff --git a/assets/ChangeCoins.html-DsVkj0Hz.js b/assets/ChangeCoins.html-VrjnBreJ.js
similarity index 99%
rename from assets/ChangeCoins.html-DsVkj0Hz.js
rename to assets/ChangeCoins.html-VrjnBreJ.js
index 7224d4b5f4..cef307a45a 100644
--- a/assets/ChangeCoins.html-DsVkj0Hz.js
+++ b/assets/ChangeCoins.html-VrjnBreJ.js
@@ -1 +1 @@
-import{_ as c,r as s,o as l,c as r,a as e,d as n,w as i,b as t,e as o}from"./app-BPKesm5h.js";const d={},u=e("h1",{id:"change-coins",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#change-coins"},[e("span",null,"Change coins")])],-1),g={class:"table-of-contents"},p=o('

Types of change

Non-Coinjoin change

Let's assume you want to send 0.5 bitcoin to Alice. You enter Alice's address in the To field (destination address), and set the Amount to 0.5 BTC. This will be one output of the transaction.

Since your chosen UTXO is worth 2 bitcoins, after sending 0.5 bitcoin to Alice there will be 1.5 bitcoins change from the original amount. This leftover amount will automatically go to a new address in your wallet, and this is called the change output.

This leftover 1.5 bitcoins change UTXO is connected to the input UTXO of the transaction, and thus also has an anonymity set of 1. As a result, when you send this leftover/change coin in a new transaction, it is clear to any observer that you were part of the transaction that sent 0.5 bitcoin to someone.

This process is applicable to any Bitcoin transaction where the sent amount is less than the total value of the input UTXO.

Coinjoin change

In some few cases, especially for the wealthiest user of a coinjoin, there will be an anonymity score 1 output in a coinjoin transaction. Eventhough it is not trivial to link those to the inputs of the same user, they should be handled with care. Wasabi will not automatically spend those change coins in a payment, but instead register them again in a future coinjoin round.

Why change is an issue

Change is not inherently bad, it's a fundamental part of how Bitcoin and the UTXO model works. However, when sending a coin that is change from an earlier transaction, then the receiver can easily deduce that the sender was also part of the previous transaction that generated the change.

',10),y=o('

You want to avoid merging coins with different anonymity set values whenever possible, because this will link these coins and reduce their anonymity set to the lowest value.

Your options to use change privately

Avoid change in the first place

Whenever possible, choose UTXO's for transactions where the destination addresses receive the entire value of your UTXO's, and you don't get any change back. This can easily be done by clicking the shield icon in the top right corner of the transaction preview screen, and adjusting the payment amount to be slightly higher or lower. This might not be possible in some cases where you have to pay a specific value of a payment request.

Make it difficult to deduce the change

',5),f=o('

Spend the change to the same entity as in the initial transaction

If in the first transaction you have 0.10 bitcoin and send Alice 0.04 bitcoin, you get 0.06 bitcoin back as change in a new address, which Alice can see belongs to you. Now, in a second transaction where you want to send Alice 0.05 bitcoin, you can select that 0.06 bitcoin change coin without losing any privacy, because Alice already knows this is your coin.

In this second transaction you will get back 0.01 bitcoin as change, which again, will still be known to Alice. If in a third transaction you want to send Alice 0.02 bitcoin, then you can consolidate the 0.01 bitcoin change with a new 0.10 bitcoin mixed coin, thus getting 0.09 bitcoin change.

Now Alice will know that you owned the 0.10 bitcoin and that you currently own the 0.09 bitcoin change, but she cannot find out about your premix transaction history.

Wasabi will automatically check if you have a coin with the same label for the current payment recipient, and will use those coins to be spent.

Spend the change with another entity, where you don't mind if each of the two know that you transact with the other entity

When you send a transaction to Alice, then she knows that the change output goes back to you. You can use this change to send bitcoin to Bob, and if he has bad privacy habits, Alice can find out you sent to him. But if you have a trusted relationship with the two, then this is alright, and not part of your threat model.

Coinjoin more

Since Wasabi 2.0 has a minimum amount for coinjoin of only 5000 sats, any change coin with an amount larger than that will be registered in a future coinjoin round. If you wait long enough, Wasabi will make sure that you don't have any anonscore 1 change coin in your wallet, but only private coins not linked to any previous payment.

',9);function w(m,b){const a=s("router-link"),h=s("RouteLink");return l(),r("div",null,[u,e("nav",g,[e("ul",null,[e("li",null,[n(a,{to:"#types-of-change"},{default:i(()=>[t("Types of change")]),_:1}),e("ul",null,[e("li",null,[n(a,{to:"#non-coinjoin-change"},{default:i(()=>[t("Non-Coinjoin change")]),_:1})]),e("li",null,[n(a,{to:"#coinjoin-change"},{default:i(()=>[t("Coinjoin change")]),_:1})])])]),e("li",null,[n(a,{to:"#why-change-is-an-issue"},{default:i(()=>[t("Why change is an issue")]),_:1})]),e("li",null,[n(a,{to:"#your-options-to-use-change-privately"},{default:i(()=>[t("Your options to use change privately")]),_:1}),e("ul",null,[e("li",null,[n(a,{to:"#avoid-change-in-the-first-place"},{default:i(()=>[t("Avoid change in the first place")]),_:1})]),e("li",null,[n(a,{to:"#make-it-difficult-to-deduce-the-change"},{default:i(()=>[t("Make it difficult to deduce the change")]),_:1})]),e("li",null,[n(a,{to:"#spend-the-change-to-the-same-entity-as-in-the-initial-transaction"},{default:i(()=>[t("Spend the change to the same entity as in the initial transaction")]),_:1})]),e("li",null,[n(a,{to:"#spend-the-change-with-another-entity-where-you-don-t-mind-if-each-of-the-two-know-that-you-transact-with-the-other-entity"},{default:i(()=>[t("Spend the change with another entity, where you don't mind if each of the two know that you transact with the other entity")]),_:1})]),e("li",null,[n(a,{to:"#coinjoin-more"},{default:i(()=>[t("Coinjoin more")]),_:1})])])])])]),p,e("p",null,[t("Whenever you are merging coins in one transaction, it becomes clear to any outside observer that these coins belong to the same entity, thus linking the previous transaction history. Thus "),n(h,{to:"/why-wasabi/Coins.html#heuristics-identifying-change"},{default:i(()=>[t("identifying change")]),_:1}),t(" based on some heuristics is a top goal of transaction surveillance.")]),y,e("p",null,[t("There are "),n(h,{to:"/why-wasabi/Coins.html#heuristics-identifying-change"},{default:i(()=>[t("common heuristics identifying change outputs")]),_:1}),t(", try to avoid these with every transaction. Don't reuse addresses, don't send precise amounts but randomize them, use replace by fee (RBF) only if necessary, and try to send to bech32 or bech32m addresses.")]),f])}const k=c(d,[["render",w],["__file","ChangeCoins.html.vue"]]),_=JSON.parse(`{"path":"/using-wasabi/ChangeCoins.html","title":"Change Coins","lang":"en-US","frontmatter":{"title":"Change Coins","description":"Details about the privacy of different types of change and strategies for using them. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Types of change","slug":"types-of-change","link":"#types-of-change","children":[{"level":3,"title":"Non-Coinjoin change","slug":"non-coinjoin-change","link":"#non-coinjoin-change","children":[]},{"level":3,"title":"Coinjoin change","slug":"coinjoin-change","link":"#coinjoin-change","children":[]}]},{"level":2,"title":"Why change is an issue","slug":"why-change-is-an-issue","link":"#why-change-is-an-issue","children":[]},{"level":2,"title":"Your options to use change privately","slug":"your-options-to-use-change-privately","link":"#your-options-to-use-change-privately","children":[{"level":3,"title":"Avoid change in the first place","slug":"avoid-change-in-the-first-place","link":"#avoid-change-in-the-first-place","children":[]},{"level":3,"title":"Make it difficult to deduce the change","slug":"make-it-difficult-to-deduce-the-change","link":"#make-it-difficult-to-deduce-the-change","children":[]},{"level":3,"title":"Spend the change to the same entity as in the initial transaction","slug":"spend-the-change-to-the-same-entity-as-in-the-initial-transaction","link":"#spend-the-change-to-the-same-entity-as-in-the-initial-transaction","children":[]},{"level":3,"title":"Spend the change with another entity, where you don't mind if each of the two know that you transact with the other entity","slug":"spend-the-change-with-another-entity-where-you-don-t-mind-if-each-of-the-two-know-that-you-transact-with-the-other-entity","link":"#spend-the-change-with-another-entity-where-you-don-t-mind-if-each-of-the-two-know-that-you-transact-with-the-other-entity","children":[]},{"level":3,"title":"Coinjoin more","slug":"coinjoin-more","link":"#coinjoin-more","children":[]}]}],"git":{"updatedTime":1692789470000},"filePathRelative":"using-wasabi/ChangeCoins.md"}`);export{k as comp,_ as data}; +import{_ as c,r as s,o as l,c as r,a as e,d as n,w as i,b as t,e as o}from"./app-BgbPjqpx.js";const d={},u=e("h1",{id:"change-coins",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#change-coins"},[e("span",null,"Change coins")])],-1),g={class:"table-of-contents"},p=o('

Types of change

Non-Coinjoin change

Let's assume you want to send 0.5 bitcoin to Alice. You enter Alice's address in the To field (destination address), and set the Amount to 0.5 BTC. This will be one output of the transaction.

Since your chosen UTXO is worth 2 bitcoins, after sending 0.5 bitcoin to Alice there will be 1.5 bitcoins change from the original amount. This leftover amount will automatically go to a new address in your wallet, and this is called the change output.

This leftover 1.5 bitcoins change UTXO is connected to the input UTXO of the transaction, and thus also has an anonymity set of 1. As a result, when you send this leftover/change coin in a new transaction, it is clear to any observer that you were part of the transaction that sent 0.5 bitcoin to someone.

This process is applicable to any Bitcoin transaction where the sent amount is less than the total value of the input UTXO.

Coinjoin change

In some few cases, especially for the wealthiest user of a coinjoin, there will be an anonymity score 1 output in a coinjoin transaction. Eventhough it is not trivial to link those to the inputs of the same user, they should be handled with care. Wasabi will not automatically spend those change coins in a payment, but instead register them again in a future coinjoin round.

Why change is an issue

Change is not inherently bad, it's a fundamental part of how Bitcoin and the UTXO model works. However, when sending a coin that is change from an earlier transaction, then the receiver can easily deduce that the sender was also part of the previous transaction that generated the change.

',10),y=o('

You want to avoid merging coins with different anonymity set values whenever possible, because this will link these coins and reduce their anonymity set to the lowest value.

Your options to use change privately

Avoid change in the first place

Whenever possible, choose UTXO's for transactions where the destination addresses receive the entire value of your UTXO's, and you don't get any change back. This can easily be done by clicking the shield icon in the top right corner of the transaction preview screen, and adjusting the payment amount to be slightly higher or lower. This might not be possible in some cases where you have to pay a specific value of a payment request.

Make it difficult to deduce the change

',5),f=o('

Spend the change to the same entity as in the initial transaction

If in the first transaction you have 0.10 bitcoin and send Alice 0.04 bitcoin, you get 0.06 bitcoin back as change in a new address, which Alice can see belongs to you. Now, in a second transaction where you want to send Alice 0.05 bitcoin, you can select that 0.06 bitcoin change coin without losing any privacy, because Alice already knows this is your coin.

In this second transaction you will get back 0.01 bitcoin as change, which again, will still be known to Alice. If in a third transaction you want to send Alice 0.02 bitcoin, then you can consolidate the 0.01 bitcoin change with a new 0.10 bitcoin mixed coin, thus getting 0.09 bitcoin change.

Now Alice will know that you owned the 0.10 bitcoin and that you currently own the 0.09 bitcoin change, but she cannot find out about your premix transaction history.

Wasabi will automatically check if you have a coin with the same label for the current payment recipient, and will use those coins to be spent.

Spend the change with another entity, where you don't mind if each of the two know that you transact with the other entity

When you send a transaction to Alice, then she knows that the change output goes back to you. You can use this change to send bitcoin to Bob, and if he has bad privacy habits, Alice can find out you sent to him. But if you have a trusted relationship with the two, then this is alright, and not part of your threat model.

Coinjoin more

Since Wasabi 2.0 has a minimum amount for coinjoin of only 5000 sats, any change coin with an amount larger than that will be registered in a future coinjoin round. If you wait long enough, Wasabi will make sure that you don't have any anonscore 1 change coin in your wallet, but only private coins not linked to any previous payment.

',9);function w(m,b){const a=s("router-link"),h=s("RouteLink");return l(),r("div",null,[u,e("nav",g,[e("ul",null,[e("li",null,[n(a,{to:"#types-of-change"},{default:i(()=>[t("Types of change")]),_:1}),e("ul",null,[e("li",null,[n(a,{to:"#non-coinjoin-change"},{default:i(()=>[t("Non-Coinjoin change")]),_:1})]),e("li",null,[n(a,{to:"#coinjoin-change"},{default:i(()=>[t("Coinjoin change")]),_:1})])])]),e("li",null,[n(a,{to:"#why-change-is-an-issue"},{default:i(()=>[t("Why change is an issue")]),_:1})]),e("li",null,[n(a,{to:"#your-options-to-use-change-privately"},{default:i(()=>[t("Your options to use change privately")]),_:1}),e("ul",null,[e("li",null,[n(a,{to:"#avoid-change-in-the-first-place"},{default:i(()=>[t("Avoid change in the first place")]),_:1})]),e("li",null,[n(a,{to:"#make-it-difficult-to-deduce-the-change"},{default:i(()=>[t("Make it difficult to deduce the change")]),_:1})]),e("li",null,[n(a,{to:"#spend-the-change-to-the-same-entity-as-in-the-initial-transaction"},{default:i(()=>[t("Spend the change to the same entity as in the initial transaction")]),_:1})]),e("li",null,[n(a,{to:"#spend-the-change-with-another-entity-where-you-don-t-mind-if-each-of-the-two-know-that-you-transact-with-the-other-entity"},{default:i(()=>[t("Spend the change with another entity, where you don't mind if each of the two know that you transact with the other entity")]),_:1})]),e("li",null,[n(a,{to:"#coinjoin-more"},{default:i(()=>[t("Coinjoin more")]),_:1})])])])])]),p,e("p",null,[t("Whenever you are merging coins in one transaction, it becomes clear to any outside observer that these coins belong to the same entity, thus linking the previous transaction history. Thus "),n(h,{to:"/why-wasabi/Coins.html#heuristics-identifying-change"},{default:i(()=>[t("identifying change")]),_:1}),t(" based on some heuristics is a top goal of transaction surveillance.")]),y,e("p",null,[t("There are "),n(h,{to:"/why-wasabi/Coins.html#heuristics-identifying-change"},{default:i(()=>[t("common heuristics identifying change outputs")]),_:1}),t(", try to avoid these with every transaction. Don't reuse addresses, don't send precise amounts but randomize them, use replace by fee (RBF) only if necessary, and try to send to bech32 or bech32m addresses.")]),f])}const k=c(d,[["render",w],["__file","ChangeCoins.html.vue"]]),_=JSON.parse(`{"path":"/using-wasabi/ChangeCoins.html","title":"Change Coins","lang":"en-US","frontmatter":{"title":"Change Coins","description":"Details about the privacy of different types of change and strategies for using them. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Types of change","slug":"types-of-change","link":"#types-of-change","children":[{"level":3,"title":"Non-Coinjoin change","slug":"non-coinjoin-change","link":"#non-coinjoin-change","children":[]},{"level":3,"title":"Coinjoin change","slug":"coinjoin-change","link":"#coinjoin-change","children":[]}]},{"level":2,"title":"Why change is an issue","slug":"why-change-is-an-issue","link":"#why-change-is-an-issue","children":[]},{"level":2,"title":"Your options to use change privately","slug":"your-options-to-use-change-privately","link":"#your-options-to-use-change-privately","children":[{"level":3,"title":"Avoid change in the first place","slug":"avoid-change-in-the-first-place","link":"#avoid-change-in-the-first-place","children":[]},{"level":3,"title":"Make it difficult to deduce the change","slug":"make-it-difficult-to-deduce-the-change","link":"#make-it-difficult-to-deduce-the-change","children":[]},{"level":3,"title":"Spend the change to the same entity as in the initial transaction","slug":"spend-the-change-to-the-same-entity-as-in-the-initial-transaction","link":"#spend-the-change-to-the-same-entity-as-in-the-initial-transaction","children":[]},{"level":3,"title":"Spend the change with another entity, where you don't mind if each of the two know that you transact with the other entity","slug":"spend-the-change-with-another-entity-where-you-don-t-mind-if-each-of-the-two-know-that-you-transact-with-the-other-entity","link":"#spend-the-change-with-another-entity-where-you-don-t-mind-if-each-of-the-two-know-that-you-transact-with-the-other-entity","children":[]},{"level":3,"title":"Coinjoin more","slug":"coinjoin-more","link":"#coinjoin-more","children":[]}]}],"git":{"updatedTime":1692789470000},"filePathRelative":"using-wasabi/ChangeCoins.md"}`);export{k as comp,_ as data}; diff --git a/assets/CoinJoin.html-CtLVyHpU.js b/assets/CoinJoin.html-Buvm4ii4.js similarity index 99% rename from assets/CoinJoin.html-CtLVyHpU.js rename to assets/CoinJoin.html-Buvm4ii4.js index dfb2f6a5f5..05374c67e0 100644 --- a/assets/CoinJoin.html-CtLVyHpU.js +++ b/assets/CoinJoin.html-Buvm4ii4.js @@ -1 +1 @@ -import{_ as c}from"./AutoStartCoinjoinThreshold-B0lFY-5G.js";import{_ as h}from"./CoinjoinStrategy-BZrDbG5n.js";import{_ as d,r as l,o as u,c as p,a as e,d as n,w as i,b as t,e as r}from"./app-BPKesm5h.js";const b="/MusicBoxAwaitingToAutoStartCoinjoin.png",f="/MusicBoxAwaitingOtherParticipants.png",m="/MusicBoxCoinjoinInProgress.png",g="/MusicBoxCoinjoinSuccessful.png",_="/CoinjoinSettings.png",y="/CoinjoinSettingsAutomaticallyStartCoinjoin.png",w="/CoinjoinStrategySettings.png",j={},v=e("h1",{id:"coinjoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoin"},[e("span",null,"Coinjoin")])],-1),x={class:"table-of-contents"},k=e("h2",{id:"introduction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#introduction"},[e("span",null,"Introduction")])],-1),A={href:"https://en.bitcoin.it/Privacy#CoinJoin",target:"_blank",rel:"noopener noreferrer"},C={href:"https://bitcointalk.org/index.php?topic=279249.msg2983902",target:"_blank",rel:"noopener noreferrer"},T={href:"https://eprint.iacr.org/2021/206",target:"_blank",rel:"noopener noreferrer"},S={href:"https://youtu.be/dGATztn5Ql8",target:"_blank",rel:"noopener noreferrer"},W=e("img",{src:"https://img.youtube.com/vi/dGATztn5Ql8/maxresdefault.jpg",alt:"WabiSabi Coinjoin Explained in 3 Minutes"},null,-1),B=r('

Coinjoin step-by-step

  1. Launch Wasabi and open your wallet.
  2. Wait. Wasabi coinjoins automatically in the background.
  3. You're done! You can make private payments now.

Music box

After opening a hot wallet, it will automatically start a countdown to start coinjoining (±10 minutes). This and other coinjoin related information is shown in the music box.

Music Box Countdown

',5),I=e("em",null,"Waiting to auto-start coinjoin",-1),M=e("p",null,"A blue aura will show up at the the bottom of the wallet, which indicates that the wallet is coinjoining, and the music box message will change.",-1),q=e("p",null,[e("img",{src:f,alt:"Music Box Awaiting Other Participants",title:"Music Box Awaiting Other Participants"})],-1),F=e("p",null,"After some time the blue aura will change to an orange one, this indicates that the coinjoin process is now in a critical phase. Wasabi will prevent you from shutting down the app during the orange aura to not disrupt the coinjoin round.",-1),P=e("p",null,[e("img",{src:m,alt:"Music Box Coinjoin In Progress",title:"Music Box Coinjoin In Progress"})],-1),Q=r('

Music Box Success

Notice that the wallet might have to repeat the coinjoin steps multiple times before a successful coinjoin is created. So it is possible that the aura colors will change without a successful coinjoin. Please leave Wasabi Wallet running, and eventually there will be a successful coinjoin.

More Details

By default, Wasabi starts automatically coinjoining your funds when the total value of the non-private coins is equal to or above the Auto-start coinjoin threshold (0.01 BTC by default). Automatically start coinjoin can be disabled from the coinjoin settings. In case you want to start the process manually, then click the play button; if you want to stop coinjoin, then click the pause button.

Once a coin achieves enough privacy (reaches the Anonymity score target), then the corresponding amount will show up in the wallet's main view as "PRIVATE".

Notice that it is not yet possible to coinjoin from a hardware wallet, the keys must be "hot" on your computer.

Fees

A 0.3% coordination fee will be taken from fresh coins bigger than 0.01 BTC. Coins less than or equal to 0.01 BTC don't pay coordination fees at all, according to the PlebsDontPay threshold.

',8),N=e("h2",{id:"wabisabi-protocol-step-by-step",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wabisabi-protocol-step-by-step"},[e("span",null,"WabiSabi protocol step-by-step")])],-1),z=e("p",null,"WabiSabi protocol requires 5 steps to successfully create and broadcast a coinjoin transaction to the bitcoin network.",-1),O=e("p",null,"The round starts either as soon as the number of registered inputs reaches the maximum, or after the input registration time is reached and as long as the minimum number of inputs is satisfied.",-1),D=e("h3",{id:"input-registration",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#input-registration"},[e("span",null,"Input registration")])],-1),E={href:"https://tb-manual.torproject.org/managing-identities/",target:"_blank",rel:"noopener noreferrer"},U=e("strong",null,"Alice",-1),J=r('

The Wasabi coordinator now verifies that:

  • There is still room for more inputs on this coinjoin.
  • The input has not already been registered, is not banned, is unspent, and that the input proof is valid.
  • The input has at least 5000 sats value.

Only when all these checks are passed, does the coordinator allow this input to be registered. The coordinator creates and sends a credential back to Alice, which has the same amount as the input minus fees.

The input registration phase ends when either: the number of registered inputs reaches the maximum, or when the time elapsed and the minimum number of inputs (180) is satisfied.

Connection confirmation

There are many users registering their inputs (with different Alice for each input) in the first phase, and this takes a while. The connection confirmation phase makes sure that all of them are still online and ready to continue. The coordinator verifies the unique ID from each Alice, and if everyone is still communicating. The coordinator sends a zero value credential to each Alice for each successful connection confirmation.

The round is abandoned and re-started if too many Alices have dropped, for example when their Wasabi is shut down, or when their Tor connection is temporarily broken. The connection confirmation phase ends when all Alices have provided their unique IDs, or after a timeout and the number of online Alices is still larger than the minimum number of inputs.

Output registration

',8),L=e("p",null,"First, every client needs to change the value of their credentials to the desired output values. For this, the client presents to the coordinator two old credentials, and two newly created ones. The coordinator does not know the amount value of any of those credentials, but it can verify, that the two pairs sum up to exactly the same value. For example, a user can present one 5 btc and one 0 btc credential, and redeem one 2 btc and one 3 btc credential. Or a user can present one 4 btc and one 1 btc credential, and redeem one 5 btc and one 0 btc credential. After potentially many rounds of reissuance, each client has exactly the amount credential it desires. Each of these reissuance is perfectly private, so the coordinator cannot link any of them to the same user.",-1),R=e("p",null,[t("Next, your Wasabi client generates multiple new Tor identities called "),e("strong",null,"Bob"),t(", which are in no way tied to any Alice. Bob sends to the Wasabi coordinator:")],-1),V=e("ul",null,[e("li",null,"An unblinded credential signed by the coordinator"),e("li",null,"A new (unused) bitcoin address")],-1),G=e("p",null,"Because the coordinator can verify its own credential, it knows that this credential came into existence after an input of at least this much value was registered. However, it cannot know which input exactly.",-1),H=e("p",null,"It is very important that the coordinator cannot link Alice to Bob. Because Alice has sent the cleartext input, and Bob sends the cleartext output. So, if the two were to be linked, then the coordinator can specifically link the input to the output, meaning that the anonymity set is 1. Because Alice received a credential from the coordinator, and because Bob is a new Tor identity not linked to Alice, the coordinator can verify that nobody is cheating, but it cannot deanonymize the peers.",-1),K=e("p",null,"The output registration phase ends when the value of cleartext outputs is equal to the value of inputs, meaning that all Bobs have registered. If after a timeout not all outputs are registered, then this round is abandoned, the missing inputs are temporarily banned, and a new round is started.",-1),Y={class:"custom-container tip"},$=e("p",{class:"custom-container-title"},"Possibility of Taproot outputs from coinjoin",-1),X={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.3",target:"_blank",rel:"noopener noreferrer"},Z=e("h3",{id:"signing",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#signing"},[e("span",null,"Signing")])],-1),ee=r('

Each Alice does the following:

  • Verifies that her input and output are included.
  • Signs the transaction with the private key of her input.
  • Sends the signature to the coordinator, who verifies this information.

The signing phase ends when the coordinator has received all the valid signatures for all the registered inputs.

Blame round

When the signing phase fails due to some Alices disrupting the round (failing to sign or send the signature to the coordinator), then the successful Alices will continue into a blame round. The blame round will redo the coinjoin phases in order to create a successful coinjoin.

This mechanism also prevents coinjoins from being DDoS-ed, because bad actors that are willingly disturbing rounds won't be able to join the blame round. The client will keep going to the blame round until there are not enough Alices left to meet the minimum input count of blame rounds (150).

The blame round is not a mandatory phase of the coinjoin process. It was introduced in order to have a higher coinjoin success rate.

Broadcasting

',8),te=r('

Coinjoin Settings

Wasabi Wallet has automatic coinjoin. It is done by the built-in automatic coinjoin "robot". The robot contains instructions/settings, like how often and when to coinjoin. The user is able to specify these settings in the Coinjoin Settings dialog, according to his own preferences. The wallet ships with default settings, which are good enough for most users.

Wasabi Wallet Coinjoin Settings

Coinjoin settings are wallet specific

As the coinjoin settings apply per individual wallet, it is possible to have multiple wallets with different coinjoin settings.

Automatically start coinjoin

This setting is enabled by default.

When this is enabled, the wallet will automatically start coinjoining soon after the wallet is loaded. The wallet will coinjoin until the privacy progress is 100%.

When this is not enabled, the user will have to manually press the Play button in order to start coinjoining.

Coinjoin Settings Automatically Start Coinjoin

Auto-start coinjoin threshold

The default Auto-start coinjoin threshold is 0.01 BTC.

The wallet will not automatically start coinjoining if the non-private balance is below the Auto-start coinjoin threshold, even if the Automatically start coinjoin is enabled. In this case the user has to manually press Play to start coinjoining. This setting can be used to prevent paying (relatively) high fees for smaller bitcoin amounts.

For example, if the non-private balance is 0.005 BTC and the Auto-start coinjoin threshold is 0.01 BTC, the user will have to manually press Play to start coinjoining.

Auto-start Coinjoin Threshold

It is OK to set the Auto-start coinjoin threshold to 0

If you have some small non-private left overs: you can coinjoin these by pressing Play, or wait until you receive more funds. If you want to always automatically coinjoin ALL your coins, this can be set to 0 BTC. Note that you might pay relatively more fees for coinjoining smaller amounts.

Coinjoin Strategy

',16),ne=e("code",null,"Minimize Costs",-1),ie=e("code",null,"Maximize Speed",-1),oe=e("code",null,"Maximize Privacy",-1),ae=e("code",null,"Anonymity score target",-1),se=e("code",null,"Coinjoin time preference",-1),re=e("code",null,"Red coin isolation",-1),le=e("p",null,[e("img",{src:w,alt:"Coinjoin Strategy Settings",title:"Coinjoin Strategy Settings"})],-1),ce=e("p",null,[t("The default strategy is "),e("code",null,"Maximize Speed"),t(".")],-1),he=e("p",null,"It is possible to make your own custom strategy by using the customize button.",-1),de=e("p",null,[e("img",{src:h,alt:"Coinjoin Strategy",title:"Coinjoin Strategy"})],-1),ue=e("h2",{id:"wasabi-coinjoin-examples",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wasabi-coinjoin-examples"},[e("span",null,"Wasabi Coinjoin examples")])],-1),pe=e("p",null,"Here's a list of Wasabi coinjoin examples and how they appear on a block explorer:",-1),be={href:"https://mempool.space/tx/198aee6e1b2cad9b7c3e4cd12962980fbaab0b20c07016031d0c2416b3ef9b70",target:"_blank",rel:"noopener noreferrer"},fe={href:"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/tx/198aee6e1b2cad9b7c3e4cd12962980fbaab0b20c07016031d0c2416b3ef9b70",target:"_blank",rel:"noopener noreferrer"},me={href:"https://mempool.space/tx/b77cb1ad9a1c164c868f89927193178ec44f1006ca154f8b97008d14bf2c4a6e",target:"_blank",rel:"noopener noreferrer"},ge={href:"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/tx/b77cb1ad9a1c164c868f89927193178ec44f1006ca154f8b97008d14bf2c4a6e",target:"_blank",rel:"noopener noreferrer"},_e={href:"https://mempool.space/tx/72f4b05845564c59982b4b5ae0d8aa7322d08907198fbcdae48390fbe0538e8d",target:"_blank",rel:"noopener noreferrer"},ye={href:"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/tx/72f4b05845564c59982b4b5ae0d8aa7322d08907198fbcdae48390fbe0538e8d",target:"_blank",rel:"noopener noreferrer"},we={href:"https://mempool.space/tx/063f001403aaa4e44f9f35faf44507f373824657a7ef39907a6907298d9ee56e",target:"_blank",rel:"noopener noreferrer"},je={href:"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/tx/063f001403aaa4e44f9f35faf44507f373824657a7ef39907a6907298d9ee56e",target:"_blank",rel:"noopener noreferrer"},ve={href:"https://mempool.space/tx/aabb0a2b43b274c9ae287e3837f9f8a8d8a378ce93153dc52de9978d2bb72cbc",target:"_blank",rel:"noopener noreferrer"},xe={href:"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/tx/aabb0a2b43b274c9ae287e3837f9f8a8d8a378ce93153dc52de9978d2bb72cbc",target:"_blank",rel:"noopener noreferrer"};function ke(Ae,Ce){const o=l("router-link"),a=l("ExternalLinkIcon"),s=l("RouteLink");return u(),p("div",null,[v,e("nav",x,[e("ul",null,[e("li",null,[n(o,{to:"#introduction"},{default:i(()=>[t("Introduction")]),_:1})]),e("li",null,[n(o,{to:"#coinjoin-step-by-step"},{default:i(()=>[t("Coinjoin step-by-step")]),_:1}),e("ul",null,[e("li",null,[n(o,{to:"#music-box"},{default:i(()=>[t("Music box")]),_:1})]),e("li",null,[n(o,{to:"#more-details"},{default:i(()=>[t("More Details")]),_:1})]),e("li",null,[n(o,{to:"#fees"},{default:i(()=>[t("Fees")]),_:1})])])]),e("li",null,[n(o,{to:"#wabisabi-protocol-step-by-step"},{default:i(()=>[t("WabiSabi protocol step-by-step")]),_:1}),e("ul",null,[e("li",null,[n(o,{to:"#input-registration"},{default:i(()=>[t("Input registration")]),_:1})]),e("li",null,[n(o,{to:"#connection-confirmation"},{default:i(()=>[t("Connection confirmation")]),_:1})]),e("li",null,[n(o,{to:"#output-registration"},{default:i(()=>[t("Output registration")]),_:1})]),e("li",null,[n(o,{to:"#signing"},{default:i(()=>[t("Signing")]),_:1})]),e("li",null,[n(o,{to:"#blame-round"},{default:i(()=>[t("Blame round")]),_:1})]),e("li",null,[n(o,{to:"#broadcasting"},{default:i(()=>[t("Broadcasting")]),_:1})])])]),e("li",null,[n(o,{to:"#coinjoin-settings"},{default:i(()=>[t("Coinjoin Settings")]),_:1}),e("ul",null,[e("li",null,[n(o,{to:"#automatically-start-coinjoin"},{default:i(()=>[t("Automatically start coinjoin")]),_:1})]),e("li",null,[n(o,{to:"#auto-start-coinjoin-threshold"},{default:i(()=>[t("Auto-start coinjoin threshold")]),_:1})]),e("li",null,[n(o,{to:"#coinjoin-strategy"},{default:i(()=>[t("Coinjoin Strategy")]),_:1})])])]),e("li",null,[n(o,{to:"#wasabi-coinjoin-examples"},{default:i(()=>[t("Wasabi Coinjoin examples")]),_:1})])])]),k,e("p",null,[t("A "),e("a",A,[t("coinjoin"),n(a)]),t(" is a special Bitcoin transaction where several peers get together to literally join their coins in a single transaction. They collaboratively build a transaction where each of them provides some coins as inputs, and fresh addresses as outputs. The concept has been around since the early days of Bitcoin, and it was formalized by the great Greg Maxwell in "),e("a",C,[t("this awesome introductory thread"),n(a)]),t(".")]),e("p",null,[t('The goal is to gain privacy by breaking the link of which input "pays" which output so that none of the outputs can be attributed to the owner of the input. WabiSabi enables centrally coordinated coinjoins with variable amounts in a trustless (meaning nobody can steal) and private (meaning even the coordinator cannot spy) manner, as described in the '),e("a",T,[t("WabiSabi paper"),n(a)]),t(".")]),e("p",null,[e("a",S,[W,n(a)])]),B,e("p",null,[t("After the "),I,t(" countdown is finished the wallet should start participating in the "),n(s,{to:"/using-wasabi/CoinJoin.html#wabisabi-protocol-step-by-step"},{default:i(()=>[t("coinjoin process")]),_:1}),t(".")]),M,q,F,P,e("p",null,[t("If this is succesfull, the coinjoin is completed and the coinjoin "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#how-can-i-see-coinjoins-in-the-history-list"},{default:i(()=>[t("will show up in the history list")]),_:1}),t(".")]),Q,e("p",null,[t("Remixing is free, as well as coinjoining coins 1 hop from a coinjoin, although, Bitcoin mining fees still do apply, as shown in "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#what-are-the-fees-for-the-coinjoin"},{default:i(()=>[t("this table")]),_:1}),t(". So if you send a coinjoined coin and receive a change output, you will not be charged the coordination fee for this change output. The recipient of the payment will not have to pay the coordination fee, as long as he is making coinjoins with the same coordinator.")]),N,z,O,D,e("p",null,[t("During the "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#what-is-happening-in-the-input-registration-phase"},{default:i(()=>[t("input registration")]),_:1}),t(", the client selects how many and which coins will be registered for coinjoin. These coins need to be confirmed on the Bitcoin blockchain. In the background Wasabi generates input proofs, which are signatures over challenge messages, made with the private keys that lock up the coins. With this, the coordinator can verify that you actually own these coins.")]),e("p",null,[t("Wasabi wallet generates a new "),e("a",E,[t("Tor identity"),n(a)]),t(" called "),U,t(" for each input. She is a separate entity, and for every round you use a new Alice who is not linked to any other input or previous connection. With Alice, you send the input ownership proof to the coordinator.")]),J,e("p",null,[t("Now that all peers are online, we are ready to proceed with the "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#what-is-happening-in-the-output-registration-phase"},{default:i(()=>[t("output registration phase")]),_:1}),t(" of the round.")]),L,R,V,G,H,K,e("div",Y,[$,e("p",null,[t("Since Wasabi "),e("a",X,[t("version 2.0.3"),n(a)]),t(" coinjoin outputs can be SegWit v0 and SegWit v1 (Taproot). If running this version or higher, the client registers the output type in a semi-random way (~50% chance of receiving Taproot output).")])]),Z,e("p",null,[t("Now that all inputs and outputs are registered, the coordinator can start the "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#what-is-happening-in-the-signing-phase"},{default:i(()=>[t("signing phase")]),_:1}),t(", by building the coinjoin transaction with all the registered inputs and outputs. It sends this transaction to all the Alices of the round.")]),ee,e("p",null,[t("The coinjoin transaction has been successfully built and signed, and it is now ready to be "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#what-is-happening-in-the-broadcasting-phase"},{default:i(()=>[t("broadcast")]),_:1}),t(" to the peers of the Bitcoin network. The coordinator sends this transaction over the Tor network to random Bitcoin P2P nodes, and from there it is gossiped to other nodes and miners. To save on mining fees, the target confirmation time is roughly 24 hours.")]),te,e("p",null,[t("Wasabi ships with 3 coinjoin strategies: "),ne,t(", "),ie,t(", and "),oe,t(". Each of these contain different configurations, as shown in "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#what-are-the-differences-settings-per-coinjoin-strategy"},{default:i(()=>[t("this table")]),_:1}),t(". They determine the "),ae,t(", "),se,t(", and if "),re,t(" is enabled or not.")]),le,ce,he,de,ue,pe,e("ul",null,[e("li",null,[e("a",be,[t("198aee6e1b2cad9b7c3e4cd12962980fbaab0b20c07016031d0c2416b3ef9b70"),n(a)]),t(" | "),e("a",fe,[t(".onion version"),n(a)])]),e("li",null,[e("a",me,[t("b77cb1ad9a1c164c868f89927193178ec44f1006ca154f8b97008d14bf2c4a6e"),n(a)]),t(" | "),e("a",ge,[t(".onion version"),n(a)])]),e("li",null,[e("a",_e,[t("72f4b05845564c59982b4b5ae0d8aa7322d08907198fbcdae48390fbe0538e8d"),n(a)]),t(" | "),e("a",ye,[t(".onion version"),n(a)])]),e("li",null,[e("a",we,[t("063f001403aaa4e44f9f35faf44507f373824657a7ef39907a6907298d9ee56e"),n(a)]),t(" | "),e("a",je,[t(".onion version"),n(a)])]),e("li",null,[e("a",ve,[t("aabb0a2b43b274c9ae287e3837f9f8a8d8a378ce93153dc52de9978d2bb72cbc"),n(a)]),t(" | "),e("a",xe,[t(".onion version"),n(a)])])])])}const Be=d(j,[["render",ke],["__file","CoinJoin.html.vue"]]),Ie=JSON.parse('{"path":"/using-wasabi/CoinJoin.html","title":"Coinjoin","lang":"en-US","frontmatter":{"title":"Coinjoin","description":"A detailed explanation about how WabiSabi coinjoins work under the hood. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"Coinjoin step-by-step","slug":"coinjoin-step-by-step","link":"#coinjoin-step-by-step","children":[{"level":3,"title":"Music box","slug":"music-box","link":"#music-box","children":[]},{"level":3,"title":"More Details","slug":"more-details","link":"#more-details","children":[]},{"level":3,"title":"Fees","slug":"fees","link":"#fees","children":[]}]},{"level":2,"title":"WabiSabi protocol step-by-step","slug":"wabisabi-protocol-step-by-step","link":"#wabisabi-protocol-step-by-step","children":[{"level":3,"title":"Input registration","slug":"input-registration","link":"#input-registration","children":[]},{"level":3,"title":"Connection confirmation","slug":"connection-confirmation","link":"#connection-confirmation","children":[]},{"level":3,"title":"Output registration","slug":"output-registration","link":"#output-registration","children":[]},{"level":3,"title":"Signing","slug":"signing","link":"#signing","children":[]},{"level":3,"title":"Blame round","slug":"blame-round","link":"#blame-round","children":[]},{"level":3,"title":"Broadcasting","slug":"broadcasting","link":"#broadcasting","children":[]}]},{"level":2,"title":"Coinjoin Settings","slug":"coinjoin-settings","link":"#coinjoin-settings","children":[{"level":3,"title":"Automatically start coinjoin","slug":"automatically-start-coinjoin","link":"#automatically-start-coinjoin","children":[]},{"level":3,"title":"Auto-start coinjoin threshold","slug":"auto-start-coinjoin-threshold","link":"#auto-start-coinjoin-threshold","children":[]},{"level":3,"title":"Coinjoin Strategy","slug":"coinjoin-strategy","link":"#coinjoin-strategy","children":[]}]},{"level":2,"title":"Wasabi Coinjoin examples","slug":"wasabi-coinjoin-examples","link":"#wasabi-coinjoin-examples","children":[]}],"git":{"updatedTime":1709905909000},"filePathRelative":"using-wasabi/CoinJoin.md"}');export{Be as comp,Ie as data}; +import{_ as c}from"./AutoStartCoinjoinThreshold-B0lFY-5G.js";import{_ as h}from"./CoinjoinStrategy-BZrDbG5n.js";import{_ as d,r as l,o as u,c as p,a as e,d as n,w as i,b as t,e as r}from"./app-BgbPjqpx.js";const b="/MusicBoxAwaitingToAutoStartCoinjoin.png",f="/MusicBoxAwaitingOtherParticipants.png",m="/MusicBoxCoinjoinInProgress.png",g="/MusicBoxCoinjoinSuccessful.png",_="/CoinjoinSettings.png",y="/CoinjoinSettingsAutomaticallyStartCoinjoin.png",w="/CoinjoinStrategySettings.png",j={},v=e("h1",{id:"coinjoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoin"},[e("span",null,"Coinjoin")])],-1),x={class:"table-of-contents"},k=e("h2",{id:"introduction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#introduction"},[e("span",null,"Introduction")])],-1),A={href:"https://en.bitcoin.it/Privacy#CoinJoin",target:"_blank",rel:"noopener noreferrer"},C={href:"https://bitcointalk.org/index.php?topic=279249.msg2983902",target:"_blank",rel:"noopener noreferrer"},T={href:"https://eprint.iacr.org/2021/206",target:"_blank",rel:"noopener noreferrer"},S={href:"https://youtu.be/dGATztn5Ql8",target:"_blank",rel:"noopener noreferrer"},W=e("img",{src:"https://img.youtube.com/vi/dGATztn5Ql8/maxresdefault.jpg",alt:"WabiSabi Coinjoin Explained in 3 Minutes"},null,-1),B=r('

Coinjoin step-by-step

  1. Launch Wasabi and open your wallet.
  2. Wait. Wasabi coinjoins automatically in the background.
  3. You're done! You can make private payments now.

Music box

After opening a hot wallet, it will automatically start a countdown to start coinjoining (±10 minutes). This and other coinjoin related information is shown in the music box.

Music Box Countdown

',5),I=e("em",null,"Waiting to auto-start coinjoin",-1),M=e("p",null,"A blue aura will show up at the the bottom of the wallet, which indicates that the wallet is coinjoining, and the music box message will change.",-1),q=e("p",null,[e("img",{src:f,alt:"Music Box Awaiting Other Participants",title:"Music Box Awaiting Other Participants"})],-1),F=e("p",null,"After some time the blue aura will change to an orange one, this indicates that the coinjoin process is now in a critical phase. Wasabi will prevent you from shutting down the app during the orange aura to not disrupt the coinjoin round.",-1),P=e("p",null,[e("img",{src:m,alt:"Music Box Coinjoin In Progress",title:"Music Box Coinjoin In Progress"})],-1),Q=r('

Music Box Success

Notice that the wallet might have to repeat the coinjoin steps multiple times before a successful coinjoin is created. So it is possible that the aura colors will change without a successful coinjoin. Please leave Wasabi Wallet running, and eventually there will be a successful coinjoin.

More Details

By default, Wasabi starts automatically coinjoining your funds when the total value of the non-private coins is equal to or above the Auto-start coinjoin threshold (0.01 BTC by default). Automatically start coinjoin can be disabled from the coinjoin settings. In case you want to start the process manually, then click the play button; if you want to stop coinjoin, then click the pause button.

Once a coin achieves enough privacy (reaches the Anonymity score target), then the corresponding amount will show up in the wallet's main view as "PRIVATE".

Notice that it is not yet possible to coinjoin from a hardware wallet, the keys must be "hot" on your computer.

Fees

A 0.3% coordination fee will be taken from fresh coins bigger than 0.01 BTC. Coins less than or equal to 0.01 BTC don't pay coordination fees at all, according to the PlebsDontPay threshold.

',8),N=e("h2",{id:"wabisabi-protocol-step-by-step",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wabisabi-protocol-step-by-step"},[e("span",null,"WabiSabi protocol step-by-step")])],-1),z=e("p",null,"WabiSabi protocol requires 5 steps to successfully create and broadcast a coinjoin transaction to the bitcoin network.",-1),O=e("p",null,"The round starts either as soon as the number of registered inputs reaches the maximum, or after the input registration time is reached and as long as the minimum number of inputs is satisfied.",-1),D=e("h3",{id:"input-registration",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#input-registration"},[e("span",null,"Input registration")])],-1),E={href:"https://tb-manual.torproject.org/managing-identities/",target:"_blank",rel:"noopener noreferrer"},U=e("strong",null,"Alice",-1),J=r('

The Wasabi coordinator now verifies that:

  • There is still room for more inputs on this coinjoin.
  • The input has not already been registered, is not banned, is unspent, and that the input proof is valid.
  • The input has at least 5000 sats value.

Only when all these checks are passed, does the coordinator allow this input to be registered. The coordinator creates and sends a credential back to Alice, which has the same amount as the input minus fees.

The input registration phase ends when either: the number of registered inputs reaches the maximum, or when the time elapsed and the minimum number of inputs (180) is satisfied.

Connection confirmation

There are many users registering their inputs (with different Alice for each input) in the first phase, and this takes a while. The connection confirmation phase makes sure that all of them are still online and ready to continue. The coordinator verifies the unique ID from each Alice, and if everyone is still communicating. The coordinator sends a zero value credential to each Alice for each successful connection confirmation.

The round is abandoned and re-started if too many Alices have dropped, for example when their Wasabi is shut down, or when their Tor connection is temporarily broken. The connection confirmation phase ends when all Alices have provided their unique IDs, or after a timeout and the number of online Alices is still larger than the minimum number of inputs.

Output registration

',8),L=e("p",null,"First, every client needs to change the value of their credentials to the desired output values. For this, the client presents to the coordinator two old credentials, and two newly created ones. The coordinator does not know the amount value of any of those credentials, but it can verify, that the two pairs sum up to exactly the same value. For example, a user can present one 5 btc and one 0 btc credential, and redeem one 2 btc and one 3 btc credential. Or a user can present one 4 btc and one 1 btc credential, and redeem one 5 btc and one 0 btc credential. After potentially many rounds of reissuance, each client has exactly the amount credential it desires. Each of these reissuance is perfectly private, so the coordinator cannot link any of them to the same user.",-1),R=e("p",null,[t("Next, your Wasabi client generates multiple new Tor identities called "),e("strong",null,"Bob"),t(", which are in no way tied to any Alice. Bob sends to the Wasabi coordinator:")],-1),V=e("ul",null,[e("li",null,"An unblinded credential signed by the coordinator"),e("li",null,"A new (unused) bitcoin address")],-1),G=e("p",null,"Because the coordinator can verify its own credential, it knows that this credential came into existence after an input of at least this much value was registered. However, it cannot know which input exactly.",-1),H=e("p",null,"It is very important that the coordinator cannot link Alice to Bob. Because Alice has sent the cleartext input, and Bob sends the cleartext output. So, if the two were to be linked, then the coordinator can specifically link the input to the output, meaning that the anonymity set is 1. Because Alice received a credential from the coordinator, and because Bob is a new Tor identity not linked to Alice, the coordinator can verify that nobody is cheating, but it cannot deanonymize the peers.",-1),K=e("p",null,"The output registration phase ends when the value of cleartext outputs is equal to the value of inputs, meaning that all Bobs have registered. If after a timeout not all outputs are registered, then this round is abandoned, the missing inputs are temporarily banned, and a new round is started.",-1),Y={class:"custom-container tip"},$=e("p",{class:"custom-container-title"},"Possibility of Taproot outputs from coinjoin",-1),X={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.3",target:"_blank",rel:"noopener noreferrer"},Z=e("h3",{id:"signing",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#signing"},[e("span",null,"Signing")])],-1),ee=r('

Each Alice does the following:

  • Verifies that her input and output are included.
  • Signs the transaction with the private key of her input.
  • Sends the signature to the coordinator, who verifies this information.

The signing phase ends when the coordinator has received all the valid signatures for all the registered inputs.

Blame round

When the signing phase fails due to some Alices disrupting the round (failing to sign or send the signature to the coordinator), then the successful Alices will continue into a blame round. The blame round will redo the coinjoin phases in order to create a successful coinjoin.

This mechanism also prevents coinjoins from being DDoS-ed, because bad actors that are willingly disturbing rounds won't be able to join the blame round. The client will keep going to the blame round until there are not enough Alices left to meet the minimum input count of blame rounds (150).

The blame round is not a mandatory phase of the coinjoin process. It was introduced in order to have a higher coinjoin success rate.

Broadcasting

',8),te=r('

Coinjoin Settings

Wasabi Wallet has automatic coinjoin. It is done by the built-in automatic coinjoin "robot". The robot contains instructions/settings, like how often and when to coinjoin. The user is able to specify these settings in the Coinjoin Settings dialog, according to his own preferences. The wallet ships with default settings, which are good enough for most users.

Wasabi Wallet Coinjoin Settings

Coinjoin settings are wallet specific

As the coinjoin settings apply per individual wallet, it is possible to have multiple wallets with different coinjoin settings.

Automatically start coinjoin

This setting is enabled by default.

When this is enabled, the wallet will automatically start coinjoining soon after the wallet is loaded. The wallet will coinjoin until the privacy progress is 100%.

When this is not enabled, the user will have to manually press the Play button in order to start coinjoining.

Coinjoin Settings Automatically Start Coinjoin

Auto-start coinjoin threshold

The default Auto-start coinjoin threshold is 0.01 BTC.

The wallet will not automatically start coinjoining if the non-private balance is below the Auto-start coinjoin threshold, even if the Automatically start coinjoin is enabled. In this case the user has to manually press Play to start coinjoining. This setting can be used to prevent paying (relatively) high fees for smaller bitcoin amounts.

For example, if the non-private balance is 0.005 BTC and the Auto-start coinjoin threshold is 0.01 BTC, the user will have to manually press Play to start coinjoining.

Auto-start Coinjoin Threshold

It is OK to set the Auto-start coinjoin threshold to 0

If you have some small non-private left overs: you can coinjoin these by pressing Play, or wait until you receive more funds. If you want to always automatically coinjoin ALL your coins, this can be set to 0 BTC. Note that you might pay relatively more fees for coinjoining smaller amounts.

Coinjoin Strategy

',16),ne=e("code",null,"Minimize Costs",-1),ie=e("code",null,"Maximize Speed",-1),oe=e("code",null,"Maximize Privacy",-1),ae=e("code",null,"Anonymity score target",-1),se=e("code",null,"Coinjoin time preference",-1),re=e("code",null,"Red coin isolation",-1),le=e("p",null,[e("img",{src:w,alt:"Coinjoin Strategy Settings",title:"Coinjoin Strategy Settings"})],-1),ce=e("p",null,[t("The default strategy is "),e("code",null,"Maximize Speed"),t(".")],-1),he=e("p",null,"It is possible to make your own custom strategy by using the customize button.",-1),de=e("p",null,[e("img",{src:h,alt:"Coinjoin Strategy",title:"Coinjoin Strategy"})],-1),ue=e("h2",{id:"wasabi-coinjoin-examples",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wasabi-coinjoin-examples"},[e("span",null,"Wasabi Coinjoin examples")])],-1),pe=e("p",null,"Here's a list of Wasabi coinjoin examples and how they appear on a block explorer:",-1),be={href:"https://mempool.space/tx/198aee6e1b2cad9b7c3e4cd12962980fbaab0b20c07016031d0c2416b3ef9b70",target:"_blank",rel:"noopener noreferrer"},fe={href:"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/tx/198aee6e1b2cad9b7c3e4cd12962980fbaab0b20c07016031d0c2416b3ef9b70",target:"_blank",rel:"noopener noreferrer"},me={href:"https://mempool.space/tx/b77cb1ad9a1c164c868f89927193178ec44f1006ca154f8b97008d14bf2c4a6e",target:"_blank",rel:"noopener noreferrer"},ge={href:"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/tx/b77cb1ad9a1c164c868f89927193178ec44f1006ca154f8b97008d14bf2c4a6e",target:"_blank",rel:"noopener noreferrer"},_e={href:"https://mempool.space/tx/72f4b05845564c59982b4b5ae0d8aa7322d08907198fbcdae48390fbe0538e8d",target:"_blank",rel:"noopener noreferrer"},ye={href:"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/tx/72f4b05845564c59982b4b5ae0d8aa7322d08907198fbcdae48390fbe0538e8d",target:"_blank",rel:"noopener noreferrer"},we={href:"https://mempool.space/tx/063f001403aaa4e44f9f35faf44507f373824657a7ef39907a6907298d9ee56e",target:"_blank",rel:"noopener noreferrer"},je={href:"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/tx/063f001403aaa4e44f9f35faf44507f373824657a7ef39907a6907298d9ee56e",target:"_blank",rel:"noopener noreferrer"},ve={href:"https://mempool.space/tx/aabb0a2b43b274c9ae287e3837f9f8a8d8a378ce93153dc52de9978d2bb72cbc",target:"_blank",rel:"noopener noreferrer"},xe={href:"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/tx/aabb0a2b43b274c9ae287e3837f9f8a8d8a378ce93153dc52de9978d2bb72cbc",target:"_blank",rel:"noopener noreferrer"};function ke(Ae,Ce){const o=l("router-link"),a=l("ExternalLinkIcon"),s=l("RouteLink");return u(),p("div",null,[v,e("nav",x,[e("ul",null,[e("li",null,[n(o,{to:"#introduction"},{default:i(()=>[t("Introduction")]),_:1})]),e("li",null,[n(o,{to:"#coinjoin-step-by-step"},{default:i(()=>[t("Coinjoin step-by-step")]),_:1}),e("ul",null,[e("li",null,[n(o,{to:"#music-box"},{default:i(()=>[t("Music box")]),_:1})]),e("li",null,[n(o,{to:"#more-details"},{default:i(()=>[t("More Details")]),_:1})]),e("li",null,[n(o,{to:"#fees"},{default:i(()=>[t("Fees")]),_:1})])])]),e("li",null,[n(o,{to:"#wabisabi-protocol-step-by-step"},{default:i(()=>[t("WabiSabi protocol step-by-step")]),_:1}),e("ul",null,[e("li",null,[n(o,{to:"#input-registration"},{default:i(()=>[t("Input registration")]),_:1})]),e("li",null,[n(o,{to:"#connection-confirmation"},{default:i(()=>[t("Connection confirmation")]),_:1})]),e("li",null,[n(o,{to:"#output-registration"},{default:i(()=>[t("Output registration")]),_:1})]),e("li",null,[n(o,{to:"#signing"},{default:i(()=>[t("Signing")]),_:1})]),e("li",null,[n(o,{to:"#blame-round"},{default:i(()=>[t("Blame round")]),_:1})]),e("li",null,[n(o,{to:"#broadcasting"},{default:i(()=>[t("Broadcasting")]),_:1})])])]),e("li",null,[n(o,{to:"#coinjoin-settings"},{default:i(()=>[t("Coinjoin Settings")]),_:1}),e("ul",null,[e("li",null,[n(o,{to:"#automatically-start-coinjoin"},{default:i(()=>[t("Automatically start coinjoin")]),_:1})]),e("li",null,[n(o,{to:"#auto-start-coinjoin-threshold"},{default:i(()=>[t("Auto-start coinjoin threshold")]),_:1})]),e("li",null,[n(o,{to:"#coinjoin-strategy"},{default:i(()=>[t("Coinjoin Strategy")]),_:1})])])]),e("li",null,[n(o,{to:"#wasabi-coinjoin-examples"},{default:i(()=>[t("Wasabi Coinjoin examples")]),_:1})])])]),k,e("p",null,[t("A "),e("a",A,[t("coinjoin"),n(a)]),t(" is a special Bitcoin transaction where several peers get together to literally join their coins in a single transaction. They collaboratively build a transaction where each of them provides some coins as inputs, and fresh addresses as outputs. The concept has been around since the early days of Bitcoin, and it was formalized by the great Greg Maxwell in "),e("a",C,[t("this awesome introductory thread"),n(a)]),t(".")]),e("p",null,[t('The goal is to gain privacy by breaking the link of which input "pays" which output so that none of the outputs can be attributed to the owner of the input. WabiSabi enables centrally coordinated coinjoins with variable amounts in a trustless (meaning nobody can steal) and private (meaning even the coordinator cannot spy) manner, as described in the '),e("a",T,[t("WabiSabi paper"),n(a)]),t(".")]),e("p",null,[e("a",S,[W,n(a)])]),B,e("p",null,[t("After the "),I,t(" countdown is finished the wallet should start participating in the "),n(s,{to:"/using-wasabi/CoinJoin.html#wabisabi-protocol-step-by-step"},{default:i(()=>[t("coinjoin process")]),_:1}),t(".")]),M,q,F,P,e("p",null,[t("If this is succesfull, the coinjoin is completed and the coinjoin "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#how-can-i-see-coinjoins-in-the-history-list"},{default:i(()=>[t("will show up in the history list")]),_:1}),t(".")]),Q,e("p",null,[t("Remixing is free, as well as coinjoining coins 1 hop from a coinjoin, although, Bitcoin mining fees still do apply, as shown in "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#what-are-the-fees-for-the-coinjoin"},{default:i(()=>[t("this table")]),_:1}),t(". So if you send a coinjoined coin and receive a change output, you will not be charged the coordination fee for this change output. The recipient of the payment will not have to pay the coordination fee, as long as he is making coinjoins with the same coordinator.")]),N,z,O,D,e("p",null,[t("During the "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#what-is-happening-in-the-input-registration-phase"},{default:i(()=>[t("input registration")]),_:1}),t(", the client selects how many and which coins will be registered for coinjoin. These coins need to be confirmed on the Bitcoin blockchain. In the background Wasabi generates input proofs, which are signatures over challenge messages, made with the private keys that lock up the coins. With this, the coordinator can verify that you actually own these coins.")]),e("p",null,[t("Wasabi wallet generates a new "),e("a",E,[t("Tor identity"),n(a)]),t(" called "),U,t(" for each input. She is a separate entity, and for every round you use a new Alice who is not linked to any other input or previous connection. With Alice, you send the input ownership proof to the coordinator.")]),J,e("p",null,[t("Now that all peers are online, we are ready to proceed with the "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#what-is-happening-in-the-output-registration-phase"},{default:i(()=>[t("output registration phase")]),_:1}),t(" of the round.")]),L,R,V,G,H,K,e("div",Y,[$,e("p",null,[t("Since Wasabi "),e("a",X,[t("version 2.0.3"),n(a)]),t(" coinjoin outputs can be SegWit v0 and SegWit v1 (Taproot). If running this version or higher, the client registers the output type in a semi-random way (~50% chance of receiving Taproot output).")])]),Z,e("p",null,[t("Now that all inputs and outputs are registered, the coordinator can start the "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#what-is-happening-in-the-signing-phase"},{default:i(()=>[t("signing phase")]),_:1}),t(", by building the coinjoin transaction with all the registered inputs and outputs. It sends this transaction to all the Alices of the round.")]),ee,e("p",null,[t("The coinjoin transaction has been successfully built and signed, and it is now ready to be "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#what-is-happening-in-the-broadcasting-phase"},{default:i(()=>[t("broadcast")]),_:1}),t(" to the peers of the Bitcoin network. The coordinator sends this transaction over the Tor network to random Bitcoin P2P nodes, and from there it is gossiped to other nodes and miners. To save on mining fees, the target confirmation time is roughly 24 hours.")]),te,e("p",null,[t("Wasabi ships with 3 coinjoin strategies: "),ne,t(", "),ie,t(", and "),oe,t(". Each of these contain different configurations, as shown in "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#what-are-the-differences-settings-per-coinjoin-strategy"},{default:i(()=>[t("this table")]),_:1}),t(". They determine the "),ae,t(", "),se,t(", and if "),re,t(" is enabled or not.")]),le,ce,he,de,ue,pe,e("ul",null,[e("li",null,[e("a",be,[t("198aee6e1b2cad9b7c3e4cd12962980fbaab0b20c07016031d0c2416b3ef9b70"),n(a)]),t(" | "),e("a",fe,[t(".onion version"),n(a)])]),e("li",null,[e("a",me,[t("b77cb1ad9a1c164c868f89927193178ec44f1006ca154f8b97008d14bf2c4a6e"),n(a)]),t(" | "),e("a",ge,[t(".onion version"),n(a)])]),e("li",null,[e("a",_e,[t("72f4b05845564c59982b4b5ae0d8aa7322d08907198fbcdae48390fbe0538e8d"),n(a)]),t(" | "),e("a",ye,[t(".onion version"),n(a)])]),e("li",null,[e("a",we,[t("063f001403aaa4e44f9f35faf44507f373824657a7ef39907a6907298d9ee56e"),n(a)]),t(" | "),e("a",je,[t(".onion version"),n(a)])]),e("li",null,[e("a",ve,[t("aabb0a2b43b274c9ae287e3837f9f8a8d8a378ce93153dc52de9978d2bb72cbc"),n(a)]),t(" | "),e("a",xe,[t(".onion version"),n(a)])])])])}const Be=d(j,[["render",ke],["__file","CoinJoin.html.vue"]]),Ie=JSON.parse('{"path":"/using-wasabi/CoinJoin.html","title":"Coinjoin","lang":"en-US","frontmatter":{"title":"Coinjoin","description":"A detailed explanation about how WabiSabi coinjoins work under the hood. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"Coinjoin step-by-step","slug":"coinjoin-step-by-step","link":"#coinjoin-step-by-step","children":[{"level":3,"title":"Music box","slug":"music-box","link":"#music-box","children":[]},{"level":3,"title":"More Details","slug":"more-details","link":"#more-details","children":[]},{"level":3,"title":"Fees","slug":"fees","link":"#fees","children":[]}]},{"level":2,"title":"WabiSabi protocol step-by-step","slug":"wabisabi-protocol-step-by-step","link":"#wabisabi-protocol-step-by-step","children":[{"level":3,"title":"Input registration","slug":"input-registration","link":"#input-registration","children":[]},{"level":3,"title":"Connection confirmation","slug":"connection-confirmation","link":"#connection-confirmation","children":[]},{"level":3,"title":"Output registration","slug":"output-registration","link":"#output-registration","children":[]},{"level":3,"title":"Signing","slug":"signing","link":"#signing","children":[]},{"level":3,"title":"Blame round","slug":"blame-round","link":"#blame-round","children":[]},{"level":3,"title":"Broadcasting","slug":"broadcasting","link":"#broadcasting","children":[]}]},{"level":2,"title":"Coinjoin Settings","slug":"coinjoin-settings","link":"#coinjoin-settings","children":[{"level":3,"title":"Automatically start coinjoin","slug":"automatically-start-coinjoin","link":"#automatically-start-coinjoin","children":[]},{"level":3,"title":"Auto-start coinjoin threshold","slug":"auto-start-coinjoin-threshold","link":"#auto-start-coinjoin-threshold","children":[]},{"level":3,"title":"Coinjoin Strategy","slug":"coinjoin-strategy","link":"#coinjoin-strategy","children":[]}]},{"level":2,"title":"Wasabi Coinjoin examples","slug":"wasabi-coinjoin-examples","link":"#wasabi-coinjoin-examples","children":[]}],"git":{"updatedTime":1709905909000},"filePathRelative":"using-wasabi/CoinJoin.md"}');export{Be as comp,Ie as data}; diff --git a/assets/Coins.html-CMgxodd1.js b/assets/Coins.html-D3KQkX5V.js similarity index 99% rename from assets/Coins.html-CMgxodd1.js rename to assets/Coins.html-D3KQkX5V.js index d60f3cbfd0..2b71daba37 100644 --- a/assets/Coins.html-CMgxodd1.js +++ b/assets/Coins.html-D3KQkX5V.js @@ -1,4 +1,4 @@ -import{_ as c,r,o as h,c as d,a as e,b as n,d as t,w as i,e as o}from"./app-BPKesm5h.js";const u={},p=e("h1",{id:"coins",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coins"},[e("span",null,"Coins")])],-1),b={href:"https://developer.bitcoin.org/devguide/block_chain.html",target:"_blank",rel:"noopener noreferrer"},g={href:"https://en.bitcoin.it/wiki/Coinbase",target:"_blank",rel:"noopener noreferrer"},m={class:"table-of-contents"},f=o('

Problem

UTXOs are not fungible

Each UTXO is a unique snowflake with a public transaction history. For example, when Alice sends a coin to Bob, then Bob does not just have any random UTXO, but he has specifically the coin that Alice has sent him. When Bob sends this coin to Charlie, then Charlie can check the history of the coin and see the transaction from Alice to Bob. But due to the pseudonymity of Bitcoin, he does not necessarily find out that Alice is involved.

Further, when Alice has one non-private coin and one private coin, and she selects both of them as the inputs of a transaction, the linking of these two coins strongly suggests that the coin that was private also belongs to Alice. This means that coin consolidation can lead to an overall decrease in privacy, especially when using an automatic coin selection algorithm.

Wasabi's Solution

Manual coin labeling and selection

Using Wasabi it is mandatory to label every receiving and destination address. This helps the user to know where their coins came from so that they can judge whether there are privacy concerns when sending a specific coin to a specific receiver. The default Send workflow uses the auto coin selection algorithm, which is based on the labeling system.

',8),v=e("h3",{id:"change-avoidance-suggestion",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#change-avoidance-suggestion"},[e("span",null,"Change avoidance suggestion")])],-1),y=e("em",null,"Preview Transaction",-1),w=e("h2",{id:"heuristics-identifying-change",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#heuristics-identifying-change"},[e("span",null,"Heuristics identifying change")])],-1),_=e("h3",{id:"address-reuse",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#address-reuse"},[e("span",null,"Address reuse")])],-1),k=e("p",null,"When several coins have the same address, then they are owned by the same entity. Thus if a transaction has a reused address in the output, it is very likely to be the payment amount from one entity to another. Thus the other output of this transaction is likely to be the change of the entity providing the inputs of the transaction.",-1),x={class:"custom-container warning"},C=e("p",{class:"custom-container-title"},"Remember",-1),T=o(`

Wallet fingerprinting

Different software wallets have different methods of creating Bitcoin transactions. So if it is known that a transaction was created by a specific wallet, then it can be checked how this wallet handles change.

Wasabi tries to build the most common form of transaction structure, thus reducing the likelihood of identifying any given transaction as being from Wasabi. However, Wasabi CoinJoins are very easily fingerprinted, and any coin associated is clearly managed with Wasabi Wallet.

Round numbers

When making a payment, then often the destination address receives a round number of bitcoin. Because the input is usually a non-round number, the other output will also be a non-round number. This makes it clear that the non-round number output is the change back to the sender.

A [0.1293 0112 btc]  -->  B [0.0500 0000 btc]
+import{_ as c,r,o as h,c as d,a as e,b as n,d as t,w as i,e as o}from"./app-BgbPjqpx.js";const u={},p=e("h1",{id:"coins",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coins"},[e("span",null,"Coins")])],-1),b={href:"https://developer.bitcoin.org/devguide/block_chain.html",target:"_blank",rel:"noopener noreferrer"},g={href:"https://en.bitcoin.it/wiki/Coinbase",target:"_blank",rel:"noopener noreferrer"},m={class:"table-of-contents"},f=o('

Problem

UTXOs are not fungible

Each UTXO is a unique snowflake with a public transaction history. For example, when Alice sends a coin to Bob, then Bob does not just have any random UTXO, but he has specifically the coin that Alice has sent him. When Bob sends this coin to Charlie, then Charlie can check the history of the coin and see the transaction from Alice to Bob. But due to the pseudonymity of Bitcoin, he does not necessarily find out that Alice is involved.

Further, when Alice has one non-private coin and one private coin, and she selects both of them as the inputs of a transaction, the linking of these two coins strongly suggests that the coin that was private also belongs to Alice. This means that coin consolidation can lead to an overall decrease in privacy, especially when using an automatic coin selection algorithm.

Wasabi's Solution

Manual coin labeling and selection

Using Wasabi it is mandatory to label every receiving and destination address. This helps the user to know where their coins came from so that they can judge whether there are privacy concerns when sending a specific coin to a specific receiver. The default Send workflow uses the auto coin selection algorithm, which is based on the labeling system.

',8),v=e("h3",{id:"change-avoidance-suggestion",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#change-avoidance-suggestion"},[e("span",null,"Change avoidance suggestion")])],-1),y=e("em",null,"Preview Transaction",-1),w=e("h2",{id:"heuristics-identifying-change",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#heuristics-identifying-change"},[e("span",null,"Heuristics identifying change")])],-1),_=e("h3",{id:"address-reuse",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#address-reuse"},[e("span",null,"Address reuse")])],-1),k=e("p",null,"When several coins have the same address, then they are owned by the same entity. Thus if a transaction has a reused address in the output, it is very likely to be the payment amount from one entity to another. Thus the other output of this transaction is likely to be the change of the entity providing the inputs of the transaction.",-1),x={class:"custom-container warning"},C=e("p",{class:"custom-container-title"},"Remember",-1),T=o(`

Wallet fingerprinting

Different software wallets have different methods of creating Bitcoin transactions. So if it is known that a transaction was created by a specific wallet, then it can be checked how this wallet handles change.

Wasabi tries to build the most common form of transaction structure, thus reducing the likelihood of identifying any given transaction as being from Wasabi. However, Wasabi CoinJoins are very easily fingerprinted, and any coin associated is clearly managed with Wasabi Wallet.

Round numbers

When making a payment, then often the destination address receives a round number of bitcoin. Because the input is usually a non-round number, the other output will also be a non-round number. This makes it clear that the non-round number output is the change back to the sender.

A [0.1293 0112 btc]  -->  B [0.0500 0000 btc]
                           C [0.0792 9962 btc] (= change)
 

TIP

In order to protect your privacy, add or remove (when possible) a couple of sats from the payment amount to obfuscate which output is your change and which one is the payment.

CoinJoin

A CoinJoin has many unequal value inputs, and creates several equal value anonset outputs, as well as unequal value outputs, making it clear that these are the change outputs.

`,9),B={class:"custom-container tip"},W=e("p",{class:"custom-container-title"},"TIP",-1),A=o(`
                C [1 btc]
 A [6 btc]  -->  D [1 btc]
diff --git a/assets/ColdWasabi.html-D0lP8_S-.js b/assets/ColdWasabi.html-BbLAbGKC.js
similarity index 99%
rename from assets/ColdWasabi.html-D0lP8_S-.js
rename to assets/ColdWasabi.html-BbLAbGKC.js
index b2c1c95ec5..d1f1ebc5e7 100644
--- a/assets/ColdWasabi.html-D0lP8_S-.js
+++ b/assets/ColdWasabi.html-BbLAbGKC.js
@@ -1 +1 @@
-import{_ as c,r,o as d,c as h,a as t,d as a,w as o,b as e,e as l}from"./app-BPKesm5h.js";const u={},w=t("h1",{id:"cold-wasabi-hardware-wallet-mode",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#cold-wasabi-hardware-wallet-mode"},[t("span",null,"Cold-Wasabi Hardware Wallet Mode")])],-1),p={class:"table-of-contents"},b=t("h2",{id:"using-hardware-wallet-step-by-step",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#using-hardware-wallet-step-by-step"},[t("span",null,"Using hardware wallet step-by-step")])],-1),g=l("
  • Start your Wasabi Wallet and go to Add Wallet.
  • Click on Connect to hardware wallet and then connect the hardware wallet via cable. Alternatively, you can import a Coldcard skeleton file via SD card by using Import Wallet at the Add Wallet dialog.
  • Confirm that the detected hardware wallet is correct.
  • Click Open, and wait for the wallet to load.
  • ",4),m=t("code",null,"Send",-1),f={class:"custom-container warning"},v=t("p",{class:"custom-container-title"},"No coinjoin",-1),y=l('

    What is Cold Storage

    Cold storage refers to generating and storing private keys completely offline. This is an often-used security precaution, especially dealing with large amounts of bitcoin. Because the private keys are not on a computer that is connected to the internet, many remote attack vectors are nullified.

    Methods of cold storage include keeping private keys on a:

    • USB drive or other data storage medium
    • Paper wallet
    • Bearer item such as a physical bitcoin
    • Hardware wallet

    Use a hardware wallet for cold storage

    There are multiple ways to exercise cold storage, however it is highly reccommended to use a hardware wallet. This is by far the best and most secure way of using bitcoin for almost all users.

    Hardware Wallet with Wasabi

    ',6),k={href:"https://github.com/bitcoin-core/hwi",target:"_blank",rel:"noopener noreferrer"},W={href:"https://trezor.io",target:"_blank",rel:"noopener noreferrer"},_={href:"https://ledger.com",target:"_blank",rel:"noopener noreferrer"},S={href:"https://coldcard.com",target:"_blank",rel:"noopener noreferrer"},C=l('

    Connecting via USB

    Import the wallet

    1. Go to Add wallet.
    2. Click on Connect to hardware wallet.
    3. Give the wallet a name.
    4. Connect the hardware wallet to the PC and enter the pin on the hardware wallet to unlock it.
    5. Confirm that the correct hardware wallet is detected.
    6. Open the wallet.

    This wallet can be used as a watch-only wallet when the hardware wallet device is not connected.

    Wasabi remembers the wallet's information like xpub, wallet fingerprint and addresses etc. But it never knows the private keys, which are on the hardware wallet. So, you can see the balance and all it's transactions in Wasabi and you can generate addresses, but you cannot send without the hardware wallet being connected. Because you need to sign (confirm) the outgoing transactions on the hardware wallet.

    Receiving bitcoin

    ',5),x=t("div",{class:"custom-container tip"},[t("p",{class:"custom-container-title"},"Verify the receive address on the hardware wallet for extra security"),t("p",null,[e("It's always a good practice to verify that the receive address on Wasabi corresponds to the one on the hardware wallet, before receiving (large amounts of) bitcoin. This could prevent malicious firmware which replaces a receive address with a fake one. You can do this by clicking on "),t("code",null,"Show on the hardware wallet"),e(" at a receive address. The address will now be displayed on the hardware wallet, check that the addresses correspond and then confirm this on the hardware wallet.")])],-1),T=t("h4",{id:"sending-bitcoin",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#sending-bitcoin"},[t("span",null,"Sending bitcoin")])],-1),B=l('
    1. Click the Send button.
    2. Enter the amount and destination address.
    3. Enter the label of whom you are sending to.
    4. At the Preview Transaction screen, check that everything is correct.
    5. Click Send Now.
    6. Connect the hardware wallet & unlock it.
    7. Check on the hardware wallet that everything is correct.
    8. Confirm on the hardware wallet.
    9. The transaction is sent!

    The private keys are not on the computer, thus the transaction is signed on the hardware wallet after you confirm with a physical button click. The final transaction is automatically broadcast over Tor with Wasabi Wallet.

    Connecting Coldcard via SD card

    ',3),j={href:"https://coldcard.com/docs/microsd",target:"_blank",rel:"noopener noreferrer"},I=l('

    Import the skeleton wallet

    Power your Coldcard on a power bank or electricity socket, then unlock it with your pin. Put in a MicroSD card and go to Advanced > MicroSD Card > Export Wallet > Wasabi Wallet. This will write the public keys, wallet fingerprint, derivation path and other metadata to a skeleton file new-wallet.json.

    Protect your public keys!

    This file does not include your private keys, so an attacker cannot use it to spend your bitcoin. However, he can use it to derive a full transaction history, thus it is a potential privacy leak.

    Now insert the SD card to your computer, and open Wasabi Wallet. Go to the Add Wallet dialog, and click Import a wallet, browse to the SD card and select the new-wallet.json file. Wasabi will automatically import and modify this skeleton file and store it in your Wallets and WalletBackups folders.

    Receiving bitcoin

    ',5),P=t("code",null,"NavBar",-1),U=l('

    Sending bitcoin

    Sending bitcoin airgapped works as follows:

    1. Enable PSBT workflow in the Wallet Settings
    2. Click the Send button.
    3. Enter the amount and destination address.
    4. Enter the label of whom you are sending to.
    5. At the Preview Transaction screen, check that everything is correct.
    6. Click Save PSBT file, and save the file on the MicroSD card.
    7. Remove the MicroSD card from the computer and put it into your Coldcard.
    8. On the Coldcard, click Ready to Sign.
    9. Verify the transaction details shown on the Coldcard, and approve to sign the transaction.
    10. Remove the MicroSD card from Coldcard and insert it into the computer.
    11. In Wasabi, click on Broadcaster (in the search bar).
    12. Select Import Transaction.
    13. Select the final signed transaction, which looks like this xxx-final.txn.
    14. Broadcast the transaction.

    Enable PSBT workflow in the settings

    You need to have PSBT workflow enabled in the wallet settings in order to have Save PSBT file show up at the Preview Transaction screen. After it is enabled, a Broadcast button will appear next to the Send button for an easier workflow.

    Cold-Wasabi protocol

    This is how you can safely eat cold Wasabi, or store your coins on a hardware wallet after coinjoining with Wasabi Wallet. Because you cannot do coinjoin with the private keys on the hardware wallet, you will need to generate and load two different wallets in Wasabi. A 'hot' (coinjoin) and a 'cold' (storage) wallet will both be running in parallel, label them accordingly so you don't mix them up.

    GUI tutorial

    Coinjoin on the hot Wasabi

    First

    You should make your existing coins private. It is useful to generate a complete new hot wallet for this, so as to keep the coinjoin transaction history separate from other wallets.

    ',9),A=t("li",null,"Send bitcoin into this Hot-Wasabi Wallet.",-1),N=l('

    Set up your cold-Wasabi

    Second

    In order to separate these new private coins, you should generate a fresh wallet on your hardware device.

    1. Generate a new set of keys on your hardware wallet and make a backup.
    2. Load your hardware wallet device to Wasabi, either via USB or SD card.
    3. Label and generate a receive address for the hardware wallet. For the first setup, you need to connect the hardware wallet to the computer that runs Wasabi, afterwards, you can generate receive addresses without the device being connected.
    4. Copy the receiving address from the cold-Wasabi.

    Send bitcoins from hot to cold Wasabi

    Third

    When your coins are private, it is a good practice to send them out in multiple batches in order to not consolidate all your coins. Wait some time in-between sending them, so that timing analysis becomes more difficult.

    1. Go to the hot-Wasabi Send dialog and enter the amount.
    2. Paste the cold-Wasabi address.

    Send bitcoins from cold Wasabi

    Finally

    You can at any time spend the bitcoin from the cold-Wasabi.

    1. Connect your hardware wallet to the computer.
    2. Load the cold Wasabi wallet.
    3. Go to the Send dialog, enter the amount and the destination address, then sign the transaction with the hardware wallet.

    Success!

    おめでとうございます!

    You are now eating Cold Wasabi!

    WARNING

    The anonymity score is tied to the wallet that you used to coinjoin, if you send a mixed coin to another Wasabi Wallet (in this case your hardware wallet), it will have an anonymity score of 1 (and will be marked as non-private) because this wallet doesn't know that the coin was coinjoined.

    You should use a meaningful label when you generate a receive address in your hardware wallet, e.g. "Myself coinjoin private" (something that reminds you that you got this utxo from your Wasabi Wallet and it was coinjoined).

    ',11);function R(D,G){const i=r("router-link"),n=r("RouteLink"),s=r("ExternalLinkIcon");return d(),h("div",null,[w,t("nav",p,[t("ul",null,[t("li",null,[a(i,{to:"#using-hardware-wallet-step-by-step"},{default:o(()=>[e("Using hardware wallet step-by-step")]),_:1})]),t("li",null,[a(i,{to:"#what-is-cold-storage"},{default:o(()=>[e("What is Cold Storage")]),_:1})]),t("li",null,[a(i,{to:"#hardware-wallet-with-wasabi"},{default:o(()=>[e("Hardware Wallet with Wasabi")]),_:1}),t("ul",null,[t("li",null,[a(i,{to:"#connecting-via-usb"},{default:o(()=>[e("Connecting via USB")]),_:1})]),t("li",null,[a(i,{to:"#connecting-coldcard-via-sd-card"},{default:o(()=>[e("Connecting Coldcard via SD card")]),_:1})])])]),t("li",null,[a(i,{to:"#cold-wasabi-protocol"},{default:o(()=>[e("Cold-Wasabi protocol")]),_:1})]),t("li",null,[a(i,{to:"#gui-tutorial"},{default:o(()=>[e("GUI tutorial")]),_:1}),t("ul",null,[t("li",null,[a(i,{to:"#coinjoin-on-the-hot-wasabi"},{default:o(()=>[e("Coinjoin on the hot Wasabi")]),_:1})]),t("li",null,[a(i,{to:"#set-up-your-cold-wasabi"},{default:o(()=>[e("Set up your cold-Wasabi")]),_:1})]),t("li",null,[a(i,{to:"#send-bitcoins-from-hot-to-cold-wasabi"},{default:o(()=>[e("Send bitcoins from hot to cold Wasabi")]),_:1})]),t("li",null,[a(i,{to:"#send-bitcoins-from-cold-wasabi"},{default:o(()=>[e("Send bitcoins from cold Wasabi")]),_:1})])])])])]),b,t("ol",null,[g,t("li",null,[e("Now you can "),a(n,{to:"/using-wasabi/Receive.html"},{default:o(()=>[e("receive")]),_:1}),e(" bitcoin to addresses controlled by the hardware wallet.")]),t("li",null,[e("You can "),a(n,{to:"/using-wasabi/Send.html"},{default:o(()=>[e("spend")]),_:1}),e(" these coins in the "),m,e(" dialog, though the hardware wallet must be connected via USB to sign the transaction. Alternatively, you can "),a(n,{to:"/using-wasabi/ColdWasabi.html#connecting-coldcard-via-sd-card"},{default:o(()=>[e("build a PSBT")]),_:1}),e(", export this via SD card to your Coldcard wallet for signing, then import the final transaction to Wasabi for broadcasting.")])]),t("div",f,[v,t("p",null,[e("Unfortunately, as of now, you cannot "),a(n,{to:"/using-wasabi/CoinJoin.html"},{default:o(()=>[e("coinjoin")]),_:1}),e(" with just the private keys on your hardware wallet. The keys need to be on the internet-connected computer to be able to coinjoin.")])]),y,t("p",null,[e("You can use Wasabi Wallet with almost any hardware wallet out there because Wasabi utilizes "),t("a",k,[e("Bitcoin Core Hardware Wallet Interface [HWI]"),a(s)]),e(". The setup is thoroughly tested for "),t("a",W,[e("Trezor model T"),a(s)]),e(", "),t("a",_,[e("Ledger Nano S, Nano S Plus and Nano X"),a(s)]),e(", and "),t("a",S,[e("Coldcard"),a(s)]),e(".")]),C,t("p",null,[e("After the first time you loaded a new device, the public keys will be stored locally on the computer, and you can use Wasabi to "),a(n,{to:"/using-wasabi/Receive.html"},{default:o(()=>[e("receive bitcoin")]),_:1}),e(" to the hardware wallet without having it connected.")]),x,T,t("p",null,[e("Only when you want to "),a(n,{to:"/using-wasabi/Send.html"},{default:o(()=>[e("send bitcoin")]),_:1}),e(" you need to connect the device over USB again.")]),B,t("p",null,[e("You can use Wasabi Wallet together with Coldcard without ever connecting it via USB, thus further reducing possible attack vectors. For more details see the "),t("a",j,[e("Coldcard documentation"),a(s)]),e(".")]),I,t("p",null,[e("After the skeleton wallet is imported, you can open the wallet from the wallet list at the "),P,e(", without having to power on the Coldcard. Generate a "),a(n,{to:"/using-wasabi/Receive.html"},{default:o(()=>[e("receive address")]),_:1}),e(" as usual. The private key corresponding to this address is on the hardware wallet.")]),U,t("ol",null,[t("li",null,[a(n,{to:"/using-wasabi/WalletGeneration.html"},{default:o(()=>[e("Generate a new hot-Wasabi Wallet")]),_:1}),e(".")]),t("li",null,[e("Open the "),a(n,{to:"/using-wasabi/Receive.html"},{default:o(()=>[e("Receive")]),_:1}),e(" dialog to get a new address.")]),A,t("li",null,[e("Start the automatic "),a(n,{to:"/using-wasabi/CoinJoin.html"},{default:o(()=>[e("coinjoin")]),_:1}),e(" process and wait for the coinjoin to be done (i.e. privacy progress 100%).")])]),N])}const E=c(u,[["render",R],["__file","ColdWasabi.html.vue"]]),Y=JSON.parse('{"path":"/using-wasabi/ColdWasabi.html","title":"Hardware Wallet","lang":"en-US","frontmatter":{"title":"Hardware Wallet","description":"A step by step guide on how to CoinJoin and send bitcoin to a hardware wallet for cold storage using Wasabi Wallet only. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Using hardware wallet step-by-step","slug":"using-hardware-wallet-step-by-step","link":"#using-hardware-wallet-step-by-step","children":[]},{"level":2,"title":"What is Cold Storage","slug":"what-is-cold-storage","link":"#what-is-cold-storage","children":[]},{"level":2,"title":"Hardware Wallet with Wasabi","slug":"hardware-wallet-with-wasabi","link":"#hardware-wallet-with-wasabi","children":[{"level":3,"title":"Connecting via USB","slug":"connecting-via-usb","link":"#connecting-via-usb","children":[]},{"level":3,"title":"Connecting Coldcard via SD card","slug":"connecting-coldcard-via-sd-card","link":"#connecting-coldcard-via-sd-card","children":[]}]},{"level":2,"title":"Cold-Wasabi protocol","slug":"cold-wasabi-protocol","link":"#cold-wasabi-protocol","children":[]},{"level":2,"title":"GUI tutorial","slug":"gui-tutorial","link":"#gui-tutorial","children":[{"level":3,"title":"Coinjoin on the hot Wasabi","slug":"coinjoin-on-the-hot-wasabi","link":"#coinjoin-on-the-hot-wasabi","children":[]},{"level":3,"title":"Set up your cold-Wasabi","slug":"set-up-your-cold-wasabi","link":"#set-up-your-cold-wasabi","children":[]},{"level":3,"title":"Send bitcoins from hot to cold Wasabi","slug":"send-bitcoins-from-hot-to-cold-wasabi","link":"#send-bitcoins-from-hot-to-cold-wasabi","children":[]},{"level":3,"title":"Send bitcoins from cold Wasabi","slug":"send-bitcoins-from-cold-wasabi","link":"#send-bitcoins-from-cold-wasabi","children":[]}]}],"git":{"updatedTime":1689150567000},"filePathRelative":"using-wasabi/ColdWasabi.md"}');export{E as comp,Y as data}; +import{_ as c,r,o as d,c as h,a as t,d as a,w as o,b as e,e as l}from"./app-BgbPjqpx.js";const u={},w=t("h1",{id:"cold-wasabi-hardware-wallet-mode",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#cold-wasabi-hardware-wallet-mode"},[t("span",null,"Cold-Wasabi Hardware Wallet Mode")])],-1),p={class:"table-of-contents"},b=t("h2",{id:"using-hardware-wallet-step-by-step",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#using-hardware-wallet-step-by-step"},[t("span",null,"Using hardware wallet step-by-step")])],-1),g=l("
  • Start your Wasabi Wallet and go to Add Wallet.
  • Click on Connect to hardware wallet and then connect the hardware wallet via cable. Alternatively, you can import a Coldcard skeleton file via SD card by using Import Wallet at the Add Wallet dialog.
  • Confirm that the detected hardware wallet is correct.
  • Click Open, and wait for the wallet to load.
  • ",4),m=t("code",null,"Send",-1),f={class:"custom-container warning"},v=t("p",{class:"custom-container-title"},"No coinjoin",-1),y=l('

    What is Cold Storage

    Cold storage refers to generating and storing private keys completely offline. This is an often-used security precaution, especially dealing with large amounts of bitcoin. Because the private keys are not on a computer that is connected to the internet, many remote attack vectors are nullified.

    Methods of cold storage include keeping private keys on a:

    • USB drive or other data storage medium
    • Paper wallet
    • Bearer item such as a physical bitcoin
    • Hardware wallet

    Use a hardware wallet for cold storage

    There are multiple ways to exercise cold storage, however it is highly reccommended to use a hardware wallet. This is by far the best and most secure way of using bitcoin for almost all users.

    Hardware Wallet with Wasabi

    ',6),k={href:"https://github.com/bitcoin-core/hwi",target:"_blank",rel:"noopener noreferrer"},W={href:"https://trezor.io",target:"_blank",rel:"noopener noreferrer"},_={href:"https://ledger.com",target:"_blank",rel:"noopener noreferrer"},S={href:"https://coldcard.com",target:"_blank",rel:"noopener noreferrer"},C=l('

    Connecting via USB

    Import the wallet

    1. Go to Add wallet.
    2. Click on Connect to hardware wallet.
    3. Give the wallet a name.
    4. Connect the hardware wallet to the PC and enter the pin on the hardware wallet to unlock it.
    5. Confirm that the correct hardware wallet is detected.
    6. Open the wallet.

    This wallet can be used as a watch-only wallet when the hardware wallet device is not connected.

    Wasabi remembers the wallet's information like xpub, wallet fingerprint and addresses etc. But it never knows the private keys, which are on the hardware wallet. So, you can see the balance and all it's transactions in Wasabi and you can generate addresses, but you cannot send without the hardware wallet being connected. Because you need to sign (confirm) the outgoing transactions on the hardware wallet.

    Receiving bitcoin

    ',5),x=t("div",{class:"custom-container tip"},[t("p",{class:"custom-container-title"},"Verify the receive address on the hardware wallet for extra security"),t("p",null,[e("It's always a good practice to verify that the receive address on Wasabi corresponds to the one on the hardware wallet, before receiving (large amounts of) bitcoin. This could prevent malicious firmware which replaces a receive address with a fake one. You can do this by clicking on "),t("code",null,"Show on the hardware wallet"),e(" at a receive address. The address will now be displayed on the hardware wallet, check that the addresses correspond and then confirm this on the hardware wallet.")])],-1),T=t("h4",{id:"sending-bitcoin",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#sending-bitcoin"},[t("span",null,"Sending bitcoin")])],-1),B=l('
    1. Click the Send button.
    2. Enter the amount and destination address.
    3. Enter the label of whom you are sending to.
    4. At the Preview Transaction screen, check that everything is correct.
    5. Click Send Now.
    6. Connect the hardware wallet & unlock it.
    7. Check on the hardware wallet that everything is correct.
    8. Confirm on the hardware wallet.
    9. The transaction is sent!

    The private keys are not on the computer, thus the transaction is signed on the hardware wallet after you confirm with a physical button click. The final transaction is automatically broadcast over Tor with Wasabi Wallet.

    Connecting Coldcard via SD card

    ',3),j={href:"https://coldcard.com/docs/microsd",target:"_blank",rel:"noopener noreferrer"},I=l('

    Import the skeleton wallet

    Power your Coldcard on a power bank or electricity socket, then unlock it with your pin. Put in a MicroSD card and go to Advanced > MicroSD Card > Export Wallet > Wasabi Wallet. This will write the public keys, wallet fingerprint, derivation path and other metadata to a skeleton file new-wallet.json.

    Protect your public keys!

    This file does not include your private keys, so an attacker cannot use it to spend your bitcoin. However, he can use it to derive a full transaction history, thus it is a potential privacy leak.

    Now insert the SD card to your computer, and open Wasabi Wallet. Go to the Add Wallet dialog, and click Import a wallet, browse to the SD card and select the new-wallet.json file. Wasabi will automatically import and modify this skeleton file and store it in your Wallets and WalletBackups folders.

    Receiving bitcoin

    ',5),P=t("code",null,"NavBar",-1),U=l('

    Sending bitcoin

    Sending bitcoin airgapped works as follows:

    1. Enable PSBT workflow in the Wallet Settings
    2. Click the Send button.
    3. Enter the amount and destination address.
    4. Enter the label of whom you are sending to.
    5. At the Preview Transaction screen, check that everything is correct.
    6. Click Save PSBT file, and save the file on the MicroSD card.
    7. Remove the MicroSD card from the computer and put it into your Coldcard.
    8. On the Coldcard, click Ready to Sign.
    9. Verify the transaction details shown on the Coldcard, and approve to sign the transaction.
    10. Remove the MicroSD card from Coldcard and insert it into the computer.
    11. In Wasabi, click on Broadcaster (in the search bar).
    12. Select Import Transaction.
    13. Select the final signed transaction, which looks like this xxx-final.txn.
    14. Broadcast the transaction.

    Enable PSBT workflow in the settings

    You need to have PSBT workflow enabled in the wallet settings in order to have Save PSBT file show up at the Preview Transaction screen. After it is enabled, a Broadcast button will appear next to the Send button for an easier workflow.

    Cold-Wasabi protocol

    This is how you can safely eat cold Wasabi, or store your coins on a hardware wallet after coinjoining with Wasabi Wallet. Because you cannot do coinjoin with the private keys on the hardware wallet, you will need to generate and load two different wallets in Wasabi. A 'hot' (coinjoin) and a 'cold' (storage) wallet will both be running in parallel, label them accordingly so you don't mix them up.

    GUI tutorial

    Coinjoin on the hot Wasabi

    First

    You should make your existing coins private. It is useful to generate a complete new hot wallet for this, so as to keep the coinjoin transaction history separate from other wallets.

    ',9),A=t("li",null,"Send bitcoin into this Hot-Wasabi Wallet.",-1),N=l('

    Set up your cold-Wasabi

    Second

    In order to separate these new private coins, you should generate a fresh wallet on your hardware device.

    1. Generate a new set of keys on your hardware wallet and make a backup.
    2. Load your hardware wallet device to Wasabi, either via USB or SD card.
    3. Label and generate a receive address for the hardware wallet. For the first setup, you need to connect the hardware wallet to the computer that runs Wasabi, afterwards, you can generate receive addresses without the device being connected.
    4. Copy the receiving address from the cold-Wasabi.

    Send bitcoins from hot to cold Wasabi

    Third

    When your coins are private, it is a good practice to send them out in multiple batches in order to not consolidate all your coins. Wait some time in-between sending them, so that timing analysis becomes more difficult.

    1. Go to the hot-Wasabi Send dialog and enter the amount.
    2. Paste the cold-Wasabi address.

    Send bitcoins from cold Wasabi

    Finally

    You can at any time spend the bitcoin from the cold-Wasabi.

    1. Connect your hardware wallet to the computer.
    2. Load the cold Wasabi wallet.
    3. Go to the Send dialog, enter the amount and the destination address, then sign the transaction with the hardware wallet.

    Success!

    おめでとうございます!

    You are now eating Cold Wasabi!

    WARNING

    The anonymity score is tied to the wallet that you used to coinjoin, if you send a mixed coin to another Wasabi Wallet (in this case your hardware wallet), it will have an anonymity score of 1 (and will be marked as non-private) because this wallet doesn't know that the coin was coinjoined.

    You should use a meaningful label when you generate a receive address in your hardware wallet, e.g. "Myself coinjoin private" (something that reminds you that you got this utxo from your Wasabi Wallet and it was coinjoined).

    ',11);function R(D,G){const i=r("router-link"),n=r("RouteLink"),s=r("ExternalLinkIcon");return d(),h("div",null,[w,t("nav",p,[t("ul",null,[t("li",null,[a(i,{to:"#using-hardware-wallet-step-by-step"},{default:o(()=>[e("Using hardware wallet step-by-step")]),_:1})]),t("li",null,[a(i,{to:"#what-is-cold-storage"},{default:o(()=>[e("What is Cold Storage")]),_:1})]),t("li",null,[a(i,{to:"#hardware-wallet-with-wasabi"},{default:o(()=>[e("Hardware Wallet with Wasabi")]),_:1}),t("ul",null,[t("li",null,[a(i,{to:"#connecting-via-usb"},{default:o(()=>[e("Connecting via USB")]),_:1})]),t("li",null,[a(i,{to:"#connecting-coldcard-via-sd-card"},{default:o(()=>[e("Connecting Coldcard via SD card")]),_:1})])])]),t("li",null,[a(i,{to:"#cold-wasabi-protocol"},{default:o(()=>[e("Cold-Wasabi protocol")]),_:1})]),t("li",null,[a(i,{to:"#gui-tutorial"},{default:o(()=>[e("GUI tutorial")]),_:1}),t("ul",null,[t("li",null,[a(i,{to:"#coinjoin-on-the-hot-wasabi"},{default:o(()=>[e("Coinjoin on the hot Wasabi")]),_:1})]),t("li",null,[a(i,{to:"#set-up-your-cold-wasabi"},{default:o(()=>[e("Set up your cold-Wasabi")]),_:1})]),t("li",null,[a(i,{to:"#send-bitcoins-from-hot-to-cold-wasabi"},{default:o(()=>[e("Send bitcoins from hot to cold Wasabi")]),_:1})]),t("li",null,[a(i,{to:"#send-bitcoins-from-cold-wasabi"},{default:o(()=>[e("Send bitcoins from cold Wasabi")]),_:1})])])])])]),b,t("ol",null,[g,t("li",null,[e("Now you can "),a(n,{to:"/using-wasabi/Receive.html"},{default:o(()=>[e("receive")]),_:1}),e(" bitcoin to addresses controlled by the hardware wallet.")]),t("li",null,[e("You can "),a(n,{to:"/using-wasabi/Send.html"},{default:o(()=>[e("spend")]),_:1}),e(" these coins in the "),m,e(" dialog, though the hardware wallet must be connected via USB to sign the transaction. Alternatively, you can "),a(n,{to:"/using-wasabi/ColdWasabi.html#connecting-coldcard-via-sd-card"},{default:o(()=>[e("build a PSBT")]),_:1}),e(", export this via SD card to your Coldcard wallet for signing, then import the final transaction to Wasabi for broadcasting.")])]),t("div",f,[v,t("p",null,[e("Unfortunately, as of now, you cannot "),a(n,{to:"/using-wasabi/CoinJoin.html"},{default:o(()=>[e("coinjoin")]),_:1}),e(" with just the private keys on your hardware wallet. The keys need to be on the internet-connected computer to be able to coinjoin.")])]),y,t("p",null,[e("You can use Wasabi Wallet with almost any hardware wallet out there because Wasabi utilizes "),t("a",k,[e("Bitcoin Core Hardware Wallet Interface [HWI]"),a(s)]),e(". The setup is thoroughly tested for "),t("a",W,[e("Trezor model T"),a(s)]),e(", "),t("a",_,[e("Ledger Nano S, Nano S Plus and Nano X"),a(s)]),e(", and "),t("a",S,[e("Coldcard"),a(s)]),e(".")]),C,t("p",null,[e("After the first time you loaded a new device, the public keys will be stored locally on the computer, and you can use Wasabi to "),a(n,{to:"/using-wasabi/Receive.html"},{default:o(()=>[e("receive bitcoin")]),_:1}),e(" to the hardware wallet without having it connected.")]),x,T,t("p",null,[e("Only when you want to "),a(n,{to:"/using-wasabi/Send.html"},{default:o(()=>[e("send bitcoin")]),_:1}),e(" you need to connect the device over USB again.")]),B,t("p",null,[e("You can use Wasabi Wallet together with Coldcard without ever connecting it via USB, thus further reducing possible attack vectors. For more details see the "),t("a",j,[e("Coldcard documentation"),a(s)]),e(".")]),I,t("p",null,[e("After the skeleton wallet is imported, you can open the wallet from the wallet list at the "),P,e(", without having to power on the Coldcard. Generate a "),a(n,{to:"/using-wasabi/Receive.html"},{default:o(()=>[e("receive address")]),_:1}),e(" as usual. The private key corresponding to this address is on the hardware wallet.")]),U,t("ol",null,[t("li",null,[a(n,{to:"/using-wasabi/WalletGeneration.html"},{default:o(()=>[e("Generate a new hot-Wasabi Wallet")]),_:1}),e(".")]),t("li",null,[e("Open the "),a(n,{to:"/using-wasabi/Receive.html"},{default:o(()=>[e("Receive")]),_:1}),e(" dialog to get a new address.")]),A,t("li",null,[e("Start the automatic "),a(n,{to:"/using-wasabi/CoinJoin.html"},{default:o(()=>[e("coinjoin")]),_:1}),e(" process and wait for the coinjoin to be done (i.e. privacy progress 100%).")])]),N])}const E=c(u,[["render",R],["__file","ColdWasabi.html.vue"]]),Y=JSON.parse('{"path":"/using-wasabi/ColdWasabi.html","title":"Hardware Wallet","lang":"en-US","frontmatter":{"title":"Hardware Wallet","description":"A step by step guide on how to CoinJoin and send bitcoin to a hardware wallet for cold storage using Wasabi Wallet only. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Using hardware wallet step-by-step","slug":"using-hardware-wallet-step-by-step","link":"#using-hardware-wallet-step-by-step","children":[]},{"level":2,"title":"What is Cold Storage","slug":"what-is-cold-storage","link":"#what-is-cold-storage","children":[]},{"level":2,"title":"Hardware Wallet with Wasabi","slug":"hardware-wallet-with-wasabi","link":"#hardware-wallet-with-wasabi","children":[{"level":3,"title":"Connecting via USB","slug":"connecting-via-usb","link":"#connecting-via-usb","children":[]},{"level":3,"title":"Connecting Coldcard via SD card","slug":"connecting-coldcard-via-sd-card","link":"#connecting-coldcard-via-sd-card","children":[]}]},{"level":2,"title":"Cold-Wasabi protocol","slug":"cold-wasabi-protocol","link":"#cold-wasabi-protocol","children":[]},{"level":2,"title":"GUI tutorial","slug":"gui-tutorial","link":"#gui-tutorial","children":[{"level":3,"title":"Coinjoin on the hot Wasabi","slug":"coinjoin-on-the-hot-wasabi","link":"#coinjoin-on-the-hot-wasabi","children":[]},{"level":3,"title":"Set up your cold-Wasabi","slug":"set-up-your-cold-wasabi","link":"#set-up-your-cold-wasabi","children":[]},{"level":3,"title":"Send bitcoins from hot to cold Wasabi","slug":"send-bitcoins-from-hot-to-cold-wasabi","link":"#send-bitcoins-from-hot-to-cold-wasabi","children":[]},{"level":3,"title":"Send bitcoins from cold Wasabi","slug":"send-bitcoins-from-cold-wasabi","link":"#send-bitcoins-from-cold-wasabi","children":[]}]}],"git":{"updatedTime":1689150567000},"filePathRelative":"using-wasabi/ColdWasabi.md"}');export{E as comp,Y as data}; diff --git a/assets/ContributionChecklist.html-DDqLw8Jr.js b/assets/ContributionChecklist.html-OBd7F2pO.js similarity index 99% rename from assets/ContributionChecklist.html-DDqLw8Jr.js rename to assets/ContributionChecklist.html-OBd7F2pO.js index 4be5816717..57acaf17b7 100644 --- a/assets/ContributionChecklist.html-DDqLw8Jr.js +++ b/assets/ContributionChecklist.html-OBd7F2pO.js @@ -1 +1 @@ -import{_ as l,r,o as c,c as u,a as e,d as o,w as i,b as t,e as h}from"./app-BPKesm5h.js";const d={},b=e("h1",{id:"contribution-checklist",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contribution-checklist"},[e("span",null,"Contribution Checklist")])],-1),w=e("p",null,"So you're interested in contributing to Wasabi - welcome!",-1),p=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"Embrace the open-source crypto-anarchy!"),e("p",null,"No one is here to tell you what to do, and it is not required to work on an existing issue to contribute to Wasabi. Contributors are free to work on their own forked versions on whatever they want, however they wish and without any permission from anyone. With that being said, in order to maximize the usefulness/impact of your work, it's a good idea to consult with other Wasabikas via Slack, GitHub, or other communication channels before setting out on any serious contribution effort.")],-1),g=e("p",null,"This checklist will get you plugged in and productive as quickly as possible.",-1),k={class:"table-of-contents"},m=h('

    Who is a contributor?

    A contributor is any individual who works to improve and add value to Wasabi and its users.

    You can become a Wasabika!

    Wasabi Wallet is free and open-source software, but contributing is not just about writing code. This means anything from fixing typos in documentation, answering questions of fellow Wasabikas, creating videos, podcasts and memes, implementing new Wasabi features and everything in-between. All such contributions are very welcomed and greatly appreciated.

    Say hello and get started

    ',4),f={href:"https://join.slack.com/t/tumblebit/shared_invite/enQtNjQ1MTQ2NzQ1ODI0LWIzOTg5YTM3YmNkOTg1NjZmZTQ3NmM1OTAzYmQyYzk1M2M0MTdlZDk2OTQwNzFiNTg1ZmExNzM0NjgzY2M0Yzg",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/zkSnacks/WalletWasabi",target:"_blank",rel:"noopener noreferrer"},y=e("li",null,"Introduce yourself, say a bit about your skills and interests. This will help others point you in the right direction.",-1),v=e("li",null,"Explore the communication channels and find out what the peers are tinkering on, learn about the project and who is contributing in what way. This will help you to find the interesting challenges you can work on.",-1),W=e("li",null,"Wasabi Research Club is a weekly online call, focused mainly on Bitcoin privacy. Everyone is welcome to join the discussions. However, being familiar with the topic (if there is any) is recommended.",-1),C={href:"https://www.youtube.com/c/wasabiwallet",target:"_blank",rel:"noopener noreferrer"},T={href:"https://github.com/zkSNACKs/WasabiResearchClub/",target:"_blank",rel:"noopener noreferrer"},z=e("h2",{id:"learn-how-wasabikas-work",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#learn-how-wasabikas-work"},[e("span",null,"Learn how Wasabikas work")])],-1),N={href:"https://eprint.iacr.org/2021/206",target:"_blank",rel:"noopener noreferrer"},x={href:"https://rfc.zeromq.org/spec/42/",target:"_blank",rel:"noopener noreferrer"},M=e("p",null,"It’s a simple set of collaboration rules based on GitHub’s fork and pull request model, and a foundational part of how we work together.",-1),S=e("h2",{id:"what-to-work-on",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-to-work-on"},[e("span",null,"What to work on")])],-1),Y=e("p",null,"Education and development are vitally important aspects of Bitcoin privacy and Wasabi Wallet specifically.",-1),A={href:"https://www.freehaven.net/anonbib/cache/usability:weis2006.pdf",target:"_blank",rel:"noopener noreferrer"},Q={href:"https://en.wikipedia.org/wiki/Network_effect",target:"_blank",rel:"noopener noreferrer"},E=e("h3",{id:"education-contributor",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#education-contributor"},[e("span",null,"Education Contributor")])],-1),j=e("ol",null,[e("li",null,[e("strong",null,"Videos, podcasts, memes and articles"),t(" are great ways of sharing information to your peers. You can create wallet tutorials, record insightful discussions, write articles or make memes about Wasabi and privacy.")]),e("li",null,[e("strong",null,"Organizing events and doing presentations"),t(" about Wasabi Wallet and Bitcoin privacy. Connecting like-minded individuals, who want to take control of their own financial privacy and teaching them about the awesome tools that are available, can be life changing.")]),e("li",null,[e("strong",null,"Helping and teaching new users"),t(", once you are familiar with the software, is something that can't be underestimated. You can do this in any social media like Twitter, Telegram, Reddit etc or in your own neighborhood.")])],-1),O={class:"custom-container tip"},q=e("p",{class:"custom-container-title"},"[zkSNACKs Ltd.](https://zksnacks.com/) is known for compensating educators who consistently help out new users or create good content.",-1),I={href:"https://blog.wasabiwallet.io/coming-soon-contribution-games/",target:"_blank",rel:"noopener noreferrer"},R={href:"https://join.slack.com/t/tumblebit/shared_invite/enQtNjQ1MTQ2NzQ1ODI0LWIzOTg5YTM3YmNkOTg1NjZmZTQ3NmM1OTAzYmQyYzk1M2M0MTdlZDk2OTQwNzFiNTg1ZmExNzM0NjgzY2M0Yzg",target:"_blank",rel:"noopener noreferrer"},B=e("h3",{id:"github-contributor",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#github-contributor"},[e("span",null,"GitHub Contributor")])],-1),H=e("strong",null,"Find a problem somewhere in Wasabi-land",-1),L={href:"https://github.com/zksnacks/walletwasabi/issues",target:"_blank",rel:"noopener noreferrer"},G=e("strong",null,"Do work to fix that problem.",-1),Z={href:"https://github.com/zkSNACKs/WalletWasabi/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/zkSNACKs/WasabiDoc/pulls",target:"_blank",rel:"noopener noreferrer"},F={href:"https://github.com/zksnacks/walletwasabi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc",target:"_blank",rel:"noopener noreferrer"},V=e("li",null,[e("strong",null,"Request that others review your work."),t(" The best way to do this is by writing good commit comments and pull request/issue descriptions that clearly explain the problem your work is intended to solve, why it’s important, and why you fixed it the way you did. Make it as easy as possible for others to review your work. Make it a "),e("em",null,"pleasure"),t(" for others to review your work.")],-1),K=e("li",null,[e("strong",null,"Incorporate review feedback"),t(" you get until your fix gets merged or is otherwise accepted.")],-1),J=e("li",null,"Repeat steps 1–4.",-1),U=e("p",null,[t("Remember: "),e("em",null,"every contributor"),t(" is free to work on what they want, including maintainers who may or may not want to review and merge your pull request if they don't have any prior context for it, or reason to believe it's worth spending their time on.")],-1),P=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"Reviews are for everybody!"),e("p",null,"If you want to be really popular around here, don’t just submit your own work, but also spend time reviewing the work of others.")],-1);function X($,ee){const a=r("router-link"),n=r("ExternalLinkIcon"),s=r("RouteLink");return c(),u("div",null,[b,w,p,g,e("nav",k,[e("ul",null,[e("li",null,[o(a,{to:"#who-is-a-contributor"},{default:i(()=>[t("Who is a contributor?")]),_:1})]),e("li",null,[o(a,{to:"#say-hello-and-get-started"},{default:i(()=>[t("Say hello and get started")]),_:1})]),e("li",null,[o(a,{to:"#learn-how-wasabikas-work"},{default:i(()=>[t("Learn how Wasabikas work")]),_:1})]),e("li",null,[o(a,{to:"#what-to-work-on"},{default:i(()=>[t("What to work on")]),_:1}),e("ul",null,[e("li",null,[o(a,{to:"#education-contributor"},{default:i(()=>[t("Education Contributor")]),_:1})]),e("li",null,[o(a,{to:"#github-contributor"},{default:i(()=>[t("GitHub Contributor")]),_:1})])])])])]),m,e("ul",null,[e("li",null,[t("Join our "),e("a",f,[t("Slack"),o(n)]),t(" and especially check out our "),e("a",_,[t("GitHub repository"),o(n)]),t(".")]),y,v,W]),e("p",null,[t("Discussions might be recorded and published on the Wasabi Wallet "),e("a",C,[t("YouTube channel"),o(n)]),t(".")]),e("p",null,[t("You can find the schedule, call link, past recordings and more at the "),e("a",T,[t("Wasabi Research Club repository"),o(n)]),t(".")]),z,e("ul",null,[e("li",null,[t("Educate yourself about the software by reading through "),o(s,{to:"/using-wasabi/"},{default:i(()=>[t("Using Wasabi")]),_:1}),t(".")]),e("li",null,[t("To understand how Wasabi CoinJoins work, read "),e("a",N,[t("WabiSabi Framework"),o(n)]),t(".")]),e("li",null,[t("Familiarize yourself with "),e("a",x,[t("C4: The Collective Code Construction Contract"),o(n)]),t(".")])]),M,S,Y,e("p",null,[t("The more Wasabi users there are, the better their privacy, because "),e("a",A,[t("anonymity loves company"),o(n)]),t(".")]),e("p",null,[t("The better UX and privacy Wasabi provides, the more there will be users, because of "),e("a",Q,[t("network effect"),o(n)]),t(".")]),E,j,e("div",O,[q,e("p",null,[t("The company is actively sponsoring Bitcoin events and organizing "),e("a",I,[t("Contribution Games"),o(n)]),t(". In case you have been contributing already, feel free to let other Wasabikas know by sending us a link to your content in "),e("a",R,[t("Slack"),o(n)]),t(".")])]),B,e("ol",null,[e("li",null,[H,t(" that (a) needs fixing or improvement and (b) is a match for your skills and interests. Browse "),e("a",L,[t("open issues"),o(n)]),t(" and ask around about what other contributors think needs fixing. Because while you don’t need anybody’s permission and you can work on whatever you want, you’ll want to know up front whether anybody else is going to care about the work you do.")]),e("li",null,[G,t(" Submit your fix for review with a pull request (for "),e("a",Z,[t("code"),o(n)]),t(" and "),e("a",D,[t("documentation"),o(n)]),t(" changes) or with a GitHub "),e("a",F,[t("issue"),o(n)]),t(" (for everything else).")]),V,K,J]),U,P])}const oe=l(d,[["render",X],["__file","ContributionChecklist.html.vue"]]),ne=JSON.parse('{"path":"/building-wasabi/ContributionChecklist.html","title":"Contribution Checklist","lang":"en-US","frontmatter":{"title":"Contribution Checklist","description":"A collection of tips for new Wasabikas who are interested in supporting Wasabi Wallet. Here you find all the details to enable a swift start to your contribution. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Who is a contributor?","slug":"who-is-a-contributor","link":"#who-is-a-contributor","children":[]},{"level":2,"title":"Say hello and get started","slug":"say-hello-and-get-started","link":"#say-hello-and-get-started","children":[]},{"level":2,"title":"Learn how Wasabikas work","slug":"learn-how-wasabikas-work","link":"#learn-how-wasabikas-work","children":[]},{"level":2,"title":"What to work on","slug":"what-to-work-on","link":"#what-to-work-on","children":[{"level":3,"title":"Education Contributor","slug":"education-contributor","link":"#education-contributor","children":[]},{"level":3,"title":"GitHub Contributor","slug":"github-contributor","link":"#github-contributor","children":[]}]}],"git":{"updatedTime":1682263530000},"filePathRelative":"building-wasabi/ContributionChecklist.md"}');export{oe as comp,ne as data}; +import{_ as l,r,o as c,c as u,a as e,d as o,w as i,b as t,e as h}from"./app-BgbPjqpx.js";const d={},b=e("h1",{id:"contribution-checklist",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contribution-checklist"},[e("span",null,"Contribution Checklist")])],-1),w=e("p",null,"So you're interested in contributing to Wasabi - welcome!",-1),p=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"Embrace the open-source crypto-anarchy!"),e("p",null,"No one is here to tell you what to do, and it is not required to work on an existing issue to contribute to Wasabi. Contributors are free to work on their own forked versions on whatever they want, however they wish and without any permission from anyone. With that being said, in order to maximize the usefulness/impact of your work, it's a good idea to consult with other Wasabikas via Slack, GitHub, or other communication channels before setting out on any serious contribution effort.")],-1),g=e("p",null,"This checklist will get you plugged in and productive as quickly as possible.",-1),k={class:"table-of-contents"},m=h('

    Who is a contributor?

    A contributor is any individual who works to improve and add value to Wasabi and its users.

    You can become a Wasabika!

    Wasabi Wallet is free and open-source software, but contributing is not just about writing code. This means anything from fixing typos in documentation, answering questions of fellow Wasabikas, creating videos, podcasts and memes, implementing new Wasabi features and everything in-between. All such contributions are very welcomed and greatly appreciated.

    Say hello and get started

    ',4),f={href:"https://join.slack.com/t/tumblebit/shared_invite/enQtNjQ1MTQ2NzQ1ODI0LWIzOTg5YTM3YmNkOTg1NjZmZTQ3NmM1OTAzYmQyYzk1M2M0MTdlZDk2OTQwNzFiNTg1ZmExNzM0NjgzY2M0Yzg",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/zkSnacks/WalletWasabi",target:"_blank",rel:"noopener noreferrer"},y=e("li",null,"Introduce yourself, say a bit about your skills and interests. This will help others point you in the right direction.",-1),v=e("li",null,"Explore the communication channels and find out what the peers are tinkering on, learn about the project and who is contributing in what way. This will help you to find the interesting challenges you can work on.",-1),W=e("li",null,"Wasabi Research Club is a weekly online call, focused mainly on Bitcoin privacy. Everyone is welcome to join the discussions. However, being familiar with the topic (if there is any) is recommended.",-1),C={href:"https://www.youtube.com/c/wasabiwallet",target:"_blank",rel:"noopener noreferrer"},T={href:"https://github.com/zkSNACKs/WasabiResearchClub/",target:"_blank",rel:"noopener noreferrer"},z=e("h2",{id:"learn-how-wasabikas-work",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#learn-how-wasabikas-work"},[e("span",null,"Learn how Wasabikas work")])],-1),N={href:"https://eprint.iacr.org/2021/206",target:"_blank",rel:"noopener noreferrer"},x={href:"https://rfc.zeromq.org/spec/42/",target:"_blank",rel:"noopener noreferrer"},M=e("p",null,"It’s a simple set of collaboration rules based on GitHub’s fork and pull request model, and a foundational part of how we work together.",-1),S=e("h2",{id:"what-to-work-on",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-to-work-on"},[e("span",null,"What to work on")])],-1),Y=e("p",null,"Education and development are vitally important aspects of Bitcoin privacy and Wasabi Wallet specifically.",-1),A={href:"https://www.freehaven.net/anonbib/cache/usability:weis2006.pdf",target:"_blank",rel:"noopener noreferrer"},Q={href:"https://en.wikipedia.org/wiki/Network_effect",target:"_blank",rel:"noopener noreferrer"},E=e("h3",{id:"education-contributor",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#education-contributor"},[e("span",null,"Education Contributor")])],-1),j=e("ol",null,[e("li",null,[e("strong",null,"Videos, podcasts, memes and articles"),t(" are great ways of sharing information to your peers. You can create wallet tutorials, record insightful discussions, write articles or make memes about Wasabi and privacy.")]),e("li",null,[e("strong",null,"Organizing events and doing presentations"),t(" about Wasabi Wallet and Bitcoin privacy. Connecting like-minded individuals, who want to take control of their own financial privacy and teaching them about the awesome tools that are available, can be life changing.")]),e("li",null,[e("strong",null,"Helping and teaching new users"),t(", once you are familiar with the software, is something that can't be underestimated. You can do this in any social media like Twitter, Telegram, Reddit etc or in your own neighborhood.")])],-1),O={class:"custom-container tip"},q=e("p",{class:"custom-container-title"},"[zkSNACKs Ltd.](https://zksnacks.com/) is known for compensating educators who consistently help out new users or create good content.",-1),I={href:"https://blog.wasabiwallet.io/coming-soon-contribution-games/",target:"_blank",rel:"noopener noreferrer"},R={href:"https://join.slack.com/t/tumblebit/shared_invite/enQtNjQ1MTQ2NzQ1ODI0LWIzOTg5YTM3YmNkOTg1NjZmZTQ3NmM1OTAzYmQyYzk1M2M0MTdlZDk2OTQwNzFiNTg1ZmExNzM0NjgzY2M0Yzg",target:"_blank",rel:"noopener noreferrer"},B=e("h3",{id:"github-contributor",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#github-contributor"},[e("span",null,"GitHub Contributor")])],-1),H=e("strong",null,"Find a problem somewhere in Wasabi-land",-1),L={href:"https://github.com/zksnacks/walletwasabi/issues",target:"_blank",rel:"noopener noreferrer"},G=e("strong",null,"Do work to fix that problem.",-1),Z={href:"https://github.com/zkSNACKs/WalletWasabi/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/zkSNACKs/WasabiDoc/pulls",target:"_blank",rel:"noopener noreferrer"},F={href:"https://github.com/zksnacks/walletwasabi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc",target:"_blank",rel:"noopener noreferrer"},V=e("li",null,[e("strong",null,"Request that others review your work."),t(" The best way to do this is by writing good commit comments and pull request/issue descriptions that clearly explain the problem your work is intended to solve, why it’s important, and why you fixed it the way you did. Make it as easy as possible for others to review your work. Make it a "),e("em",null,"pleasure"),t(" for others to review your work.")],-1),K=e("li",null,[e("strong",null,"Incorporate review feedback"),t(" you get until your fix gets merged or is otherwise accepted.")],-1),J=e("li",null,"Repeat steps 1–4.",-1),U=e("p",null,[t("Remember: "),e("em",null,"every contributor"),t(" is free to work on what they want, including maintainers who may or may not want to review and merge your pull request if they don't have any prior context for it, or reason to believe it's worth spending their time on.")],-1),P=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"Reviews are for everybody!"),e("p",null,"If you want to be really popular around here, don’t just submit your own work, but also spend time reviewing the work of others.")],-1);function X($,ee){const a=r("router-link"),n=r("ExternalLinkIcon"),s=r("RouteLink");return c(),u("div",null,[b,w,p,g,e("nav",k,[e("ul",null,[e("li",null,[o(a,{to:"#who-is-a-contributor"},{default:i(()=>[t("Who is a contributor?")]),_:1})]),e("li",null,[o(a,{to:"#say-hello-and-get-started"},{default:i(()=>[t("Say hello and get started")]),_:1})]),e("li",null,[o(a,{to:"#learn-how-wasabikas-work"},{default:i(()=>[t("Learn how Wasabikas work")]),_:1})]),e("li",null,[o(a,{to:"#what-to-work-on"},{default:i(()=>[t("What to work on")]),_:1}),e("ul",null,[e("li",null,[o(a,{to:"#education-contributor"},{default:i(()=>[t("Education Contributor")]),_:1})]),e("li",null,[o(a,{to:"#github-contributor"},{default:i(()=>[t("GitHub Contributor")]),_:1})])])])])]),m,e("ul",null,[e("li",null,[t("Join our "),e("a",f,[t("Slack"),o(n)]),t(" and especially check out our "),e("a",_,[t("GitHub repository"),o(n)]),t(".")]),y,v,W]),e("p",null,[t("Discussions might be recorded and published on the Wasabi Wallet "),e("a",C,[t("YouTube channel"),o(n)]),t(".")]),e("p",null,[t("You can find the schedule, call link, past recordings and more at the "),e("a",T,[t("Wasabi Research Club repository"),o(n)]),t(".")]),z,e("ul",null,[e("li",null,[t("Educate yourself about the software by reading through "),o(s,{to:"/using-wasabi/"},{default:i(()=>[t("Using Wasabi")]),_:1}),t(".")]),e("li",null,[t("To understand how Wasabi CoinJoins work, read "),e("a",N,[t("WabiSabi Framework"),o(n)]),t(".")]),e("li",null,[t("Familiarize yourself with "),e("a",x,[t("C4: The Collective Code Construction Contract"),o(n)]),t(".")])]),M,S,Y,e("p",null,[t("The more Wasabi users there are, the better their privacy, because "),e("a",A,[t("anonymity loves company"),o(n)]),t(".")]),e("p",null,[t("The better UX and privacy Wasabi provides, the more there will be users, because of "),e("a",Q,[t("network effect"),o(n)]),t(".")]),E,j,e("div",O,[q,e("p",null,[t("The company is actively sponsoring Bitcoin events and organizing "),e("a",I,[t("Contribution Games"),o(n)]),t(". In case you have been contributing already, feel free to let other Wasabikas know by sending us a link to your content in "),e("a",R,[t("Slack"),o(n)]),t(".")])]),B,e("ol",null,[e("li",null,[H,t(" that (a) needs fixing or improvement and (b) is a match for your skills and interests. Browse "),e("a",L,[t("open issues"),o(n)]),t(" and ask around about what other contributors think needs fixing. Because while you don’t need anybody’s permission and you can work on whatever you want, you’ll want to know up front whether anybody else is going to care about the work you do.")]),e("li",null,[G,t(" Submit your fix for review with a pull request (for "),e("a",Z,[t("code"),o(n)]),t(" and "),e("a",D,[t("documentation"),o(n)]),t(" changes) or with a GitHub "),e("a",F,[t("issue"),o(n)]),t(" (for everything else).")]),V,K,J]),U,P])}const oe=l(d,[["render",X],["__file","ContributionChecklist.html.vue"]]),ne=JSON.parse('{"path":"/building-wasabi/ContributionChecklist.html","title":"Contribution Checklist","lang":"en-US","frontmatter":{"title":"Contribution Checklist","description":"A collection of tips for new Wasabikas who are interested in supporting Wasabi Wallet. Here you find all the details to enable a swift start to your contribution. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Who is a contributor?","slug":"who-is-a-contributor","link":"#who-is-a-contributor","children":[]},{"level":2,"title":"Say hello and get started","slug":"say-hello-and-get-started","link":"#say-hello-and-get-started","children":[]},{"level":2,"title":"Learn how Wasabikas work","slug":"learn-how-wasabikas-work","link":"#learn-how-wasabikas-work","children":[]},{"level":2,"title":"What to work on","slug":"what-to-work-on","link":"#what-to-work-on","children":[{"level":3,"title":"Education Contributor","slug":"education-contributor","link":"#education-contributor","children":[]},{"level":3,"title":"GitHub Contributor","slug":"github-contributor","link":"#github-contributor","children":[]}]}],"git":{"updatedTime":1682263530000},"filePathRelative":"building-wasabi/ContributionChecklist.md"}');export{oe as comp,ne as data}; diff --git a/assets/Daemon.html-Bt4YbORn.js b/assets/Daemon.html-B6QsLjUU.js similarity index 99% rename from assets/Daemon.html-Bt4YbORn.js rename to assets/Daemon.html-B6QsLjUU.js index 8d2a69e043..2e11c52115 100644 --- a/assets/Daemon.html-Bt4YbORn.js +++ b/assets/Daemon.html-B6QsLjUU.js @@ -1,4 +1,4 @@ -import{_ as r,r as i,o as d,c,a as e,d as n,w as s,b as a,e as p}from"./app-BPKesm5h.js";const u={},h=e("h1",{id:"headless-wasabi-daemon",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#headless-wasabi-daemon"},[e("span",null,"Headless Wasabi Daemon")])],-1),m={class:"table-of-contents"},b=e("h2",{id:"introduction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#introduction"},[e("span",null,"Introduction")])],-1),g={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.4",target:"_blank",rel:"noopener noreferrer"},v=e("p",null,"The desktop app (GUI) is built on top of the daemon. Meaning that command line arguments/variables can also be used to configure the desktop app.",-1),f=p(`

    How to run

    If the package is installed

    Depending on your operating system, open the command line and execute:

    Linux

    wassabeed
    +import{_ as r,r as i,o as d,c,a as e,d as n,w as s,b as a,e as p}from"./app-BgbPjqpx.js";const u={},h=e("h1",{id:"headless-wasabi-daemon",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#headless-wasabi-daemon"},[e("span",null,"Headless Wasabi Daemon")])],-1),m={class:"table-of-contents"},b=e("h2",{id:"introduction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#introduction"},[e("span",null,"Introduction")])],-1),g={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.4",target:"_blank",rel:"noopener noreferrer"},v=e("p",null,"The desktop app (GUI) is built on top of the daemon. Meaning that command line arguments/variables can also be used to configure the desktop app.",-1),f=p(`

    How to run

    If the package is installed

    Depending on your operating system, open the command line and execute:

    Linux

    wassabeed
     

    macOS

    cd /Applications/Wasabi\\ Wallet.app/Contents/MacOs
     ./wassabeed
     

    Windows

    cd C:\\Program Files\\WasabiWallet
    diff --git a/assets/DeterministicBuild.html-BP3CVCVk.js b/assets/DeterministicBuild.html-CoygJOSJ.js
    similarity index 94%
    rename from assets/DeterministicBuild.html-BP3CVCVk.js
    rename to assets/DeterministicBuild.html-CoygJOSJ.js
    index 1a27fba6f5..abdbc76c15 100644
    --- a/assets/DeterministicBuild.html-BP3CVCVk.js
    +++ b/assets/DeterministicBuild.html-CoygJOSJ.js
    @@ -1 +1 @@
    -import{_ as n,r as a,o as s,c as o,a as e,b as t,d as r}from"./app-BPKesm5h.js";const c={},d=e("h1",{id:"deterministic-build",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deterministic-build"},[e("span",null,"Deterministic Build")])],-1),l={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/WalletWasabi.Documentation/Guides/DeterministicBuildGuide.md",target:"_blank",rel:"noopener noreferrer"};function u(m,h){const i=a("ExternalLinkIcon");return s(),o("div",null,[d,e("p",null,[t("The guide for the deterministic builds can be found in the "),e("a",l,[t("WalletWasabi repository"),r(i)]),t(".")])])}const b=n(c,[["render",u],["__file","DeterministicBuild.html.vue"]]),_=JSON.parse('{"path":"/using-wasabi/DeterministicBuild.html","title":"Deterministic Build","lang":"en-US","frontmatter":{"title":"Deterministic Build","description":"A step by step guide on how to reproduce the deterministic builds of Wasabi. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[],"git":{"updatedTime":1592911410000},"filePathRelative":"using-wasabi/DeterministicBuild.md"}');export{b as comp,_ as data};
    +import{_ as n,r as a,o as s,c as o,a as e,b as t,d as r}from"./app-BgbPjqpx.js";const c={},d=e("h1",{id:"deterministic-build",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deterministic-build"},[e("span",null,"Deterministic Build")])],-1),l={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/WalletWasabi.Documentation/Guides/DeterministicBuildGuide.md",target:"_blank",rel:"noopener noreferrer"};function u(m,h){const i=a("ExternalLinkIcon");return s(),o("div",null,[d,e("p",null,[t("The guide for the deterministic builds can be found in the "),e("a",l,[t("WalletWasabi repository"),r(i)]),t(".")])])}const b=n(c,[["render",u],["__file","DeterministicBuild.html.vue"]]),_=JSON.parse('{"path":"/using-wasabi/DeterministicBuild.html","title":"Deterministic Build","lang":"en-US","frontmatter":{"title":"Deterministic Build","description":"A step by step guide on how to reproduce the deterministic builds of Wasabi. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[],"git":{"updatedTime":1592911410000},"filePathRelative":"using-wasabi/DeterministicBuild.md"}');export{b as comp,_ as data};
    diff --git a/assets/DiscreetMode.html-D9iPWlT5.js b/assets/DiscreetMode.html-BJL1ea8e.js
    similarity index 98%
    rename from assets/DiscreetMode.html-D9iPWlT5.js
    rename to assets/DiscreetMode.html-BJL1ea8e.js
    index c32a67837b..e5b65113f1 100644
    --- a/assets/DiscreetMode.html-D9iPWlT5.js
    +++ b/assets/DiscreetMode.html-BJL1ea8e.js
    @@ -1 +1 @@
    -import{_ as r}from"./DiscreetModeActivate-Cg4X--AC.js";import{_ as c,r as a,o as l,c as d,a as e,d as o,w as s,b as t,e as h}from"./app-BPKesm5h.js";const m="/WalletDiscreetModeActive.png",u="/DiscreetModeDeactivate.png",_={},f=e("h1",{id:"discreet-mode",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#discreet-mode"},[e("span",null,"Discreet Mode")])],-1),p=e("p",null,"Discreet Mode is a Wasabi Wallet feature that hides sensitive and critical information from physical observers and allows you to post screenshots without worrying about your privacy.",-1),v=e("p",null,[e("img",{src:m,alt:"Wasabi Wallet Discreet Mode",title:"Wasabi Wallet Discreet Mode"})],-1),b={class:"table-of-contents"},w=h('

    How to activate/deactivate Discreet Mode

    You can activate or deactivate by clicking the Discreet Mode icon in the bottom left corner of the main view.

    Enable Discreet Mode in Wasabi Wallet

    Disable Discreet Mode in Wasabi Wallet

    More information on Discreet Mode

    ',6),D=e("li",null,"In Discreet Mode the wallet is still usable, meaning that you can send and receive payments, as well as coinjoin.",-1),M=e("li",null,"Discreet Mode only masks the surface. This means that when you click to see more Details, some information (which wasn't visible at first) will be shown.",-1),g=e("li",null,"When hovering over the ### chars with the cursor, the content will be visible for a short amount of time.",-1),W={href:"https://github.com/zkSNACKs/WalletWasabi/issues/2234",target:"_blank",rel:"noopener noreferrer"};function k(y,x){const i=a("router-link"),n=a("ExternalLinkIcon");return l(),d("div",null,[f,p,v,e("nav",b,[e("ul",null,[e("li",null,[o(i,{to:"#how-to-activate-deactivate-discreet-mode"},{default:s(()=>[t("How to activate/deactivate Discreet Mode")]),_:1})]),e("li",null,[o(i,{to:"#more-information-on-discreet-mode"},{default:s(()=>[t("More information on Discreet Mode")]),_:1})])])]),w,e("ul",null,[D,M,g,e("li",null,[t("Some justification of design decisions can be seen "),e("a",W,[t("here"),o(n)]),t(".")])])])}const S=c(_,[["render",k],["__file","DiscreetMode.html.vue"]]),B=JSON.parse('{"path":"/using-wasabi/DiscreetMode.html","title":"Discreet Mode","lang":"en-US","frontmatter":{"title":"Discreet Mode","description":"A feature that hides sensitive and critical information from physical observers. Designed to allow the user to post screenshots without having to worry about leaking private details of their wallet. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"How to activate/deactivate Discreet Mode","slug":"how-to-activate-deactivate-discreet-mode","link":"#how-to-activate-deactivate-discreet-mode","children":[]},{"level":2,"title":"More information on Discreet Mode","slug":"more-information-on-discreet-mode","link":"#more-information-on-discreet-mode","children":[]}],"git":{"updatedTime":1674222335000},"filePathRelative":"using-wasabi/DiscreetMode.md"}');export{S as comp,B as data}; +import{_ as r}from"./DiscreetModeActivate-Cg4X--AC.js";import{_ as c,r as a,o as l,c as d,a as e,d as o,w as s,b as t,e as h}from"./app-BgbPjqpx.js";const m="/WalletDiscreetModeActive.png",u="/DiscreetModeDeactivate.png",_={},f=e("h1",{id:"discreet-mode",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#discreet-mode"},[e("span",null,"Discreet Mode")])],-1),p=e("p",null,"Discreet Mode is a Wasabi Wallet feature that hides sensitive and critical information from physical observers and allows you to post screenshots without worrying about your privacy.",-1),v=e("p",null,[e("img",{src:m,alt:"Wasabi Wallet Discreet Mode",title:"Wasabi Wallet Discreet Mode"})],-1),b={class:"table-of-contents"},w=h('

    How to activate/deactivate Discreet Mode

    You can activate or deactivate by clicking the Discreet Mode icon in the bottom left corner of the main view.

    Enable Discreet Mode in Wasabi Wallet

    Disable Discreet Mode in Wasabi Wallet

    More information on Discreet Mode

    ',6),D=e("li",null,"In Discreet Mode the wallet is still usable, meaning that you can send and receive payments, as well as coinjoin.",-1),M=e("li",null,"Discreet Mode only masks the surface. This means that when you click to see more Details, some information (which wasn't visible at first) will be shown.",-1),g=e("li",null,"When hovering over the ### chars with the cursor, the content will be visible for a short amount of time.",-1),W={href:"https://github.com/zkSNACKs/WalletWasabi/issues/2234",target:"_blank",rel:"noopener noreferrer"};function k(y,x){const i=a("router-link"),n=a("ExternalLinkIcon");return l(),d("div",null,[f,p,v,e("nav",b,[e("ul",null,[e("li",null,[o(i,{to:"#how-to-activate-deactivate-discreet-mode"},{default:s(()=>[t("How to activate/deactivate Discreet Mode")]),_:1})]),e("li",null,[o(i,{to:"#more-information-on-discreet-mode"},{default:s(()=>[t("More information on Discreet Mode")]),_:1})])])]),w,e("ul",null,[D,M,g,e("li",null,[t("Some justification of design decisions can be seen "),e("a",W,[t("here"),o(n)]),t(".")])])])}const S=c(_,[["render",k],["__file","DiscreetMode.html.vue"]]),B=JSON.parse('{"path":"/using-wasabi/DiscreetMode.html","title":"Discreet Mode","lang":"en-US","frontmatter":{"title":"Discreet Mode","description":"A feature that hides sensitive and critical information from physical observers. Designed to allow the user to post screenshots without having to worry about leaking private details of their wallet. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"How to activate/deactivate Discreet Mode","slug":"how-to-activate-deactivate-discreet-mode","link":"#how-to-activate-deactivate-discreet-mode","children":[]},{"level":2,"title":"More information on Discreet Mode","slug":"more-information-on-discreet-mode","link":"#more-information-on-discreet-mode","children":[]}],"git":{"updatedTime":1674222335000},"filePathRelative":"using-wasabi/DiscreetMode.md"}');export{S as comp,B as data}; diff --git a/assets/ELI5.html-8HTj70-a.js b/assets/ELI5.html-oph23Dfp.js similarity index 99% rename from assets/ELI5.html-8HTj70-a.js rename to assets/ELI5.html-oph23Dfp.js index 33c782a88a..76175e72b7 100644 --- a/assets/ELI5.html-8HTj70-a.js +++ b/assets/ELI5.html-oph23Dfp.js @@ -1 +1 @@ -import{_ as r,r as s,o as c,c as h,a as e,d as i,w as o,b as t,e as u}from"./app-BPKesm5h.js";const d={},p=e("h1",{id:"explain-wasabi-like-i-m-5",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#explain-wasabi-like-i-m-5"},[e("span",null,"Explain Wasabi like I'm 5")])],-1),w={class:"table-of-contents"},b=e("h2",{id:"introduction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#introduction"},[e("span",null,"Introduction")])],-1),y=e("p",null,"Wasabi Wallet is an open-source, non-custodial, privacy-focused Bitcoin wallet with built-in coinjoins. It is a piece of software that runs on your computer and helps you to manage your bitcoins. Although Wasabi has some very advanced magic under the hood, it is rather easy to use. You can generate a new set of seed words, or import already existing ones. With Wasabi you can receive bitcoins into your full control, and you can send them to someone else without needing permission from any other person or entity. There is also a powerful auto-coinjoin feature to help obfuscate your transaction history. You can use Wasabi to manage your hardware wallet, and it even connects to your own full node. Of course, Wasabi is libre and open-source, which means you have full control over the software you manage your money with.",-1),g=e("h2",{id:"installing-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#installing-wasabi"},[e("span",null,"Installing Wasabi")])],-1),f={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},m=e("h2",{id:"generating-a-wallet",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#generating-a-wallet"},[e("span",null,"Generating a Wallet")])],-1),v=e("p",null,"When you start Wasabi for the first time, the dialog to generate a new wallet will be open. You can set a unique name for the wallet so that you remember what it is for. In the next step, Wasabi will show your 12 recovery words. These must be carefully backed up, in the correct order, as they are needed to recover your wallet (together with the password) on another computer or in another wallet software. Next, choose a very secure password, as this encrypts the secrets, and should not be guessed by others. You will always need this password in order to spend your bitcoins, so take great care to back it up properly. Make sure you store the backup of your recovery words in a different location than the backup of your password.",-1),_=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"Backup both!"),e("p",null,"If you ever need to restore your wallet in Wasabi, or any other wallet, you will need both: your password AND your 12 recovery words.")],-1),k=e("h2",{id:"receiving-bitcoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#receiving-bitcoin"},[e("span",null,"Receiving bitcoin")])],-1),W=e("p",null,[t("In order to receive bitcoin, you need to generate an address in the "),e("code",null,"Receive"),t(" dialog. But first, you must label it with the names of any observers who know that this address is yours. For example, if Alice pays you back for last nights pizza, then the label is "),e("code",null,"Alice"),t(". This is an important feature for you and the wallet to know which coin is from whom, and it will help with your privacy in the future. Once this newly generated address receives some coins, Wasabi Wallet will automatically hide this used address, so you don't reuse it by accident.")],-1),x=u('

    Sending bitcoin

    Sending process is different depending on the privacy of coins you have. Assuming you have enough private coins the sending process is the following:

    1. Click the Send button (top right corner) at the main view.
    2. Insert the address of the receiver and type in the amount the receiver should get, then click Continue.
    3. Enter the name of the person or company receiving the payment and click Continue.
    4. Make sure everything is filled in correctly in Preview Transaction window and click Confirm.
    5. Type in your password and click Continue.

    You will now see a pop-up window telling you that the transaction is broadcasted to the Bitcoin network.

    ',4),I=e("h2",{id:"coinjoin-with-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoin-with-wasabi"},[e("span",null,"Coinjoin with Wasabi")])],-1),j=e("p",null,[t("If you don't like that your employer knows where you spend your money, or that a merchant can find out how much money you have, then you should coinjoin your bitcoin, as this breaks link to its transaction history. Although the coinjoin protocol is a bit complex, it is very easy to use in Wasabi. The wallet automatically coinjoins all your funds, so that your money becomes private. This process might take some time (hours/days). You can still use your wallet in the mean time, however it is a best practice to only use private funds, which the wallet does automatically when possible. At the wallet's homescreen the percentage indicates the progress to making your wallet fully private. The exact available private amount of bitcoin is listed as "),e("code",null,"PRIVATE"),t(".")],-1);function S(E,T){const n=s("router-link"),l=s("ExternalLinkIcon"),a=s("RouteLink");return c(),h("div",null,[p,e("nav",w,[e("ul",null,[e("li",null,[i(n,{to:"#introduction"},{default:o(()=>[t("Introduction")]),_:1})]),e("li",null,[i(n,{to:"#installing-wasabi"},{default:o(()=>[t("Installing Wasabi")]),_:1})]),e("li",null,[i(n,{to:"#generating-a-wallet"},{default:o(()=>[t("Generating a Wallet")]),_:1})]),e("li",null,[i(n,{to:"#receiving-bitcoin"},{default:o(()=>[t("Receiving bitcoin")]),_:1})]),e("li",null,[i(n,{to:"#sending-bitcoin"},{default:o(()=>[t("Sending bitcoin")]),_:1})]),e("li",null,[i(n,{to:"#coinjoin-with-wasabi"},{default:o(()=>[t("Coinjoin with Wasabi")]),_:1})])])]),b,y,g,e("p",null,[t("Installing Wasabi is super-easy. Go to the official website "),e("a",f,[t("wasabiwallet.io"),i(l)]),t(" and download the version for your operating system. You can then install Wasabi as you would do any other software on your computer.")]),e("p",null,[t("See "),i(a,{to:"/using-wasabi/InstallPackage.html"},{default:o(()=>[t("this chapter")]),_:1}),t(" for a detailed step-by-step tutorial for all operating systems, and also how to verify the PGP signature.")]),m,v,_,e("p",null,[t("See "),i(a,{to:"/using-wasabi/WalletGeneration.html"},{default:o(()=>[t("this chapter")]),_:1}),t(" for more information on how to securely generate your wallet.")]),k,W,e("p",null,[t("See "),i(a,{to:"/using-wasabi/Receive.html"},{default:o(()=>[t("this chapter")]),_:1}),t(" for a tutorial on how to properly label your addresses and receive bitcoin.")]),x,e("p",null,[t("See "),i(a,{to:"/using-wasabi/Send.html"},{default:o(()=>[t("this chapter")]),_:1}),t(" for more details about sending bitcoin and the privacy nuances of it.")]),I,j,e("p",null,[t("See "),i(a,{to:"/using-wasabi/CoinJoin.html"},{default:o(()=>[t("this chapter")]),_:1}),t(" for a thorough analysis of coinjoin, details on the Wasabi implementation and best practices on how to use it properly.")])])}const A=r(d,[["render",S],["__file","ELI5.html.vue"]]),R=JSON.parse(`{"path":"/using-wasabi/ELI5.html","title":"Explain Wasabi like I'm 5","lang":"en-US","frontmatter":{"title":"Explain Wasabi like I'm 5","description":"A very simple explanation of how to install and start Wasabi Wallet, as well as receiving, sending, and coinjoining. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"Installing Wasabi","slug":"installing-wasabi","link":"#installing-wasabi","children":[]},{"level":2,"title":"Generating a Wallet","slug":"generating-a-wallet","link":"#generating-a-wallet","children":[]},{"level":2,"title":"Receiving bitcoin","slug":"receiving-bitcoin","link":"#receiving-bitcoin","children":[]},{"level":2,"title":"Sending bitcoin","slug":"sending-bitcoin","link":"#sending-bitcoin","children":[]},{"level":2,"title":"Coinjoin with Wasabi","slug":"coinjoin-with-wasabi","link":"#coinjoin-with-wasabi","children":[]}],"git":{"updatedTime":1688945183000},"filePathRelative":"using-wasabi/ELI5.md"}`);export{A as comp,R as data}; +import{_ as r,r as s,o as c,c as h,a as e,d as i,w as o,b as t,e as u}from"./app-BgbPjqpx.js";const d={},p=e("h1",{id:"explain-wasabi-like-i-m-5",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#explain-wasabi-like-i-m-5"},[e("span",null,"Explain Wasabi like I'm 5")])],-1),w={class:"table-of-contents"},b=e("h2",{id:"introduction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#introduction"},[e("span",null,"Introduction")])],-1),y=e("p",null,"Wasabi Wallet is an open-source, non-custodial, privacy-focused Bitcoin wallet with built-in coinjoins. It is a piece of software that runs on your computer and helps you to manage your bitcoins. Although Wasabi has some very advanced magic under the hood, it is rather easy to use. You can generate a new set of seed words, or import already existing ones. With Wasabi you can receive bitcoins into your full control, and you can send them to someone else without needing permission from any other person or entity. There is also a powerful auto-coinjoin feature to help obfuscate your transaction history. You can use Wasabi to manage your hardware wallet, and it even connects to your own full node. Of course, Wasabi is libre and open-source, which means you have full control over the software you manage your money with.",-1),g=e("h2",{id:"installing-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#installing-wasabi"},[e("span",null,"Installing Wasabi")])],-1),f={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},m=e("h2",{id:"generating-a-wallet",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#generating-a-wallet"},[e("span",null,"Generating a Wallet")])],-1),v=e("p",null,"When you start Wasabi for the first time, the dialog to generate a new wallet will be open. You can set a unique name for the wallet so that you remember what it is for. In the next step, Wasabi will show your 12 recovery words. These must be carefully backed up, in the correct order, as they are needed to recover your wallet (together with the password) on another computer or in another wallet software. Next, choose a very secure password, as this encrypts the secrets, and should not be guessed by others. You will always need this password in order to spend your bitcoins, so take great care to back it up properly. Make sure you store the backup of your recovery words in a different location than the backup of your password.",-1),_=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"Backup both!"),e("p",null,"If you ever need to restore your wallet in Wasabi, or any other wallet, you will need both: your password AND your 12 recovery words.")],-1),k=e("h2",{id:"receiving-bitcoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#receiving-bitcoin"},[e("span",null,"Receiving bitcoin")])],-1),W=e("p",null,[t("In order to receive bitcoin, you need to generate an address in the "),e("code",null,"Receive"),t(" dialog. But first, you must label it with the names of any observers who know that this address is yours. For example, if Alice pays you back for last nights pizza, then the label is "),e("code",null,"Alice"),t(". This is an important feature for you and the wallet to know which coin is from whom, and it will help with your privacy in the future. Once this newly generated address receives some coins, Wasabi Wallet will automatically hide this used address, so you don't reuse it by accident.")],-1),x=u('

    Sending bitcoin

    Sending process is different depending on the privacy of coins you have. Assuming you have enough private coins the sending process is the following:

    1. Click the Send button (top right corner) at the main view.
    2. Insert the address of the receiver and type in the amount the receiver should get, then click Continue.
    3. Enter the name of the person or company receiving the payment and click Continue.
    4. Make sure everything is filled in correctly in Preview Transaction window and click Confirm.
    5. Type in your password and click Continue.

    You will now see a pop-up window telling you that the transaction is broadcasted to the Bitcoin network.

    ',4),I=e("h2",{id:"coinjoin-with-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoin-with-wasabi"},[e("span",null,"Coinjoin with Wasabi")])],-1),j=e("p",null,[t("If you don't like that your employer knows where you spend your money, or that a merchant can find out how much money you have, then you should coinjoin your bitcoin, as this breaks link to its transaction history. Although the coinjoin protocol is a bit complex, it is very easy to use in Wasabi. The wallet automatically coinjoins all your funds, so that your money becomes private. This process might take some time (hours/days). You can still use your wallet in the mean time, however it is a best practice to only use private funds, which the wallet does automatically when possible. At the wallet's homescreen the percentage indicates the progress to making your wallet fully private. The exact available private amount of bitcoin is listed as "),e("code",null,"PRIVATE"),t(".")],-1);function S(E,T){const n=s("router-link"),l=s("ExternalLinkIcon"),a=s("RouteLink");return c(),h("div",null,[p,e("nav",w,[e("ul",null,[e("li",null,[i(n,{to:"#introduction"},{default:o(()=>[t("Introduction")]),_:1})]),e("li",null,[i(n,{to:"#installing-wasabi"},{default:o(()=>[t("Installing Wasabi")]),_:1})]),e("li",null,[i(n,{to:"#generating-a-wallet"},{default:o(()=>[t("Generating a Wallet")]),_:1})]),e("li",null,[i(n,{to:"#receiving-bitcoin"},{default:o(()=>[t("Receiving bitcoin")]),_:1})]),e("li",null,[i(n,{to:"#sending-bitcoin"},{default:o(()=>[t("Sending bitcoin")]),_:1})]),e("li",null,[i(n,{to:"#coinjoin-with-wasabi"},{default:o(()=>[t("Coinjoin with Wasabi")]),_:1})])])]),b,y,g,e("p",null,[t("Installing Wasabi is super-easy. Go to the official website "),e("a",f,[t("wasabiwallet.io"),i(l)]),t(" and download the version for your operating system. You can then install Wasabi as you would do any other software on your computer.")]),e("p",null,[t("See "),i(a,{to:"/using-wasabi/InstallPackage.html"},{default:o(()=>[t("this chapter")]),_:1}),t(" for a detailed step-by-step tutorial for all operating systems, and also how to verify the PGP signature.")]),m,v,_,e("p",null,[t("See "),i(a,{to:"/using-wasabi/WalletGeneration.html"},{default:o(()=>[t("this chapter")]),_:1}),t(" for more information on how to securely generate your wallet.")]),k,W,e("p",null,[t("See "),i(a,{to:"/using-wasabi/Receive.html"},{default:o(()=>[t("this chapter")]),_:1}),t(" for a tutorial on how to properly label your addresses and receive bitcoin.")]),x,e("p",null,[t("See "),i(a,{to:"/using-wasabi/Send.html"},{default:o(()=>[t("this chapter")]),_:1}),t(" for more details about sending bitcoin and the privacy nuances of it.")]),I,j,e("p",null,[t("See "),i(a,{to:"/using-wasabi/CoinJoin.html"},{default:o(()=>[t("this chapter")]),_:1}),t(" for a thorough analysis of coinjoin, details on the Wasabi implementation and best practices on how to use it properly.")])])}const A=r(d,[["render",S],["__file","ELI5.html.vue"]]),R=JSON.parse(`{"path":"/using-wasabi/ELI5.html","title":"Explain Wasabi like I'm 5","lang":"en-US","frontmatter":{"title":"Explain Wasabi like I'm 5","description":"A very simple explanation of how to install and start Wasabi Wallet, as well as receiving, sending, and coinjoining. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"Installing Wasabi","slug":"installing-wasabi","link":"#installing-wasabi","children":[]},{"level":2,"title":"Generating a Wallet","slug":"generating-a-wallet","link":"#generating-a-wallet","children":[]},{"level":2,"title":"Receiving bitcoin","slug":"receiving-bitcoin","link":"#receiving-bitcoin","children":[]},{"level":2,"title":"Sending bitcoin","slug":"sending-bitcoin","link":"#sending-bitcoin","children":[]},{"level":2,"title":"Coinjoin with Wasabi","slug":"coinjoin-with-wasabi","link":"#coinjoin-with-wasabi","children":[]}],"git":{"updatedTime":1688945183000},"filePathRelative":"using-wasabi/ELI5.md"}`);export{A as comp,R as data}; diff --git a/assets/FAQ-Contribution.html-CxGGPr64.js b/assets/FAQ-Contribution.html-CQsxetkq.js similarity index 99% rename from assets/FAQ-Contribution.html-CxGGPr64.js rename to assets/FAQ-Contribution.html-CQsxetkq.js index d9f2844c1d..574a1a81d9 100644 --- a/assets/FAQ-Contribution.html-CxGGPr64.js +++ b/assets/FAQ-Contribution.html-CQsxetkq.js @@ -1 +1 @@ -import{_ as r}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as l,r as s,o as h,c as u,a as e,b as t,d as o,w as i,e as c}from"./app-BPKesm5h.js";const d={},p=e("h1",{id:"contributions-to-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contributions-to-wasabi"},[e("span",null,"Contributions to Wasabi")])],-1),b=e("h3",{id:"how-to-donate-to-wasabi-wallet",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-to-donate-to-wasabi-wallet"},[e("span",null,"How to donate to Wasabi Wallet?")])],-1),f=e("h2",{id:"the-wasabikas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#the-wasabikas"},[e("span",null,"The Wasabikas")])],-1),g=e("h3",{id:"who-is-contributing-to-wasabi-already",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#who-is-contributing-to-wasabi-already"},[e("span",null,"Who is contributing to Wasabi already?")])],-1),m={href:"https://github.com/zkSNACKs/WalletWasabi/graphs/contributors",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/nopara73",target:"_blank",rel:"noopener noreferrer"},_={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/nopara73/ZeroLink",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/lontivero",target:"_blank",rel:"noopener noreferrer"},v={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},W={href:"https://github.com/molnard",target:"_blank",rel:"noopener noreferrer"},C={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},A={href:"https://github.com/danwalmsley",target:"_blank",rel:"noopener noreferrer"},z={href:"https://github.com/AvaloniaUI/Avalonia",target:"_blank",rel:"noopener noreferrer"},N={href:"https://youtu.be/F8xNSOhbWrw",target:"_blank",rel:"noopener noreferrer"},x=e("img",{src:r,alt:"Watch the video"},null,-1),T={href:"https://youtu.be/Yg7_3LIutJA",target:"_blank",rel:"noopener noreferrer"},q=e("img",{src:r,alt:"Watch the video"},null,-1),I={href:"https://youtu.be/X9BB_9faJE8",target:"_blank",rel:"noopener noreferrer"},S=e("img",{src:r,alt:"Watch the video"},null,-1),j=e("h3",{id:"who-reviews-and-merges-the-pull-requests",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#who-reviews-and-merges-the-pull-requests"},[e("span",null,"Who reviews and merges the pull requests?")])],-1),K={href:"https://github.com/zkSNACKs/WalletWasabi/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc",target:"_blank",rel:"noopener noreferrer"},F={href:"https://help.github.com/en/github/administering-a-repository/about-required-reviews-for-pull-requests",target:"_blank",rel:"noopener noreferrer"},L={href:"https://github.com/nopara73",target:"_blank",rel:"noopener noreferrer"},Q={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},Y={href:"https://github.com/nopara73/ZeroLink",target:"_blank",rel:"noopener noreferrer"},O={href:"https://github.com/lontivero",target:"_blank",rel:"noopener noreferrer"},B={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},H={href:"https://github.com/molnard",target:"_blank",rel:"noopener noreferrer"},E={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/danwalmsley",target:"_blank",rel:"noopener noreferrer"},M={href:"https://github.com/AvaloniaUI/Avalonia/",target:"_blank",rel:"noopener noreferrer"},J=c('

    What is on the future roadmap of Wasabi development?

    Wasabi is far from complete, there are many Wasabikas contributing every day to make this tool of self-defense even more powerful. Because Wasabi is libre and open-source software, anyone can support the project without asking for permission. Thus it is relatively tricky to give a precise roadmap with what will be implemented in the near and distant future.

    You can become a Wasabika

    How should I start contributing to Wasabi?

    ',4),R={href:"https://join.slack.com/t/tumblebit/shared_invite/enQtNjQ1MTQ2NzQ1ODI0LWIzOTg5YTM3YmNkOTg1NjZmZTQ3NmM1OTAzYmQyYzk1M2M0MTdlZDk2OTQwNzFiNTg1ZmExNzM0NjgzY2M0Yzg",target:"_blank",rel:"noopener noreferrer"},U={href:"https://github.com/zkSNACKs/WalletWasabi",target:"_blank",rel:"noopener noreferrer"},Z=e("h3",{id:"is-there-a-bounty-program",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#is-there-a-bounty-program"},[e("span",null,"Is there a bounty program?")])],-1),G={href:"https://zksnacks.com",target:"_blank",rel:"noopener noreferrer"},P=e("h3",{id:"how-can-i-report-a-bug",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-can-i-report-a-bug"},[e("span",null,"How can I report a bug?")])],-1),V=e("p",null,"Code is speech, and can never be perfect. Thus it is expected that there are many known and unknown bugs, quirks and issues in Wasabi. Such a complex software requires constant and rigorous review by the developers and the users, this is everyone's responsibility working with Wasabi.",-1),X={href:"https://github.com/zkSNACKs/WalletWasabi/issues/",target:"_blank",rel:"noopener noreferrer"},$={href:"https://github.com/zkSNACKs/WalletWasabi/pulls",target:"_blank",rel:"noopener noreferrer"},ee={href:"https://github.com/zkSNACKs/WalletWasabi/issues/new?template=bug-report.md",target:"_blank",rel:"noopener noreferrer"},te={class:"custom-container danger"},oe=e("p",{class:"custom-container-title"},"DANGER",-1),ae=e("a",{href:"mailto:adam.ficsor73@gmail.com"},"adam.ficsor73@gmail.com",-1),re={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/SECURITY.md",target:"_blank",rel:"noopener noreferrer"},ne=e("h3",{id:"how-can-i-request-a-feature",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-can-i-request-a-feature"},[e("span",null,"How can I request a feature?")])],-1),se=e("p",null,"Wasabi is a quite beautiful piece of software already. Yet there are also 1001 things that could be just a little better, or even quite substantially superior. The beauty and bane of libre and open-source software is that it is never complete, there is always more work to be done.",-1),ie={href:"https://github.com/zkSNACKs/WalletWasabi/issues/",target:"_blank",rel:"noopener noreferrer"},le={href:"https://github.com/zkSNACKs/WalletWasabi/pulls",target:"_blank",rel:"noopener noreferrer"},he={href:"https://github.com/zkSNACKs/WalletWasabi/issues/new?template=feature-request.md",target:"_blank",rel:"noopener noreferrer"},ue=e("h3",{id:"how-can-i-get-help-and-support",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-can-i-get-help-and-support"},[e("span",null,"How can I get help and support?")])],-1),ce={href:"https://docs.wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},de={href:"https://github.com/zkSNACKs/WalletWasabi/discussions/5185",target:"_blank",rel:"noopener noreferrer"},pe={href:"https://github.com/zkSNACKs/WalletWasabi/issues/",target:"_blank",rel:"noopener noreferrer"},be=e("h3",{id:"what-does-the-wasabi-project-need-help-with",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-does-the-wasabi-project-need-help-with"},[e("span",null,"What does the Wasabi project need help with?")])],-1),fe=e("p",null,"Wasabi is libre and open-source software, thus it relies on the support of several contributors on all fronts. Of course, this includes coding new features, bug fixes and stability improvements. Yet just equally important is the review of the commits of all other Wasabikas. It's not just the contributions to the code, but also to the documentation and the effort to educate peers using Wasabi. This includes education in meatspace tribe gatherings, but also in cyberspace peer support. So basically, we need help with building and shilling Wasabi!",-1);function ge(me,we){const n=s("RouteLink"),a=s("ExternalLinkIcon");return h(),u("div",null,[p,b,e("p",null,[t("Adam Ficsor had a donation address for a few years while he was working alone on Wasabi. It's not the case anymore. Though it's most likely not an issue to accept Bitcoin donations, zkSNACKs team discontinued accepting donations because they don't want to get into accidental legal gray areas. Wasabi has a coordination fee that is capped at 0.3% for every CoinJoin and it became zkSNACKs' main income. To help Wasabi development, just CoinJoin your bitcoins via Wasabi! If you want to read more about fees here is a nice explanation: "),o(n,{to:"/FAQ/FAQ-UseWasabi.html#what-are-the-fees-for-the-coinjoin"},{default:i(()=>[t("What are the fees for the CoinJoin")]),_:1}),t(".")]),f,g,e("p",null,[t("There are many Wasabikas working with great effort and care to manifest this powerful tool of self-defense. "),e("a",m,[t("Over 50 peers"),o(a)]),t(" have already contributed to the repository. Four of the main contributors are "),e("a",w,[t("Ádám Ficsor"),o(a)]),t(" [co-founder and former CTO of "),e("a",_,[t("zkSNACKs Ltd"),o(a)]),t(", co-author of the "),e("a",k,[t("zero link Bitcoin fungibility framework"),o(a)]),t("], "),e("a",y,[t("Lucas Ontivero"),o(a)]),t(" [lead engineer of "),e("a",v,[t("zkSNACKs Ltd"),o(a)]),t("], "),e("a",W,[t("Dávid Molnár"),o(a)]),t(" [CTO of "),e("a",C,[t("zkSNACKs Ltd"),o(a)]),t("], and "),e("a",A,[t("Dan Walmsley"),o(a)]),t(" [co-maintainer of "),e("a",z,[t("Avalonia UI Framework"),o(a)]),t("].")]),e("p",null,[e("a",N,[x,o(a)])]),e("p",null,[e("a",T,[q,o(a)])]),e("p",null,[e("a",I,[S,o(a)])]),j,e("p",null,[t("As the Wasabi code is libre and open-source, anyone has access to review the latest contributions and browse the "),e("a",K,[t("open pull requests"),o(a)]),t(". The review of any Wasabika is not just deeply appreciated, but desperately needed! Wasabi is cutting-edge, high security software, and there can never be enough eyes seeking and squashing bugs. Especially review by experienced C# developers are vitally important, yet even typo and grammar fixes are necessary.")]),e("p",null,[t("There are four developers who have the ability to merge code into master branch. Per default, they "),e("a",F,[t("require at least one approving review"),o(a)]),t(" by one of the other maintainers before a pull request can be merged. However, since all four are administrators, they can still force the merge without the approval of others, but this will be noticed by many contributors.")]),e("ul",null,[e("li",null,[e("a",L,[t("Ádám Ficsor"),o(a)]),t(", co-founder and former CTO of "),e("a",Q,[t("zkSNACKs Ltd"),o(a)]),t(", co-author of the "),e("a",Y,[t("zero link Bitcoin fungibility framework"),o(a)]),t(".")]),e("li",null,[e("a",O,[t("Lucas Ontivero"),o(a)]),t(", lead engineer of "),e("a",B,[t("zkSNACKs Ltd"),o(a)]),t(".")]),e("li",null,[e("a",H,[t("Dávid Molnár"),o(a)]),t(", CTO of "),e("a",E,[t("zkSNACKs Ltd"),o(a)]),t(".")]),e("li",null,[e("a",D,[t("Dan Walmsley"),o(a)]),t(", co-maintainer of "),e("a",M,[t("Avalonia"),o(a)]),t(".")])]),J,e("p",null,[t("Thank you for considering to support this beautiful libre and open-source project! It is the responsibility of everyone using the software to contribute to its growth. Your help is deeply appreciated, and very much needed! First please read the "),o(n,{to:"/building-wasabi/ContributionChecklist.html"},{default:i(()=>[t("contribution checklist")]),_:1}),t(" to get introduced to the project and to start out in the right direction. Join our "),e("a",R,[t("Slack"),o(a)]),t(" and check out our "),e("a",U,[t("GitHub repository"),o(a)]),t(", so that you can stay up-to-date with the latest contributions.")]),Z,e("p",null,[t("Yes! The beauty of Wasabi is that it's not just a very awesome wallet by default, but it has the additional opt-in CoinJoin service. This is provided by "),e("a",G,[t("zkSNACKs Ltd."),o(a)]),t(", and in exchange for this service, the user pays a coordination fee. In return, zkSNACKs is supporting several developers to dedicate their full time to contribute to this open-source project. There are also contribution games where a bounty is paid out to any contributor worthy the prize.")]),P,V,e("p",null,[t("When you stumble upon an issue that needs fixing, please first check the open "),e("a",X,[t("issues"),o(a)]),t(" and "),e("a",$,[t("pull requests"),o(a)]),t(" if there is already someone working on it. If yes, then you can comment your situation and bug report under the open issue. If no, then please consider to "),e("a",ee,[t("open a new issue"),o(a)]),t(" and give a detailed report on the problem. It is especially helpful when you provide a step-by-step guide on how to reproduce what you have found. There is constantly a lot of work done to the code base, thus it's good to know which version of Wasabi, and what operating system you are using. In some cases it might be useful to see your logs, though please consider your privacy and encrypt this data properly in direct communication with the developers.")]),e("div",te,[oe,e("p",null,[t("If you find a bug that puts users' privacy or security at serious risk, please take great care with responsible disclosure! Send an email to "),ae,t(", preferably using PGP encryption "),e("a",re,[t("21D7 CA45 565D BCCE BE45 115D B4B7 2266 C47E 075E"),o(a)]),t(".")])]),ne,se,e("p",null,[t("Regardless if you are a new user of Wasabi, or a veteran black belt Wasabika, any suggestions on how to improve are very welcome. Please first check the existing "),e("a",ie,[t("issues"),o(a)]),t(" and "),e("a",le,[t("pull requests"),o(a)]),t(" if someone has the same feature request as you. If yes, then you can comment your desired improvement under the open issue. If no, then please consider to "),e("a",he,[t("open a new issue"),o(a)]),t(" and give a detailed request. It makes sense to first explain the problem you have in the incumbent version of Wasabi, this is the place to express your frustrations and annoyances. Then describe the solution that you have envisioned, with all the nuances and details of how this would fix your problem. To flesh our your argument, please consider alternatives and different approaches to this feature request.")]),ue,e("p",null,[t("You are already on the right track by first checking "),e("a",ce,[t("this documentation"),o(a)]),t(" for the knowledge you are seeking. It's likely that you are not the first person who has an issue or a question, and hopefully someone has curated the answer in here already. You can use the search function in the top navbar to look for a specific topic, and the sidebar menu as a table of content. You can also use our "),e("a",de,[t("GitHub Discussions"),o(a)]),t(" to find solutions to different issues and to ask questions if necessary. If your trouble is specific to the code, then it might also be suitable to check the existing "),e("a",pe,[t("GitHub issues"),o(a)]),t(" and open a new one.")]),be,fe])}const ye=l(d,[["render",ge],["__file","FAQ-Contribution.html.vue"]]),ve=JSON.parse('{"path":"/FAQ/FAQ-Contribution.html","title":"Contribution FAQ","lang":"en-US","frontmatter":{"title":"Contribution FAQ","description":"Frequently asked questions about how Wasabikas can support the project. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":3,"title":"How to donate to Wasabi Wallet?","slug":"how-to-donate-to-wasabi-wallet","link":"#how-to-donate-to-wasabi-wallet","children":[]},{"level":2,"title":"The Wasabikas","slug":"the-wasabikas","link":"#the-wasabikas","children":[{"level":3,"title":"Who is contributing to Wasabi already?","slug":"who-is-contributing-to-wasabi-already","link":"#who-is-contributing-to-wasabi-already","children":[]},{"level":3,"title":"Who reviews and merges the pull requests?","slug":"who-reviews-and-merges-the-pull-requests","link":"#who-reviews-and-merges-the-pull-requests","children":[]},{"level":3,"title":"What is on the future roadmap of Wasabi development?","slug":"what-is-on-the-future-roadmap-of-wasabi-development","link":"#what-is-on-the-future-roadmap-of-wasabi-development","children":[]}]},{"level":2,"title":"You can become a Wasabika","slug":"you-can-become-a-wasabika","link":"#you-can-become-a-wasabika","children":[{"level":3,"title":"How should I start contributing to Wasabi?","slug":"how-should-i-start-contributing-to-wasabi","link":"#how-should-i-start-contributing-to-wasabi","children":[]},{"level":3,"title":"Is there a bounty program?","slug":"is-there-a-bounty-program","link":"#is-there-a-bounty-program","children":[]},{"level":3,"title":"How can I report a bug?","slug":"how-can-i-report-a-bug","link":"#how-can-i-report-a-bug","children":[]},{"level":3,"title":"How can I request a feature?","slug":"how-can-i-request-a-feature","link":"#how-can-i-request-a-feature","children":[]},{"level":3,"title":"How can I get help and support?","slug":"how-can-i-get-help-and-support","link":"#how-can-i-get-help-and-support","children":[]},{"level":3,"title":"What does the Wasabi project need help with?","slug":"what-does-the-wasabi-project-need-help-with","link":"#what-does-the-wasabi-project-need-help-with","children":[]}]}],"git":{"updatedTime":1682266766000},"filePathRelative":"FAQ/FAQ-Contribution.md"}');export{ye as comp,ve as data}; +import{_ as r}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as l,r as s,o as h,c as u,a as e,b as t,d as o,w as i,e as c}from"./app-BgbPjqpx.js";const d={},p=e("h1",{id:"contributions-to-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contributions-to-wasabi"},[e("span",null,"Contributions to Wasabi")])],-1),b=e("h3",{id:"how-to-donate-to-wasabi-wallet",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-to-donate-to-wasabi-wallet"},[e("span",null,"How to donate to Wasabi Wallet?")])],-1),f=e("h2",{id:"the-wasabikas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#the-wasabikas"},[e("span",null,"The Wasabikas")])],-1),g=e("h3",{id:"who-is-contributing-to-wasabi-already",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#who-is-contributing-to-wasabi-already"},[e("span",null,"Who is contributing to Wasabi already?")])],-1),m={href:"https://github.com/zkSNACKs/WalletWasabi/graphs/contributors",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/nopara73",target:"_blank",rel:"noopener noreferrer"},_={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/nopara73/ZeroLink",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/lontivero",target:"_blank",rel:"noopener noreferrer"},v={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},W={href:"https://github.com/molnard",target:"_blank",rel:"noopener noreferrer"},C={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},A={href:"https://github.com/danwalmsley",target:"_blank",rel:"noopener noreferrer"},z={href:"https://github.com/AvaloniaUI/Avalonia",target:"_blank",rel:"noopener noreferrer"},N={href:"https://youtu.be/F8xNSOhbWrw",target:"_blank",rel:"noopener noreferrer"},x=e("img",{src:r,alt:"Watch the video"},null,-1),T={href:"https://youtu.be/Yg7_3LIutJA",target:"_blank",rel:"noopener noreferrer"},q=e("img",{src:r,alt:"Watch the video"},null,-1),I={href:"https://youtu.be/X9BB_9faJE8",target:"_blank",rel:"noopener noreferrer"},S=e("img",{src:r,alt:"Watch the video"},null,-1),j=e("h3",{id:"who-reviews-and-merges-the-pull-requests",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#who-reviews-and-merges-the-pull-requests"},[e("span",null,"Who reviews and merges the pull requests?")])],-1),K={href:"https://github.com/zkSNACKs/WalletWasabi/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc",target:"_blank",rel:"noopener noreferrer"},F={href:"https://help.github.com/en/github/administering-a-repository/about-required-reviews-for-pull-requests",target:"_blank",rel:"noopener noreferrer"},L={href:"https://github.com/nopara73",target:"_blank",rel:"noopener noreferrer"},Q={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},Y={href:"https://github.com/nopara73/ZeroLink",target:"_blank",rel:"noopener noreferrer"},O={href:"https://github.com/lontivero",target:"_blank",rel:"noopener noreferrer"},B={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},H={href:"https://github.com/molnard",target:"_blank",rel:"noopener noreferrer"},E={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/danwalmsley",target:"_blank",rel:"noopener noreferrer"},M={href:"https://github.com/AvaloniaUI/Avalonia/",target:"_blank",rel:"noopener noreferrer"},J=c('

    What is on the future roadmap of Wasabi development?

    Wasabi is far from complete, there are many Wasabikas contributing every day to make this tool of self-defense even more powerful. Because Wasabi is libre and open-source software, anyone can support the project without asking for permission. Thus it is relatively tricky to give a precise roadmap with what will be implemented in the near and distant future.

    You can become a Wasabika

    How should I start contributing to Wasabi?

    ',4),R={href:"https://join.slack.com/t/tumblebit/shared_invite/enQtNjQ1MTQ2NzQ1ODI0LWIzOTg5YTM3YmNkOTg1NjZmZTQ3NmM1OTAzYmQyYzk1M2M0MTdlZDk2OTQwNzFiNTg1ZmExNzM0NjgzY2M0Yzg",target:"_blank",rel:"noopener noreferrer"},U={href:"https://github.com/zkSNACKs/WalletWasabi",target:"_blank",rel:"noopener noreferrer"},Z=e("h3",{id:"is-there-a-bounty-program",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#is-there-a-bounty-program"},[e("span",null,"Is there a bounty program?")])],-1),G={href:"https://zksnacks.com",target:"_blank",rel:"noopener noreferrer"},P=e("h3",{id:"how-can-i-report-a-bug",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-can-i-report-a-bug"},[e("span",null,"How can I report a bug?")])],-1),V=e("p",null,"Code is speech, and can never be perfect. Thus it is expected that there are many known and unknown bugs, quirks and issues in Wasabi. Such a complex software requires constant and rigorous review by the developers and the users, this is everyone's responsibility working with Wasabi.",-1),X={href:"https://github.com/zkSNACKs/WalletWasabi/issues/",target:"_blank",rel:"noopener noreferrer"},$={href:"https://github.com/zkSNACKs/WalletWasabi/pulls",target:"_blank",rel:"noopener noreferrer"},ee={href:"https://github.com/zkSNACKs/WalletWasabi/issues/new?template=bug-report.md",target:"_blank",rel:"noopener noreferrer"},te={class:"custom-container danger"},oe=e("p",{class:"custom-container-title"},"DANGER",-1),ae=e("a",{href:"mailto:adam.ficsor73@gmail.com"},"adam.ficsor73@gmail.com",-1),re={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/SECURITY.md",target:"_blank",rel:"noopener noreferrer"},ne=e("h3",{id:"how-can-i-request-a-feature",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-can-i-request-a-feature"},[e("span",null,"How can I request a feature?")])],-1),se=e("p",null,"Wasabi is a quite beautiful piece of software already. Yet there are also 1001 things that could be just a little better, or even quite substantially superior. The beauty and bane of libre and open-source software is that it is never complete, there is always more work to be done.",-1),ie={href:"https://github.com/zkSNACKs/WalletWasabi/issues/",target:"_blank",rel:"noopener noreferrer"},le={href:"https://github.com/zkSNACKs/WalletWasabi/pulls",target:"_blank",rel:"noopener noreferrer"},he={href:"https://github.com/zkSNACKs/WalletWasabi/issues/new?template=feature-request.md",target:"_blank",rel:"noopener noreferrer"},ue=e("h3",{id:"how-can-i-get-help-and-support",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-can-i-get-help-and-support"},[e("span",null,"How can I get help and support?")])],-1),ce={href:"https://docs.wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},de={href:"https://github.com/zkSNACKs/WalletWasabi/discussions/5185",target:"_blank",rel:"noopener noreferrer"},pe={href:"https://github.com/zkSNACKs/WalletWasabi/issues/",target:"_blank",rel:"noopener noreferrer"},be=e("h3",{id:"what-does-the-wasabi-project-need-help-with",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-does-the-wasabi-project-need-help-with"},[e("span",null,"What does the Wasabi project need help with?")])],-1),fe=e("p",null,"Wasabi is libre and open-source software, thus it relies on the support of several contributors on all fronts. Of course, this includes coding new features, bug fixes and stability improvements. Yet just equally important is the review of the commits of all other Wasabikas. It's not just the contributions to the code, but also to the documentation and the effort to educate peers using Wasabi. This includes education in meatspace tribe gatherings, but also in cyberspace peer support. So basically, we need help with building and shilling Wasabi!",-1);function ge(me,we){const n=s("RouteLink"),a=s("ExternalLinkIcon");return h(),u("div",null,[p,b,e("p",null,[t("Adam Ficsor had a donation address for a few years while he was working alone on Wasabi. It's not the case anymore. Though it's most likely not an issue to accept Bitcoin donations, zkSNACKs team discontinued accepting donations because they don't want to get into accidental legal gray areas. Wasabi has a coordination fee that is capped at 0.3% for every CoinJoin and it became zkSNACKs' main income. To help Wasabi development, just CoinJoin your bitcoins via Wasabi! If you want to read more about fees here is a nice explanation: "),o(n,{to:"/FAQ/FAQ-UseWasabi.html#what-are-the-fees-for-the-coinjoin"},{default:i(()=>[t("What are the fees for the CoinJoin")]),_:1}),t(".")]),f,g,e("p",null,[t("There are many Wasabikas working with great effort and care to manifest this powerful tool of self-defense. "),e("a",m,[t("Over 50 peers"),o(a)]),t(" have already contributed to the repository. Four of the main contributors are "),e("a",w,[t("Ádám Ficsor"),o(a)]),t(" [co-founder and former CTO of "),e("a",_,[t("zkSNACKs Ltd"),o(a)]),t(", co-author of the "),e("a",k,[t("zero link Bitcoin fungibility framework"),o(a)]),t("], "),e("a",y,[t("Lucas Ontivero"),o(a)]),t(" [lead engineer of "),e("a",v,[t("zkSNACKs Ltd"),o(a)]),t("], "),e("a",W,[t("Dávid Molnár"),o(a)]),t(" [CTO of "),e("a",C,[t("zkSNACKs Ltd"),o(a)]),t("], and "),e("a",A,[t("Dan Walmsley"),o(a)]),t(" [co-maintainer of "),e("a",z,[t("Avalonia UI Framework"),o(a)]),t("].")]),e("p",null,[e("a",N,[x,o(a)])]),e("p",null,[e("a",T,[q,o(a)])]),e("p",null,[e("a",I,[S,o(a)])]),j,e("p",null,[t("As the Wasabi code is libre and open-source, anyone has access to review the latest contributions and browse the "),e("a",K,[t("open pull requests"),o(a)]),t(". The review of any Wasabika is not just deeply appreciated, but desperately needed! Wasabi is cutting-edge, high security software, and there can never be enough eyes seeking and squashing bugs. Especially review by experienced C# developers are vitally important, yet even typo and grammar fixes are necessary.")]),e("p",null,[t("There are four developers who have the ability to merge code into master branch. Per default, they "),e("a",F,[t("require at least one approving review"),o(a)]),t(" by one of the other maintainers before a pull request can be merged. However, since all four are administrators, they can still force the merge without the approval of others, but this will be noticed by many contributors.")]),e("ul",null,[e("li",null,[e("a",L,[t("Ádám Ficsor"),o(a)]),t(", co-founder and former CTO of "),e("a",Q,[t("zkSNACKs Ltd"),o(a)]),t(", co-author of the "),e("a",Y,[t("zero link Bitcoin fungibility framework"),o(a)]),t(".")]),e("li",null,[e("a",O,[t("Lucas Ontivero"),o(a)]),t(", lead engineer of "),e("a",B,[t("zkSNACKs Ltd"),o(a)]),t(".")]),e("li",null,[e("a",H,[t("Dávid Molnár"),o(a)]),t(", CTO of "),e("a",E,[t("zkSNACKs Ltd"),o(a)]),t(".")]),e("li",null,[e("a",D,[t("Dan Walmsley"),o(a)]),t(", co-maintainer of "),e("a",M,[t("Avalonia"),o(a)]),t(".")])]),J,e("p",null,[t("Thank you for considering to support this beautiful libre and open-source project! It is the responsibility of everyone using the software to contribute to its growth. Your help is deeply appreciated, and very much needed! First please read the "),o(n,{to:"/building-wasabi/ContributionChecklist.html"},{default:i(()=>[t("contribution checklist")]),_:1}),t(" to get introduced to the project and to start out in the right direction. Join our "),e("a",R,[t("Slack"),o(a)]),t(" and check out our "),e("a",U,[t("GitHub repository"),o(a)]),t(", so that you can stay up-to-date with the latest contributions.")]),Z,e("p",null,[t("Yes! The beauty of Wasabi is that it's not just a very awesome wallet by default, but it has the additional opt-in CoinJoin service. This is provided by "),e("a",G,[t("zkSNACKs Ltd."),o(a)]),t(", and in exchange for this service, the user pays a coordination fee. In return, zkSNACKs is supporting several developers to dedicate their full time to contribute to this open-source project. There are also contribution games where a bounty is paid out to any contributor worthy the prize.")]),P,V,e("p",null,[t("When you stumble upon an issue that needs fixing, please first check the open "),e("a",X,[t("issues"),o(a)]),t(" and "),e("a",$,[t("pull requests"),o(a)]),t(" if there is already someone working on it. If yes, then you can comment your situation and bug report under the open issue. If no, then please consider to "),e("a",ee,[t("open a new issue"),o(a)]),t(" and give a detailed report on the problem. It is especially helpful when you provide a step-by-step guide on how to reproduce what you have found. There is constantly a lot of work done to the code base, thus it's good to know which version of Wasabi, and what operating system you are using. In some cases it might be useful to see your logs, though please consider your privacy and encrypt this data properly in direct communication with the developers.")]),e("div",te,[oe,e("p",null,[t("If you find a bug that puts users' privacy or security at serious risk, please take great care with responsible disclosure! Send an email to "),ae,t(", preferably using PGP encryption "),e("a",re,[t("21D7 CA45 565D BCCE BE45 115D B4B7 2266 C47E 075E"),o(a)]),t(".")])]),ne,se,e("p",null,[t("Regardless if you are a new user of Wasabi, or a veteran black belt Wasabika, any suggestions on how to improve are very welcome. Please first check the existing "),e("a",ie,[t("issues"),o(a)]),t(" and "),e("a",le,[t("pull requests"),o(a)]),t(" if someone has the same feature request as you. If yes, then you can comment your desired improvement under the open issue. If no, then please consider to "),e("a",he,[t("open a new issue"),o(a)]),t(" and give a detailed request. It makes sense to first explain the problem you have in the incumbent version of Wasabi, this is the place to express your frustrations and annoyances. Then describe the solution that you have envisioned, with all the nuances and details of how this would fix your problem. To flesh our your argument, please consider alternatives and different approaches to this feature request.")]),ue,e("p",null,[t("You are already on the right track by first checking "),e("a",ce,[t("this documentation"),o(a)]),t(" for the knowledge you are seeking. It's likely that you are not the first person who has an issue or a question, and hopefully someone has curated the answer in here already. You can use the search function in the top navbar to look for a specific topic, and the sidebar menu as a table of content. You can also use our "),e("a",de,[t("GitHub Discussions"),o(a)]),t(" to find solutions to different issues and to ask questions if necessary. If your trouble is specific to the code, then it might also be suitable to check the existing "),e("a",pe,[t("GitHub issues"),o(a)]),t(" and open a new one.")]),be,fe])}const ye=l(d,[["render",ge],["__file","FAQ-Contribution.html.vue"]]),ve=JSON.parse('{"path":"/FAQ/FAQ-Contribution.html","title":"Contribution FAQ","lang":"en-US","frontmatter":{"title":"Contribution FAQ","description":"Frequently asked questions about how Wasabikas can support the project. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":3,"title":"How to donate to Wasabi Wallet?","slug":"how-to-donate-to-wasabi-wallet","link":"#how-to-donate-to-wasabi-wallet","children":[]},{"level":2,"title":"The Wasabikas","slug":"the-wasabikas","link":"#the-wasabikas","children":[{"level":3,"title":"Who is contributing to Wasabi already?","slug":"who-is-contributing-to-wasabi-already","link":"#who-is-contributing-to-wasabi-already","children":[]},{"level":3,"title":"Who reviews and merges the pull requests?","slug":"who-reviews-and-merges-the-pull-requests","link":"#who-reviews-and-merges-the-pull-requests","children":[]},{"level":3,"title":"What is on the future roadmap of Wasabi development?","slug":"what-is-on-the-future-roadmap-of-wasabi-development","link":"#what-is-on-the-future-roadmap-of-wasabi-development","children":[]}]},{"level":2,"title":"You can become a Wasabika","slug":"you-can-become-a-wasabika","link":"#you-can-become-a-wasabika","children":[{"level":3,"title":"How should I start contributing to Wasabi?","slug":"how-should-i-start-contributing-to-wasabi","link":"#how-should-i-start-contributing-to-wasabi","children":[]},{"level":3,"title":"Is there a bounty program?","slug":"is-there-a-bounty-program","link":"#is-there-a-bounty-program","children":[]},{"level":3,"title":"How can I report a bug?","slug":"how-can-i-report-a-bug","link":"#how-can-i-report-a-bug","children":[]},{"level":3,"title":"How can I request a feature?","slug":"how-can-i-request-a-feature","link":"#how-can-i-request-a-feature","children":[]},{"level":3,"title":"How can I get help and support?","slug":"how-can-i-get-help-and-support","link":"#how-can-i-get-help-and-support","children":[]},{"level":3,"title":"What does the Wasabi project need help with?","slug":"what-does-the-wasabi-project-need-help-with","link":"#what-does-the-wasabi-project-need-help-with","children":[]}]}],"git":{"updatedTime":1682266766000},"filePathRelative":"FAQ/FAQ-Contribution.md"}');export{ye as comp,ve as data}; diff --git a/assets/FAQ-GeneralBitcoinPrivacy.html-CKFHSkgl.js b/assets/FAQ-GeneralBitcoinPrivacy.html-CpR1ImCX.js similarity index 99% rename from assets/FAQ-GeneralBitcoinPrivacy.html-CKFHSkgl.js rename to assets/FAQ-GeneralBitcoinPrivacy.html-CpR1ImCX.js index 6232cf4764..083681a656 100644 --- a/assets/FAQ-GeneralBitcoinPrivacy.html-CKFHSkgl.js +++ b/assets/FAQ-GeneralBitcoinPrivacy.html-CpR1ImCX.js @@ -1,4 +1,4 @@ -import{_ as r,r as a,o as l,c,a as e,b as i,d as o,w as h,e as n}from"./app-BPKesm5h.js";const d={},u=n('

    General Bitcoin Privacy

    Why Privacy matters

    I have nothing to hide, do I still need financial privacy?

    What did you say to your spouse in bed last night? How much money did you earn last month? What websites have you visited yesterday?

    TIP

    It's not that I have nothing to hide, it's that I have nothing to share.

    There are many tasks in everyday life that are simply none of your business. Knowledge you choose not to share with others, things you only tell one individual, actions that you do while nobody is watching. How much money you earn, and where you spend it, is only your business, and of no concern to most other individuals.

    How is financial privacy an essential element to fungibility in Bitcoin?

    Fungibility is the possibility for an individual receiving bitcoin to safely ignore any connection between this bitcoin and any particular individual or use case it interacted with in the past. If you can meaningfully distinguish one coin from another, then their fungibility is weak. If Bitcoin fungibility is too weak in practice, then it cannot be decentralized: if someone important announces a list of stolen coins they won't accept coins derived from, you must carefully check coins you receive against that list and return the ones that fail. Everyone gets stuck checking blacklists issued by various authorities because in that world we'd all not like to get stuck with bad coins. This adds friction and transactional costs and makes Bitcoin less valuable as money.

    How is financial privacy essential for entrepreneurs?

    If you run a business, you cannot effectively set prices if your suppliers and customers can see all your transactions against your will. You cannot compete effectively if your competition is tracking your sales. Individually your informational leverage is lost in your private dealings if you don't have privacy over your accounts: if you pay your landlord in Bitcoin without enough privacy in place, your landlord will see when you've received a pay raise and can hit you up for more rent.

    How is financial privacy essential for personal safety?

    If thieves can see your income, holdings, and spending, they can use this information to target and exploit you. Without privacy, malicious parties have more ability to steal your identity, snatch your large purchases off your doorstep, or impersonate businesses you transact with towards you. They can tell exactly how much to try to scam you for. If thieves don't know how much bitcoin you have, then they don't know if you are worth the effort to attack.

    How is financial privacy essential for human dignity?

    No one wants the snotty barista at the coffee shop or their nosy neighbors commenting on their income or spending habits. No one wants their baby-crazy in-laws asking why they're buying contraception (or sex toys). Your employer has no business knowing what church you donate to. Only in a perfectly enlightened discrimination-free world where no one has undue authority over anyone else could we retain our dignity and make our lawful transactions freely without self-censorship if we don't have privacy.

    Most importantly, financial privacy isn't incompatible with things like law enforcement or transparency. You can always keep records, be ordered (or volunteer) to provide them to whomever, have judges hold against your interest when you can't produce records (as is the case today). None of this requires globally visible public records.

    The Privacy of Bitcoin

    How is Bitcoin good in terms of privacy?

    Privacy in traditional banking is guaranteed by the institutions that make up the system, such as banks, credit card companies, and governments. They (try to) ensure that your bank balance stays a secret. This puts them in a powerful position, where only they have complete oversight as to what is going on.

    Instead, in Bitcoin pseudonyms protect your identity. In the Bitcoin ecosystem, everyone can see the history of every account balance, but they cannot see who controls an account. All addresses and transactions are recorded in Bitcoin’s publicly distributed database, the blockchain. The addresses do not have names or IP addresses attached to them, so it is not always possible to know which transaction belongs to which individual.

    How is Bitcoin bad in terms of privacy?

    Bitcoin is by default a transparent system, in which every piece of information is available to the public. As such, every Bitcoin user requires some level of protection. Anyone with substantial wealth in Bitcoin would not want to advertise their funds to every person they transact with, for obvious reasons. But every time you spend just a tiny portion of your bitcoin, you might reveal your wealth to the other party. Doing that on the internet is like flashing large stacks of cash in a dark back alley, so obviously it’s not advisable! A criminal might see how much you have and decide to come after it. Distributing your wealth between several wallets and using a different address for each transaction is a common practice that prevents others from knowing how much bitcoin you have.

    Each Bitcoin transaction contains at least one input (where the Bitcoin are from) and at least one output (where the Bitcoin are being sent). This means that once a single address is known, there is a trail to follow the Bitcoin.

    Another characteristic of Bitcoin transactions is that the value of the input always needs to match the value of the previous transaction output. If you previously received 1 bitcoin, and you want to spend 0.4 bitcoin, the transaction needs to spend the whole 1 bitcoin. 0.4 bitcoin will go as payment, then 0.6 bitcoin will return to you as change. Your Bitcoin wallet will handle this process automatically, but it is important to understand the principle in order to use it anonymously.

    The owner of the original bitcoin doesn't know whom you paid the money or what you did with it, but they can see the amounts and addresses involved. They can see two outputs of the transaction: one worth 0.4 bitcoin and one worth 0.6 bitcoin. They might not know for certain which is the purchase and which is the change, but they can apply heuristics to estimate it.

    Similarly, if you receive 0.5 bitcoin but want to spend 1 bitcoin, you need to own additional coins with a combined value of at least 0.5 bitcoin in them. When spending two coins within one transaction, it is often assumed that both of these coins belong to the same entity, this is the common input ownership heuristic.

    Why is it important to run a full node?

    TIP

    Not your node ~ not your rules

    ',27),p={href:"https://github.com/bitcoin/bitcoin",target:"_blank",rel:"noopener noreferrer"},y=e("h3",{id:"how-does-a-full-node-protect-my-privacy",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-does-a-full-node-protect-my-privacy"},[e("span",null,"How does a full node protect my privacy?")])],-1),f={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},b=e("h3",{id:"how-can-i-set-up-a-full-node",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-can-i-set-up-a-full-node"},[e("span",null,"How can I set up a full node?")])],-1),m={href:"https://bitcoinknots.org/",target:"_blank",rel:"noopener noreferrer"},w={href:"https://bitcoincore.org/",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/libbitcoin/libbitcoin-node",target:"_blank",rel:"noopener noreferrer"},v=e("p",null,"Instead, if you prefer to use some dedicated hardware solutions, these are some of the most reliable projects:",-1),k={href:"https://github.com/rootzoll/raspiblitz",target:"_blank",rel:"noopener noreferrer"},_={href:"https://raspibolt.org/",target:"_blank",rel:"noopener noreferrer"},T={href:"https://nixbitcoin.org/",target:"_blank",rel:"noopener noreferrer"},B={href:"https://www.nodl.eu/",target:"_blank",rel:"noopener noreferrer"},I={href:"https://mynodebtc.com/",target:"_blank",rel:"noopener noreferrer"},x={href:"https://start9.com/",target:"_blank",rel:"noopener noreferrer"},W=e("h3",{id:"why-is-it-important-to-use-a-new-address-for-every-payment",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-is-it-important-to-use-a-new-address-for-every-payment"},[e("span",null,"Why is it important to use a new address for every payment?")])],-1),A=e("p",null,"Addresses being used more than once is very damaging to privacy because that links together more blockchain transactions with proof that they were created by the same entity. The most private and secure way to use bitcoin is to send a brand new address to each person who pays you. After an address has received a coin, it should never be used again. Also, a brand new bitcoin address should be demanded from the recipient when sending bitcoin. Wasabi has a user interface which discourages address reuse by removing from the GUI addresses which have received a coin.",-1),F=e("p",null,'It has been argued that the phrase "bitcoin address" was a bad name for this object because it implies it can be reused like an email address. A better name would be something like "bitcoin invoice".',-1),P=e("p",null,"Bitcoin isn't anonymous but pseudonymous, and the pseudonyms are bitcoin addresses. Avoiding address reuse is like throwing away a pseudonym after it has been used.",-1),j=e("h3",{id:"what-is-a-coinjoin-sudoku",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-a-coinjoin-sudoku"},[e("span",null,"What is a coinjoin Sudoku?")])],-1),S={href:"https://www.coinjoinsudoku.com/advisory/",target:"_blank",rel:"noopener noreferrer"},H=n('

    The Privacy of Tor

    How does Tor protect my network-level privacy?

    When you make a Bitcoin transaction, you are essentially creating a message on your phone or computer and sending it to the Bitcoin network. Someone operating a large number of nodes on the Bitcoin network might be able to match some of your transactions to your IP address, then deanonymize your stack of bitcoin.

    It is relatively easy to avoid this on a computer by relaying all transactions through the Tor network. Wasabi routes all traffic via Tor’s SOCKS5 proxy, by default.

    To maintain your anonymity, use the Tor Browser or the Tails operating system, if possible. Route everything through Tor by default.

    It is also good practice to route your chats through the Tor network. You can also configure many cloud storage providers in this way.

    Why does Tor process keep running after closing Wasabi Wallet?

    There are two main reasons: user experience and privacy.

    If a user closes Wasabi and then starts it again, he's already connected to Tor and he does not need to build a new Tor circuit. This means that Wasabi's startup will be much faster, because the Tor circuit is already established.

    Regarding the privacy, this is done to avoid time correlation attacks when using Wasabi Wallet. In fact, if a user creates a new Tor circuit every time he opens Wasabi Wallet, he would send a series of information to the Bitcoin network, which could allow a correlation and deanonymization of the user himself.

    My country/ISP is blocking/censoring Tor, how can I use Wasabi with Tor bridges?

    WARNING

    Feature not yet ported to Wasabi 2.0

    ',12),C={href:"https://www.torproject.org/docs/bridges",target:"_blank",rel:"noopener noreferrer"},D=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"If you are using Tor Browser Bundle it is extremely easy to configure it to use bridges. Configuring Tor bridges running in a daemon mode is more difficult and takes more time.")],-1),N=e("p",null,[e("strong",null,"Steps with Tor Browser:")],-1),R={href:"https://www.torproject.org/",target:"_blank",rel:"noopener noreferrer"},E=n("
  • Change the Settings of the Tor Browser to use one of the bridges or pluggable transports
  • Leave Tor Browser running after connecting with a bridge
  • Change the Settings of Wasabi Wallet and edit TorSocks5 Endpoint from 127.0.0.1:9050 to 127.0.0.1:9150
  • Restart Wasabi
  • ",4),Y=e("p",null,"After this, Wasabi will connect to Tor using the Tor Browser's connection via a random bridge.",-1),G=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"WARNING"),e("p",null,"To make use of Tor bridges on Wasabi, you must always keep Tor Browser open.")],-1),Q=e("p",null,[e("strong",null,"Steps with Tor Daemon on Linux:")],-1),z=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"These are commands for Debian. Feel free to edit these commands according to your distribution.")],-1),L={href:"https://bridges.torproject.org/bridges",target:"_blank",rel:"noopener noreferrer"},O=e("li",null,[i("Install Tor daemon with "),e("code",null,"sudo apt-get install tor")],-1),q=e("li",null,[i("Install OBFS4 support (needed to connect to bridges), by editing your "),e("code",null,"/etc/apt/sources.list"),i(" and adding this line:")],-1),U=n(`
    # Tor Bridges
    +import{_ as r,r as a,o as l,c,a as e,b as i,d as o,w as h,e as n}from"./app-BgbPjqpx.js";const d={},u=n('

    General Bitcoin Privacy

    Why Privacy matters

    I have nothing to hide, do I still need financial privacy?

    What did you say to your spouse in bed last night? How much money did you earn last month? What websites have you visited yesterday?

    TIP

    It's not that I have nothing to hide, it's that I have nothing to share.

    There are many tasks in everyday life that are simply none of your business. Knowledge you choose not to share with others, things you only tell one individual, actions that you do while nobody is watching. How much money you earn, and where you spend it, is only your business, and of no concern to most other individuals.

    How is financial privacy an essential element to fungibility in Bitcoin?

    Fungibility is the possibility for an individual receiving bitcoin to safely ignore any connection between this bitcoin and any particular individual or use case it interacted with in the past. If you can meaningfully distinguish one coin from another, then their fungibility is weak. If Bitcoin fungibility is too weak in practice, then it cannot be decentralized: if someone important announces a list of stolen coins they won't accept coins derived from, you must carefully check coins you receive against that list and return the ones that fail. Everyone gets stuck checking blacklists issued by various authorities because in that world we'd all not like to get stuck with bad coins. This adds friction and transactional costs and makes Bitcoin less valuable as money.

    How is financial privacy essential for entrepreneurs?

    If you run a business, you cannot effectively set prices if your suppliers and customers can see all your transactions against your will. You cannot compete effectively if your competition is tracking your sales. Individually your informational leverage is lost in your private dealings if you don't have privacy over your accounts: if you pay your landlord in Bitcoin without enough privacy in place, your landlord will see when you've received a pay raise and can hit you up for more rent.

    How is financial privacy essential for personal safety?

    If thieves can see your income, holdings, and spending, they can use this information to target and exploit you. Without privacy, malicious parties have more ability to steal your identity, snatch your large purchases off your doorstep, or impersonate businesses you transact with towards you. They can tell exactly how much to try to scam you for. If thieves don't know how much bitcoin you have, then they don't know if you are worth the effort to attack.

    How is financial privacy essential for human dignity?

    No one wants the snotty barista at the coffee shop or their nosy neighbors commenting on their income or spending habits. No one wants their baby-crazy in-laws asking why they're buying contraception (or sex toys). Your employer has no business knowing what church you donate to. Only in a perfectly enlightened discrimination-free world where no one has undue authority over anyone else could we retain our dignity and make our lawful transactions freely without self-censorship if we don't have privacy.

    Most importantly, financial privacy isn't incompatible with things like law enforcement or transparency. You can always keep records, be ordered (or volunteer) to provide them to whomever, have judges hold against your interest when you can't produce records (as is the case today). None of this requires globally visible public records.

    The Privacy of Bitcoin

    How is Bitcoin good in terms of privacy?

    Privacy in traditional banking is guaranteed by the institutions that make up the system, such as banks, credit card companies, and governments. They (try to) ensure that your bank balance stays a secret. This puts them in a powerful position, where only they have complete oversight as to what is going on.

    Instead, in Bitcoin pseudonyms protect your identity. In the Bitcoin ecosystem, everyone can see the history of every account balance, but they cannot see who controls an account. All addresses and transactions are recorded in Bitcoin’s publicly distributed database, the blockchain. The addresses do not have names or IP addresses attached to them, so it is not always possible to know which transaction belongs to which individual.

    How is Bitcoin bad in terms of privacy?

    Bitcoin is by default a transparent system, in which every piece of information is available to the public. As such, every Bitcoin user requires some level of protection. Anyone with substantial wealth in Bitcoin would not want to advertise their funds to every person they transact with, for obvious reasons. But every time you spend just a tiny portion of your bitcoin, you might reveal your wealth to the other party. Doing that on the internet is like flashing large stacks of cash in a dark back alley, so obviously it’s not advisable! A criminal might see how much you have and decide to come after it. Distributing your wealth between several wallets and using a different address for each transaction is a common practice that prevents others from knowing how much bitcoin you have.

    Each Bitcoin transaction contains at least one input (where the Bitcoin are from) and at least one output (where the Bitcoin are being sent). This means that once a single address is known, there is a trail to follow the Bitcoin.

    Another characteristic of Bitcoin transactions is that the value of the input always needs to match the value of the previous transaction output. If you previously received 1 bitcoin, and you want to spend 0.4 bitcoin, the transaction needs to spend the whole 1 bitcoin. 0.4 bitcoin will go as payment, then 0.6 bitcoin will return to you as change. Your Bitcoin wallet will handle this process automatically, but it is important to understand the principle in order to use it anonymously.

    The owner of the original bitcoin doesn't know whom you paid the money or what you did with it, but they can see the amounts and addresses involved. They can see two outputs of the transaction: one worth 0.4 bitcoin and one worth 0.6 bitcoin. They might not know for certain which is the purchase and which is the change, but they can apply heuristics to estimate it.

    Similarly, if you receive 0.5 bitcoin but want to spend 1 bitcoin, you need to own additional coins with a combined value of at least 0.5 bitcoin in them. When spending two coins within one transaction, it is often assumed that both of these coins belong to the same entity, this is the common input ownership heuristic.

    Why is it important to run a full node?

    TIP

    Not your node ~ not your rules

    ',27),p={href:"https://github.com/bitcoin/bitcoin",target:"_blank",rel:"noopener noreferrer"},y=e("h3",{id:"how-does-a-full-node-protect-my-privacy",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-does-a-full-node-protect-my-privacy"},[e("span",null,"How does a full node protect my privacy?")])],-1),f={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},b=e("h3",{id:"how-can-i-set-up-a-full-node",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-can-i-set-up-a-full-node"},[e("span",null,"How can I set up a full node?")])],-1),m={href:"https://bitcoinknots.org/",target:"_blank",rel:"noopener noreferrer"},w={href:"https://bitcoincore.org/",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/libbitcoin/libbitcoin-node",target:"_blank",rel:"noopener noreferrer"},v=e("p",null,"Instead, if you prefer to use some dedicated hardware solutions, these are some of the most reliable projects:",-1),k={href:"https://github.com/rootzoll/raspiblitz",target:"_blank",rel:"noopener noreferrer"},_={href:"https://raspibolt.org/",target:"_blank",rel:"noopener noreferrer"},T={href:"https://nixbitcoin.org/",target:"_blank",rel:"noopener noreferrer"},B={href:"https://www.nodl.eu/",target:"_blank",rel:"noopener noreferrer"},I={href:"https://mynodebtc.com/",target:"_blank",rel:"noopener noreferrer"},x={href:"https://start9.com/",target:"_blank",rel:"noopener noreferrer"},W=e("h3",{id:"why-is-it-important-to-use-a-new-address-for-every-payment",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-is-it-important-to-use-a-new-address-for-every-payment"},[e("span",null,"Why is it important to use a new address for every payment?")])],-1),A=e("p",null,"Addresses being used more than once is very damaging to privacy because that links together more blockchain transactions with proof that they were created by the same entity. The most private and secure way to use bitcoin is to send a brand new address to each person who pays you. After an address has received a coin, it should never be used again. Also, a brand new bitcoin address should be demanded from the recipient when sending bitcoin. Wasabi has a user interface which discourages address reuse by removing from the GUI addresses which have received a coin.",-1),F=e("p",null,'It has been argued that the phrase "bitcoin address" was a bad name for this object because it implies it can be reused like an email address. A better name would be something like "bitcoin invoice".',-1),P=e("p",null,"Bitcoin isn't anonymous but pseudonymous, and the pseudonyms are bitcoin addresses. Avoiding address reuse is like throwing away a pseudonym after it has been used.",-1),j=e("h3",{id:"what-is-a-coinjoin-sudoku",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-a-coinjoin-sudoku"},[e("span",null,"What is a coinjoin Sudoku?")])],-1),S={href:"https://www.coinjoinsudoku.com/advisory/",target:"_blank",rel:"noopener noreferrer"},H=n('

    The Privacy of Tor

    How does Tor protect my network-level privacy?

    When you make a Bitcoin transaction, you are essentially creating a message on your phone or computer and sending it to the Bitcoin network. Someone operating a large number of nodes on the Bitcoin network might be able to match some of your transactions to your IP address, then deanonymize your stack of bitcoin.

    It is relatively easy to avoid this on a computer by relaying all transactions through the Tor network. Wasabi routes all traffic via Tor’s SOCKS5 proxy, by default.

    To maintain your anonymity, use the Tor Browser or the Tails operating system, if possible. Route everything through Tor by default.

    It is also good practice to route your chats through the Tor network. You can also configure many cloud storage providers in this way.

    Why does Tor process keep running after closing Wasabi Wallet?

    There are two main reasons: user experience and privacy.

    If a user closes Wasabi and then starts it again, he's already connected to Tor and he does not need to build a new Tor circuit. This means that Wasabi's startup will be much faster, because the Tor circuit is already established.

    Regarding the privacy, this is done to avoid time correlation attacks when using Wasabi Wallet. In fact, if a user creates a new Tor circuit every time he opens Wasabi Wallet, he would send a series of information to the Bitcoin network, which could allow a correlation and deanonymization of the user himself.

    My country/ISP is blocking/censoring Tor, how can I use Wasabi with Tor bridges?

    WARNING

    Feature not yet ported to Wasabi 2.0

    ',12),C={href:"https://www.torproject.org/docs/bridges",target:"_blank",rel:"noopener noreferrer"},D=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"If you are using Tor Browser Bundle it is extremely easy to configure it to use bridges. Configuring Tor bridges running in a daemon mode is more difficult and takes more time.")],-1),N=e("p",null,[e("strong",null,"Steps with Tor Browser:")],-1),R={href:"https://www.torproject.org/",target:"_blank",rel:"noopener noreferrer"},E=n("
  • Change the Settings of the Tor Browser to use one of the bridges or pluggable transports
  • Leave Tor Browser running after connecting with a bridge
  • Change the Settings of Wasabi Wallet and edit TorSocks5 Endpoint from 127.0.0.1:9050 to 127.0.0.1:9150
  • Restart Wasabi
  • ",4),Y=e("p",null,"After this, Wasabi will connect to Tor using the Tor Browser's connection via a random bridge.",-1),G=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"WARNING"),e("p",null,"To make use of Tor bridges on Wasabi, you must always keep Tor Browser open.")],-1),Q=e("p",null,[e("strong",null,"Steps with Tor Daemon on Linux:")],-1),z=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"These are commands for Debian. Feel free to edit these commands according to your distribution.")],-1),L={href:"https://bridges.torproject.org/bridges",target:"_blank",rel:"noopener noreferrer"},O=e("li",null,[i("Install Tor daemon with "),e("code",null,"sudo apt-get install tor")],-1),q=e("li",null,[i("Install OBFS4 support (needed to connect to bridges), by editing your "),e("code",null,"/etc/apt/sources.list"),i(" and adding this line:")],-1),U=n(`
    # Tor Bridges
     deb http://deb.torproject.org/torproject.org obfs4proxy main
     
    1. Update package list with sudo apt-get update and install OBFS4 with sudo apt-get install obfs4proxy
    2. Configure Tor by editing your /etc/tor/torrc file and adding these lines:
    UseBridges 1
     
    diff --git a/assets/FAQ-Installation.html-ByCwNgKw.js b/assets/FAQ-Installation.html-CuD82U_3.js
    similarity index 99%
    rename from assets/FAQ-Installation.html-ByCwNgKw.js
    rename to assets/FAQ-Installation.html-CuD82U_3.js
    index 9b50413826..f5fcad6f69 100644
    --- a/assets/FAQ-Installation.html-ByCwNgKw.js
    +++ b/assets/FAQ-Installation.html-CuD82U_3.js
    @@ -1 +1 @@
    -import{_ as s}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as h,a as d,b as c,c as u,d as w}from"./DownloadMac-DUSPDgNE.js";import{_ as b,r,o as p,c as f,a as e,b as a,d as t,w as i,e as l}from"./app-BPKesm5h.js";const g="/UpdateAvailable.png",_={},m=l('

    Installation of Wasabi

    Installing the Package

    Where can I download Wasabi?

    ',3),k={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},y={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/zksnacks/walletwasabi/releases",target:"_blank",rel:"noopener noreferrer"},W={href:"https://github.com/zksnacks/walletwasabi",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},I=e("h3",{id:"why-is-it-important-to-verify-pgp-signatures",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-is-it-important-to-verify-pgp-signatures"},[e("span",null,"Why is it important to verify PGP signatures?")])],-1),A=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"DANGER"),e("p",null,[e("strong",null,"Don't trust ~ verify.")])],-1),P=e("p",null,[a("These are not just empty words. Self sovereignty is at the core of Bitcoin in general, and Wasabi specifically. You have powerful tools at your disposal, yet they only work when used as they are designed. Wasabi is tailor made so that you do "),e("strong",null,"not"),a(" have to trust anyone, but you have the power to verify everything.")],-1),S={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},T={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},F={href:"https://pgp.key-server.io/search/zksnacks",target:"_blank",rel:"noopener noreferrer"},z={href:"https://en.wikipedia.org/wiki/Web_of_trust",target:"_blank",rel:"noopener noreferrer"},D={href:"https://youtu.be/psl35MisYxo?list=PLPj3KCksGbSZkVpgAZjAFfFp4D0SHLnFw",target:"_blank",rel:"noopener noreferrer"},C=e("img",{src:s,alt:"Watch the video"},null,-1),N=e("h3",{id:"how-can-i-verify-pgp-signatures",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-can-i-verify-pgp-signatures"},[e("span",null,"How can I verify PGP signatures?")])],-1),G={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},H=e("code",null,".asc",-1),B=e("code",null,"gpg --verify",-1),K=e("p",null,[a("Everything is valid if it returns "),e("code",null,"Good signature from zkSNACKs"),a(" and that it was signed with the "),e("code",null,"Primary key fingerprint: 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),a(".")],-1),j={href:"https://youtu.be/mTrClVA_o5A",target:"_blank",rel:"noopener noreferrer"},O=e("img",{src:s,alt:"Watch the video"},null,-1),L=e("h3",{id:"how-do-i-install-wasabi-on-debian-and-ubuntu",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-install-wasabi-on-debian-and-ubuntu"},[e("span",null,"How do I install Wasabi on Debian and Ubuntu?")])],-1),Q=e("code",null,".deb",-1),U=e("code",null,".deb.asc",-1),E={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},V={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},X=e("p",null,[e("img",{src:h,alt:"Download Wasabi Wallet for Debian",title:"Download Wasabi Wallet for Debian"})],-1),Y=e("code",null,"gpg --verify Wasabi-2.0.7.1.deb.asc Wasabi-2.0.7.1.deb",-1),q={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},M=e("code",null,"sudo apt install ./Wasabi-2.0.7.1.deb",-1),R=e("code",null,"wassabee",-1),Z={href:"https://youtu.be/mTrClVA_o5A?t=122",target:"_blank",rel:"noopener noreferrer"},J=e("img",{src:s,alt:"Watch the video"},null,-1),$=e("h3",{id:"how-do-i-install-wasabi-on-other-linux",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-install-wasabi-on-other-linux"},[e("span",null,"How do I install Wasabi on other Linux?")])],-1),ee=e("code",null,".tar.gz",-1),ae=e("code",null,".tar.gz.asc",-1),te={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},oe={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},ne=e("p",null,[e("img",{src:d,alt:"Download Wasabi Wallet for Linux",title:"Download Wasabi Wallet for Linux"})],-1),ie=e("code",null,"gpg --verify Wasabi-2.0.7.1.tar.gz.asc Wasabi-2.0.7.1.tar.gz",-1),se={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},le=e("code",null,"sudo tar -pxzf Wasabi-2.0.7.1.tar.gz",-1),re=e("code",null,"./wassabee",-1),he=e("h3",{id:"how-do-i-install-wasabi-on-windows",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-install-wasabi-on-windows"},[e("span",null,"How do I install Wasabi on Windows?")])],-1),de=e("code",null,".msi",-1),ce=e("code",null,".msi.asc",-1),ue={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},we={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},be=e("p",null,[e("img",{src:c,alt:"Download Wasabi Wallet for Windows",title:"Download Wasabi Wallet for Windows"})],-1),pe=e("p",null,"The Wasabi package is signed and automatically verified on Windows upon installation.",-1),fe=e("p",null,[e("img",{src:u,alt:"Wasabi Wallet Windows signature verification",title:"Wasabi Wallet Windows signature verification"})],-1),ge=e("code",null,"right-clicking on the signature file > More GpgEX options > Verify",-1),_e={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},me=e("code",null,".msi",-1),ke=e("h3",{id:"how-do-i-install-wasabi-on-macos",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-install-wasabi-on-macos"},[e("span",null,"How do I install Wasabi on macOS?")])],-1),ye=e("code",null,".dmg",-1),ve=e("code",null,".dmg.asc",-1),We={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},xe={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},Ie=e("p",null,[e("img",{src:w,alt:"Download Wasabi Wallet for macOS",title:"Download Wasabi Wallet for macOS"})],-1),Ae=e("p",null,"The Wasabi package is signed and automatically verified on macOS upon installation.",-1),Pe=e("code",null,"sudo gpg2 --verify Wasabi-2.0.7.1.dmg.asc",-1),Se={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},Te=e("code",null,".dmg",-1),Fe={href:"https://youtu.be/_Zmc54XYzBA",target:"_blank",rel:"noopener noreferrer"},ze=e("img",{src:s,alt:"Watch the video"},null,-1),De=l('

    Why are there two different packages for macOS (intel and Apple Silicon)?

    Intel and Apple Silicon are two different processors types that Apple uses for their computers. These processors work a bit differently from each other. With the architecture that Wasabi uses, these two different processors need their own specific code binary in order to make it work.

    What happens when I install the wrong package for macOS?

    Wasabi will crash on startup or run significantly slower than it should. This will not harm your computer.

    Do I need to install Tor separately?

    No, because Wasabi has Tor built into the software. All Wasabi network traffic goes via Tor by default - no need to set up Tor yourself.

    You can turn off Tor in the Settings. Be careful, as this will compromise your privacy. When you coinjoin over clearnet, the coordinator would know the links between your inputs and outputs based on your IP address. When you broadcast a transaction over clearnet, the connected full node will know the link between your transaction and your IP address.

    Can I use Wasabi on Tails?

    No, it is not possible to install Wasabi on Tails, because Wasabi uses the Tor control port, which is not exposed in this operating system.

    Can I use Wasabi on Whonix?

    No, it is not possible to install Wasabi on Whonix, because Wasabi uses the Tor control port, which is not exposed in this operating system.

    What are the differences between the Debian/Ubuntu version and the "Other Linux" version?

    Debian/Ubuntu version contains .deb package. Other Linux version contains .tar.gz package.

    The advantages of the .deb format is solely packaging related. It installs Wasabi in your computer, so you're able to access it from start menu, remove it through apt, and so on.

    The "Other Linux" option is just a generic install method not targeted to Debian/Ubuntu specifically but that works on it anyway because it is still linux.

    There's no difference in the code, the same binaries are being delivered in different formats.

    Update Wasabi

    Why should I update Wasabi?

    Wasabi is cutting edge software and is being worked on by the developers on a daily basis. Once in a while (+- every month) all the changes/improvements are being released in a new Wasabi version. The changes can contain (critical) bug fixes, small improvements, new features etc. It's always a good idea to run (one of) the latest Wasabi versions.

    How do I check the current version of Wasabi?

    In the GUI, go to the SearchBar at the top of the screen and click on About Wasabi. Here the current version of your Wasabi is displayed.

    You can also verify the version using the command line by executing wassabeed --version.

    Wasabi is cutting edge software, so it is well-advised to stay up-to-date.

    How do I know about a new version of Wasabi?

    When a new major version [v2.X.X] has been released, you'll see an orange update icon in the bottom right, upon hovering over it you can see Version 2.X.X is now available.

    Wasabi Update Available

    ',26),Ce=e("code",null,"Update",-1),Ne={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},Ge={href:"https://twitter.com/wasabiwallet",target:"_blank",rel:"noopener noreferrer"},He={href:"https://reddit.com/r/WasabiWallet/",target:"_blank",rel:"noopener noreferrer"},Be=e("h3",{id:"how-do-i-securely-upgrade-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-securely-upgrade-wasabi"},[e("span",null,"How do I securely upgrade Wasabi?")])],-1),Ke=e("p",null,"To upgrade Wasabi, you need to download the new version. Downloading and installing the newer Wasabi package will overwrite the previous one, while preserving your files like your wallets etc. So to upgrade Wasabi, simply download and install the new version like at first install.",-1),je={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},Oe={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},Le={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},Qe={href:"https://youtu.be/DUc9A76rwX4",target:"_blank",rel:"noopener noreferrer"},Ue=e("img",{src:s,alt:"Watch the video"},null,-1),Ee=l('

    What does Auto download new version in the settings mean?

    If enabled, the software will automatically download the new version's installer upon a new release. If disabled, the software will only signal, but not automatically download, that there is a new version available.

    Auto download new version is currently only available for Windows and macOS

    For Linux, this setting does not work. A new version will have to be installed manually.

    How does the Auto download new version work?

    ',4),Ve={href:"https://github.com/zkSNACKs/WalletWasabi/",target:"_blank",rel:"noopener noreferrer"},Xe=e("h2",{id:"advanced-installation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#advanced-installation"},[e("span",null,"Advanced Installation")])],-1),Ye=e("h3",{id:"how-do-i-compile-wasabi-from-source",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-compile-wasabi-from-source"},[e("span",null,"How do I compile Wasabi from source?")])],-1),qe={href:"https://git-scm.com/downloads",target:"_blank",rel:"noopener noreferrer"},Me={href:"https://dotnet.microsoft.com/download",target:"_blank",rel:"noopener noreferrer"},Re=e("code",null,"git clone https://github.com/zkSNACKs/WalletWasabi.git",-1),Ze=e("code",null,"WalletWasabi",-1),Je=e("code",null,"cd WalletWasabi/WalletWasabi.Fluent.Desktop",-1),$e=e("code",null,"dotnet run",-1),ea=e("code",null,"WalletWasabi.Fluent.Desktop",-1),aa=e("code",null,"git pull",-1),ta=e("h3",{id:"how-can-i-verify-the-deterministic-build",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-can-i-verify-the-deterministic-build"},[e("span",null,"How can I verify the deterministic build?")])],-1),oa={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/WalletWasabi.Documentation/Guides/DeterministicBuildGuide.md",target:"_blank",rel:"noopener noreferrer"},na=e("h3",{id:"my-antivirus-marks-wasabi-wallet-as-a-virus-am-i-downloading-the-right-software",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#my-antivirus-marks-wasabi-wallet-as-a-virus-am-i-downloading-the-right-software"},[e("span",null,"My antivirus marks Wasabi Wallet as a virus. Am I downloading the right software?")])],-1),ia={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},sa={href:"https://github.com/zkSNACKs/WalletWasabi/releases",target:"_blank",rel:"noopener noreferrer"},la=e("p",null,"If you have downloaded and verified digital signatures and your antivirus continues to report Wasabi as positive, you don't have to worry about anything; it is a false positive.",-1),ra={href:"https://www.virustotal.com/",target:"_blank",rel:"noopener noreferrer"},ha=l('

    TIP

    Remember to report Wasabi as a safe software/false positive to your antivirus. In doing so you will help users who use the same antivirus.

    Why is the executable called wassabee?

    The most obvious thing would be to call the executable Wasabi Wallet.exe on Windows and Wasabi Wallet on Linux and Mac.

    However launching Wasabi Wallet from certain terminals/command lines is problematic, so we should remove the spacing: WasabiWallet, and the case sensitivity differences between the operating systems can also cause issues, so that must go too: wasabiwallet.

    But it's too long, it needs a faster way to launch: wasabi.

    However this is too generic, it'll certainly cause conflicts, we need to make it unique: wassabee.

    ',6),da={href:"https://www.youtube.com/watch?v=dLzFKx6ONZQ",target:"_blank",rel:"noopener noreferrer"};function ca(ua,wa){const o=r("ExternalLinkIcon"),n=r("RouteLink");return p(),f("div",null,[m,e("p",null,[a("You can find the recent version of the compiled packages for Linux, Windows and Mac available on the official "),e("a",k,[a("wasabiwallet.io"),t(o)]),a(". It's always best to download software directly from the official source acknowledged by the developers. In order to preserve your network level privacy from the very first step on, please consider visiting the Tor onion service "),e("a",y,[a("wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion"),t(o)]),a(". The old versions of the software can be found in the "),e("a",v,[a("releases"),t(o)]),a(" of the GitHub repository, "),e("a",W,[a("here"),t(o)]),a(" you also find the libre & open source code for when you want to "),t(n,{to:"/using-wasabi/BuildSource.html"},{default:i(()=>[a("build it yourself")]),_:1}),a(". Please take special care to verify the PGP signatures of zkSNACKs' PGP public key "),e("a",x,[a("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(o)]),a(" over the software packages and code commits.")]),I,A,P,e("p",null,[a("With PGP signatures you can verify that the software package you download is actually the one by the developers. Every release of Wasabi is signed by "),e("a",S,[a("zkSNACKs"),t(o)]),a(", the company behind Wasabi. You can verify that the PGP public key "),e("a",T,[a("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(o)]),a(" is actually the one of "),e("a",F,[a("zkSNACKs"),t(o)]),a(" by exploring the "),e("a",z,[a("web of trust"),t(o)]),a(". When you have a software package that was signed by this PGP public key, then you can be sure that this is an official release approved by zkSNACKs. This protects you against malicious man in the middle attacks where bad guys give you a fake version of Wasabi with malicious code.")]),e("p",null,[e("a",D,[C,t(o)])]),N,e("p",null,[a("On the "),e("a",G,[a("WasabiWallet.io"),t(o)]),a(" website you can download the packages of the latest release. To verify the signature you also need to download the separate signature "),H,a(" file. In the terminal, change the directory to the one with the downloaded files, and verify the signature with "),B,a(" + the corresponding signature file name, depending on which operating system you are.")]),K,e("p",null,[a("For an in-depth guide for "),t(n,{to:"/using-wasabi/InstallPackage.html#debian-and-ubuntu"},{default:i(()=>[a("Debian and Ubuntu")]),_:1}),a(", "),t(n,{to:"/using-wasabi/InstallPackage.html#other-linux"},{default:i(()=>[a("other Linux")]),_:1}),a(", "),t(n,{to:"/using-wasabi/InstallPackage.html#windows"},{default:i(()=>[a("Windows")]),_:1}),a(", and "),t(n,{to:"/using-wasabi/InstallPackage.html#macOS"},{default:i(()=>[a("macOS")]),_:1}),a(" see the main documentation.")]),e("p",null,[e("a",j,[O,t(o)])]),L,e("p",null,[t(n,{to:"/FAQ/FAQ-Installation.html#where-can-i-download-wasabi"},{default:i(()=>[a("Download")]),_:1}),a(" the most recent "),Q,a(" package and the "),U,a(" signature file from the "),e("a",E,[a("wasabiwallet.io"),t(o)]),a(" or the "),e("a",V,[a("Tor onion service"),t(o)]),a(".")]),X,e("p",null,[a("Verify the signature of the package with "),Y,a(" and ensure that the software was signed by zkSNACKs' PGP public key "),e("a",q,[a("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(o)]),a(".")]),e("p",null,[a("Now install Wasabi with "),M,a(", and run it with "),R,a(". Check out the main documentation for a "),t(n,{to:"/using-wasabi/InstallPackage.html#debian-and-ubuntu"},{default:i(()=>[a("step-by-step guide")]),_:1}),a(".")]),e("p",null,[e("a",Z,[J,t(o)])]),$,e("p",null,[t(n,{to:"/FAQ/FAQ-Installation.html#where-can-i-download-wasabi"},{default:i(()=>[a("Download")]),_:1}),a(" the most recent "),ee,a(" package and the "),ae,a(" signature file from the "),e("a",te,[a("wasabiwallet.io"),t(o)]),a(" or the "),e("a",oe,[a("Tor onion service"),t(o)]),a(".")]),ne,e("p",null,[a("Verify the signature of the package with "),ie,a(" and ensure that the software was signed by zkSNACKs' PGP public key "),e("a",se,[a("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(o)]),a(". Now install Wasabi with "),le,a(", and run it with "),re,a(". Check out the main documentation for a "),t(n,{to:"/using-wasabi/InstallPackage.html#other-linux"},{default:i(()=>[a("step-by-step guide")]),_:1}),a(".")]),he,e("p",null,[t(n,{to:"/FAQ/FAQ-Installation.html#where-can-i-download-wasabi"},{default:i(()=>[a("Download")]),_:1}),a(" the most recent "),de,a(" package and the "),ce,a(" signature file from the "),e("a",ue,[a("wasabiwallet.io"),t(o)]),a(" or the "),e("a",we,[a("Tor onion service"),t(o)]),a(".")]),be,pe,fe,e("p",null,[a("Optionally, you can still verify the PGP signature of the package by "),ge,a(" and ensure the software was signed by zkSNACKs' PGP public key "),e("a",_e,[a("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(o)]),a(". Now install Wasabi by double-clicking the "),me,a(" file. Check out the main documentation for a "),t(n,{to:"/using-wasabi/InstallPackage.html#windows"},{default:i(()=>[a("step-by-step guide")]),_:1}),a(".")]),ke,e("p",null,[t(n,{to:"/FAQ-Installation.html#where-can-i-download-wasabi"},{default:i(()=>[a("Download")]),_:1}),a(" the most recent "),ye,a(" package and the "),ve,a(" signature file from the "),e("a",We,[a("wasabiwallet.io"),t(o)]),a(" or the "),e("a",xe,[a("Tor onion service"),t(o)]),a(".")]),Ie,Ae,e("p",null,[a("Optionally, you can still verify the PGP signature of the package with "),Pe,a(" and ensure that the software has been signed by zkSNACKs' PGP public key "),e("a",Se,[a("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(o)]),a(". Now install Wasabi by double-clicking the "),Te,a(" file. Check out the main documentation for a "),t(n,{to:"/using-wasabi/InstallPackage.html#macos"},{default:i(()=>[a("step-by-step guide")]),_:1}),a(".")]),e("p",null,[e("a",Fe,[ze,t(o)])]),De,e("p",null,[a("Clicking on "),Ce,a(" uses the default browser to go to the website, where you can download this new version. There are occasional silent releases like [v2.X.X.X] which fix small issues, and these are not announced in the GUI, so you will not see the orange update icon. The "),e("a",Ne,[a("website"),t(o)]),a(" always contains the most recent version. All releases (major and minor) are announced on the social media like "),e("a",Ge,[a("Twitter"),t(o)]),a(" and "),e("a",He,[a("Reddit"),t(o)]),a(".")]),Be,Ke,e("p",null,[a("You can download the software build for the different operating systems on the main "),e("a",je,[a("website"),t(o)]),a(" or better over "),e("a",Oe,[a("Tor"),t(o)]),a(". For extra security, it is reccommended to also download the signatures of the build and verify them with "),e("a",Le,[a("zkSNACKs' PGP public key"),t(o)]),a(". For step-by-step instructions, follow "),t(n,{to:"/using-wasabi/InstallPackage.html"},{default:i(()=>[a("this guide")]),_:1}),a(" or see this video: "),e("a",Qe,[Ue,t(o)])]),Ee,e("p",null,[a(`The software will automatically download the new version's installer upon a new release. After it is downloaded, the user can press "Update on Close" to run the installer when closing Wasabi. The installer is downloaded from `),e("a",Ve,[a("GitHub"),t(o)]),a(".")]),Xe,Ye,e("p",null,[a("If you cannot wait until the next release, and you want to experience the most cutting-edge version of Wasabi, then you can "),t(n,{to:"/using-wasabi/BuildSource.html"},{default:i(()=>[a("build the source code")]),_:1}),a(".")]),e("p",null,[a("The only two required tools are "),e("a",qe,[a("Git"),t(o)]),a(" and "),e("a",Me,[a(".NET 8.0 SDK"),t(o)]),a(' for "Build apps". You can download every line of the Wasabi code by '),Re,a(", this will create a new directory called "),Ze,a(". In order to build and run the Wallet software, change directory to "),Je,a(". Wasabi is written in C# with the .NET framework, and it is very easy to run it. Simply execute "),$e,a(" from the "),ea,a(" folder. You can update the master branch with "),aa,a(".")]),ta,e("p",null,[a("The guide for the deterministic builds can be found in the "),e("a",oa,[a("WalletWasabi repository"),t(o)]),a(".")]),na,e("p",null,[a("After you have downloaded Wasabi from the "),e("a",ia,[a("official website"),t(o)]),a(" or from the "),e("a",sa,[a("official GitHub repository"),t(o)]),a(", make sure you have "),t(n,{to:"/FAQ/FAQ-Installation.html#how-can-i-verify-pgp-signatures"},{default:i(()=>[a("verified the PGP signatures")]),_:1}),a(".")]),la,e("p",null,[a("If you are still not sure, before starting Wasabi, you can check that it is safe by uploading and scan it via "),e("a",ra,[a("VirusTotal"),t(o)]),a(".")]),ha,e("p",null,[a("Also, this sounds awesome and is a "),e("a",da,[a("fun inside joke"),t(o)]),a(".")])])}const ga=b(_,[["render",ca],["__file","FAQ-Installation.html.vue"]]),_a=JSON.parse('{"path":"/FAQ/FAQ-Installation.html","title":"Installation FAQ","lang":"en-US","frontmatter":{"title":"Installation FAQ","description":"Frequently asked questions about how to properly install Wasabi Wallet. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Installing the Package","slug":"installing-the-package","link":"#installing-the-package","children":[{"level":3,"title":"Where can I download Wasabi?","slug":"where-can-i-download-wasabi","link":"#where-can-i-download-wasabi","children":[]},{"level":3,"title":"Why is it important to verify PGP signatures?","slug":"why-is-it-important-to-verify-pgp-signatures","link":"#why-is-it-important-to-verify-pgp-signatures","children":[]},{"level":3,"title":"How can I verify PGP signatures?","slug":"how-can-i-verify-pgp-signatures","link":"#how-can-i-verify-pgp-signatures","children":[]},{"level":3,"title":"How do I install Wasabi on Debian and Ubuntu?","slug":"how-do-i-install-wasabi-on-debian-and-ubuntu","link":"#how-do-i-install-wasabi-on-debian-and-ubuntu","children":[]},{"level":3,"title":"How do I install Wasabi on other Linux?","slug":"how-do-i-install-wasabi-on-other-linux","link":"#how-do-i-install-wasabi-on-other-linux","children":[]},{"level":3,"title":"How do I install Wasabi on Windows?","slug":"how-do-i-install-wasabi-on-windows","link":"#how-do-i-install-wasabi-on-windows","children":[]},{"level":3,"title":"How do I install Wasabi on macOS?","slug":"how-do-i-install-wasabi-on-macos","link":"#how-do-i-install-wasabi-on-macos","children":[]},{"level":3,"title":"Why are there two different packages for macOS (intel and Apple Silicon)?","slug":"why-are-there-two-different-packages-for-macos-intel-and-apple-silicon","link":"#why-are-there-two-different-packages-for-macos-intel-and-apple-silicon","children":[]},{"level":3,"title":"What happens when I install the wrong package for macOS?","slug":"what-happens-when-i-install-the-wrong-package-for-macos","link":"#what-happens-when-i-install-the-wrong-package-for-macos","children":[]},{"level":3,"title":"Do I need to install Tor separately?","slug":"do-i-need-to-install-tor-separately","link":"#do-i-need-to-install-tor-separately","children":[]},{"level":3,"title":"Can I use Wasabi on Tails?","slug":"can-i-use-wasabi-on-tails","link":"#can-i-use-wasabi-on-tails","children":[]},{"level":3,"title":"Can I use Wasabi on Whonix?","slug":"can-i-use-wasabi-on-whonix","link":"#can-i-use-wasabi-on-whonix","children":[]},{"level":3,"title":"What are the differences between the Debian/Ubuntu version and the \\"Other Linux\\" version?","slug":"what-are-the-differences-between-the-debian-ubuntu-version-and-the-other-linux-version","link":"#what-are-the-differences-between-the-debian-ubuntu-version-and-the-other-linux-version","children":[]}]},{"level":2,"title":"Update Wasabi","slug":"update-wasabi","link":"#update-wasabi","children":[{"level":3,"title":"Why should I update Wasabi?","slug":"why-should-i-update-wasabi","link":"#why-should-i-update-wasabi","children":[]},{"level":3,"title":"How do I check the current version of Wasabi?","slug":"how-do-i-check-the-current-version-of-wasabi","link":"#how-do-i-check-the-current-version-of-wasabi","children":[]},{"level":3,"title":"How do I know about a new version of Wasabi?","slug":"how-do-i-know-about-a-new-version-of-wasabi","link":"#how-do-i-know-about-a-new-version-of-wasabi","children":[]},{"level":3,"title":"How do I securely upgrade Wasabi?","slug":"how-do-i-securely-upgrade-wasabi","link":"#how-do-i-securely-upgrade-wasabi","children":[]},{"level":3,"title":"What does Auto download new version in the settings mean?","slug":"what-does-auto-download-new-version-in-the-settings-mean","link":"#what-does-auto-download-new-version-in-the-settings-mean","children":[]},{"level":3,"title":"How does the Auto download new version work?","slug":"how-does-the-auto-download-new-version-work","link":"#how-does-the-auto-download-new-version-work","children":[]}]},{"level":2,"title":"Advanced Installation","slug":"advanced-installation","link":"#advanced-installation","children":[{"level":3,"title":"How do I compile Wasabi from source?","slug":"how-do-i-compile-wasabi-from-source","link":"#how-do-i-compile-wasabi-from-source","children":[]},{"level":3,"title":"How can I verify the deterministic build?","slug":"how-can-i-verify-the-deterministic-build","link":"#how-can-i-verify-the-deterministic-build","children":[]},{"level":3,"title":"My antivirus marks Wasabi Wallet as a virus. Am I downloading the right software?","slug":"my-antivirus-marks-wasabi-wallet-as-a-virus-am-i-downloading-the-right-software","link":"#my-antivirus-marks-wasabi-wallet-as-a-virus-am-i-downloading-the-right-software","children":[]},{"level":3,"title":"Why is the executable called wassabee?","slug":"why-is-the-executable-called-wassabee","link":"#why-is-the-executable-called-wassabee","children":[]}]}],"git":{"updatedTime":1705328487000},"filePathRelative":"FAQ/FAQ-Installation.md"}');export{ga as comp,_a as data}; +import{_ as s}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as h,a as d,b as c,c as u,d as w}from"./DownloadMac-DUSPDgNE.js";import{_ as b,r,o as p,c as f,a as e,b as a,d as t,w as i,e as l}from"./app-BgbPjqpx.js";const g="/UpdateAvailable.png",_={},m=l('

    Installation of Wasabi

    Installing the Package

    Where can I download Wasabi?

    ',3),k={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},y={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/zksnacks/walletwasabi/releases",target:"_blank",rel:"noopener noreferrer"},W={href:"https://github.com/zksnacks/walletwasabi",target:"_blank",rel:"noopener noreferrer"},x={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},I=e("h3",{id:"why-is-it-important-to-verify-pgp-signatures",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-is-it-important-to-verify-pgp-signatures"},[e("span",null,"Why is it important to verify PGP signatures?")])],-1),A=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"DANGER"),e("p",null,[e("strong",null,"Don't trust ~ verify.")])],-1),P=e("p",null,[a("These are not just empty words. Self sovereignty is at the core of Bitcoin in general, and Wasabi specifically. You have powerful tools at your disposal, yet they only work when used as they are designed. Wasabi is tailor made so that you do "),e("strong",null,"not"),a(" have to trust anyone, but you have the power to verify everything.")],-1),S={href:"https://zksnacks.com/",target:"_blank",rel:"noopener noreferrer"},T={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},F={href:"https://pgp.key-server.io/search/zksnacks",target:"_blank",rel:"noopener noreferrer"},z={href:"https://en.wikipedia.org/wiki/Web_of_trust",target:"_blank",rel:"noopener noreferrer"},D={href:"https://youtu.be/psl35MisYxo?list=PLPj3KCksGbSZkVpgAZjAFfFp4D0SHLnFw",target:"_blank",rel:"noopener noreferrer"},C=e("img",{src:s,alt:"Watch the video"},null,-1),N=e("h3",{id:"how-can-i-verify-pgp-signatures",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-can-i-verify-pgp-signatures"},[e("span",null,"How can I verify PGP signatures?")])],-1),G={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},H=e("code",null,".asc",-1),B=e("code",null,"gpg --verify",-1),K=e("p",null,[a("Everything is valid if it returns "),e("code",null,"Good signature from zkSNACKs"),a(" and that it was signed with the "),e("code",null,"Primary key fingerprint: 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),a(".")],-1),j={href:"https://youtu.be/mTrClVA_o5A",target:"_blank",rel:"noopener noreferrer"},O=e("img",{src:s,alt:"Watch the video"},null,-1),L=e("h3",{id:"how-do-i-install-wasabi-on-debian-and-ubuntu",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-install-wasabi-on-debian-and-ubuntu"},[e("span",null,"How do I install Wasabi on Debian and Ubuntu?")])],-1),Q=e("code",null,".deb",-1),U=e("code",null,".deb.asc",-1),E={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},V={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},X=e("p",null,[e("img",{src:h,alt:"Download Wasabi Wallet for Debian",title:"Download Wasabi Wallet for Debian"})],-1),Y=e("code",null,"gpg --verify Wasabi-2.0.7.1.deb.asc Wasabi-2.0.7.1.deb",-1),q={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},M=e("code",null,"sudo apt install ./Wasabi-2.0.7.1.deb",-1),R=e("code",null,"wassabee",-1),Z={href:"https://youtu.be/mTrClVA_o5A?t=122",target:"_blank",rel:"noopener noreferrer"},J=e("img",{src:s,alt:"Watch the video"},null,-1),$=e("h3",{id:"how-do-i-install-wasabi-on-other-linux",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-install-wasabi-on-other-linux"},[e("span",null,"How do I install Wasabi on other Linux?")])],-1),ee=e("code",null,".tar.gz",-1),ae=e("code",null,".tar.gz.asc",-1),te={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},oe={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},ne=e("p",null,[e("img",{src:d,alt:"Download Wasabi Wallet for Linux",title:"Download Wasabi Wallet for Linux"})],-1),ie=e("code",null,"gpg --verify Wasabi-2.0.7.1.tar.gz.asc Wasabi-2.0.7.1.tar.gz",-1),se={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},le=e("code",null,"sudo tar -pxzf Wasabi-2.0.7.1.tar.gz",-1),re=e("code",null,"./wassabee",-1),he=e("h3",{id:"how-do-i-install-wasabi-on-windows",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-install-wasabi-on-windows"},[e("span",null,"How do I install Wasabi on Windows?")])],-1),de=e("code",null,".msi",-1),ce=e("code",null,".msi.asc",-1),ue={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},we={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},be=e("p",null,[e("img",{src:c,alt:"Download Wasabi Wallet for Windows",title:"Download Wasabi Wallet for Windows"})],-1),pe=e("p",null,"The Wasabi package is signed and automatically verified on Windows upon installation.",-1),fe=e("p",null,[e("img",{src:u,alt:"Wasabi Wallet Windows signature verification",title:"Wasabi Wallet Windows signature verification"})],-1),ge=e("code",null,"right-clicking on the signature file > More GpgEX options > Verify",-1),_e={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},me=e("code",null,".msi",-1),ke=e("h3",{id:"how-do-i-install-wasabi-on-macos",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-install-wasabi-on-macos"},[e("span",null,"How do I install Wasabi on macOS?")])],-1),ye=e("code",null,".dmg",-1),ve=e("code",null,".dmg.asc",-1),We={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},xe={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},Ie=e("p",null,[e("img",{src:w,alt:"Download Wasabi Wallet for macOS",title:"Download Wasabi Wallet for macOS"})],-1),Ae=e("p",null,"The Wasabi package is signed and automatically verified on macOS upon installation.",-1),Pe=e("code",null,"sudo gpg2 --verify Wasabi-2.0.7.1.dmg.asc",-1),Se={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},Te=e("code",null,".dmg",-1),Fe={href:"https://youtu.be/_Zmc54XYzBA",target:"_blank",rel:"noopener noreferrer"},ze=e("img",{src:s,alt:"Watch the video"},null,-1),De=l('

    Why are there two different packages for macOS (intel and Apple Silicon)?

    Intel and Apple Silicon are two different processors types that Apple uses for their computers. These processors work a bit differently from each other. With the architecture that Wasabi uses, these two different processors need their own specific code binary in order to make it work.

    What happens when I install the wrong package for macOS?

    Wasabi will crash on startup or run significantly slower than it should. This will not harm your computer.

    Do I need to install Tor separately?

    No, because Wasabi has Tor built into the software. All Wasabi network traffic goes via Tor by default - no need to set up Tor yourself.

    You can turn off Tor in the Settings. Be careful, as this will compromise your privacy. When you coinjoin over clearnet, the coordinator would know the links between your inputs and outputs based on your IP address. When you broadcast a transaction over clearnet, the connected full node will know the link between your transaction and your IP address.

    Can I use Wasabi on Tails?

    No, it is not possible to install Wasabi on Tails, because Wasabi uses the Tor control port, which is not exposed in this operating system.

    Can I use Wasabi on Whonix?

    No, it is not possible to install Wasabi on Whonix, because Wasabi uses the Tor control port, which is not exposed in this operating system.

    What are the differences between the Debian/Ubuntu version and the "Other Linux" version?

    Debian/Ubuntu version contains .deb package. Other Linux version contains .tar.gz package.

    The advantages of the .deb format is solely packaging related. It installs Wasabi in your computer, so you're able to access it from start menu, remove it through apt, and so on.

    The "Other Linux" option is just a generic install method not targeted to Debian/Ubuntu specifically but that works on it anyway because it is still linux.

    There's no difference in the code, the same binaries are being delivered in different formats.

    Update Wasabi

    Why should I update Wasabi?

    Wasabi is cutting edge software and is being worked on by the developers on a daily basis. Once in a while (+- every month) all the changes/improvements are being released in a new Wasabi version. The changes can contain (critical) bug fixes, small improvements, new features etc. It's always a good idea to run (one of) the latest Wasabi versions.

    How do I check the current version of Wasabi?

    In the GUI, go to the SearchBar at the top of the screen and click on About Wasabi. Here the current version of your Wasabi is displayed.

    You can also verify the version using the command line by executing wassabeed --version.

    Wasabi is cutting edge software, so it is well-advised to stay up-to-date.

    How do I know about a new version of Wasabi?

    When a new major version [v2.X.X] has been released, you'll see an orange update icon in the bottom right, upon hovering over it you can see Version 2.X.X is now available.

    Wasabi Update Available

    ',26),Ce=e("code",null,"Update",-1),Ne={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},Ge={href:"https://twitter.com/wasabiwallet",target:"_blank",rel:"noopener noreferrer"},He={href:"https://reddit.com/r/WasabiWallet/",target:"_blank",rel:"noopener noreferrer"},Be=e("h3",{id:"how-do-i-securely-upgrade-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-securely-upgrade-wasabi"},[e("span",null,"How do I securely upgrade Wasabi?")])],-1),Ke=e("p",null,"To upgrade Wasabi, you need to download the new version. Downloading and installing the newer Wasabi package will overwrite the previous one, while preserving your files like your wallets etc. So to upgrade Wasabi, simply download and install the new version like at first install.",-1),je={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},Oe={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},Le={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},Qe={href:"https://youtu.be/DUc9A76rwX4",target:"_blank",rel:"noopener noreferrer"},Ue=e("img",{src:s,alt:"Watch the video"},null,-1),Ee=l('

    What does Auto download new version in the settings mean?

    If enabled, the software will automatically download the new version's installer upon a new release. If disabled, the software will only signal, but not automatically download, that there is a new version available.

    Auto download new version is currently only available for Windows and macOS

    For Linux, this setting does not work. A new version will have to be installed manually.

    How does the Auto download new version work?

    ',4),Ve={href:"https://github.com/zkSNACKs/WalletWasabi/",target:"_blank",rel:"noopener noreferrer"},Xe=e("h2",{id:"advanced-installation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#advanced-installation"},[e("span",null,"Advanced Installation")])],-1),Ye=e("h3",{id:"how-do-i-compile-wasabi-from-source",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-compile-wasabi-from-source"},[e("span",null,"How do I compile Wasabi from source?")])],-1),qe={href:"https://git-scm.com/downloads",target:"_blank",rel:"noopener noreferrer"},Me={href:"https://dotnet.microsoft.com/download",target:"_blank",rel:"noopener noreferrer"},Re=e("code",null,"git clone https://github.com/zkSNACKs/WalletWasabi.git",-1),Ze=e("code",null,"WalletWasabi",-1),Je=e("code",null,"cd WalletWasabi/WalletWasabi.Fluent.Desktop",-1),$e=e("code",null,"dotnet run",-1),ea=e("code",null,"WalletWasabi.Fluent.Desktop",-1),aa=e("code",null,"git pull",-1),ta=e("h3",{id:"how-can-i-verify-the-deterministic-build",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-can-i-verify-the-deterministic-build"},[e("span",null,"How can I verify the deterministic build?")])],-1),oa={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/WalletWasabi.Documentation/Guides/DeterministicBuildGuide.md",target:"_blank",rel:"noopener noreferrer"},na=e("h3",{id:"my-antivirus-marks-wasabi-wallet-as-a-virus-am-i-downloading-the-right-software",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#my-antivirus-marks-wasabi-wallet-as-a-virus-am-i-downloading-the-right-software"},[e("span",null,"My antivirus marks Wasabi Wallet as a virus. Am I downloading the right software?")])],-1),ia={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},sa={href:"https://github.com/zkSNACKs/WalletWasabi/releases",target:"_blank",rel:"noopener noreferrer"},la=e("p",null,"If you have downloaded and verified digital signatures and your antivirus continues to report Wasabi as positive, you don't have to worry about anything; it is a false positive.",-1),ra={href:"https://www.virustotal.com/",target:"_blank",rel:"noopener noreferrer"},ha=l('

    TIP

    Remember to report Wasabi as a safe software/false positive to your antivirus. In doing so you will help users who use the same antivirus.

    Why is the executable called wassabee?

    The most obvious thing would be to call the executable Wasabi Wallet.exe on Windows and Wasabi Wallet on Linux and Mac.

    However launching Wasabi Wallet from certain terminals/command lines is problematic, so we should remove the spacing: WasabiWallet, and the case sensitivity differences between the operating systems can also cause issues, so that must go too: wasabiwallet.

    But it's too long, it needs a faster way to launch: wasabi.

    However this is too generic, it'll certainly cause conflicts, we need to make it unique: wassabee.

    ',6),da={href:"https://www.youtube.com/watch?v=dLzFKx6ONZQ",target:"_blank",rel:"noopener noreferrer"};function ca(ua,wa){const o=r("ExternalLinkIcon"),n=r("RouteLink");return p(),f("div",null,[m,e("p",null,[a("You can find the recent version of the compiled packages for Linux, Windows and Mac available on the official "),e("a",k,[a("wasabiwallet.io"),t(o)]),a(". It's always best to download software directly from the official source acknowledged by the developers. In order to preserve your network level privacy from the very first step on, please consider visiting the Tor onion service "),e("a",y,[a("wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion"),t(o)]),a(". The old versions of the software can be found in the "),e("a",v,[a("releases"),t(o)]),a(" of the GitHub repository, "),e("a",W,[a("here"),t(o)]),a(" you also find the libre & open source code for when you want to "),t(n,{to:"/using-wasabi/BuildSource.html"},{default:i(()=>[a("build it yourself")]),_:1}),a(". Please take special care to verify the PGP signatures of zkSNACKs' PGP public key "),e("a",x,[a("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(o)]),a(" over the software packages and code commits.")]),I,A,P,e("p",null,[a("With PGP signatures you can verify that the software package you download is actually the one by the developers. Every release of Wasabi is signed by "),e("a",S,[a("zkSNACKs"),t(o)]),a(", the company behind Wasabi. You can verify that the PGP public key "),e("a",T,[a("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(o)]),a(" is actually the one of "),e("a",F,[a("zkSNACKs"),t(o)]),a(" by exploring the "),e("a",z,[a("web of trust"),t(o)]),a(". When you have a software package that was signed by this PGP public key, then you can be sure that this is an official release approved by zkSNACKs. This protects you against malicious man in the middle attacks where bad guys give you a fake version of Wasabi with malicious code.")]),e("p",null,[e("a",D,[C,t(o)])]),N,e("p",null,[a("On the "),e("a",G,[a("WasabiWallet.io"),t(o)]),a(" website you can download the packages of the latest release. To verify the signature you also need to download the separate signature "),H,a(" file. In the terminal, change the directory to the one with the downloaded files, and verify the signature with "),B,a(" + the corresponding signature file name, depending on which operating system you are.")]),K,e("p",null,[a("For an in-depth guide for "),t(n,{to:"/using-wasabi/InstallPackage.html#debian-and-ubuntu"},{default:i(()=>[a("Debian and Ubuntu")]),_:1}),a(", "),t(n,{to:"/using-wasabi/InstallPackage.html#other-linux"},{default:i(()=>[a("other Linux")]),_:1}),a(", "),t(n,{to:"/using-wasabi/InstallPackage.html#windows"},{default:i(()=>[a("Windows")]),_:1}),a(", and "),t(n,{to:"/using-wasabi/InstallPackage.html#macOS"},{default:i(()=>[a("macOS")]),_:1}),a(" see the main documentation.")]),e("p",null,[e("a",j,[O,t(o)])]),L,e("p",null,[t(n,{to:"/FAQ/FAQ-Installation.html#where-can-i-download-wasabi"},{default:i(()=>[a("Download")]),_:1}),a(" the most recent "),Q,a(" package and the "),U,a(" signature file from the "),e("a",E,[a("wasabiwallet.io"),t(o)]),a(" or the "),e("a",V,[a("Tor onion service"),t(o)]),a(".")]),X,e("p",null,[a("Verify the signature of the package with "),Y,a(" and ensure that the software was signed by zkSNACKs' PGP public key "),e("a",q,[a("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(o)]),a(".")]),e("p",null,[a("Now install Wasabi with "),M,a(", and run it with "),R,a(". Check out the main documentation for a "),t(n,{to:"/using-wasabi/InstallPackage.html#debian-and-ubuntu"},{default:i(()=>[a("step-by-step guide")]),_:1}),a(".")]),e("p",null,[e("a",Z,[J,t(o)])]),$,e("p",null,[t(n,{to:"/FAQ/FAQ-Installation.html#where-can-i-download-wasabi"},{default:i(()=>[a("Download")]),_:1}),a(" the most recent "),ee,a(" package and the "),ae,a(" signature file from the "),e("a",te,[a("wasabiwallet.io"),t(o)]),a(" or the "),e("a",oe,[a("Tor onion service"),t(o)]),a(".")]),ne,e("p",null,[a("Verify the signature of the package with "),ie,a(" and ensure that the software was signed by zkSNACKs' PGP public key "),e("a",se,[a("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(o)]),a(". Now install Wasabi with "),le,a(", and run it with "),re,a(". Check out the main documentation for a "),t(n,{to:"/using-wasabi/InstallPackage.html#other-linux"},{default:i(()=>[a("step-by-step guide")]),_:1}),a(".")]),he,e("p",null,[t(n,{to:"/FAQ/FAQ-Installation.html#where-can-i-download-wasabi"},{default:i(()=>[a("Download")]),_:1}),a(" the most recent "),de,a(" package and the "),ce,a(" signature file from the "),e("a",ue,[a("wasabiwallet.io"),t(o)]),a(" or the "),e("a",we,[a("Tor onion service"),t(o)]),a(".")]),be,pe,fe,e("p",null,[a("Optionally, you can still verify the PGP signature of the package by "),ge,a(" and ensure the software was signed by zkSNACKs' PGP public key "),e("a",_e,[a("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(o)]),a(". Now install Wasabi by double-clicking the "),me,a(" file. Check out the main documentation for a "),t(n,{to:"/using-wasabi/InstallPackage.html#windows"},{default:i(()=>[a("step-by-step guide")]),_:1}),a(".")]),ke,e("p",null,[t(n,{to:"/FAQ-Installation.html#where-can-i-download-wasabi"},{default:i(()=>[a("Download")]),_:1}),a(" the most recent "),ye,a(" package and the "),ve,a(" signature file from the "),e("a",We,[a("wasabiwallet.io"),t(o)]),a(" or the "),e("a",xe,[a("Tor onion service"),t(o)]),a(".")]),Ie,Ae,e("p",null,[a("Optionally, you can still verify the PGP signature of the package with "),Pe,a(" and ensure that the software has been signed by zkSNACKs' PGP public key "),e("a",Se,[a("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(o)]),a(". Now install Wasabi by double-clicking the "),Te,a(" file. Check out the main documentation for a "),t(n,{to:"/using-wasabi/InstallPackage.html#macos"},{default:i(()=>[a("step-by-step guide")]),_:1}),a(".")]),e("p",null,[e("a",Fe,[ze,t(o)])]),De,e("p",null,[a("Clicking on "),Ce,a(" uses the default browser to go to the website, where you can download this new version. There are occasional silent releases like [v2.X.X.X] which fix small issues, and these are not announced in the GUI, so you will not see the orange update icon. The "),e("a",Ne,[a("website"),t(o)]),a(" always contains the most recent version. All releases (major and minor) are announced on the social media like "),e("a",Ge,[a("Twitter"),t(o)]),a(" and "),e("a",He,[a("Reddit"),t(o)]),a(".")]),Be,Ke,e("p",null,[a("You can download the software build for the different operating systems on the main "),e("a",je,[a("website"),t(o)]),a(" or better over "),e("a",Oe,[a("Tor"),t(o)]),a(". For extra security, it is reccommended to also download the signatures of the build and verify them with "),e("a",Le,[a("zkSNACKs' PGP public key"),t(o)]),a(". For step-by-step instructions, follow "),t(n,{to:"/using-wasabi/InstallPackage.html"},{default:i(()=>[a("this guide")]),_:1}),a(" or see this video: "),e("a",Qe,[Ue,t(o)])]),Ee,e("p",null,[a(`The software will automatically download the new version's installer upon a new release. After it is downloaded, the user can press "Update on Close" to run the installer when closing Wasabi. The installer is downloaded from `),e("a",Ve,[a("GitHub"),t(o)]),a(".")]),Xe,Ye,e("p",null,[a("If you cannot wait until the next release, and you want to experience the most cutting-edge version of Wasabi, then you can "),t(n,{to:"/using-wasabi/BuildSource.html"},{default:i(()=>[a("build the source code")]),_:1}),a(".")]),e("p",null,[a("The only two required tools are "),e("a",qe,[a("Git"),t(o)]),a(" and "),e("a",Me,[a(".NET 8.0 SDK"),t(o)]),a(' for "Build apps". You can download every line of the Wasabi code by '),Re,a(", this will create a new directory called "),Ze,a(". In order to build and run the Wallet software, change directory to "),Je,a(". Wasabi is written in C# with the .NET framework, and it is very easy to run it. Simply execute "),$e,a(" from the "),ea,a(" folder. You can update the master branch with "),aa,a(".")]),ta,e("p",null,[a("The guide for the deterministic builds can be found in the "),e("a",oa,[a("WalletWasabi repository"),t(o)]),a(".")]),na,e("p",null,[a("After you have downloaded Wasabi from the "),e("a",ia,[a("official website"),t(o)]),a(" or from the "),e("a",sa,[a("official GitHub repository"),t(o)]),a(", make sure you have "),t(n,{to:"/FAQ/FAQ-Installation.html#how-can-i-verify-pgp-signatures"},{default:i(()=>[a("verified the PGP signatures")]),_:1}),a(".")]),la,e("p",null,[a("If you are still not sure, before starting Wasabi, you can check that it is safe by uploading and scan it via "),e("a",ra,[a("VirusTotal"),t(o)]),a(".")]),ha,e("p",null,[a("Also, this sounds awesome and is a "),e("a",da,[a("fun inside joke"),t(o)]),a(".")])])}const ga=b(_,[["render",ca],["__file","FAQ-Installation.html.vue"]]),_a=JSON.parse('{"path":"/FAQ/FAQ-Installation.html","title":"Installation FAQ","lang":"en-US","frontmatter":{"title":"Installation FAQ","description":"Frequently asked questions about how to properly install Wasabi Wallet. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Installing the Package","slug":"installing-the-package","link":"#installing-the-package","children":[{"level":3,"title":"Where can I download Wasabi?","slug":"where-can-i-download-wasabi","link":"#where-can-i-download-wasabi","children":[]},{"level":3,"title":"Why is it important to verify PGP signatures?","slug":"why-is-it-important-to-verify-pgp-signatures","link":"#why-is-it-important-to-verify-pgp-signatures","children":[]},{"level":3,"title":"How can I verify PGP signatures?","slug":"how-can-i-verify-pgp-signatures","link":"#how-can-i-verify-pgp-signatures","children":[]},{"level":3,"title":"How do I install Wasabi on Debian and Ubuntu?","slug":"how-do-i-install-wasabi-on-debian-and-ubuntu","link":"#how-do-i-install-wasabi-on-debian-and-ubuntu","children":[]},{"level":3,"title":"How do I install Wasabi on other Linux?","slug":"how-do-i-install-wasabi-on-other-linux","link":"#how-do-i-install-wasabi-on-other-linux","children":[]},{"level":3,"title":"How do I install Wasabi on Windows?","slug":"how-do-i-install-wasabi-on-windows","link":"#how-do-i-install-wasabi-on-windows","children":[]},{"level":3,"title":"How do I install Wasabi on macOS?","slug":"how-do-i-install-wasabi-on-macos","link":"#how-do-i-install-wasabi-on-macos","children":[]},{"level":3,"title":"Why are there two different packages for macOS (intel and Apple Silicon)?","slug":"why-are-there-two-different-packages-for-macos-intel-and-apple-silicon","link":"#why-are-there-two-different-packages-for-macos-intel-and-apple-silicon","children":[]},{"level":3,"title":"What happens when I install the wrong package for macOS?","slug":"what-happens-when-i-install-the-wrong-package-for-macos","link":"#what-happens-when-i-install-the-wrong-package-for-macos","children":[]},{"level":3,"title":"Do I need to install Tor separately?","slug":"do-i-need-to-install-tor-separately","link":"#do-i-need-to-install-tor-separately","children":[]},{"level":3,"title":"Can I use Wasabi on Tails?","slug":"can-i-use-wasabi-on-tails","link":"#can-i-use-wasabi-on-tails","children":[]},{"level":3,"title":"Can I use Wasabi on Whonix?","slug":"can-i-use-wasabi-on-whonix","link":"#can-i-use-wasabi-on-whonix","children":[]},{"level":3,"title":"What are the differences between the Debian/Ubuntu version and the \\"Other Linux\\" version?","slug":"what-are-the-differences-between-the-debian-ubuntu-version-and-the-other-linux-version","link":"#what-are-the-differences-between-the-debian-ubuntu-version-and-the-other-linux-version","children":[]}]},{"level":2,"title":"Update Wasabi","slug":"update-wasabi","link":"#update-wasabi","children":[{"level":3,"title":"Why should I update Wasabi?","slug":"why-should-i-update-wasabi","link":"#why-should-i-update-wasabi","children":[]},{"level":3,"title":"How do I check the current version of Wasabi?","slug":"how-do-i-check-the-current-version-of-wasabi","link":"#how-do-i-check-the-current-version-of-wasabi","children":[]},{"level":3,"title":"How do I know about a new version of Wasabi?","slug":"how-do-i-know-about-a-new-version-of-wasabi","link":"#how-do-i-know-about-a-new-version-of-wasabi","children":[]},{"level":3,"title":"How do I securely upgrade Wasabi?","slug":"how-do-i-securely-upgrade-wasabi","link":"#how-do-i-securely-upgrade-wasabi","children":[]},{"level":3,"title":"What does Auto download new version in the settings mean?","slug":"what-does-auto-download-new-version-in-the-settings-mean","link":"#what-does-auto-download-new-version-in-the-settings-mean","children":[]},{"level":3,"title":"How does the Auto download new version work?","slug":"how-does-the-auto-download-new-version-work","link":"#how-does-the-auto-download-new-version-work","children":[]}]},{"level":2,"title":"Advanced Installation","slug":"advanced-installation","link":"#advanced-installation","children":[{"level":3,"title":"How do I compile Wasabi from source?","slug":"how-do-i-compile-wasabi-from-source","link":"#how-do-i-compile-wasabi-from-source","children":[]},{"level":3,"title":"How can I verify the deterministic build?","slug":"how-can-i-verify-the-deterministic-build","link":"#how-can-i-verify-the-deterministic-build","children":[]},{"level":3,"title":"My antivirus marks Wasabi Wallet as a virus. Am I downloading the right software?","slug":"my-antivirus-marks-wasabi-wallet-as-a-virus-am-i-downloading-the-right-software","link":"#my-antivirus-marks-wasabi-wallet-as-a-virus-am-i-downloading-the-right-software","children":[]},{"level":3,"title":"Why is the executable called wassabee?","slug":"why-is-the-executable-called-wassabee","link":"#why-is-the-executable-called-wassabee","children":[]}]}],"git":{"updatedTime":1705328487000},"filePathRelative":"FAQ/FAQ-Installation.md"}');export{ga as comp,_a as data}; diff --git a/assets/FAQ-Introduction.html-D5UobHXe.js b/assets/FAQ-Introduction.html-C7cqAIG6.js similarity index 99% rename from assets/FAQ-Introduction.html-D5UobHXe.js rename to assets/FAQ-Introduction.html-C7cqAIG6.js index 62f99f3b4e..472df8d8d9 100644 --- a/assets/FAQ-Introduction.html-D5UobHXe.js +++ b/assets/FAQ-Introduction.html-C7cqAIG6.js @@ -1 +1 @@ -import{_ as l}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as h,r,o as c,c as d,a as e,b as t,d as a,w as s,e as n}from"./app-BPKesm5h.js";const u={},p=n('

    Introduction to Wasabi

    The Basics

    Who can use Wasabi?

    ',3),b={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Fluent.Desktop",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Backend",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Daemon",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Tests",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Packager",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi",target:"_blank",rel:"noopener noreferrer"},k={href:"https://wasabiwallet.io/swagger/",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/zkSNACKs/WasabiDoc",target:"_blank",rel:"noopener noreferrer"},W={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/LICENSE.md",target:"_blank",rel:"noopener noreferrer"},v=e("p",null,"Wasabi is used by individuals to make everyday payments, to manage their hardware wallet long term hodlings, and to CoinJoin their sats for added privacy. Entrepreneurs may use Wasabi to defend their customers from spies and to ensure a private business relationship. While kids may use Wasabi to stack the sats gifted by grandma, and learn the importance of hodling.",-1),x=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"Wasabi is a tool for everyone.")],-1),T=e("h3",{id:"what-is-a-coinjoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-a-coinjoin"},[e("span",null,"What is a coinjoin?")])],-1),A=e("p",null,"Coinjoin is a mechanism by which multiple participants combine their coins (or UTXOs, to be more precise) into one large transaction with multiple inputs and multiple outputs. An observer cannot determine which output belongs to which input, and neither can the participants themselves. This makes it difficult for outside parties to trace where a particular coin originated from and where it was sent to (as opposed to regular bitcoin transactions, where there is usually one sender and one receiver).",-1),S=e("p",null,"This can be done with non-custodial software like Wasabi that eliminates the risk of funds disappearing or being stolen. Each of the signatures are created on the participants’ computers after thorough verification, so nobody can alter the transaction or redirect the funds. The funds will always be in a Bitcoin address that you control.",-1),C=e("p",null,"In very simple terms, coinjoin means: “when you want to make a transaction, find someone else who also wants to make a transaction and make a joint transaction together”.",-1),I={href:"https://en.bitcoin.it/wiki/CoinJoin",target:"_blank",rel:"noopener noreferrer"},N=e("h3",{id:"do-i-need-to-trust-wasabi-with-my-coins",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#do-i-need-to-trust-wasabi-with-my-coins"},[e("span",null,"Do I need to trust Wasabi with my coins?")])],-1),B=e("h3",{id:"what-is-the-privacy-i-get-after-mixing-with-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-the-privacy-i-get-after-mixing-with-wasabi"},[e("span",null,"What is the privacy I get after mixing with Wasabi?")])],-1),z=n('

    Why is Wasabi Bitcoin-only?

    There are countless reasons why it is the only logical choice to be bitcoin-only. With Bitcoin we have a once in a lifetime opportunity to manifest libre sound money. If we succeed, then an utmost beautiful agora of sovereign individuals may emerge. If we fail, then this will conjure up the most horrific Orwellian nightmare. There is no room for wasted time and energy, this great work requires our full attention. Any line of code written to support a random shitcoin takes away scarce developer time to work on real problems.

    What is considered a sufficient anonymity score?

    It is difficult to determine a sufficient anonymity score since enough research hasn’t been conducted to provide a definitive answer. The right anonymity score depends on your own personal threat model. However, to be on the safe side, with Wasabi Wallet 2.0 an anonymity score of 5 and above could be considered sufficient.

    Is there a way to check Wasabi's uptime status?

    ',5),j={href:"https://stats.uptimerobot.com/YQqGyUL8A7",target:"_blank",rel:"noopener noreferrer"},F=e("h3",{id:"what-software-supplies-the-block-filters-that-wasabi-uses",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-software-supplies-the-block-filters-that-wasabi-uses"},[e("span",null,"What software supplies the block filters that Wasabi uses?")])],-1),Q={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Backend",target:"_blank",rel:"noopener noreferrer"},K=e("h3",{id:"is-the-backend-s-coordinator-code-open-source",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#is-the-backend-s-coordinator-code-open-source"},[e("span",null,"Is the Backend's (Coordinator) code open-source?")])],-1),q={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Backend",target:"_blank",rel:"noopener noreferrer"},O=e("h3",{id:"is-there-an-android-ios-version",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#is-there-an-android-ios-version"},[e("span",null,"Is there an Android/iOs version?")])],-1),M=e("p",null,"No, Wasabi and CoinJoin features require considerable computational power, not currently replicable on a smartphone.",-1),E=e("h3",{id:"where-can-i-find-wasabi-wallet-on-social-media",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#where-can-i-find-wasabi-wallet-on-social-media"},[e("span",null,"Where can I find Wasabi Wallet on social media?")])],-1),D={href:"https://twitter.com/wasabiwallet",target:"_blank",rel:"noopener noreferrer"},Y={href:"https://www.reddit.com/r/WasabiWallet/",target:"_blank",rel:"noopener noreferrer"},U={href:"https://www.youtube.com/c/WasabiWallet",target:"_blank",rel:"noopener noreferrer"},L={href:"https://www.facebook.com/officialwasabiwallet/",target:"_blank",rel:"noopener noreferrer"},P={href:"https://www.instagram.com/wasabi_wallet/",target:"_blank",rel:"noopener noreferrer"},R={href:"https://discord.com/invite/nm7YHEZnJs",target:"_blank",rel:"noopener noreferrer"},H={href:"https://join.slack.com/t/tumblebit/shared_invite/enQtNjQ1MTQ2NzQ1ODI0LWIzOTg5YTM3YmNkOTg1NjZmZTQ3NmM1OTAzYmQyYzk1M2M0MTdlZDk2OTQwNzFiNTg1ZmExNzM0NjgzY2M0Yzg",target:"_blank",rel:"noopener noreferrer"},J={href:"https://t.me/WasabiWallet",target:"_blank",rel:"noopener noreferrer"},V={href:"https://keybase.io/team/wasabiwallet",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://blog.wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},G=e("h2",{id:"for-advanced-wasabikas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#for-advanced-wasabikas"},[e("span",null,"For advanced Wasabikas")])],-1),X=e("h3",{id:"can-the-coordinator-attack-me",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#can-the-coordinator-attack-me"},[e("span",null,"Can the coordinator attack me?")])],-1),$=e("p",null,"The developers have gone to great lengths to ensure that the coordinator cannot steal funds nor link inputs to outputs. The nature of Wasabi is that you should not need to trust the developers or the Wasabi coordinating server, as you can verify that the code does not leak information to anyone. Due to the nature of coinjoin transactions users don't need to trust other users or the coordinator against theft, leaving denial of service and attacks on privacy as the main concerns",-1),ee=e("p",null,[t("The only known possible 'malicious' actions that the server "),e("em",null,"could"),t(" perform are two sides of the same coin;")],-1),te=e("li",null,[e("strong",null,"Blacklisted UTXO's"),t(": Though this would not affect the users who are able to successfully mix with other 'honest/real' peers.")],-1),ae=e("strong",null,"Targeted Sybil Attack",-1),oe=e("em",null,"only",-1),ie=e("strong",null,"but does not worsen the existing privacy of the coin",-1),se={href:"https://github.com/zkSNACKs/WabiSabi/blob/master/protocol.md#attacks-on-privacy",target:"_blank",rel:"noopener noreferrer"},ne=e("h3",{id:"what-is-the-history-of-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-the-history-of-wasabi"},[e("span",null,"What is the history of Wasabi?")])],-1),re={href:"https://docs.google.com/drawings/d/1wLL7aSgYBWNoyzllg6_haisFt-gQCf-QUzVzQPkARts/edit",target:"_blank",rel:"noopener noreferrer"},le=e("ul",null,[e("li",null,"The 1.0 Beta release was on August 1, 2018 (on the first anniversary of UASF)"),e("li",null,"The 1.0 release was on October 31, 2018 (on the tenth anniversary of the Bitcoin Whitepaper)"),e("li",null,"The 2.0 Testnet release was on March 1, 2022"),e("li",null,"The 2.0 release was on June 15, 2022")],-1),he={href:"https://youtu.be/XORDEX-RrAI?t=6420",target:"_blank",rel:"noopener noreferrer"},ce=e("img",{src:l,alt:"Watch the video"},null,-1),de={href:"https://youtu.be/b1Vligm0SO8",target:"_blank",rel:"noopener noreferrer"},ue=e("img",{src:l,alt:"Watch the video"},null,-1),pe=e("h3",{id:"why-is-wasabi-libre-and-open-source-software",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-is-wasabi-libre-and-open-source-software"},[e("span",null,"Why is Wasabi libre and open-source software?")])],-1),be={href:"https://github.com/zkSNACKs/WalletWasabi/",target:"_blank",rel:"noopener noreferrer"},me={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/LICENSE.md",target:"_blank",rel:"noopener noreferrer"},fe=n('

    Control

    Many people prefer open-source software because they have more control over the software they run.

    They can examine the code to make sure it's not doing anything they don't want it to do, and they can change parts of it they don't like. Users who aren't programmers also benefit from open-source software, since they can use this software for any purpose.

    Training

    Other people like open-source software because it helps them become better programmers.

    Open-source code is publicly accessible. Students can easily study it as they learn to make better software. Students can also share their work with others, inviting comments and critique, as they develop their skills. When people discover mistakes in programs' source code, they can share those mistakes with others to help them avoid making those same mistakes themselves.

    Security

    Some people prefer open-source software because they consider it more secure and stable than proprietary software.

    Anyone can view and modify open-source software. Other users may spot and correct errors or omissions that a program's original authors might have missed. And because so many programmers can work on a piece of open-source software without asking for permission from original authors, they can fix, update, and upgrade open-source software more quickly than they can proprietary software.

    Stability

    Many users prefer open-source software to proprietary software for important, long-term projects.

    Programmers publicly distribute the source code for open-source software. Users relying on that software for critical tasks can be sure their tools won't disappear or fall into disrepair if their original creators stop working on them. Additionally, open-source software tends to both incorporate and operate according to open standards.

    What is the general idea of WabiSabi coinjoin?

    While fungibility is an essential property of good money, Bitcoin has its limitations in this area. Numerous fungibility improvements have been proposed; however, none of them have addressed the privacy issues in full. WabiSabi is designed so that no participant, outside observer or even the coordinator can spy on the user. The scope of WabiSabi is not limited to a single transaction, it extends to transaction chains and it addresses various network layer deanonymizations. However, its scope is limited to Bitcoin's first layer. Even if an off-chain anonymity solution gets widely adopted, ultimately the entrance and exit transactions will always be settled on-chain. Therefore, there will always be need for on-chain privacy.

    Ideal fungibility requires every Bitcoin transaction to be indistinguishable from each other, but it is an unrealistic goal. WabiSabi's objective is to break all links between coins. Thus, WabiSabi enables the usage of Bitcoin in a fully anonymous way.

    ',11),we={href:"https://github.com/zksnacks/wabisabi",target:"_blank",rel:"noopener noreferrer"},ye=e("h3",{id:"what-are-the-supported-operating-systems",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-are-the-supported-operating-systems"},[e("span",null,"What are the supported operating systems?")])],-1),ge={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/WalletWasabi.Documentation/WasabiCompatibility.md#officially-supported-operating-systems",target:"_blank",rel:"noopener noreferrer"},ke=e("h3",{id:"what-are-the-minimal-requirements-to-run-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-are-the-minimal-requirements-to-run-wasabi"},[e("span",null,"What are the minimal requirements to run Wasabi?")])],-1),_e={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/WalletWasabi.Documentation/WasabiCompatibility.md#officially-supported-operating-systems",target:"_blank",rel:"noopener noreferrer"},We={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Daemon",target:"_blank",rel:"noopener noreferrer"};function ve(xe,Te){const o=r("ExternalLinkIcon"),i=r("RouteLink");return c(),d("div",null,[p,e("p",null,[t("Every single line of code in Wasabi, the "),e("a",b,[t("wallet"),a(o)]),t(", the "),e("a",m,[t("backend server"),a(o)]),t(", the "),e("a",f,[t("daemon"),a(o)]),t(", the "),e("a",w,[t("tests"),a(o)]),t(", the "),e("a",y,[t("packager"),a(o)]),t(", the "),e("a",g,[t("library"),a(o)]),t(", the "),e("a",k,[t("api"),a(o)]),t(", the "),e("a",_,[t("documentation"),a(o)]),t(" - has always been and will always be libre and open-source under the "),e("a",W,[t("MIT license"),a(o)]),t(". This means that anyone, yes, ANYONE can use Wasabi without permission, for any use case, free of charge.")]),v,x,T,A,S,C,e("p",null,[t("See also the "),e("a",I,[t("Bitcoin Wiki on coinjoins"),a(o)])]),N,e("p",null,[t("Since Wasabi's coinjoin implementation is trustless by design, there is no need for participants to trust each other or a third party. Both the sending address (the coinjoin input) and the receiving address (the coinjoin output) are controlled by your own private keys. The Wasabi server merely coordinates the process of combining each participant's input into one single transaction, but the Wasabi Wallet can neither steal your coins, nor figure out which outputs belong to which inputs (look up “"),a(i,{to:"/using-wasabi/CoinJoin.html"},{default:s(()=>[t("WabiSabi coinjoin")]),_:1}),t("” if you want to know more).")]),B,e("p",null,[t("This depends on how you handle your outputs after the coinjoin. There are some ways how you can unintentionally undo the mixing by being careless. For example, if you send a mixed coin to an already used address, then anyone can see that both coins are controlled by the same entity. More importantly, anyone who knows that the address belongs to you knows that you own that mixed coin. "),a(i,{to:"/why-wasabi/AddressReuse.html"},{default:s(()=>[t("Address reuse")]),_:1}),t(" compromises your privacy. Another deanonymizing scenario occurs when you combine mixed outputs with unmixed ones when sending: a third party will be able to make the connection between them as belonging to the same sender. This is why you need to be careful with non-private/"),a(i,{to:"/using-wasabi/ChangeCoins.html"},{default:s(()=>[t("change coins")]),_:1}),t(".")]),e("p",null,[t("The practice of being careful with your post-mix outputs is commonly facilitated through coin control. Find out more about coin control in "),a(i,{to:"/why-wasabi/Coins.html"},{default:s(()=>[t("here")]),_:1}),t(". However, Wasabi Wallet is build in a way to help the user to avoid privacy leaks when using the wallet.")]),z,e("p",null,[t("Yes, you can check the status of Wasabi-related services and websites (like APIs, Backend, etc.) via "),e("a",j,[t("UptimeRobot Wasabi Status Page"),a(o)]),t(".")]),F,e("p",null,[t("The zkSNACKs coordinator supplies identical filters to every client. This means that you rely on the "),e("a",Q,[t("Wasabi backend"),a(o)]),t(" to provide valid filters. But because you download the blocks from a random Bitcoin peer-to-peer node - or your own node - the coordinator cannot spy on which blocks you are interested in. Furthermore, the random node will only know which block is needed but it won't have any clue which transaction(s) belongs to the wallet.")]),K,e("p",null,[t("Yes, you can verify the code on "),e("a",q,[t("GitHub"),a(o)]),t(".")]),O,M,E,e("p",null,[t("You can find us on "),e("a",D,[t("Twitter"),a(o)]),t(", "),e("a",Y,[t("Reddit"),a(o)]),t(", "),e("a",U,[t("YouTube"),a(o)]),t(", "),e("a",L,[t("Facebook"),a(o)]),t(", "),e("a",P,[t("Instagram"),a(o)]),t(" and "),e("a",R,[t("Discord"),a(o)]),t(". For chat groups you can find us on "),e("a",H,[t("Slack"),a(o)]),t(", "),e("a",J,[t("Telegram"),a(o)]),t(" and "),e("a",V,[t("Keybase"),a(o)]),t(".")]),e("p",null,[t("Also, remember to follow our "),e("a",Z,[t("blog"),a(o)]),t(" to get the latest insights and information about Wasabi Wallet and Bitcoin privacy.")]),G,X,$,ee,e("ul",null,[te,e("li",null,[ae,t(": The follow-up concern is the inverse of the above. It is possible that the server could "),oe,t(" include one 'honest/real' coin in the mix and supply the other coins themselves. This gives a false sense of security, "),ie,t(". It would also be noticeable to all users excluding the user being targeted as their coins would not be mixed. It has been argued that this 'attack' would be very costly in terms of fees because the number of coins being mixed is verifiable. Though it is true that remixes pay zero coordination fee to zkSNACKs, they do pay mining fees. See "),e("a",se,[t("here"),a(o)]),t(" for more info.")])]),ne,e("p",null,[t("Ádám Ficsor worked with several others on a privacy-focused Bitcoin wallet called Hidden Wallet all the way "),e("a",re,[t("back in December 2015"),a(o)]),t(". Wasabi 1.0 was unveiled in 2018 at the Building on Bitcoin conference by Ádám. At the time, Wasabi was essentially HiddenWallet rebranded and rewritten from scratch with some new features. Key dates:")]),le,e("p",null,[e("a",he,[ce,a(o)])]),e("p",null,[e("a",de,[ue,a(o)])]),pe,e("p",null,[t("Wasabi follows Bitcoin's philosophy by making the software "),e("a",be,[t("open-source"),a(o)]),t(" and by publishing it under "),e("a",me,[t("MIT license"),a(o)]),t(". Bitcoin users prefer open-source software to proprietary software for a number of reasons, including:")]),fe,e("p",null,[t("WabiSabi defines a pre-mix and a post-mix wallet and a mixing technique. Pre-mix wallet functionality can be added to any Bitcoin wallet without much overhead. Post-mix wallets on the other hand have strong privacy requirements, regarding coin selection, private transaction and balance retrieval, transaction input and output indexing and broadcasting. The requirements and recommendations for pre and post-mix wallets together define the Wallet Privacy Framework. Coins from pre-mix wallets to post-mix wallets are moved by mixing. Most on-chain mixing techniques, like CoinShuffle, CoinShuffle++, TumbleBit's Classic Tumbler mode, or ZeroLink can be used. However WabiSabi defines its own mixing technique: "),a(i,{to:"/using-wasabi/CoinJoin.html"},{default:s(()=>[t("WabiSabi coinjoin")]),_:1}),t(".")]),e("p",null,[t("For more info please see "),e("a",we,[t("WabiSabi"),a(o)]),t(".")]),ye,e("p",null,[t("Wasabi runs in most operating systems with 64-bit architecture. For the complete list of all the officially supported operating systems, click "),e("a",ge,[t("here"),a(o)]),t(".")]),ke,e("p",null,[t("As long as your operating system is "),e("a",_e,[t("supported"),a(o)]),t(", Wasabi should be able to run on your hardware. The more transactions a wallet has made, the more resources Wasabi will consume, particularly RAM. The software can also consume a significant amount of CPU for specific tasks, such as coinjoins or wallet loading. Approximately 3 GB of disk space are also needed, mainly to store the "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#what-are-bip-158-block-filters"},{default:s(()=>[t("block filters")]),_:1}),t(". If you are running the wallet on a system with scarce resources, consider using the "),e("a",We,[t("daemon"),a(o)]),t(" instead of the GUI application.")])])}const Ce=h(u,[["render",ve],["__file","FAQ-Introduction.html.vue"]]),Ie=JSON.parse(`{"path":"/FAQ/FAQ-Introduction.html","title":"Introduction FAQ","lang":"en-US","frontmatter":{"title":"Introduction FAQ","description":"Frequently asked questions regarding the introduction to Wasabi in general. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"The Basics","slug":"the-basics","link":"#the-basics","children":[{"level":3,"title":"Who can use Wasabi?","slug":"who-can-use-wasabi","link":"#who-can-use-wasabi","children":[]},{"level":3,"title":"What is a coinjoin?","slug":"what-is-a-coinjoin","link":"#what-is-a-coinjoin","children":[]},{"level":3,"title":"Do I need to trust Wasabi with my coins?","slug":"do-i-need-to-trust-wasabi-with-my-coins","link":"#do-i-need-to-trust-wasabi-with-my-coins","children":[]},{"level":3,"title":"What is the privacy I get after mixing with Wasabi?","slug":"what-is-the-privacy-i-get-after-mixing-with-wasabi","link":"#what-is-the-privacy-i-get-after-mixing-with-wasabi","children":[]},{"level":3,"title":"Why is Wasabi Bitcoin-only?","slug":"why-is-wasabi-bitcoin-only","link":"#why-is-wasabi-bitcoin-only","children":[]},{"level":3,"title":"What is considered a sufficient anonymity score?","slug":"what-is-considered-a-sufficient-anonymity-score","link":"#what-is-considered-a-sufficient-anonymity-score","children":[]},{"level":3,"title":"Is there a way to check Wasabi's uptime status?","slug":"is-there-a-way-to-check-wasabi-s-uptime-status","link":"#is-there-a-way-to-check-wasabi-s-uptime-status","children":[]},{"level":3,"title":"What software supplies the block filters that Wasabi uses?","slug":"what-software-supplies-the-block-filters-that-wasabi-uses","link":"#what-software-supplies-the-block-filters-that-wasabi-uses","children":[]},{"level":3,"title":"Is the Backend's (Coordinator) code open-source?","slug":"is-the-backend-s-coordinator-code-open-source","link":"#is-the-backend-s-coordinator-code-open-source","children":[]},{"level":3,"title":"Is there an Android/iOs version?","slug":"is-there-an-android-ios-version","link":"#is-there-an-android-ios-version","children":[]},{"level":3,"title":"Where can I find Wasabi Wallet on social media?","slug":"where-can-i-find-wasabi-wallet-on-social-media","link":"#where-can-i-find-wasabi-wallet-on-social-media","children":[]}]},{"level":2,"title":"For advanced Wasabikas","slug":"for-advanced-wasabikas","link":"#for-advanced-wasabikas","children":[{"level":3,"title":"Can the coordinator attack me?","slug":"can-the-coordinator-attack-me","link":"#can-the-coordinator-attack-me","children":[]},{"level":3,"title":"What is the history of Wasabi?","slug":"what-is-the-history-of-wasabi","link":"#what-is-the-history-of-wasabi","children":[]},{"level":3,"title":"Why is Wasabi libre and open-source software?","slug":"why-is-wasabi-libre-and-open-source-software","link":"#why-is-wasabi-libre-and-open-source-software","children":[]},{"level":3,"title":"What is the general idea of WabiSabi coinjoin?","slug":"what-is-the-general-idea-of-wabisabi-coinjoin","link":"#what-is-the-general-idea-of-wabisabi-coinjoin","children":[]},{"level":3,"title":"What are the supported operating systems?","slug":"what-are-the-supported-operating-systems","link":"#what-are-the-supported-operating-systems","children":[]},{"level":3,"title":"What are the minimal requirements to run Wasabi?","slug":"what-are-the-minimal-requirements-to-run-wasabi","link":"#what-are-the-minimal-requirements-to-run-wasabi","children":[]}]}],"git":{"updatedTime":1689039903000},"filePathRelative":"FAQ/FAQ-Introduction.md"}`);export{Ce as comp,Ie as data}; +import{_ as l}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as h,r,o as c,c as d,a as e,b as t,d as a,w as s,e as n}from"./app-BgbPjqpx.js";const u={},p=n('

    Introduction to Wasabi

    The Basics

    Who can use Wasabi?

    ',3),b={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Fluent.Desktop",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Backend",target:"_blank",rel:"noopener noreferrer"},f={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Daemon",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Tests",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Packager",target:"_blank",rel:"noopener noreferrer"},g={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi",target:"_blank",rel:"noopener noreferrer"},k={href:"https://wasabiwallet.io/swagger/",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/zkSNACKs/WasabiDoc",target:"_blank",rel:"noopener noreferrer"},W={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/LICENSE.md",target:"_blank",rel:"noopener noreferrer"},v=e("p",null,"Wasabi is used by individuals to make everyday payments, to manage their hardware wallet long term hodlings, and to CoinJoin their sats for added privacy. Entrepreneurs may use Wasabi to defend their customers from spies and to ensure a private business relationship. While kids may use Wasabi to stack the sats gifted by grandma, and learn the importance of hodling.",-1),x=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"Wasabi is a tool for everyone.")],-1),T=e("h3",{id:"what-is-a-coinjoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-a-coinjoin"},[e("span",null,"What is a coinjoin?")])],-1),A=e("p",null,"Coinjoin is a mechanism by which multiple participants combine their coins (or UTXOs, to be more precise) into one large transaction with multiple inputs and multiple outputs. An observer cannot determine which output belongs to which input, and neither can the participants themselves. This makes it difficult for outside parties to trace where a particular coin originated from and where it was sent to (as opposed to regular bitcoin transactions, where there is usually one sender and one receiver).",-1),S=e("p",null,"This can be done with non-custodial software like Wasabi that eliminates the risk of funds disappearing or being stolen. Each of the signatures are created on the participants’ computers after thorough verification, so nobody can alter the transaction or redirect the funds. The funds will always be in a Bitcoin address that you control.",-1),C=e("p",null,"In very simple terms, coinjoin means: “when you want to make a transaction, find someone else who also wants to make a transaction and make a joint transaction together”.",-1),I={href:"https://en.bitcoin.it/wiki/CoinJoin",target:"_blank",rel:"noopener noreferrer"},N=e("h3",{id:"do-i-need-to-trust-wasabi-with-my-coins",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#do-i-need-to-trust-wasabi-with-my-coins"},[e("span",null,"Do I need to trust Wasabi with my coins?")])],-1),B=e("h3",{id:"what-is-the-privacy-i-get-after-mixing-with-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-the-privacy-i-get-after-mixing-with-wasabi"},[e("span",null,"What is the privacy I get after mixing with Wasabi?")])],-1),z=n('

    Why is Wasabi Bitcoin-only?

    There are countless reasons why it is the only logical choice to be bitcoin-only. With Bitcoin we have a once in a lifetime opportunity to manifest libre sound money. If we succeed, then an utmost beautiful agora of sovereign individuals may emerge. If we fail, then this will conjure up the most horrific Orwellian nightmare. There is no room for wasted time and energy, this great work requires our full attention. Any line of code written to support a random shitcoin takes away scarce developer time to work on real problems.

    What is considered a sufficient anonymity score?

    It is difficult to determine a sufficient anonymity score since enough research hasn’t been conducted to provide a definitive answer. The right anonymity score depends on your own personal threat model. However, to be on the safe side, with Wasabi Wallet 2.0 an anonymity score of 5 and above could be considered sufficient.

    Is there a way to check Wasabi's uptime status?

    ',5),j={href:"https://stats.uptimerobot.com/YQqGyUL8A7",target:"_blank",rel:"noopener noreferrer"},F=e("h3",{id:"what-software-supplies-the-block-filters-that-wasabi-uses",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-software-supplies-the-block-filters-that-wasabi-uses"},[e("span",null,"What software supplies the block filters that Wasabi uses?")])],-1),Q={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Backend",target:"_blank",rel:"noopener noreferrer"},K=e("h3",{id:"is-the-backend-s-coordinator-code-open-source",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#is-the-backend-s-coordinator-code-open-source"},[e("span",null,"Is the Backend's (Coordinator) code open-source?")])],-1),q={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Backend",target:"_blank",rel:"noopener noreferrer"},O=e("h3",{id:"is-there-an-android-ios-version",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#is-there-an-android-ios-version"},[e("span",null,"Is there an Android/iOs version?")])],-1),M=e("p",null,"No, Wasabi and CoinJoin features require considerable computational power, not currently replicable on a smartphone.",-1),E=e("h3",{id:"where-can-i-find-wasabi-wallet-on-social-media",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#where-can-i-find-wasabi-wallet-on-social-media"},[e("span",null,"Where can I find Wasabi Wallet on social media?")])],-1),D={href:"https://twitter.com/wasabiwallet",target:"_blank",rel:"noopener noreferrer"},Y={href:"https://www.reddit.com/r/WasabiWallet/",target:"_blank",rel:"noopener noreferrer"},U={href:"https://www.youtube.com/c/WasabiWallet",target:"_blank",rel:"noopener noreferrer"},L={href:"https://www.facebook.com/officialwasabiwallet/",target:"_blank",rel:"noopener noreferrer"},P={href:"https://www.instagram.com/wasabi_wallet/",target:"_blank",rel:"noopener noreferrer"},R={href:"https://discord.com/invite/nm7YHEZnJs",target:"_blank",rel:"noopener noreferrer"},H={href:"https://join.slack.com/t/tumblebit/shared_invite/enQtNjQ1MTQ2NzQ1ODI0LWIzOTg5YTM3YmNkOTg1NjZmZTQ3NmM1OTAzYmQyYzk1M2M0MTdlZDk2OTQwNzFiNTg1ZmExNzM0NjgzY2M0Yzg",target:"_blank",rel:"noopener noreferrer"},J={href:"https://t.me/WasabiWallet",target:"_blank",rel:"noopener noreferrer"},V={href:"https://keybase.io/team/wasabiwallet",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://blog.wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},G=e("h2",{id:"for-advanced-wasabikas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#for-advanced-wasabikas"},[e("span",null,"For advanced Wasabikas")])],-1),X=e("h3",{id:"can-the-coordinator-attack-me",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#can-the-coordinator-attack-me"},[e("span",null,"Can the coordinator attack me?")])],-1),$=e("p",null,"The developers have gone to great lengths to ensure that the coordinator cannot steal funds nor link inputs to outputs. The nature of Wasabi is that you should not need to trust the developers or the Wasabi coordinating server, as you can verify that the code does not leak information to anyone. Due to the nature of coinjoin transactions users don't need to trust other users or the coordinator against theft, leaving denial of service and attacks on privacy as the main concerns",-1),ee=e("p",null,[t("The only known possible 'malicious' actions that the server "),e("em",null,"could"),t(" perform are two sides of the same coin;")],-1),te=e("li",null,[e("strong",null,"Blacklisted UTXO's"),t(": Though this would not affect the users who are able to successfully mix with other 'honest/real' peers.")],-1),ae=e("strong",null,"Targeted Sybil Attack",-1),oe=e("em",null,"only",-1),ie=e("strong",null,"but does not worsen the existing privacy of the coin",-1),se={href:"https://github.com/zkSNACKs/WabiSabi/blob/master/protocol.md#attacks-on-privacy",target:"_blank",rel:"noopener noreferrer"},ne=e("h3",{id:"what-is-the-history-of-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-the-history-of-wasabi"},[e("span",null,"What is the history of Wasabi?")])],-1),re={href:"https://docs.google.com/drawings/d/1wLL7aSgYBWNoyzllg6_haisFt-gQCf-QUzVzQPkARts/edit",target:"_blank",rel:"noopener noreferrer"},le=e("ul",null,[e("li",null,"The 1.0 Beta release was on August 1, 2018 (on the first anniversary of UASF)"),e("li",null,"The 1.0 release was on October 31, 2018 (on the tenth anniversary of the Bitcoin Whitepaper)"),e("li",null,"The 2.0 Testnet release was on March 1, 2022"),e("li",null,"The 2.0 release was on June 15, 2022")],-1),he={href:"https://youtu.be/XORDEX-RrAI?t=6420",target:"_blank",rel:"noopener noreferrer"},ce=e("img",{src:l,alt:"Watch the video"},null,-1),de={href:"https://youtu.be/b1Vligm0SO8",target:"_blank",rel:"noopener noreferrer"},ue=e("img",{src:l,alt:"Watch the video"},null,-1),pe=e("h3",{id:"why-is-wasabi-libre-and-open-source-software",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-is-wasabi-libre-and-open-source-software"},[e("span",null,"Why is Wasabi libre and open-source software?")])],-1),be={href:"https://github.com/zkSNACKs/WalletWasabi/",target:"_blank",rel:"noopener noreferrer"},me={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/LICENSE.md",target:"_blank",rel:"noopener noreferrer"},fe=n('

    Control

    Many people prefer open-source software because they have more control over the software they run.

    They can examine the code to make sure it's not doing anything they don't want it to do, and they can change parts of it they don't like. Users who aren't programmers also benefit from open-source software, since they can use this software for any purpose.

    Training

    Other people like open-source software because it helps them become better programmers.

    Open-source code is publicly accessible. Students can easily study it as they learn to make better software. Students can also share their work with others, inviting comments and critique, as they develop their skills. When people discover mistakes in programs' source code, they can share those mistakes with others to help them avoid making those same mistakes themselves.

    Security

    Some people prefer open-source software because they consider it more secure and stable than proprietary software.

    Anyone can view and modify open-source software. Other users may spot and correct errors or omissions that a program's original authors might have missed. And because so many programmers can work on a piece of open-source software without asking for permission from original authors, they can fix, update, and upgrade open-source software more quickly than they can proprietary software.

    Stability

    Many users prefer open-source software to proprietary software for important, long-term projects.

    Programmers publicly distribute the source code for open-source software. Users relying on that software for critical tasks can be sure their tools won't disappear or fall into disrepair if their original creators stop working on them. Additionally, open-source software tends to both incorporate and operate according to open standards.

    What is the general idea of WabiSabi coinjoin?

    While fungibility is an essential property of good money, Bitcoin has its limitations in this area. Numerous fungibility improvements have been proposed; however, none of them have addressed the privacy issues in full. WabiSabi is designed so that no participant, outside observer or even the coordinator can spy on the user. The scope of WabiSabi is not limited to a single transaction, it extends to transaction chains and it addresses various network layer deanonymizations. However, its scope is limited to Bitcoin's first layer. Even if an off-chain anonymity solution gets widely adopted, ultimately the entrance and exit transactions will always be settled on-chain. Therefore, there will always be need for on-chain privacy.

    Ideal fungibility requires every Bitcoin transaction to be indistinguishable from each other, but it is an unrealistic goal. WabiSabi's objective is to break all links between coins. Thus, WabiSabi enables the usage of Bitcoin in a fully anonymous way.

    ',11),we={href:"https://github.com/zksnacks/wabisabi",target:"_blank",rel:"noopener noreferrer"},ye=e("h3",{id:"what-are-the-supported-operating-systems",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-are-the-supported-operating-systems"},[e("span",null,"What are the supported operating systems?")])],-1),ge={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/WalletWasabi.Documentation/WasabiCompatibility.md#officially-supported-operating-systems",target:"_blank",rel:"noopener noreferrer"},ke=e("h3",{id:"what-are-the-minimal-requirements-to-run-wasabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-are-the-minimal-requirements-to-run-wasabi"},[e("span",null,"What are the minimal requirements to run Wasabi?")])],-1),_e={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/WalletWasabi.Documentation/WasabiCompatibility.md#officially-supported-operating-systems",target:"_blank",rel:"noopener noreferrer"},We={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/WalletWasabi.Daemon",target:"_blank",rel:"noopener noreferrer"};function ve(xe,Te){const o=r("ExternalLinkIcon"),i=r("RouteLink");return c(),d("div",null,[p,e("p",null,[t("Every single line of code in Wasabi, the "),e("a",b,[t("wallet"),a(o)]),t(", the "),e("a",m,[t("backend server"),a(o)]),t(", the "),e("a",f,[t("daemon"),a(o)]),t(", the "),e("a",w,[t("tests"),a(o)]),t(", the "),e("a",y,[t("packager"),a(o)]),t(", the "),e("a",g,[t("library"),a(o)]),t(", the "),e("a",k,[t("api"),a(o)]),t(", the "),e("a",_,[t("documentation"),a(o)]),t(" - has always been and will always be libre and open-source under the "),e("a",W,[t("MIT license"),a(o)]),t(". This means that anyone, yes, ANYONE can use Wasabi without permission, for any use case, free of charge.")]),v,x,T,A,S,C,e("p",null,[t("See also the "),e("a",I,[t("Bitcoin Wiki on coinjoins"),a(o)])]),N,e("p",null,[t("Since Wasabi's coinjoin implementation is trustless by design, there is no need for participants to trust each other or a third party. Both the sending address (the coinjoin input) and the receiving address (the coinjoin output) are controlled by your own private keys. The Wasabi server merely coordinates the process of combining each participant's input into one single transaction, but the Wasabi Wallet can neither steal your coins, nor figure out which outputs belong to which inputs (look up “"),a(i,{to:"/using-wasabi/CoinJoin.html"},{default:s(()=>[t("WabiSabi coinjoin")]),_:1}),t("” if you want to know more).")]),B,e("p",null,[t("This depends on how you handle your outputs after the coinjoin. There are some ways how you can unintentionally undo the mixing by being careless. For example, if you send a mixed coin to an already used address, then anyone can see that both coins are controlled by the same entity. More importantly, anyone who knows that the address belongs to you knows that you own that mixed coin. "),a(i,{to:"/why-wasabi/AddressReuse.html"},{default:s(()=>[t("Address reuse")]),_:1}),t(" compromises your privacy. Another deanonymizing scenario occurs when you combine mixed outputs with unmixed ones when sending: a third party will be able to make the connection between them as belonging to the same sender. This is why you need to be careful with non-private/"),a(i,{to:"/using-wasabi/ChangeCoins.html"},{default:s(()=>[t("change coins")]),_:1}),t(".")]),e("p",null,[t("The practice of being careful with your post-mix outputs is commonly facilitated through coin control. Find out more about coin control in "),a(i,{to:"/why-wasabi/Coins.html"},{default:s(()=>[t("here")]),_:1}),t(". However, Wasabi Wallet is build in a way to help the user to avoid privacy leaks when using the wallet.")]),z,e("p",null,[t("Yes, you can check the status of Wasabi-related services and websites (like APIs, Backend, etc.) via "),e("a",j,[t("UptimeRobot Wasabi Status Page"),a(o)]),t(".")]),F,e("p",null,[t("The zkSNACKs coordinator supplies identical filters to every client. This means that you rely on the "),e("a",Q,[t("Wasabi backend"),a(o)]),t(" to provide valid filters. But because you download the blocks from a random Bitcoin peer-to-peer node - or your own node - the coordinator cannot spy on which blocks you are interested in. Furthermore, the random node will only know which block is needed but it won't have any clue which transaction(s) belongs to the wallet.")]),K,e("p",null,[t("Yes, you can verify the code on "),e("a",q,[t("GitHub"),a(o)]),t(".")]),O,M,E,e("p",null,[t("You can find us on "),e("a",D,[t("Twitter"),a(o)]),t(", "),e("a",Y,[t("Reddit"),a(o)]),t(", "),e("a",U,[t("YouTube"),a(o)]),t(", "),e("a",L,[t("Facebook"),a(o)]),t(", "),e("a",P,[t("Instagram"),a(o)]),t(" and "),e("a",R,[t("Discord"),a(o)]),t(". For chat groups you can find us on "),e("a",H,[t("Slack"),a(o)]),t(", "),e("a",J,[t("Telegram"),a(o)]),t(" and "),e("a",V,[t("Keybase"),a(o)]),t(".")]),e("p",null,[t("Also, remember to follow our "),e("a",Z,[t("blog"),a(o)]),t(" to get the latest insights and information about Wasabi Wallet and Bitcoin privacy.")]),G,X,$,ee,e("ul",null,[te,e("li",null,[ae,t(": The follow-up concern is the inverse of the above. It is possible that the server could "),oe,t(" include one 'honest/real' coin in the mix and supply the other coins themselves. This gives a false sense of security, "),ie,t(". It would also be noticeable to all users excluding the user being targeted as their coins would not be mixed. It has been argued that this 'attack' would be very costly in terms of fees because the number of coins being mixed is verifiable. Though it is true that remixes pay zero coordination fee to zkSNACKs, they do pay mining fees. See "),e("a",se,[t("here"),a(o)]),t(" for more info.")])]),ne,e("p",null,[t("Ádám Ficsor worked with several others on a privacy-focused Bitcoin wallet called Hidden Wallet all the way "),e("a",re,[t("back in December 2015"),a(o)]),t(". Wasabi 1.0 was unveiled in 2018 at the Building on Bitcoin conference by Ádám. At the time, Wasabi was essentially HiddenWallet rebranded and rewritten from scratch with some new features. Key dates:")]),le,e("p",null,[e("a",he,[ce,a(o)])]),e("p",null,[e("a",de,[ue,a(o)])]),pe,e("p",null,[t("Wasabi follows Bitcoin's philosophy by making the software "),e("a",be,[t("open-source"),a(o)]),t(" and by publishing it under "),e("a",me,[t("MIT license"),a(o)]),t(". Bitcoin users prefer open-source software to proprietary software for a number of reasons, including:")]),fe,e("p",null,[t("WabiSabi defines a pre-mix and a post-mix wallet and a mixing technique. Pre-mix wallet functionality can be added to any Bitcoin wallet without much overhead. Post-mix wallets on the other hand have strong privacy requirements, regarding coin selection, private transaction and balance retrieval, transaction input and output indexing and broadcasting. The requirements and recommendations for pre and post-mix wallets together define the Wallet Privacy Framework. Coins from pre-mix wallets to post-mix wallets are moved by mixing. Most on-chain mixing techniques, like CoinShuffle, CoinShuffle++, TumbleBit's Classic Tumbler mode, or ZeroLink can be used. However WabiSabi defines its own mixing technique: "),a(i,{to:"/using-wasabi/CoinJoin.html"},{default:s(()=>[t("WabiSabi coinjoin")]),_:1}),t(".")]),e("p",null,[t("For more info please see "),e("a",we,[t("WabiSabi"),a(o)]),t(".")]),ye,e("p",null,[t("Wasabi runs in most operating systems with 64-bit architecture. For the complete list of all the officially supported operating systems, click "),e("a",ge,[t("here"),a(o)]),t(".")]),ke,e("p",null,[t("As long as your operating system is "),e("a",_e,[t("supported"),a(o)]),t(", Wasabi should be able to run on your hardware. The more transactions a wallet has made, the more resources Wasabi will consume, particularly RAM. The software can also consume a significant amount of CPU for specific tasks, such as coinjoins or wallet loading. Approximately 3 GB of disk space are also needed, mainly to store the "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#what-are-bip-158-block-filters"},{default:s(()=>[t("block filters")]),_:1}),t(". If you are running the wallet on a system with scarce resources, consider using the "),e("a",We,[t("daemon"),a(o)]),t(" instead of the GUI application.")])])}const Ce=h(u,[["render",ve],["__file","FAQ-Introduction.html.vue"]]),Ie=JSON.parse(`{"path":"/FAQ/FAQ-Introduction.html","title":"Introduction FAQ","lang":"en-US","frontmatter":{"title":"Introduction FAQ","description":"Frequently asked questions regarding the introduction to Wasabi in general. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"The Basics","slug":"the-basics","link":"#the-basics","children":[{"level":3,"title":"Who can use Wasabi?","slug":"who-can-use-wasabi","link":"#who-can-use-wasabi","children":[]},{"level":3,"title":"What is a coinjoin?","slug":"what-is-a-coinjoin","link":"#what-is-a-coinjoin","children":[]},{"level":3,"title":"Do I need to trust Wasabi with my coins?","slug":"do-i-need-to-trust-wasabi-with-my-coins","link":"#do-i-need-to-trust-wasabi-with-my-coins","children":[]},{"level":3,"title":"What is the privacy I get after mixing with Wasabi?","slug":"what-is-the-privacy-i-get-after-mixing-with-wasabi","link":"#what-is-the-privacy-i-get-after-mixing-with-wasabi","children":[]},{"level":3,"title":"Why is Wasabi Bitcoin-only?","slug":"why-is-wasabi-bitcoin-only","link":"#why-is-wasabi-bitcoin-only","children":[]},{"level":3,"title":"What is considered a sufficient anonymity score?","slug":"what-is-considered-a-sufficient-anonymity-score","link":"#what-is-considered-a-sufficient-anonymity-score","children":[]},{"level":3,"title":"Is there a way to check Wasabi's uptime status?","slug":"is-there-a-way-to-check-wasabi-s-uptime-status","link":"#is-there-a-way-to-check-wasabi-s-uptime-status","children":[]},{"level":3,"title":"What software supplies the block filters that Wasabi uses?","slug":"what-software-supplies-the-block-filters-that-wasabi-uses","link":"#what-software-supplies-the-block-filters-that-wasabi-uses","children":[]},{"level":3,"title":"Is the Backend's (Coordinator) code open-source?","slug":"is-the-backend-s-coordinator-code-open-source","link":"#is-the-backend-s-coordinator-code-open-source","children":[]},{"level":3,"title":"Is there an Android/iOs version?","slug":"is-there-an-android-ios-version","link":"#is-there-an-android-ios-version","children":[]},{"level":3,"title":"Where can I find Wasabi Wallet on social media?","slug":"where-can-i-find-wasabi-wallet-on-social-media","link":"#where-can-i-find-wasabi-wallet-on-social-media","children":[]}]},{"level":2,"title":"For advanced Wasabikas","slug":"for-advanced-wasabikas","link":"#for-advanced-wasabikas","children":[{"level":3,"title":"Can the coordinator attack me?","slug":"can-the-coordinator-attack-me","link":"#can-the-coordinator-attack-me","children":[]},{"level":3,"title":"What is the history of Wasabi?","slug":"what-is-the-history-of-wasabi","link":"#what-is-the-history-of-wasabi","children":[]},{"level":3,"title":"Why is Wasabi libre and open-source software?","slug":"why-is-wasabi-libre-and-open-source-software","link":"#why-is-wasabi-libre-and-open-source-software","children":[]},{"level":3,"title":"What is the general idea of WabiSabi coinjoin?","slug":"what-is-the-general-idea-of-wabisabi-coinjoin","link":"#what-is-the-general-idea-of-wabisabi-coinjoin","children":[]},{"level":3,"title":"What are the supported operating systems?","slug":"what-are-the-supported-operating-systems","link":"#what-are-the-supported-operating-systems","children":[]},{"level":3,"title":"What are the minimal requirements to run Wasabi?","slug":"what-are-the-minimal-requirements-to-run-wasabi","link":"#what-are-the-minimal-requirements-to-run-wasabi","children":[]}]}],"git":{"updatedTime":1689039903000},"filePathRelative":"FAQ/FAQ-Introduction.md"}`);export{Ce as comp,Ie as data}; diff --git a/assets/FAQ-UseWasabi.html-D5gJQVku.js b/assets/FAQ-UseWasabi.html-94kDagvU.js similarity index 99% rename from assets/FAQ-UseWasabi.html-D5gJQVku.js rename to assets/FAQ-UseWasabi.html-94kDagvU.js index 32b818a88e..10baf9ddab 100644 --- a/assets/FAQ-UseWasabi.html-D5gJQVku.js +++ b/assets/FAQ-UseWasabi.html-94kDagvU.js @@ -1,4 +1,4 @@ -import{_ as p}from"./AddWalletButton-C7JVhQwV.js";import{_ as w,a as m,b as y}from"./AddWalletAddPassphrase-M0V8PDu3.js";import{_ as h,a as g}from"./AddWalletConfirmRecoveryWords-DoQpsOos.js";import{_ as c}from"./CoinjoinStrategy-BZrDbG5n.js";import{_ as f}from"./WalletSynchronizing-Bg2Cuco7.js";import{_ as d,a as b}from"./AddressAwaitingPayment-B9ABKMdf.js";import{_ as v,a as _,b as k,c as u}from"./HistoryRightClick-DykL0_1P.js";import{_ as r}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as W}from"./AutoStartCoinjoinThreshold-B0lFY-5G.js";import{_ as x,a as T}from"./SettingsBitcoinCore-DgSldI_2.js";import{_ as I}from"./DiscreetModeActivate-Cg4X--AC.js";import{_ as j,r as l,o as C,c as A,a as e,d as a,w as o,b as t,e as s}from"./app-BPKesm5h.js";const B="/PrivacyBar.png",S="/FeeDisplayUnit.png",H="/MusicBoxCoinjoinStopped.png",q="/TorStatusWarningIcon.png",P="/AddressesAwaitingPayment.png",F="/AddressesAwaitingPaymentEditLabel.png",R="/AddressesAwaitingPaymentQRCodeIcon.png",z="/SendFeeIcon.png",D="/SendCustomFee.png",U="/SpeedUpTxConfirm.png",N="/CancelTxConfirm.png",Q="/PrivacyProgressTile.png",E="/RedCoinIsolation.png",M="/VerifyRecoveryWords.png",O="/History.png",Y="/HistoryCoinjoin.png",J="/HistoryCoinjoinExpanded.png",L="/HistorySortDateColumn.png",G="/SearchBarTXIDSearch.png",K="/AnonymityScoreTarget.png",V="/SettingsDustThreshold.png",X="/SearchBarHelpSupportOpen.png",$="/WhiteMode.png",Z="/SendPreviewTransactionReviewCoins.png",ee="/WalletCoinsSendSelectedCoins.png",te={},ae=s('

    Use of Wasabi

    General

    How do I start using Wasabi?

    ',3),ne={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},oe=e("h3",{id:"how-do-i-generate-a-new-wallet",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-generate-a-new-wallet"},[e("span",null,"How do I generate a new wallet?")])],-1),ie=s('

    Click the Add Wallet button in the bottom left corner of the main view or in the searchbar.

    Add new wallet in Wasabi

    Click Create a new wallet.

    Create a new wallet in Wasabi

    As with everything in Wasabi, you are required to label this new wallet. Make sure that you are precise so that you know what this wallet is for and click Continue.

    Name a new wallet in Wasabi

    Now you will see the 12 recovery words. This is the mnemonic seed that you should back up, together with the password you create in the next phase, in order to recover your wallet. When you've backed everything up, click Continue.

    Wasabi Wallet recovery words

    In this page you should confirm the words, as a check that you've written down your mnemonic seed in the correct order. Once you're done, click Continue.

    Confirm recovery words

    Add a password. It is used to encrypt the private key (extracted from the extended private key) on the computer and needed to open the wallet and to recovered it in the future. Make sure that you properly back up and write down this password.

    Confirm the password and click Continue.

    Add a password in Wasabi

    Careful!!

    Without knowledge of the password, you CANNOT spend your bitcoin!!

    Make sure, and triple-check that you have done a proper backup of BOTH the password AND the mnemonic. If you only have the recovery words, but not the password, then you will NOT be able to open your wallet or to recover it.

    In order to protect your backup, consider storing the password and recovery words in different locations.

    Now you get to choose your wallets coinjoin strategy. Select one and click Continue.

    Wasabi Wallet coinjoin strategies

    Can I rename my Wallet?

    Yes. A wallet can be renamed at the Wallet Settings.

    ',20),se=e("code",null,"Wallet Folder",-1),re=e("code",null,"Wallets",-1),le=e("code",null,".json",-1),he=e("code",null,"Wallets",-1),ce=e("code",null,".json",-1),de=e("code",null,"WalletBackups",-1),ue=e("code",null,".json",-1),pe=s('

    TIP

    You need to mark the “show hidden files” setting to see the Wasabi data folder.

    WARNING

    To avoid problems, make sure you close Wasabi Wallet before proceeding to rename any of your wallets.

    What is the password used for?

    The password you set is used:

    ',4),we={href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",target:"_blank",rel:"noopener noreferrer"},me={href:"https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki",target:"_blank",rel:"noopener noreferrer"},ye=e("p",null,"Wasabi stores only the BIP38 encrypted blob, so you'll need to type in the password to open the wallet and to spend from Wasabi.",-1),ge=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"DANGER"),e("p",null,"The password will unlock your bitcoin to anyone who has access to the recovery words backup or the computer! If your backup gets compromised, this password is the only thing protecting your precious sats.")],-1),fe=e("h3",{id:"what-password-should-i-use",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-password-should-i-use"},[e("span",null,"What password should I use?")])],-1),be={class:"custom-container danger"},ve=e("p",{class:"custom-container-title"},"DANGER",-1),_e=e("strong",null,"VERY",-1),ke={href:"https://www.eff.org/deeplinks/2016/07/new-wordlists-random-passphrases",target:"_blank",rel:"noopener noreferrer"},We=s('

    Where can I find the Wasabi data folder?

    You can easily reach it from inside Wasabi by typing Data Folder in the search bar at the top of the main view.

    Or you can manually navigate to it (depending on which OS you have):

    • Windows: /Users/{your username}/AppData/Roaming/WalletWasabi/Client
    • Linux: /home/{your username}/.walletwasabi/client
    • macOS: /Users/{your username}/.walletwasabi/client

    TIP

    You need to mark the “show hidden files” setting to see it.

    Can I spend my bitcoin without the password?

    DANGER

    NO!!! Without knowledge of your password, even when you have the wallet file and recovery words, you CANNOT spend your bitcoin!

    When creating a new wallet, after labeling it properly, the next step is to select a long and random password. Every time you want to spend your coins from Wasabi, you MUST provide this password. So even if you have these words securely engraved in metal, without the password, you cannot restore the backup of your wallet.

    TIP

    Always back up your mnemonic recovery words, and your password in two separate secure locations.

    Why BIP 38?

    ',10),xe={href:"https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki",target:"_blank",rel:"noopener noreferrer"},Te={href:"https://github.com/MetacoSA/NBitcoin",target:"_blank",rel:"noopener noreferrer"},Ie=e("h3",{id:"what-are-the-terms-and-conditions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-are-the-terms-and-conditions"},[e("span",null,"What are the terms and conditions?")])],-1),je=e("p",null,"The most important parts of the legal documents are summarized in the following points:",-1),Ce=e("ul",null,[e("li",null,"The service is open-source under the MIT license."),e("li",null,"The service is provided on a non-custodial basis. Safekeeping of keys are the sole responsibility of the user."),e("li",null,"The user is solely responsible to act according to their local laws and regulations."),e("li",null,"We do not store any personally identifiable information. Moreover, our trustless software architecture prevents us from gathering this information in the first place."),e("li",null,"A transaction fee is only charged by the service provider for CoinJoin transactions."),e("li",null,"We only provide written support, and NEVER ask for recovery words, passwords or similar security critical information.")],-1),Ae={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/WalletWasabi/Legal/Assets/LegalDocumentsWw2.txt",target:"_blank",rel:"noopener noreferrer"},Be=s(`

    Can I import a watch-only extended public key?

    Yes, but not yet in the GUI, you will need to manually create a new wallet file.

    Open a text editor and paste the following wallet structure:

    {
    +import{_ as p}from"./AddWalletButton-C7JVhQwV.js";import{_ as w,a as m,b as y}from"./AddWalletAddPassphrase-M0V8PDu3.js";import{_ as h,a as g}from"./AddWalletConfirmRecoveryWords-DoQpsOos.js";import{_ as c}from"./CoinjoinStrategy-BZrDbG5n.js";import{_ as f}from"./WalletSynchronizing-Bg2Cuco7.js";import{_ as d,a as b}from"./AddressAwaitingPayment-B9ABKMdf.js";import{_ as v,a as _,b as k,c as u}from"./HistoryRightClick-DykL0_1P.js";import{_ as r}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as W}from"./AutoStartCoinjoinThreshold-B0lFY-5G.js";import{_ as x,a as T}from"./SettingsBitcoinCore-DgSldI_2.js";import{_ as I}from"./DiscreetModeActivate-Cg4X--AC.js";import{_ as j,r as l,o as C,c as A,a as e,d as a,w as o,b as t,e as s}from"./app-BgbPjqpx.js";const B="/PrivacyBar.png",S="/FeeDisplayUnit.png",H="/MusicBoxCoinjoinStopped.png",q="/TorStatusWarningIcon.png",P="/AddressesAwaitingPayment.png",F="/AddressesAwaitingPaymentEditLabel.png",R="/AddressesAwaitingPaymentQRCodeIcon.png",z="/SendFeeIcon.png",D="/SendCustomFee.png",U="/SpeedUpTxConfirm.png",N="/CancelTxConfirm.png",Q="/PrivacyProgressTile.png",E="/RedCoinIsolation.png",M="/VerifyRecoveryWords.png",O="/History.png",Y="/HistoryCoinjoin.png",J="/HistoryCoinjoinExpanded.png",L="/HistorySortDateColumn.png",G="/SearchBarTXIDSearch.png",K="/AnonymityScoreTarget.png",V="/SettingsDustThreshold.png",X="/SearchBarHelpSupportOpen.png",$="/WhiteMode.png",Z="/SendPreviewTransactionReviewCoins.png",ee="/WalletCoinsSendSelectedCoins.png",te={},ae=s('

    Use of Wasabi

    General

    How do I start using Wasabi?

    ',3),ne={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},oe=e("h3",{id:"how-do-i-generate-a-new-wallet",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-do-i-generate-a-new-wallet"},[e("span",null,"How do I generate a new wallet?")])],-1),ie=s('

    Click the Add Wallet button in the bottom left corner of the main view or in the searchbar.

    Add new wallet in Wasabi

    Click Create a new wallet.

    Create a new wallet in Wasabi

    As with everything in Wasabi, you are required to label this new wallet. Make sure that you are precise so that you know what this wallet is for and click Continue.

    Name a new wallet in Wasabi

    Now you will see the 12 recovery words. This is the mnemonic seed that you should back up, together with the password you create in the next phase, in order to recover your wallet. When you've backed everything up, click Continue.

    Wasabi Wallet recovery words

    In this page you should confirm the words, as a check that you've written down your mnemonic seed in the correct order. Once you're done, click Continue.

    Confirm recovery words

    Add a password. It is used to encrypt the private key (extracted from the extended private key) on the computer and needed to open the wallet and to recovered it in the future. Make sure that you properly back up and write down this password.

    Confirm the password and click Continue.

    Add a password in Wasabi

    Careful!!

    Without knowledge of the password, you CANNOT spend your bitcoin!!

    Make sure, and triple-check that you have done a proper backup of BOTH the password AND the mnemonic. If you only have the recovery words, but not the password, then you will NOT be able to open your wallet or to recover it.

    In order to protect your backup, consider storing the password and recovery words in different locations.

    Now you get to choose your wallets coinjoin strategy. Select one and click Continue.

    Wasabi Wallet coinjoin strategies

    Can I rename my Wallet?

    Yes. A wallet can be renamed at the Wallet Settings.

    ',20),se=e("code",null,"Wallet Folder",-1),re=e("code",null,"Wallets",-1),le=e("code",null,".json",-1),he=e("code",null,"Wallets",-1),ce=e("code",null,".json",-1),de=e("code",null,"WalletBackups",-1),ue=e("code",null,".json",-1),pe=s('

    TIP

    You need to mark the “show hidden files” setting to see the Wasabi data folder.

    WARNING

    To avoid problems, make sure you close Wasabi Wallet before proceeding to rename any of your wallets.

    What is the password used for?

    The password you set is used:

    ',4),we={href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",target:"_blank",rel:"noopener noreferrer"},me={href:"https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki",target:"_blank",rel:"noopener noreferrer"},ye=e("p",null,"Wasabi stores only the BIP38 encrypted blob, so you'll need to type in the password to open the wallet and to spend from Wasabi.",-1),ge=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"DANGER"),e("p",null,"The password will unlock your bitcoin to anyone who has access to the recovery words backup or the computer! If your backup gets compromised, this password is the only thing protecting your precious sats.")],-1),fe=e("h3",{id:"what-password-should-i-use",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-password-should-i-use"},[e("span",null,"What password should I use?")])],-1),be={class:"custom-container danger"},ve=e("p",{class:"custom-container-title"},"DANGER",-1),_e=e("strong",null,"VERY",-1),ke={href:"https://www.eff.org/deeplinks/2016/07/new-wordlists-random-passphrases",target:"_blank",rel:"noopener noreferrer"},We=s('

    Where can I find the Wasabi data folder?

    You can easily reach it from inside Wasabi by typing Data Folder in the search bar at the top of the main view.

    Or you can manually navigate to it (depending on which OS you have):

    • Windows: /Users/{your username}/AppData/Roaming/WalletWasabi/Client
    • Linux: /home/{your username}/.walletwasabi/client
    • macOS: /Users/{your username}/.walletwasabi/client

    TIP

    You need to mark the “show hidden files” setting to see it.

    Can I spend my bitcoin without the password?

    DANGER

    NO!!! Without knowledge of your password, even when you have the wallet file and recovery words, you CANNOT spend your bitcoin!

    When creating a new wallet, after labeling it properly, the next step is to select a long and random password. Every time you want to spend your coins from Wasabi, you MUST provide this password. So even if you have these words securely engraved in metal, without the password, you cannot restore the backup of your wallet.

    TIP

    Always back up your mnemonic recovery words, and your password in two separate secure locations.

    Why BIP 38?

    ',10),xe={href:"https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki",target:"_blank",rel:"noopener noreferrer"},Te={href:"https://github.com/MetacoSA/NBitcoin",target:"_blank",rel:"noopener noreferrer"},Ie=e("h3",{id:"what-are-the-terms-and-conditions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-are-the-terms-and-conditions"},[e("span",null,"What are the terms and conditions?")])],-1),je=e("p",null,"The most important parts of the legal documents are summarized in the following points:",-1),Ce=e("ul",null,[e("li",null,"The service is open-source under the MIT license."),e("li",null,"The service is provided on a non-custodial basis. Safekeeping of keys are the sole responsibility of the user."),e("li",null,"The user is solely responsible to act according to their local laws and regulations."),e("li",null,"We do not store any personally identifiable information. Moreover, our trustless software architecture prevents us from gathering this information in the first place."),e("li",null,"A transaction fee is only charged by the service provider for CoinJoin transactions."),e("li",null,"We only provide written support, and NEVER ask for recovery words, passwords or similar security critical information.")],-1),Ae={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/WalletWasabi/Legal/Assets/LegalDocumentsWw2.txt",target:"_blank",rel:"noopener noreferrer"},Be=s(`

    Can I import a watch-only extended public key?

    Yes, but not yet in the GUI, you will need to manually create a new wallet file.

    Open a text editor and paste the following wallet structure:

    {
       "EncryptedSecret": null,
       "ChainCode": null,
       "MasterFingerprint": null,
    diff --git a/assets/Glossary-GeneralBitcoin.html-DokuOXpF.js b/assets/Glossary-GeneralBitcoin.html-CSe7i-qZ.js
    similarity index 99%
    rename from assets/Glossary-GeneralBitcoin.html-DokuOXpF.js
    rename to assets/Glossary-GeneralBitcoin.html-CSe7i-qZ.js
    index 09153dd162..9a0531bca0 100644
    --- a/assets/Glossary-GeneralBitcoin.html-DokuOXpF.js
    +++ b/assets/Glossary-GeneralBitcoin.html-CSe7i-qZ.js
    @@ -1 +1 @@
    -import{_ as l,r,o as c,c as h,a as e,b as t,d as a,w as n,e as s}from"./app-BPKesm5h.js";const d={},p=e("h2",{id:"bitcoin-in-general",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoin-in-general"},[e("span",null,"Bitcoin in general")])],-1),u=e("h3",{id:"address",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#address"},[e("span",null,"Address")])],-1),f=e("h3",{id:"bitcoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoin"},[e("span",null,"Bitcoin")])],-1),b=e("p",null,"Bitcoin is a peer-to-peer electronic cash system. An innovative payment network and a new kind of money. It is a decentralized digital currency without a central bank or single administrator that can be sent from user to user on the peer-to-peer bitcoin blockchain network without the need for intermediaries.",-1),m=e("h3",{id:"bitcoin-core",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoin-core"},[e("span",null,"Bitcoin Core")])],-1),g=e("p",null,[t("Bitcoin Core is an open-source project which maintains and releases Bitcoin client software called "),e("code",null,"Bitcoin Core"),t(", considered to be Bitcoin's reference implementation. It is a direct descendant of the original Bitcoin software client released by Satoshi Nakamoto after he published the famous Bitcoin whitepaper.")],-1),y=e("code",null,"full-node",-1),k={href:"https://bitcoincore.org/",target:"_blank",rel:"noopener noreferrer"},w=e("h3",{id:"bitcoin-improvement-proposal-bip",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoin-improvement-proposal-bip"},[e("span",null,"Bitcoin Improvement Proposal (BIP)")])],-1),v=e("h3",{id:"bitcoin-knots",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoin-knots"},[e("span",null,"Bitcoin Knots")])],-1),x={href:"https://bitcoinknots.org/",target:"_blank",rel:"noopener noreferrer"},B=s('

    Block

    A block is a batch of valid Bitcoin transactions and its hash must be a value below a certain difficulty target to prove the work of the miner. Each block references the hash of the previous block, thus creating a hash chain of blocks. On average a new block is mined every 10 minutes.

    Blockchain

    The blockchain is the one chain of valid Bitcoin blocks with the most accumulated proof of work. It is an append-only data structure with new blocks being added on average every 10 minutes. Because of its uniquely verifiable and global consensus, it is a revolutionary standard for time, thus some call it timechain.

    Change

    ',5),_=s('

    Child Pays For Parent (CPFP)

    Child Pays For Parent (CPFP) is a fee bumping technique where a user spends an output from a low fee rate unconfirmed transaction in a child transaction with a high fee rate in order to encourage miners to include both transactions in a block.

    Coinbase

    A special field used as the sole input for coinbase transactions. The coinbase allows claiming the block reward and provides up to 100 bytes for arbitrary data.

    Coinbase Transaction

    The first transaction in a block. Always created by a miner, it includes a single coinbase.

    Cold Storage

    ',7),P=s('

    Confirmations

    Once a transaction is included in a block, it has one confirmation. As soon as another block is mined on the same blockchain, the transaction has two confirmations, and so on. Six or more confirmations is considered sufficient proof that a transaction cannot be reversed.

    Consensus

    When several nodes, usually most nodes on the network, all have the same blocks in their locally-validated best blockchain.

    Consensus Rules

    The block validation rules that full nodes follow to stay in consensus with other nodes.

    Custodial (Wallet or Mixer)

    A custodial wallet is any wallet where the private keys of your coins are in the hands of a third party. In essence, they operate similarly to traditional banks.

    A custodial mixer needs you to send your bitcoins to a central part before mixing. This means that you are at risk of being stolen from.

    Difficulty

    A network-wide setting that controls how much computation is required to produce a proof of work.

    Difficulty Retargeting (Difficulty Adjustment)

    A network-wide recalculation of the difficulty that occurs once every 2,016 blocks and considers the hashing power of the previous 2,016 blocks.

    Difficulty Target

    A difficulty at which all the computation in the network will find blocks approximately every 10 minutes. It specifies the numeric value the hash of a block must not be above to be considered a valid block.

    ECDSA

    ECDSA (Elliptic Curve Digital Signature Algorithm) is one of the digital signature algorithms used by Bitcoin to ensure that funds can only be spent by their rightful owners.

    Fork

    Fork, also known as accidental fork, occurs when two or more blocks have the same block height, forking the blockchain. Typically occurs when two or more miners find blocks at nearly the same time. Can also happen as part of an attack.

    Full node

    Any computer that connects to the Bitcoin network is called a node. Nodes that fully verify all of the rules of Bitcoin are called full nodes. Full nodes download every block and transaction and check them against Bitcoin's consensus rules.

    Fungibility

    ',22),T=s('

    Genesis Block

    The first block in the blockchain, used to initialize the cryptocurrency.

    Hard Fork

    Hard fork, also known as hard-forking change, is a permanent divergence in the blockchain, it occurs when non-upgraded nodes can not validate blocks created by upgraded nodes that follow newer consensus rules. The upgraded nodes break the rules of the legacy nodes. Not to be confused with fork, soft fork, software fork or Git fork.

    Hardware Wallet (HWW)

    ',5),S=s('

    Hash

    A cryptographic hash function takes any input of arbitrary size [the message] and computes a value of fixed size that is unique to the input, which is called a hash or a digest. If one bit of the input changes, the output will be completely different [avalanche effect]. And there are no two messages that result in the same hash [collision resistance]. The only way to get any given input, is by computing all possible inputs, it is a one-way function [pre-image resistance]. Bitcoin uses the SHA256 in many parts of the protocol.

    Hierarchical Deterministic (HD) Protocol

    The Hierarchical Deterministic key creation and transfer protocol (BIP32), which allows creating child keys from parent keys in a hierarchy.

    Hierarchical Deterministic (HD) Wallet

    Wallets using the Hierarchical Deterministic Protocol key creation and transfer protocol (BIP32).

    Hot Wallet

    A hot wallet is a software wallet that runs on a device which is connected to the Internet. Wasabi is a hot wallet by default.

    Input

    Input, transaction input, or TxIn is an input in a Bitcoin transaction which contains two fields: a unique transaction hash and an index number, which references one utxo of a previous transaction which is spent in this transaction.

    Lightning Network (LN)

    Lightning Network is a proposed implementation of Hashed Timelock Contracts (HTLCs) with bi-directional payment channels which allows payments to be securely routed across multiple peer-to-peer payment channels. This allows the formation of a network where any peer on the network can pay any other peer even if they don't directly have a channel open between each other.

    Mainnet

    The original and main network for Bitcoin transactions, where satoshis have real economic value.

    Mempool

    ',15),W=s('

    Merkle Root

    The root node of a merkle tree, a descendant of all the hashed pairs in the tree. Block headers must include a valid merkle root descended from all transactions in that block.

    Merkle Tree

    A tree constructed by hashing paired data (the leaves), then pairing and hashing the results until a single hash remains, the merkle root. In Bitcoin, the leaves are almost always transactions from a single block.

    Miner

    A Bitcoin user that attempts to find valid proof of work for new candidate blocks, by repeated hashing until the difficulty target is met.

    Mining Reward

    An amount of satoshis included in each new block as a reward by the network to the miner who found the proof of work solution. Initially it was 50 bitcoin per block, which is halved every 210 000 blocks, or roughly 4 years. This leads to a total money supply of just below 21 million bitcoin.

    Multisignature (multisig)

    ',9),A=e("code",null,"m",-1),C=e("code",null,"n",-1),H=s('

    Non-Custodial (Wallet or Mixer)

    A non-custodial wallet is any wallet where the private keys of your coins are in your hands. Non-custodial wallets give you full control over your bitcoins.

    A non-custodial mixer like Wasabi eliminates the risk that the coordinator can steal your bitcoin. Each participant verifies the proposed transaction, and signs it only if it is valid. This signature is only valid for this transaction, so any attempt to change the transaction after the fact is futile. The funds will always be in a Bitcoin address that you control.

    Nonce

    The nonce in a Bitcoin block is a 32-bit (4-byte) field whose value is set so that the hash of the block will contain a run of leading zeros. The rest of the fields may not be changed, as they have a defined meaning.

    Off-chain Transaction

    An off-chain transaction is the movement of value outside of the blockchain. While an on-chain transaction - usually referred to as simply a transaction - modifies the blockchain and depends on the blockchain to determine its validity. An off-chain transaction relies on other methods to record and validate the transaction.

    Output

    Output, transaction output, or TxOut is an output in a Bitcoin transaction which contains two fields: a value field for transferring zero or more satoshis and a pubkey script for indicating what conditions must be fulfilled for those satoshis to be further spent.

    P2PKH

    Many transactions processed on the Bitcoin network spend outputs locked with a Pay-to-Public-Key-Hash or P2PKH script. These outputs contain a locking script that locks the output to a public key hash, more commonly known as a Bitcoin address. An output locked by a P2PKH script can be unlocked (spent) by presenting a public key and a digital signature created by the corresponding private key.

    P2SH

    P2SH or Pay-to-Script-Hash is a type of transaction that simplifies the use of complex transaction scripts. With P2SH the complex script that details the spending conditions (redeem script) is committed to with a hash in the locking script.

    P2TR

    A pay-to-taproot (P2TR), also known as a Taproot or Bech32m address, is the most recent and advanced bitcoin address format. Taproot introduces more advanced security, privacy, flexibility and scaling to bitcoin.

    P2WPKH

    The signature of a P2WPKH (Pay-to-Witness-Public-Key-Hash) contains the same information as a P2PKH spending, but is located in the witness field instead of the scriptSig field.

    Paper Wallet

    In the most specific sense, a paper wallet is a document containing all the secrets to spend a Bitcoin UTXO. It is a way of storing bitcoin offline as a physical document.

    Partially Signed Bitcoin Transaction (PSBT)

    ',20),I={href:"https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki",target:"_blank",rel:"noopener noreferrer"},R=e("h3",{id:"pay-to-witness-public-key-hash-p2wpkh",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#pay-to-witness-public-key-hash-p2wpkh"},[e("span",null,"Pay-to-Witness-Public-Key-Hash (P2WPKH)")])],-1),F={href:"https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki",target:"_blank",rel:"noopener noreferrer"},K=s('

    Payment Channels

    A payment channel is class of techniques designed to allow users to make multiple Bitcoin transactions without committing all of the transactions to the Bitcoin blockchain. In a typical payment channel, only two transactions are added to the blockchain, one funding and one closing transaction, but a nearly unlimited number of payments can be made between the participants.

    Plausible deniability

    Plausible deniability is the ability to deny knowledge of or responsibility for any damnable actions committed by others in an organizational hierarchy because of a lack of evidence that can confirm their participation, even if they were personally involved in or at least willfully ignorant of the actions.

    Private Key

    ',5),D=e("h3",{id:"proof-of-work-pow",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#proof-of-work-pow"},[e("span",null,"Proof of Work (POW)")])],-1),M=e("p",null,"One of the requirements for a Bitcoin block to be valid is its hash should be below a certain difficulty target. In order to create a valid block, a miner must repeatedly hash a candidate block with a changing nonce until by sheer luck he finds a hash with low value. By providing this pre-image block, anyone can verify the amount of computational energy that a miner on average should have invested in order to find this block, and this is what is known as Proof of Work.",-1),N=e("h3",{id:"public-key",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#public-key"},[e("span",null,"Public Key")])],-1),O=s('

    Regtest

    A local testing environment in which developers can instantly generate blocks on demand for testing events, and can create private satoshis with no real-world value.

    Replace by Fee (RBF)

    Replacing one version of an unconfirmed transaction with a different version of the transaction that pays a higher transaction fee.

    satoshi (sat)

    A satoshi is the smallest denomination of bitcoin that can be recorded on the blockchain. It is the equivalent of 0.00000001 bitcoin and is named after the creator of Bitcoin, Satoshi Nakamoto.

    Satoshi Nakamoto

    Satoshi Nakamoto is the name used by the person or group of people who designed Bitcoin and created its original reference implementation. As a part of the implementation, they also devised the first blockchain database. In the process they were the first to solve the double-spending problem for digital currency in a decentralized and self verifying nature. Their real identity remains unknown.

    Schnorr Digital Signature Scheme

    Schnorr Digital Signature Scheme is one of the digital signature algorithms used by Bitcoin to ensure that funds can only be spent by their rightful owners. Schnorr signatures and public keys can be aggregated, meaning that multiple parties with unique private keys can sign the same message, which can be verified in batches instead of individually.

    Script

    Bitcoin uses a scripting system for transactions. Forth-like, Script is simple, stack-based and processed from left to right. It is purposefully not Turing-complete, with no loops.

    ScriptPubKey

    ScriptPubKey or pubkey script, is a script included in outputs which sets the conditions that must be fulfilled for those satoshis to be spent. Data for fulfilling the conditions can be provided in a signature script.

    ScriptSig

    ScriptSig or signature script, is the data generated by a spender which is almost always used as variables to satisfy a pubkey script.

    Segregated Witness (SegWit)

    ',17),U=s('

    Simplified Payment Verification (SPV)

    SPV is a method for verifying particular transactions were included in a block without downloading the entire block. The method is used by some lightweight Bitcoin clients.

    Soft Fork

    A soft fork is a change to the Bitcoin consensus rules that is backwards compatible. Users of this update do not break the rules of legacy users, but rather restrict themselves to a more narrow rule set.

    Taproot

    Taproot is an upgrade to Bitcoin which introduces several new features. Taproot integrates the Schnorr digital signature scheme into Bitcoin, upgrading Bitcoin’s core cryptography. Taproot builds on the SegWit upgrade to improve Bitcoin’s privacy and lower transaction fees. Taproot makes future Bitcoin upgrades easier by reforming Bitcoin’s scripting language.

    Testnet

    A testing environment in which users can obtain and spend satoshis that have no real-world value on a global network that is very similar to the Bitcoin mainnet.

    Timechain

    ',9),G=e("h3",{id:"transaction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transaction"},[e("span",null,"Transaction")])],-1),Q=e("p",null,"In simple terms, a transfer of bitcoin. More precisely, a transaction is a signed data structure expressing a transfer of value and consisting mainly of inputs and outputs. Transactions are transmitted over the Bitcoin network, collected by miners, and included into blocks, made permanent on the blockchain.",-1),j=e("h3",{id:"transaction-fees",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transaction-fees"},[e("span",null,"Transaction Fees")])],-1),q=e("code",null,"inputs - outputs",-1),z=e("h3",{id:"unspent-transaction-output-utxo",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#unspent-transaction-output-utxo"},[e("span",null,"Unspent Transaction Output (UTXO)")])],-1),E=e("h3",{id:"wallet",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wallet"},[e("span",null,"Wallet")])],-1),L=e("p",null,"Software that holds all your Bitcoin addresses and secret keys. Use it to send, receive, and store your bitcoin.",-1);function V(X,J){const i=r("RouteLink"),o=r("ExternalLinkIcon");return c(),h("div",null,[p,u,e("p",null,[t("A Bitcoin invoice address commits to a public key or script which defines who can spend the coin. It is specified in the output of a transaction, and it should only be used once. Wasabi uses the bech32 and bech32m format to encode native segregated witness addresses. Read more: "),a(i,{to:"/using-wasabi/Receive.html#bitcoin-public-keys-and-addresses"},{default:n(()=>[t("Bitcoin addresses")]),_:1})]),f,b,m,g,e("p",null,[t("Bitcoin Core consists of both "),y,t(" software for fully validating the blockchain as well as a Bitcoin wallet. The project also currently maintains related software such as the cryptography library libsecp256k1 and others located at GitHub. Read more: "),e("a",k,[t("Bitcoin Core Website"),a(o)])]),w,e("p",null,[t("Bitcoin Improvement Proposal. A design document for introducing features or information to Bitcoin. Read more: "),a(i,{to:"/using-wasabi/BIPs.html"},{default:n(()=>[t("Wasabi Supported BIPs")]),_:1})]),v,e("p",null,[t("Bitcoin Knots is a derivative of Bitcoin Core with a collection of improvements backported from and sometimes maintained outside of Core's master git tree. Since version 1.1.11, Wasabi has partial Bitcoin Knots integration. This means that it is possible (but not mandatory) to start Bitcoin Knots during the launch of Wasabi, without having to install or configure anything. Read more: "),e("a",x,[t("Bitcoin Knots Website"),a(o)])]),B,e("p",null,[t("In a transaction where the provided input coins are larger than the value sent to the destination address, then the leftover change is sent to a new address of the same wallet. Read more: "),a(i,{to:"/using-wasabi/ChangeCoins.html"},{default:n(()=>[t("Change coins")]),_:1})]),_,e("p",null,[t("Refers to keeping a reserve of important Bitcoin secrets offline. Cold storage is achieved when Bitcoin private keys are created and stored in a secure offline environment. Cold storage is important for anyone with bitcoin holdings. Online computers are vulnerable to hackers and should not be used to store a significant amount of bitcoin. Read more: "),a(i,{to:"/using-wasabi/ColdWasabi.html"},{default:n(()=>[t("Cold Wasabi Protocol")]),_:1})]),P,e("p",null,[t("Fungibility is a desirable property of Bitcoin UTXOs that are indistinguishable from each other. Read more: "),a(i,{to:"/why-wasabi/TransactionSurveillanceCompanies.html#attempt-to-destroy-fungibility"},{default:n(()=>[t("Transaction surveillance companies attempting to destroy fungibility")]),_:1})]),T,e("p",null,[t("A hardware wallet is a special type of Bitcoin wallet which generates and stores the user's private keys on a dedicated hardware device. Read more: "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#hardware-wallet"},{default:n(()=>[t("Hardware Wallet FAQs")]),_:1})]),S,e("p",null,[t("The Bitcoin Mempool (memory pool) is a collection of all transaction data in a block that have been verified by Bitcoin nodes, but are not yet confirmed. Read more: "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#how-does-wasabi-know-of-incoming-transactions-to-the-mempool"},{default:n(()=>[t("How does Wasabi know of incoming transactions to the mempool?")]),_:1})]),W,e("p",null,[t("Multisignature (m-of-n multisig) refers to requiring more than one key to authorize a Bitcoin transaction. Only with "),A,t(" signatures of "),C,t(" public keys can the bitcoin be spent. Read more: "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#can-i-generate-a-multi-signature-script"},{default:n(()=>[t("Can I generate a multi signature script?")]),_:1})]),H,e("p",null,[t("PSBT is a binary transaction format which contains the information necessary for a signer to produce signatures for the transaction and holds the signatures for an input while the input does not have a complete set of signatures. The signer can be offline as all necessary information will be provided in the transaction. Read more: "),e("a",I,[t("BIP 174 Partially Signed Bitcoin Transaction Format"),a(o)])]),R,e("p",null,[t("The signature of a P2WPKH contains the same information as a Pay-to-Public-Key-Hash (P2PKH) spending, but is located in the witness field instead of the scriptSig field. The scriptPubKey is also modified. Read more: "),e("a",F,[t("BIP 84 derivation scheme for P2WPKH based accounts"),a(o)])]),K,e("p",null,[t("A private key is a large number that must be chosen at random, it is thus a very secure password and should be kept secret. With knowledge of this number, anyone can easily compute the public key, and a signature over any message. It can also be used to decrypt any message that was encrypted to the public key corresponding to the private key. In Bitcoin, a signature over a valid transaction message gives the right to spend a coin, thus knowledge of the private key corresponds to ownership of the bitcoin. Read more: "),a(i,{to:"/using-wasabi/Receive.html#bitcoin-public-keys-and-addresses"},{default:n(()=>[t("Bitcoin private keys")]),_:1})]),D,M,N,e("p",null,[t("A public key is calculated by multiplying the private key to the generator point of an elliptic curve. Given only the public key, the private key cannot be calculated. Anyone can encrypt a message using a public key. This encrypted message (cyphertext) can only be decrypted through the related private key. Given a public key and a signature over a message, anyone can verify that the signer had the private key and the message. In Bitcoin, the public key is the pseudonymous identity of the owner of a coin. Read more: "),a(i,{to:"/using-wasabi/Receive.html#bitcoin-public-keys-and-addresses"},{default:n(()=>[t("Bitcoin private keys")]),_:1})]),O,e("p",null,[t("Segregated Witness is a structure where the witness [signature or redeem script] is stored separately from the transaction Merkle tree. This is separated because the witness contains only data concerning transaction validity, but not about transaction effect. Read more: "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#why-does-wasabi-only-use-segwit-bech32-addresses"},{default:n(()=>[t("Why Wasabi uses only SegWit")]),_:1})]),U,e("p",null,[t("Timechain is a synonym of "),a(i,{to:"/glossary/Glossary-GeneralBitcoin.html#blockchain"},{default:n(()=>[t("blockchain")]),_:1}),t(". It emphasizes the achievement of the Bitcoin protocol to establish consensus on the temporal order of transactions so to prevent double-spends.")]),G,Q,j,e("p",null,[t("A transaction has a fee payment to the miner who includes the transaction in a valid block. It is implied by the difference of "),q,t(". Read more: "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#what-fee-should-i-select"},{default:n(()=>[t("What fee should I select?")]),_:1})]),z,e("p",null,[t("UTXO is an unspent transaction output that can be spent as an input in a new transaction. Read more: "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#how-can-i-select-utxos-for-coinjoin"},{default:n(()=>[t("How can I select UTXOs for CoinJoin?")]),_:1})]),E,L])}const Z=l(d,[["render",V],["__file","Glossary-GeneralBitcoin.html.vue"]]),$=JSON.parse('{"path":"/glossary/Glossary-GeneralBitcoin.html","title":"Bitcoin in general","lang":"en-US","frontmatter":{"title":"Bitcoin in general","description":"Explanations of common words used in Wasabi and regarding Bitcoin privacy with links to the docs for more details. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Bitcoin in general","slug":"bitcoin-in-general","link":"#bitcoin-in-general","children":[{"level":3,"title":"Address","slug":"address","link":"#address","children":[]},{"level":3,"title":"Bitcoin","slug":"bitcoin","link":"#bitcoin","children":[]},{"level":3,"title":"Bitcoin Core","slug":"bitcoin-core","link":"#bitcoin-core","children":[]},{"level":3,"title":"Bitcoin Improvement Proposal (BIP)","slug":"bitcoin-improvement-proposal-bip","link":"#bitcoin-improvement-proposal-bip","children":[]},{"level":3,"title":"Bitcoin Knots","slug":"bitcoin-knots","link":"#bitcoin-knots","children":[]},{"level":3,"title":"Block","slug":"block","link":"#block","children":[]},{"level":3,"title":"Blockchain","slug":"blockchain","link":"#blockchain","children":[]},{"level":3,"title":"Change","slug":"change","link":"#change","children":[]},{"level":3,"title":"Child Pays For Parent (CPFP)","slug":"child-pays-for-parent-cpfp","link":"#child-pays-for-parent-cpfp","children":[]},{"level":3,"title":"Coinbase","slug":"coinbase","link":"#coinbase","children":[]},{"level":3,"title":"Coinbase Transaction","slug":"coinbase-transaction","link":"#coinbase-transaction","children":[]},{"level":3,"title":"Cold Storage","slug":"cold-storage","link":"#cold-storage","children":[]},{"level":3,"title":"Confirmations","slug":"confirmations","link":"#confirmations","children":[]},{"level":3,"title":"Consensus","slug":"consensus","link":"#consensus","children":[]},{"level":3,"title":"Consensus Rules","slug":"consensus-rules","link":"#consensus-rules","children":[]},{"level":3,"title":"Custodial (Wallet or Mixer)","slug":"custodial-wallet-or-mixer","link":"#custodial-wallet-or-mixer","children":[]},{"level":3,"title":"Difficulty","slug":"difficulty","link":"#difficulty","children":[]},{"level":3,"title":"Difficulty Retargeting (Difficulty Adjustment)","slug":"difficulty-retargeting-difficulty-adjustment","link":"#difficulty-retargeting-difficulty-adjustment","children":[]},{"level":3,"title":"Difficulty Target","slug":"difficulty-target","link":"#difficulty-target","children":[]},{"level":3,"title":"ECDSA","slug":"ecdsa","link":"#ecdsa","children":[]},{"level":3,"title":"Fork","slug":"fork","link":"#fork","children":[]},{"level":3,"title":"Full node","slug":"full-node","link":"#full-node","children":[]},{"level":3,"title":"Fungibility","slug":"fungibility","link":"#fungibility","children":[]},{"level":3,"title":"Genesis Block","slug":"genesis-block","link":"#genesis-block","children":[]},{"level":3,"title":"Hard Fork","slug":"hard-fork","link":"#hard-fork","children":[]},{"level":3,"title":"Hardware Wallet (HWW)","slug":"hardware-wallet-hww","link":"#hardware-wallet-hww","children":[]},{"level":3,"title":"Hash","slug":"hash","link":"#hash","children":[]},{"level":3,"title":"Hierarchical Deterministic (HD) Protocol","slug":"hierarchical-deterministic-hd-protocol","link":"#hierarchical-deterministic-hd-protocol","children":[]},{"level":3,"title":"Hierarchical Deterministic (HD) Wallet","slug":"hierarchical-deterministic-hd-wallet","link":"#hierarchical-deterministic-hd-wallet","children":[]},{"level":3,"title":"Hot Wallet","slug":"hot-wallet","link":"#hot-wallet","children":[]},{"level":3,"title":"Input","slug":"input","link":"#input","children":[]},{"level":3,"title":"Lightning Network (LN)","slug":"lightning-network-ln","link":"#lightning-network-ln","children":[]},{"level":3,"title":"Mainnet","slug":"mainnet","link":"#mainnet","children":[]},{"level":3,"title":"Mempool","slug":"mempool","link":"#mempool","children":[]},{"level":3,"title":"Merkle Root","slug":"merkle-root","link":"#merkle-root","children":[]},{"level":3,"title":"Merkle Tree","slug":"merkle-tree","link":"#merkle-tree","children":[]},{"level":3,"title":"Miner","slug":"miner","link":"#miner","children":[]},{"level":3,"title":"Mining Reward","slug":"mining-reward","link":"#mining-reward","children":[]},{"level":3,"title":"Multisignature (multisig)","slug":"multisignature-multisig","link":"#multisignature-multisig","children":[]},{"level":3,"title":"Non-Custodial (Wallet or Mixer)","slug":"non-custodial-wallet-or-mixer","link":"#non-custodial-wallet-or-mixer","children":[]},{"level":3,"title":"Nonce","slug":"nonce","link":"#nonce","children":[]},{"level":3,"title":"Off-chain Transaction","slug":"off-chain-transaction","link":"#off-chain-transaction","children":[]},{"level":3,"title":"Output","slug":"output","link":"#output","children":[]},{"level":3,"title":"P2PKH","slug":"p2pkh","link":"#p2pkh","children":[]},{"level":3,"title":"P2SH","slug":"p2sh","link":"#p2sh","children":[]},{"level":3,"title":"P2TR","slug":"p2tr","link":"#p2tr","children":[]},{"level":3,"title":"P2WPKH","slug":"p2wpkh","link":"#p2wpkh","children":[]},{"level":3,"title":"Paper Wallet","slug":"paper-wallet","link":"#paper-wallet","children":[]},{"level":3,"title":"Partially Signed Bitcoin Transaction (PSBT)","slug":"partially-signed-bitcoin-transaction-psbt","link":"#partially-signed-bitcoin-transaction-psbt","children":[]},{"level":3,"title":"Pay-to-Witness-Public-Key-Hash (P2WPKH)","slug":"pay-to-witness-public-key-hash-p2wpkh","link":"#pay-to-witness-public-key-hash-p2wpkh","children":[]},{"level":3,"title":"Payment Channels","slug":"payment-channels","link":"#payment-channels","children":[]},{"level":3,"title":"Plausible deniability","slug":"plausible-deniability","link":"#plausible-deniability","children":[]},{"level":3,"title":"Private Key","slug":"private-key","link":"#private-key","children":[]},{"level":3,"title":"Proof of Work (POW)","slug":"proof-of-work-pow","link":"#proof-of-work-pow","children":[]},{"level":3,"title":"Public Key","slug":"public-key","link":"#public-key","children":[]},{"level":3,"title":"Regtest","slug":"regtest","link":"#regtest","children":[]},{"level":3,"title":"Replace by Fee (RBF)","slug":"replace-by-fee-rbf","link":"#replace-by-fee-rbf","children":[]},{"level":3,"title":"satoshi (sat)","slug":"satoshi-sat","link":"#satoshi-sat","children":[]},{"level":3,"title":"Satoshi Nakamoto","slug":"satoshi-nakamoto","link":"#satoshi-nakamoto","children":[]},{"level":3,"title":"Schnorr Digital Signature Scheme","slug":"schnorr-digital-signature-scheme","link":"#schnorr-digital-signature-scheme","children":[]},{"level":3,"title":"Script","slug":"script","link":"#script","children":[]},{"level":3,"title":"ScriptPubKey","slug":"scriptpubkey","link":"#scriptpubkey","children":[]},{"level":3,"title":"ScriptSig","slug":"scriptsig","link":"#scriptsig","children":[]},{"level":3,"title":"Segregated Witness (SegWit)","slug":"segregated-witness-segwit","link":"#segregated-witness-segwit","children":[]},{"level":3,"title":"Simplified Payment Verification (SPV)","slug":"simplified-payment-verification-spv","link":"#simplified-payment-verification-spv","children":[]},{"level":3,"title":"Soft Fork","slug":"soft-fork","link":"#soft-fork","children":[]},{"level":3,"title":"Taproot","slug":"taproot","link":"#taproot","children":[]},{"level":3,"title":"Testnet","slug":"testnet","link":"#testnet","children":[]},{"level":3,"title":"Timechain","slug":"timechain","link":"#timechain","children":[]},{"level":3,"title":"Transaction","slug":"transaction","link":"#transaction","children":[]},{"level":3,"title":"Transaction Fees","slug":"transaction-fees","link":"#transaction-fees","children":[]},{"level":3,"title":"Unspent Transaction Output (UTXO)","slug":"unspent-transaction-output-utxo","link":"#unspent-transaction-output-utxo","children":[]},{"level":3,"title":"Wallet","slug":"wallet","link":"#wallet","children":[]}]}],"git":{"updatedTime":1711262848000},"filePathRelative":"glossary/Glossary-GeneralBitcoin.md"}');export{Z as comp,$ as data}; +import{_ as l,r,o as c,c as h,a as e,b as t,d as a,w as n,e as s}from"./app-BgbPjqpx.js";const d={},p=e("h2",{id:"bitcoin-in-general",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoin-in-general"},[e("span",null,"Bitcoin in general")])],-1),u=e("h3",{id:"address",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#address"},[e("span",null,"Address")])],-1),f=e("h3",{id:"bitcoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoin"},[e("span",null,"Bitcoin")])],-1),b=e("p",null,"Bitcoin is a peer-to-peer electronic cash system. An innovative payment network and a new kind of money. It is a decentralized digital currency without a central bank or single administrator that can be sent from user to user on the peer-to-peer bitcoin blockchain network without the need for intermediaries.",-1),m=e("h3",{id:"bitcoin-core",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoin-core"},[e("span",null,"Bitcoin Core")])],-1),g=e("p",null,[t("Bitcoin Core is an open-source project which maintains and releases Bitcoin client software called "),e("code",null,"Bitcoin Core"),t(", considered to be Bitcoin's reference implementation. It is a direct descendant of the original Bitcoin software client released by Satoshi Nakamoto after he published the famous Bitcoin whitepaper.")],-1),y=e("code",null,"full-node",-1),k={href:"https://bitcoincore.org/",target:"_blank",rel:"noopener noreferrer"},w=e("h3",{id:"bitcoin-improvement-proposal-bip",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoin-improvement-proposal-bip"},[e("span",null,"Bitcoin Improvement Proposal (BIP)")])],-1),v=e("h3",{id:"bitcoin-knots",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bitcoin-knots"},[e("span",null,"Bitcoin Knots")])],-1),x={href:"https://bitcoinknots.org/",target:"_blank",rel:"noopener noreferrer"},B=s('

    Block

    A block is a batch of valid Bitcoin transactions and its hash must be a value below a certain difficulty target to prove the work of the miner. Each block references the hash of the previous block, thus creating a hash chain of blocks. On average a new block is mined every 10 minutes.

    Blockchain

    The blockchain is the one chain of valid Bitcoin blocks with the most accumulated proof of work. It is an append-only data structure with new blocks being added on average every 10 minutes. Because of its uniquely verifiable and global consensus, it is a revolutionary standard for time, thus some call it timechain.

    Change

    ',5),_=s('

    Child Pays For Parent (CPFP)

    Child Pays For Parent (CPFP) is a fee bumping technique where a user spends an output from a low fee rate unconfirmed transaction in a child transaction with a high fee rate in order to encourage miners to include both transactions in a block.

    Coinbase

    A special field used as the sole input for coinbase transactions. The coinbase allows claiming the block reward and provides up to 100 bytes for arbitrary data.

    Coinbase Transaction

    The first transaction in a block. Always created by a miner, it includes a single coinbase.

    Cold Storage

    ',7),P=s('

    Confirmations

    Once a transaction is included in a block, it has one confirmation. As soon as another block is mined on the same blockchain, the transaction has two confirmations, and so on. Six or more confirmations is considered sufficient proof that a transaction cannot be reversed.

    Consensus

    When several nodes, usually most nodes on the network, all have the same blocks in their locally-validated best blockchain.

    Consensus Rules

    The block validation rules that full nodes follow to stay in consensus with other nodes.

    Custodial (Wallet or Mixer)

    A custodial wallet is any wallet where the private keys of your coins are in the hands of a third party. In essence, they operate similarly to traditional banks.

    A custodial mixer needs you to send your bitcoins to a central part before mixing. This means that you are at risk of being stolen from.

    Difficulty

    A network-wide setting that controls how much computation is required to produce a proof of work.

    Difficulty Retargeting (Difficulty Adjustment)

    A network-wide recalculation of the difficulty that occurs once every 2,016 blocks and considers the hashing power of the previous 2,016 blocks.

    Difficulty Target

    A difficulty at which all the computation in the network will find blocks approximately every 10 minutes. It specifies the numeric value the hash of a block must not be above to be considered a valid block.

    ECDSA

    ECDSA (Elliptic Curve Digital Signature Algorithm) is one of the digital signature algorithms used by Bitcoin to ensure that funds can only be spent by their rightful owners.

    Fork

    Fork, also known as accidental fork, occurs when two or more blocks have the same block height, forking the blockchain. Typically occurs when two or more miners find blocks at nearly the same time. Can also happen as part of an attack.

    Full node

    Any computer that connects to the Bitcoin network is called a node. Nodes that fully verify all of the rules of Bitcoin are called full nodes. Full nodes download every block and transaction and check them against Bitcoin's consensus rules.

    Fungibility

    ',22),T=s('

    Genesis Block

    The first block in the blockchain, used to initialize the cryptocurrency.

    Hard Fork

    Hard fork, also known as hard-forking change, is a permanent divergence in the blockchain, it occurs when non-upgraded nodes can not validate blocks created by upgraded nodes that follow newer consensus rules. The upgraded nodes break the rules of the legacy nodes. Not to be confused with fork, soft fork, software fork or Git fork.

    Hardware Wallet (HWW)

    ',5),S=s('

    Hash

    A cryptographic hash function takes any input of arbitrary size [the message] and computes a value of fixed size that is unique to the input, which is called a hash or a digest. If one bit of the input changes, the output will be completely different [avalanche effect]. And there are no two messages that result in the same hash [collision resistance]. The only way to get any given input, is by computing all possible inputs, it is a one-way function [pre-image resistance]. Bitcoin uses the SHA256 in many parts of the protocol.

    Hierarchical Deterministic (HD) Protocol

    The Hierarchical Deterministic key creation and transfer protocol (BIP32), which allows creating child keys from parent keys in a hierarchy.

    Hierarchical Deterministic (HD) Wallet

    Wallets using the Hierarchical Deterministic Protocol key creation and transfer protocol (BIP32).

    Hot Wallet

    A hot wallet is a software wallet that runs on a device which is connected to the Internet. Wasabi is a hot wallet by default.

    Input

    Input, transaction input, or TxIn is an input in a Bitcoin transaction which contains two fields: a unique transaction hash and an index number, which references one utxo of a previous transaction which is spent in this transaction.

    Lightning Network (LN)

    Lightning Network is a proposed implementation of Hashed Timelock Contracts (HTLCs) with bi-directional payment channels which allows payments to be securely routed across multiple peer-to-peer payment channels. This allows the formation of a network where any peer on the network can pay any other peer even if they don't directly have a channel open between each other.

    Mainnet

    The original and main network for Bitcoin transactions, where satoshis have real economic value.

    Mempool

    ',15),W=s('

    Merkle Root

    The root node of a merkle tree, a descendant of all the hashed pairs in the tree. Block headers must include a valid merkle root descended from all transactions in that block.

    Merkle Tree

    A tree constructed by hashing paired data (the leaves), then pairing and hashing the results until a single hash remains, the merkle root. In Bitcoin, the leaves are almost always transactions from a single block.

    Miner

    A Bitcoin user that attempts to find valid proof of work for new candidate blocks, by repeated hashing until the difficulty target is met.

    Mining Reward

    An amount of satoshis included in each new block as a reward by the network to the miner who found the proof of work solution. Initially it was 50 bitcoin per block, which is halved every 210 000 blocks, or roughly 4 years. This leads to a total money supply of just below 21 million bitcoin.

    Multisignature (multisig)

    ',9),A=e("code",null,"m",-1),C=e("code",null,"n",-1),H=s('

    Non-Custodial (Wallet or Mixer)

    A non-custodial wallet is any wallet where the private keys of your coins are in your hands. Non-custodial wallets give you full control over your bitcoins.

    A non-custodial mixer like Wasabi eliminates the risk that the coordinator can steal your bitcoin. Each participant verifies the proposed transaction, and signs it only if it is valid. This signature is only valid for this transaction, so any attempt to change the transaction after the fact is futile. The funds will always be in a Bitcoin address that you control.

    Nonce

    The nonce in a Bitcoin block is a 32-bit (4-byte) field whose value is set so that the hash of the block will contain a run of leading zeros. The rest of the fields may not be changed, as they have a defined meaning.

    Off-chain Transaction

    An off-chain transaction is the movement of value outside of the blockchain. While an on-chain transaction - usually referred to as simply a transaction - modifies the blockchain and depends on the blockchain to determine its validity. An off-chain transaction relies on other methods to record and validate the transaction.

    Output

    Output, transaction output, or TxOut is an output in a Bitcoin transaction which contains two fields: a value field for transferring zero or more satoshis and a pubkey script for indicating what conditions must be fulfilled for those satoshis to be further spent.

    P2PKH

    Many transactions processed on the Bitcoin network spend outputs locked with a Pay-to-Public-Key-Hash or P2PKH script. These outputs contain a locking script that locks the output to a public key hash, more commonly known as a Bitcoin address. An output locked by a P2PKH script can be unlocked (spent) by presenting a public key and a digital signature created by the corresponding private key.

    P2SH

    P2SH or Pay-to-Script-Hash is a type of transaction that simplifies the use of complex transaction scripts. With P2SH the complex script that details the spending conditions (redeem script) is committed to with a hash in the locking script.

    P2TR

    A pay-to-taproot (P2TR), also known as a Taproot or Bech32m address, is the most recent and advanced bitcoin address format. Taproot introduces more advanced security, privacy, flexibility and scaling to bitcoin.

    P2WPKH

    The signature of a P2WPKH (Pay-to-Witness-Public-Key-Hash) contains the same information as a P2PKH spending, but is located in the witness field instead of the scriptSig field.

    Paper Wallet

    In the most specific sense, a paper wallet is a document containing all the secrets to spend a Bitcoin UTXO. It is a way of storing bitcoin offline as a physical document.

    Partially Signed Bitcoin Transaction (PSBT)

    ',20),I={href:"https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki",target:"_blank",rel:"noopener noreferrer"},R=e("h3",{id:"pay-to-witness-public-key-hash-p2wpkh",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#pay-to-witness-public-key-hash-p2wpkh"},[e("span",null,"Pay-to-Witness-Public-Key-Hash (P2WPKH)")])],-1),F={href:"https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki",target:"_blank",rel:"noopener noreferrer"},K=s('

    Payment Channels

    A payment channel is class of techniques designed to allow users to make multiple Bitcoin transactions without committing all of the transactions to the Bitcoin blockchain. In a typical payment channel, only two transactions are added to the blockchain, one funding and one closing transaction, but a nearly unlimited number of payments can be made between the participants.

    Plausible deniability

    Plausible deniability is the ability to deny knowledge of or responsibility for any damnable actions committed by others in an organizational hierarchy because of a lack of evidence that can confirm their participation, even if they were personally involved in or at least willfully ignorant of the actions.

    Private Key

    ',5),D=e("h3",{id:"proof-of-work-pow",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#proof-of-work-pow"},[e("span",null,"Proof of Work (POW)")])],-1),M=e("p",null,"One of the requirements for a Bitcoin block to be valid is its hash should be below a certain difficulty target. In order to create a valid block, a miner must repeatedly hash a candidate block with a changing nonce until by sheer luck he finds a hash with low value. By providing this pre-image block, anyone can verify the amount of computational energy that a miner on average should have invested in order to find this block, and this is what is known as Proof of Work.",-1),N=e("h3",{id:"public-key",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#public-key"},[e("span",null,"Public Key")])],-1),O=s('

    Regtest

    A local testing environment in which developers can instantly generate blocks on demand for testing events, and can create private satoshis with no real-world value.

    Replace by Fee (RBF)

    Replacing one version of an unconfirmed transaction with a different version of the transaction that pays a higher transaction fee.

    satoshi (sat)

    A satoshi is the smallest denomination of bitcoin that can be recorded on the blockchain. It is the equivalent of 0.00000001 bitcoin and is named after the creator of Bitcoin, Satoshi Nakamoto.

    Satoshi Nakamoto

    Satoshi Nakamoto is the name used by the person or group of people who designed Bitcoin and created its original reference implementation. As a part of the implementation, they also devised the first blockchain database. In the process they were the first to solve the double-spending problem for digital currency in a decentralized and self verifying nature. Their real identity remains unknown.

    Schnorr Digital Signature Scheme

    Schnorr Digital Signature Scheme is one of the digital signature algorithms used by Bitcoin to ensure that funds can only be spent by their rightful owners. Schnorr signatures and public keys can be aggregated, meaning that multiple parties with unique private keys can sign the same message, which can be verified in batches instead of individually.

    Script

    Bitcoin uses a scripting system for transactions. Forth-like, Script is simple, stack-based and processed from left to right. It is purposefully not Turing-complete, with no loops.

    ScriptPubKey

    ScriptPubKey or pubkey script, is a script included in outputs which sets the conditions that must be fulfilled for those satoshis to be spent. Data for fulfilling the conditions can be provided in a signature script.

    ScriptSig

    ScriptSig or signature script, is the data generated by a spender which is almost always used as variables to satisfy a pubkey script.

    Segregated Witness (SegWit)

    ',17),U=s('

    Simplified Payment Verification (SPV)

    SPV is a method for verifying particular transactions were included in a block without downloading the entire block. The method is used by some lightweight Bitcoin clients.

    Soft Fork

    A soft fork is a change to the Bitcoin consensus rules that is backwards compatible. Users of this update do not break the rules of legacy users, but rather restrict themselves to a more narrow rule set.

    Taproot

    Taproot is an upgrade to Bitcoin which introduces several new features. Taproot integrates the Schnorr digital signature scheme into Bitcoin, upgrading Bitcoin’s core cryptography. Taproot builds on the SegWit upgrade to improve Bitcoin’s privacy and lower transaction fees. Taproot makes future Bitcoin upgrades easier by reforming Bitcoin’s scripting language.

    Testnet

    A testing environment in which users can obtain and spend satoshis that have no real-world value on a global network that is very similar to the Bitcoin mainnet.

    Timechain

    ',9),G=e("h3",{id:"transaction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transaction"},[e("span",null,"Transaction")])],-1),Q=e("p",null,"In simple terms, a transfer of bitcoin. More precisely, a transaction is a signed data structure expressing a transfer of value and consisting mainly of inputs and outputs. Transactions are transmitted over the Bitcoin network, collected by miners, and included into blocks, made permanent on the blockchain.",-1),j=e("h3",{id:"transaction-fees",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transaction-fees"},[e("span",null,"Transaction Fees")])],-1),q=e("code",null,"inputs - outputs",-1),z=e("h3",{id:"unspent-transaction-output-utxo",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#unspent-transaction-output-utxo"},[e("span",null,"Unspent Transaction Output (UTXO)")])],-1),E=e("h3",{id:"wallet",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wallet"},[e("span",null,"Wallet")])],-1),L=e("p",null,"Software that holds all your Bitcoin addresses and secret keys. Use it to send, receive, and store your bitcoin.",-1);function V(X,J){const i=r("RouteLink"),o=r("ExternalLinkIcon");return c(),h("div",null,[p,u,e("p",null,[t("A Bitcoin invoice address commits to a public key or script which defines who can spend the coin. It is specified in the output of a transaction, and it should only be used once. Wasabi uses the bech32 and bech32m format to encode native segregated witness addresses. Read more: "),a(i,{to:"/using-wasabi/Receive.html#bitcoin-public-keys-and-addresses"},{default:n(()=>[t("Bitcoin addresses")]),_:1})]),f,b,m,g,e("p",null,[t("Bitcoin Core consists of both "),y,t(" software for fully validating the blockchain as well as a Bitcoin wallet. The project also currently maintains related software such as the cryptography library libsecp256k1 and others located at GitHub. Read more: "),e("a",k,[t("Bitcoin Core Website"),a(o)])]),w,e("p",null,[t("Bitcoin Improvement Proposal. A design document for introducing features or information to Bitcoin. Read more: "),a(i,{to:"/using-wasabi/BIPs.html"},{default:n(()=>[t("Wasabi Supported BIPs")]),_:1})]),v,e("p",null,[t("Bitcoin Knots is a derivative of Bitcoin Core with a collection of improvements backported from and sometimes maintained outside of Core's master git tree. Since version 1.1.11, Wasabi has partial Bitcoin Knots integration. This means that it is possible (but not mandatory) to start Bitcoin Knots during the launch of Wasabi, without having to install or configure anything. Read more: "),e("a",x,[t("Bitcoin Knots Website"),a(o)])]),B,e("p",null,[t("In a transaction where the provided input coins are larger than the value sent to the destination address, then the leftover change is sent to a new address of the same wallet. Read more: "),a(i,{to:"/using-wasabi/ChangeCoins.html"},{default:n(()=>[t("Change coins")]),_:1})]),_,e("p",null,[t("Refers to keeping a reserve of important Bitcoin secrets offline. Cold storage is achieved when Bitcoin private keys are created and stored in a secure offline environment. Cold storage is important for anyone with bitcoin holdings. Online computers are vulnerable to hackers and should not be used to store a significant amount of bitcoin. Read more: "),a(i,{to:"/using-wasabi/ColdWasabi.html"},{default:n(()=>[t("Cold Wasabi Protocol")]),_:1})]),P,e("p",null,[t("Fungibility is a desirable property of Bitcoin UTXOs that are indistinguishable from each other. Read more: "),a(i,{to:"/why-wasabi/TransactionSurveillanceCompanies.html#attempt-to-destroy-fungibility"},{default:n(()=>[t("Transaction surveillance companies attempting to destroy fungibility")]),_:1})]),T,e("p",null,[t("A hardware wallet is a special type of Bitcoin wallet which generates and stores the user's private keys on a dedicated hardware device. Read more: "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#hardware-wallet"},{default:n(()=>[t("Hardware Wallet FAQs")]),_:1})]),S,e("p",null,[t("The Bitcoin Mempool (memory pool) is a collection of all transaction data in a block that have been verified by Bitcoin nodes, but are not yet confirmed. Read more: "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#how-does-wasabi-know-of-incoming-transactions-to-the-mempool"},{default:n(()=>[t("How does Wasabi know of incoming transactions to the mempool?")]),_:1})]),W,e("p",null,[t("Multisignature (m-of-n multisig) refers to requiring more than one key to authorize a Bitcoin transaction. Only with "),A,t(" signatures of "),C,t(" public keys can the bitcoin be spent. Read more: "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#can-i-generate-a-multi-signature-script"},{default:n(()=>[t("Can I generate a multi signature script?")]),_:1})]),H,e("p",null,[t("PSBT is a binary transaction format which contains the information necessary for a signer to produce signatures for the transaction and holds the signatures for an input while the input does not have a complete set of signatures. The signer can be offline as all necessary information will be provided in the transaction. Read more: "),e("a",I,[t("BIP 174 Partially Signed Bitcoin Transaction Format"),a(o)])]),R,e("p",null,[t("The signature of a P2WPKH contains the same information as a Pay-to-Public-Key-Hash (P2PKH) spending, but is located in the witness field instead of the scriptSig field. The scriptPubKey is also modified. Read more: "),e("a",F,[t("BIP 84 derivation scheme for P2WPKH based accounts"),a(o)])]),K,e("p",null,[t("A private key is a large number that must be chosen at random, it is thus a very secure password and should be kept secret. With knowledge of this number, anyone can easily compute the public key, and a signature over any message. It can also be used to decrypt any message that was encrypted to the public key corresponding to the private key. In Bitcoin, a signature over a valid transaction message gives the right to spend a coin, thus knowledge of the private key corresponds to ownership of the bitcoin. Read more: "),a(i,{to:"/using-wasabi/Receive.html#bitcoin-public-keys-and-addresses"},{default:n(()=>[t("Bitcoin private keys")]),_:1})]),D,M,N,e("p",null,[t("A public key is calculated by multiplying the private key to the generator point of an elliptic curve. Given only the public key, the private key cannot be calculated. Anyone can encrypt a message using a public key. This encrypted message (cyphertext) can only be decrypted through the related private key. Given a public key and a signature over a message, anyone can verify that the signer had the private key and the message. In Bitcoin, the public key is the pseudonymous identity of the owner of a coin. Read more: "),a(i,{to:"/using-wasabi/Receive.html#bitcoin-public-keys-and-addresses"},{default:n(()=>[t("Bitcoin private keys")]),_:1})]),O,e("p",null,[t("Segregated Witness is a structure where the witness [signature or redeem script] is stored separately from the transaction Merkle tree. This is separated because the witness contains only data concerning transaction validity, but not about transaction effect. Read more: "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#why-does-wasabi-only-use-segwit-bech32-addresses"},{default:n(()=>[t("Why Wasabi uses only SegWit")]),_:1})]),U,e("p",null,[t("Timechain is a synonym of "),a(i,{to:"/glossary/Glossary-GeneralBitcoin.html#blockchain"},{default:n(()=>[t("blockchain")]),_:1}),t(". It emphasizes the achievement of the Bitcoin protocol to establish consensus on the temporal order of transactions so to prevent double-spends.")]),G,Q,j,e("p",null,[t("A transaction has a fee payment to the miner who includes the transaction in a valid block. It is implied by the difference of "),q,t(". Read more: "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#what-fee-should-i-select"},{default:n(()=>[t("What fee should I select?")]),_:1})]),z,e("p",null,[t("UTXO is an unspent transaction output that can be spent as an input in a new transaction. Read more: "),a(i,{to:"/FAQ/FAQ-UseWasabi.html#how-can-i-select-utxos-for-coinjoin"},{default:n(()=>[t("How can I select UTXOs for CoinJoin?")]),_:1})]),E,L])}const Z=l(d,[["render",V],["__file","Glossary-GeneralBitcoin.html.vue"]]),$=JSON.parse('{"path":"/glossary/Glossary-GeneralBitcoin.html","title":"Bitcoin in general","lang":"en-US","frontmatter":{"title":"Bitcoin in general","description":"Explanations of common words used in Wasabi and regarding Bitcoin privacy with links to the docs for more details. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Bitcoin in general","slug":"bitcoin-in-general","link":"#bitcoin-in-general","children":[{"level":3,"title":"Address","slug":"address","link":"#address","children":[]},{"level":3,"title":"Bitcoin","slug":"bitcoin","link":"#bitcoin","children":[]},{"level":3,"title":"Bitcoin Core","slug":"bitcoin-core","link":"#bitcoin-core","children":[]},{"level":3,"title":"Bitcoin Improvement Proposal (BIP)","slug":"bitcoin-improvement-proposal-bip","link":"#bitcoin-improvement-proposal-bip","children":[]},{"level":3,"title":"Bitcoin Knots","slug":"bitcoin-knots","link":"#bitcoin-knots","children":[]},{"level":3,"title":"Block","slug":"block","link":"#block","children":[]},{"level":3,"title":"Blockchain","slug":"blockchain","link":"#blockchain","children":[]},{"level":3,"title":"Change","slug":"change","link":"#change","children":[]},{"level":3,"title":"Child Pays For Parent (CPFP)","slug":"child-pays-for-parent-cpfp","link":"#child-pays-for-parent-cpfp","children":[]},{"level":3,"title":"Coinbase","slug":"coinbase","link":"#coinbase","children":[]},{"level":3,"title":"Coinbase Transaction","slug":"coinbase-transaction","link":"#coinbase-transaction","children":[]},{"level":3,"title":"Cold Storage","slug":"cold-storage","link":"#cold-storage","children":[]},{"level":3,"title":"Confirmations","slug":"confirmations","link":"#confirmations","children":[]},{"level":3,"title":"Consensus","slug":"consensus","link":"#consensus","children":[]},{"level":3,"title":"Consensus Rules","slug":"consensus-rules","link":"#consensus-rules","children":[]},{"level":3,"title":"Custodial (Wallet or Mixer)","slug":"custodial-wallet-or-mixer","link":"#custodial-wallet-or-mixer","children":[]},{"level":3,"title":"Difficulty","slug":"difficulty","link":"#difficulty","children":[]},{"level":3,"title":"Difficulty Retargeting (Difficulty Adjustment)","slug":"difficulty-retargeting-difficulty-adjustment","link":"#difficulty-retargeting-difficulty-adjustment","children":[]},{"level":3,"title":"Difficulty Target","slug":"difficulty-target","link":"#difficulty-target","children":[]},{"level":3,"title":"ECDSA","slug":"ecdsa","link":"#ecdsa","children":[]},{"level":3,"title":"Fork","slug":"fork","link":"#fork","children":[]},{"level":3,"title":"Full node","slug":"full-node","link":"#full-node","children":[]},{"level":3,"title":"Fungibility","slug":"fungibility","link":"#fungibility","children":[]},{"level":3,"title":"Genesis Block","slug":"genesis-block","link":"#genesis-block","children":[]},{"level":3,"title":"Hard Fork","slug":"hard-fork","link":"#hard-fork","children":[]},{"level":3,"title":"Hardware Wallet (HWW)","slug":"hardware-wallet-hww","link":"#hardware-wallet-hww","children":[]},{"level":3,"title":"Hash","slug":"hash","link":"#hash","children":[]},{"level":3,"title":"Hierarchical Deterministic (HD) Protocol","slug":"hierarchical-deterministic-hd-protocol","link":"#hierarchical-deterministic-hd-protocol","children":[]},{"level":3,"title":"Hierarchical Deterministic (HD) Wallet","slug":"hierarchical-deterministic-hd-wallet","link":"#hierarchical-deterministic-hd-wallet","children":[]},{"level":3,"title":"Hot Wallet","slug":"hot-wallet","link":"#hot-wallet","children":[]},{"level":3,"title":"Input","slug":"input","link":"#input","children":[]},{"level":3,"title":"Lightning Network (LN)","slug":"lightning-network-ln","link":"#lightning-network-ln","children":[]},{"level":3,"title":"Mainnet","slug":"mainnet","link":"#mainnet","children":[]},{"level":3,"title":"Mempool","slug":"mempool","link":"#mempool","children":[]},{"level":3,"title":"Merkle Root","slug":"merkle-root","link":"#merkle-root","children":[]},{"level":3,"title":"Merkle Tree","slug":"merkle-tree","link":"#merkle-tree","children":[]},{"level":3,"title":"Miner","slug":"miner","link":"#miner","children":[]},{"level":3,"title":"Mining Reward","slug":"mining-reward","link":"#mining-reward","children":[]},{"level":3,"title":"Multisignature (multisig)","slug":"multisignature-multisig","link":"#multisignature-multisig","children":[]},{"level":3,"title":"Non-Custodial (Wallet or Mixer)","slug":"non-custodial-wallet-or-mixer","link":"#non-custodial-wallet-or-mixer","children":[]},{"level":3,"title":"Nonce","slug":"nonce","link":"#nonce","children":[]},{"level":3,"title":"Off-chain Transaction","slug":"off-chain-transaction","link":"#off-chain-transaction","children":[]},{"level":3,"title":"Output","slug":"output","link":"#output","children":[]},{"level":3,"title":"P2PKH","slug":"p2pkh","link":"#p2pkh","children":[]},{"level":3,"title":"P2SH","slug":"p2sh","link":"#p2sh","children":[]},{"level":3,"title":"P2TR","slug":"p2tr","link":"#p2tr","children":[]},{"level":3,"title":"P2WPKH","slug":"p2wpkh","link":"#p2wpkh","children":[]},{"level":3,"title":"Paper Wallet","slug":"paper-wallet","link":"#paper-wallet","children":[]},{"level":3,"title":"Partially Signed Bitcoin Transaction (PSBT)","slug":"partially-signed-bitcoin-transaction-psbt","link":"#partially-signed-bitcoin-transaction-psbt","children":[]},{"level":3,"title":"Pay-to-Witness-Public-Key-Hash (P2WPKH)","slug":"pay-to-witness-public-key-hash-p2wpkh","link":"#pay-to-witness-public-key-hash-p2wpkh","children":[]},{"level":3,"title":"Payment Channels","slug":"payment-channels","link":"#payment-channels","children":[]},{"level":3,"title":"Plausible deniability","slug":"plausible-deniability","link":"#plausible-deniability","children":[]},{"level":3,"title":"Private Key","slug":"private-key","link":"#private-key","children":[]},{"level":3,"title":"Proof of Work (POW)","slug":"proof-of-work-pow","link":"#proof-of-work-pow","children":[]},{"level":3,"title":"Public Key","slug":"public-key","link":"#public-key","children":[]},{"level":3,"title":"Regtest","slug":"regtest","link":"#regtest","children":[]},{"level":3,"title":"Replace by Fee (RBF)","slug":"replace-by-fee-rbf","link":"#replace-by-fee-rbf","children":[]},{"level":3,"title":"satoshi (sat)","slug":"satoshi-sat","link":"#satoshi-sat","children":[]},{"level":3,"title":"Satoshi Nakamoto","slug":"satoshi-nakamoto","link":"#satoshi-nakamoto","children":[]},{"level":3,"title":"Schnorr Digital Signature Scheme","slug":"schnorr-digital-signature-scheme","link":"#schnorr-digital-signature-scheme","children":[]},{"level":3,"title":"Script","slug":"script","link":"#script","children":[]},{"level":3,"title":"ScriptPubKey","slug":"scriptpubkey","link":"#scriptpubkey","children":[]},{"level":3,"title":"ScriptSig","slug":"scriptsig","link":"#scriptsig","children":[]},{"level":3,"title":"Segregated Witness (SegWit)","slug":"segregated-witness-segwit","link":"#segregated-witness-segwit","children":[]},{"level":3,"title":"Simplified Payment Verification (SPV)","slug":"simplified-payment-verification-spv","link":"#simplified-payment-verification-spv","children":[]},{"level":3,"title":"Soft Fork","slug":"soft-fork","link":"#soft-fork","children":[]},{"level":3,"title":"Taproot","slug":"taproot","link":"#taproot","children":[]},{"level":3,"title":"Testnet","slug":"testnet","link":"#testnet","children":[]},{"level":3,"title":"Timechain","slug":"timechain","link":"#timechain","children":[]},{"level":3,"title":"Transaction","slug":"transaction","link":"#transaction","children":[]},{"level":3,"title":"Transaction Fees","slug":"transaction-fees","link":"#transaction-fees","children":[]},{"level":3,"title":"Unspent Transaction Output (UTXO)","slug":"unspent-transaction-output-utxo","link":"#unspent-transaction-output-utxo","children":[]},{"level":3,"title":"Wallet","slug":"wallet","link":"#wallet","children":[]}]}],"git":{"updatedTime":1711262848000},"filePathRelative":"glossary/Glossary-GeneralBitcoin.md"}');export{Z as comp,$ as data}; diff --git a/assets/Glossary-PrivacyWasabi.html-Q6b2sZUc.js b/assets/Glossary-PrivacyWasabi.html-DZPZVU0l.js similarity index 99% rename from assets/Glossary-PrivacyWasabi.html-Q6b2sZUc.js rename to assets/Glossary-PrivacyWasabi.html-DZPZVU0l.js index 34ca910d71..ea2c4c25c9 100644 --- a/assets/Glossary-PrivacyWasabi.html-Q6b2sZUc.js +++ b/assets/Glossary-PrivacyWasabi.html-DZPZVU0l.js @@ -1 +1 @@ -import{_ as r,r as l,o as c,c as h,a as e,b as n,d as i,w as a,e as s}from"./app-BPKesm5h.js";const d={},u=s('

    Privacy and Wasabi

    #twoweeks

    The #twoweeks is a fun inside joke often used in the Wasabi documentation and, more generally, in the Internet community. In the case of Wasabi documentation, it usually indicates the arrival of a new function or update, to which the future date is still uncertain.

    E.g. "Lightning Network is coming to Wasabi in #twoweeks"

    Address Reuse

    ',5),p=e("h3",{id:"anonymity-score-anonscore",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#anonymity-score-anonscore"},[e("span",null,"Anonymity Score (anonscore)")])],-1),m=e("h3",{id:"anonymity-set-anonset",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#anonymity-set-anonset"},[e("span",null,"Anonymity Set (anonset)")])],-1),b=e("h3",{id:"auto-start-coinjoin-pleb-stop-threshold",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#auto-start-coinjoin-pleb-stop-threshold"},[e("span",null,"Auto-start coinjoin (Pleb Stop) threshold")])],-1),y=e("p",null,[n("The auto-start coinjoin threshold, a.k.a Pleb Stop, is the minimum wallet balance at which coinjoin will automatically start/continue. The amount can be changed in the "),e("em",null,"Coinjoin Settings"),n(" ("),e("em",null,"Auto-start coinjoin threshold"),n(" setting), the default is 0.01 BTC.")],-1),f=e("h3",{id:"backend",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#backend"},[e("span",null,"Backend")])],-1),w={href:"https://www.merriam-webster.com/dictionary/back%20end",target:"_blank",rel:"noopener noreferrer"},g=e("h3",{id:"block-filters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#block-filters"},[e("span",null,"Block filters")])],-1),k={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},v=e("h3",{id:"blockchain-analysis",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#blockchain-analysis"},[e("span",null,"Blockchain Analysis")])],-1),_=e("h3",{id:"bloom-filter",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bloom-filter"},[e("span",null,"Bloom Filter")])],-1),C={href:"https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki",target:"_blank",rel:"noopener noreferrer"},x=e("h3",{id:"change-address-detection",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#change-address-detection"},[e("span",null,"Change Address Detection")])],-1),W=e("h3",{id:"chaumian-coinjoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#chaumian-coinjoin"},[e("span",null,"Chaumian CoinJoin")])],-1),j=e("h3",{id:"client",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#client"},[e("span",null,"Client")])],-1),T={href:"https://www.merriam-webster.com/dictionary/client",target:"_blank",rel:"noopener noreferrer"},A=e("h3",{id:"cluster",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cluster"},[e("span",null,"Cluster")])],-1),P=e("h3",{id:"coin-control",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coin-control"},[e("span",null,"Coin Control")])],-1),R=e("h3",{id:"coinjoin-cj",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoin-cj"},[e("span",null,"CoinJoin (CJ)")])],-1),S=e("h3",{id:"coinjoin-strategy",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoin-strategy"},[e("span",null,"Coinjoin Strategy")])],-1),B=e("em",null,"Coinjoin Strategy",-1),F=e("h3",{id:"coinjoin-time-preference",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoin-time-preference"},[e("span",null,"Coinjoin Time Preference")])],-1),I=e("p",null,"The wallet will only participate in coinjoin when the fee rate is below the median of the chosen time frame (Hours, Days, Weeks, or Months).",-1),J=e("p",null,[n("("),e("em",null,"FeeRateMedianTimeFrameHours"),n(" in the wallet file)")],-1),Q=e("h3",{id:"coinjoined-coins",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoined-coins"},[e("span",null,"CoinJoined coins")])],-1),U=e("h3",{id:"common-input-ownership-heuristic",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#common-input-ownership-heuristic"},[e("span",null,"Common-Input-Ownership heuristic")])],-1),D=e("p",null,"This is a heuristic or assumption which says that if a transaction has more than one input then all those inputs are owned by the same entity.",-1),L=e("h3",{id:"coordinator",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coordinator"},[e("span",null,"Coordinator")])],-1),z=e("h3",{id:"daemon",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#daemon"},[e("span",null,"Daemon")])],-1),E=e("h3",{id:"discreet-mode",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#discreet-mode"},[e("span",null,"Discreet Mode")])],-1),K=e("h3",{id:"dust",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dust"},[e("span",null,"Dust")])],-1),O=e("code",null,"forced address reuse attack",-1),M=e("h3",{id:"label",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#label"},[e("span",null,"Label")])],-1),G=e("h3",{id:"know-your-customer-kyc",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#know-your-customer-kyc"},[e("span",null,"Know Your Customer (KYC)")])],-1),N=e("h3",{id:"observers",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#observers"},[e("span",null,"Observers")])],-1),q=s('

    Pay to EndPoint (P2EP)

    Pay to EndPoint is when the receiver is reachable over the internet and the sender communicates with the receiver to coordinate a more advanced transaction. The Tor onion service, IP address or domain of the receiver is included in a BIP21 Bitcoin URI payment link.

    Peers

    Peers in our documentation refers mainly to Bitcoin and Wasabi Wallet users, but it also means people. They are literally peers in the network, or in the CoinJoin.

    RPC

    ',5),Y=e("h3",{id:"safety-coinjoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#safety-coinjoin"},[e("span",null,"Safety coinjoin")])],-1),X=e("p",null,[n("Safety coinjoin is a concept for doing an extra coinjoin after a user registers only "),e("em",null,"anonymity score"),n(" 1 (non-private) coins in their first round.")],-1),H={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.6",target:"_blank",rel:"noopener noreferrer"},V=e("h3",{id:"taint",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#taint"},[e("span",null,"Taint")])],-1),Z=e("h3",{id:"the-onion-router-tor",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#the-onion-router-tor"},[e("span",null,"The Onion Router (Tor)")])],-1),$=e("h3",{id:"transaction-surveillance-company",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transaction-surveillance-company"},[e("span",null,"Transaction Surveillance Company")])],-1),ee=e("h3",{id:"tumbling-tumbler",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#tumbling-tumbler"},[e("span",null,"Tumbling / Tumbler")])],-1),ne=e("p",null,"Tumbling is a synonym of 'Mixing'. Similarly, Tumbler is the synonym of 'Mixer'.",-1),ie=e("h3",{id:"turbosync",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#turbosync"},[e("span",null,"TurboSync")])],-1),te=e("h3",{id:"wabisabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wabisabi"},[e("span",null,"WabiSabi")])],-1),ae={href:"https://github.com/zkSNACKs/WabiSabi/releases/latest/download/WabiSabi.pdf",target:"_blank",rel:"noopener noreferrer"},oe=s('

    Wallet fingerprinting

    A careful analyst sometimes deduces which software created a certain transaction, because many different wallet softwares don't always create transactions in exactly the same way.

    Wasabika

    Wasabikas are builders, users and supporters of Wasabi in general.

    XPUB (Extended Public Key)

    An xpub, also known as Extended Public Key, is a part of BIP-32 that will allow you to observe your wallet without the private key (xpriv).

    ',7);function se(le,re){const t=l("RouteLink"),o=l("ExternalLinkIcon");return c(),h("div",null,[u,e("p",null,[n("Address reuse refers to the use of the same address for multiple transactions, this is very bad for privacy. Read more: "),i(t,{to:"/why-wasabi/AddressReuse.html"},{default:a(()=>[n("Address reuse")]),_:1})]),p,e("p",null,[n("Anonymity score is a new way to estimate the entropy level of a UTXO in an unequal-but-highly-composable output value coinjoin. The anonymity score is a metric to help the wallet decide when it's time to stop the coinjoining process. Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#what-is-the-anonymity-score"},{default:a(()=>[n("What is the anonymity score?")]),_:1})]),m,e("p",null,[n("The anonymity set is effectively the size of the group you are hiding in during a CoinJoin. It's the quantity of equal value outputs of one CoinJoin transaction. Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#what-is-the-anonymity-set"},{default:a(()=>[n("What is the anonymity set?")]),_:1})]),b,y,f,e("p",null,[e("a",w,[n("The part of a software system that is not usually visible or accessible to a user of that system"),i(o)]),n(". In the case of Wasabi, the backend functions as the coinjoin coordinator and provides data to the "),i(t,{to:"/glossary/Glossary-PrivacyWasabi.html#Client"},{default:a(()=>[n("client")]),_:1}),n(" (user) like block filters, exchange rate, and network estimations (mempool).")]),g,e("p",null,[n("A filter representing a compact list of addresses in one block. Wasabi checks locally if any block filter contains transactions with addresses of the wallet. No public keys are sent to any third party server, thus it is very private. Read more: "),e("a",k,[n("BIP 158: Compact Block Filters for Light Clients"),i(o)])]),v,e("p",null,[n("Blockchain analysis is used by transaction surveillance companies to follow the transaction history of coins. Techniques like the common-input-ownership heuristic or change detection are used to create a cluster of transactions belonging to one user. Read more: "),i(t,{to:"/why-wasabi/TransactionSurveillanceCompanies.html#blockchain-analysis"},{default:a(()=>[n("Blockchain Analysis")]),_:1})]),_,e("p",null,[n("A filter used primarily by SPV clients to request only block headers and merkle proofs of a given transaction from full nodes. This is very bad for privacy, as third party servers learn about which addresses you are interested in. Read more: "),e("a",C,[n("BIP 37: Connection Bloom Filtering"),i(o)])]),x,e("p",null,[n("Many Bitcoin transactions have change outputs. It would be a serious privacy leak if the change address can be somehow found, as it would link the ownership of the (now spent) inputs with a new output. Read more: "),i(t,{to:"/using-wasabi/ChangeCoins.html"},{default:a(()=>[n("Change coins")]),_:1})]),W,e("p",null,[n("A Chaumian CoinJoin is a special type of CoinJoin that utilizes Chaumian [or Schnorr] blind signatures to prevent the central coordinator from spying on the linkage between inputs and outputs. Read more: "),i(t,{to:"/using-wasabi/CoinJoin.html#zerolink-protocol-step-by-step"},{default:a(()=>[n("Use of blind signatures in CoinJoin")]),_:1})]),j,e("p",null,[e("a",T,[n("A software that allows a computer to function as a client in a network"),i(o)]),n(". In the case of Wasabi, the client is a Wasabi Wallet software version which a user has on his own local machine. The client can communicate with the "),i(t,{to:"/glossary/Glossary-PrivacyWasabi.html#Backend"},{default:a(()=>[n("backend")]),_:1}),n(".")]),A,e("p",null,[n("Which entities know about which coins. For example, this coin belongs to a cluster that is known by a KYC exchange and Alice. Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#what-is-the-cluster-history"},{default:a(()=>[n("What is the cluster history?")]),_:1})]),P,e("p",null,[n("The possiblity for the user to manually select UTXO's. It is mostly used for sending, so the user can select which UTXO's should be used as the inputs of the transaction. Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#coin-control-best-practices"},{default:a(()=>[n("Coin Control Best Practices")]),_:1})]),R,e("p",null,[n("CoinJoin is a trustless method for combining multiple Bitcoin payments from multiple spenders into a single transaction to make it more difficult for outside parties to determine which spender paid which recipient. Read more: "),i(t,{to:"/FAQ/FAQ-Introduction.html#what-is-a-coinjoin"},{default:a(()=>[n("What is a CoinJoin?")]),_:1})]),S,e("p",null,[n("A "),B,n(' contains instructions for the automatic "coinjoin robot" about configurations like when and how much to coinjoin. Read more: '),i(t,{to:"/Using-Wasabi/CoinJoin.html#coinjoin-strategy"},{default:a(()=>[n("Coinjoin Strategy")]),_:1})]),F,I,J,Q,e("p",null,[n("Coins that have successfully participated in a CoinJoin (with the exception of the change) and thus lose their association to a previous cluster. Read more: "),i(t,{to:"/FAQ/FAQ-Introduction.html#what-is-the-privacy-i-get-after-mixing-with-wasabi"},{default:a(()=>[n("What is the privacy I get after mixing with Wasabi?")]),_:1})]),U,D,L,e("p",null,[n("The coordinator is a server which creates CoinJoins and accepts UTXOs in the mix. Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#how-does-my-wallet-communicate-with-the-wasabi-coordinator-server"},{default:a(()=>[n("How does my wallet communicate with the Wasabi coordinator server?")]),_:1})]),z,e("p",null,[n("A daemon is a command line interface to run Wasabi without the GUI (Graphical User Interface). Read more: "),i(t,{to:"/using-wasabi/Daemon.html"},{default:a(()=>[n("Headless Wasabi Daemon")]),_:1})]),E,e("p",null,[n("Discreet Mode is a Wasabi feature that hides sensitive and critical information on the wallet itself, which is useful for screenshots. Read more: "),i(t,{to:"/using-wasabi/DiscreetMode.html"},{default:a(()=>[n("Discreet Mode")]),_:1})]),K,e("p",null,[n("Dust is an UTXO that is uneconomical to spend. Also, small portions of bitcoin can lead to serious consequences for one's privacy, for example the so called "),O,n(". Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#what-is-the-dust-threshold"},{default:a(()=>[n("What is the dust threshold")]),_:1})]),M,e("p",null,[n("A label can be added to a coin, as a small note on who knows this coin belongs to you. Good labelling can help the user and the wallet to make better privacy conscious decisions later on when spending. Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#why-do-i-have-to-label-my-address"},{default:a(()=>[n("Why do I have to label my address")]),_:1})]),G,e("p",null,[n("KYC (Know Your Customer) is the process of a business being forced to identify and verify the identity of its clients, and to share this information with a government. The term is also used to refer to the bank regulation which governs these activities. Read more: "),i(t,{to:"/why-wasabi/TransactionSurveillanceCompanies.html#aml-kyc-information"},{default:a(()=>[n("AML/KYC Information")]),_:1})]),N,e("p",null,[n("A way to track who knows about the ownership of your coins. Not to be confused with a description of a transaction. Read more: "),i(t,{to:"/using-wasabi/Receive.html#the-importance-of-labeling"},{default:a(()=>[n("The importance of labeling")]),_:1})]),q,e("p",null,[n("RPC, or Remote Procedure Call, is an interface to interact with Wasabi Wallet programmatically. Read more: "),i(t,{to:"/using-wasabi/RPC.html"},{default:a(()=>[n("RPC Interface")]),_:1})]),Y,X,e("p",null,[n("This was added in Wasabi "),e("a",H,[n("2.0.6 version"),i(o)]),n(" to increase privacy for people who generate a new wallet -> receive a coin -> do one coinjoin -> send all the money out. It aims to prevent targeted analysis that compares the value of consolidated coinjoin outputs with the value of one of the coinjoin's inputs.")]),V,e("p",null,[n("Taint is equivalent to the 'trail' that a Bitcoin transaction leaves during the course of its journey. The taint analysis of a Bitcoin transaction evaluates the association between an address involved in the chain of transactions. Read more: "),i(t,{to:"/why-wasabi/TransactionSurveillanceCompanies.html#blockchain-analysis"},{default:a(()=>[n("Blockchain Analysis")]),_:1})]),Z,e("p",null,[n("Tor (The Onion Router) is free and open-source software for enabling anonymous communication. It is widely used by Wasabi. Read more: "),i(t,{to:"/FAQ/FAQ-GeneralBitcoinPrivacy.html#how-does-tor-protect-my-network-level-privacy"},{default:a(()=>[n("How does Tor protect my network level privacy?")]),_:1})]),$,e("p",null,[n("A transaction surveillance company is one which attempts to spy on all Bitcoin users. Their business model is usually to sell the data to any government, corporation or individual willing to pay for their services. Read more: "),i(t,{to:"/why-wasabi/TransactionSurveillanceCompanies.html"},{default:a(()=>[n("Transaction Surveillance Companies")]),_:1})]),ee,ne,ie,e("p",null,[n("A feature in Wasabi to reduce wallet loading time. With TurboSync, some addresses (internal keys only) are skipped and tested in the background. Read more: "),i(t,{to:"/using-wasabi/WalletLoad.html#turbosync"},{default:a(()=>[n("TurboSync")]),_:1})]),te,e("p",null,[n("WabiSabi is a protocol for constructing coinjoin transactions with the aid of a centralized coordinator. It utilizes keyed-verification anonymous credentials, homomorphic value commitments, and zero knowledge proofs to achieve privacy and flexibility. Read more: "),e("a",ae,[n("WabiSabi"),i(o)])]),oe,e("p",null,[n("ZeroLink is a framework to holistically design a privacy and fungibility setup for Bitcoin. This encompasses more than just a single CoinJoin transaction, but also includes network level privacy defense against third party spying. Read more: "),i(t,{to:"/using-wasabi/CoinJoin.html#zerolink-protocol-step-by-step"},{default:a(()=>[n("ZeroLink: the Bitcoin Fungibility Framework")]),_:1})])])}const he=r(d,[["render",se],["__file","Glossary-PrivacyWasabi.html.vue"]]),de=JSON.parse('{"path":"/glossary/Glossary-PrivacyWasabi.html","title":"Privacy and Wasabi","lang":"en-US","frontmatter":{"title":"Privacy and Wasabi","description":"Explanations of common words used in Wasabi and regarding Bitcoin privacy with links to the docs for more details. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Privacy and Wasabi","slug":"privacy-and-wasabi","link":"#privacy-and-wasabi","children":[{"level":3,"title":"#twoweeks","slug":"twoweeks","link":"#twoweeks","children":[]},{"level":3,"title":"Address Reuse","slug":"address-reuse","link":"#address-reuse","children":[]},{"level":3,"title":"Anonymity Score (anonscore)","slug":"anonymity-score-anonscore","link":"#anonymity-score-anonscore","children":[]},{"level":3,"title":"Anonymity Set (anonset)","slug":"anonymity-set-anonset","link":"#anonymity-set-anonset","children":[]},{"level":3,"title":"Auto-start coinjoin (Pleb Stop) threshold","slug":"auto-start-coinjoin-pleb-stop-threshold","link":"#auto-start-coinjoin-pleb-stop-threshold","children":[]},{"level":3,"title":"Backend","slug":"backend","link":"#backend","children":[]},{"level":3,"title":"Block filters","slug":"block-filters","link":"#block-filters","children":[]},{"level":3,"title":"Blockchain Analysis","slug":"blockchain-analysis","link":"#blockchain-analysis","children":[]},{"level":3,"title":"Bloom Filter","slug":"bloom-filter","link":"#bloom-filter","children":[]},{"level":3,"title":"Change Address Detection","slug":"change-address-detection","link":"#change-address-detection","children":[]},{"level":3,"title":"Chaumian CoinJoin","slug":"chaumian-coinjoin","link":"#chaumian-coinjoin","children":[]},{"level":3,"title":"Client","slug":"client","link":"#client","children":[]},{"level":3,"title":"Cluster","slug":"cluster","link":"#cluster","children":[]},{"level":3,"title":"Coin Control","slug":"coin-control","link":"#coin-control","children":[]},{"level":3,"title":"CoinJoin (CJ)","slug":"coinjoin-cj","link":"#coinjoin-cj","children":[]},{"level":3,"title":"Coinjoin Strategy","slug":"coinjoin-strategy","link":"#coinjoin-strategy","children":[]},{"level":3,"title":"Coinjoin Time Preference","slug":"coinjoin-time-preference","link":"#coinjoin-time-preference","children":[]},{"level":3,"title":"CoinJoined coins","slug":"coinjoined-coins","link":"#coinjoined-coins","children":[]},{"level":3,"title":"Common-Input-Ownership heuristic","slug":"common-input-ownership-heuristic","link":"#common-input-ownership-heuristic","children":[]},{"level":3,"title":"Coordinator","slug":"coordinator","link":"#coordinator","children":[]},{"level":3,"title":"Daemon","slug":"daemon","link":"#daemon","children":[]},{"level":3,"title":"Discreet Mode","slug":"discreet-mode","link":"#discreet-mode","children":[]},{"level":3,"title":"Dust","slug":"dust","link":"#dust","children":[]},{"level":3,"title":"Label","slug":"label","link":"#label","children":[]},{"level":3,"title":"Know Your Customer (KYC)","slug":"know-your-customer-kyc","link":"#know-your-customer-kyc","children":[]},{"level":3,"title":"Observers","slug":"observers","link":"#observers","children":[]},{"level":3,"title":"Pay to EndPoint (P2EP)","slug":"pay-to-endpoint-p2ep","link":"#pay-to-endpoint-p2ep","children":[]},{"level":3,"title":"Peers","slug":"peers","link":"#peers","children":[]},{"level":3,"title":"RPC","slug":"rpc","link":"#rpc","children":[]},{"level":3,"title":"Safety coinjoin","slug":"safety-coinjoin","link":"#safety-coinjoin","children":[]},{"level":3,"title":"Taint","slug":"taint","link":"#taint","children":[]},{"level":3,"title":"The Onion Router (Tor)","slug":"the-onion-router-tor","link":"#the-onion-router-tor","children":[]},{"level":3,"title":"Transaction Surveillance Company","slug":"transaction-surveillance-company","link":"#transaction-surveillance-company","children":[]},{"level":3,"title":"Tumbling / Tumbler","slug":"tumbling-tumbler","link":"#tumbling-tumbler","children":[]},{"level":3,"title":"TurboSync","slug":"turbosync","link":"#turbosync","children":[]},{"level":3,"title":"WabiSabi","slug":"wabisabi","link":"#wabisabi","children":[]},{"level":3,"title":"Wallet fingerprinting","slug":"wallet-fingerprinting","link":"#wallet-fingerprinting","children":[]},{"level":3,"title":"Wasabika","slug":"wasabika","link":"#wasabika","children":[]},{"level":3,"title":"XPUB (Extended Public Key)","slug":"xpub-extended-public-key","link":"#xpub-extended-public-key","children":[]},{"level":3,"title":"ZeroLink","slug":"zerolink","link":"#zerolink","children":[]}]}],"git":{"updatedTime":1708079526000},"filePathRelative":"glossary/Glossary-PrivacyWasabi.md"}');export{he as comp,de as data}; +import{_ as r,r as l,o as c,c as h,a as e,b as n,d as i,w as a,e as s}from"./app-BgbPjqpx.js";const d={},u=s('

    Privacy and Wasabi

    #twoweeks

    The #twoweeks is a fun inside joke often used in the Wasabi documentation and, more generally, in the Internet community. In the case of Wasabi documentation, it usually indicates the arrival of a new function or update, to which the future date is still uncertain.

    E.g. "Lightning Network is coming to Wasabi in #twoweeks"

    Address Reuse

    ',5),p=e("h3",{id:"anonymity-score-anonscore",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#anonymity-score-anonscore"},[e("span",null,"Anonymity Score (anonscore)")])],-1),m=e("h3",{id:"anonymity-set-anonset",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#anonymity-set-anonset"},[e("span",null,"Anonymity Set (anonset)")])],-1),b=e("h3",{id:"auto-start-coinjoin-pleb-stop-threshold",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#auto-start-coinjoin-pleb-stop-threshold"},[e("span",null,"Auto-start coinjoin (Pleb Stop) threshold")])],-1),y=e("p",null,[n("The auto-start coinjoin threshold, a.k.a Pleb Stop, is the minimum wallet balance at which coinjoin will automatically start/continue. The amount can be changed in the "),e("em",null,"Coinjoin Settings"),n(" ("),e("em",null,"Auto-start coinjoin threshold"),n(" setting), the default is 0.01 BTC.")],-1),f=e("h3",{id:"backend",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#backend"},[e("span",null,"Backend")])],-1),w={href:"https://www.merriam-webster.com/dictionary/back%20end",target:"_blank",rel:"noopener noreferrer"},g=e("h3",{id:"block-filters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#block-filters"},[e("span",null,"Block filters")])],-1),k={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},v=e("h3",{id:"blockchain-analysis",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#blockchain-analysis"},[e("span",null,"Blockchain Analysis")])],-1),_=e("h3",{id:"bloom-filter",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bloom-filter"},[e("span",null,"Bloom Filter")])],-1),C={href:"https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki",target:"_blank",rel:"noopener noreferrer"},x=e("h3",{id:"change-address-detection",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#change-address-detection"},[e("span",null,"Change Address Detection")])],-1),W=e("h3",{id:"chaumian-coinjoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#chaumian-coinjoin"},[e("span",null,"Chaumian CoinJoin")])],-1),j=e("h3",{id:"client",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#client"},[e("span",null,"Client")])],-1),T={href:"https://www.merriam-webster.com/dictionary/client",target:"_blank",rel:"noopener noreferrer"},A=e("h3",{id:"cluster",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cluster"},[e("span",null,"Cluster")])],-1),P=e("h3",{id:"coin-control",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coin-control"},[e("span",null,"Coin Control")])],-1),R=e("h3",{id:"coinjoin-cj",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoin-cj"},[e("span",null,"CoinJoin (CJ)")])],-1),S=e("h3",{id:"coinjoin-strategy",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoin-strategy"},[e("span",null,"Coinjoin Strategy")])],-1),B=e("em",null,"Coinjoin Strategy",-1),F=e("h3",{id:"coinjoin-time-preference",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoin-time-preference"},[e("span",null,"Coinjoin Time Preference")])],-1),I=e("p",null,"The wallet will only participate in coinjoin when the fee rate is below the median of the chosen time frame (Hours, Days, Weeks, or Months).",-1),J=e("p",null,[n("("),e("em",null,"FeeRateMedianTimeFrameHours"),n(" in the wallet file)")],-1),Q=e("h3",{id:"coinjoined-coins",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoined-coins"},[e("span",null,"CoinJoined coins")])],-1),U=e("h3",{id:"common-input-ownership-heuristic",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#common-input-ownership-heuristic"},[e("span",null,"Common-Input-Ownership heuristic")])],-1),D=e("p",null,"This is a heuristic or assumption which says that if a transaction has more than one input then all those inputs are owned by the same entity.",-1),L=e("h3",{id:"coordinator",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coordinator"},[e("span",null,"Coordinator")])],-1),z=e("h3",{id:"daemon",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#daemon"},[e("span",null,"Daemon")])],-1),E=e("h3",{id:"discreet-mode",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#discreet-mode"},[e("span",null,"Discreet Mode")])],-1),K=e("h3",{id:"dust",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dust"},[e("span",null,"Dust")])],-1),O=e("code",null,"forced address reuse attack",-1),M=e("h3",{id:"label",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#label"},[e("span",null,"Label")])],-1),G=e("h3",{id:"know-your-customer-kyc",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#know-your-customer-kyc"},[e("span",null,"Know Your Customer (KYC)")])],-1),N=e("h3",{id:"observers",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#observers"},[e("span",null,"Observers")])],-1),q=s('

    Pay to EndPoint (P2EP)

    Pay to EndPoint is when the receiver is reachable over the internet and the sender communicates with the receiver to coordinate a more advanced transaction. The Tor onion service, IP address or domain of the receiver is included in a BIP21 Bitcoin URI payment link.

    Peers

    Peers in our documentation refers mainly to Bitcoin and Wasabi Wallet users, but it also means people. They are literally peers in the network, or in the CoinJoin.

    RPC

    ',5),Y=e("h3",{id:"safety-coinjoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#safety-coinjoin"},[e("span",null,"Safety coinjoin")])],-1),X=e("p",null,[n("Safety coinjoin is a concept for doing an extra coinjoin after a user registers only "),e("em",null,"anonymity score"),n(" 1 (non-private) coins in their first round.")],-1),H={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.6",target:"_blank",rel:"noopener noreferrer"},V=e("h3",{id:"taint",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#taint"},[e("span",null,"Taint")])],-1),Z=e("h3",{id:"the-onion-router-tor",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#the-onion-router-tor"},[e("span",null,"The Onion Router (Tor)")])],-1),$=e("h3",{id:"transaction-surveillance-company",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transaction-surveillance-company"},[e("span",null,"Transaction Surveillance Company")])],-1),ee=e("h3",{id:"tumbling-tumbler",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#tumbling-tumbler"},[e("span",null,"Tumbling / Tumbler")])],-1),ne=e("p",null,"Tumbling is a synonym of 'Mixing'. Similarly, Tumbler is the synonym of 'Mixer'.",-1),ie=e("h3",{id:"turbosync",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#turbosync"},[e("span",null,"TurboSync")])],-1),te=e("h3",{id:"wabisabi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wabisabi"},[e("span",null,"WabiSabi")])],-1),ae={href:"https://github.com/zkSNACKs/WabiSabi/releases/latest/download/WabiSabi.pdf",target:"_blank",rel:"noopener noreferrer"},oe=s('

    Wallet fingerprinting

    A careful analyst sometimes deduces which software created a certain transaction, because many different wallet softwares don't always create transactions in exactly the same way.

    Wasabika

    Wasabikas are builders, users and supporters of Wasabi in general.

    XPUB (Extended Public Key)

    An xpub, also known as Extended Public Key, is a part of BIP-32 that will allow you to observe your wallet without the private key (xpriv).

    ',7);function se(le,re){const t=l("RouteLink"),o=l("ExternalLinkIcon");return c(),h("div",null,[u,e("p",null,[n("Address reuse refers to the use of the same address for multiple transactions, this is very bad for privacy. Read more: "),i(t,{to:"/why-wasabi/AddressReuse.html"},{default:a(()=>[n("Address reuse")]),_:1})]),p,e("p",null,[n("Anonymity score is a new way to estimate the entropy level of a UTXO in an unequal-but-highly-composable output value coinjoin. The anonymity score is a metric to help the wallet decide when it's time to stop the coinjoining process. Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#what-is-the-anonymity-score"},{default:a(()=>[n("What is the anonymity score?")]),_:1})]),m,e("p",null,[n("The anonymity set is effectively the size of the group you are hiding in during a CoinJoin. It's the quantity of equal value outputs of one CoinJoin transaction. Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#what-is-the-anonymity-set"},{default:a(()=>[n("What is the anonymity set?")]),_:1})]),b,y,f,e("p",null,[e("a",w,[n("The part of a software system that is not usually visible or accessible to a user of that system"),i(o)]),n(". In the case of Wasabi, the backend functions as the coinjoin coordinator and provides data to the "),i(t,{to:"/glossary/Glossary-PrivacyWasabi.html#Client"},{default:a(()=>[n("client")]),_:1}),n(" (user) like block filters, exchange rate, and network estimations (mempool).")]),g,e("p",null,[n("A filter representing a compact list of addresses in one block. Wasabi checks locally if any block filter contains transactions with addresses of the wallet. No public keys are sent to any third party server, thus it is very private. Read more: "),e("a",k,[n("BIP 158: Compact Block Filters for Light Clients"),i(o)])]),v,e("p",null,[n("Blockchain analysis is used by transaction surveillance companies to follow the transaction history of coins. Techniques like the common-input-ownership heuristic or change detection are used to create a cluster of transactions belonging to one user. Read more: "),i(t,{to:"/why-wasabi/TransactionSurveillanceCompanies.html#blockchain-analysis"},{default:a(()=>[n("Blockchain Analysis")]),_:1})]),_,e("p",null,[n("A filter used primarily by SPV clients to request only block headers and merkle proofs of a given transaction from full nodes. This is very bad for privacy, as third party servers learn about which addresses you are interested in. Read more: "),e("a",C,[n("BIP 37: Connection Bloom Filtering"),i(o)])]),x,e("p",null,[n("Many Bitcoin transactions have change outputs. It would be a serious privacy leak if the change address can be somehow found, as it would link the ownership of the (now spent) inputs with a new output. Read more: "),i(t,{to:"/using-wasabi/ChangeCoins.html"},{default:a(()=>[n("Change coins")]),_:1})]),W,e("p",null,[n("A Chaumian CoinJoin is a special type of CoinJoin that utilizes Chaumian [or Schnorr] blind signatures to prevent the central coordinator from spying on the linkage between inputs and outputs. Read more: "),i(t,{to:"/using-wasabi/CoinJoin.html#zerolink-protocol-step-by-step"},{default:a(()=>[n("Use of blind signatures in CoinJoin")]),_:1})]),j,e("p",null,[e("a",T,[n("A software that allows a computer to function as a client in a network"),i(o)]),n(". In the case of Wasabi, the client is a Wasabi Wallet software version which a user has on his own local machine. The client can communicate with the "),i(t,{to:"/glossary/Glossary-PrivacyWasabi.html#Backend"},{default:a(()=>[n("backend")]),_:1}),n(".")]),A,e("p",null,[n("Which entities know about which coins. For example, this coin belongs to a cluster that is known by a KYC exchange and Alice. Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#what-is-the-cluster-history"},{default:a(()=>[n("What is the cluster history?")]),_:1})]),P,e("p",null,[n("The possiblity for the user to manually select UTXO's. It is mostly used for sending, so the user can select which UTXO's should be used as the inputs of the transaction. Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#coin-control-best-practices"},{default:a(()=>[n("Coin Control Best Practices")]),_:1})]),R,e("p",null,[n("CoinJoin is a trustless method for combining multiple Bitcoin payments from multiple spenders into a single transaction to make it more difficult for outside parties to determine which spender paid which recipient. Read more: "),i(t,{to:"/FAQ/FAQ-Introduction.html#what-is-a-coinjoin"},{default:a(()=>[n("What is a CoinJoin?")]),_:1})]),S,e("p",null,[n("A "),B,n(' contains instructions for the automatic "coinjoin robot" about configurations like when and how much to coinjoin. Read more: '),i(t,{to:"/Using-Wasabi/CoinJoin.html#coinjoin-strategy"},{default:a(()=>[n("Coinjoin Strategy")]),_:1})]),F,I,J,Q,e("p",null,[n("Coins that have successfully participated in a CoinJoin (with the exception of the change) and thus lose their association to a previous cluster. Read more: "),i(t,{to:"/FAQ/FAQ-Introduction.html#what-is-the-privacy-i-get-after-mixing-with-wasabi"},{default:a(()=>[n("What is the privacy I get after mixing with Wasabi?")]),_:1})]),U,D,L,e("p",null,[n("The coordinator is a server which creates CoinJoins and accepts UTXOs in the mix. Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#how-does-my-wallet-communicate-with-the-wasabi-coordinator-server"},{default:a(()=>[n("How does my wallet communicate with the Wasabi coordinator server?")]),_:1})]),z,e("p",null,[n("A daemon is a command line interface to run Wasabi without the GUI (Graphical User Interface). Read more: "),i(t,{to:"/using-wasabi/Daemon.html"},{default:a(()=>[n("Headless Wasabi Daemon")]),_:1})]),E,e("p",null,[n("Discreet Mode is a Wasabi feature that hides sensitive and critical information on the wallet itself, which is useful for screenshots. Read more: "),i(t,{to:"/using-wasabi/DiscreetMode.html"},{default:a(()=>[n("Discreet Mode")]),_:1})]),K,e("p",null,[n("Dust is an UTXO that is uneconomical to spend. Also, small portions of bitcoin can lead to serious consequences for one's privacy, for example the so called "),O,n(". Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#what-is-the-dust-threshold"},{default:a(()=>[n("What is the dust threshold")]),_:1})]),M,e("p",null,[n("A label can be added to a coin, as a small note on who knows this coin belongs to you. Good labelling can help the user and the wallet to make better privacy conscious decisions later on when spending. Read more: "),i(t,{to:"/FAQ/FAQ-UseWasabi.html#why-do-i-have-to-label-my-address"},{default:a(()=>[n("Why do I have to label my address")]),_:1})]),G,e("p",null,[n("KYC (Know Your Customer) is the process of a business being forced to identify and verify the identity of its clients, and to share this information with a government. The term is also used to refer to the bank regulation which governs these activities. Read more: "),i(t,{to:"/why-wasabi/TransactionSurveillanceCompanies.html#aml-kyc-information"},{default:a(()=>[n("AML/KYC Information")]),_:1})]),N,e("p",null,[n("A way to track who knows about the ownership of your coins. Not to be confused with a description of a transaction. Read more: "),i(t,{to:"/using-wasabi/Receive.html#the-importance-of-labeling"},{default:a(()=>[n("The importance of labeling")]),_:1})]),q,e("p",null,[n("RPC, or Remote Procedure Call, is an interface to interact with Wasabi Wallet programmatically. Read more: "),i(t,{to:"/using-wasabi/RPC.html"},{default:a(()=>[n("RPC Interface")]),_:1})]),Y,X,e("p",null,[n("This was added in Wasabi "),e("a",H,[n("2.0.6 version"),i(o)]),n(" to increase privacy for people who generate a new wallet -> receive a coin -> do one coinjoin -> send all the money out. It aims to prevent targeted analysis that compares the value of consolidated coinjoin outputs with the value of one of the coinjoin's inputs.")]),V,e("p",null,[n("Taint is equivalent to the 'trail' that a Bitcoin transaction leaves during the course of its journey. The taint analysis of a Bitcoin transaction evaluates the association between an address involved in the chain of transactions. Read more: "),i(t,{to:"/why-wasabi/TransactionSurveillanceCompanies.html#blockchain-analysis"},{default:a(()=>[n("Blockchain Analysis")]),_:1})]),Z,e("p",null,[n("Tor (The Onion Router) is free and open-source software for enabling anonymous communication. It is widely used by Wasabi. Read more: "),i(t,{to:"/FAQ/FAQ-GeneralBitcoinPrivacy.html#how-does-tor-protect-my-network-level-privacy"},{default:a(()=>[n("How does Tor protect my network level privacy?")]),_:1})]),$,e("p",null,[n("A transaction surveillance company is one which attempts to spy on all Bitcoin users. Their business model is usually to sell the data to any government, corporation or individual willing to pay for their services. Read more: "),i(t,{to:"/why-wasabi/TransactionSurveillanceCompanies.html"},{default:a(()=>[n("Transaction Surveillance Companies")]),_:1})]),ee,ne,ie,e("p",null,[n("A feature in Wasabi to reduce wallet loading time. With TurboSync, some addresses (internal keys only) are skipped and tested in the background. Read more: "),i(t,{to:"/using-wasabi/WalletLoad.html#turbosync"},{default:a(()=>[n("TurboSync")]),_:1})]),te,e("p",null,[n("WabiSabi is a protocol for constructing coinjoin transactions with the aid of a centralized coordinator. It utilizes keyed-verification anonymous credentials, homomorphic value commitments, and zero knowledge proofs to achieve privacy and flexibility. Read more: "),e("a",ae,[n("WabiSabi"),i(o)])]),oe,e("p",null,[n("ZeroLink is a framework to holistically design a privacy and fungibility setup for Bitcoin. This encompasses more than just a single CoinJoin transaction, but also includes network level privacy defense against third party spying. Read more: "),i(t,{to:"/using-wasabi/CoinJoin.html#zerolink-protocol-step-by-step"},{default:a(()=>[n("ZeroLink: the Bitcoin Fungibility Framework")]),_:1})])])}const he=r(d,[["render",se],["__file","Glossary-PrivacyWasabi.html.vue"]]),de=JSON.parse('{"path":"/glossary/Glossary-PrivacyWasabi.html","title":"Privacy and Wasabi","lang":"en-US","frontmatter":{"title":"Privacy and Wasabi","description":"Explanations of common words used in Wasabi and regarding Bitcoin privacy with links to the docs for more details. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Privacy and Wasabi","slug":"privacy-and-wasabi","link":"#privacy-and-wasabi","children":[{"level":3,"title":"#twoweeks","slug":"twoweeks","link":"#twoweeks","children":[]},{"level":3,"title":"Address Reuse","slug":"address-reuse","link":"#address-reuse","children":[]},{"level":3,"title":"Anonymity Score (anonscore)","slug":"anonymity-score-anonscore","link":"#anonymity-score-anonscore","children":[]},{"level":3,"title":"Anonymity Set (anonset)","slug":"anonymity-set-anonset","link":"#anonymity-set-anonset","children":[]},{"level":3,"title":"Auto-start coinjoin (Pleb Stop) threshold","slug":"auto-start-coinjoin-pleb-stop-threshold","link":"#auto-start-coinjoin-pleb-stop-threshold","children":[]},{"level":3,"title":"Backend","slug":"backend","link":"#backend","children":[]},{"level":3,"title":"Block filters","slug":"block-filters","link":"#block-filters","children":[]},{"level":3,"title":"Blockchain Analysis","slug":"blockchain-analysis","link":"#blockchain-analysis","children":[]},{"level":3,"title":"Bloom Filter","slug":"bloom-filter","link":"#bloom-filter","children":[]},{"level":3,"title":"Change Address Detection","slug":"change-address-detection","link":"#change-address-detection","children":[]},{"level":3,"title":"Chaumian CoinJoin","slug":"chaumian-coinjoin","link":"#chaumian-coinjoin","children":[]},{"level":3,"title":"Client","slug":"client","link":"#client","children":[]},{"level":3,"title":"Cluster","slug":"cluster","link":"#cluster","children":[]},{"level":3,"title":"Coin Control","slug":"coin-control","link":"#coin-control","children":[]},{"level":3,"title":"CoinJoin (CJ)","slug":"coinjoin-cj","link":"#coinjoin-cj","children":[]},{"level":3,"title":"Coinjoin Strategy","slug":"coinjoin-strategy","link":"#coinjoin-strategy","children":[]},{"level":3,"title":"Coinjoin Time Preference","slug":"coinjoin-time-preference","link":"#coinjoin-time-preference","children":[]},{"level":3,"title":"CoinJoined coins","slug":"coinjoined-coins","link":"#coinjoined-coins","children":[]},{"level":3,"title":"Common-Input-Ownership heuristic","slug":"common-input-ownership-heuristic","link":"#common-input-ownership-heuristic","children":[]},{"level":3,"title":"Coordinator","slug":"coordinator","link":"#coordinator","children":[]},{"level":3,"title":"Daemon","slug":"daemon","link":"#daemon","children":[]},{"level":3,"title":"Discreet Mode","slug":"discreet-mode","link":"#discreet-mode","children":[]},{"level":3,"title":"Dust","slug":"dust","link":"#dust","children":[]},{"level":3,"title":"Label","slug":"label","link":"#label","children":[]},{"level":3,"title":"Know Your Customer (KYC)","slug":"know-your-customer-kyc","link":"#know-your-customer-kyc","children":[]},{"level":3,"title":"Observers","slug":"observers","link":"#observers","children":[]},{"level":3,"title":"Pay to EndPoint (P2EP)","slug":"pay-to-endpoint-p2ep","link":"#pay-to-endpoint-p2ep","children":[]},{"level":3,"title":"Peers","slug":"peers","link":"#peers","children":[]},{"level":3,"title":"RPC","slug":"rpc","link":"#rpc","children":[]},{"level":3,"title":"Safety coinjoin","slug":"safety-coinjoin","link":"#safety-coinjoin","children":[]},{"level":3,"title":"Taint","slug":"taint","link":"#taint","children":[]},{"level":3,"title":"The Onion Router (Tor)","slug":"the-onion-router-tor","link":"#the-onion-router-tor","children":[]},{"level":3,"title":"Transaction Surveillance Company","slug":"transaction-surveillance-company","link":"#transaction-surveillance-company","children":[]},{"level":3,"title":"Tumbling / Tumbler","slug":"tumbling-tumbler","link":"#tumbling-tumbler","children":[]},{"level":3,"title":"TurboSync","slug":"turbosync","link":"#turbosync","children":[]},{"level":3,"title":"WabiSabi","slug":"wabisabi","link":"#wabisabi","children":[]},{"level":3,"title":"Wallet fingerprinting","slug":"wallet-fingerprinting","link":"#wallet-fingerprinting","children":[]},{"level":3,"title":"Wasabika","slug":"wasabika","link":"#wasabika","children":[]},{"level":3,"title":"XPUB (Extended Public Key)","slug":"xpub-extended-public-key","link":"#xpub-extended-public-key","children":[]},{"level":3,"title":"ZeroLink","slug":"zerolink","link":"#zerolink","children":[]}]}],"git":{"updatedTime":1708079526000},"filePathRelative":"glossary/Glossary-PrivacyWasabi.md"}');export{he as comp,de as data}; diff --git a/assets/InstallPackage.html-CVAotl95.js b/assets/InstallPackage.html-D-UpXvj8.js similarity index 99% rename from assets/InstallPackage.html-CVAotl95.js rename to assets/InstallPackage.html-D-UpXvj8.js index 981ba0153b..be463e472c 100644 --- a/assets/InstallPackage.html-CVAotl95.js +++ b/assets/InstallPackage.html-D-UpXvj8.js @@ -1 +1 @@ -import{b as h,c as u,d,_ as p,a as f}from"./DownloadMac-DUSPDgNE.js";import{_ as c}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as b,r,o as g,c as _,a as e,d as o,w as n,b as t,e as s}from"./app-BPKesm5h.js";const w="/DownloadAll.png",m={},y=e("h1",{id:"install-package",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#install-package"},[e("span",null,"Install package")])],-1),k={class:"table-of-contents"},W=e("h2",{id:"introduction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#introduction"},[e("span",null,"Introduction")])],-1),v={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},P={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},A=e("p",null,[e("img",{src:w,alt:"Operating systems supported by Wasabi Wallet",title:"Operating systems supported by Wasabi Wallet"})],-1),x=e("strong",null,"VERIFY PGP SIGNATURES",-1),I={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},N={href:"https://security.stackexchange.com/questions/147447/gpg-why-is-my-trusted-key-not-certified-with-a-trusted-signature",target:"_blank",rel:"noopener noreferrer"},D={href:"https://www.gnupg.org/gph/en/manual/x334.html",target:"_blank",rel:"noopener noreferrer"},z=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"Always"),e("p",null,"Don't trust - Verify!")],-1),G=e("h2",{id:"install-wasabi-step-by-step",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#install-wasabi-step-by-step"},[e("span",null,"Install Wasabi step-by-step")])],-1),C={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},K=e("li",null,"Verify the PGP signatures of the download.",-1),F=e("li",null,"Install Wasabi package as you would do any other software on your operating system.",-1),T=e("hr",null,null,-1),B=e("h2",{id:"windows",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#windows"},[e("span",null,"Windows")])],-1),E={href:"https://wasabiwallet.io/#download",target:"_blank",rel:"noopener noreferrer"},O=e("code",null,".msi",-1),V=e("p",null,[e("img",{src:h,alt:"Download Wasabi Wallet for Windows",title:"Download Wasabi Wallet for Windows"})],-1),L=e("ol",{start:"2"},[e("li",null,[e("p",null,[t("Install Wasabi by double-clicking the "),e("code",null,".msi"),t(" and following the GUI instructions.")])]),e("li",null,[e("p",null,"Make sure that you see this window that verifies the installer was signed by zkSNACKs Limited. Manual PGP verification is optional, as the package is signed and verified automatically on Windows.")])],-1),Q=e("p",null,[e("img",{src:u,alt:"Wasabi Wallet Windows signature verification",title:"Wasabi Wallet Windows signature verification"})],-1),U=e("code",null,"C:\\Program Files\\WasabiWallet\\",-1),R=e("h2",{id:"debian-and-ubuntu",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#debian-and-ubuntu"},[e("span",null,"Debian and Ubuntu")])],-1),j=e("p",null,"If you have already imported zkSNACKs' PGP public key, then jump to step 2.",-1),Y={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},M=e("code",null,"gpg --import PGP.txt",-1),q=e("p",null,[t("Verify that the fingerprint is "),e("code",null,"6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(" by running this command "),e("code",null,"gpg --list-keys zkSNACKs"),t(".")],-1),H={href:"https://wasabiwallet.io/#download",target:"_blank",rel:"noopener noreferrer"},J=e("code",null,".deb",-1),$=e("code",null,".asc",-1),X=s('

    Download Wasabi Wallet for Debian

    1. Verify the signature in the Download repository with gpg --verify Wasabi-2.0.7.1.deb.asc Wasabi-2.0.7.1.deb. If the message returned says Good signature from zkSNACKs and that it was signed with Primary key fingerprint: 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E, then the software was not tampered with since the developer signed it.

      TIP

      The output from the verify command may contain WARNING: This key is not certified with a trusted signature!. You can ignore this, but if you want to fully verify your download, you need to ask people you trust to confirm that the key fingerprint belongs to zkSNACKs.

    2. [GUI] Install by double-clicking and follow the GUI Instruction.
      [CLI] In the Download repository, execute the command sudo apt install ./Wasabi-2.0.7.1.deb to install Wasabi and after that run Wasabi by executing wassabee.

    ',2),Z=e("h2",{id:"other-linux",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-linux"},[e("span",null,"Other Linux")])],-1),ee=e("p",null,"If you have already imported zkSNACKs' PGP public key, then jump to step 2.",-1),te={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},oe=e("code",null,"gpg --import PGP.txt",-1),ae=e("p",null,[t("Verify that the fingerprint is "),e("code",null,"6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(" by running this command "),e("code",null,"gpg --list-keys zkSNACKs"),t(".")],-1),ne={href:"https://wasabiwallet.io/#download",target:"_blank",rel:"noopener noreferrer"},ie=e("code",null,".tar.gz",-1),le=e("code",null,".asc",-1),se=s('

    Download Wasabi Wallet for Linux

    1. In the Download folder, run gpg --verify Wasabi-2.0.7.1.tar.gz.asc Wasabi-2.0.7.1.tar.gz.

      If the message returned says Good signature from zkSNACKs and that it was signed with Primary key fingerprint: 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E, then the software was not tampered with since the developer signed it.

      TIP

      The output from the verify command may contain WARNING: This key is not certified with a trusted signature!. You can ignore this, but if you want to fully verify your download, you need to ask people you trust to confirm that the key fingerprint belongs to zkSNACKs.

    2. Extract the archive while keeping the file permissions: tar -pxzf Wasabi-2.0.7.1.tar.gz.

    3. Run Wasabi by executing ./wassabee.

    ',2),re=e("h2",{id:"macos",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#macos"},[e("span",null,"macOS")])],-1),de={href:"https://wasabiwallet.io/#download",target:"_blank",rel:"noopener noreferrer"},ce=e("code",null,".dmg",-1),he={href:"https://www.howtogeek.com/706226/how-to-check-if-your-mac-is-using-an-intel-or-apple-silicon-processor/",target:"_blank",rel:"noopener noreferrer"},ue=s('

    Download Wasabi Wallet for macOS

    1. Double-click .dmg to open it.

    2. Install Wasabi by dragging it into your Applications folder.

    3. At first startup, there will be a pop-up that Wasabi was downloaded from the internet. Click on Open and restart Wasabi.

    ',2),pe=e("h3",{id:"optional-pgp-verification",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#optional-pgp-verification"},[e("span",null,"Optional PGP Verification")])],-1),fe=e("p",null,"If you have already imported zkSNACKs' PGP public key, then jump to step 4.",-1),be={href:"https://www.gnupg.org/download/index.html",target:"_blank",rel:"noopener noreferrer"},ge={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},_e=e("code",null,"TextEdit",-1),we=e("code",null,"zkSNACKsPubKey.txt",-1),me=e("code",null,"Format / Make Plain Text",-1),ye=e("li",null,[e("p",null,[t("Open Terminal and go to the folder in which you saved the "),e("code",null,"zkSNACKsPubKey.txt"),t(" file and import the PGP public key with "),e("code",null,"sudo gpg --import zkSNACKsPubKey.txt"),t(". This should return the output: "),e("code",null,'key 856348328949861E: public key "zkSNACKs " imported'),t(".")])],-1),ke={href:"https://wasabiwallet.io/#download",target:"_blank",rel:"noopener noreferrer"},We=e("code",null,".dmg",-1),ve=e("code",null,".asc",-1),Pe=e("p",null,[e("img",{src:d,alt:""})],-1),Ae=s('
  • In the Download folder, run sudo gpg --verify Wasabi-2.0.7.1.dmg.asc Wasabi-2.0.7.1.dmg. If the message returned says Good signature from zkSNACKs and that it was signed with Primary key fingerprint: 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E, then the software was not tampered with since the developer signed it.

    TIP

    The output from the verify command may contain WARNING: This key is not certified with a trusted signature!. You can ignore this, but if you want to fully verify your download, you need to ask people you trust to confirm that the key fingerprint belongs to zkSNACKs.

  • ',1),xe={href:"https://youtu.be/ry6qIyQmzRE",target:"_blank",rel:"noopener noreferrer"},Ie=e("img",{src:c,alt:"Watch the video"},null,-1),Se={href:"https://youtu.be/QHIpEYYqddE",target:"_blank",rel:"noopener noreferrer"},Ne=e("img",{src:c,alt:"Watch the video"},null,-1);function De(ze,Ge){const i=r("router-link"),l=r("RouteLink"),a=r("ExternalLinkIcon");return g(),_("div",null,[y,e("nav",k,[e("ul",null,[e("li",null,[o(i,{to:"#introduction"},{default:n(()=>[t("Introduction")]),_:1})]),e("li",null,[o(i,{to:"#install-wasabi-step-by-step"},{default:n(()=>[t("Install Wasabi step-by-step")]),_:1})]),e("li",null,[o(i,{to:"#windows"},{default:n(()=>[t("Windows")]),_:1})]),e("li",null,[o(i,{to:"#debian-and-ubuntu"},{default:n(()=>[t("Debian and Ubuntu")]),_:1})]),e("li",null,[o(i,{to:"#other-linux"},{default:n(()=>[t("Other Linux")]),_:1})]),e("li",null,[o(i,{to:"#macos"},{default:n(()=>[t("macOS")]),_:1}),e("ul",null,[e("li",null,[o(i,{to:"#optional-pgp-verification"},{default:n(()=>[t("Optional PGP Verification")]),_:1})])])])])]),W,e("p",null,[t("The easiest way to start with Wasabi is to download, verify and install the released package. This is a version of the software that is thoroughly reviewed by the contributors. The package has the binary code that is needed to run the Wasabi Wallet client including the graphical user interface. For compiling the open-source code with cutting edge development features, also including the backend server, see this "),o(l,{to:"/using-wasabi/BuildSource.html"},{default:n(()=>[t("tutorial here")]),_:1}),t(".")]),e("p",null,[t("Download the packages either from the official "),e("a",v,[t("WasabiWallet.io"),o(a)]),t(" clearnet website or for your privacy's sake, from the official Tor onion service "),e("a",P,[t("http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion"),o(a)]),t(".")]),A,e("p",null,[t("Although there is automatic signature verification on Windows and macOS, it is still recommended to manually "),x,t(" of the downloaded package with zkSNACKs' PGP public key "),e("a",I,[t("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),o(a)]),t(" before installing Wasabi. This protects you against malicious phishing sites giving you back-doored wallet software. If you have personally verified zkSNACKs' PGP public key "),e("a",S,[t("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),o(a)]),t(" and you are familiar with the "),e("a",N,[t("Web Of Trust"),o(a)]),t(", please consider also "),e("a",D,[t("signing it"),o(a)]),t(".")]),z,G,e("ol",null,[e("li",null,[t("Download the Wasabi package relevant to your operating system from "),e("a",C,[t("wasabiwallet.io"),o(a)]),t(".")]),K,F]),T,B,e("ol",null,[e("li",null,[e("a",E,[t("Download"),o(a)]),t(" the "),O,t(" installer of the latest Wasabi release.")])]),V,L,Q,e("p",null,[t("Wasabi will be installed to your "),U,t(" folder. You will also have an icon in your Start Menu and on your Desktop. After the first run, a "),o(l,{to:"/FAQ/FAQ-UseWasabi.html#where-can-i-find-the-wasabi-data-folder"},{default:n(()=>[t("data folder")]),_:1}),t(" will be created. Among others, here is where your wallet files and your logs reside.")]),R,j,e("ol",null,[e("li",null,[e("p",null,[t("Download zkSNACKs' PGP public key "),e("a",Y,[t("here"),o(a)]),t(", and then import it with "),M,t(".")]),q]),e("li",null,[e("p",null,[e("a",H,[t("Download"),o(a)]),t(" the latest Wasabi release, both the "),J,t(" package and the corresponding "),$,t(" signature file.")])])]),X,e("p",null,[t("After the first run, a "),o(l,{to:"/FAQ/FAQ-UseWasabi.html#where-can-i-find-the-wasabi-data-folder"},{default:n(()=>[t("data folder")]),_:1}),t(" will be created. Among others, here is where your wallet files and your logs reside.")]),Z,ee,e("ol",null,[e("li",null,[e("p",null,[t("Download zkSNACKs' PGP public key "),e("a",te,[t("here"),o(a)]),t(", and then import it with "),oe,t(".")]),ae]),e("li",null,[e("p",null,[e("a",ne,[t("Download"),o(a)]),t(" the latest Wasabi release, both the "),ie,t(" archive and the corresponding "),le,t(" signature file.")])])]),se,e("p",null,[t("After the first run, a "),o(l,{to:"/FAQ/FAQ-UseWasabi.html#where-can-i-find-the-wasabi-data-folder"},{default:n(()=>[t("data folder")]),_:1}),t(" will be created. Among others, here is where your wallet files and your logs reside.")]),re,e("ol",null,[e("li",null,[e("a",de,[t("Download"),o(a)]),t(" the "),ce,t(" package of Wasabi 2.0.7.1 for your machine's processor. "),o(l,{to:"/FAQ/FAQ-Installation.html#why-are-there-two-different-packages-for-macos-intel-and-apple-silicon"},{default:n(()=>[t("There are two types of packages for macOS")]),_:1}),t(", one for Intel and one for the Apple Silicon chip. If you're not sure what processor your device has, you can "),e("a",he,[t("check it"),o(a)]),t(".")])]),ue,e("p",null,[t("After the first run, a "),o(l,{to:"/FAQ/FAQ-UseWasabi.html#where-can-i-find-the-wasabi-data-folder"},{default:n(()=>[t("data folder")]),_:1}),t(" will be created. Among others, here is where your wallet files and your logs reside.")]),pe,fe,e("ol",null,[e("li",null,[e("p",null,[e("a",be,[t("Get GnuPG"),o(a)]),t(".")])]),e("li",null,[e("p",null,[t("Copy "),e("a",ge,[t("zkSNACKs' PGP public key"),o(a)]),t(" into a new "),_e,t(" document and saving it as "),we,t(". Before saving, you need to go to "),me,t(" (otherwise TextEdit will not be able to save it as a .txt file).")])]),ye,e("li",null,[e("p",null,[e("a",ke,[t("Download"),o(a)]),t(" the latest Wasabi release, both the "),We,t(" package and the corresponding "),ve,t(" signature file.")]),Pe]),Ae]),e("p",null,[e("a",xe,[Ie,o(a)])]),e("p",null,[e("a",Se,[Ne,o(a)])])])}const Te=b(m,[["render",De],["__file","InstallPackage.html.vue"]]),Be=JSON.parse('{"path":"/using-wasabi/InstallPackage.html","title":"Install-package","lang":"en-US","frontmatter":{"title":"Install-package","description":"A step by step guide on how to securely download, verify and install the software packages of Wasabi for Linux, Windows and Mac. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"Install Wasabi step-by-step","slug":"install-wasabi-step-by-step","link":"#install-wasabi-step-by-step","children":[]},{"level":2,"title":"Windows","slug":"windows","link":"#windows","children":[]},{"level":2,"title":"Debian and Ubuntu","slug":"debian-and-ubuntu","link":"#debian-and-ubuntu","children":[]},{"level":2,"title":"Other Linux","slug":"other-linux","link":"#other-linux","children":[]},{"level":2,"title":"macOS","slug":"macos","link":"#macos","children":[{"level":3,"title":"Optional PGP Verification","slug":"optional-pgp-verification","link":"#optional-pgp-verification","children":[]}]}],"git":{"updatedTime":1685011132000},"filePathRelative":"using-wasabi/InstallPackage.md"}');export{Te as comp,Be as data}; +import{b as h,c as u,d,_ as p,a as f}from"./DownloadMac-DUSPDgNE.js";import{_ as c}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as b,r,o as g,c as _,a as e,d as o,w as n,b as t,e as s}from"./app-BgbPjqpx.js";const w="/DownloadAll.png",m={},y=e("h1",{id:"install-package",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#install-package"},[e("span",null,"Install package")])],-1),k={class:"table-of-contents"},W=e("h2",{id:"introduction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#introduction"},[e("span",null,"Introduction")])],-1),v={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},P={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},A=e("p",null,[e("img",{src:w,alt:"Operating systems supported by Wasabi Wallet",title:"Operating systems supported by Wasabi Wallet"})],-1),x=e("strong",null,"VERIFY PGP SIGNATURES",-1),I={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},N={href:"https://security.stackexchange.com/questions/147447/gpg-why-is-my-trusted-key-not-certified-with-a-trusted-signature",target:"_blank",rel:"noopener noreferrer"},D={href:"https://www.gnupg.org/gph/en/manual/x334.html",target:"_blank",rel:"noopener noreferrer"},z=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"Always"),e("p",null,"Don't trust - Verify!")],-1),G=e("h2",{id:"install-wasabi-step-by-step",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#install-wasabi-step-by-step"},[e("span",null,"Install Wasabi step-by-step")])],-1),C={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},K=e("li",null,"Verify the PGP signatures of the download.",-1),F=e("li",null,"Install Wasabi package as you would do any other software on your operating system.",-1),T=e("hr",null,null,-1),B=e("h2",{id:"windows",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#windows"},[e("span",null,"Windows")])],-1),E={href:"https://wasabiwallet.io/#download",target:"_blank",rel:"noopener noreferrer"},O=e("code",null,".msi",-1),V=e("p",null,[e("img",{src:h,alt:"Download Wasabi Wallet for Windows",title:"Download Wasabi Wallet for Windows"})],-1),L=e("ol",{start:"2"},[e("li",null,[e("p",null,[t("Install Wasabi by double-clicking the "),e("code",null,".msi"),t(" and following the GUI instructions.")])]),e("li",null,[e("p",null,"Make sure that you see this window that verifies the installer was signed by zkSNACKs Limited. Manual PGP verification is optional, as the package is signed and verified automatically on Windows.")])],-1),Q=e("p",null,[e("img",{src:u,alt:"Wasabi Wallet Windows signature verification",title:"Wasabi Wallet Windows signature verification"})],-1),U=e("code",null,"C:\\Program Files\\WasabiWallet\\",-1),R=e("h2",{id:"debian-and-ubuntu",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#debian-and-ubuntu"},[e("span",null,"Debian and Ubuntu")])],-1),j=e("p",null,"If you have already imported zkSNACKs' PGP public key, then jump to step 2.",-1),Y={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},M=e("code",null,"gpg --import PGP.txt",-1),q=e("p",null,[t("Verify that the fingerprint is "),e("code",null,"6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(" by running this command "),e("code",null,"gpg --list-keys zkSNACKs"),t(".")],-1),H={href:"https://wasabiwallet.io/#download",target:"_blank",rel:"noopener noreferrer"},J=e("code",null,".deb",-1),$=e("code",null,".asc",-1),X=s('

    Download Wasabi Wallet for Debian

    1. Verify the signature in the Download repository with gpg --verify Wasabi-2.0.7.1.deb.asc Wasabi-2.0.7.1.deb. If the message returned says Good signature from zkSNACKs and that it was signed with Primary key fingerprint: 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E, then the software was not tampered with since the developer signed it.

      TIP

      The output from the verify command may contain WARNING: This key is not certified with a trusted signature!. You can ignore this, but if you want to fully verify your download, you need to ask people you trust to confirm that the key fingerprint belongs to zkSNACKs.

    2. [GUI] Install by double-clicking and follow the GUI Instruction.
      [CLI] In the Download repository, execute the command sudo apt install ./Wasabi-2.0.7.1.deb to install Wasabi and after that run Wasabi by executing wassabee.

    ',2),Z=e("h2",{id:"other-linux",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-linux"},[e("span",null,"Other Linux")])],-1),ee=e("p",null,"If you have already imported zkSNACKs' PGP public key, then jump to step 2.",-1),te={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},oe=e("code",null,"gpg --import PGP.txt",-1),ae=e("p",null,[t("Verify that the fingerprint is "),e("code",null,"6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),t(" by running this command "),e("code",null,"gpg --list-keys zkSNACKs"),t(".")],-1),ne={href:"https://wasabiwallet.io/#download",target:"_blank",rel:"noopener noreferrer"},ie=e("code",null,".tar.gz",-1),le=e("code",null,".asc",-1),se=s('

    Download Wasabi Wallet for Linux

    1. In the Download folder, run gpg --verify Wasabi-2.0.7.1.tar.gz.asc Wasabi-2.0.7.1.tar.gz.

      If the message returned says Good signature from zkSNACKs and that it was signed with Primary key fingerprint: 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E, then the software was not tampered with since the developer signed it.

      TIP

      The output from the verify command may contain WARNING: This key is not certified with a trusted signature!. You can ignore this, but if you want to fully verify your download, you need to ask people you trust to confirm that the key fingerprint belongs to zkSNACKs.

    2. Extract the archive while keeping the file permissions: tar -pxzf Wasabi-2.0.7.1.tar.gz.

    3. Run Wasabi by executing ./wassabee.

    ',2),re=e("h2",{id:"macos",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#macos"},[e("span",null,"macOS")])],-1),de={href:"https://wasabiwallet.io/#download",target:"_blank",rel:"noopener noreferrer"},ce=e("code",null,".dmg",-1),he={href:"https://www.howtogeek.com/706226/how-to-check-if-your-mac-is-using-an-intel-or-apple-silicon-processor/",target:"_blank",rel:"noopener noreferrer"},ue=s('

    Download Wasabi Wallet for macOS

    1. Double-click .dmg to open it.

    2. Install Wasabi by dragging it into your Applications folder.

    3. At first startup, there will be a pop-up that Wasabi was downloaded from the internet. Click on Open and restart Wasabi.

    ',2),pe=e("h3",{id:"optional-pgp-verification",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#optional-pgp-verification"},[e("span",null,"Optional PGP Verification")])],-1),fe=e("p",null,"If you have already imported zkSNACKs' PGP public key, then jump to step 4.",-1),be={href:"https://www.gnupg.org/download/index.html",target:"_blank",rel:"noopener noreferrer"},ge={href:"https://github.com/zkSNACKs/WalletWasabi/blob/master/PGP.txt",target:"_blank",rel:"noopener noreferrer"},_e=e("code",null,"TextEdit",-1),we=e("code",null,"zkSNACKsPubKey.txt",-1),me=e("code",null,"Format / Make Plain Text",-1),ye=e("li",null,[e("p",null,[t("Open Terminal and go to the folder in which you saved the "),e("code",null,"zkSNACKsPubKey.txt"),t(" file and import the PGP public key with "),e("code",null,"sudo gpg --import zkSNACKsPubKey.txt"),t(". This should return the output: "),e("code",null,'key 856348328949861E: public key "zkSNACKs " imported'),t(".")])],-1),ke={href:"https://wasabiwallet.io/#download",target:"_blank",rel:"noopener noreferrer"},We=e("code",null,".dmg",-1),ve=e("code",null,".asc",-1),Pe=e("p",null,[e("img",{src:d,alt:""})],-1),Ae=s('
  • In the Download folder, run sudo gpg --verify Wasabi-2.0.7.1.dmg.asc Wasabi-2.0.7.1.dmg. If the message returned says Good signature from zkSNACKs and that it was signed with Primary key fingerprint: 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E, then the software was not tampered with since the developer signed it.

    TIP

    The output from the verify command may contain WARNING: This key is not certified with a trusted signature!. You can ignore this, but if you want to fully verify your download, you need to ask people you trust to confirm that the key fingerprint belongs to zkSNACKs.

  • ',1),xe={href:"https://youtu.be/ry6qIyQmzRE",target:"_blank",rel:"noopener noreferrer"},Ie=e("img",{src:c,alt:"Watch the video"},null,-1),Se={href:"https://youtu.be/QHIpEYYqddE",target:"_blank",rel:"noopener noreferrer"},Ne=e("img",{src:c,alt:"Watch the video"},null,-1);function De(ze,Ge){const i=r("router-link"),l=r("RouteLink"),a=r("ExternalLinkIcon");return g(),_("div",null,[y,e("nav",k,[e("ul",null,[e("li",null,[o(i,{to:"#introduction"},{default:n(()=>[t("Introduction")]),_:1})]),e("li",null,[o(i,{to:"#install-wasabi-step-by-step"},{default:n(()=>[t("Install Wasabi step-by-step")]),_:1})]),e("li",null,[o(i,{to:"#windows"},{default:n(()=>[t("Windows")]),_:1})]),e("li",null,[o(i,{to:"#debian-and-ubuntu"},{default:n(()=>[t("Debian and Ubuntu")]),_:1})]),e("li",null,[o(i,{to:"#other-linux"},{default:n(()=>[t("Other Linux")]),_:1})]),e("li",null,[o(i,{to:"#macos"},{default:n(()=>[t("macOS")]),_:1}),e("ul",null,[e("li",null,[o(i,{to:"#optional-pgp-verification"},{default:n(()=>[t("Optional PGP Verification")]),_:1})])])])])]),W,e("p",null,[t("The easiest way to start with Wasabi is to download, verify and install the released package. This is a version of the software that is thoroughly reviewed by the contributors. The package has the binary code that is needed to run the Wasabi Wallet client including the graphical user interface. For compiling the open-source code with cutting edge development features, also including the backend server, see this "),o(l,{to:"/using-wasabi/BuildSource.html"},{default:n(()=>[t("tutorial here")]),_:1}),t(".")]),e("p",null,[t("Download the packages either from the official "),e("a",v,[t("WasabiWallet.io"),o(a)]),t(" clearnet website or for your privacy's sake, from the official Tor onion service "),e("a",P,[t("http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion"),o(a)]),t(".")]),A,e("p",null,[t("Although there is automatic signature verification on Windows and macOS, it is still recommended to manually "),x,t(" of the downloaded package with zkSNACKs' PGP public key "),e("a",I,[t("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),o(a)]),t(" before installing Wasabi. This protects you against malicious phishing sites giving you back-doored wallet software. If you have personally verified zkSNACKs' PGP public key "),e("a",S,[t("6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E"),o(a)]),t(" and you are familiar with the "),e("a",N,[t("Web Of Trust"),o(a)]),t(", please consider also "),e("a",D,[t("signing it"),o(a)]),t(".")]),z,G,e("ol",null,[e("li",null,[t("Download the Wasabi package relevant to your operating system from "),e("a",C,[t("wasabiwallet.io"),o(a)]),t(".")]),K,F]),T,B,e("ol",null,[e("li",null,[e("a",E,[t("Download"),o(a)]),t(" the "),O,t(" installer of the latest Wasabi release.")])]),V,L,Q,e("p",null,[t("Wasabi will be installed to your "),U,t(" folder. You will also have an icon in your Start Menu and on your Desktop. After the first run, a "),o(l,{to:"/FAQ/FAQ-UseWasabi.html#where-can-i-find-the-wasabi-data-folder"},{default:n(()=>[t("data folder")]),_:1}),t(" will be created. Among others, here is where your wallet files and your logs reside.")]),R,j,e("ol",null,[e("li",null,[e("p",null,[t("Download zkSNACKs' PGP public key "),e("a",Y,[t("here"),o(a)]),t(", and then import it with "),M,t(".")]),q]),e("li",null,[e("p",null,[e("a",H,[t("Download"),o(a)]),t(" the latest Wasabi release, both the "),J,t(" package and the corresponding "),$,t(" signature file.")])])]),X,e("p",null,[t("After the first run, a "),o(l,{to:"/FAQ/FAQ-UseWasabi.html#where-can-i-find-the-wasabi-data-folder"},{default:n(()=>[t("data folder")]),_:1}),t(" will be created. Among others, here is where your wallet files and your logs reside.")]),Z,ee,e("ol",null,[e("li",null,[e("p",null,[t("Download zkSNACKs' PGP public key "),e("a",te,[t("here"),o(a)]),t(", and then import it with "),oe,t(".")]),ae]),e("li",null,[e("p",null,[e("a",ne,[t("Download"),o(a)]),t(" the latest Wasabi release, both the "),ie,t(" archive and the corresponding "),le,t(" signature file.")])])]),se,e("p",null,[t("After the first run, a "),o(l,{to:"/FAQ/FAQ-UseWasabi.html#where-can-i-find-the-wasabi-data-folder"},{default:n(()=>[t("data folder")]),_:1}),t(" will be created. Among others, here is where your wallet files and your logs reside.")]),re,e("ol",null,[e("li",null,[e("a",de,[t("Download"),o(a)]),t(" the "),ce,t(" package of Wasabi 2.0.7.1 for your machine's processor. "),o(l,{to:"/FAQ/FAQ-Installation.html#why-are-there-two-different-packages-for-macos-intel-and-apple-silicon"},{default:n(()=>[t("There are two types of packages for macOS")]),_:1}),t(", one for Intel and one for the Apple Silicon chip. If you're not sure what processor your device has, you can "),e("a",he,[t("check it"),o(a)]),t(".")])]),ue,e("p",null,[t("After the first run, a "),o(l,{to:"/FAQ/FAQ-UseWasabi.html#where-can-i-find-the-wasabi-data-folder"},{default:n(()=>[t("data folder")]),_:1}),t(" will be created. Among others, here is where your wallet files and your logs reside.")]),pe,fe,e("ol",null,[e("li",null,[e("p",null,[e("a",be,[t("Get GnuPG"),o(a)]),t(".")])]),e("li",null,[e("p",null,[t("Copy "),e("a",ge,[t("zkSNACKs' PGP public key"),o(a)]),t(" into a new "),_e,t(" document and saving it as "),we,t(". Before saving, you need to go to "),me,t(" (otherwise TextEdit will not be able to save it as a .txt file).")])]),ye,e("li",null,[e("p",null,[e("a",ke,[t("Download"),o(a)]),t(" the latest Wasabi release, both the "),We,t(" package and the corresponding "),ve,t(" signature file.")]),Pe]),Ae]),e("p",null,[e("a",xe,[Ie,o(a)])]),e("p",null,[e("a",Se,[Ne,o(a)])])])}const Te=b(m,[["render",De],["__file","InstallPackage.html.vue"]]),Be=JSON.parse('{"path":"/using-wasabi/InstallPackage.html","title":"Install-package","lang":"en-US","frontmatter":{"title":"Install-package","description":"A step by step guide on how to securely download, verify and install the software packages of Wasabi for Linux, Windows and Mac. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"Install Wasabi step-by-step","slug":"install-wasabi-step-by-step","link":"#install-wasabi-step-by-step","children":[]},{"level":2,"title":"Windows","slug":"windows","link":"#windows","children":[]},{"level":2,"title":"Debian and Ubuntu","slug":"debian-and-ubuntu","link":"#debian-and-ubuntu","children":[]},{"level":2,"title":"Other Linux","slug":"other-linux","link":"#other-linux","children":[]},{"level":2,"title":"macOS","slug":"macos","link":"#macos","children":[{"level":3,"title":"Optional PGP Verification","slug":"optional-pgp-verification","link":"#optional-pgp-verification","children":[]}]}],"git":{"updatedTime":1685011132000},"filePathRelative":"using-wasabi/InstallPackage.md"}');export{Te as comp,Be as data}; diff --git a/assets/LICENSE.html-BADemgMk.js b/assets/LICENSE.html-DKeitlrQ.js similarity index 96% rename from assets/LICENSE.html-BADemgMk.js rename to assets/LICENSE.html-DKeitlrQ.js index caf6d1589a..e8fc322d33 100644 --- a/assets/LICENSE.html-BADemgMk.js +++ b/assets/LICENSE.html-DKeitlrQ.js @@ -1 +1 @@ -import{_ as n,r as a,o,c as s,a as t,b as e,d,e as r}from"./app-BPKesm5h.js";const c={},l=r('

    MIT License

    Wasabi Wallet and Wasabi documentation is licensed under the MIT License.

    A short and simple permissive license with conditions only requiring preservation of copyright and license notices. Licensed works, modifications, and larger works may be distributed under different terms and without source code.

    PermissionsLimitationsConditions
    Commercial useLiabilityLicense and copyright notice
    ModificationWarranty
    Distribution
    Private use
    ',4),h={href:"https://github.com/zkSNACKs/WasabiDoc/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"};function m(p,u){const i=a("ExternalLinkIcon");return o(),s("div",null,[l,t("p",null,[e("You can check the license "),t("a",h,[e("here"),d(i)]),e(".")])])}const f=n(c,[["render",m],["__file","LICENSE.html.vue"]]),_=JSON.parse('{"path":"/building-wasabi/LICENSE.html","title":"MIT License","lang":"en-US","frontmatter":{"title":"MIT License","description":"Every line of code in Wasabi wallet and documentation is libre and open source under the MIT license. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[],"git":{"updatedTime":1586738562000},"filePathRelative":"building-wasabi/LICENSE.md"}');export{f as comp,_ as data}; +import{_ as n,r as a,o,c as s,a as t,b as e,d,e as r}from"./app-BgbPjqpx.js";const c={},l=r('

    MIT License

    Wasabi Wallet and Wasabi documentation is licensed under the MIT License.

    A short and simple permissive license with conditions only requiring preservation of copyright and license notices. Licensed works, modifications, and larger works may be distributed under different terms and without source code.

    PermissionsLimitationsConditions
    Commercial useLiabilityLicense and copyright notice
    ModificationWarranty
    Distribution
    Private use
    ',4),h={href:"https://github.com/zkSNACKs/WasabiDoc/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"};function m(p,u){const i=a("ExternalLinkIcon");return o(),s("div",null,[l,t("p",null,[e("You can check the license "),t("a",h,[e("here"),d(i)]),e(".")])])}const f=n(c,[["render",m],["__file","LICENSE.html.vue"]]),_=JSON.parse('{"path":"/building-wasabi/LICENSE.html","title":"MIT License","lang":"en-US","frontmatter":{"title":"MIT License","description":"Every line of code in Wasabi wallet and documentation is libre and open source under the MIT license. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[],"git":{"updatedTime":1586738562000},"filePathRelative":"building-wasabi/LICENSE.md"}');export{f as comp,_ as data}; diff --git a/assets/LegalConcern.html-B9SHgM6p.js b/assets/LegalConcern.html-BkQTNYbk.js similarity index 99% rename from assets/LegalConcern.html-B9SHgM6p.js rename to assets/LegalConcern.html-BkQTNYbk.js index 4316d86621..626cd2fad8 100644 --- a/assets/LegalConcern.html-B9SHgM6p.js +++ b/assets/LegalConcern.html-BkQTNYbk.js @@ -1 +1 @@ -import{_ as c,r as s,o as l,c as h,a as e,d as n,w as a,b as i,e as o}from"./app-BPKesm5h.js";const d="/AddressDistribution.png",p={},u=e("h1",{id:"coinjoin-legal-concern",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoin-legal-concern"},[e("span",null,"CoinJoin Legal Concern")])],-1),f={class:"table-of-contents"},v=o('

    Using Bitcoin and other cryptocurrencies in the everyday course of businesses is becoming more and more popular. Digital money has a lot of advantages, from unstoppable transactions to relatively low fees, and quick final settlement of international payments. But all come at a price: the blockchain stores sensitive information like the amount and involved addresses of a transaction, giving away too much business-related information to the public. However, this does not necessarily need to be the case.

    Overview

    A CoinJoin transaction obfuscates the history of a given coin, making it hard to trace the coin back to the originator of the funds. The implementation of Wasabi Wallet CoinJoin allows the original user to get back his funds with an obfuscated history.

    It is often assumed that the main problem with an obfuscated transaction history is that financial regulators may have concerns about money laundering. However, this is only the first impression, if we go into the details it can become more transparent why institutions should not worry about violating AML rules and why companies could have a direct competitive advantage using CoinJoin transactions.

    With a transparent financial track record, companies paying with cryptocurrencies may find themselves in a squeezing situation, where their suppliers, clients, and competitors are aware of all of their payment steps and prices. For institutional investors, each step would be scrutinized by the market causing intentional or unintentional price manipulation.

    While the Bitcoin blockchain does not store personal information about the owners of the specific Bitcoin addresses, using metadata makes it possible to link Bitcoin addresses to certain companies and individuals. If such a link can be established, all past and future transactions can be traced.

    CoinJoin transactions

    Difference between ordinary banking and blockchain

    The ordinary banking system is closed, a very non-transparent system, where the data inside this system is hidden from outside observers. “Only” the bank and the user know the transactions made inside the system. In opposition, the blockchain is transparent and open to everyone. This means not only the “bank” (custodial service provider) but also outsider 3rd party observers are capable of tracking these transactions.

    Service providers' obligations regarding privacy

    There is no question a service provider who keeps a record of personal information needs to deal with the different privacy regulations and act according to them. In the ordinary banking system personal financial information is handled as a secret thus preserving individual privacy from third parties. Whereas in the open blockchain system this information by the nature of the technology cannot be kept secret, so there is a large risk of a privacy leak of sensitive financial information. This is obviously not intentional and even though the personal information might be protected, the financial information is nevertheless leaked due to the pseudonym nature of the system. This information has similar sensitivity as name, address, gender, etc. so it should be handled with great care.

    CoinJoin as a privacy-preserving tool

    Since the Bitcoin blockchain is transparent, transactions cannot be kept secret. Currently, one prevalent solution in Bitcoin to gain privacy is to CoinJoin the different coins to obfuscate their history. By the use of this tool, a custodial service provider can at least start to protect its users' financial privacy.

    Privacy perspective from the companies' point of view

    The essence of competitive advantages is to keep and hold business secrets. Each and every successful company has developed its own mechanism to deliver the best products and services to its customers. To reach this, they usually use a secret sauce, called the business secret to deliver the results. If anything, when a financial payment becomes fully transparent this business secret is evaporating Let’s look a bit deeper into what exactly this means for companies, who would like to use Bitcoin as the payment method, where all transactions are recorded on the blockchain.

    Suppliers

    Companies use suppliers to acquire products and services they use in their own production stages. For these products and services, of course, they pay a reasonable price. However, this price is usually negotiable, especially in B2B relationships or large scale orders. What would happen if all of a sudden, the price of raw materials for a company becomes fully public? Other competitors can now demand similar discounts, forcing industries into a vicious cycle of price reduction. As each and every price discount is negotiated on a case by case basis, considering factors as creditworthiness and timing of payment, transparent supplier prices would only cause enormous pressure on suppliers to deal with negotiations.

    Beyond the price of products, the timing of payments is also fully transparent on the blockchain. However, in certain circumstances, it is also a crucial business secret to keep the information on the sequence of invoice payments indoors. Considering cash flow implications, it can happen that one invoice is paid on time, while other invoices are still pending payment. In the case of blockchain transactions however all payments are transparent, so it can be clear for each counterparty that only a selected number of invoices has been paid even if the sufficient funds are available which can cause unnecessary tension between business partners.

    Additionally, if all historical transactions of a company are known, its creditworthiness might be considered incorrectly. It can happen that the creditworthiness is considered better than it is if the incoming funds to a specific address are extraordinarily high, but these funds are needed in other parts of the business, so the overall solvency of the business can be still negative despite the large funds. On the other hand, creditworthiness can be considered worse than it actually is, if only a handful of addresses are taken into consideration for the solvency analysis, neglecting other forms of wealth, like other Bitcoin addresses, or fiat accounts.

    Clients

    From the client’s perspective, the factors listed under suppliers are all applicable. If a client knows the revenue stream of the company, they can draw an incorrect conclusion about the actual financial situation of a company and make a decision of purchasing a product based on this assumed financial situation. If for example, there are no incoming funds for a given period, clients may stay away from purchasing products and services, solely because they might consider the company dormant or insolvent. But in reality, the seasonality of incoming funds is not disclosed for all companies, so it can be a perfectly stable business situation to receive incoming funds only in a given period of a year, while still being able to deliver service throughout the year.

    Another aspect is the possible price negotiations on the client-side. If a client finds out that another client is paying less for a service or product, they can demand similar discounts which can result in downward price pressure in the industry. This can ultimately result in companies going out of businesses if they cannot adjust to the lower price levels which are below the equilibrium prices.

    Competitors

    Everyone can agree that the pricing structure of services is a very sensitive topic and is the core of the business secret which makes a company successful. If all competitors can look at the transactions of the company, it also means they can adjust their own pricing structure to follow the successful market leaders in the industry, causing turbulence in competition. Each company has its own pricing structure which should be coming from the internal processes, know-how, and resources. Although external factors should be considered in pricing, they should not be the main driving force in pricing decisions.

    Employees

    There is now a growing number of companies that are paying their employees salaries in bitcoin due to the trustless transactions with relatively low fees, especially with international transactions.

    With transparent transaction history, employees would be aware of each other’s salaries without the company disclosing this information. Although there are some theories supporting a transparent salary structure, up to now the majority of the companies prefer to keep salaries as secret and obligate employees to keep salary and wage information confidential. Obfuscated transaction history can help companies to keep salary information confidential which can keep a relaxed atmosphere among employees with no wage pressures.

    Phishing attacks

    Disclosing financial information for a company makes them more vulnerable to phishing attacks. If the exact time and amount of payment are publicly known, attackers can use this information to build trust with the company and squeeze out other crucial business information pretending to be a trusted partner.

    Privacy perspective from the institutional investor’s point of view

    ',31),m={href:"https://bitinfocharts.com/top-100-richest-bitcoin-addresses.html",target:"_blank",rel:"noopener noreferrer"},y=o('

    Bitcoin address distribution

    Institutional investors and cryptocurrency exchanges are holding large sums of bitcoin on a blockchain where transactions are completely transparent. These so-called whales sometimes need to move large amounts of coins for any reason which can often lead to unintentional price manipulation. If a large bitcoin holding is on the move, it can always raise concern in the media regarding the future of Bitcoin, causing unnecessary price fluctuations. In the case of unintentional price manipulation, it is difficult to prove there has been no insider trading on the institutional side, which can cause loss of faith from the clients.

    Using obfuscated transaction history in large bitcoin transactions can help to keep the market stable and avoid unintentional price manipulations.

    Resolving AML conflicts

    Privacy is not just for criminals. One of the major critiques against using CoinJoin is that if the transaction history is not known for a company, it may be used as a way to launder money. From the above-listed cases, we already see that currently using fiat payments, during the normal course of businesses, companies do not disclose all financial information as that would result in a loss of business secrets. Why would they need to do this if they are just using a new method of payment, called Bitcoin? Using privacy tools to obfuscate Bitcoin transactions is completely legal and in accordance with the current legal framework.

    User privacy

    In all jurisdictions, there are different laws and acts that are made to protect customers privacy. This is not limited only to personal data but also financial data. In the EU there is GDPR, in the USA there is the Privacy Act of 1974, in Canada, there is the Privacy Act of 1985, etc. These set different rules to be kept in order to preserve individual privacy both on personal and financial levels.

    KYC/AML

    By now in mainly all jurisdictions, custodial cryptocurrency service providers (wallet, exchange, payment processor, etc.) are requested to run KYC/AML checks on users and their transactions. The KYC process and inner policies should ensure personal data protection. The accounts are assigned to these individual users, who are verified by the provider. This means the provider identifies the user just like a legacy bank would do. The different AML checks are run on deposits or withdrawals. The suspicious transactions can be linked to users based on the transactions that are initiated by them personally. KYC and AML procedures now ensure that all transactions involving fiat (like buying and selling bitcoin on exchanges for fiat currency) have a detailed background in terms of who is sending what money to whom, the identification of transactions are even more strict than in the current banking world, where two companies or individuals can send even large funds without the need to verify their source.

    Using CoinJoin as a custodial service provider

    As soon as a user deposits the funds to any of these service providers, the funds are in one large cluster. From now on the funds are possessed by the service provider and the actual user balances are only kept on internal records. At this point all KYC/AML procedures are done, funds should be considered “clean”. The funds are controlled by the service provider and different policies are set for securing these funds (hot and cold storage, multisig, etc.). The record system of the provider will show the exact value of funds belonging to the different users. This is the time when a provider could preserve its users’ privacy by applying CoinJoin on these funds. In case of a withdrawal, coinjoined UTXOs could be sent to the user. Again, this user is already KYC-ed, the provider has full knowledge about the user. In case of a law enforcement request, all data can be provided, since the deposit history of the user in question is still available. The only thing CoinJoin does, in this case, is protecting the user from third-party observers, while the service provider is still enabled to provide data for law enforcement if requested.

    Conclusion

    Companies using Bitcoin as a method of payment currently do not have sufficient privacy regarding their financial information. Outsiders can get valuable business-related information by studying the public transaction history of a company, causing economic damage in the long run. Using CoinJoin transactions can help businesses to keep their privacy while still enjoying the benefits that Bitcoin transactions can provide. Concerns from the AML perspective are not valid, as the necessary data can be provided to authorities upon investigation requests.

    ',13);function g(b,w){const t=s("router-link"),r=s("ExternalLinkIcon");return l(),h("div",null,[u,e("nav",f,[e("ul",null,[e("li",null,[n(t,{to:"#overview"},{default:a(()=>[i("Overview")]),_:1})]),e("li",null,[n(t,{to:"#coinjoin-transactions"},{default:a(()=>[i("CoinJoin transactions")]),_:1}),e("ul",null,[e("li",null,[n(t,{to:"#difference-between-ordinary-banking-and-blockchain"},{default:a(()=>[i("Difference between ordinary banking and blockchain")]),_:1})]),e("li",null,[n(t,{to:"#service-providers-obligations-regarding-privacy"},{default:a(()=>[i("Service providers' obligations regarding privacy")]),_:1})]),e("li",null,[n(t,{to:"#coinjoin-as-a-privacy-preserving-tool"},{default:a(()=>[i("CoinJoin as a privacy-preserving tool")]),_:1})])])]),e("li",null,[n(t,{to:"#privacy-perspective-from-the-companies-point-of-view"},{default:a(()=>[i("Privacy perspective from the companies' point of view")]),_:1}),e("ul",null,[e("li",null,[n(t,{to:"#suppliers"},{default:a(()=>[i("Suppliers")]),_:1})]),e("li",null,[n(t,{to:"#clients"},{default:a(()=>[i("Clients")]),_:1})]),e("li",null,[n(t,{to:"#competitors"},{default:a(()=>[i("Competitors")]),_:1})]),e("li",null,[n(t,{to:"#employees"},{default:a(()=>[i("Employees")]),_:1})]),e("li",null,[n(t,{to:"#phishing-attacks"},{default:a(()=>[i("Phishing attacks")]),_:1})])])]),e("li",null,[n(t,{to:"#privacy-perspective-from-the-institutional-investor-s-point-of-view"},{default:a(()=>[i("Privacy perspective from the institutional investor’s point of view")]),_:1})]),e("li",null,[n(t,{to:"#resolving-aml-conflicts"},{default:a(()=>[i("Resolving AML conflicts")]),_:1}),e("ul",null,[e("li",null,[n(t,{to:"#user-privacy"},{default:a(()=>[i("User privacy")]),_:1})]),e("li",null,[n(t,{to:"#kyc-aml"},{default:a(()=>[i("KYC/AML")]),_:1})]),e("li",null,[n(t,{to:"#using-coinjoin-as-a-custodial-service-provider"},{default:a(()=>[i("Using CoinJoin as a custodial service provider")]),_:1})])])]),e("li",null,[n(t,{to:"#conclusion"},{default:a(()=>[i("Conclusion")]),_:1})])])]),v,e("p",null,[i("The Bitcoin market is considered "),e("a",m,[i("fairly concentrated"),n(r)]),i(" in the sense that out of the millions of Bitcoin addresses, less than 1% holds 87% of bitcoins.")]),y])}const C=c(p,[["render",g],["__file","LegalConcern.html.vue"]]),_=JSON.parse(`{"path":"/why-wasabi/LegalConcern.html","title":"CoinJoin Legal Concern","lang":"en-US","frontmatter":{"title":"CoinJoin Legal Concern","description":"A legal analysis on the regulation of companies utilizing CoinJoin transactions. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"CoinJoin transactions","slug":"coinjoin-transactions","link":"#coinjoin-transactions","children":[{"level":3,"title":"Difference between ordinary banking and blockchain","slug":"difference-between-ordinary-banking-and-blockchain","link":"#difference-between-ordinary-banking-and-blockchain","children":[]},{"level":3,"title":"Service providers' obligations regarding privacy","slug":"service-providers-obligations-regarding-privacy","link":"#service-providers-obligations-regarding-privacy","children":[]},{"level":3,"title":"CoinJoin as a privacy-preserving tool","slug":"coinjoin-as-a-privacy-preserving-tool","link":"#coinjoin-as-a-privacy-preserving-tool","children":[]}]},{"level":2,"title":"Privacy perspective from the companies' point of view","slug":"privacy-perspective-from-the-companies-point-of-view","link":"#privacy-perspective-from-the-companies-point-of-view","children":[{"level":3,"title":"Suppliers","slug":"suppliers","link":"#suppliers","children":[]},{"level":3,"title":"Clients","slug":"clients","link":"#clients","children":[]},{"level":3,"title":"Competitors","slug":"competitors","link":"#competitors","children":[]},{"level":3,"title":"Employees","slug":"employees","link":"#employees","children":[]},{"level":3,"title":"Phishing attacks","slug":"phishing-attacks","link":"#phishing-attacks","children":[]}]},{"level":2,"title":"Privacy perspective from the institutional investor’s point of view","slug":"privacy-perspective-from-the-institutional-investor-s-point-of-view","link":"#privacy-perspective-from-the-institutional-investor-s-point-of-view","children":[]},{"level":2,"title":"Resolving AML conflicts","slug":"resolving-aml-conflicts","link":"#resolving-aml-conflicts","children":[{"level":3,"title":"User privacy","slug":"user-privacy","link":"#user-privacy","children":[]},{"level":3,"title":"KYC/AML","slug":"kyc-aml","link":"#kyc-aml","children":[]},{"level":3,"title":"Using CoinJoin as a custodial service provider","slug":"using-coinjoin-as-a-custodial-service-provider","link":"#using-coinjoin-as-a-custodial-service-provider","children":[]}]},{"level":2,"title":"Conclusion","slug":"conclusion","link":"#conclusion","children":[]}],"git":{"updatedTime":1696183078000},"filePathRelative":"why-wasabi/LegalConcern.md"}`);export{C as comp,_ as data}; +import{_ as c,r as s,o as l,c as h,a as e,d as n,w as a,b as i,e as o}from"./app-BgbPjqpx.js";const d="/AddressDistribution.png",p={},u=e("h1",{id:"coinjoin-legal-concern",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#coinjoin-legal-concern"},[e("span",null,"CoinJoin Legal Concern")])],-1),f={class:"table-of-contents"},v=o('

    Using Bitcoin and other cryptocurrencies in the everyday course of businesses is becoming more and more popular. Digital money has a lot of advantages, from unstoppable transactions to relatively low fees, and quick final settlement of international payments. But all come at a price: the blockchain stores sensitive information like the amount and involved addresses of a transaction, giving away too much business-related information to the public. However, this does not necessarily need to be the case.

    Overview

    A CoinJoin transaction obfuscates the history of a given coin, making it hard to trace the coin back to the originator of the funds. The implementation of Wasabi Wallet CoinJoin allows the original user to get back his funds with an obfuscated history.

    It is often assumed that the main problem with an obfuscated transaction history is that financial regulators may have concerns about money laundering. However, this is only the first impression, if we go into the details it can become more transparent why institutions should not worry about violating AML rules and why companies could have a direct competitive advantage using CoinJoin transactions.

    With a transparent financial track record, companies paying with cryptocurrencies may find themselves in a squeezing situation, where their suppliers, clients, and competitors are aware of all of their payment steps and prices. For institutional investors, each step would be scrutinized by the market causing intentional or unintentional price manipulation.

    While the Bitcoin blockchain does not store personal information about the owners of the specific Bitcoin addresses, using metadata makes it possible to link Bitcoin addresses to certain companies and individuals. If such a link can be established, all past and future transactions can be traced.

    CoinJoin transactions

    Difference between ordinary banking and blockchain

    The ordinary banking system is closed, a very non-transparent system, where the data inside this system is hidden from outside observers. “Only” the bank and the user know the transactions made inside the system. In opposition, the blockchain is transparent and open to everyone. This means not only the “bank” (custodial service provider) but also outsider 3rd party observers are capable of tracking these transactions.

    Service providers' obligations regarding privacy

    There is no question a service provider who keeps a record of personal information needs to deal with the different privacy regulations and act according to them. In the ordinary banking system personal financial information is handled as a secret thus preserving individual privacy from third parties. Whereas in the open blockchain system this information by the nature of the technology cannot be kept secret, so there is a large risk of a privacy leak of sensitive financial information. This is obviously not intentional and even though the personal information might be protected, the financial information is nevertheless leaked due to the pseudonym nature of the system. This information has similar sensitivity as name, address, gender, etc. so it should be handled with great care.

    CoinJoin as a privacy-preserving tool

    Since the Bitcoin blockchain is transparent, transactions cannot be kept secret. Currently, one prevalent solution in Bitcoin to gain privacy is to CoinJoin the different coins to obfuscate their history. By the use of this tool, a custodial service provider can at least start to protect its users' financial privacy.

    Privacy perspective from the companies' point of view

    The essence of competitive advantages is to keep and hold business secrets. Each and every successful company has developed its own mechanism to deliver the best products and services to its customers. To reach this, they usually use a secret sauce, called the business secret to deliver the results. If anything, when a financial payment becomes fully transparent this business secret is evaporating Let’s look a bit deeper into what exactly this means for companies, who would like to use Bitcoin as the payment method, where all transactions are recorded on the blockchain.

    Suppliers

    Companies use suppliers to acquire products and services they use in their own production stages. For these products and services, of course, they pay a reasonable price. However, this price is usually negotiable, especially in B2B relationships or large scale orders. What would happen if all of a sudden, the price of raw materials for a company becomes fully public? Other competitors can now demand similar discounts, forcing industries into a vicious cycle of price reduction. As each and every price discount is negotiated on a case by case basis, considering factors as creditworthiness and timing of payment, transparent supplier prices would only cause enormous pressure on suppliers to deal with negotiations.

    Beyond the price of products, the timing of payments is also fully transparent on the blockchain. However, in certain circumstances, it is also a crucial business secret to keep the information on the sequence of invoice payments indoors. Considering cash flow implications, it can happen that one invoice is paid on time, while other invoices are still pending payment. In the case of blockchain transactions however all payments are transparent, so it can be clear for each counterparty that only a selected number of invoices has been paid even if the sufficient funds are available which can cause unnecessary tension between business partners.

    Additionally, if all historical transactions of a company are known, its creditworthiness might be considered incorrectly. It can happen that the creditworthiness is considered better than it is if the incoming funds to a specific address are extraordinarily high, but these funds are needed in other parts of the business, so the overall solvency of the business can be still negative despite the large funds. On the other hand, creditworthiness can be considered worse than it actually is, if only a handful of addresses are taken into consideration for the solvency analysis, neglecting other forms of wealth, like other Bitcoin addresses, or fiat accounts.

    Clients

    From the client’s perspective, the factors listed under suppliers are all applicable. If a client knows the revenue stream of the company, they can draw an incorrect conclusion about the actual financial situation of a company and make a decision of purchasing a product based on this assumed financial situation. If for example, there are no incoming funds for a given period, clients may stay away from purchasing products and services, solely because they might consider the company dormant or insolvent. But in reality, the seasonality of incoming funds is not disclosed for all companies, so it can be a perfectly stable business situation to receive incoming funds only in a given period of a year, while still being able to deliver service throughout the year.

    Another aspect is the possible price negotiations on the client-side. If a client finds out that another client is paying less for a service or product, they can demand similar discounts which can result in downward price pressure in the industry. This can ultimately result in companies going out of businesses if they cannot adjust to the lower price levels which are below the equilibrium prices.

    Competitors

    Everyone can agree that the pricing structure of services is a very sensitive topic and is the core of the business secret which makes a company successful. If all competitors can look at the transactions of the company, it also means they can adjust their own pricing structure to follow the successful market leaders in the industry, causing turbulence in competition. Each company has its own pricing structure which should be coming from the internal processes, know-how, and resources. Although external factors should be considered in pricing, they should not be the main driving force in pricing decisions.

    Employees

    There is now a growing number of companies that are paying their employees salaries in bitcoin due to the trustless transactions with relatively low fees, especially with international transactions.

    With transparent transaction history, employees would be aware of each other’s salaries without the company disclosing this information. Although there are some theories supporting a transparent salary structure, up to now the majority of the companies prefer to keep salaries as secret and obligate employees to keep salary and wage information confidential. Obfuscated transaction history can help companies to keep salary information confidential which can keep a relaxed atmosphere among employees with no wage pressures.

    Phishing attacks

    Disclosing financial information for a company makes them more vulnerable to phishing attacks. If the exact time and amount of payment are publicly known, attackers can use this information to build trust with the company and squeeze out other crucial business information pretending to be a trusted partner.

    Privacy perspective from the institutional investor’s point of view

    ',31),m={href:"https://bitinfocharts.com/top-100-richest-bitcoin-addresses.html",target:"_blank",rel:"noopener noreferrer"},y=o('

    Bitcoin address distribution

    Institutional investors and cryptocurrency exchanges are holding large sums of bitcoin on a blockchain where transactions are completely transparent. These so-called whales sometimes need to move large amounts of coins for any reason which can often lead to unintentional price manipulation. If a large bitcoin holding is on the move, it can always raise concern in the media regarding the future of Bitcoin, causing unnecessary price fluctuations. In the case of unintentional price manipulation, it is difficult to prove there has been no insider trading on the institutional side, which can cause loss of faith from the clients.

    Using obfuscated transaction history in large bitcoin transactions can help to keep the market stable and avoid unintentional price manipulations.

    Resolving AML conflicts

    Privacy is not just for criminals. One of the major critiques against using CoinJoin is that if the transaction history is not known for a company, it may be used as a way to launder money. From the above-listed cases, we already see that currently using fiat payments, during the normal course of businesses, companies do not disclose all financial information as that would result in a loss of business secrets. Why would they need to do this if they are just using a new method of payment, called Bitcoin? Using privacy tools to obfuscate Bitcoin transactions is completely legal and in accordance with the current legal framework.

    User privacy

    In all jurisdictions, there are different laws and acts that are made to protect customers privacy. This is not limited only to personal data but also financial data. In the EU there is GDPR, in the USA there is the Privacy Act of 1974, in Canada, there is the Privacy Act of 1985, etc. These set different rules to be kept in order to preserve individual privacy both on personal and financial levels.

    KYC/AML

    By now in mainly all jurisdictions, custodial cryptocurrency service providers (wallet, exchange, payment processor, etc.) are requested to run KYC/AML checks on users and their transactions. The KYC process and inner policies should ensure personal data protection. The accounts are assigned to these individual users, who are verified by the provider. This means the provider identifies the user just like a legacy bank would do. The different AML checks are run on deposits or withdrawals. The suspicious transactions can be linked to users based on the transactions that are initiated by them personally. KYC and AML procedures now ensure that all transactions involving fiat (like buying and selling bitcoin on exchanges for fiat currency) have a detailed background in terms of who is sending what money to whom, the identification of transactions are even more strict than in the current banking world, where two companies or individuals can send even large funds without the need to verify their source.

    Using CoinJoin as a custodial service provider

    As soon as a user deposits the funds to any of these service providers, the funds are in one large cluster. From now on the funds are possessed by the service provider and the actual user balances are only kept on internal records. At this point all KYC/AML procedures are done, funds should be considered “clean”. The funds are controlled by the service provider and different policies are set for securing these funds (hot and cold storage, multisig, etc.). The record system of the provider will show the exact value of funds belonging to the different users. This is the time when a provider could preserve its users’ privacy by applying CoinJoin on these funds. In case of a withdrawal, coinjoined UTXOs could be sent to the user. Again, this user is already KYC-ed, the provider has full knowledge about the user. In case of a law enforcement request, all data can be provided, since the deposit history of the user in question is still available. The only thing CoinJoin does, in this case, is protecting the user from third-party observers, while the service provider is still enabled to provide data for law enforcement if requested.

    Conclusion

    Companies using Bitcoin as a method of payment currently do not have sufficient privacy regarding their financial information. Outsiders can get valuable business-related information by studying the public transaction history of a company, causing economic damage in the long run. Using CoinJoin transactions can help businesses to keep their privacy while still enjoying the benefits that Bitcoin transactions can provide. Concerns from the AML perspective are not valid, as the necessary data can be provided to authorities upon investigation requests.

    ',13);function g(b,w){const t=s("router-link"),r=s("ExternalLinkIcon");return l(),h("div",null,[u,e("nav",f,[e("ul",null,[e("li",null,[n(t,{to:"#overview"},{default:a(()=>[i("Overview")]),_:1})]),e("li",null,[n(t,{to:"#coinjoin-transactions"},{default:a(()=>[i("CoinJoin transactions")]),_:1}),e("ul",null,[e("li",null,[n(t,{to:"#difference-between-ordinary-banking-and-blockchain"},{default:a(()=>[i("Difference between ordinary banking and blockchain")]),_:1})]),e("li",null,[n(t,{to:"#service-providers-obligations-regarding-privacy"},{default:a(()=>[i("Service providers' obligations regarding privacy")]),_:1})]),e("li",null,[n(t,{to:"#coinjoin-as-a-privacy-preserving-tool"},{default:a(()=>[i("CoinJoin as a privacy-preserving tool")]),_:1})])])]),e("li",null,[n(t,{to:"#privacy-perspective-from-the-companies-point-of-view"},{default:a(()=>[i("Privacy perspective from the companies' point of view")]),_:1}),e("ul",null,[e("li",null,[n(t,{to:"#suppliers"},{default:a(()=>[i("Suppliers")]),_:1})]),e("li",null,[n(t,{to:"#clients"},{default:a(()=>[i("Clients")]),_:1})]),e("li",null,[n(t,{to:"#competitors"},{default:a(()=>[i("Competitors")]),_:1})]),e("li",null,[n(t,{to:"#employees"},{default:a(()=>[i("Employees")]),_:1})]),e("li",null,[n(t,{to:"#phishing-attacks"},{default:a(()=>[i("Phishing attacks")]),_:1})])])]),e("li",null,[n(t,{to:"#privacy-perspective-from-the-institutional-investor-s-point-of-view"},{default:a(()=>[i("Privacy perspective from the institutional investor’s point of view")]),_:1})]),e("li",null,[n(t,{to:"#resolving-aml-conflicts"},{default:a(()=>[i("Resolving AML conflicts")]),_:1}),e("ul",null,[e("li",null,[n(t,{to:"#user-privacy"},{default:a(()=>[i("User privacy")]),_:1})]),e("li",null,[n(t,{to:"#kyc-aml"},{default:a(()=>[i("KYC/AML")]),_:1})]),e("li",null,[n(t,{to:"#using-coinjoin-as-a-custodial-service-provider"},{default:a(()=>[i("Using CoinJoin as a custodial service provider")]),_:1})])])]),e("li",null,[n(t,{to:"#conclusion"},{default:a(()=>[i("Conclusion")]),_:1})])])]),v,e("p",null,[i("The Bitcoin market is considered "),e("a",m,[i("fairly concentrated"),n(r)]),i(" in the sense that out of the millions of Bitcoin addresses, less than 1% holds 87% of bitcoins.")]),y])}const C=c(p,[["render",g],["__file","LegalConcern.html.vue"]]),_=JSON.parse(`{"path":"/why-wasabi/LegalConcern.html","title":"CoinJoin Legal Concern","lang":"en-US","frontmatter":{"title":"CoinJoin Legal Concern","description":"A legal analysis on the regulation of companies utilizing CoinJoin transactions. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"CoinJoin transactions","slug":"coinjoin-transactions","link":"#coinjoin-transactions","children":[{"level":3,"title":"Difference between ordinary banking and blockchain","slug":"difference-between-ordinary-banking-and-blockchain","link":"#difference-between-ordinary-banking-and-blockchain","children":[]},{"level":3,"title":"Service providers' obligations regarding privacy","slug":"service-providers-obligations-regarding-privacy","link":"#service-providers-obligations-regarding-privacy","children":[]},{"level":3,"title":"CoinJoin as a privacy-preserving tool","slug":"coinjoin-as-a-privacy-preserving-tool","link":"#coinjoin-as-a-privacy-preserving-tool","children":[]}]},{"level":2,"title":"Privacy perspective from the companies' point of view","slug":"privacy-perspective-from-the-companies-point-of-view","link":"#privacy-perspective-from-the-companies-point-of-view","children":[{"level":3,"title":"Suppliers","slug":"suppliers","link":"#suppliers","children":[]},{"level":3,"title":"Clients","slug":"clients","link":"#clients","children":[]},{"level":3,"title":"Competitors","slug":"competitors","link":"#competitors","children":[]},{"level":3,"title":"Employees","slug":"employees","link":"#employees","children":[]},{"level":3,"title":"Phishing attacks","slug":"phishing-attacks","link":"#phishing-attacks","children":[]}]},{"level":2,"title":"Privacy perspective from the institutional investor’s point of view","slug":"privacy-perspective-from-the-institutional-investor-s-point-of-view","link":"#privacy-perspective-from-the-institutional-investor-s-point-of-view","children":[]},{"level":2,"title":"Resolving AML conflicts","slug":"resolving-aml-conflicts","link":"#resolving-aml-conflicts","children":[{"level":3,"title":"User privacy","slug":"user-privacy","link":"#user-privacy","children":[]},{"level":3,"title":"KYC/AML","slug":"kyc-aml","link":"#kyc-aml","children":[]},{"level":3,"title":"Using CoinJoin as a custodial service provider","slug":"using-coinjoin-as-a-custodial-service-provider","link":"#using-coinjoin-as-a-custodial-service-provider","children":[]}]},{"level":2,"title":"Conclusion","slug":"conclusion","link":"#conclusion","children":[]}],"git":{"updatedTime":1696183078000},"filePathRelative":"why-wasabi/LegalConcern.md"}`);export{C as comp,_ as data}; diff --git a/assets/NetworkLevelPrivacy.html-NGtcEd_n.js b/assets/NetworkLevelPrivacy.html-fWyUnxDF.js similarity index 99% rename from assets/NetworkLevelPrivacy.html-NGtcEd_n.js rename to assets/NetworkLevelPrivacy.html-fWyUnxDF.js index 69649b4448..998587984d 100644 --- a/assets/NetworkLevelPrivacy.html-NGtcEd_n.js +++ b/assets/NetworkLevelPrivacy.html-fWyUnxDF.js @@ -1 +1 @@ -import{_ as c}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as d,r,o as h,c as u,a as e,d as a,w as i,b as t,e as s}from"./app-BPKesm5h.js";const p={},f=e("h1",{id:"network-level-privacy-bitcoin-core-vs-wasabi-wallet",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#network-level-privacy-bitcoin-core-vs-wasabi-wallet"},[e("span",null,"Network-Level Privacy - Bitcoin Core vs Wasabi Wallet")])],-1),b=e("p",null,"Bitcoin is a peer-to-peer network of full nodes that define, verify, and enforce the Bitcoin consensus rules. There is a lot of communication between them and metadata can be used to de-anonymize Bitcoin users.",-1),v={class:"table-of-contents"},m=e("h2",{id:"problem",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#problem"},[e("span",null,"Problem")])],-1),g=e("h3",{id:"clearnet-light-clients",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#clearnet-light-clients"},[e("span",null,"Clearnet light clients")])],-1),y=e("p",null,"When the communication to the network is unencrypted over clearnet, then there is an easy correlation of the Bitcoin transactions to the IP address of the peer who sent it. The IP address can even be used to find the physical location of the user!",-1),k=e("p",null,"A Bitcoin full node broadcasts not just the transactions of its user, but it also gossips all of the other transactions that it has received from its peers. Thus it is very difficult to find out which transactions originated from which full node. However, when a node or a wallet does not gossip all transactions, but only the transactions of its user, then it is easier to find out which node has sent those specific transactions.",-1),w={href:"https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki",target:"_blank",rel:"noopener noreferrer"},_={href:"https://jonasnick.github.io/blog/2015/02/12/privacy-in-bitcoinj/",target:"_blank",rel:"noopener noreferrer"},T={href:"https://www.reddit.com/r/Bitcoin/comments/2feox9/electrum_securityprivacy_model/ck8szc0/",target:"_blank",rel:"noopener noreferrer"},B=s('

    DANGER

    When the user sends the extended public key or a filter of all the addresses to the central server, then the server can COMPLETELY deanonymize the users.

    Wasabi's solution

    Full node by default & block filters over Tor

    Wasabi checks if there is a local Tor instance installed, and if so, it uses this to onion-route all the traffic to and from the network. If Tor is not already installed, then it is accessed automatically from within Wasabi. This means that by default, all network communication is secured from outside snooping and the IP address is hidden.

    ',4),P={href:"https://github.com/bitcoin/bitcoin",target:"_blank",rel:"noopener noreferrer"},W={class:"custom-container tip"},x=e("p",{class:"custom-container-title"},"Wasabi ships with Bitcoin Knots!",-1),I={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},C=s('

    Privacy by default!

    Wasabi has network-level privacy as good as a Bitcoin full node.

    In-depth comparison

    Furthermore, network-level privacy consists of two sub-categories.

    • Private UTXO Retrieval
    • Private Transaction Broadcasting

    Bitcoin Core

    Private UTXO retrieval

    Bitcoin Core downloads all the blocks ever created and establishes your wallet balances locally. This is as good as it gets.

    Private transaction broadcasting

    Bitcoin Core broadcasts transactions to other peers on the clearnet, unencrypted. Other peers cannot figure out which transaction originates from a specific node because Core does not only broadcast its own transactions but also propagates every other transaction that hits its mempool. However, some papers note it’s not bulletproof:

    ',9),N={href:"https://github.com/bitcoin/bips/blob/master/bip-0156.mediawiki",target:"_blank",rel:"noopener noreferrer"},A=s('

    Adversaries identified

    • Malicious Peer
    • Supernode

    Bitcoin Core + Tor

    You can use Bitcoin Core with Tor, which solves some of the above-mentioned issues. In this case, a supernode cannot track back transactions to your IP address.

    An entity that can break Tor is a universal adversary, however, most Tor attacks are not possible if exit nodes are not involved. It is reasonable to assume that this entity can break the onion routing, not Tor's encryption itself.

    Adversaries identified

    • Tor breaker

    Wasabi Wallet light node

    Private UTXO retrieval

    The backend server serves block filters to all the clients over Tor. From those filters, the clients figure out which blocks they are interested in and download them [and some false positive blocks] from peers. One block per peer, and always over a fresh Tor stream. When a block is acquired, the peer gets disconnected. Because of the end-to-end encryption of the onion network, it immediately defeats an ISP adversary and makes the already impossible job of the Sybil adversary even more impossible. The only adversary that could possibly overcome this would have to setup thousands of full nodes over Tor and also break Tor itself.

    Private transaction broadcasting

    All Wasabi traffic is tunneled through Tor. Wasabi connects only to onion nodes, so end-to-end encryption is enforced between the wallet and peers. All this without involving any exit node. Wasabi connects to each peer through a different Tor stream. A new Bitcoin peer is chosen for every transaction broadcast.

    Everything over Tor!

    Wasabi broadcast transactions to only one peer over Tor, and immediately after that the peer is disconnected.

    Adversaries identified

    • ISP
    • Tor Breaker Sybil Attacker With Thousands Of Full Nodes Over Onion

    Wasabi Wallet + full node

    TIP

    Wasabi has a partial Bitcoin Knots integration. This means that it is possible (but not mandatory) to start Bitcoin Knots during the launch of Wasabi, without having to install or configure anything manually.

    Private UTXO retrieval

    If you have a listening full node running in the background (not only Bitcoin Core, any full node) then Wasabi automatically picks it up and instead of asking peers for blocks, it asks for blocks from your own node. Using Wasabi this way results in the same privacy model as Bitcoin Core's, regarding Private UTXO Retrieval.

    Private transaction broadcasting

    Even when Wasabi is connected to your own node, it will broadcast the transaction in the above-described way: to one new peer over Tor.

    Universal Attacks

    Every time you use software that interacts with a Bitcoin network, and especially a Bitcoin node, you leave a sticky fingerprint in your traffic. It comes in the form of a small but unavoidable spike in volume every time a new block is mined and the nodes start gossiping about it. The blocks in Bitcoin are quite big, and the propagation speed is critical for consensus (greater delay means more frequent accidental forks), so such effect is predictable, and, in a sense, inherent to the Bitcoin architecture.

    ',23),S={href:"https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki",target:"_blank",rel:"noopener noreferrer"},L={href:"https://m417z.com/bitsniff/",target:"_blank",rel:"noopener noreferrer"},E=s('

    Protection

    There are many ways to go about it, but staying completely undetected is far from trivial - traditional privacy-enhancing tools mostly focus on the packet level, which is orthogonal to the technique. Let’s break down the potential defense vectors.

    • VPN / Tor - unlikely to affect the time series shape much, and therefore for larger traffic lengths the statistical significance of block-related spikes will inevitably become overwhelming.

    • Traffic mixing - for traffic volumes that are orders of magnitude higher than Bitcoin P2P communications, mixing is likely to be very effective. That would, however, demand constant shielding of both upstream and downstream communications, and couldn't be done effectively by just running the node on a general-purpose machine - any noticeably long unshielded period may be enough for detection.

    • Being your own ISP - too spicy for most, but that should work.

    • Blockstream Satellite - the ultimate solution. Eliminates the traffic analysis threat altogether.

    Beyond active measures available now, both the privacy and the bandwidth efficiency of Bitcoin communications are actively worked on. It is entirely possible that the messaging protocol will get to the point where block propagation doesn't trigger any significant spikes in traffic volume.

    ',4),O={href:"https://79jke.github.io/BitSniff/",target:"_blank",rel:"noopener noreferrer"},q={href:"https://m417z.com/bitsniff/",target:"_blank",rel:"noopener noreferrer"},U={href:"https://youtu.be/9S8xsDq3PTU",target:"_blank",rel:"noopener noreferrer"},F=e("img",{src:c,alt:"Watch the video"},null,-1);function R(V,j){const o=r("router-link"),n=r("ExternalLinkIcon"),l=r("RouteLink");return h(),u("div",null,[f,b,e("nav",v,[e("ul",null,[e("li",null,[a(o,{to:"#problem"},{default:i(()=>[t("Problem")]),_:1}),e("ul",null,[e("li",null,[a(o,{to:"#clearnet-light-clients"},{default:i(()=>[t("Clearnet light clients")]),_:1})])])]),e("li",null,[a(o,{to:"#wasabi-s-solution"},{default:i(()=>[t("Wasabi's solution")]),_:1}),e("ul",null,[e("li",null,[a(o,{to:"#full-node-by-default-block-filters-over-tor"},{default:i(()=>[t("Full node by default & block filters over Tor")]),_:1})])])]),e("li",null,[a(o,{to:"#in-depth-comparison"},{default:i(()=>[t("In-depth comparison")]),_:1}),e("ul",null,[e("li",null,[a(o,{to:"#bitcoin-core"},{default:i(()=>[t("Bitcoin Core")]),_:1})]),e("li",null,[a(o,{to:"#bitcoin-core-tor"},{default:i(()=>[t("Bitcoin Core + Tor")]),_:1})]),e("li",null,[a(o,{to:"#wasabi-wallet-light-node"},{default:i(()=>[t("Wasabi Wallet light node")]),_:1})]),e("li",null,[a(o,{to:"#wasabi-wallet-full-node"},{default:i(()=>[t("Wasabi Wallet + full node")]),_:1})])])]),e("li",null,[a(o,{to:"#universal-attacks"},{default:i(()=>[t("Universal Attacks")]),_:1}),e("ul",null,[e("li",null,[a(o,{to:"#protection"},{default:i(()=>[t("Protection")]),_:1})])])])])]),m,g,y,k,e("p",null,[t("There are light wallets, which query a backend server to get information regarding specific addresses or use "),e("a",w,[t("BIP 37"),a(n)]),t(" bloom filtering SPV wallet protocol, which is "),e("a",_,[t("extremely bad for privacy"),a(n)]),t(". And there is Electrum, which "),e("a",T,[t("sends your addresses"),a(n)]),t(" to random Electrum servers.")]),B,e("p",null,[t("In order to fully verify everything, running a full node is essential. If "),e("a",P,[t("bitcoind"),a(n)]),t(" is installed and run on the same computer as Wasabi, then it will automatically and by default connect to the full node. It is also possible to connect Wasabi to a remote full node on another computer by specifying the local IP address or Tor onion service in the settings. Then, Wasabi pulls the verified blocks and queries the mempool from the full node.")]),e("div",W,[x,e("p",null,[t("Wasabi has a "),a(l,{to:"/using-wasabi/BitcoinFullNode.html"},{default:i(()=>[t("partial Bitcoin Knots integration")]),_:1}),t(". This means that it is possible (but not mandatory) to start Bitcoin Knots during the launch of Wasabi, without having to install or configure anything manually.")])]),e("p",null,[t("However, even if no full node is installed, Wasabi has a light client mode based on "),e("a",I,[t("BIP 158 block filters"),a(n)]),t(". The Wasabi server sends a filter of all the transactions in each block to all the users. Then, users check locally if the block contains any transactions with their addresses. If not, then the filter is stored for later reference, and no block is downloaded. However, if there is a user transaction in that block, then Wasabi connects to a random Bitcoin P2P node over Tor and asks for this entire block, not only one transaction. This block request is indistinguishable from the regular P2P gossip, and thus nobody, neither the server nor the full node, know which addresses belong to the user.")]),C,e("blockquote",null,[e("p",null,[t("Bitcoin transaction propagation does not hide the source of a transaction very well, especially against a “supernode” eavesdropper that forms a large number of outgoing connections to reachable nodes on the network. "),e("a",N,[t("Dandelion: Privacy-Preserving Transaction Propagation"),a(n)]),t(".")])]),A,e("p",null,[t("Notably, the volume of block-related messages was drastically reduced since the introduction of Compact Block Relay ("),e("a",S,[t("BIP 152"),a(n)]),t(". Instead of requesting whole blocks, mostly consisting of transactions already known to the node, the peer informed of a new block is only requesting the missing transactions. Yet the amount of extra communications in the seconds following a new block is still considerable. This effect may not be noticeable for a single block, but over time it gets statistically significant and may get exploited.")]),e("p",null,[t("As reported by "),e("a",L,[t("Niko Kudriastev and Michael Maltsev"),a(n)]),t(", it is possible to detect Bitcoin communications using nothing but traffic volume over time - a piece of information even most privacy concerned individuals are likely leaking to their law-abiding Internet Service Provider. In this case, using a VPN and running the node over Tor may not be enough to avoid being detected.")]),E,e("p",null,[t("You can read more about BitSniff "),e("a",O,[t("here"),a(n)]),t(" and check the interactive demo "),e("a",q,[t("here"),a(n)]),t(".")]),e("p",null,[e("a",U,[F,a(n)])])])}const X=d(p,[["render",R],["__file","NetworkLevelPrivacy.html.vue"]]),H=JSON.parse(`{"path":"/why-wasabi/NetworkLevelPrivacy.html","title":"Network-Level Privacy","lang":"en-US","frontmatter":{"title":"Network-Level Privacy","description":"A comparison of the network-level privacy of Wasabi wallet and Bitcoin Core. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Problem","slug":"problem","link":"#problem","children":[{"level":3,"title":"Clearnet light clients","slug":"clearnet-light-clients","link":"#clearnet-light-clients","children":[]}]},{"level":2,"title":"Wasabi's solution","slug":"wasabi-s-solution","link":"#wasabi-s-solution","children":[{"level":3,"title":"Full node by default & block filters over Tor","slug":"full-node-by-default-block-filters-over-tor","link":"#full-node-by-default-block-filters-over-tor","children":[]}]},{"level":2,"title":"In-depth comparison","slug":"in-depth-comparison","link":"#in-depth-comparison","children":[{"level":3,"title":"Bitcoin Core","slug":"bitcoin-core","link":"#bitcoin-core","children":[]},{"level":3,"title":"Bitcoin Core + Tor","slug":"bitcoin-core-tor","link":"#bitcoin-core-tor","children":[]},{"level":3,"title":"Wasabi Wallet light node","slug":"wasabi-wallet-light-node","link":"#wasabi-wallet-light-node","children":[]},{"level":3,"title":"Wasabi Wallet + full node","slug":"wasabi-wallet-full-node","link":"#wasabi-wallet-full-node","children":[]}]},{"level":2,"title":"Universal Attacks","slug":"universal-attacks","link":"#universal-attacks","children":[{"level":3,"title":"Protection","slug":"protection","link":"#protection","children":[]}]}],"git":{"updatedTime":1682266766000},"filePathRelative":"why-wasabi/NetworkLevelPrivacy.md"}`);export{X as comp,H as data}; +import{_ as c}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as d,r,o as h,c as u,a as e,d as a,w as i,b as t,e as s}from"./app-BgbPjqpx.js";const p={},f=e("h1",{id:"network-level-privacy-bitcoin-core-vs-wasabi-wallet",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#network-level-privacy-bitcoin-core-vs-wasabi-wallet"},[e("span",null,"Network-Level Privacy - Bitcoin Core vs Wasabi Wallet")])],-1),b=e("p",null,"Bitcoin is a peer-to-peer network of full nodes that define, verify, and enforce the Bitcoin consensus rules. There is a lot of communication between them and metadata can be used to de-anonymize Bitcoin users.",-1),v={class:"table-of-contents"},m=e("h2",{id:"problem",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#problem"},[e("span",null,"Problem")])],-1),g=e("h3",{id:"clearnet-light-clients",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#clearnet-light-clients"},[e("span",null,"Clearnet light clients")])],-1),y=e("p",null,"When the communication to the network is unencrypted over clearnet, then there is an easy correlation of the Bitcoin transactions to the IP address of the peer who sent it. The IP address can even be used to find the physical location of the user!",-1),k=e("p",null,"A Bitcoin full node broadcasts not just the transactions of its user, but it also gossips all of the other transactions that it has received from its peers. Thus it is very difficult to find out which transactions originated from which full node. However, when a node or a wallet does not gossip all transactions, but only the transactions of its user, then it is easier to find out which node has sent those specific transactions.",-1),w={href:"https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki",target:"_blank",rel:"noopener noreferrer"},_={href:"https://jonasnick.github.io/blog/2015/02/12/privacy-in-bitcoinj/",target:"_blank",rel:"noopener noreferrer"},T={href:"https://www.reddit.com/r/Bitcoin/comments/2feox9/electrum_securityprivacy_model/ck8szc0/",target:"_blank",rel:"noopener noreferrer"},B=s('

    DANGER

    When the user sends the extended public key or a filter of all the addresses to the central server, then the server can COMPLETELY deanonymize the users.

    Wasabi's solution

    Full node by default & block filters over Tor

    Wasabi checks if there is a local Tor instance installed, and if so, it uses this to onion-route all the traffic to and from the network. If Tor is not already installed, then it is accessed automatically from within Wasabi. This means that by default, all network communication is secured from outside snooping and the IP address is hidden.

    ',4),P={href:"https://github.com/bitcoin/bitcoin",target:"_blank",rel:"noopener noreferrer"},W={class:"custom-container tip"},x=e("p",{class:"custom-container-title"},"Wasabi ships with Bitcoin Knots!",-1),I={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},C=s('

    Privacy by default!

    Wasabi has network-level privacy as good as a Bitcoin full node.

    In-depth comparison

    Furthermore, network-level privacy consists of two sub-categories.

    • Private UTXO Retrieval
    • Private Transaction Broadcasting

    Bitcoin Core

    Private UTXO retrieval

    Bitcoin Core downloads all the blocks ever created and establishes your wallet balances locally. This is as good as it gets.

    Private transaction broadcasting

    Bitcoin Core broadcasts transactions to other peers on the clearnet, unencrypted. Other peers cannot figure out which transaction originates from a specific node because Core does not only broadcast its own transactions but also propagates every other transaction that hits its mempool. However, some papers note it’s not bulletproof:

    ',9),N={href:"https://github.com/bitcoin/bips/blob/master/bip-0156.mediawiki",target:"_blank",rel:"noopener noreferrer"},A=s('

    Adversaries identified

    • Malicious Peer
    • Supernode

    Bitcoin Core + Tor

    You can use Bitcoin Core with Tor, which solves some of the above-mentioned issues. In this case, a supernode cannot track back transactions to your IP address.

    An entity that can break Tor is a universal adversary, however, most Tor attacks are not possible if exit nodes are not involved. It is reasonable to assume that this entity can break the onion routing, not Tor's encryption itself.

    Adversaries identified

    • Tor breaker

    Wasabi Wallet light node

    Private UTXO retrieval

    The backend server serves block filters to all the clients over Tor. From those filters, the clients figure out which blocks they are interested in and download them [and some false positive blocks] from peers. One block per peer, and always over a fresh Tor stream. When a block is acquired, the peer gets disconnected. Because of the end-to-end encryption of the onion network, it immediately defeats an ISP adversary and makes the already impossible job of the Sybil adversary even more impossible. The only adversary that could possibly overcome this would have to setup thousands of full nodes over Tor and also break Tor itself.

    Private transaction broadcasting

    All Wasabi traffic is tunneled through Tor. Wasabi connects only to onion nodes, so end-to-end encryption is enforced between the wallet and peers. All this without involving any exit node. Wasabi connects to each peer through a different Tor stream. A new Bitcoin peer is chosen for every transaction broadcast.

    Everything over Tor!

    Wasabi broadcast transactions to only one peer over Tor, and immediately after that the peer is disconnected.

    Adversaries identified

    • ISP
    • Tor Breaker Sybil Attacker With Thousands Of Full Nodes Over Onion

    Wasabi Wallet + full node

    TIP

    Wasabi has a partial Bitcoin Knots integration. This means that it is possible (but not mandatory) to start Bitcoin Knots during the launch of Wasabi, without having to install or configure anything manually.

    Private UTXO retrieval

    If you have a listening full node running in the background (not only Bitcoin Core, any full node) then Wasabi automatically picks it up and instead of asking peers for blocks, it asks for blocks from your own node. Using Wasabi this way results in the same privacy model as Bitcoin Core's, regarding Private UTXO Retrieval.

    Private transaction broadcasting

    Even when Wasabi is connected to your own node, it will broadcast the transaction in the above-described way: to one new peer over Tor.

    Universal Attacks

    Every time you use software that interacts with a Bitcoin network, and especially a Bitcoin node, you leave a sticky fingerprint in your traffic. It comes in the form of a small but unavoidable spike in volume every time a new block is mined and the nodes start gossiping about it. The blocks in Bitcoin are quite big, and the propagation speed is critical for consensus (greater delay means more frequent accidental forks), so such effect is predictable, and, in a sense, inherent to the Bitcoin architecture.

    ',23),S={href:"https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki",target:"_blank",rel:"noopener noreferrer"},L={href:"https://m417z.com/bitsniff/",target:"_blank",rel:"noopener noreferrer"},E=s('

    Protection

    There are many ways to go about it, but staying completely undetected is far from trivial - traditional privacy-enhancing tools mostly focus on the packet level, which is orthogonal to the technique. Let’s break down the potential defense vectors.

    • VPN / Tor - unlikely to affect the time series shape much, and therefore for larger traffic lengths the statistical significance of block-related spikes will inevitably become overwhelming.

    • Traffic mixing - for traffic volumes that are orders of magnitude higher than Bitcoin P2P communications, mixing is likely to be very effective. That would, however, demand constant shielding of both upstream and downstream communications, and couldn't be done effectively by just running the node on a general-purpose machine - any noticeably long unshielded period may be enough for detection.

    • Being your own ISP - too spicy for most, but that should work.

    • Blockstream Satellite - the ultimate solution. Eliminates the traffic analysis threat altogether.

    Beyond active measures available now, both the privacy and the bandwidth efficiency of Bitcoin communications are actively worked on. It is entirely possible that the messaging protocol will get to the point where block propagation doesn't trigger any significant spikes in traffic volume.

    ',4),O={href:"https://79jke.github.io/BitSniff/",target:"_blank",rel:"noopener noreferrer"},q={href:"https://m417z.com/bitsniff/",target:"_blank",rel:"noopener noreferrer"},U={href:"https://youtu.be/9S8xsDq3PTU",target:"_blank",rel:"noopener noreferrer"},F=e("img",{src:c,alt:"Watch the video"},null,-1);function R(V,j){const o=r("router-link"),n=r("ExternalLinkIcon"),l=r("RouteLink");return h(),u("div",null,[f,b,e("nav",v,[e("ul",null,[e("li",null,[a(o,{to:"#problem"},{default:i(()=>[t("Problem")]),_:1}),e("ul",null,[e("li",null,[a(o,{to:"#clearnet-light-clients"},{default:i(()=>[t("Clearnet light clients")]),_:1})])])]),e("li",null,[a(o,{to:"#wasabi-s-solution"},{default:i(()=>[t("Wasabi's solution")]),_:1}),e("ul",null,[e("li",null,[a(o,{to:"#full-node-by-default-block-filters-over-tor"},{default:i(()=>[t("Full node by default & block filters over Tor")]),_:1})])])]),e("li",null,[a(o,{to:"#in-depth-comparison"},{default:i(()=>[t("In-depth comparison")]),_:1}),e("ul",null,[e("li",null,[a(o,{to:"#bitcoin-core"},{default:i(()=>[t("Bitcoin Core")]),_:1})]),e("li",null,[a(o,{to:"#bitcoin-core-tor"},{default:i(()=>[t("Bitcoin Core + Tor")]),_:1})]),e("li",null,[a(o,{to:"#wasabi-wallet-light-node"},{default:i(()=>[t("Wasabi Wallet light node")]),_:1})]),e("li",null,[a(o,{to:"#wasabi-wallet-full-node"},{default:i(()=>[t("Wasabi Wallet + full node")]),_:1})])])]),e("li",null,[a(o,{to:"#universal-attacks"},{default:i(()=>[t("Universal Attacks")]),_:1}),e("ul",null,[e("li",null,[a(o,{to:"#protection"},{default:i(()=>[t("Protection")]),_:1})])])])])]),m,g,y,k,e("p",null,[t("There are light wallets, which query a backend server to get information regarding specific addresses or use "),e("a",w,[t("BIP 37"),a(n)]),t(" bloom filtering SPV wallet protocol, which is "),e("a",_,[t("extremely bad for privacy"),a(n)]),t(". And there is Electrum, which "),e("a",T,[t("sends your addresses"),a(n)]),t(" to random Electrum servers.")]),B,e("p",null,[t("In order to fully verify everything, running a full node is essential. If "),e("a",P,[t("bitcoind"),a(n)]),t(" is installed and run on the same computer as Wasabi, then it will automatically and by default connect to the full node. It is also possible to connect Wasabi to a remote full node on another computer by specifying the local IP address or Tor onion service in the settings. Then, Wasabi pulls the verified blocks and queries the mempool from the full node.")]),e("div",W,[x,e("p",null,[t("Wasabi has a "),a(l,{to:"/using-wasabi/BitcoinFullNode.html"},{default:i(()=>[t("partial Bitcoin Knots integration")]),_:1}),t(". This means that it is possible (but not mandatory) to start Bitcoin Knots during the launch of Wasabi, without having to install or configure anything manually.")])]),e("p",null,[t("However, even if no full node is installed, Wasabi has a light client mode based on "),e("a",I,[t("BIP 158 block filters"),a(n)]),t(". The Wasabi server sends a filter of all the transactions in each block to all the users. Then, users check locally if the block contains any transactions with their addresses. If not, then the filter is stored for later reference, and no block is downloaded. However, if there is a user transaction in that block, then Wasabi connects to a random Bitcoin P2P node over Tor and asks for this entire block, not only one transaction. This block request is indistinguishable from the regular P2P gossip, and thus nobody, neither the server nor the full node, know which addresses belong to the user.")]),C,e("blockquote",null,[e("p",null,[t("Bitcoin transaction propagation does not hide the source of a transaction very well, especially against a “supernode” eavesdropper that forms a large number of outgoing connections to reachable nodes on the network. "),e("a",N,[t("Dandelion: Privacy-Preserving Transaction Propagation"),a(n)]),t(".")])]),A,e("p",null,[t("Notably, the volume of block-related messages was drastically reduced since the introduction of Compact Block Relay ("),e("a",S,[t("BIP 152"),a(n)]),t(". Instead of requesting whole blocks, mostly consisting of transactions already known to the node, the peer informed of a new block is only requesting the missing transactions. Yet the amount of extra communications in the seconds following a new block is still considerable. This effect may not be noticeable for a single block, but over time it gets statistically significant and may get exploited.")]),e("p",null,[t("As reported by "),e("a",L,[t("Niko Kudriastev and Michael Maltsev"),a(n)]),t(", it is possible to detect Bitcoin communications using nothing but traffic volume over time - a piece of information even most privacy concerned individuals are likely leaking to their law-abiding Internet Service Provider. In this case, using a VPN and running the node over Tor may not be enough to avoid being detected.")]),E,e("p",null,[t("You can read more about BitSniff "),e("a",O,[t("here"),a(n)]),t(" and check the interactive demo "),e("a",q,[t("here"),a(n)]),t(".")]),e("p",null,[e("a",U,[F,a(n)])])])}const X=d(p,[["render",R],["__file","NetworkLevelPrivacy.html.vue"]]),H=JSON.parse(`{"path":"/why-wasabi/NetworkLevelPrivacy.html","title":"Network-Level Privacy","lang":"en-US","frontmatter":{"title":"Network-Level Privacy","description":"A comparison of the network-level privacy of Wasabi wallet and Bitcoin Core. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Problem","slug":"problem","link":"#problem","children":[{"level":3,"title":"Clearnet light clients","slug":"clearnet-light-clients","link":"#clearnet-light-clients","children":[]}]},{"level":2,"title":"Wasabi's solution","slug":"wasabi-s-solution","link":"#wasabi-s-solution","children":[{"level":3,"title":"Full node by default & block filters over Tor","slug":"full-node-by-default-block-filters-over-tor","link":"#full-node-by-default-block-filters-over-tor","children":[]}]},{"level":2,"title":"In-depth comparison","slug":"in-depth-comparison","link":"#in-depth-comparison","children":[{"level":3,"title":"Bitcoin Core","slug":"bitcoin-core","link":"#bitcoin-core","children":[]},{"level":3,"title":"Bitcoin Core + Tor","slug":"bitcoin-core-tor","link":"#bitcoin-core-tor","children":[]},{"level":3,"title":"Wasabi Wallet light node","slug":"wasabi-wallet-light-node","link":"#wasabi-wallet-light-node","children":[]},{"level":3,"title":"Wasabi Wallet + full node","slug":"wasabi-wallet-full-node","link":"#wasabi-wallet-full-node","children":[]}]},{"level":2,"title":"Universal Attacks","slug":"universal-attacks","link":"#universal-attacks","children":[{"level":3,"title":"Protection","slug":"protection","link":"#protection","children":[]}]}],"git":{"updatedTime":1682266766000},"filePathRelative":"why-wasabi/NetworkLevelPrivacy.md"}`);export{X as comp,H as data}; diff --git a/assets/PasswordBestPractices.html-CbMk0pPl.js b/assets/PasswordBestPractices.html-CyKqkdt_.js similarity index 99% rename from assets/PasswordBestPractices.html-CbMk0pPl.js rename to assets/PasswordBestPractices.html-CyKqkdt_.js index 5a8ee7f689..9bf202384c 100644 --- a/assets/PasswordBestPractices.html-CbMk0pPl.js +++ b/assets/PasswordBestPractices.html-CyKqkdt_.js @@ -1,3 +1,3 @@ -import{_ as d,r as l,o as c,c as p,a as e,d as o,w as a,b as s,e as r}from"./app-BPKesm5h.js";const u={},h=e("h1",{id:"password-best-practices",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#password-best-practices"},[e("span",null,"Password best practices")])],-1),w={class:"table-of-contents"},m=r('

    Introduction

    You shouldn't try to re-invent the wheel for something as complicated and nuanced as cryptography, and especially in regards to entropy.

    These are some of the industry best practices:

    TIP

    Don't "roll your own" crypto.

    Password basics

    ',5),f=e("li",null,[e("p",null,'Randomness is the single-most important requirement for a strong password, because randomness means that the password has no predictable pattern to it. This makes it impossible to crack without doing an exhaustive, "brute-force" attack.')],-1),y=e("li",null,[e("p",null,[s("Assuming a password is constructed randomly, its length has the most impact on its strength. However, a password that is very long, but not randomly constructed, such as: "),e("code",null,"thequickbrownfoxjumpedoverthelazydogsback"),s(", or a passage from literature, is certain to be on every serious hacker's guess list.")])],-1),b=e("h2",{id:"what-not-to-do",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-not-to-do"},[e("span",null,"What not to do")])],-1),g=e("p",null,"Here are a few examples that do it completely wrong. You should not generate your password like this:",-1),v=e("code",null,"Emma1992",-1),_={href:"https://en.wikipedia.org/wiki/List_of_the_most_common_passwords#SplashData",target:"_blank",rel:"noopener noreferrer"},k=e("li",null,[e("p",null,"Do not use the same password that you have used in other places. Because if one password is leaked, then other ones are compromised.")],-1),x=e("li",null,[e("p",null,"Do try to use a mix of uppercase and lowercase letters, numbers, and special characters (&$%@ etc.) in your password.")],-1),P=e("p",null,'Do not take a famous quote, or well-known passage from literature and use it for a password. It will not fool any serious hacker, even if you throw in substitutions such as: "@" instead of "a", or "$" instead of "s".',-1),q={class:"custom-container danger"},D=e("p",{class:"custom-container-title"},"Make a secure password!!",-1),T=e("h2",{id:"use-diceware",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#use-diceware"},[e("span",null,"Use Diceware")])],-1),B=e("p",null,"Rolling dice is an easy and effective way to get high entropy and randomness in a password that can even be memorized.",-1),E=e("p",null,"The Diceware method is a great strategy for your most precious passwords (e.g. the password to your computer, your backups, or your encryption key). You can even use Diceware to create secure wallets.",-1),F={href:"https://www.eff.org/deeplinks/2016/07/new-wordlists-random-passphrases",target:"_blank",rel:"noopener noreferrer"},I=r("

    To start, roll the die five times. Record the number from each roll using the pen and paper. You will end up with a five-digit number. We got 52611. Now search on the Diceware list for the five digit number you just created. Write down the word the number corresponds to, in our case it is salvo. This word by itself is not a good password, it would only take about a thousandth of a second to crack. Repeat the dice rolling process at least five more times.

    After six sets of five rolls, we ended up with 52611 51631 63432 43123 21641 and 14146. This corresponds to the password salvo rhoda walton mudd croft bride.

    This six-word passphrase, even though easy to remember, is just one of 2.21 x 10^23, or 221 sextillion possible six-word combinations taken from the list of 7776 words. A computer capable of 1 trillion guesses/second would take, on average, over 3500 years to correctly guess this or any six-word combination of words from the list, if they are chosen randomly.

    ",3),S={href:"https://blog.securityevaluators.com/understanding-password-complexity-5e0d23643a2a",target:"_blank",rel:"noopener noreferrer"},L=r(`

    Use a dictionary

    All of the major languages have at least 100,000 words in their dictionaries. Most have over 300,000 words. You can take a dictionary in any language that you are comfortable with and create a very strong password by randomly selecting as few as 5 words from it.

    The quick, but not technically random way would be to flip open your chosen dictionary to any seemingly random page, close your eyes, and put your fingertip down on the page. Choose the word nearest your fingertip that has at least 4 letters. Repeat this process at least 4 more times.

    If you'd prefer a truly random way to select pages, and you are using either Windows or Linux, you can easily create random numbers in a selected range (such as the number of pages in your dictionary) from your terminal.

    Assuming your dictionary has, for example, 854 pages:

    Windows: Open a Powershell terminal and enter:

    [C:\\User>] get-random -maximum 854
    +import{_ as d,r as l,o as c,c as p,a as e,d as o,w as a,b as s,e as r}from"./app-BgbPjqpx.js";const u={},h=e("h1",{id:"password-best-practices",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#password-best-practices"},[e("span",null,"Password best practices")])],-1),w={class:"table-of-contents"},m=r('

    Introduction

    You shouldn't try to re-invent the wheel for something as complicated and nuanced as cryptography, and especially in regards to entropy.

    These are some of the industry best practices:

    TIP

    Don't "roll your own" crypto.

    Password basics

    ',5),f=e("li",null,[e("p",null,'Randomness is the single-most important requirement for a strong password, because randomness means that the password has no predictable pattern to it. This makes it impossible to crack without doing an exhaustive, "brute-force" attack.')],-1),y=e("li",null,[e("p",null,[s("Assuming a password is constructed randomly, its length has the most impact on its strength. However, a password that is very long, but not randomly constructed, such as: "),e("code",null,"thequickbrownfoxjumpedoverthelazydogsback"),s(", or a passage from literature, is certain to be on every serious hacker's guess list.")])],-1),b=e("h2",{id:"what-not-to-do",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-not-to-do"},[e("span",null,"What not to do")])],-1),g=e("p",null,"Here are a few examples that do it completely wrong. You should not generate your password like this:",-1),v=e("code",null,"Emma1992",-1),_={href:"https://en.wikipedia.org/wiki/List_of_the_most_common_passwords#SplashData",target:"_blank",rel:"noopener noreferrer"},k=e("li",null,[e("p",null,"Do not use the same password that you have used in other places. Because if one password is leaked, then other ones are compromised.")],-1),x=e("li",null,[e("p",null,"Do try to use a mix of uppercase and lowercase letters, numbers, and special characters (&$%@ etc.) in your password.")],-1),P=e("p",null,'Do not take a famous quote, or well-known passage from literature and use it for a password. It will not fool any serious hacker, even if you throw in substitutions such as: "@" instead of "a", or "$" instead of "s".',-1),q={class:"custom-container danger"},D=e("p",{class:"custom-container-title"},"Make a secure password!!",-1),T=e("h2",{id:"use-diceware",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#use-diceware"},[e("span",null,"Use Diceware")])],-1),B=e("p",null,"Rolling dice is an easy and effective way to get high entropy and randomness in a password that can even be memorized.",-1),E=e("p",null,"The Diceware method is a great strategy for your most precious passwords (e.g. the password to your computer, your backups, or your encryption key). You can even use Diceware to create secure wallets.",-1),F={href:"https://www.eff.org/deeplinks/2016/07/new-wordlists-random-passphrases",target:"_blank",rel:"noopener noreferrer"},I=r("

    To start, roll the die five times. Record the number from each roll using the pen and paper. You will end up with a five-digit number. We got 52611. Now search on the Diceware list for the five digit number you just created. Write down the word the number corresponds to, in our case it is salvo. This word by itself is not a good password, it would only take about a thousandth of a second to crack. Repeat the dice rolling process at least five more times.

    After six sets of five rolls, we ended up with 52611 51631 63432 43123 21641 and 14146. This corresponds to the password salvo rhoda walton mudd croft bride.

    This six-word passphrase, even though easy to remember, is just one of 2.21 x 10^23, or 221 sextillion possible six-word combinations taken from the list of 7776 words. A computer capable of 1 trillion guesses/second would take, on average, over 3500 years to correctly guess this or any six-word combination of words from the list, if they are chosen randomly.

    ",3),S={href:"https://blog.securityevaluators.com/understanding-password-complexity-5e0d23643a2a",target:"_blank",rel:"noopener noreferrer"},L=r(`

    Use a dictionary

    All of the major languages have at least 100,000 words in their dictionaries. Most have over 300,000 words. You can take a dictionary in any language that you are comfortable with and create a very strong password by randomly selecting as few as 5 words from it.

    The quick, but not technically random way would be to flip open your chosen dictionary to any seemingly random page, close your eyes, and put your fingertip down on the page. Choose the word nearest your fingertip that has at least 4 letters. Repeat this process at least 4 more times.

    If you'd prefer a truly random way to select pages, and you are using either Windows or Linux, you can easily create random numbers in a selected range (such as the number of pages in your dictionary) from your terminal.

    Assuming your dictionary has, for example, 854 pages:

    Windows: Open a Powershell terminal and enter:

    [C:\\User>] get-random -maximum 854
     

    Linux: Open a terminal and enter:

    [user@you:~$] echo $(( $RANDOM % 854 ))
     

    Each time you repeat this command, your operating system will return a random number somewhere in the range of available pages of your dictionary.

    Use this function to pick pages in a truly random manner, and select the needed words in the same way as before.

    Both this and the Diceware method are good ways to create a password with sufficient randomness that was generated completely off-line.

    Use an open-source password manager

    There are several well-known, cross-platform, and open-source password managers available. The main requirement besides being open-source, is a cryptographically secure random number generator, with the ability to generate significant entropy while using letters, numbers, and special characters.

    It is recommended that you use all available characters when generating a password, and the length of the password should be at least 12 characters for minimally sufficient entropy.

    It is up to the user to choose between a password manager that stores its data in the cloud, making it easy to stay in sync across various devices, or one that only stores its data locally.

    As it so often happens, more convenience means less security in this decision.

    Password entropy

    "Entropy" is a term commonly used to define password strength. It is typically used to describe the combined effect of randomness, length, and number of characters (lowercase/uppercase letters, numbers, and special characters) or words in a password or passphrase.

    Calculating entropy allows the strength of different randomly constructed passwords or phrases to be compared. It also defines the size of the search-space an attacker would need to cover to find the password by trying all possibilities.

    How to calculate entropy

    Assuming a password or passphrase is constructed randomly, its level of entropy can be calculated in this way:

    • For a password, the total number of possible outcomes given a specific length (L), and number of characters used (C), is: C raised to the power of L, or C^L.
      Example: jwodnrosqf is lowercase only (C = 26) and 10 characters long (L = 10). So, 26^10 = 141,000,000,000,000 (141 trillion).

      Including uppercase letters in the same password: jWoDNrosqF to double (C), results in 52^10 possible passwords = 145,000,000,000,000,000 (145 quadrillion).

      Including special characters in the same password: jW0DNro$qF raises (C) to 95, resulting in 95^10 possibilities = 59,900,000,000,000,000,000 (59.9 quintillion).

    • For a passphrase chosen randomly from a list of words, the total number of possible outcomes given a specific number of words (N) and wordlist size (S) is: S raised to the power of N, or S^N.
      Example: The EFF Diceware list contains 7776 words. Randomly selecting 5 words from the list results in 7776^5 possible passphrases = 28,400,000,000,000,000,000 (28.4 quintillion).

    Just knowing how to do these basic calculations allows you to compare the strength of different randomly-generated passwords or phrases.

    "Bits" of entropy

    `,25),N=e("code",null,"bits of entropy",-1),U={href:"https://miniwebtool.com/log-base-2-calculator/",target:"_blank",rel:"noopener noreferrer"},A=r('

    For example, there are 7776 words on the EFF wordlist commonly used with dice to create passphrases. Plugging 7776 into the calculator to get log2(7776), it is shown that each word taken randomly from the list contributes 12.92 bits of entropy to the strength of the passphrase. So, a 5-word passphrase selected randomly from the EFF list will have 5 x 12.92 = 64 bits of entropy.

    Since the combination of: lowercase + uppercase letters, numbers, and special characters = 95, a password constructed using all of these will have log2(95), or 6.57 bits of entropy for each character that comprises the password.

    From that, we can now calculate that, in order to get the same level of entropy with a password instead of a 5-word passphrase, the password must be at least 10 characters in length.

    How much entropy is needed

    Entropy matters because it allows one to compare the required search-space of a potential password with the search-speed known to be available to various potential adversaries. In doing so, it is possible to then know how long it would take an adversary with known resources to attempt every mathematically possible password or passphrase for a given level of entropy.

    Edward Snowden revealed in 2013 that the NSA had the ability to guess passwords at a rate of 1 trillion guesses/second. At that speed of guessing, the password in the above example (28.4 quintillion possibilities) could be guessed in at most, 11 months.

    Since there is an equal chance of finding the password in the first half of the total number of guesses as there is in finding it in the second half of the total number, it is accurate to assume that on average, a password will be found in 1/2 of the time required to do an exhaustive search. That means just over 5 months for the example just mentioned.

    Keep in mind that Snowden's information in quite old, in a processing-power context. We have no way of knowing what is currently possible, so if a State-Level attacker is a part of your assumed threat-model, it would be wise to assume that their tools are now much more powerful.

    Even if a given threat-model does not include State-Level attackers, it is still important to consider that there are GPU-based password hacking tools publicly available that are capable of guessing well into the billions of guesses/second.

    ',9);function j(C,W){const t=l("router-link"),i=l("RouteLink"),n=l("ExternalLinkIcon");return c(),p("div",null,[h,e("nav",w,[e("ul",null,[e("li",null,[o(t,{to:"#introduction"},{default:a(()=>[s("Introduction")]),_:1})]),e("li",null,[o(t,{to:"#password-basics"},{default:a(()=>[s("Password basics")]),_:1})]),e("li",null,[o(t,{to:"#what-not-to-do"},{default:a(()=>[s("What not to do")]),_:1})]),e("li",null,[o(t,{to:"#use-diceware"},{default:a(()=>[s("Use Diceware")]),_:1})]),e("li",null,[o(t,{to:"#use-a-dictionary"},{default:a(()=>[s("Use a dictionary")]),_:1})]),e("li",null,[o(t,{to:"#use-an-open-source-password-manager"},{default:a(()=>[s("Use an open-source password manager")]),_:1})]),e("li",null,[o(t,{to:"#password-entropy"},{default:a(()=>[s("Password entropy")]),_:1}),e("ul",null,[e("li",null,[o(t,{to:"#how-to-calculate-entropy"},{default:a(()=>[s("How to calculate entropy")]),_:1})]),e("li",null,[o(t,{to:"#bits-of-entropy"},{default:a(()=>[s('"Bits" of entropy')]),_:1})]),e("li",null,[o(t,{to:"#how-much-entropy-is-needed"},{default:a(()=>[s("How much entropy is needed")]),_:1})])])])])]),m,e("ol",null,[f,y,e("li",null,[e("p",null,[s('"Entropy" is a term commonly used to define the strength of a random password. There is a tutorial about how to calculate and evaluate entropy in your password '),o(i,{to:"/using-wasabi/PasswordBestPractices.html#how-to-calculate-entropy"},{default:a(()=>[s("here")]),_:1}),s(".")])])]),b,g,e("ol",null,[e("li",null,[e("p",null,[s("Do not use publicly known information like your grandma's maiden name and the birthday of your dog. "),v,s(" is a really, really, really bad password, because it can easily be guessed and it is very short. Here is a list of the worst and "),e("a",_,[s("most commonly used passwords"),o(n)]),s(" in recent years. Password hackers start with lists like this.")])]),k,x,e("li",null,[P,e("div",q,[D,e("p",null,[s("It is of utmost importance to generate a secure password following "),o(i,{to:"/using-wasabi/PasswordBestPractices.html"},{default:a(()=>[s("best practices")]),_:1}),s(".")])])])]),T,B,E,e("p",null,[s("To generate a password using Diceware, you just need a high-quality die, a pen, and some paper. You can find EFF's Diceware list at the "),e("a",F,[s("Electronic Frontier Foundation website"),o(n)]),s(". Make sure you are alone and there are no cameras nearby. For maximum protection, disconnect your computer from the internet (after you save the Diceware list) and cover your webcam.")]),I,e("p",null,[s("A 6-word passphrase derived as just discussed has 77 "),o(i,{to:"/using-wasabi/PasswordBestPractices.html#how-to-calculate-entropy"},{default:a(()=>[s("bits of entropy")]),_:1}),s(". Best practices for being secure against any adversary "),e("a",S,[s("currently recommend"),o(n)]),s(" a minimum of near 80 bits of entropy, so this example phrase barely qualifies.")]),L,e("p",null,[s("Password entropy is often discussed and compared in a context of "),N,s(". This is, of course, because computers can only process 0's and 1's, or bits, so everything related is expressed that way. To calculate bits of entropy, use a "),e("a",U,[s("calculator that does logarithms"),o(n)]),s(" and compute log2(x), where x = the total number of possible outcomes for an event.")]),A])}const H=d(u,[["render",j],["__file","PasswordBestPractices.html.vue"]]),Y=JSON.parse('{"path":"/using-wasabi/PasswordBestPractices.html","title":"Password Best Practices","lang":"en-US","frontmatter":{"title":"Password Best Practices","description":"A detailed guide about how to create and evaluate a strong password. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Introduction","slug":"introduction","link":"#introduction","children":[]},{"level":2,"title":"Password basics","slug":"password-basics","link":"#password-basics","children":[]},{"level":2,"title":"What not to do","slug":"what-not-to-do","link":"#what-not-to-do","children":[]},{"level":2,"title":"Use Diceware","slug":"use-diceware","link":"#use-diceware","children":[]},{"level":2,"title":"Use a dictionary","slug":"use-a-dictionary","link":"#use-a-dictionary","children":[]},{"level":2,"title":"Use an open-source password manager","slug":"use-an-open-source-password-manager","link":"#use-an-open-source-password-manager","children":[]},{"level":2,"title":"Password entropy","slug":"password-entropy","link":"#password-entropy","children":[{"level":3,"title":"How to calculate entropy","slug":"how-to-calculate-entropy","link":"#how-to-calculate-entropy","children":[]},{"level":3,"title":"\\"Bits\\" of entropy","slug":"bits-of-entropy","link":"#bits-of-entropy","children":[]},{"level":3,"title":"How much entropy is needed","slug":"how-much-entropy-is-needed","link":"#how-much-entropy-is-needed","children":[]}]}],"git":{"updatedTime":1668949506000},"filePathRelative":"using-wasabi/PasswordBestPractices.md"}');export{H as comp,Y as data}; diff --git a/assets/PasswordFinder.html-BCm3pBw9.js b/assets/PasswordFinder.html-DAqeoYmb.js similarity index 97% rename from assets/PasswordFinder.html-BCm3pBw9.js rename to assets/PasswordFinder.html-DAqeoYmb.js index 29c8ec431c..6880cf4e36 100644 --- a/assets/PasswordFinder.html-BCm3pBw9.js +++ b/assets/PasswordFinder.html-DAqeoYmb.js @@ -1 +1 @@ -import{_ as r,r as o,o as l,c as d,a as e,d as s,w as i,b as t,e as c}from"./app-BPKesm5h.js";const p="/ForgotPassword.png",h={},u=e("h1",{id:"password-finder",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#password-finder"},[e("span",null,"Password Finder")])],-1),w=e("p",null,"Wasabi Password Finder is a tool for helping those who made a mistake typing the password during the wallet creation process. This tool tries to find the password that decrypts the encrypted secret key stored in a given wallet file.",-1),m={class:"table-of-contents"},g=e("h2",{id:"limitations",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#limitations"},[e("span",null,"Limitations")])],-1),f={href:"https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki",target:"_blank",rel:"noopener noreferrer"},_=c('

    WARNING

    It is important to know that the Wasabi Password Finder is not for breaking wallet passwords but for finding errors (typos) in an already known password, and that it's success rate is limited.

    Usage

    After an incorrect password is entered when opening a wallet, Forgot Password will show up.

    Wasabi Wallet Forgot Password

    First you will be asked questions, like your most likely password, which language, which characters it contains etc. After that it will search if your password can be found.

    ',5);function b(k,y){const a=o("router-link"),n=o("ExternalLinkIcon");return l(),d("div",null,[u,w,e("nav",m,[e("ul",null,[e("li",null,[s(a,{to:"#limitations"},{default:i(()=>[t("Limitations")]),_:1})]),e("li",null,[s(a,{to:"#usage"},{default:i(()=>[t("Usage")]),_:1})])])]),g,e("p",null,[t("Wasabi Wallet protects the encrypted secret key with the same technology used to protect paper wallets ("),e("a",f,[t("BIP 38"),s(n)]),t(") and for that reason, it is computationally infeasible to brute force the password using all the possible combinations (assuming a secure password was chosen).")]),_])}const F=r(h,[["render",b],["__file","PasswordFinder.html.vue"]]),v=JSON.parse('{"path":"/using-wasabi/PasswordFinder.html","title":"Password Finder","lang":"en-US","frontmatter":{"title":"Password Finder","description":"A step by step guide on how to use the Wasabi password finder to fix typos in forgotten passwords. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Limitations","slug":"limitations","link":"#limitations","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1668949506000},"filePathRelative":"using-wasabi/PasswordFinder.md"}');export{F as comp,v as data}; +import{_ as r,r as o,o as l,c as d,a as e,d as s,w as i,b as t,e as c}from"./app-BgbPjqpx.js";const p="/ForgotPassword.png",h={},u=e("h1",{id:"password-finder",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#password-finder"},[e("span",null,"Password Finder")])],-1),w=e("p",null,"Wasabi Password Finder is a tool for helping those who made a mistake typing the password during the wallet creation process. This tool tries to find the password that decrypts the encrypted secret key stored in a given wallet file.",-1),m={class:"table-of-contents"},g=e("h2",{id:"limitations",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#limitations"},[e("span",null,"Limitations")])],-1),f={href:"https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki",target:"_blank",rel:"noopener noreferrer"},_=c('

    WARNING

    It is important to know that the Wasabi Password Finder is not for breaking wallet passwords but for finding errors (typos) in an already known password, and that it's success rate is limited.

    Usage

    After an incorrect password is entered when opening a wallet, Forgot Password will show up.

    Wasabi Wallet Forgot Password

    First you will be asked questions, like your most likely password, which language, which characters it contains etc. After that it will search if your password can be found.

    ',5);function b(k,y){const a=o("router-link"),n=o("ExternalLinkIcon");return l(),d("div",null,[u,w,e("nav",m,[e("ul",null,[e("li",null,[s(a,{to:"#limitations"},{default:i(()=>[t("Limitations")]),_:1})]),e("li",null,[s(a,{to:"#usage"},{default:i(()=>[t("Usage")]),_:1})])])]),g,e("p",null,[t("Wasabi Wallet protects the encrypted secret key with the same technology used to protect paper wallets ("),e("a",f,[t("BIP 38"),s(n)]),t(") and for that reason, it is computationally infeasible to brute force the password using all the possible combinations (assuming a secure password was chosen).")]),_])}const F=r(h,[["render",b],["__file","PasswordFinder.html.vue"]]),v=JSON.parse('{"path":"/using-wasabi/PasswordFinder.html","title":"Password Finder","lang":"en-US","frontmatter":{"title":"Password Finder","description":"A step by step guide on how to use the Wasabi password finder to fix typos in forgotten passwords. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Limitations","slug":"limitations","link":"#limitations","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1668949506000},"filePathRelative":"using-wasabi/PasswordFinder.md"}');export{F as comp,v as data}; diff --git a/assets/PayJoin.html-BHEwv_IX.js b/assets/PayJoin.html-CfbDrzMn.js similarity index 99% rename from assets/PayJoin.html-BHEwv_IX.js rename to assets/PayJoin.html-CfbDrzMn.js index 78c7ae9b29..dbadef6f3f 100644 --- a/assets/PayJoin.html-BHEwv_IX.js +++ b/assets/PayJoin.html-CfbDrzMn.js @@ -1,4 +1,4 @@ -import{_ as c,r as o,o as r,c as l,a as e,d as n,w as i,b as t,e as d}from"./app-BPKesm5h.js";const h="/PayJoinSend.png",p="/PayJoinPreviewTransaction.png",u={},f=e("h1",{id:"payjoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#payjoin"},[e("span",null,"PayJoin")])],-1),b={class:"table-of-contents"},y=e("h2",{id:"sending-payjoin-step-by-step",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#sending-payjoin-step-by-step"},[e("span",null,"Sending PayJoin step-by-step")])],-1),v=e("li",null,[e("p",null,[t("Load a wallet and open the "),e("code",null,"Send"),t(" dialog.")])],-1),g={href:"https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki",target:"_blank",rel:"noopener noreferrer"},m=e("code",null,"pj=",-1),_=e("code",null,"To",-1),P=e("code",null,"Send",-1),k=e("code",null,"bitcoin:tb1q0382a3m2jzvyk5lkea5h5jcht88xa6l0jufgwx?amount=0.00010727&pj=https://payjoin.test.kukks.org/BTC/pj",-1),w=d('

    Send Bitcoin PayJoin transaction in Wasabi Wallet

    1. Click Continue.

    2. Enter the label.

    3. At Preview Transaction, verify that the information is correct.

    PayJoinPreviewTransaction

    1. Click Confirm, and type in the password.

    The success of a PayJoin transaction is not something that depends on Wasabi.

    It may happen that the transaction is broadcast with success, but that it is not a PayJoin. This can happen for several reasons including:

    • The receiver did not have any utxos to contribute towards a PayJoin.
    • Your wallet does not use the same address format as the receiver's.
    • The PayJoin server is not available.

    The goal of PayJoin

    PayJoin is a collaborative transaction between the sender and the receiver of a payment, for example the merchant and the customer. The goal of the protocol is to break the common input ownership heuristic, while making it difficult to fingerprint that the transaction is in fact a CoinJoin. Further, it reduces the transaction fees paid by the merchant due to consolidation of coins.

    Coordination

    The coordination of this coinjoin is done with the PayToEndPoint [P2EP] concept. The receiver is reachable over the internet, either over a Tor onion service or clearnet IP address. The link is included in a BIP21 Bitcoin URI, and is provided to the sender as the payment invoice. The sender uses this onion service or IP address to connect to the server of the receiver and communicate the further protocol. The coordination is usually done within seconds, and will abort to the fallback transaction after some time if the connection breaks.

    Fallback transaction

    In the very first request to the receiving server, the sender provides a finalized signed transaction which has only the inputs of the sender, like any other Bitcoin transaction. The inputs are only from the sender. The outputs are the address of the receiver, as well as the change address of the sender. For example here, Alice pays Bob 0.2 bitcoin.

    Alice input   1 bitcoin   -->   Bob output            0.2 bitcoin
    +import{_ as c,r as o,o as r,c as l,a as e,d as n,w as i,b as t,e as d}from"./app-BgbPjqpx.js";const h="/PayJoinSend.png",p="/PayJoinPreviewTransaction.png",u={},f=e("h1",{id:"payjoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#payjoin"},[e("span",null,"PayJoin")])],-1),b={class:"table-of-contents"},y=e("h2",{id:"sending-payjoin-step-by-step",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#sending-payjoin-step-by-step"},[e("span",null,"Sending PayJoin step-by-step")])],-1),v=e("li",null,[e("p",null,[t("Load a wallet and open the "),e("code",null,"Send"),t(" dialog.")])],-1),g={href:"https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki",target:"_blank",rel:"noopener noreferrer"},m=e("code",null,"pj=",-1),_=e("code",null,"To",-1),P=e("code",null,"Send",-1),k=e("code",null,"bitcoin:tb1q0382a3m2jzvyk5lkea5h5jcht88xa6l0jufgwx?amount=0.00010727&pj=https://payjoin.test.kukks.org/BTC/pj",-1),w=d('

    Send Bitcoin PayJoin transaction in Wasabi Wallet

    1. Click Continue.

    2. Enter the label.

    3. At Preview Transaction, verify that the information is correct.

    PayJoinPreviewTransaction

    1. Click Confirm, and type in the password.

    The success of a PayJoin transaction is not something that depends on Wasabi.

    It may happen that the transaction is broadcast with success, but that it is not a PayJoin. This can happen for several reasons including:

    • The receiver did not have any utxos to contribute towards a PayJoin.
    • Your wallet does not use the same address format as the receiver's.
    • The PayJoin server is not available.

    The goal of PayJoin

    PayJoin is a collaborative transaction between the sender and the receiver of a payment, for example the merchant and the customer. The goal of the protocol is to break the common input ownership heuristic, while making it difficult to fingerprint that the transaction is in fact a CoinJoin. Further, it reduces the transaction fees paid by the merchant due to consolidation of coins.

    Coordination

    The coordination of this coinjoin is done with the PayToEndPoint [P2EP] concept. The receiver is reachable over the internet, either over a Tor onion service or clearnet IP address. The link is included in a BIP21 Bitcoin URI, and is provided to the sender as the payment invoice. The sender uses this onion service or IP address to connect to the server of the receiver and communicate the further protocol. The coordination is usually done within seconds, and will abort to the fallback transaction after some time if the connection breaks.

    Fallback transaction

    In the very first request to the receiving server, the sender provides a finalized signed transaction which has only the inputs of the sender, like any other Bitcoin transaction. The inputs are only from the sender. The outputs are the address of the receiver, as well as the change address of the sender. For example here, Alice pays Bob 0.2 bitcoin.

    Alice input   1 bitcoin   -->   Bob output            0.2 bitcoin
                                     Alice change output   0.8 bitcoin
     

    Both the sender and the receiver could broadcast this transaction.

    PayJoin transaction

    The receiving server responds to this initial proposal, with a transaction that adds more inputs to the transaction. Thus, the output belonging to the receiver increases in value, above the value that the payment amount is due.

    Alice input   1 bitcoin   -->   Bob output            0.7 bitcoin
     Bob input     0.5 bitcoin -->   Alice change output   0.8 bitcoin
    diff --git a/assets/RPC.html-CEyIqdII.js b/assets/RPC.html-CFVSyrb9.js
    similarity index 99%
    rename from assets/RPC.html-CEyIqdII.js
    rename to assets/RPC.html-CFVSyrb9.js
    index e753f0aa50..ecbf27e2a8 100644
    --- a/assets/RPC.html-CEyIqdII.js
    +++ b/assets/RPC.html-CFVSyrb9.js
    @@ -1,4 +1,4 @@
    -import{_ as c,r as i,o as u,c as r,a as s,d as a,w as t,b as n,e as p}from"./app-BPKesm5h.js";const d={},q=s("h1",{id:"wasabi-remote-procedure-call-interface",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#wasabi-remote-procedure-call-interface"},[s("span",null,"Wasabi Remote Procedure Call Interface")])],-1),k=s("p",null,"Wasabi Wallet provides an RPC interface to interact with the wallet programmatically. The RPC server is listening by default on port 37128.",-1),v={class:"table-of-contents"},b=s("h2",{id:"limitations",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#limitations"},[s("span",null,"Limitations")])],-1),m={href:"https://github.com/dotnet/corefx/issues/14691",target:"_blank",rel:"noopener noreferrer"},h=s("code",null,"wcli",-1),g={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/Contrib/CLI",target:"_blank",rel:"noopener noreferrer"},f=p(`

    Configure RPC

    The RPC server has to be configured and enabled. This is done in the Config.json file and the relevant settings are:

    JsonRpcServerEnabled: [true | false] (default: false)
    +import{_ as c,r as i,o as u,c as r,a as s,d as a,w as t,b as n,e as p}from"./app-BgbPjqpx.js";const d={},q=s("h1",{id:"wasabi-remote-procedure-call-interface",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#wasabi-remote-procedure-call-interface"},[s("span",null,"Wasabi Remote Procedure Call Interface")])],-1),k=s("p",null,"Wasabi Wallet provides an RPC interface to interact with the wallet programmatically. The RPC server is listening by default on port 37128.",-1),v={class:"table-of-contents"},b=s("h2",{id:"limitations",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#limitations"},[s("span",null,"Limitations")])],-1),m={href:"https://github.com/dotnet/corefx/issues/14691",target:"_blank",rel:"noopener noreferrer"},h=s("code",null,"wcli",-1),g={href:"https://github.com/zkSNACKs/WalletWasabi/tree/master/Contrib/CLI",target:"_blank",rel:"noopener noreferrer"},f=p(`

    Configure RPC

    The RPC server has to be configured and enabled. This is done in the Config.json file and the relevant settings are:

    JsonRpcServerEnabled: [true | false] (default: false)
     JsonRpcServerPrefixes: [an array of string with prefixes]
     	(default: [	"http://127.0.0.1:37128/", "http://localhost:37128/"])
     

    The RPC server can be configured to allow Anonymous access or Basic authentication just by editing:

    JsonRpcUser: [username] (default: empty)
    diff --git a/assets/Receive.html-B2MaHiN7.js b/assets/Receive.html-BpUPEVUm.js
    similarity index 99%
    rename from assets/Receive.html-B2MaHiN7.js
    rename to assets/Receive.html-BpUPEVUm.js
    index c2f18605c1..de328b985a 100644
    --- a/assets/Receive.html-B2MaHiN7.js
    +++ b/assets/Receive.html-BpUPEVUm.js
    @@ -1,4 +1,4 @@
    -import{_ as d}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as c,a as h}from"./AddressAwaitingPayment-B9ABKMdf.js";import{_ as u,r,o as p,c as b,a as e,d as a,w as i,b as t,e as l}from"./app-BPKesm5h.js";const y={},m=e("h1",{id:"receive-bitcoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#receive-bitcoin"},[e("span",null,"Receive bitcoin")])],-1),w={class:"table-of-contents"},g={href:"https://youtu.be/Wjc00GBn-OQ",title:"Receive bitcoin in Wasabi Wallet",target:"_blank",rel:"noopener noreferrer"},f=e("img",{src:d,alt:"Receive bitcoin in Wasabi Wallet"},null,-1),v=l('

    Generating addresses step-by-step

    1. Start Wasabi and open the wallet that you want to receive coins into.
    2. Click the Receive button in the main view's top right corner.
    3. Type in the name of the entities who know that this address is yours. If you have already used a label before, simply choose it from the suggested labels.

    Receive label in Wasabi

    1. Press Continue and the wallet will generate a new address.

    Bitcoin address in Wasabi

    Bitcoin public keys and addresses

    ',6),k={href:"https://en.wikipedia.org/wiki/Public-key_cryptography",target:"_blank",rel:"noopener noreferrer"},_={href:"https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm",target:"_blank",rel:"noopener noreferrer"},x={href:"https://en.wikipedia.org/wiki/Cryptographic_hash_function",target:"_blank",rel:"noopener noreferrer"},T=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,'Wasabi Wallet does not "store your money", rather it stores your public keys and an encrypted secret that requires your password to derive the private keys. It creates addresses for receiving bitcoin, and it signs transactions that spend your bitcoin.')],-1),C=e("h2",{id:"the-problem-with-address-reuse",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#the-problem-with-address-reuse"},[e("span",null,"The problem with address reuse")])],-1),W=l('

    TIP

    This is why Wasabi removes the address from the Addresses Awaiting Payment list as soon as it has received a coin.

    The importance of labeling

    Satoshis are the base unit currency of the Bitcoin network and are truly fungible, meaning that any 100 000 000 satoshis are always equal to 1 bitcoin. Just like with gold atoms, it doesn't matter which specific gold atoms you have, as long as it's gold, it's gold. However, an unspent transaction output, a bitcoin, is a chunk of money and is not fungible, because it has a different amount of satoshis in it, a different public key locking it up, a unique transaction history, and a unique index number. This is just like a gold coin, with a unique amount of gold atoms, and either a pretty mintage or an old chipped broken coin. Because UTXOs are not fungible, it is very important to know exactly which coin is which, and that is done by carefully labeling.

    For example, if I create a new address to receive a 0.5 BTC payment from Andrew for a laptop that I sold to him then the label has to be: Andrew.

    The label is not for describing the reason for payment, but rather to list those who know that this address is yours. Understanding this difference between labeling an address and describing a transaction is very important for your privacy.

    TIP

    In Wasabi it is mandatory to give every receive address a label of those who know that this address is yours, so that later you know what to do with it, and it also helps the auto coin selection algorithm when sending.

    Clusters

    Following the previous example, if I have to send a fraction (0.1 BTC) of the previously received coin to Charlie then in the Send tab the observers should be: Charlie. In that way, the change (0.4 BTC) will be known by Andrew and Charlie because they both will be able to follow the change. That's exactly what Wasabi displays in the coins list (cluster column), Wasabi tells us who are the ones that know about each of our coins in order to allow us to decide what to do with the coins.

    Let's take a look at another example: Imagine you have three coins, one known by Alice, one known by a KYC exchange and finally one known by Charlie. Imagine you need to sell a few sats to Charlie, which coin/s should you send? The obvious selection is the one already known by Charlie because by doing that he cannot learn anything new about our wallet, moreover, neither Alice nor the KYC exchange can learn anything new! But what if the coin is not big enough and we need to use more than one coin? You can use the one known by Alice or the one known by the KYC exchange, but are you okay with Charlie knowing about your deposit/withdrawal from the exchange? Are you okay with Alice knowing about your deal with Charlie? In case none of those combinations are acceptable for you then you should CoinJoin your coins.

    Coinjoined coins

    ',10),B=l(`

    Final words about labels and examples

    4 coins with good labels:

    Andrew
    +import{_ as d}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as c,a as h}from"./AddressAwaitingPayment-B9ABKMdf.js";import{_ as u,r,o as p,c as b,a as e,d as a,w as i,b as t,e as l}from"./app-BgbPjqpx.js";const y={},m=e("h1",{id:"receive-bitcoin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#receive-bitcoin"},[e("span",null,"Receive bitcoin")])],-1),w={class:"table-of-contents"},g={href:"https://youtu.be/Wjc00GBn-OQ",title:"Receive bitcoin in Wasabi Wallet",target:"_blank",rel:"noopener noreferrer"},f=e("img",{src:d,alt:"Receive bitcoin in Wasabi Wallet"},null,-1),v=l('

    Generating addresses step-by-step

    1. Start Wasabi and open the wallet that you want to receive coins into.
    2. Click the Receive button in the main view's top right corner.
    3. Type in the name of the entities who know that this address is yours. If you have already used a label before, simply choose it from the suggested labels.

    Receive label in Wasabi

    1. Press Continue and the wallet will generate a new address.

    Bitcoin address in Wasabi

    Bitcoin public keys and addresses

    ',6),k={href:"https://en.wikipedia.org/wiki/Public-key_cryptography",target:"_blank",rel:"noopener noreferrer"},_={href:"https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm",target:"_blank",rel:"noopener noreferrer"},x={href:"https://en.wikipedia.org/wiki/Cryptographic_hash_function",target:"_blank",rel:"noopener noreferrer"},T=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,'Wasabi Wallet does not "store your money", rather it stores your public keys and an encrypted secret that requires your password to derive the private keys. It creates addresses for receiving bitcoin, and it signs transactions that spend your bitcoin.')],-1),C=e("h2",{id:"the-problem-with-address-reuse",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#the-problem-with-address-reuse"},[e("span",null,"The problem with address reuse")])],-1),W=l('

    TIP

    This is why Wasabi removes the address from the Addresses Awaiting Payment list as soon as it has received a coin.

    The importance of labeling

    Satoshis are the base unit currency of the Bitcoin network and are truly fungible, meaning that any 100 000 000 satoshis are always equal to 1 bitcoin. Just like with gold atoms, it doesn't matter which specific gold atoms you have, as long as it's gold, it's gold. However, an unspent transaction output, a bitcoin, is a chunk of money and is not fungible, because it has a different amount of satoshis in it, a different public key locking it up, a unique transaction history, and a unique index number. This is just like a gold coin, with a unique amount of gold atoms, and either a pretty mintage or an old chipped broken coin. Because UTXOs are not fungible, it is very important to know exactly which coin is which, and that is done by carefully labeling.

    For example, if I create a new address to receive a 0.5 BTC payment from Andrew for a laptop that I sold to him then the label has to be: Andrew.

    The label is not for describing the reason for payment, but rather to list those who know that this address is yours. Understanding this difference between labeling an address and describing a transaction is very important for your privacy.

    TIP

    In Wasabi it is mandatory to give every receive address a label of those who know that this address is yours, so that later you know what to do with it, and it also helps the auto coin selection algorithm when sending.

    Clusters

    Following the previous example, if I have to send a fraction (0.1 BTC) of the previously received coin to Charlie then in the Send tab the observers should be: Charlie. In that way, the change (0.4 BTC) will be known by Andrew and Charlie because they both will be able to follow the change. That's exactly what Wasabi displays in the coins list (cluster column), Wasabi tells us who are the ones that know about each of our coins in order to allow us to decide what to do with the coins.

    Let's take a look at another example: Imagine you have three coins, one known by Alice, one known by a KYC exchange and finally one known by Charlie. Imagine you need to sell a few sats to Charlie, which coin/s should you send? The obvious selection is the one already known by Charlie because by doing that he cannot learn anything new about our wallet, moreover, neither Alice nor the KYC exchange can learn anything new! But what if the coin is not big enough and we need to use more than one coin? You can use the one known by Alice or the one known by the KYC exchange, but are you okay with Charlie knowing about your deposit/withdrawal from the exchange? Are you okay with Alice knowing about your deal with Charlie? In case none of those combinations are acceptable for you then you should CoinJoin your coins.

    Coinjoined coins

    ',10),B=l(`

    Final words about labels and examples

    4 coins with good labels:

    Andrew
     David, Me
     Carlos, Sofia
     KYC exchange
    diff --git a/assets/RestoreElectrum.html-CcaenDmO.js b/assets/RestoreElectrum.html-CmSE67oc.js
    similarity index 98%
    rename from assets/RestoreElectrum.html-CcaenDmO.js
    rename to assets/RestoreElectrum.html-CmSE67oc.js
    index 7ebdc22e3a..7fdd9e04c1 100644
    --- a/assets/RestoreElectrum.html-CcaenDmO.js
    +++ b/assets/RestoreElectrum.html-CmSE67oc.js
    @@ -1,4 +1,4 @@
    -import{_ as i,r,o as n,c as s,a as e,b as t,d as o,w as c,e as d}from"./app-BPKesm5h.js";const u={},m=e("h1",{id:"restoring-wasabi-wallet-in-electrum",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#restoring-wasabi-wallet-in-electrum"},[e("span",null,"Restoring Wasabi Wallet in Electrum")])],-1),h={class:"custom-container danger"},p=e("p",{class:"custom-container-title"},"Potential privacy leak!",-1),g=e("p",null,"If you do not run your own Electrum server, you will leak all your addresses to random third-party servers, losing anonymity against those entities, so you must make a judgement call by being aware of this.",-1),w={href:"https://github.com/chris-belcher/electrum-personal-server",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/kyuupichan/electrumx",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/romanz/electrs",target:"_blank",rel:"noopener noreferrer"},v={class:"custom-container warning"},f=e("p",{class:"custom-container-title"},"Electrum does currently not support Taproot",-1),y={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.3",target:"_blank",rel:"noopener noreferrer"},E={class:"table-of-contents"},k=d(`

    Restoring Wasabi Wallet via Electrum GUI

    1. Launch Electrum.

      If you don't have a wallet created on Electrum it should automatically display an Install Wizard. If it opens your default wallet then go to File -> New/Restore.

    2. Name your new Electrum wallet.

    3. Choose Standard wallet.

    4. Choose I already have a seed.

    5. Type in your seed (recovery words).

    6. Click the Options button, then select BIP39 seed and if you created your Wasabi wallet with a password make sure to check Extend this seed with custom words and type your password in the Seed extension window.

    7. On the Script type and Derivation path window, choose native SegWit (p2wpkh) or manually insert m/84'/0'/0'.

    8. Increase the gap limit by opening Electrum's Console and execute the following commands:

      wallet.change_gap_limit(100)
      +import{_ as i,r,o as n,c as s,a as e,b as t,d as o,w as c,e as d}from"./app-BgbPjqpx.js";const u={},m=e("h1",{id:"restoring-wasabi-wallet-in-electrum",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#restoring-wasabi-wallet-in-electrum"},[e("span",null,"Restoring Wasabi Wallet in Electrum")])],-1),h={class:"custom-container danger"},p=e("p",{class:"custom-container-title"},"Potential privacy leak!",-1),g=e("p",null,"If you do not run your own Electrum server, you will leak all your addresses to random third-party servers, losing anonymity against those entities, so you must make a judgement call by being aware of this.",-1),w={href:"https://github.com/chris-belcher/electrum-personal-server",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/kyuupichan/electrumx",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/romanz/electrs",target:"_blank",rel:"noopener noreferrer"},v={class:"custom-container warning"},f=e("p",{class:"custom-container-title"},"Electrum does currently not support Taproot",-1),y={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.3",target:"_blank",rel:"noopener noreferrer"},E={class:"table-of-contents"},k=d(`

      Restoring Wasabi Wallet via Electrum GUI

      1. Launch Electrum.

        If you don't have a wallet created on Electrum it should automatically display an Install Wizard. If it opens your default wallet then go to File -> New/Restore.

      2. Name your new Electrum wallet.

      3. Choose Standard wallet.

      4. Choose I already have a seed.

      5. Type in your seed (recovery words).

      6. Click the Options button, then select BIP39 seed and if you created your Wasabi wallet with a password make sure to check Extend this seed with custom words and type your password in the Seed extension window.

      7. On the Script type and Derivation path window, choose native SegWit (p2wpkh) or manually insert m/84'/0'/0'.

      8. Increase the gap limit by opening Electrum's Console and execute the following commands:

        wallet.change_gap_limit(100)
         wallet.gap_limit_for_change = 100
         wallet.synchronize()
         
      `,2);function W(x,I){const a=r("ExternalLinkIcon"),l=r("router-link");return n(),s("div",null,[m,e("div",h,[p,g,e("p",null,[t("To gain some privacy by using Electrum you should set up Tor on Network preferences or by installing your own Electrum server via "),e("a",w,[t("Electrum Personal Server"),o(a)]),t(", "),e("a",_,[t("ElectrumX"),o(a)]),t(" or "),e("a",b,[t("Electrs"),o(a)]),t(".")])]),e("div",v,[f,e("p",null,[t("As of Wasabi "),e("a",y,[t("version 2.0.3"),o(a)]),t(", users may receive Taproot outputs from coinjoin or as a change output from a normal transaction. So when recovering a wallet from Wasabi in Electrum some funds might be missing, as the Taproot (SegWit v1) coins are not shown. An other wallet that does support Taproot should be used for recovering Taproot coins.")])]),e("nav",E,[e("ul",null,[e("li",null,[o(l,{to:"#restoring-wasabi-wallet-via-electrum-gui"},{default:c(()=>[t("Restoring Wasabi Wallet via Electrum GUI")]),_:1})])])]),k])}const S=i(u,[["render",W],["__file","RestoreElectrum.html.vue"]]),T=JSON.parse('{"path":"/using-wasabi/RestoreElectrum.html","title":"Restoring Wasabi Wallet in Electrum","lang":"en-US","frontmatter":{"title":"Restoring Wasabi Wallet in Electrum","description":"A detailed guide about restoring a wallet created from Wasabi to Electrum. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Restoring Wasabi Wallet via Electrum GUI","slug":"restoring-wasabi-wallet-via-electrum-gui","link":"#restoring-wasabi-wallet-via-electrum-gui","children":[]}],"git":{"updatedTime":1681202970000},"filePathRelative":"using-wasabi/RestoreElectrum.md"}');export{S as comp,T as data}; diff --git a/assets/Security.html-587mBq7c.js b/assets/Security.html-DIwuLgN6.js similarity index 99% rename from assets/Security.html-587mBq7c.js rename to assets/Security.html-DIwuLgN6.js index e8d6d38718..c14158f947 100644 --- a/assets/Security.html-587mBq7c.js +++ b/assets/Security.html-DIwuLgN6.js @@ -1,4 +1,4 @@ -import{_ as l,r as v,o as d,c as r,a as i,b as n,d as s,e as a}from"./app-BPKesm5h.js";const c={},u=i("h1",{id:"security-policy",tabindex:"-1"},[i("a",{class:"header-anchor",href:"#security-policy"},[i("span",null,"Security Policy")])],-1),b={href:"https://github.com/zkSNACKs/WalletWasabi/issues/new/choose",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/zkSNACKs/WalletWasabi/security/advisories/new",target:"_blank",rel:"noopener noreferrer"},t=i("code",null,"F079 0C08 68BD BAB8 EE33 F9CE 50FB 7FEB 00F9 7588",-1),o=a(`
      -----BEGIN PGP PUBLIC KEY BLOCK-----
      +import{_ as l,r as v,o as d,c as r,a as i,b as n,d as s,e as a}from"./app-BgbPjqpx.js";const c={},u=i("h1",{id:"security-policy",tabindex:"-1"},[i("a",{class:"header-anchor",href:"#security-policy"},[i("span",null,"Security Policy")])],-1),b={href:"https://github.com/zkSNACKs/WalletWasabi/issues/new/choose",target:"_blank",rel:"noopener noreferrer"},m={href:"https://github.com/zkSNACKs/WalletWasabi/security/advisories/new",target:"_blank",rel:"noopener noreferrer"},t=i("code",null,"F079 0C08 68BD BAB8 EE33 F9CE 50FB 7FEB 00F9 7588",-1),o=a(`
      -----BEGIN PGP PUBLIC KEY BLOCK-----
       
       mQINBF1e9xEBEACvehUjz+FTOdj824HLkIIYLGUqlV7FhkzjAob7P2v+1LrCAdnE
       ATGe6Yb0jz/kQ+6U5W/5YWVBjy80hS+JfMESvXIPmgf6Dnz4zKZ2IDZ4V32mjJ4p
      diff --git a/assets/Send.html-B7sMNV6R.js b/assets/Send.html-B0uyGrbT.js
      similarity index 99%
      rename from assets/Send.html-B7sMNV6R.js
      rename to assets/Send.html-B0uyGrbT.js
      index 223462930b..feaebb713b 100644
      --- a/assets/Send.html-B7sMNV6R.js
      +++ b/assets/Send.html-B0uyGrbT.js
      @@ -1 +1 @@
      -import{_ as h}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as d,c as u,a as p,b as c}from"./HistoryRightClick-DykL0_1P.js";import{_ as m}from"./CoinjoinStrategy-BZrDbG5n.js";import{_ as g,r as l,o as b,c as f,a as e,d as n,w as i,b as t,e as r}from"./app-BPKesm5h.js";const y="/SendButton.png",_="/Send.png",v="/SendRecipientLabel.png",w="/SendChangeFee.png",k="/SendPrivacySuggestion.png",W="/SendPreviewTransaction.png",S="/SendPassword.png",T="/PaymentSuccessful.png",x={},C=e("h1",{id:"send",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#send"},[e("span",null,"Send")])],-1),A={class:"table-of-contents"},P={href:"https://youtu.be/vCI5aza-lv0",title:"Send in Wasabi Wallet",target:"_blank",rel:"noopener noreferrer"},F=e("img",{src:h,alt:"Send in Wasabi Wallet"},null,-1),B=r('

      How to send bitcoin step-by-step

      1. Click the Send button.

      Wasabi Wallet Send Button

      1. Enter the destination address.

      Wasabi Wallet Send To Field

      1. Specify the amount of bitcoin to send to the destination address. Optionally, you can specify the dollar amount to send instead.

      Wasabi Wallet Send Amount Field

      1. Click Continue.

      Wasabi Wallet Send

      1. Label the recipient by entering the name of the person or company who you are sending to.

      Wasabi Wallet Send Recipient Label

      1. Preview Transaction.

        • Verify the amount, recipient, and the address.
        • Review the estimated time for confirmation and the transaction fee. Optionally, you can change the transaction fee or confirmation time by clicking on the edit fee icon.

        Wasabi Wallet Send Change Fee

        • Review the suggestions to improve your privacy by clicking the shield icon in the top right corner. For example, you may want to slightly increase or decrease your payment amount to avoid change.

        Wasabi Wallet Send Privacy Suggestion

      2. Click Confirm.

      Wasabi Wallet Send Preview Transaction

      1. Type in your password, then click Continue.

      Wasabi Wallet Send Password

      1. Transaction successfully sent!

      Wasabi Wallet Payment Successful

      Coins

      ',18),R=e("code",null,"Send",-1),U=e("h2",{id:"clusters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#clusters"},[e("span",null,"Clusters")])],-1),I=e("code",null,"Alice",-1),j=e("code",null,"Alice, Bob",-1),O=e("h2",{id:"anonymity-set",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#anonymity-set"},[e("span",null,"Anonymity Set")])],-1),z=e("p",null,[t("A typical bitcoin transaction will contain one input and two outputs - one of the outputs is the coin you are sending and the other output is the change coin that goes back to your wallet. Your change coin can be linked to this one input. There is a 1 in 1 chance to find this link and no plausible deniability. Thus, Wasabi denotes this coin's anonymity set as "),e("code",null,"1"),t(".")],-1),N=e("p",null,[t("There are three coinjoin strategies to choose from in Wasabi Wallet which effect the target anonymity score for your coins. These three strategies are "),e("code",null,"Minimize Cost"),t(", "),e("code",null,"Maximize Speed"),t(", and "),e("code",null,"Maximize Privacy"),t(". Each of these strategies come with different trade-offs.")],-1),E=e("p",null,"Alternatively, custom coinjoin settings can be configured.",-1),H=e("p",null,[e("img",{src:m,alt:"Coinjoin Strategy",title:"Coinjoin Strategy"})],-1),L=e("h2",{id:"receiving-address",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#receiving-address"},[e("span",null,"Receiving Address")])],-1),M=e("code",null,"1",-1),q=e("code",null,"3",-1),G=e("code",null,"bc1q",-1),V=e("code",null,"bc1p",-1),K=e("h2",{id:"observers",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#observers"},[e("span",null,"Observers")])],-1),Y=r('

      Amount

      In the Amount text box you can specify how many bitcoins the receiving address will gain. You can also see and enter the current US Dollar value of the sending amount.

      Avoid sending rounded values

      If you specify a rounded amount, like 0.0100 0000 bitcoin, then the change output will not be rounded, like 0.0896 8413 bitcoin. This makes it easy for an observer to conclude that the spending amount was the 0.01 bitcoin, and that the other output is the change back to the sender. So in order to increase your privacy, you can set a non-rounded amount, like 0.0101 6843.

      Send Amount Field

      Mining Fee

      ',5),X=e("code",null,"value of inputs - value of outputs",-1),J=e("code",null,"smart fee",-1),Q=e("p",null,[e("img",{src:d,alt:"Wasabi Wallet Fee Slider",title:"Wasabi Wallet Fee Slider"})],-1),D=e("p",null,[t("In some cases, there is very little demand for block space, and then Wasabi will set the minimum fee of "),e("code",null,"1 sat/vByte"),t(".")],-1),$={class:"custom-container tip"},Z=e("p",{class:"custom-container-title"},"High-priority transaction fees",-1),ee=e("p",null,"If you have a transaction that is high-priority and you really want it to be confirmed ASAP:",-1),te={href:"https://mempool.space",target:"_blank",rel:"noopener noreferrer"},ne={href:"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/",target:"_blank",rel:"noopener noreferrer"},ie=e("li",null,"Select a fee that is well above the current highest fee (perhaps double or triple it) if it is very important to you that the transaction is confirmed soon.",-1),oe={href:"https://bitcointechtalk.com/an-introduction-to-bitcoin-core-fee-estimation-27920880ad0",target:"_blank",rel:"noopener noreferrer"},ae=e("h2",{id:"privacy-suggestions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#privacy-suggestions"},[e("span",null,"Privacy Suggestions")])],-1),se={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.4",target:"_blank",rel:"noopener noreferrer"},le=e("em",null,"Preview Transaction",-1),re=r('

      There are warnings for:

      • Interlinking labels
      • Using non-private coins
      • Using semi-private coins
      • Creating change
      • Consolidating 10 coins or more
      • Using unconfirmed coins
      • Using coinjoining coins

      There are clickable suggestions to:

      • Manage labels (when interlinking labels)
      • Only use private coins
      • Not use non-private coins (only use private and semi-private)
      • Avoid change

      The suggestion to only use semi-private or private coins is only shown if the amount difference is less than or equal to 25%.

      TIP

      Each suggestion has a tooltip. Hover over the suggestion to see more information.

      Password

      ',7),ce=e("h2",{id:"broadcast",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#broadcast"},[e("span",null,"Broadcast")])],-1),he=e("p",null,"Once the transaction is signed, Wasabi will connect to a random Bitcoin P2P node over Tor and provide this transaction, then it will immediately disconnect. This first node will gossip the transaction throughout the network, then miners can include it in a block.",-1),de=e("h2",{id:"speed-up-or-cancel-transaction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#speed-up-or-cancel-transaction"},[e("span",null,"Speed Up or Cancel Transaction")])],-1),ue=e("p",null,'Pending (unconfirmed) Bitcoin transactions can be replaced by sending a new transaction that pays a higher fee rate using the same (or some) coins/UTXOs. This can be used to speed up or cancel a transaction. The miners are incentivized to mine the transaction with the higher fee rate, as this will earn them more money. If the new higher fee rate paying transaction is confirmed, the old transaction can be considered "replaced".',-1),pe={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.4",target:"_blank",rel:"noopener noreferrer"},me=e("em",null,"Cancel Transaction",-1),ge=e("p",null,"Speeding up or cancelling a transaction costs additional fees, because a new bitcoin transaction with a higher fee rate (than the previous transaction) has to be sent.",-1),be=e("p",null,"To Speed Up or Cancel a Transaction, right-click on the pending transaction in the history.",-1),fe=e("p",null,[e("img",{src:u,alt:"History Right Click",title:"History Right Click"})],-1),ye=e("p",null,"Click one of the two options and then confirm that you want to pay the additional fee for this action. After which the succesfully speed up/cancelled dialog is displayed.",-1),_e=e("p",null,"In the history, the transaction will now have a rocket (speeded up) or a cross (cancelled) icon. The transaction is still pending, but it should be confirmed sooner than the initial transaction.",-1),ve={href:"https://youtu.be/55KURak5r58",target:"_blank",rel:"noopener noreferrer"},we=e("img",{src:"https://img.youtube.com/vi/55KURak5r58/maxresdefault.jpg",alt:"How to speed up Bitcoin transaction"},null,-1);function ke(We,Se){const o=l("router-link"),s=l("ExternalLinkIcon"),a=l("RouteLink");return b(),f("div",null,[C,e("nav",A,[e("ul",null,[e("li",null,[n(o,{to:"#how-to-send-bitcoin-step-by-step"},{default:i(()=>[t("How to send bitcoin step-by-step")]),_:1})]),e("li",null,[n(o,{to:"#coins"},{default:i(()=>[t("Coins")]),_:1})]),e("li",null,[n(o,{to:"#clusters"},{default:i(()=>[t("Clusters")]),_:1})]),e("li",null,[n(o,{to:"#anonymity-set"},{default:i(()=>[t("Anonymity Set")]),_:1})]),e("li",null,[n(o,{to:"#receiving-address"},{default:i(()=>[t("Receiving Address")]),_:1})]),e("li",null,[n(o,{to:"#observers"},{default:i(()=>[t("Observers")]),_:1})]),e("li",null,[n(o,{to:"#amount"},{default:i(()=>[t("Amount")]),_:1})]),e("li",null,[n(o,{to:"#mining-fee"},{default:i(()=>[t("Mining Fee")]),_:1})]),e("li",null,[n(o,{to:"#privacy-suggestions"},{default:i(()=>[t("Privacy Suggestions")]),_:1})]),e("li",null,[n(o,{to:"#password"},{default:i(()=>[t("Password")]),_:1})]),e("li",null,[n(o,{to:"#broadcast"},{default:i(()=>[t("Broadcast")]),_:1})]),e("li",null,[n(o,{to:"#speed-up-or-cancel-transaction"},{default:i(()=>[t("Speed Up or Cancel Transaction")]),_:1})])])]),e("p",null,[e("a",P,[F,n(s)])]),B,e("p",null,[t("A coin is an unspent transaction output (UTXO): a chunk of bitcoin that can be sent in a future transaction. Unlike fiat currencies which have fixed denominations, each UTXO contains a variable amount of bitcoin. You can get coins by first "),n(a,{to:"/using-wasabi/Receive.html"},{default:i(()=>[t("receiving")]),_:1}),t(" them from someone else. When you want to send some bitcoin you simply enter the amount to send and the address after clicking the "),R,t(" button. Wasabi Wallet does the job of automatically selecting the appropriate combination of coins to include as inputs in the transaction.")]),U,e("p",null,[t("Every time you receive a payment, you first must "),n(a,{to:"/using-wasabi/Receive.html#the-importance-of-labeling"},{default:i(()=>[t("label the observers")]),_:1}),t(" who know this address is yours. This transaction metadata is used to build a cluster of which people know about your coins. For example, if you receive a coin from Alice, then the cluster is "),I,t(". If you now send half of this coin to Bob, then the cluster of your change coin is "),j,t(". The goal is to know the observers who know about your coins and try to reduce their number for each coin.")]),O,z,e("p",null,[t("In a Wasabi "),n(a,{to:"/using-wasabi/CoinJoin.html"},{default:i(()=>[t("coinjoin")]),_:1}),t(", many peers register coins in the input of the transaction, and in the output there are several equal value coins. For example, the output may contain 20 coins worth exactly 0.3 bitcoin. This means that when looking at one of these coinjoin outputs, there is a 1 in 20 chance to find the corresponding input: thus an anonymity set of 20. Therefore, the higher the anonymity set, the more your post-coinjoin coin is delinked from the pre-coinjoin history.")]),N,E,H,L,e("p",null,[t("When sending bitcoin, you need to know the destination address of the receiver. This commits to the spending condition that the receiver agrees to have for this coin. The address can be a public key hash [starting with "),M,t("], a script hash [starting with "),q,t("], a native SegWit bech32 public key hash [starting with "),G,t("], or a Taproot bech32m public key [starting with "),V,t("]. Make sure that you ask the receiver for a "),n(a,{to:"/why-wasabi/AddressReuse.html"},{default:i(()=>[t("new address")]),_:1}),t(" for every payment to protect your privacy and theirs. Wasabi will calculate the checksum and notify you if the provided address is wrong.")]),K,e("p",null,[t("In Wasabi it is mandatory to provide one or more "),n(a,{to:"/using-wasabi/Receive.html#the-importance-of-labeling"},{default:i(()=>[t("labels")]),_:1}),t(" each time you initiate a transfer of bitcoin. These labels should be the observers of the transaction. An observer of a sending transaction is, of course, the receiver, as well as any other third party that knows that you are the sender of this transaction. For example, you should include as a label the payment processor or the bitcoin exchange if you use their services. This metadata will be used to build an accurate cluster of observers who know about your coins.")]),Y,e("p",null,[t("Every transaction must specify a fee which incentives the miner to include it in a block, it is calculated by "),X,t(". The higher the fee per virtual byte (vByte) transaction size, the more likely miners are to confirm this transaction. Wasabi uses Bitcoin Core's "),J,t(" algorithm to estimate the time it will take to confirm at the given fee level. You can change the fee by moving the slider, or by manually setting the "),n(a,{to:"/FAQ/FAQ-UseWasabi.html#how-do-i-set-custom-fee-rate"},{default:i(()=>[t("transaction fee rate")]),_:1}),t(".")]),Q,D,e("div",$,[Z,ee,e("ol",null,[e("li",null,[t("Use "),e("a",te,[t("a mempool monitor"),n(s)]),t(" (available "),e("a",ne,[t("Tor onion website"),n(s)]),t(") to see what fees are likely to get a transaction to be confirmed in the next block.")]),ie]),e("p",null,[t("For a deeper dive into the fee estimation process, "),e("a",oe,[t("this article"),n(s)]),t(" is worth reading.")])]),ae,e("p",null,[t("Since Wasabi version "),e("a",se,[t("2.0.4"),n(s)]),t(" the "),le,t(" dialog contains privacy suggestions. The privacy suggestions help the user to improve their transaction. They are displayed when hovering over the triangle or shield in the top right corner. The suggestions are based on the current coin selection for this transaction. For example, the suggestions will warn the user when the transaction contains non-private coins.")]),re,e("p",null,[t("In order to spend a coin, the transaction must be signed by the private key corresponding to that coin. Wasabi stores a secret on the computer, encrypted with the password that you specified during the "),n(a,{to:"/using-wasabi/WalletGeneration.html#important-info-about-your-wallet-password"},{default:i(()=>[t("wallet generation")]),_:1}),t(". To spend a coin you need to type in the password, which decrypts the encrypted secret, and then derive the child private key that signs the transaction. Afterwards, the password is wiped from memory.")]),ce,he,e("p",null,[t("If for some reason the first broadcast fails, then if you have Wasabi connected to "),n(a,{to:"/using-wasabi/BitcoinFullNode.html"},{default:i(()=>[t("your own Bitcoin full node")]),_:1}),t(" this node will broadcast the transaction to the network. If this also fails, then the transaction is sent to the backend coordinator with a new Tor identity, who then broadcasts the transaction to the network.")]),de,ue,e("p",null,[t("Since Wasabi version "),e("a",pe,[t("2.0.4"),n(s)]),t(" it is possible to easily speed up or cancel a pending transaction. Speeding up and cancelling are similar to each other, the main difference being that a "),me,t(` will send the coins to a new address owned by the user/wallet (this is all done automatically). The transaction is then "cancelled" because the bitcoin (minus the fees) is returned to the user's wallet.`)]),ge,e("p",null,[t("Wasabi first tries to utilize "),n(a,{to:"/using-wasabi/glossary/Glossary-GeneralBitcoin.html#replace-by-fee-rbf"},{default:i(()=>[t("RBF")]),_:1}),t(", if that's not possible it tries to do "),n(a,{to:"/using-wasabi/glossary/Glossary-GeneralBitcoin.html#child-pays-for-parent-cpfp"},{default:i(()=>[t("CPFP")]),_:1}),t(".")]),be,fe,ye,_e,e("p",null,[e("a",ve,[we,n(s)])])])}const Pe=g(x,[["render",ke],["__file","Send.html.vue"]]),Fe=JSON.parse('{"path":"/using-wasabi/Send.html","title":"Send","lang":"en-US","frontmatter":{"title":"Send","description":"A step-by-step guide on how to send bitcoin in Wasabi. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"How to send bitcoin step-by-step","slug":"how-to-send-bitcoin-step-by-step","link":"#how-to-send-bitcoin-step-by-step","children":[]},{"level":2,"title":"Coins","slug":"coins","link":"#coins","children":[]},{"level":2,"title":"Clusters","slug":"clusters","link":"#clusters","children":[]},{"level":2,"title":"Anonymity Set","slug":"anonymity-set","link":"#anonymity-set","children":[]},{"level":2,"title":"Receiving Address","slug":"receiving-address","link":"#receiving-address","children":[]},{"level":2,"title":"Observers","slug":"observers","link":"#observers","children":[]},{"level":2,"title":"Amount","slug":"amount","link":"#amount","children":[]},{"level":2,"title":"Mining Fee","slug":"mining-fee","link":"#mining-fee","children":[]},{"level":2,"title":"Privacy Suggestions","slug":"privacy-suggestions","link":"#privacy-suggestions","children":[]},{"level":2,"title":"Password","slug":"password","link":"#password","children":[]},{"level":2,"title":"Broadcast","slug":"broadcast","link":"#broadcast","children":[]},{"level":2,"title":"Speed Up or Cancel Transaction","slug":"speed-up-or-cancel-transaction","link":"#speed-up-or-cancel-transaction","children":[]}],"git":{"updatedTime":1694530981000},"filePathRelative":"using-wasabi/Send.md"}');export{Pe as comp,Fe as data}; +import{_ as h}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as d,c as u,a as p,b as c}from"./HistoryRightClick-DykL0_1P.js";import{_ as m}from"./CoinjoinStrategy-BZrDbG5n.js";import{_ as g,r as l,o as b,c as f,a as e,d as n,w as i,b as t,e as r}from"./app-BgbPjqpx.js";const y="/SendButton.png",_="/Send.png",v="/SendRecipientLabel.png",w="/SendChangeFee.png",k="/SendPrivacySuggestion.png",W="/SendPreviewTransaction.png",S="/SendPassword.png",T="/PaymentSuccessful.png",x={},C=e("h1",{id:"send",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#send"},[e("span",null,"Send")])],-1),A={class:"table-of-contents"},P={href:"https://youtu.be/vCI5aza-lv0",title:"Send in Wasabi Wallet",target:"_blank",rel:"noopener noreferrer"},F=e("img",{src:h,alt:"Send in Wasabi Wallet"},null,-1),B=r('

      How to send bitcoin step-by-step

      1. Click the Send button.

      Wasabi Wallet Send Button

      1. Enter the destination address.

      Wasabi Wallet Send To Field

      1. Specify the amount of bitcoin to send to the destination address. Optionally, you can specify the dollar amount to send instead.

      Wasabi Wallet Send Amount Field

      1. Click Continue.

      Wasabi Wallet Send

      1. Label the recipient by entering the name of the person or company who you are sending to.

      Wasabi Wallet Send Recipient Label

      1. Preview Transaction.

        • Verify the amount, recipient, and the address.
        • Review the estimated time for confirmation and the transaction fee. Optionally, you can change the transaction fee or confirmation time by clicking on the edit fee icon.

        Wasabi Wallet Send Change Fee

        • Review the suggestions to improve your privacy by clicking the shield icon in the top right corner. For example, you may want to slightly increase or decrease your payment amount to avoid change.

        Wasabi Wallet Send Privacy Suggestion

      2. Click Confirm.

      Wasabi Wallet Send Preview Transaction

      1. Type in your password, then click Continue.

      Wasabi Wallet Send Password

      1. Transaction successfully sent!

      Wasabi Wallet Payment Successful

      Coins

      ',18),R=e("code",null,"Send",-1),U=e("h2",{id:"clusters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#clusters"},[e("span",null,"Clusters")])],-1),I=e("code",null,"Alice",-1),j=e("code",null,"Alice, Bob",-1),O=e("h2",{id:"anonymity-set",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#anonymity-set"},[e("span",null,"Anonymity Set")])],-1),z=e("p",null,[t("A typical bitcoin transaction will contain one input and two outputs - one of the outputs is the coin you are sending and the other output is the change coin that goes back to your wallet. Your change coin can be linked to this one input. There is a 1 in 1 chance to find this link and no plausible deniability. Thus, Wasabi denotes this coin's anonymity set as "),e("code",null,"1"),t(".")],-1),N=e("p",null,[t("There are three coinjoin strategies to choose from in Wasabi Wallet which effect the target anonymity score for your coins. These three strategies are "),e("code",null,"Minimize Cost"),t(", "),e("code",null,"Maximize Speed"),t(", and "),e("code",null,"Maximize Privacy"),t(". Each of these strategies come with different trade-offs.")],-1),E=e("p",null,"Alternatively, custom coinjoin settings can be configured.",-1),H=e("p",null,[e("img",{src:m,alt:"Coinjoin Strategy",title:"Coinjoin Strategy"})],-1),L=e("h2",{id:"receiving-address",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#receiving-address"},[e("span",null,"Receiving Address")])],-1),M=e("code",null,"1",-1),q=e("code",null,"3",-1),G=e("code",null,"bc1q",-1),V=e("code",null,"bc1p",-1),K=e("h2",{id:"observers",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#observers"},[e("span",null,"Observers")])],-1),Y=r('

      Amount

      In the Amount text box you can specify how many bitcoins the receiving address will gain. You can also see and enter the current US Dollar value of the sending amount.

      Avoid sending rounded values

      If you specify a rounded amount, like 0.0100 0000 bitcoin, then the change output will not be rounded, like 0.0896 8413 bitcoin. This makes it easy for an observer to conclude that the spending amount was the 0.01 bitcoin, and that the other output is the change back to the sender. So in order to increase your privacy, you can set a non-rounded amount, like 0.0101 6843.

      Send Amount Field

      Mining Fee

      ',5),X=e("code",null,"value of inputs - value of outputs",-1),J=e("code",null,"smart fee",-1),Q=e("p",null,[e("img",{src:d,alt:"Wasabi Wallet Fee Slider",title:"Wasabi Wallet Fee Slider"})],-1),D=e("p",null,[t("In some cases, there is very little demand for block space, and then Wasabi will set the minimum fee of "),e("code",null,"1 sat/vByte"),t(".")],-1),$={class:"custom-container tip"},Z=e("p",{class:"custom-container-title"},"High-priority transaction fees",-1),ee=e("p",null,"If you have a transaction that is high-priority and you really want it to be confirmed ASAP:",-1),te={href:"https://mempool.space",target:"_blank",rel:"noopener noreferrer"},ne={href:"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/",target:"_blank",rel:"noopener noreferrer"},ie=e("li",null,"Select a fee that is well above the current highest fee (perhaps double or triple it) if it is very important to you that the transaction is confirmed soon.",-1),oe={href:"https://bitcointechtalk.com/an-introduction-to-bitcoin-core-fee-estimation-27920880ad0",target:"_blank",rel:"noopener noreferrer"},ae=e("h2",{id:"privacy-suggestions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#privacy-suggestions"},[e("span",null,"Privacy Suggestions")])],-1),se={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.4",target:"_blank",rel:"noopener noreferrer"},le=e("em",null,"Preview Transaction",-1),re=r('

      There are warnings for:

      • Interlinking labels
      • Using non-private coins
      • Using semi-private coins
      • Creating change
      • Consolidating 10 coins or more
      • Using unconfirmed coins
      • Using coinjoining coins

      There are clickable suggestions to:

      • Manage labels (when interlinking labels)
      • Only use private coins
      • Not use non-private coins (only use private and semi-private)
      • Avoid change

      The suggestion to only use semi-private or private coins is only shown if the amount difference is less than or equal to 25%.

      TIP

      Each suggestion has a tooltip. Hover over the suggestion to see more information.

      Password

      ',7),ce=e("h2",{id:"broadcast",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#broadcast"},[e("span",null,"Broadcast")])],-1),he=e("p",null,"Once the transaction is signed, Wasabi will connect to a random Bitcoin P2P node over Tor and provide this transaction, then it will immediately disconnect. This first node will gossip the transaction throughout the network, then miners can include it in a block.",-1),de=e("h2",{id:"speed-up-or-cancel-transaction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#speed-up-or-cancel-transaction"},[e("span",null,"Speed Up or Cancel Transaction")])],-1),ue=e("p",null,'Pending (unconfirmed) Bitcoin transactions can be replaced by sending a new transaction that pays a higher fee rate using the same (or some) coins/UTXOs. This can be used to speed up or cancel a transaction. The miners are incentivized to mine the transaction with the higher fee rate, as this will earn them more money. If the new higher fee rate paying transaction is confirmed, the old transaction can be considered "replaced".',-1),pe={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.4",target:"_blank",rel:"noopener noreferrer"},me=e("em",null,"Cancel Transaction",-1),ge=e("p",null,"Speeding up or cancelling a transaction costs additional fees, because a new bitcoin transaction with a higher fee rate (than the previous transaction) has to be sent.",-1),be=e("p",null,"To Speed Up or Cancel a Transaction, right-click on the pending transaction in the history.",-1),fe=e("p",null,[e("img",{src:u,alt:"History Right Click",title:"History Right Click"})],-1),ye=e("p",null,"Click one of the two options and then confirm that you want to pay the additional fee for this action. After which the succesfully speed up/cancelled dialog is displayed.",-1),_e=e("p",null,"In the history, the transaction will now have a rocket (speeded up) or a cross (cancelled) icon. The transaction is still pending, but it should be confirmed sooner than the initial transaction.",-1),ve={href:"https://youtu.be/55KURak5r58",target:"_blank",rel:"noopener noreferrer"},we=e("img",{src:"https://img.youtube.com/vi/55KURak5r58/maxresdefault.jpg",alt:"How to speed up Bitcoin transaction"},null,-1);function ke(We,Se){const o=l("router-link"),s=l("ExternalLinkIcon"),a=l("RouteLink");return b(),f("div",null,[C,e("nav",A,[e("ul",null,[e("li",null,[n(o,{to:"#how-to-send-bitcoin-step-by-step"},{default:i(()=>[t("How to send bitcoin step-by-step")]),_:1})]),e("li",null,[n(o,{to:"#coins"},{default:i(()=>[t("Coins")]),_:1})]),e("li",null,[n(o,{to:"#clusters"},{default:i(()=>[t("Clusters")]),_:1})]),e("li",null,[n(o,{to:"#anonymity-set"},{default:i(()=>[t("Anonymity Set")]),_:1})]),e("li",null,[n(o,{to:"#receiving-address"},{default:i(()=>[t("Receiving Address")]),_:1})]),e("li",null,[n(o,{to:"#observers"},{default:i(()=>[t("Observers")]),_:1})]),e("li",null,[n(o,{to:"#amount"},{default:i(()=>[t("Amount")]),_:1})]),e("li",null,[n(o,{to:"#mining-fee"},{default:i(()=>[t("Mining Fee")]),_:1})]),e("li",null,[n(o,{to:"#privacy-suggestions"},{default:i(()=>[t("Privacy Suggestions")]),_:1})]),e("li",null,[n(o,{to:"#password"},{default:i(()=>[t("Password")]),_:1})]),e("li",null,[n(o,{to:"#broadcast"},{default:i(()=>[t("Broadcast")]),_:1})]),e("li",null,[n(o,{to:"#speed-up-or-cancel-transaction"},{default:i(()=>[t("Speed Up or Cancel Transaction")]),_:1})])])]),e("p",null,[e("a",P,[F,n(s)])]),B,e("p",null,[t("A coin is an unspent transaction output (UTXO): a chunk of bitcoin that can be sent in a future transaction. Unlike fiat currencies which have fixed denominations, each UTXO contains a variable amount of bitcoin. You can get coins by first "),n(a,{to:"/using-wasabi/Receive.html"},{default:i(()=>[t("receiving")]),_:1}),t(" them from someone else. When you want to send some bitcoin you simply enter the amount to send and the address after clicking the "),R,t(" button. Wasabi Wallet does the job of automatically selecting the appropriate combination of coins to include as inputs in the transaction.")]),U,e("p",null,[t("Every time you receive a payment, you first must "),n(a,{to:"/using-wasabi/Receive.html#the-importance-of-labeling"},{default:i(()=>[t("label the observers")]),_:1}),t(" who know this address is yours. This transaction metadata is used to build a cluster of which people know about your coins. For example, if you receive a coin from Alice, then the cluster is "),I,t(". If you now send half of this coin to Bob, then the cluster of your change coin is "),j,t(". The goal is to know the observers who know about your coins and try to reduce their number for each coin.")]),O,z,e("p",null,[t("In a Wasabi "),n(a,{to:"/using-wasabi/CoinJoin.html"},{default:i(()=>[t("coinjoin")]),_:1}),t(", many peers register coins in the input of the transaction, and in the output there are several equal value coins. For example, the output may contain 20 coins worth exactly 0.3 bitcoin. This means that when looking at one of these coinjoin outputs, there is a 1 in 20 chance to find the corresponding input: thus an anonymity set of 20. Therefore, the higher the anonymity set, the more your post-coinjoin coin is delinked from the pre-coinjoin history.")]),N,E,H,L,e("p",null,[t("When sending bitcoin, you need to know the destination address of the receiver. This commits to the spending condition that the receiver agrees to have for this coin. The address can be a public key hash [starting with "),M,t("], a script hash [starting with "),q,t("], a native SegWit bech32 public key hash [starting with "),G,t("], or a Taproot bech32m public key [starting with "),V,t("]. Make sure that you ask the receiver for a "),n(a,{to:"/why-wasabi/AddressReuse.html"},{default:i(()=>[t("new address")]),_:1}),t(" for every payment to protect your privacy and theirs. Wasabi will calculate the checksum and notify you if the provided address is wrong.")]),K,e("p",null,[t("In Wasabi it is mandatory to provide one or more "),n(a,{to:"/using-wasabi/Receive.html#the-importance-of-labeling"},{default:i(()=>[t("labels")]),_:1}),t(" each time you initiate a transfer of bitcoin. These labels should be the observers of the transaction. An observer of a sending transaction is, of course, the receiver, as well as any other third party that knows that you are the sender of this transaction. For example, you should include as a label the payment processor or the bitcoin exchange if you use their services. This metadata will be used to build an accurate cluster of observers who know about your coins.")]),Y,e("p",null,[t("Every transaction must specify a fee which incentives the miner to include it in a block, it is calculated by "),X,t(". The higher the fee per virtual byte (vByte) transaction size, the more likely miners are to confirm this transaction. Wasabi uses Bitcoin Core's "),J,t(" algorithm to estimate the time it will take to confirm at the given fee level. You can change the fee by moving the slider, or by manually setting the "),n(a,{to:"/FAQ/FAQ-UseWasabi.html#how-do-i-set-custom-fee-rate"},{default:i(()=>[t("transaction fee rate")]),_:1}),t(".")]),Q,D,e("div",$,[Z,ee,e("ol",null,[e("li",null,[t("Use "),e("a",te,[t("a mempool monitor"),n(s)]),t(" (available "),e("a",ne,[t("Tor onion website"),n(s)]),t(") to see what fees are likely to get a transaction to be confirmed in the next block.")]),ie]),e("p",null,[t("For a deeper dive into the fee estimation process, "),e("a",oe,[t("this article"),n(s)]),t(" is worth reading.")])]),ae,e("p",null,[t("Since Wasabi version "),e("a",se,[t("2.0.4"),n(s)]),t(" the "),le,t(" dialog contains privacy suggestions. The privacy suggestions help the user to improve their transaction. They are displayed when hovering over the triangle or shield in the top right corner. The suggestions are based on the current coin selection for this transaction. For example, the suggestions will warn the user when the transaction contains non-private coins.")]),re,e("p",null,[t("In order to spend a coin, the transaction must be signed by the private key corresponding to that coin. Wasabi stores a secret on the computer, encrypted with the password that you specified during the "),n(a,{to:"/using-wasabi/WalletGeneration.html#important-info-about-your-wallet-password"},{default:i(()=>[t("wallet generation")]),_:1}),t(". To spend a coin you need to type in the password, which decrypts the encrypted secret, and then derive the child private key that signs the transaction. Afterwards, the password is wiped from memory.")]),ce,he,e("p",null,[t("If for some reason the first broadcast fails, then if you have Wasabi connected to "),n(a,{to:"/using-wasabi/BitcoinFullNode.html"},{default:i(()=>[t("your own Bitcoin full node")]),_:1}),t(" this node will broadcast the transaction to the network. If this also fails, then the transaction is sent to the backend coordinator with a new Tor identity, who then broadcasts the transaction to the network.")]),de,ue,e("p",null,[t("Since Wasabi version "),e("a",pe,[t("2.0.4"),n(s)]),t(" it is possible to easily speed up or cancel a pending transaction. Speeding up and cancelling are similar to each other, the main difference being that a "),me,t(` will send the coins to a new address owned by the user/wallet (this is all done automatically). The transaction is then "cancelled" because the bitcoin (minus the fees) is returned to the user's wallet.`)]),ge,e("p",null,[t("Wasabi first tries to utilize "),n(a,{to:"/using-wasabi/glossary/Glossary-GeneralBitcoin.html#replace-by-fee-rbf"},{default:i(()=>[t("RBF")]),_:1}),t(", if that's not possible it tries to do "),n(a,{to:"/using-wasabi/glossary/Glossary-GeneralBitcoin.html#child-pays-for-parent-cpfp"},{default:i(()=>[t("CPFP")]),_:1}),t(".")]),be,fe,ye,_e,e("p",null,[e("a",ve,[we,n(s)])])])}const Pe=g(x,[["render",ke],["__file","Send.html.vue"]]),Fe=JSON.parse('{"path":"/using-wasabi/Send.html","title":"Send","lang":"en-US","frontmatter":{"title":"Send","description":"A step-by-step guide on how to send bitcoin in Wasabi. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"How to send bitcoin step-by-step","slug":"how-to-send-bitcoin-step-by-step","link":"#how-to-send-bitcoin-step-by-step","children":[]},{"level":2,"title":"Coins","slug":"coins","link":"#coins","children":[]},{"level":2,"title":"Clusters","slug":"clusters","link":"#clusters","children":[]},{"level":2,"title":"Anonymity Set","slug":"anonymity-set","link":"#anonymity-set","children":[]},{"level":2,"title":"Receiving Address","slug":"receiving-address","link":"#receiving-address","children":[]},{"level":2,"title":"Observers","slug":"observers","link":"#observers","children":[]},{"level":2,"title":"Amount","slug":"amount","link":"#amount","children":[]},{"level":2,"title":"Mining Fee","slug":"mining-fee","link":"#mining-fee","children":[]},{"level":2,"title":"Privacy Suggestions","slug":"privacy-suggestions","link":"#privacy-suggestions","children":[]},{"level":2,"title":"Password","slug":"password","link":"#password","children":[]},{"level":2,"title":"Broadcast","slug":"broadcast","link":"#broadcast","children":[]},{"level":2,"title":"Speed Up or Cancel Transaction","slug":"speed-up-or-cancel-transaction","link":"#speed-up-or-cancel-transaction","children":[]}],"git":{"updatedTime":1694530981000},"filePathRelative":"using-wasabi/Send.md"}');export{Pe as comp,Fe as data}; diff --git a/assets/StartupParameters.html-QIC2uQTw.js b/assets/StartupParameters.html-BoWGLe6W.js similarity index 99% rename from assets/StartupParameters.html-QIC2uQTw.js rename to assets/StartupParameters.html-BoWGLe6W.js index 8d0161658d..3b573b51f7 100644 --- a/assets/StartupParameters.html-QIC2uQTw.js +++ b/assets/StartupParameters.html-BoWGLe6W.js @@ -1 +1 @@ -import{_ as d,r as n,o as u,c as s,a as t,d as e,w as a,b as o,e as l}from"./app-BPKesm5h.js";const c={},q=t("h1",{id:"starting-wasabi-with-parameters",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#starting-wasabi-with-parameters"},[t("span",null,"Starting Wasabi with parameters")])],-1),h={class:"table-of-contents"},p=t("h2",{id:"available-commands",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#available-commands"},[t("span",null,"Available commands")])],-1),f=t("p",null,"It is possible to start Wasabi with specific parameters. The parameters override the configurations in the configuration file.",-1),m=t("p",null,"When entering the commands on the command line, they are capital letter insensitive.",-1),A=l('

      Help about the options is available when using the command line by adding --help to the executable: wassabeed --help or dotnet run -- --help when building from source.

      Config file configurations

      All configuration options available via the Config.json file are also available as command line arguments:

      Config FileCommand LineEnvironment variable
      ""Network": "TestNet"--network=testnetWASABI-NETWORK=testnet
      "MainNetBackendUri": "https://api.wasabiwallet.io/"--mainnetbackenduri="https://api.wasabiwallet.io/"WASABI-MAINNETBACKENDURI="https://api.wasabiwallet.io/"
      "TestNetClearnetBackendUri": "https://api.wasabiwallet.co/"--testnetbackenduri="https://api.wasabiwallet.co/"WASABI-TESTNETBACKENDURI="https://api.wasabiwallet.co/"
      "RegTestBackendUri": "http://localhost:37127/"--regtestbackenduri="http://localhost:37127/"WASABI-REGTESTBACKENDURI="http://localhost:37127/"
      ""UseTor": ""true"--usetor=trueWASABI-USETOR=true
      "TerminateTorOnExit": ""false"--terminatetoronexit=falseWASABI-TERMINATETORONEXIT=false
      "DownloadNewVersion": true--downloadnewversion=trueWASABI-DOWNLOADNEWVERSION=true
      "StartLocalBitcoinCoreOnStartup": false--startlocalbitcoincoreonstartup=falseWASABI-STARTLOCALBITCOINCOREONSTARTUP=false
      "StopLocalBitcoinCoreOnShutdown": true--stoplocalbitcoincoreonshutdown=trueWASABI-STOPLOCALBITCOINCOREONSHUTDOWN=true
      "LocalBitcoinCoreDataDir": "/home/UserName/.bitcoin"--localbitcoincoredatadir="/home/UserName/.bitcoin"WASABI-LOCALBITCOINCOREDATADIR="/home/UserName/.bitcoin"
      "MainNetBitcoinP2pEndPoint": "127.0.0.1:8333"--mainnetbitcoinp2pendpoint="127.0.0.1:8333"WASABI-MAINNETBITCOINP2PENDPOINT="127.0.0.1:8333"
      "TestNetBitcoinP2pEndPoint": "127.0.0.1:18333"--testnetbitcoinp2pendpoint="127.0.0.1:18333"WASABI-TESTNETBITCOINP2PENDPOINT="127.0.0.1:18333"
      "RegTestBitcoinP2pEndPoint": "127.0.0.1:18444"--regtestbitcoinp2pendpoint="127.0.0.1:18444"WASABI-REGTESTBITCOINP2PENDPOINT="127.0.0.1:18444"
      "JsonRpcServerEnabled": "true"--jsonrpcserverenabled=trueWASABI-JSONRPCSERVERENABLED=true
      "JsonRpcUser": ""--jsonrpcuser=""WASABI-JSONRPCUSER=""
      "JsonRpcPassword": ""--jsonrpcpassword=""WASABI-JSONRPCPASSWORD=""
      "JsonRpcServerPrefixes":["http://127.0.0.1:37128/", "http://localhost:37128/"]--jsonrpcserverprefixes=["http://127.0.0.1:37128/", "http://localhost:37128/"]WASABI-JSONRPCSERVERPREFIXES=["http://127.0.0.1:37128/", "http://localhost:37128/"]
      "DustThreshold": "0.00005"--dustthreshold=0.00005WASABI-DUSTTHRESHOLD=0.00005
      "EnableGpu": true--enablegpu=trueWASABI-ENABLEGPU=true
      "CoordinatorIdentifier": "CoinJoinCoordinatorIdentifier"--coordinatoridentifier="coinjoincoordinatoridentifier"WASABI-COORDINATORIDENTIFIER="coinjoincoordinatoridentifier"

      Non-Config file configurations

      There are a few special switches that are not present in the Config.json file and are only available using the command line:

      SwitchCommand LineEnvironment variable
      Ignore P2P transactions--blockonly=trueWASABI-BLOCKONLY=true
      The level of detail used during logging--loglevel=traceWASABI-LOGLEVEL=trace
      The path to the directory used during runtime--datadir="$HOME/temp/wasabi-1"WASABI-DATADIR="$HOME/temp/wasabi-1"
      Open wallet "WalletName"--wallet=WalletNameWASABI--WALLET=WalletName
      Expose the RPC as onion service--rpconionenabled=trueWASABI-RPCONIONENABLED=true
      Tor will listen to this SOCKS5 port--torsocksport=35000WASABI-TORSOCKSPORT=35000
      Tor will listen to this control port--torcontrolport=35001WASABI-TORCONTROLPORT=35001
      ',7);function b(g,S){const i=n("router-link"),r=n("RouteLink");return u(),s("div",null,[q,t("nav",h,[t("ul",null,[t("li",null,[e(i,{to:"#available-commands"},{default:a(()=>[o("Available commands")]),_:1}),t("ul",null,[t("li",null,[e(i,{to:"#config-file-configurations"},{default:a(()=>[o("Config file configurations")]),_:1})]),t("li",null,[e(i,{to:"#non-config-file-configurations"},{default:a(()=>[o("Non-Config file configurations")]),_:1})])])])])]),p,f,m,t("p",null,[o("The parameters work for both the GUI and the "),e(r,{to:"/using-wasabi/Daemon.html"},{default:a(()=>[o("Daemon")]),_:1}),o(".")]),A])}const T=d(c,[["render",b],["__file","StartupParameters.html.vue"]]),I=JSON.parse('{"path":"/using-wasabi/StartupParameters.html","title":"Starting Wasabi with parameters","lang":"en-US","frontmatter":{"title":"Starting Wasabi with parameters","description":"A guide on starting Wasabi with parameters, using the command line interface. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Available commands","slug":"available-commands","link":"#available-commands","children":[{"level":3,"title":"Config file configurations","slug":"config-file-configurations","link":"#config-file-configurations","children":[]},{"level":3,"title":"Non-Config file configurations","slug":"non-config-file-configurations","link":"#non-config-file-configurations","children":[]}]}],"git":{"updatedTime":1709579021000},"filePathRelative":"using-wasabi/StartupParameters.md"}');export{T as comp,I as data}; +import{_ as d,r as n,o as u,c as s,a as t,d as e,w as a,b as o,e as l}from"./app-BgbPjqpx.js";const c={},q=t("h1",{id:"starting-wasabi-with-parameters",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#starting-wasabi-with-parameters"},[t("span",null,"Starting Wasabi with parameters")])],-1),h={class:"table-of-contents"},p=t("h2",{id:"available-commands",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#available-commands"},[t("span",null,"Available commands")])],-1),f=t("p",null,"It is possible to start Wasabi with specific parameters. The parameters override the configurations in the configuration file.",-1),m=t("p",null,"When entering the commands on the command line, they are capital letter insensitive.",-1),A=l('

      Help about the options is available when using the command line by adding --help to the executable: wassabeed --help or dotnet run -- --help when building from source.

      Config file configurations

      All configuration options available via the Config.json file are also available as command line arguments:

      Config FileCommand LineEnvironment variable
      ""Network": "TestNet"--network=testnetWASABI-NETWORK=testnet
      "MainNetBackendUri": "https://api.wasabiwallet.io/"--mainnetbackenduri="https://api.wasabiwallet.io/"WASABI-MAINNETBACKENDURI="https://api.wasabiwallet.io/"
      "TestNetClearnetBackendUri": "https://api.wasabiwallet.co/"--testnetbackenduri="https://api.wasabiwallet.co/"WASABI-TESTNETBACKENDURI="https://api.wasabiwallet.co/"
      "RegTestBackendUri": "http://localhost:37127/"--regtestbackenduri="http://localhost:37127/"WASABI-REGTESTBACKENDURI="http://localhost:37127/"
      ""UseTor": ""true"--usetor=trueWASABI-USETOR=true
      "TerminateTorOnExit": ""false"--terminatetoronexit=falseWASABI-TERMINATETORONEXIT=false
      "DownloadNewVersion": true--downloadnewversion=trueWASABI-DOWNLOADNEWVERSION=true
      "StartLocalBitcoinCoreOnStartup": false--startlocalbitcoincoreonstartup=falseWASABI-STARTLOCALBITCOINCOREONSTARTUP=false
      "StopLocalBitcoinCoreOnShutdown": true--stoplocalbitcoincoreonshutdown=trueWASABI-STOPLOCALBITCOINCOREONSHUTDOWN=true
      "LocalBitcoinCoreDataDir": "/home/UserName/.bitcoin"--localbitcoincoredatadir="/home/UserName/.bitcoin"WASABI-LOCALBITCOINCOREDATADIR="/home/UserName/.bitcoin"
      "MainNetBitcoinP2pEndPoint": "127.0.0.1:8333"--mainnetbitcoinp2pendpoint="127.0.0.1:8333"WASABI-MAINNETBITCOINP2PENDPOINT="127.0.0.1:8333"
      "TestNetBitcoinP2pEndPoint": "127.0.0.1:18333"--testnetbitcoinp2pendpoint="127.0.0.1:18333"WASABI-TESTNETBITCOINP2PENDPOINT="127.0.0.1:18333"
      "RegTestBitcoinP2pEndPoint": "127.0.0.1:18444"--regtestbitcoinp2pendpoint="127.0.0.1:18444"WASABI-REGTESTBITCOINP2PENDPOINT="127.0.0.1:18444"
      "JsonRpcServerEnabled": "true"--jsonrpcserverenabled=trueWASABI-JSONRPCSERVERENABLED=true
      "JsonRpcUser": ""--jsonrpcuser=""WASABI-JSONRPCUSER=""
      "JsonRpcPassword": ""--jsonrpcpassword=""WASABI-JSONRPCPASSWORD=""
      "JsonRpcServerPrefixes":["http://127.0.0.1:37128/", "http://localhost:37128/"]--jsonrpcserverprefixes=["http://127.0.0.1:37128/", "http://localhost:37128/"]WASABI-JSONRPCSERVERPREFIXES=["http://127.0.0.1:37128/", "http://localhost:37128/"]
      "DustThreshold": "0.00005"--dustthreshold=0.00005WASABI-DUSTTHRESHOLD=0.00005
      "EnableGpu": true--enablegpu=trueWASABI-ENABLEGPU=true
      "CoordinatorIdentifier": "CoinJoinCoordinatorIdentifier"--coordinatoridentifier="coinjoincoordinatoridentifier"WASABI-COORDINATORIDENTIFIER="coinjoincoordinatoridentifier"

      Non-Config file configurations

      There are a few special switches that are not present in the Config.json file and are only available using the command line:

      SwitchCommand LineEnvironment variable
      Ignore P2P transactions--blockonly=trueWASABI-BLOCKONLY=true
      The level of detail used during logging--loglevel=traceWASABI-LOGLEVEL=trace
      The path to the directory used during runtime--datadir="$HOME/temp/wasabi-1"WASABI-DATADIR="$HOME/temp/wasabi-1"
      Open wallet "WalletName"--wallet=WalletNameWASABI--WALLET=WalletName
      Expose the RPC as onion service--rpconionenabled=trueWASABI-RPCONIONENABLED=true
      Tor will listen to this SOCKS5 port--torsocksport=35000WASABI-TORSOCKSPORT=35000
      Tor will listen to this control port--torcontrolport=35001WASABI-TORCONTROLPORT=35001
      ',7);function b(g,S){const i=n("router-link"),r=n("RouteLink");return u(),s("div",null,[q,t("nav",h,[t("ul",null,[t("li",null,[e(i,{to:"#available-commands"},{default:a(()=>[o("Available commands")]),_:1}),t("ul",null,[t("li",null,[e(i,{to:"#config-file-configurations"},{default:a(()=>[o("Config file configurations")]),_:1})]),t("li",null,[e(i,{to:"#non-config-file-configurations"},{default:a(()=>[o("Non-Config file configurations")]),_:1})])])])])]),p,f,m,t("p",null,[o("The parameters work for both the GUI and the "),e(r,{to:"/using-wasabi/Daemon.html"},{default:a(()=>[o("Daemon")]),_:1}),o(".")]),A])}const T=d(c,[["render",b],["__file","StartupParameters.html.vue"]]),I=JSON.parse('{"path":"/using-wasabi/StartupParameters.html","title":"Starting Wasabi with parameters","lang":"en-US","frontmatter":{"title":"Starting Wasabi with parameters","description":"A guide on starting Wasabi with parameters, using the command line interface. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Available commands","slug":"available-commands","link":"#available-commands","children":[{"level":3,"title":"Config file configurations","slug":"config-file-configurations","link":"#config-file-configurations","children":[]},{"level":3,"title":"Non-Config file configurations","slug":"non-config-file-configurations","link":"#non-config-file-configurations","children":[]}]}],"git":{"updatedTime":1709579021000},"filePathRelative":"using-wasabi/StartupParameters.md"}');export{T as comp,I as data}; diff --git a/assets/Testnet.html-DBlKd0gX.js b/assets/Testnet.html-PlH0_UrE.js similarity index 99% rename from assets/Testnet.html-DBlKd0gX.js rename to assets/Testnet.html-PlH0_UrE.js index 8aff2683f3..a3591f8050 100644 --- a/assets/Testnet.html-DBlKd0gX.js +++ b/assets/Testnet.html-PlH0_UrE.js @@ -1 +1 @@ -import{_ as c,r as l,o as r,c as d,a as t,d as n,w as i,b as e,e as h}from"./app-BPKesm5h.js";const u="/SettingsButton.png",b="/SettingsNetwork.png",p="/TestNetIndicator.png",_={},g=t("h1",{id:"testnet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#testnet"},[t("span",null,"Testnet")])],-1),f={class:"table-of-contents"},m=h('

      Bitcoin testnet

      The Bitcoin testnet is a network that behaves almost exactly the same as the Bitcoin mainnet. The major difference is that the bitcoin on the testnet do not have any economical value, they should not be used to buy or sell goods and services. This makes the network very useful for testing software and features, because there is no risk of losing precious "real" bitcoin from the main network.

      Don't loose your bitcoin

      When testing cutting edge software like Wasabi, use testnet to ensure that your mistakes don't cost you money!

      Activating testnet in Wasabi

      First, open your Wasabi Wallet and click the Settings button in the bottom left corner.

      Settings button

      Select the Bitcoin tab, click on the Network dropdown and select TestNet.

      Settings Network Dropdown

      Restart Wasabi to activate the change. After the restart, you should see the TestNet indicator in the top right corner of the wallet.

      Bitcoin testnet network activated in Wasabi Wallet

      ',10),w={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},v=t("p",null,"After the testing, set the settings back to mainnet, and close Wasabi. It will load on mainnet the next time you start it.",-1),k={class:"custom-container tip"},y=t("p",{class:"custom-container-title"},"TIP",-1),T=t("code",null,"Config.json",-1),W=t("code",null,'"Network":',-1),N=t("code",null,'"Main"',-1),x=t("code",null,'"TestNet"',-1),B=t("code",null,'"RegTest"',-1),j=t("h2",{id:"loading-a-wallet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#loading-a-wallet"},[t("span",null,"Loading a wallet")])],-1),S=t("p",null,"Wasabi differentiates between Mainnet and TestNet wallets. Meaning that a TestNet wallet will not show up when the Main network is active, and vice versa. You have to create a new wallet when you activate TestNet for the first time.",-1),R=t("h2",{id:"receiving-testnet-bitcoin",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#receiving-testnet-bitcoin"},[t("span",null,"Receiving testnet bitcoin")])],-1),A=t("code",null,"Receive",-1),C=t("code",null,"tb1q...",-1),I=t("code",null,"bc1q...",-1),L={href:"https://en.bitcoin.it/wiki/Testnet#Faucets",target:"_blank",rel:"noopener noreferrer"},F={href:"https://coinfaucet.eu/en/btc-testnet/",target:"_blank",rel:"noopener noreferrer"},q={href:"https://bitcoinfaucet.uo1.net/",target:"_blank",rel:"noopener noreferrer"},M=t("h2",{id:"coinjoin-on-testnet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#coinjoin-on-testnet"},[t("span",null,"Coinjoin on testnet")])],-1);function V(D,E){const o=l("router-link"),a=l("ExternalLinkIcon"),s=l("RouteLink");return r(),d("div",null,[g,t("nav",f,[t("ul",null,[t("li",null,[n(o,{to:"#bitcoin-testnet"},{default:i(()=>[e("Bitcoin testnet")]),_:1})]),t("li",null,[n(o,{to:"#activating-testnet-in-wasabi"},{default:i(()=>[e("Activating testnet in Wasabi")]),_:1})]),t("li",null,[n(o,{to:"#loading-a-wallet"},{default:i(()=>[e("Loading a wallet")]),_:1})]),t("li",null,[n(o,{to:"#receiving-testnet-bitcoin"},{default:i(()=>[e("Receiving testnet bitcoin")]),_:1})]),t("li",null,[n(o,{to:"#coinjoin-on-testnet"},{default:i(()=>[e("Coinjoin on testnet")]),_:1})])])]),m,t("p",null,[e("When Wasabi is started in testnet, it will fetch testnet "),t("a",w,[e("BIP 158 block filters"),n(a)]),e(" from the coordinator. For the first start, this may take a couple of minutes.")]),v,t("div",k,[y,t("p",null,[e("Alternatively, you can edit the "),T,e(" file in your "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#where-can-i-find-the-wasabi-data-folder"},{default:i(()=>[e("Wasabi data folder")]),_:1}),e(". In the second line you can modify the value of "),W,e(", to "),N,e(", "),x,e(", or "),B,e(". The changes will apply on the next launch of Wasabi.")])]),j,S,R,t("p",null,[e("You can "),n(s,{to:"/using-wasabi/Receive.html"},{default:i(()=>[e("generate a receive address")]),_:1}),e(" the same way as on mainnet, by labeling the known by entities in the "),A,e(" dialog. Notice that testnet SegWit addresses start with "),C,e(", and not with "),I,e(" as mainnet addresses.")]),t("p",null,[e("Because testnet bitcoin don't have economical value, they are gifted by different sources. There are "),t("a",L,[e("faucets"),n(a)]),e(" like "),t("a",F,[e("this one"),n(a)]),e(" or "),t("a",q,[e("bitcoinfaucet.uo1.net"),n(a)]),e(" that give a certain amount of testnet bitcoin per time period. You may also ask other developers if they have a couple of spare testnet coins available.")]),M,t("p",null,[n(s,{to:"/using-wasabi/CoinJoin.html"},{default:i(()=>[e("CoinJoin")]),_:1}),e(" on testnet is as easy as on mainnet. Usually there are other testers doing a coinjoin, but if you are the only one at the moment, then load two wallets and start coinjoining in both of them.")])])}const P=c(_,[["render",V],["__file","Testnet.html.vue"]]),U=JSON.parse('{"path":"/using-wasabi/Testnet.html","title":"Testnet","lang":"en-US","frontmatter":{"title":"Testnet","description":"A guide on how to use Wasabi on testnet. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Bitcoin testnet","slug":"bitcoin-testnet","link":"#bitcoin-testnet","children":[]},{"level":2,"title":"Activating testnet in Wasabi","slug":"activating-testnet-in-wasabi","link":"#activating-testnet-in-wasabi","children":[]},{"level":2,"title":"Loading a wallet","slug":"loading-a-wallet","link":"#loading-a-wallet","children":[]},{"level":2,"title":"Receiving testnet bitcoin","slug":"receiving-testnet-bitcoin","link":"#receiving-testnet-bitcoin","children":[]},{"level":2,"title":"Coinjoin on testnet","slug":"coinjoin-on-testnet","link":"#coinjoin-on-testnet","children":[]}],"git":{"updatedTime":1668949506000},"filePathRelative":"using-wasabi/Testnet.md"}');export{P as comp,U as data}; +import{_ as c,r as l,o as r,c as d,a as t,d as n,w as i,b as e,e as h}from"./app-BgbPjqpx.js";const u="/SettingsButton.png",b="/SettingsNetwork.png",p="/TestNetIndicator.png",_={},g=t("h1",{id:"testnet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#testnet"},[t("span",null,"Testnet")])],-1),f={class:"table-of-contents"},m=h('

      Bitcoin testnet

      The Bitcoin testnet is a network that behaves almost exactly the same as the Bitcoin mainnet. The major difference is that the bitcoin on the testnet do not have any economical value, they should not be used to buy or sell goods and services. This makes the network very useful for testing software and features, because there is no risk of losing precious "real" bitcoin from the main network.

      Don't loose your bitcoin

      When testing cutting edge software like Wasabi, use testnet to ensure that your mistakes don't cost you money!

      Activating testnet in Wasabi

      First, open your Wasabi Wallet and click the Settings button in the bottom left corner.

      Settings button

      Select the Bitcoin tab, click on the Network dropdown and select TestNet.

      Settings Network Dropdown

      Restart Wasabi to activate the change. After the restart, you should see the TestNet indicator in the top right corner of the wallet.

      Bitcoin testnet network activated in Wasabi Wallet

      ',10),w={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},v=t("p",null,"After the testing, set the settings back to mainnet, and close Wasabi. It will load on mainnet the next time you start it.",-1),k={class:"custom-container tip"},y=t("p",{class:"custom-container-title"},"TIP",-1),T=t("code",null,"Config.json",-1),W=t("code",null,'"Network":',-1),N=t("code",null,'"Main"',-1),x=t("code",null,'"TestNet"',-1),B=t("code",null,'"RegTest"',-1),j=t("h2",{id:"loading-a-wallet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#loading-a-wallet"},[t("span",null,"Loading a wallet")])],-1),S=t("p",null,"Wasabi differentiates between Mainnet and TestNet wallets. Meaning that a TestNet wallet will not show up when the Main network is active, and vice versa. You have to create a new wallet when you activate TestNet for the first time.",-1),R=t("h2",{id:"receiving-testnet-bitcoin",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#receiving-testnet-bitcoin"},[t("span",null,"Receiving testnet bitcoin")])],-1),A=t("code",null,"Receive",-1),C=t("code",null,"tb1q...",-1),I=t("code",null,"bc1q...",-1),L={href:"https://en.bitcoin.it/wiki/Testnet#Faucets",target:"_blank",rel:"noopener noreferrer"},F={href:"https://coinfaucet.eu/en/btc-testnet/",target:"_blank",rel:"noopener noreferrer"},q={href:"https://bitcoinfaucet.uo1.net/",target:"_blank",rel:"noopener noreferrer"},M=t("h2",{id:"coinjoin-on-testnet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#coinjoin-on-testnet"},[t("span",null,"Coinjoin on testnet")])],-1);function V(D,E){const o=l("router-link"),a=l("ExternalLinkIcon"),s=l("RouteLink");return r(),d("div",null,[g,t("nav",f,[t("ul",null,[t("li",null,[n(o,{to:"#bitcoin-testnet"},{default:i(()=>[e("Bitcoin testnet")]),_:1})]),t("li",null,[n(o,{to:"#activating-testnet-in-wasabi"},{default:i(()=>[e("Activating testnet in Wasabi")]),_:1})]),t("li",null,[n(o,{to:"#loading-a-wallet"},{default:i(()=>[e("Loading a wallet")]),_:1})]),t("li",null,[n(o,{to:"#receiving-testnet-bitcoin"},{default:i(()=>[e("Receiving testnet bitcoin")]),_:1})]),t("li",null,[n(o,{to:"#coinjoin-on-testnet"},{default:i(()=>[e("Coinjoin on testnet")]),_:1})])])]),m,t("p",null,[e("When Wasabi is started in testnet, it will fetch testnet "),t("a",w,[e("BIP 158 block filters"),n(a)]),e(" from the coordinator. For the first start, this may take a couple of minutes.")]),v,t("div",k,[y,t("p",null,[e("Alternatively, you can edit the "),T,e(" file in your "),n(s,{to:"/FAQ/FAQ-UseWasabi.html#where-can-i-find-the-wasabi-data-folder"},{default:i(()=>[e("Wasabi data folder")]),_:1}),e(". In the second line you can modify the value of "),W,e(", to "),N,e(", "),x,e(", or "),B,e(". The changes will apply on the next launch of Wasabi.")])]),j,S,R,t("p",null,[e("You can "),n(s,{to:"/using-wasabi/Receive.html"},{default:i(()=>[e("generate a receive address")]),_:1}),e(" the same way as on mainnet, by labeling the known by entities in the "),A,e(" dialog. Notice that testnet SegWit addresses start with "),C,e(", and not with "),I,e(" as mainnet addresses.")]),t("p",null,[e("Because testnet bitcoin don't have economical value, they are gifted by different sources. There are "),t("a",L,[e("faucets"),n(a)]),e(" like "),t("a",F,[e("this one"),n(a)]),e(" or "),t("a",q,[e("bitcoinfaucet.uo1.net"),n(a)]),e(" that give a certain amount of testnet bitcoin per time period. You may also ask other developers if they have a couple of spare testnet coins available.")]),M,t("p",null,[n(s,{to:"/using-wasabi/CoinJoin.html"},{default:i(()=>[e("CoinJoin")]),_:1}),e(" on testnet is as easy as on mainnet. Usually there are other testers doing a coinjoin, but if you are the only one at the moment, then load two wallets and start coinjoining in both of them.")])])}const P=c(_,[["render",V],["__file","Testnet.html.vue"]]),U=JSON.parse('{"path":"/using-wasabi/Testnet.html","title":"Testnet","lang":"en-US","frontmatter":{"title":"Testnet","description":"A guide on how to use Wasabi on testnet. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Bitcoin testnet","slug":"bitcoin-testnet","link":"#bitcoin-testnet","children":[]},{"level":2,"title":"Activating testnet in Wasabi","slug":"activating-testnet-in-wasabi","link":"#activating-testnet-in-wasabi","children":[]},{"level":2,"title":"Loading a wallet","slug":"loading-a-wallet","link":"#loading-a-wallet","children":[]},{"level":2,"title":"Receiving testnet bitcoin","slug":"receiving-testnet-bitcoin","link":"#receiving-testnet-bitcoin","children":[]},{"level":2,"title":"Coinjoin on testnet","slug":"coinjoin-on-testnet","link":"#coinjoin-on-testnet","children":[]}],"git":{"updatedTime":1668949506000},"filePathRelative":"using-wasabi/Testnet.md"}');export{P as comp,U as data}; diff --git a/assets/TransactionGraph.html-VbiBeIfs.js b/assets/TransactionGraph.html-mhL1IQAX.js similarity index 98% rename from assets/TransactionGraph.html-VbiBeIfs.js rename to assets/TransactionGraph.html-mhL1IQAX.js index 6a6a71bbd8..fd4b332b74 100644 --- a/assets/TransactionGraph.html-VbiBeIfs.js +++ b/assets/TransactionGraph.html-mhL1IQAX.js @@ -1 +1 @@ -import{_ as r,r as o,o as c,c as l,a as n,d as t,w as i,b as a,e as h}from"./app-BPKesm5h.js";const u={},d=n("h1",{id:"transaction-graph",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transaction-graph"},[n("span",null,"Transaction Graph")])],-1),p={class:"table-of-contents"},b=h('

      Problem

      Public transaction history

      Because of the input and output model of Bitcoin, there is a chain of digital signatures all the way from the coinbase reward to the current UTXO. This transaction history can reveal sensitive information about the spending patterns of individuals. The receiver of a coin can look back into the transaction history of the sender. And the sender can see the future spending of the receiver.

      Wasabi's Solution

      WabiSabi coinjoins

      ',5),f={href:"https://github.com/zkSNACKs/WabiSabi",target:"_blank",rel:"noopener noreferrer"},m=n("p",null,"This means that when sending an anonscore coin, the receiver does not know about the transaction history before the coinjoin. And when the receiver does a coinjoin himself, then the sender cannot spy on the later spending patterns. An outside observer can only guess the correct link at a rate of 1 in the anonscore, for example, 1-in-100, or 1%.",-1);function _(w,y){const e=o("router-link"),s=o("ExternalLinkIcon");return c(),l("div",null,[d,n("nav",p,[n("ul",null,[n("li",null,[t(e,{to:"#problem"},{default:i(()=>[a("Problem")]),_:1}),n("ul",null,[n("li",null,[t(e,{to:"#public-transaction-history"},{default:i(()=>[a("Public transaction history")]),_:1})])])]),n("li",null,[t(e,{to:"#wasabi-s-solution"},{default:i(()=>[a("Wasabi's Solution")]),_:1}),n("ul",null,[n("li",null,[t(e,{to:"#wabisabi-coinjoins"},{default:i(()=>[a("WabiSabi coinjoins")]),_:1})])])])])]),b,n("p",null,[a("In order to obfuscate the link between inputs and outputs, Wasabi uses the "),n("a",f,[a("WabiSabi"),t(s)]),a(" coinjoin protocol. The Wasabi central coordinator cannot steal and cannot spy, it simply helps many peers to build a huge transaction, with many inputs, and many outputs. The non-private inputs can be linked to their previous transaction history. However, the coinjoin outputs with an anonymity score cannot be tied to the inputs.")]),m])}const g=r(u,[["render",_],["__file","TransactionGraph.html.vue"]]),k=JSON.parse(`{"path":"/why-wasabi/TransactionGraph.html","title":"Transaction Graph","lang":"en-US","frontmatter":{"title":"Transaction Graph","description":"On how Bitcoin transactions are interconnected, how this is dangerous for privacy, and how to fix it. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Problem","slug":"problem","link":"#problem","children":[{"level":3,"title":"Public transaction history","slug":"public-transaction-history","link":"#public-transaction-history","children":[]}]},{"level":2,"title":"Wasabi's Solution","slug":"wasabi-s-solution","link":"#wasabi-s-solution","children":[{"level":3,"title":"WabiSabi coinjoins","slug":"wabisabi-coinjoins","link":"#wabisabi-coinjoins","children":[]}]}],"git":{"updatedTime":1668949506000},"filePathRelative":"why-wasabi/TransactionGraph.md"}`);export{g as comp,k as data}; +import{_ as r,r as o,o as c,c as l,a as n,d as t,w as i,b as a,e as h}from"./app-BgbPjqpx.js";const u={},d=n("h1",{id:"transaction-graph",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transaction-graph"},[n("span",null,"Transaction Graph")])],-1),p={class:"table-of-contents"},b=h('

      Problem

      Public transaction history

      Because of the input and output model of Bitcoin, there is a chain of digital signatures all the way from the coinbase reward to the current UTXO. This transaction history can reveal sensitive information about the spending patterns of individuals. The receiver of a coin can look back into the transaction history of the sender. And the sender can see the future spending of the receiver.

      Wasabi's Solution

      WabiSabi coinjoins

      ',5),f={href:"https://github.com/zkSNACKs/WabiSabi",target:"_blank",rel:"noopener noreferrer"},m=n("p",null,"This means that when sending an anonscore coin, the receiver does not know about the transaction history before the coinjoin. And when the receiver does a coinjoin himself, then the sender cannot spy on the later spending patterns. An outside observer can only guess the correct link at a rate of 1 in the anonscore, for example, 1-in-100, or 1%.",-1);function _(w,y){const e=o("router-link"),s=o("ExternalLinkIcon");return c(),l("div",null,[d,n("nav",p,[n("ul",null,[n("li",null,[t(e,{to:"#problem"},{default:i(()=>[a("Problem")]),_:1}),n("ul",null,[n("li",null,[t(e,{to:"#public-transaction-history"},{default:i(()=>[a("Public transaction history")]),_:1})])])]),n("li",null,[t(e,{to:"#wasabi-s-solution"},{default:i(()=>[a("Wasabi's Solution")]),_:1}),n("ul",null,[n("li",null,[t(e,{to:"#wabisabi-coinjoins"},{default:i(()=>[a("WabiSabi coinjoins")]),_:1})])])])])]),b,n("p",null,[a("In order to obfuscate the link between inputs and outputs, Wasabi uses the "),n("a",f,[a("WabiSabi"),t(s)]),a(" coinjoin protocol. The Wasabi central coordinator cannot steal and cannot spy, it simply helps many peers to build a huge transaction, with many inputs, and many outputs. The non-private inputs can be linked to their previous transaction history. However, the coinjoin outputs with an anonymity score cannot be tied to the inputs.")]),m])}const g=r(u,[["render",_],["__file","TransactionGraph.html.vue"]]),k=JSON.parse(`{"path":"/why-wasabi/TransactionGraph.html","title":"Transaction Graph","lang":"en-US","frontmatter":{"title":"Transaction Graph","description":"On how Bitcoin transactions are interconnected, how this is dangerous for privacy, and how to fix it. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Problem","slug":"problem","link":"#problem","children":[{"level":3,"title":"Public transaction history","slug":"public-transaction-history","link":"#public-transaction-history","children":[]}]},{"level":2,"title":"Wasabi's Solution","slug":"wasabi-s-solution","link":"#wasabi-s-solution","children":[{"level":3,"title":"WabiSabi coinjoins","slug":"wabisabi-coinjoins","link":"#wabisabi-coinjoins","children":[]}]}],"git":{"updatedTime":1668949506000},"filePathRelative":"why-wasabi/TransactionGraph.md"}`);export{g as comp,k as data}; diff --git a/assets/TransactionSurveillanceCompanies.html-DE_CC3SQ.js b/assets/TransactionSurveillanceCompanies.html-gyPMHDws.js similarity index 99% rename from assets/TransactionSurveillanceCompanies.html-DE_CC3SQ.js rename to assets/TransactionSurveillanceCompanies.html-gyPMHDws.js index 32f50a5a26..f82bbf8ab5 100644 --- a/assets/TransactionSurveillanceCompanies.html-DE_CC3SQ.js +++ b/assets/TransactionSurveillanceCompanies.html-gyPMHDws.js @@ -1 +1 @@ -import{_ as c,r,o as h,c as p,a as e,d as i,w as t,b as n,e as l}from"./app-BPKesm5h.js";const d={},u=e("h1",{id:"transaction-surveillance-companies",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transaction-surveillance-companies"},[e("span",null,"Transaction Surveillance Companies")])],-1),y=e("p",null,"A transaction surveillance company is one that attempts to spy on bitcoin users. Their business model is usually to sell the data to any governments, corporations and individuals willing to pay for their services.",-1),m={class:"table-of-contents"},f=l('

      Spying technology

      There are a number of techniques probably used by transaction surveillance companies:

      AML/KYC information

      Many bitcoin exchanges require users to undergo Anti-Money Laundering (AML) and Know-Your-Customer (KYC) checks, which requires users to reveal all kinds of invasive personal information such as their real name, residence, occupation, net worth and income. All this information is usually passed onto the exchange's partner transaction surveillance company, which keeps a database linking the victim's personal information with their bitcoin addresses and transactions.

      Blockchain analysis

      ',5),g=e("h3",{id:"wallet-synchronization-analysis",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wallet-synchronization-analysis"},[e("span",null,"Wallet synchronization analysis")])],-1),v={href:"https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki",target:"_blank",rel:"noopener noreferrer"},b=l('

      Transaction broadcasting

      Surveillance companies have been known to sybil and eclipse attack the bitcoin network, and specific nodes, in order to try to find the source IP addresses of unconfirmed transactions.

      Criticisms

      Attempt to invade privacy

      The right to privacy is recognized as a human right, for instance in the US constitution, European Union regulations and the Constitution of India.

      Financial privacy is an essential criteria for the efficient operation of a free market: if you run a business, you cannot effectively set prices if your suppliers and customers can see all your transactions against your will. You cannot compete effectively if your competition is tracking your sales. Individually your informational leverage is lost in your private dealings if you don't have privacy over your accounts: if you pay your landlord in Bitcoin without enough privacy in place, your landlord will see when you've received a pay raise and can hit you up for more rent.

      Financial privacy is essential for personal safety: if thieves can see your income, holdings, and spending, they can use that information to target and exploit you. Without privacy, malicious parties have more ability to steal your identity, snatch your packages from your doorstep, or impersonate businesses you transact with. They also know exactly how much to try to scam you for.

      Financial privacy is essential for human dignity: no one wants the snotty barista at the coffee shop or their nosy neighbors commenting on their income or spending habits. No one wants their baby-crazy in-laws asking why they're buying contraception (or sex toys). Your employer has no business knowing what church you donate to. Only in a perfectly enlightened discrimination-free world where no one has undue authority over anyone else could we retain our dignity and make our lawful transactions freely without self-censorship if we don't have privacy.

      Most importantly, financial privacy isn't incompatible with things like law enforcement or transparency. You can always keep records, be ordered (or volunteer) to provide them to whomever, have judges hold against your interest when you can't produce records (as is the case today). None of this requires globally visible public records.

      Globally visible public records in finance are completely unheard-of. They are undesirable and arguably intolerable. The Bitcoin whitepaper made a promise of how we could get around the visibility of the ledger with pseudonymous addresses, but the ecosystem has broken that promise in a bunch of places and we ought to fix it. Bitcoin could have coded your name or IP address into every transaction. It didn't. The whitepaper even has a section on privacy. Sufficient privacy is an essential prerequisite for a viable digital currency.

      Attempt to destroy fungibility

      ',11),w=l('

      No mechanism for oversight or appeal

      There appears to be no recourse for someone affected by false positive identification of exchange-disapproved transaction history. This could result in them wrongly having their coins confiscated.

      Jurisdiction

      Transaction surveillance company market themselves as a tool for finding "bad guys", but it's unclear which jurisdiction that applies to. For example, could one day the government of China pressure those companies into marking certain coins as "bad" because they belong to users who disagree with Chinese government policy?

      Incentivized to oppose bitcoin updates

      During the deployment of segregated witness, certain transaction surveillance companies were believed to have spread misinformation about it, because the update enables Lightning Network. The companies saw it as a threat to their business, since it can enable transacting with bitcoin more privately.

      Oversold effectiveness

      Transaction surveillance companies rely on heuristics or assumptions when analyzing the blockchain. These heuristics are sometimes not true, for example, the common-input-ownership heuristic is broken by CoinJoin. Even if that heuristic is true, it still requires actually identifying the cluster, which is not always possible.

      Laws surrounding anti-money-laundering typically require businesses to make reasonable efforts to investigate the source of funds. Usually, the transaction surveillance company's customers simply want to legally protect themselves, regardless of whether the surveillance actually works. There is a lot of money in this space from governments and other authorities, who usually don't understand the underlying technology and are happy to throw money at several startups who claim to be able to accurately track everything. Whether the activities of transaction surveillance companies actually help against money laundering is an open question.

      image

      ',10),_={href:"https://blog.chainalysis.com/reports/2021-crypto-crime-report-intro-ransomware-scams-darknet-markets",target:"_blank",rel:"noopener noreferrer"},k=e("h2",{id:"examples",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#examples"},[e("span",null,"Examples")])],-1),x={href:"https://www.chainalysis.com/",target:"_blank",rel:"noopener noreferrer"},T={href:"https://www.elliptic.co/",target:"_blank",rel:"noopener noreferrer"},C={href:"https://www.neutrino.nu/",target:"_blank",rel:"noopener noreferrer"},z={href:"https://www.coinfirm.io/",target:"_blank",rel:"noopener noreferrer"},A={href:"https://blockchaingroup.io/",target:"_blank",rel:"noopener noreferrer"},B={href:"https://ciphertrace.com/",target:"_blank",rel:"noopener noreferrer"},S={href:"https://complyadvantage.com/aml-crypto-compliance/",target:"_blank",rel:"noopener noreferrer"},q={href:"https://www.idology.com/solutions/compliance/",target:"_blank",rel:"noopener noreferrer"},I={href:"https://elementus.io/",target:"_blank",rel:"noopener noreferrer"},E={href:"https://dmgblockchain.com/",target:"_blank",rel:"noopener noreferrer"},N={href:"https://www.scorechain.com/",target:"_blank",rel:"noopener noreferrer"},L={href:"https://crystalblockchain.com/",target:"_blank",rel:"noopener noreferrer"},P=e("li",null,"Coinvalidation",-1);function Y(j,M){const o=r("router-link"),s=r("RouteLink"),a=r("ExternalLinkIcon");return h(),p("div",null,[u,y,e("nav",m,[e("ul",null,[e("li",null,[i(o,{to:"#spying-technology"},{default:t(()=>[n("Spying technology")]),_:1}),e("ul",null,[e("li",null,[i(o,{to:"#aml-kyc-information"},{default:t(()=>[n("AML/KYC information")]),_:1})]),e("li",null,[i(o,{to:"#blockchain-analysis"},{default:t(()=>[n("Blockchain analysis")]),_:1})]),e("li",null,[i(o,{to:"#wallet-synchronization-analysis"},{default:t(()=>[n("Wallet synchronization analysis")]),_:1})]),e("li",null,[i(o,{to:"#transaction-broadcasting"},{default:t(()=>[n("Transaction broadcasting")]),_:1})])])]),e("li",null,[i(o,{to:"#criticisms"},{default:t(()=>[n("Criticisms")]),_:1}),e("ul",null,[e("li",null,[i(o,{to:"#attempt-to-invade-privacy"},{default:t(()=>[n("Attempt to invade privacy")]),_:1})]),e("li",null,[i(o,{to:"#attempt-to-destroy-fungibility"},{default:t(()=>[n("Attempt to destroy fungibility")]),_:1})]),e("li",null,[i(o,{to:"#no-mechanism-for-oversight-or-appeal"},{default:t(()=>[n("No mechanism for oversight or appeal")]),_:1})]),e("li",null,[i(o,{to:"#jurisdiction"},{default:t(()=>[n("Jurisdiction")]),_:1})]),e("li",null,[i(o,{to:"#incentivized-to-oppose-bitcoin-updates"},{default:t(()=>[n("Incentivized to oppose bitcoin updates")]),_:1})]),e("li",null,[i(o,{to:"#oversold-effectiveness"},{default:t(()=>[n("Oversold effectiveness")]),_:1})])])]),e("li",null,[i(o,{to:"#examples"},{default:t(()=>[n("Examples")]),_:1})])])]),f,e("p",null,[n("Bitcoin on-chain transactions are visible to all and so can be analyzed. Important techniques are the "),i(s,{to:"/glossary/Glossary-PrivacyWasabi.html#common-input-ownership-heuristic"},{default:t(()=>[n("common-input-ownership")]),_:1}),n(" heuristic and "),i(s,{to:"/why-wasabi/AddressReuse.html"},{default:t(()=>[n("address reuse")]),_:1}),n(".")]),g,e("p",null,[n("Bitcoin lightweight wallets often download their own history and balance by querying a third-party server. Transaction surveillance companies often try to exploit this to learn which addresses and transactions belong to certain wallets and IPs. The companies have been known to collect "),e("a",v,[n("BIP 37"),i(a)]),n(" filters from BIP37-enabled wallets. They almost-certainly also run many Electrum servers which can spy on any Electrum wallet that connects to them.")]),b,e("p",null,[n("Privacy invasions can lead to damaging or destroying bitcoin "),i(s,{to:"/glossary/Glossary-GeneralBitcoin.html#fungibility"},{default:t(()=>[n("fungibility")]),_:1}),n(". The aim of bitcoin is to be a decentralized digital currency, but if all users are eventually required to consult centralized blacklists before accepting bitcoin, then its decentralization will be destroyed.")]),e("p",null,[i(s,{to:"/FAQ/FAQ-GeneralBitcoinPrivacy.html#how-is-financial-privacy-an-essential-element-to-fungibility-in-bitcoin"},{default:t(()=>[n("How is financial privacy an essential element to fungibility in Bitcoin?")]),_:1})]),w,e("p",null,[e("em",null,[n("According to an excerpt from Chainalysis in their "),e("a",_,[n("2021 report"),i(a)]),n(", in 2019, criminal activity represented only 2.1% of all cryptocurrency transaction volume.")])]),k,e("ul",null,[e("li",null,[e("a",x,[n("Chainanalysis"),i(a)])]),e("li",null,[e("a",T,[n("Elliptic"),i(a)])]),e("li",null,[e("a",C,[n("Neutrino"),i(a)])]),e("li",null,[e("a",z,[n("Coinfirm"),i(a)])]),e("li",null,[e("a",A,[n("Blockchain Group"),i(a)])]),e("li",null,[e("a",B,[n("Ciphertrace"),i(a)])]),e("li",null,[e("a",S,[n("Comply Advantage"),i(a)])]),e("li",null,[e("a",q,[n("Idology"),i(a)])]),e("li",null,[e("a",I,[n("Elementus"),i(a)])]),e("li",null,[e("a",E,[n("DmgBlockchain"),i(a)])]),e("li",null,[e("a",N,[n("ScoreChain"),i(a)])]),e("li",null,[e("a",L,[n("Crystal"),i(a)])]),P])])}const F=c(d,[["render",Y],["__file","TransactionSurveillanceCompanies.html.vue"]]),G=JSON.parse('{"path":"/why-wasabi/TransactionSurveillanceCompanies.html","title":"Transaction Surveillance Companies","lang":"en-US","frontmatter":{"title":"Transaction Surveillance Companies","description":"An explanation of transaction surveillance companies and a list of the most known ones. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Spying technology","slug":"spying-technology","link":"#spying-technology","children":[{"level":3,"title":"AML/KYC information","slug":"aml-kyc-information","link":"#aml-kyc-information","children":[]},{"level":3,"title":"Blockchain analysis","slug":"blockchain-analysis","link":"#blockchain-analysis","children":[]},{"level":3,"title":"Wallet synchronization analysis","slug":"wallet-synchronization-analysis","link":"#wallet-synchronization-analysis","children":[]},{"level":3,"title":"Transaction broadcasting","slug":"transaction-broadcasting","link":"#transaction-broadcasting","children":[]}]},{"level":2,"title":"Criticisms","slug":"criticisms","link":"#criticisms","children":[{"level":3,"title":"Attempt to invade privacy","slug":"attempt-to-invade-privacy","link":"#attempt-to-invade-privacy","children":[]},{"level":3,"title":"Attempt to destroy fungibility","slug":"attempt-to-destroy-fungibility","link":"#attempt-to-destroy-fungibility","children":[]},{"level":3,"title":"No mechanism for oversight or appeal","slug":"no-mechanism-for-oversight-or-appeal","link":"#no-mechanism-for-oversight-or-appeal","children":[]},{"level":3,"title":"Jurisdiction","slug":"jurisdiction","link":"#jurisdiction","children":[]},{"level":3,"title":"Incentivized to oppose bitcoin updates","slug":"incentivized-to-oppose-bitcoin-updates","link":"#incentivized-to-oppose-bitcoin-updates","children":[]},{"level":3,"title":"Oversold effectiveness","slug":"oversold-effectiveness","link":"#oversold-effectiveness","children":[]}]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"updatedTime":1682263530000},"filePathRelative":"why-wasabi/TransactionSurveillanceCompanies.md"}');export{F as comp,G as data}; +import{_ as c,r,o as h,c as p,a as e,d as i,w as t,b as n,e as l}from"./app-BgbPjqpx.js";const d={},u=e("h1",{id:"transaction-surveillance-companies",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transaction-surveillance-companies"},[e("span",null,"Transaction Surveillance Companies")])],-1),y=e("p",null,"A transaction surveillance company is one that attempts to spy on bitcoin users. Their business model is usually to sell the data to any governments, corporations and individuals willing to pay for their services.",-1),m={class:"table-of-contents"},f=l('

      Spying technology

      There are a number of techniques probably used by transaction surveillance companies:

      AML/KYC information

      Many bitcoin exchanges require users to undergo Anti-Money Laundering (AML) and Know-Your-Customer (KYC) checks, which requires users to reveal all kinds of invasive personal information such as their real name, residence, occupation, net worth and income. All this information is usually passed onto the exchange's partner transaction surveillance company, which keeps a database linking the victim's personal information with their bitcoin addresses and transactions.

      Blockchain analysis

      ',5),g=e("h3",{id:"wallet-synchronization-analysis",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wallet-synchronization-analysis"},[e("span",null,"Wallet synchronization analysis")])],-1),v={href:"https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki",target:"_blank",rel:"noopener noreferrer"},b=l('

      Transaction broadcasting

      Surveillance companies have been known to sybil and eclipse attack the bitcoin network, and specific nodes, in order to try to find the source IP addresses of unconfirmed transactions.

      Criticisms

      Attempt to invade privacy

      The right to privacy is recognized as a human right, for instance in the US constitution, European Union regulations and the Constitution of India.

      Financial privacy is an essential criteria for the efficient operation of a free market: if you run a business, you cannot effectively set prices if your suppliers and customers can see all your transactions against your will. You cannot compete effectively if your competition is tracking your sales. Individually your informational leverage is lost in your private dealings if you don't have privacy over your accounts: if you pay your landlord in Bitcoin without enough privacy in place, your landlord will see when you've received a pay raise and can hit you up for more rent.

      Financial privacy is essential for personal safety: if thieves can see your income, holdings, and spending, they can use that information to target and exploit you. Without privacy, malicious parties have more ability to steal your identity, snatch your packages from your doorstep, or impersonate businesses you transact with. They also know exactly how much to try to scam you for.

      Financial privacy is essential for human dignity: no one wants the snotty barista at the coffee shop or their nosy neighbors commenting on their income or spending habits. No one wants their baby-crazy in-laws asking why they're buying contraception (or sex toys). Your employer has no business knowing what church you donate to. Only in a perfectly enlightened discrimination-free world where no one has undue authority over anyone else could we retain our dignity and make our lawful transactions freely without self-censorship if we don't have privacy.

      Most importantly, financial privacy isn't incompatible with things like law enforcement or transparency. You can always keep records, be ordered (or volunteer) to provide them to whomever, have judges hold against your interest when you can't produce records (as is the case today). None of this requires globally visible public records.

      Globally visible public records in finance are completely unheard-of. They are undesirable and arguably intolerable. The Bitcoin whitepaper made a promise of how we could get around the visibility of the ledger with pseudonymous addresses, but the ecosystem has broken that promise in a bunch of places and we ought to fix it. Bitcoin could have coded your name or IP address into every transaction. It didn't. The whitepaper even has a section on privacy. Sufficient privacy is an essential prerequisite for a viable digital currency.

      Attempt to destroy fungibility

      ',11),w=l('

      No mechanism for oversight or appeal

      There appears to be no recourse for someone affected by false positive identification of exchange-disapproved transaction history. This could result in them wrongly having their coins confiscated.

      Jurisdiction

      Transaction surveillance company market themselves as a tool for finding "bad guys", but it's unclear which jurisdiction that applies to. For example, could one day the government of China pressure those companies into marking certain coins as "bad" because they belong to users who disagree with Chinese government policy?

      Incentivized to oppose bitcoin updates

      During the deployment of segregated witness, certain transaction surveillance companies were believed to have spread misinformation about it, because the update enables Lightning Network. The companies saw it as a threat to their business, since it can enable transacting with bitcoin more privately.

      Oversold effectiveness

      Transaction surveillance companies rely on heuristics or assumptions when analyzing the blockchain. These heuristics are sometimes not true, for example, the common-input-ownership heuristic is broken by CoinJoin. Even if that heuristic is true, it still requires actually identifying the cluster, which is not always possible.

      Laws surrounding anti-money-laundering typically require businesses to make reasonable efforts to investigate the source of funds. Usually, the transaction surveillance company's customers simply want to legally protect themselves, regardless of whether the surveillance actually works. There is a lot of money in this space from governments and other authorities, who usually don't understand the underlying technology and are happy to throw money at several startups who claim to be able to accurately track everything. Whether the activities of transaction surveillance companies actually help against money laundering is an open question.

      image

      ',10),_={href:"https://blog.chainalysis.com/reports/2021-crypto-crime-report-intro-ransomware-scams-darknet-markets",target:"_blank",rel:"noopener noreferrer"},k=e("h2",{id:"examples",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#examples"},[e("span",null,"Examples")])],-1),x={href:"https://www.chainalysis.com/",target:"_blank",rel:"noopener noreferrer"},T={href:"https://www.elliptic.co/",target:"_blank",rel:"noopener noreferrer"},C={href:"https://www.neutrino.nu/",target:"_blank",rel:"noopener noreferrer"},z={href:"https://www.coinfirm.io/",target:"_blank",rel:"noopener noreferrer"},A={href:"https://blockchaingroup.io/",target:"_blank",rel:"noopener noreferrer"},B={href:"https://ciphertrace.com/",target:"_blank",rel:"noopener noreferrer"},S={href:"https://complyadvantage.com/aml-crypto-compliance/",target:"_blank",rel:"noopener noreferrer"},q={href:"https://www.idology.com/solutions/compliance/",target:"_blank",rel:"noopener noreferrer"},I={href:"https://elementus.io/",target:"_blank",rel:"noopener noreferrer"},E={href:"https://dmgblockchain.com/",target:"_blank",rel:"noopener noreferrer"},N={href:"https://www.scorechain.com/",target:"_blank",rel:"noopener noreferrer"},L={href:"https://crystalblockchain.com/",target:"_blank",rel:"noopener noreferrer"},P=e("li",null,"Coinvalidation",-1);function Y(j,M){const o=r("router-link"),s=r("RouteLink"),a=r("ExternalLinkIcon");return h(),p("div",null,[u,y,e("nav",m,[e("ul",null,[e("li",null,[i(o,{to:"#spying-technology"},{default:t(()=>[n("Spying technology")]),_:1}),e("ul",null,[e("li",null,[i(o,{to:"#aml-kyc-information"},{default:t(()=>[n("AML/KYC information")]),_:1})]),e("li",null,[i(o,{to:"#blockchain-analysis"},{default:t(()=>[n("Blockchain analysis")]),_:1})]),e("li",null,[i(o,{to:"#wallet-synchronization-analysis"},{default:t(()=>[n("Wallet synchronization analysis")]),_:1})]),e("li",null,[i(o,{to:"#transaction-broadcasting"},{default:t(()=>[n("Transaction broadcasting")]),_:1})])])]),e("li",null,[i(o,{to:"#criticisms"},{default:t(()=>[n("Criticisms")]),_:1}),e("ul",null,[e("li",null,[i(o,{to:"#attempt-to-invade-privacy"},{default:t(()=>[n("Attempt to invade privacy")]),_:1})]),e("li",null,[i(o,{to:"#attempt-to-destroy-fungibility"},{default:t(()=>[n("Attempt to destroy fungibility")]),_:1})]),e("li",null,[i(o,{to:"#no-mechanism-for-oversight-or-appeal"},{default:t(()=>[n("No mechanism for oversight or appeal")]),_:1})]),e("li",null,[i(o,{to:"#jurisdiction"},{default:t(()=>[n("Jurisdiction")]),_:1})]),e("li",null,[i(o,{to:"#incentivized-to-oppose-bitcoin-updates"},{default:t(()=>[n("Incentivized to oppose bitcoin updates")]),_:1})]),e("li",null,[i(o,{to:"#oversold-effectiveness"},{default:t(()=>[n("Oversold effectiveness")]),_:1})])])]),e("li",null,[i(o,{to:"#examples"},{default:t(()=>[n("Examples")]),_:1})])])]),f,e("p",null,[n("Bitcoin on-chain transactions are visible to all and so can be analyzed. Important techniques are the "),i(s,{to:"/glossary/Glossary-PrivacyWasabi.html#common-input-ownership-heuristic"},{default:t(()=>[n("common-input-ownership")]),_:1}),n(" heuristic and "),i(s,{to:"/why-wasabi/AddressReuse.html"},{default:t(()=>[n("address reuse")]),_:1}),n(".")]),g,e("p",null,[n("Bitcoin lightweight wallets often download their own history and balance by querying a third-party server. Transaction surveillance companies often try to exploit this to learn which addresses and transactions belong to certain wallets and IPs. The companies have been known to collect "),e("a",v,[n("BIP 37"),i(a)]),n(" filters from BIP37-enabled wallets. They almost-certainly also run many Electrum servers which can spy on any Electrum wallet that connects to them.")]),b,e("p",null,[n("Privacy invasions can lead to damaging or destroying bitcoin "),i(s,{to:"/glossary/Glossary-GeneralBitcoin.html#fungibility"},{default:t(()=>[n("fungibility")]),_:1}),n(". The aim of bitcoin is to be a decentralized digital currency, but if all users are eventually required to consult centralized blacklists before accepting bitcoin, then its decentralization will be destroyed.")]),e("p",null,[i(s,{to:"/FAQ/FAQ-GeneralBitcoinPrivacy.html#how-is-financial-privacy-an-essential-element-to-fungibility-in-bitcoin"},{default:t(()=>[n("How is financial privacy an essential element to fungibility in Bitcoin?")]),_:1})]),w,e("p",null,[e("em",null,[n("According to an excerpt from Chainalysis in their "),e("a",_,[n("2021 report"),i(a)]),n(", in 2019, criminal activity represented only 2.1% of all cryptocurrency transaction volume.")])]),k,e("ul",null,[e("li",null,[e("a",x,[n("Chainanalysis"),i(a)])]),e("li",null,[e("a",T,[n("Elliptic"),i(a)])]),e("li",null,[e("a",C,[n("Neutrino"),i(a)])]),e("li",null,[e("a",z,[n("Coinfirm"),i(a)])]),e("li",null,[e("a",A,[n("Blockchain Group"),i(a)])]),e("li",null,[e("a",B,[n("Ciphertrace"),i(a)])]),e("li",null,[e("a",S,[n("Comply Advantage"),i(a)])]),e("li",null,[e("a",q,[n("Idology"),i(a)])]),e("li",null,[e("a",I,[n("Elementus"),i(a)])]),e("li",null,[e("a",E,[n("DmgBlockchain"),i(a)])]),e("li",null,[e("a",N,[n("ScoreChain"),i(a)])]),e("li",null,[e("a",L,[n("Crystal"),i(a)])]),P])])}const F=c(d,[["render",Y],["__file","TransactionSurveillanceCompanies.html.vue"]]),G=JSON.parse('{"path":"/why-wasabi/TransactionSurveillanceCompanies.html","title":"Transaction Surveillance Companies","lang":"en-US","frontmatter":{"title":"Transaction Surveillance Companies","description":"An explanation of transaction surveillance companies and a list of the most known ones. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Spying technology","slug":"spying-technology","link":"#spying-technology","children":[{"level":3,"title":"AML/KYC information","slug":"aml-kyc-information","link":"#aml-kyc-information","children":[]},{"level":3,"title":"Blockchain analysis","slug":"blockchain-analysis","link":"#blockchain-analysis","children":[]},{"level":3,"title":"Wallet synchronization analysis","slug":"wallet-synchronization-analysis","link":"#wallet-synchronization-analysis","children":[]},{"level":3,"title":"Transaction broadcasting","slug":"transaction-broadcasting","link":"#transaction-broadcasting","children":[]}]},{"level":2,"title":"Criticisms","slug":"criticisms","link":"#criticisms","children":[{"level":3,"title":"Attempt to invade privacy","slug":"attempt-to-invade-privacy","link":"#attempt-to-invade-privacy","children":[]},{"level":3,"title":"Attempt to destroy fungibility","slug":"attempt-to-destroy-fungibility","link":"#attempt-to-destroy-fungibility","children":[]},{"level":3,"title":"No mechanism for oversight or appeal","slug":"no-mechanism-for-oversight-or-appeal","link":"#no-mechanism-for-oversight-or-appeal","children":[]},{"level":3,"title":"Jurisdiction","slug":"jurisdiction","link":"#jurisdiction","children":[]},{"level":3,"title":"Incentivized to oppose bitcoin updates","slug":"incentivized-to-oppose-bitcoin-updates","link":"#incentivized-to-oppose-bitcoin-updates","children":[]},{"level":3,"title":"Oversold effectiveness","slug":"oversold-effectiveness","link":"#oversold-effectiveness","children":[]}]},{"level":2,"title":"Examples","slug":"examples","link":"#examples","children":[]}],"git":{"updatedTime":1682263530000},"filePathRelative":"why-wasabi/TransactionSurveillanceCompanies.md"}');export{F as comp,G as data}; diff --git a/assets/WalletGeneration.html-DM5zNUbr.js b/assets/WalletGeneration.html-BYYxvj2X.js similarity index 99% rename from assets/WalletGeneration.html-DM5zNUbr.js rename to assets/WalletGeneration.html-BYYxvj2X.js index 2809a980b5..b36011b785 100644 --- a/assets/WalletGeneration.html-DM5zNUbr.js +++ b/assets/WalletGeneration.html-BYYxvj2X.js @@ -1,4 +1,4 @@ -import{_ as d,a as c,b as u}from"./AddWalletAddPassphrase-M0V8PDu3.js";import{_ as h,a as p}from"./AddWalletConfirmRecoveryWords-DoQpsOos.js";import{_ as m}from"./CoinjoinStrategy-BZrDbG5n.js";import{_ as b,r as l,o as v,c as w,a as e,d as a,w as n,b as t,e as o}from"./app-BPKesm5h.js";const y="/AddWalletSuccessfullyAdded.png",_={},g=e("h1",{id:"wallet-generation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wallet-generation"},[e("span",null,"Wallet Generation")])],-1),f={class:"table-of-contents"},k=o('

      Introduction

      With Wasabi you can generate an unlimited number of Bitcoin wallets very quickly, without any cost, and without asking anyone for permission. Each wallet has separate private and public keys in a unique backup, and they are not at all linked to the other wallets generated on the same computer. So, with several wallets, you can conveniently manage your bitcoin for different use cases without worrying about revealing that you control them.

      Generating the wallet step-by-step

      1. Launch Wasabi Wallet. The very first time you run the software the Add Wallet dialog will be open automatically, but you can also access it by clicking on Add Wallet in the NavBar or Searchbar.

      2. Click Create a new wallet to generate a new wallet.

      Add a Bitcoin wallet with Wasabi

      1. Give the wallet a name. This name is not shared with anyone, it is only stored locally on your computer. (If there are no wallets then this step is skipped and the new wallet will automatically be named Wallet) Click Continue.

      Add Wallet Wallet Name

      ',7),W={start:"4"},P=e("strong",null,"together with",-1),x={href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",target:"_blank",rel:"noopener noreferrer"},S=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"Back up your recovery words!"),e("p",null,"Without the recovery words (Seed phrase) AND the passphrase, you cannot recover your wallet. So, triple-check that you have a proper backup! Make sure the backup of your recovery words is stored separately from the passphrase backup.")],-1),B=e("p",null,[e("img",{src:h,alt:"Wasabi Wallet recovery words",title:"Wasabi Wallet recovery words"})],-1),A=e("ol",{start:"5"},[e("li",null,[t("You must confirm the Recovery Words by clicking on the right word in the right order, as a check to make sure that your Recovery Words are backed up. So, confirm the Recovery Words, and click "),e("code",null,"Continue"),t(".")])],-1),I=e("p",null,[e("img",{src:p,alt:"Wasabi Wallet confirm recovery words",title:"Wasabi Wallet confirm recovery words"})],-1),C={start:"6"},G=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"Back up your password!"),e("p",null,"Without the passphrase, you cannot spend your bitcoin or recover your wallet, even if you have the recovery words (Seed phrase). So, triple-check that you have a proper backup!")],-1),N=e("li",null,[e("p",null,[t("Confirm the password and click the "),e("code",null,"Continue"),t(" button.")])],-1),E=o('

      Wasabi Wallet Add Password

      1. Select the coinjoin strategy for this wallet and click Continue.

      Add Wallet Coinjoin Strategy

      1. The wallet is succesfully added and will automatically be opened.

      Wallet Successfully Added

      Important info about your wallet password

      ',6),T={href:"https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki",target:"_blank",rel:"noopener noreferrer"},R=e("strong",null,"both",-1),L=e("h2",{id:"how-are-the-secrets-created",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-are-the-secrets-created"},[e("span",null,"How are the secrets created")])],-1),V={href:"https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki",target:"_blank",rel:"noopener noreferrer"},j=o(`
                            +--------------+
      +import{_ as d,a as c,b as u}from"./AddWalletAddPassphrase-M0V8PDu3.js";import{_ as h,a as p}from"./AddWalletConfirmRecoveryWords-DoQpsOos.js";import{_ as m}from"./CoinjoinStrategy-BZrDbG5n.js";import{_ as b,r as l,o as v,c as w,a as e,d as a,w as n,b as t,e as o}from"./app-BgbPjqpx.js";const y="/AddWalletSuccessfullyAdded.png",_={},g=e("h1",{id:"wallet-generation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wallet-generation"},[e("span",null,"Wallet Generation")])],-1),f={class:"table-of-contents"},k=o('

      Introduction

      With Wasabi you can generate an unlimited number of Bitcoin wallets very quickly, without any cost, and without asking anyone for permission. Each wallet has separate private and public keys in a unique backup, and they are not at all linked to the other wallets generated on the same computer. So, with several wallets, you can conveniently manage your bitcoin for different use cases without worrying about revealing that you control them.

      Generating the wallet step-by-step

      1. Launch Wasabi Wallet. The very first time you run the software the Add Wallet dialog will be open automatically, but you can also access it by clicking on Add Wallet in the NavBar or Searchbar.

      2. Click Create a new wallet to generate a new wallet.

      Add a Bitcoin wallet with Wasabi

      1. Give the wallet a name. This name is not shared with anyone, it is only stored locally on your computer. (If there are no wallets then this step is skipped and the new wallet will automatically be named Wallet) Click Continue.

      Add Wallet Wallet Name

      ',7),W={start:"4"},P=e("strong",null,"together with",-1),x={href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",target:"_blank",rel:"noopener noreferrer"},S=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"Back up your recovery words!"),e("p",null,"Without the recovery words (Seed phrase) AND the passphrase, you cannot recover your wallet. So, triple-check that you have a proper backup! Make sure the backup of your recovery words is stored separately from the passphrase backup.")],-1),B=e("p",null,[e("img",{src:h,alt:"Wasabi Wallet recovery words",title:"Wasabi Wallet recovery words"})],-1),A=e("ol",{start:"5"},[e("li",null,[t("You must confirm the Recovery Words by clicking on the right word in the right order, as a check to make sure that your Recovery Words are backed up. So, confirm the Recovery Words, and click "),e("code",null,"Continue"),t(".")])],-1),I=e("p",null,[e("img",{src:p,alt:"Wasabi Wallet confirm recovery words",title:"Wasabi Wallet confirm recovery words"})],-1),C={start:"6"},G=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"Back up your password!"),e("p",null,"Without the passphrase, you cannot spend your bitcoin or recover your wallet, even if you have the recovery words (Seed phrase). So, triple-check that you have a proper backup!")],-1),N=e("li",null,[e("p",null,[t("Confirm the password and click the "),e("code",null,"Continue"),t(" button.")])],-1),E=o('

      Wasabi Wallet Add Password

      1. Select the coinjoin strategy for this wallet and click Continue.

      Add Wallet Coinjoin Strategy

      1. The wallet is succesfully added and will automatically be opened.

      Wallet Successfully Added

      Important info about your wallet password

      ',6),T={href:"https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki",target:"_blank",rel:"noopener noreferrer"},R=e("strong",null,"both",-1),L=e("h2",{id:"how-are-the-secrets-created",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-are-the-secrets-created"},[e("span",null,"How are the secrets created")])],-1),V={href:"https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki",target:"_blank",rel:"noopener noreferrer"},j=o(`
                            +--------------+
                             | Entropy      |
                             +--------------+
         +------------+             |
      diff --git a/assets/WalletLoad.html-BVn8n-Hp.js b/assets/WalletLoad.html-JBYidTLT.js
      similarity index 99%
      rename from assets/WalletLoad.html-BVn8n-Hp.js
      rename to assets/WalletLoad.html-JBYidTLT.js
      index b8aff775ec..7da26bcfc6 100644
      --- a/assets/WalletLoad.html-BVn8n-Hp.js
      +++ b/assets/WalletLoad.html-JBYidTLT.js
      @@ -1 +1 @@
      -import{_ as d}from"./WalletSynchronizing-Bg2Cuco7.js";import{_ as c,r as o,o as h,c as u,a as e,d as a,w as l,b as t,e as i}from"./app-BPKesm5h.js";const p="/WalletOpen.png",f={},w=e("h1",{id:"wallet-load",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wallet-load"},[e("span",null,"Wallet Load")])],-1),b={class:"table-of-contents"},y=e("h2",{id:"loading-wallet-step-by-step",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#loading-wallet-step-by-step"},[e("span",null,"Loading wallet step-by-step")])],-1),g=e("p",null,"To load a wallet and start the synchonization process, you need to open your wallet by typing in the password. The first time synchronization of your wallet might take some time depending on the size of its history.",-1),m=e("h3",{id:"wallet-list",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wallet-list"},[e("span",null,"Wallet list")])],-1),_=e("code",null,"Wallet list",-1),k=i('

      Click the wallet you want to view, type in the password and press Open.

      Type your password to open the wallet

      Synchronization

      Filter download

      ',4),v={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},W=i('

      Wallet is synchronizing itself with the Bitcoin network

      Filter scanning

      When you load a wallet, it checks if the generated addresses within the gap limit hit against a block filter. Most filters do not hit, and then the wallet is certain that this block does not contain a transaction of yours so it will not download it. If a transaction of yours is in a block, then the corresponding filter will always be hit, and the wallet will know this is a relevant block for you. There can be a small chance for a false positive where the filter matches, but the block actually does not contain a transaction.

      Block download

      ',4),z=e("h3",{id:"turbosync",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#turbosync"},[e("span",null,"TurboSync")])],-1),T={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.4",target:"_blank",rel:"noopener noreferrer"},x=e("em",null,"TurboSync",-1),S=e("em",null,"TurboSync",-1),L=i('

      During a coinjoin, a new address (key) has to be generated for each output. As a result, wallets that use the coinjoin service a lot have a quickly growing set of generated addresses. This is a problem for wallet synchronization: each address has to be tested against each filter, with a small probability of matching as false-positive for every address. As a result, wallets with many derived addresses will have to download many false-positive blocks, making the synchronization more time consuming.

      It leverages a simple heuristic: addresses used as coinjoin outputs or as change (internal keys) should only be used once. In other terms, once an internal address has been used to receive a coin and then this coin was used as input in a new transaction (the coin has been spent), the address should never be used again, and there is no need to test it against the remaining filters.

      Wallets coinjoining a lot will benefit the most from this feature, as the vast majority of their addresses will be skipped, reducing the number of blocks to download because of false-positive matches.

      Once the wallet is opened, the skipped addresses will be tested in the background, in the case that some funds have been received on those addresses. Users in that edge case would see their balance update automatically after some time. Once done the message Wallet is fully synchronized. is written to the logs file to indicate that the verification process has finished.

      You can disable it!

      TurboSync feature shouldn't cause any problem, but you might want to disable it to debug potential issues with the synchronization of your wallet. In that case, go to your wallet file (search for Wallet Folder using Wasabi's searchbar then open the file corresponding to your wallet) and set UseTurboSync to false.

      ',5);function B(I,F){const n=o("router-link"),s=o("RouteLink"),r=o("ExternalLinkIcon");return h(),u("div",null,[w,e("nav",b,[e("ul",null,[e("li",null,[a(n,{to:"#loading-wallet-step-by-step"},{default:l(()=>[t("Loading wallet step-by-step")]),_:1}),e("ul",null,[e("li",null,[a(n,{to:"#wallet-list"},{default:l(()=>[t("Wallet list")]),_:1})])])]),e("li",null,[a(n,{to:"#synchronization"},{default:l(()=>[t("Synchronization")]),_:1}),e("ul",null,[e("li",null,[a(n,{to:"#filter-download"},{default:l(()=>[t("Filter download")]),_:1})]),e("li",null,[a(n,{to:"#filter-scanning"},{default:l(()=>[t("Filter scanning")]),_:1})]),e("li",null,[a(n,{to:"#block-download"},{default:l(()=>[t("Block download")]),_:1})]),e("li",null,[a(n,{to:"#turbosync"},{default:l(()=>[t("TurboSync")]),_:1})])])])])]),y,g,m,e("p",null,[t("On the left side of Wasabi Wallet is the "),_,t(", where you see an alphabetically sorted list of all the previously "),a(s,{to:"/using-wasabi/WalletGeneration.html"},{default:l(()=>[t("generated")]),_:1}),t(" wallets.")]),k,e("p",null,[t("As soon as you start Wasabi, it connects to the backend server with a new Tor identity and requests the "),e("a",v,[t("BIP 158 block filters"),a(r)]),t(". At the first start, this can take a while because all filters need to be downloaded, but for the subsequent starts, this is faster as only the most recent filters are requested.")]),W,e("p",null,[t("When a block filter hits, either a true match or a false positive, then this block is important for you, so the wallet will download it. If you have "),a(s,{to:"/using-wasabi/BitcoinFullNode.html"},{default:l(()=>[t("a Bitcoin full node connected")]),_:1}),t(", then it will fetch the verified block locally. If not, then Wasabi will connect to a random Bitcoin P2P node with a new Tor identity, request only this block for download, and then disconnect. In this step, your Wasabi behaves like any other full node, and cannot be differentiated.")]),z,e("p",null,[t("Since Wasabi version "),e("a",T,[t("2.0.4"),a(r)]),t(" a new feature is added called "),x,t(". "),S,t(" leads to a significant reduction of wallet loading time, especially for a big wallet.")]),L])}const O=c(f,[["render",B],["__file","WalletLoad.html.vue"]]),j=JSON.parse('{"path":"/using-wasabi/WalletLoad.html","title":"Wallet Load","lang":"en-US","frontmatter":{"title":"Wallet Load","description":"A detailed guide about loading multiple wallets in Wasabi. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Loading wallet step-by-step","slug":"loading-wallet-step-by-step","link":"#loading-wallet-step-by-step","children":[{"level":3,"title":"Wallet list","slug":"wallet-list","link":"#wallet-list","children":[]}]},{"level":2,"title":"Synchronization","slug":"synchronization","link":"#synchronization","children":[{"level":3,"title":"Filter download","slug":"filter-download","link":"#filter-download","children":[]},{"level":3,"title":"Filter scanning","slug":"filter-scanning","link":"#filter-scanning","children":[]},{"level":3,"title":"Block download","slug":"block-download","link":"#block-download","children":[]},{"level":3,"title":"TurboSync","slug":"turbosync","link":"#turbosync","children":[]}]}],"git":{"updatedTime":1692631023000},"filePathRelative":"using-wasabi/WalletLoad.md"}');export{O as comp,j as data}; +import{_ as d}from"./WalletSynchronizing-Bg2Cuco7.js";import{_ as c,r as o,o as h,c as u,a as e,d as a,w as l,b as t,e as i}from"./app-BgbPjqpx.js";const p="/WalletOpen.png",f={},w=e("h1",{id:"wallet-load",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wallet-load"},[e("span",null,"Wallet Load")])],-1),b={class:"table-of-contents"},y=e("h2",{id:"loading-wallet-step-by-step",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#loading-wallet-step-by-step"},[e("span",null,"Loading wallet step-by-step")])],-1),g=e("p",null,"To load a wallet and start the synchonization process, you need to open your wallet by typing in the password. The first time synchronization of your wallet might take some time depending on the size of its history.",-1),m=e("h3",{id:"wallet-list",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wallet-list"},[e("span",null,"Wallet list")])],-1),_=e("code",null,"Wallet list",-1),k=i('

      Click the wallet you want to view, type in the password and press Open.

      Type your password to open the wallet

      Synchronization

      Filter download

      ',4),v={href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"},W=i('

      Wallet is synchronizing itself with the Bitcoin network

      Filter scanning

      When you load a wallet, it checks if the generated addresses within the gap limit hit against a block filter. Most filters do not hit, and then the wallet is certain that this block does not contain a transaction of yours so it will not download it. If a transaction of yours is in a block, then the corresponding filter will always be hit, and the wallet will know this is a relevant block for you. There can be a small chance for a false positive where the filter matches, but the block actually does not contain a transaction.

      Block download

      ',4),z=e("h3",{id:"turbosync",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#turbosync"},[e("span",null,"TurboSync")])],-1),T={href:"https://github.com/zkSNACKs/WalletWasabi/releases/tag/v2.0.4",target:"_blank",rel:"noopener noreferrer"},x=e("em",null,"TurboSync",-1),S=e("em",null,"TurboSync",-1),L=i('

      During a coinjoin, a new address (key) has to be generated for each output. As a result, wallets that use the coinjoin service a lot have a quickly growing set of generated addresses. This is a problem for wallet synchronization: each address has to be tested against each filter, with a small probability of matching as false-positive for every address. As a result, wallets with many derived addresses will have to download many false-positive blocks, making the synchronization more time consuming.

      It leverages a simple heuristic: addresses used as coinjoin outputs or as change (internal keys) should only be used once. In other terms, once an internal address has been used to receive a coin and then this coin was used as input in a new transaction (the coin has been spent), the address should never be used again, and there is no need to test it against the remaining filters.

      Wallets coinjoining a lot will benefit the most from this feature, as the vast majority of their addresses will be skipped, reducing the number of blocks to download because of false-positive matches.

      Once the wallet is opened, the skipped addresses will be tested in the background, in the case that some funds have been received on those addresses. Users in that edge case would see their balance update automatically after some time. Once done the message Wallet is fully synchronized. is written to the logs file to indicate that the verification process has finished.

      You can disable it!

      TurboSync feature shouldn't cause any problem, but you might want to disable it to debug potential issues with the synchronization of your wallet. In that case, go to your wallet file (search for Wallet Folder using Wasabi's searchbar then open the file corresponding to your wallet) and set UseTurboSync to false.

      ',5);function B(I,F){const n=o("router-link"),s=o("RouteLink"),r=o("ExternalLinkIcon");return h(),u("div",null,[w,e("nav",b,[e("ul",null,[e("li",null,[a(n,{to:"#loading-wallet-step-by-step"},{default:l(()=>[t("Loading wallet step-by-step")]),_:1}),e("ul",null,[e("li",null,[a(n,{to:"#wallet-list"},{default:l(()=>[t("Wallet list")]),_:1})])])]),e("li",null,[a(n,{to:"#synchronization"},{default:l(()=>[t("Synchronization")]),_:1}),e("ul",null,[e("li",null,[a(n,{to:"#filter-download"},{default:l(()=>[t("Filter download")]),_:1})]),e("li",null,[a(n,{to:"#filter-scanning"},{default:l(()=>[t("Filter scanning")]),_:1})]),e("li",null,[a(n,{to:"#block-download"},{default:l(()=>[t("Block download")]),_:1})]),e("li",null,[a(n,{to:"#turbosync"},{default:l(()=>[t("TurboSync")]),_:1})])])])])]),y,g,m,e("p",null,[t("On the left side of Wasabi Wallet is the "),_,t(", where you see an alphabetically sorted list of all the previously "),a(s,{to:"/using-wasabi/WalletGeneration.html"},{default:l(()=>[t("generated")]),_:1}),t(" wallets.")]),k,e("p",null,[t("As soon as you start Wasabi, it connects to the backend server with a new Tor identity and requests the "),e("a",v,[t("BIP 158 block filters"),a(r)]),t(". At the first start, this can take a while because all filters need to be downloaded, but for the subsequent starts, this is faster as only the most recent filters are requested.")]),W,e("p",null,[t("When a block filter hits, either a true match or a false positive, then this block is important for you, so the wallet will download it. If you have "),a(s,{to:"/using-wasabi/BitcoinFullNode.html"},{default:l(()=>[t("a Bitcoin full node connected")]),_:1}),t(", then it will fetch the verified block locally. If not, then Wasabi will connect to a random Bitcoin P2P node with a new Tor identity, request only this block for download, and then disconnect. In this step, your Wasabi behaves like any other full node, and cannot be differentiated.")]),z,e("p",null,[t("Since Wasabi version "),e("a",T,[t("2.0.4"),a(r)]),t(" a new feature is added called "),x,t(". "),S,t(" leads to a significant reduction of wallet loading time, especially for a big wallet.")]),L])}const O=c(f,[["render",B],["__file","WalletLoad.html.vue"]]),j=JSON.parse('{"path":"/using-wasabi/WalletLoad.html","title":"Wallet Load","lang":"en-US","frontmatter":{"title":"Wallet Load","description":"A detailed guide about loading multiple wallets in Wasabi. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Loading wallet step-by-step","slug":"loading-wallet-step-by-step","link":"#loading-wallet-step-by-step","children":[{"level":3,"title":"Wallet list","slug":"wallet-list","link":"#wallet-list","children":[]}]},{"level":2,"title":"Synchronization","slug":"synchronization","link":"#synchronization","children":[{"level":3,"title":"Filter download","slug":"filter-download","link":"#filter-download","children":[]},{"level":3,"title":"Filter scanning","slug":"filter-scanning","link":"#filter-scanning","children":[]},{"level":3,"title":"Block download","slug":"block-download","link":"#block-download","children":[]},{"level":3,"title":"TurboSync","slug":"turbosync","link":"#turbosync","children":[]}]}],"git":{"updatedTime":1692631023000},"filePathRelative":"using-wasabi/WalletLoad.md"}');export{O as comp,j as data}; diff --git a/assets/WalletRecovery.html-DPPR0Qji.js b/assets/WalletRecovery.html-BiLw8XhX.js similarity index 98% rename from assets/WalletRecovery.html-DPPR0Qji.js rename to assets/WalletRecovery.html-BiLw8XhX.js index b4fb414557..0e9b4262c0 100644 --- a/assets/WalletRecovery.html-DPPR0Qji.js +++ b/assets/WalletRecovery.html-BiLw8XhX.js @@ -1 +1 @@ -import{_ as n}from"./AddWalletButton-C7JVhQwV.js";import{_ as c,a as d,b as p}from"./AddWalletAddPassphrase-M0V8PDu3.js";import{_ as h,r as l,o as u,c as w,a as e,d as t,w as s,b as a,e as m}from"./app-BPKesm5h.js";const b="/WalletRecovery.png",_="/WalletRecoveryAdvanced.png",W={},f=e("h1",{id:"recover-a-wallet",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#recover-a-wallet"},[e("span",null,"Recover a Wallet")])],-1),v=e("p",null,"There are two different ways that you can recover an already used wallet in Wasabi.",-1),y={class:"table-of-contents"},g=e("h2",{id:"mnemonic-recovery-words-and-password",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mnemonic-recovery-words-and-password"},[e("span",null,"Mnemonic Recovery Words and Password")])],-1),k={href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",target:"_blank",rel:"noopener noreferrer"},R={href:"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki",target:"_blank",rel:"noopener noreferrer"},A=e("strong",null,"Both",-1),x=e("strong",null,"and",-1),P={href:"https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt",target:"_blank",rel:"noopener noreferrer"},B=m('

      To recover a wallet:

      1. Click on Add Wallet at the bottom left corner of the main view.

      Wasabi Wallet Add Wallet

      1. Click on Recover a wallet.

      Wasabi Wallet Add Wallet

      1. Give the wallet a name for future recognition of the wallet.

      Wasabi Wallet Name Wallet

      1. Type in the Recovery Words in the correct order and click Continue.

      Wasabi Wallet Recover Wallet

      1. Type in the Password.

      Add Wallet Add Password

      Now Wasabi will recover your wallet.

      With this, only the private keys are imported, but not the labels of your addresses.

      DANGER

      At recovery, Wasabi is unable to check if your password is correct or not. If you type a wrong password a completely different wallet will be recovered.

      You can also use the Advanced Recovery Options to specify the gap limit. The gap limit is about how far Wasabi will check the HD wallet structure for consecutive addresses that have no coins, in some cases, you may want to increase this limit.

      Wasabi Wallet Recovery Advanced

      TIP

      With this method, you can recover a wallet that was generated with any BIP39 compatible software, not just a Wasabi generated wallet.

      Back up Wallet File and Password

      ',18),N=e("code",null,"WalletBackups",-1),I=e("code",null,"Add Wallet",-1),T=e("code",null,"Import a wallet",-1),C=e("p",null,[a("Alternitavely: copy the wallet file to the "),e("code",null,"Wallets"),a(" folder, and upon the next restart of Wasabi, it will show this wallet in the "),e("code",null,"NavBar"),a(", from there you can open it as usual.")],-1),F=e("p",null,"Using this method will also backup your address labels and cluster history.",-1),E=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"WARNING"),e("p",null,"Make sure to back up your password separately because it is necessary to spend your bitcoin.")],-1);function L(M,V){const r=l("router-link"),o=l("ExternalLinkIcon"),i=l("RouteLink");return u(),w("div",null,[f,v,e("nav",y,[e("ul",null,[e("li",null,[t(r,{to:"#mnemonic-recovery-words-and-password"},{default:s(()=>[a("Mnemonic Recovery Words and Password")]),_:1})]),e("li",null,[t(r,{to:"#back-up-wallet-file-and-password"},{default:s(()=>[a("Back up Wallet File and Password")]),_:1})])])]),g,e("p",null,[a("Wasabi uses the "),e("a",k,[a("BIP 39"),t(o)]),a(" mnemonic code for generating "),e("a",R,[a("BIP 32"),t(o)]),a(" hierarchical deterministic wallets. "),A,a(" your password "),x,a(" the generated 12 mnemonic recovery words are the necessary secrets to recover your wallet. The recovery words are spell checked based on the "),e("a",P,[a("official wordlist"),t(o)]),a(", with the right word shown below the text box.")]),B,e("p",null,[a("Wasabi Wallet creates a backup of your wallet file inside "),N,a(" in your "),t(i,{to:"/FAQ/FAQ-UseWasabi.html#where-can-i-find-the-wasabi-data-folder"},{default:s(()=>[a("Wasabi data folder")]),_:1}),a(". If you have done a backup of this file, then you can import it at "),I,a(", by clicking on "),T,a(".")]),C,F,E])}const D=h(W,[["render",L],["__file","WalletRecovery.html.vue"]]),O=JSON.parse('{"path":"/using-wasabi/WalletRecovery.html","title":"Recover a Wallet","lang":"en-US","frontmatter":{"title":"Recover a Wallet","description":"A detailed guide about restoring a wallet in Wasabi. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Mnemonic Recovery Words and Password","slug":"mnemonic-recovery-words-and-password","link":"#mnemonic-recovery-words-and-password","children":[]},{"level":2,"title":"Back up Wallet File and Password","slug":"back-up-wallet-file-and-password","link":"#back-up-wallet-file-and-password","children":[]}],"git":{"updatedTime":1713542870000},"filePathRelative":"using-wasabi/WalletRecovery.md"}');export{D as comp,O as data}; +import{_ as n}from"./AddWalletButton-C7JVhQwV.js";import{_ as c,a as d,b as p}from"./AddWalletAddPassphrase-M0V8PDu3.js";import{_ as h,r as l,o as u,c as w,a as e,d as t,w as s,b as a,e as m}from"./app-BgbPjqpx.js";const b="/WalletRecovery.png",_="/WalletRecoveryAdvanced.png",W={},f=e("h1",{id:"recover-a-wallet",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#recover-a-wallet"},[e("span",null,"Recover a Wallet")])],-1),v=e("p",null,"There are two different ways that you can recover an already used wallet in Wasabi.",-1),y={class:"table-of-contents"},g=e("h2",{id:"mnemonic-recovery-words-and-password",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mnemonic-recovery-words-and-password"},[e("span",null,"Mnemonic Recovery Words and Password")])],-1),k={href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",target:"_blank",rel:"noopener noreferrer"},R={href:"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki",target:"_blank",rel:"noopener noreferrer"},A=e("strong",null,"Both",-1),x=e("strong",null,"and",-1),P={href:"https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt",target:"_blank",rel:"noopener noreferrer"},B=m('

      To recover a wallet:

      1. Click on Add Wallet at the bottom left corner of the main view.

      Wasabi Wallet Add Wallet

      1. Click on Recover a wallet.

      Wasabi Wallet Add Wallet

      1. Give the wallet a name for future recognition of the wallet.

      Wasabi Wallet Name Wallet

      1. Type in the Recovery Words in the correct order and click Continue.

      Wasabi Wallet Recover Wallet

      1. Type in the Password.

      Add Wallet Add Password

      Now Wasabi will recover your wallet.

      With this, only the private keys are imported, but not the labels of your addresses.

      DANGER

      At recovery, Wasabi is unable to check if your password is correct or not. If you type a wrong password a completely different wallet will be recovered.

      You can also use the Advanced Recovery Options to specify the gap limit. The gap limit is about how far Wasabi will check the HD wallet structure for consecutive addresses that have no coins, in some cases, you may want to increase this limit.

      Wasabi Wallet Recovery Advanced

      TIP

      With this method, you can recover a wallet that was generated with any BIP39 compatible software, not just a Wasabi generated wallet.

      Back up Wallet File and Password

      ',18),N=e("code",null,"WalletBackups",-1),I=e("code",null,"Add Wallet",-1),T=e("code",null,"Import a wallet",-1),C=e("p",null,[a("Alternitavely: copy the wallet file to the "),e("code",null,"Wallets"),a(" folder, and upon the next restart of Wasabi, it will show this wallet in the "),e("code",null,"NavBar"),a(", from there you can open it as usual.")],-1),F=e("p",null,"Using this method will also backup your address labels and cluster history.",-1),E=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"WARNING"),e("p",null,"Make sure to back up your password separately because it is necessary to spend your bitcoin.")],-1);function L(M,V){const r=l("router-link"),o=l("ExternalLinkIcon"),i=l("RouteLink");return u(),w("div",null,[f,v,e("nav",y,[e("ul",null,[e("li",null,[t(r,{to:"#mnemonic-recovery-words-and-password"},{default:s(()=>[a("Mnemonic Recovery Words and Password")]),_:1})]),e("li",null,[t(r,{to:"#back-up-wallet-file-and-password"},{default:s(()=>[a("Back up Wallet File and Password")]),_:1})])])]),g,e("p",null,[a("Wasabi uses the "),e("a",k,[a("BIP 39"),t(o)]),a(" mnemonic code for generating "),e("a",R,[a("BIP 32"),t(o)]),a(" hierarchical deterministic wallets. "),A,a(" your password "),x,a(" the generated 12 mnemonic recovery words are the necessary secrets to recover your wallet. The recovery words are spell checked based on the "),e("a",P,[a("official wordlist"),t(o)]),a(", with the right word shown below the text box.")]),B,e("p",null,[a("Wasabi Wallet creates a backup of your wallet file inside "),N,a(" in your "),t(i,{to:"/FAQ/FAQ-UseWasabi.html#where-can-i-find-the-wasabi-data-folder"},{default:s(()=>[a("Wasabi data folder")]),_:1}),a(". If you have done a backup of this file, then you can import it at "),I,a(", by clicking on "),T,a(".")]),C,F,E])}const D=h(W,[["render",L],["__file","WalletRecovery.html.vue"]]),O=JSON.parse('{"path":"/using-wasabi/WalletRecovery.html","title":"Recover a Wallet","lang":"en-US","frontmatter":{"title":"Recover a Wallet","description":"A detailed guide about restoring a wallet in Wasabi. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Mnemonic Recovery Words and Password","slug":"mnemonic-recovery-words-and-password","link":"#mnemonic-recovery-words-and-password","children":[]},{"level":2,"title":"Back up Wallet File and Password","slug":"back-up-wallet-file-and-password","link":"#back-up-wallet-file-and-password","children":[]}],"git":{"updatedTime":1713542870000},"filePathRelative":"using-wasabi/WalletRecovery.md"}');export{D as comp,O as data}; diff --git a/assets/WasabiSetupVM.html-BhxDhqTu.js b/assets/WasabiSetupVM.html-CqY0iH63.js similarity index 99% rename from assets/WasabiSetupVM.html-BhxDhqTu.js rename to assets/WasabiSetupVM.html-CqY0iH63.js index 40f141d88a..a3e0f25338 100644 --- a/assets/WasabiSetupVM.html-BhxDhqTu.js +++ b/assets/WasabiSetupVM.html-CqY0iH63.js @@ -1,4 +1,4 @@ -import{_ as u,r,o as d,c,a as e,d as n,w as t,b as a,e as l}from"./app-BPKesm5h.js";const p="/Virtualbox.png",h={},m=e("h1",{id:"wasabi-setup-in-virtual-machines",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wasabi-setup-in-virtual-machines"},[e("span",null,"Wasabi Setup in Virtual Machines")])],-1),b={class:"table-of-contents"},v=l('

      Benefits of Virtual Machines

      Virtualization allows you to create and run as many virtual machines (VMs) on a single computer at one time as desired. The only constraints are the amount of RAM and hard disk space available on the host computer.

      Each VM is isolated from the host machine. Therefore, such things as corrupted files, configuration errors, malware, etc., encountered during the use of a VM do not affect the host computer.

      If you are a developer, using virtual machines gives you several powerful features. You can easily:

      • Create snapshots of a VM's state at any time. These snapshots can be restored later if a problem or undesired condition arises in the current state of the VM.

      • Set up a template VM with a desired development environment or configuration, and then quickly create lightweight, disposable clones of the template for specific tests.

      • Develop and/or test applications in Windows, Linux, and macOS at the same time, on the same computer. You can link them together in a customizable internal network if desired.

      For developers, the use of virtual machines offers some of the basic version control features of git but applied to operating systems rather than files or projects.

      Qubes

      ',7),g={href:"https://www.qubes-os.org/",target:"_blank",rel:"noopener noreferrer"},f={href:"https://www.qubes-os.org/downloads/",target:"_blank",rel:"noopener noreferrer"},k={href:"https://www.qubes-os.org/doc/installation-guide/",target:"_blank",rel:"noopener noreferrer"},w=e("h3",{id:"generate-template-vm",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#generate-template-vm"},[e("span",null,"Generate Template VM")])],-1),_=e("code",null,"dom0",-1),y=l(`
      [user@dom0 ~]$ qvm-clone debian-12-xfce template-wasabi
      +import{_ as u,r,o as d,c,a as e,d as n,w as t,b as a,e as l}from"./app-BgbPjqpx.js";const p="/Virtualbox.png",h={},m=e("h1",{id:"wasabi-setup-in-virtual-machines",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wasabi-setup-in-virtual-machines"},[e("span",null,"Wasabi Setup in Virtual Machines")])],-1),b={class:"table-of-contents"},v=l('

      Benefits of Virtual Machines

      Virtualization allows you to create and run as many virtual machines (VMs) on a single computer at one time as desired. The only constraints are the amount of RAM and hard disk space available on the host computer.

      Each VM is isolated from the host machine. Therefore, such things as corrupted files, configuration errors, malware, etc., encountered during the use of a VM do not affect the host computer.

      If you are a developer, using virtual machines gives you several powerful features. You can easily:

      • Create snapshots of a VM's state at any time. These snapshots can be restored later if a problem or undesired condition arises in the current state of the VM.

      • Set up a template VM with a desired development environment or configuration, and then quickly create lightweight, disposable clones of the template for specific tests.

      • Develop and/or test applications in Windows, Linux, and macOS at the same time, on the same computer. You can link them together in a customizable internal network if desired.

      For developers, the use of virtual machines offers some of the basic version control features of git but applied to operating systems rather than files or projects.

      Qubes

      ',7),g={href:"https://www.qubes-os.org/",target:"_blank",rel:"noopener noreferrer"},f={href:"https://www.qubes-os.org/downloads/",target:"_blank",rel:"noopener noreferrer"},k={href:"https://www.qubes-os.org/doc/installation-guide/",target:"_blank",rel:"noopener noreferrer"},w=e("h3",{id:"generate-template-vm",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#generate-template-vm"},[e("span",null,"Generate Template VM")])],-1),_=e("code",null,"dom0",-1),y=l(`
      [user@dom0 ~]$ qvm-clone debian-12-xfce template-wasabi
       

      Install Dependencies

      Start the gnome-terminal of template-wasabi.

      [user@dom0 ~]$ qvm-run -a template-wasabi gnome-terminal
       

      Update the template-wasabi.

      [user@template-wasabi ~]$ sudo apt update
       [user@template-wasabi ~]$ sudo apt upgrade
      diff --git a/assets/WhyFinancialPrivacy.html-CBrnls__.js b/assets/WhyFinancialPrivacy.html-X0y87-e5.js
      similarity index 99%
      rename from assets/WhyFinancialPrivacy.html-CBrnls__.js
      rename to assets/WhyFinancialPrivacy.html-X0y87-e5.js
      index 0be7fa0676..b92d6f2649 100644
      --- a/assets/WhyFinancialPrivacy.html-CBrnls__.js
      +++ b/assets/WhyFinancialPrivacy.html-X0y87-e5.js
      @@ -1 +1 @@
      -import{_ as r,r as s,o as c,c as l,a as e,b as t,d as o,w as n,e as h}from"./app-BPKesm5h.js";const d="/InfographicWhyWasabi.png",y={},u=e("h1",{id:"why-financial-privacy-is-especially-important",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-financial-privacy-is-especially-important"},[e("span",null,"Why Financial Privacy is Especially Important")])],-1),p=e("blockquote",null,[e("p",null,"The possibility to be anonymous or pseudonymous relies on you not revealing any identifying information about yourself in connection with the bitcoin addresses you use. If you post your bitcoin address on the web, then you're associating that address and any transactions with it with the name you posted under. If you posted under a handle that you haven't associated with your real identity, then you're still pseudonymous. For greater privacy, it's best to use bitcoin addresses only once.")],-1),m={href:"https://bitcointalk.org/index.php?topic=8.msg34#msg34",target:"_blank",rel:"noopener noreferrer"},f=e("p",null,[e("img",{src:d,alt:"Gaining privacy with Wasabi Wallet for Bitcoin transactions",title:"Wasabi Wallet infographic"})],-1),w={class:"table-of-contents"},v=h('

      Why it is important to keep your funds private

      One of the apparent contradictions of Bitcoin is the notion that your transactions can be private but have a public transaction record.

      As a financial system, Bitcoin functions completely differently from the established banking network. Bitcoin allows you to store funds yourself, without the need for a third party and therefore places the burden on you of keeping said funds secure and accessible.

      While opening an account with a traditional bank or other financial institution requires significant cost and effort, creating a Bitcoin wallet is quick and easy to do on your home computer. This speedy process makes it possible to create hundreds of separate wallets if you wish.

      Two aspects —in particular privacy and identity— function very differently with Bitcoin than in the legacy financial system.

      Pseudonyms protect your identity in Bitcoin

      A bank account, PayPal account, or credit card is always tied to a real identity, making it difficult for many people to open one. Bitcoin doesn't require any identity to be part of this network.

      Being able to use the internet anonymously or pseudonymously is the only way for many people to truly be themselves. Hundreds of millions of people around the globe are not accepted in their societies for reasons they cannot control.

      Maintaining an identity with a large following might require paid services such as blogs, logo designs, stock photos, VPNs, or translations. Without the ability to pay for these services anonymously, you would be forced to reveal your true identity in order to maintain your pseudonym situation. This clearly makes no sense and has potentially dangerous ramifications.

      How Bitcoin empowers anonymity

      Bitcoin is an important, empowering technology. Using Bitcoin protects your right to remain anonymous on the internet. It allows anonymous or pseudonymous fundraising. Groups can collectively control Bitcoin accounts and choose to either hide or reveal financial information at will.

      There are many positive reasons for a private and secure banking system like Bitcoin.

      For example, a workers' rights group could raise funds with Bitcoin. The money could be used for servers, flyers, remote helpers… and all without tying any transaction to the real identities of the volunteers.

      Likewise, a domestic abuse victim might use Bitcoin to securely stack away funds to prepare for an independent life.

      Privacy through pseudonymous accounts

      Privacy in traditional banking is guaranteed by the institutions that make up the system, such as banks, credit card companies, and governments. They (try to) ensure that your bank balance stays a secret. This puts them in a powerful position, where only they have complete oversight as to what is going on.

      In the Bitcoin ecosystem, everyone can see the history and balance of every address, but they cannot necessarily see who controls it. All addresses and transactions are recorded in Bitcoin's publicly distributed database, the blockchain. The addresses do not have names or IP addresses attached to them, so it is not always possible to know which transaction belongs to which individual.

      Threat model

      When considering privacy you need to think about exactly who you're hiding from. You must examine how a hypothetical adversary could spy on you, what kind of information is most important to you and which technology you need to use to protect your privacy. The kind of behaviour needed to protect your privacy therefore depends on your threat model.

      Newcomers to privacy often think that they can simply download some software and all their privacy concerns will be solved. This is not so. Privacy requires a change in behaviour, however slight. For example, imagine if you had a perfectly private internet where who you're communicating with and what you say are completely private. You could still use this to communicate with a social media website to write your real name, upload a selfie and talk about what you're doing right now. Anybody on the internet could view that information so your privacy would be ruined even though you were using perfectly private technology.

      ',21),g={href:"https://www.slideshare.net/grugq/opsec-for-hackers",target:"_blank",rel:"noopener noreferrer"},b=e("p",null,"Most of the time plausible deniability is not good enough because lots of spying methods only need to work on a statistical level (e.g. targeted advertising).",-1);function k(_,B){const a=s("ExternalLinkIcon"),i=s("router-link");return c(),l("div",null,[u,p,e("p",null,[t("By Satoshi Nakamoto in "),e("a",m,[t("How anonymous are bitcoins? - Bitcointalk"),o(a)])]),f,e("nav",w,[e("ul",null,[e("li",null,[o(i,{to:"#why-it-is-important-to-keep-your-funds-private"},{default:n(()=>[t("Why it is important to keep your funds private")]),_:1})]),e("li",null,[o(i,{to:"#pseudonyms-protect-your-identity-in-bitcoin"},{default:n(()=>[t("Pseudonyms protect your identity in Bitcoin")]),_:1})]),e("li",null,[o(i,{to:"#how-bitcoin-empowers-anonymity"},{default:n(()=>[t("How Bitcoin empowers anonymity")]),_:1})]),e("li",null,[o(i,{to:"#privacy-through-pseudonymous-accounts"},{default:n(()=>[t("Privacy through pseudonymous accounts")]),_:1})]),e("li",null,[o(i,{to:"#threat-model"},{default:n(()=>[t("Threat model")]),_:1})])])]),v,e("p",null,[t("For details read the talk "),e("a",g,[t("Opsec for Hackers by grugq"),o(a)]),t(". The talk is aimed mostly at political activists who need privacy from governments, but the advice generally applies to all of us.")]),b])}const W=r(y,[["render",k],["__file","WhyFinancialPrivacy.html.vue"]]),x=JSON.parse('{"path":"/why-wasabi/WhyFinancialPrivacy.html","title":"Why Financial Privacy is Especially Important","lang":"en-US","frontmatter":{"title":"Why Financial Privacy is Especially Important","description":"An introduction to the positive and negative side of Privacy in Bitcoin today. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Why it is important to keep your funds private","slug":"why-it-is-important-to-keep-your-funds-private","link":"#why-it-is-important-to-keep-your-funds-private","children":[]},{"level":2,"title":"Pseudonyms protect your identity in Bitcoin","slug":"pseudonyms-protect-your-identity-in-bitcoin","link":"#pseudonyms-protect-your-identity-in-bitcoin","children":[]},{"level":2,"title":"How Bitcoin empowers anonymity","slug":"how-bitcoin-empowers-anonymity","link":"#how-bitcoin-empowers-anonymity","children":[]},{"level":2,"title":"Privacy through pseudonymous accounts","slug":"privacy-through-pseudonymous-accounts","link":"#privacy-through-pseudonymous-accounts","children":[]},{"level":2,"title":"Threat model","slug":"threat-model","link":"#threat-model","children":[]}],"git":{"updatedTime":1618218138000},"filePathRelative":"why-wasabi/WhyFinancialPrivacy.md"}');export{W as comp,x as data}; +import{_ as r,r as s,o as c,c as l,a as e,b as t,d as o,w as n,e as h}from"./app-BgbPjqpx.js";const d="/InfographicWhyWasabi.png",y={},u=e("h1",{id:"why-financial-privacy-is-especially-important",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-financial-privacy-is-especially-important"},[e("span",null,"Why Financial Privacy is Especially Important")])],-1),p=e("blockquote",null,[e("p",null,"The possibility to be anonymous or pseudonymous relies on you not revealing any identifying information about yourself in connection with the bitcoin addresses you use. If you post your bitcoin address on the web, then you're associating that address and any transactions with it with the name you posted under. If you posted under a handle that you haven't associated with your real identity, then you're still pseudonymous. For greater privacy, it's best to use bitcoin addresses only once.")],-1),m={href:"https://bitcointalk.org/index.php?topic=8.msg34#msg34",target:"_blank",rel:"noopener noreferrer"},f=e("p",null,[e("img",{src:d,alt:"Gaining privacy with Wasabi Wallet for Bitcoin transactions",title:"Wasabi Wallet infographic"})],-1),w={class:"table-of-contents"},v=h('

      Why it is important to keep your funds private

      One of the apparent contradictions of Bitcoin is the notion that your transactions can be private but have a public transaction record.

      As a financial system, Bitcoin functions completely differently from the established banking network. Bitcoin allows you to store funds yourself, without the need for a third party and therefore places the burden on you of keeping said funds secure and accessible.

      While opening an account with a traditional bank or other financial institution requires significant cost and effort, creating a Bitcoin wallet is quick and easy to do on your home computer. This speedy process makes it possible to create hundreds of separate wallets if you wish.

      Two aspects —in particular privacy and identity— function very differently with Bitcoin than in the legacy financial system.

      Pseudonyms protect your identity in Bitcoin

      A bank account, PayPal account, or credit card is always tied to a real identity, making it difficult for many people to open one. Bitcoin doesn't require any identity to be part of this network.

      Being able to use the internet anonymously or pseudonymously is the only way for many people to truly be themselves. Hundreds of millions of people around the globe are not accepted in their societies for reasons they cannot control.

      Maintaining an identity with a large following might require paid services such as blogs, logo designs, stock photos, VPNs, or translations. Without the ability to pay for these services anonymously, you would be forced to reveal your true identity in order to maintain your pseudonym situation. This clearly makes no sense and has potentially dangerous ramifications.

      How Bitcoin empowers anonymity

      Bitcoin is an important, empowering technology. Using Bitcoin protects your right to remain anonymous on the internet. It allows anonymous or pseudonymous fundraising. Groups can collectively control Bitcoin accounts and choose to either hide or reveal financial information at will.

      There are many positive reasons for a private and secure banking system like Bitcoin.

      For example, a workers' rights group could raise funds with Bitcoin. The money could be used for servers, flyers, remote helpers… and all without tying any transaction to the real identities of the volunteers.

      Likewise, a domestic abuse victim might use Bitcoin to securely stack away funds to prepare for an independent life.

      Privacy through pseudonymous accounts

      Privacy in traditional banking is guaranteed by the institutions that make up the system, such as banks, credit card companies, and governments. They (try to) ensure that your bank balance stays a secret. This puts them in a powerful position, where only they have complete oversight as to what is going on.

      In the Bitcoin ecosystem, everyone can see the history and balance of every address, but they cannot necessarily see who controls it. All addresses and transactions are recorded in Bitcoin's publicly distributed database, the blockchain. The addresses do not have names or IP addresses attached to them, so it is not always possible to know which transaction belongs to which individual.

      Threat model

      When considering privacy you need to think about exactly who you're hiding from. You must examine how a hypothetical adversary could spy on you, what kind of information is most important to you and which technology you need to use to protect your privacy. The kind of behaviour needed to protect your privacy therefore depends on your threat model.

      Newcomers to privacy often think that they can simply download some software and all their privacy concerns will be solved. This is not so. Privacy requires a change in behaviour, however slight. For example, imagine if you had a perfectly private internet where who you're communicating with and what you say are completely private. You could still use this to communicate with a social media website to write your real name, upload a selfie and talk about what you're doing right now. Anybody on the internet could view that information so your privacy would be ruined even though you were using perfectly private technology.

      ',21),g={href:"https://www.slideshare.net/grugq/opsec-for-hackers",target:"_blank",rel:"noopener noreferrer"},b=e("p",null,"Most of the time plausible deniability is not good enough because lots of spying methods only need to work on a statistical level (e.g. targeted advertising).",-1);function k(_,B){const a=s("ExternalLinkIcon"),i=s("router-link");return c(),l("div",null,[u,p,e("p",null,[t("By Satoshi Nakamoto in "),e("a",m,[t("How anonymous are bitcoins? - Bitcointalk"),o(a)])]),f,e("nav",w,[e("ul",null,[e("li",null,[o(i,{to:"#why-it-is-important-to-keep-your-funds-private"},{default:n(()=>[t("Why it is important to keep your funds private")]),_:1})]),e("li",null,[o(i,{to:"#pseudonyms-protect-your-identity-in-bitcoin"},{default:n(()=>[t("Pseudonyms protect your identity in Bitcoin")]),_:1})]),e("li",null,[o(i,{to:"#how-bitcoin-empowers-anonymity"},{default:n(()=>[t("How Bitcoin empowers anonymity")]),_:1})]),e("li",null,[o(i,{to:"#privacy-through-pseudonymous-accounts"},{default:n(()=>[t("Privacy through pseudonymous accounts")]),_:1})]),e("li",null,[o(i,{to:"#threat-model"},{default:n(()=>[t("Threat model")]),_:1})])])]),v,e("p",null,[t("For details read the talk "),e("a",g,[t("Opsec for Hackers by grugq"),o(a)]),t(". The talk is aimed mostly at political activists who need privacy from governments, but the advice generally applies to all of us.")]),b])}const W=r(y,[["render",k],["__file","WhyFinancialPrivacy.html.vue"]]),x=JSON.parse('{"path":"/why-wasabi/WhyFinancialPrivacy.html","title":"Why Financial Privacy is Especially Important","lang":"en-US","frontmatter":{"title":"Why Financial Privacy is Especially Important","description":"An introduction to the positive and negative side of Privacy in Bitcoin today. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Why it is important to keep your funds private","slug":"why-it-is-important-to-keep-your-funds-private","link":"#why-it-is-important-to-keep-your-funds-private","children":[]},{"level":2,"title":"Pseudonyms protect your identity in Bitcoin","slug":"pseudonyms-protect-your-identity-in-bitcoin","link":"#pseudonyms-protect-your-identity-in-bitcoin","children":[]},{"level":2,"title":"How Bitcoin empowers anonymity","slug":"how-bitcoin-empowers-anonymity","link":"#how-bitcoin-empowers-anonymity","children":[]},{"level":2,"title":"Privacy through pseudonymous accounts","slug":"privacy-through-pseudonymous-accounts","link":"#privacy-through-pseudonymous-accounts","children":[]},{"level":2,"title":"Threat model","slug":"threat-model","link":"#threat-model","children":[]}],"git":{"updatedTime":1618218138000},"filePathRelative":"why-wasabi/WhyFinancialPrivacy.md"}');export{W as comp,x as data}; diff --git a/assets/WhyPrivacyImportant.html-D3H3J795.js b/assets/WhyPrivacyImportant.html-Dj7M33g8.js similarity index 99% rename from assets/WhyPrivacyImportant.html-D3H3J795.js rename to assets/WhyPrivacyImportant.html-Dj7M33g8.js index cd58d37238..6dd6d8641e 100644 --- a/assets/WhyPrivacyImportant.html-D3H3J795.js +++ b/assets/WhyPrivacyImportant.html-Dj7M33g8.js @@ -1 +1 @@ -import{_ as s}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as l,r,o as h,c as d,a as e,d as o,w as i,b as t}from"./app-BPKesm5h.js";const c={},u=e("h1",{id:"why-privacy-is-important",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-privacy-is-important"},[e("span",null,"Why Privacy is Important")])],-1),p=e("blockquote",null,[e("p",null,"It's not that I have something to hide. It's that I have nothing to share.")],-1),y=e("p",null,"Privacy is the selective revealing of your Self to your peers. You have many thoughts in your mind which you choose to never tell anyone, and many of your actions are never witnessed by another person. The ability to keep a secret is an essential part of the human experience.",-1),m=e("ul",null,[e("li",null,"Why do you draw the curtains at night?"),e("li",null,"Why do you close the door when in the shower?"),e("li",null,"Why do you send your love letters only to your spouse?")],-1),w={href:"https://youtu.be/laem7G6LPAM",target:"_blank",rel:"noopener noreferrer"},g=e("img",{src:s,alt:"Watch the video"},null,-1),_=e("p",null,"Economic trade of goods and services is based on mutual beneficial voluntary action. But when an outside authority demands that the peers reveal the details of their exchange, then they must beg for permission of every act. Yet individuals can use the tools of self-defense at their disposal to regain their sovereignty.",-1),v=e("blockquote",null,[e("p",null,"Without financial privacy, there is no human dignity.")],-1),f={class:"table-of-contents"},b=e("h2",{id:"privacy-i-don-t-have-anything-to-hide",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#privacy-i-don-t-have-anything-to-hide"},[e("span",null,"Privacy? I don't have anything to hide")])],-1),k={href:"https://www.ted.com/talks/glenn_greenwald_why_privacy_matters",target:"_blank",rel:"noopener noreferrer"},I={href:"https://github.com/cryptoseb/CryptoPaper#let-me-explain-further",target:"_blank",rel:"noopener noreferrer"},x=e("h2",{id:"read-also",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#read-also"},[e("span",null,"Read also")])],-1),W={href:"https://en.wikipedia.org/wiki/Nothing_to_hide_argument",target:"_blank",rel:"noopener noreferrer"},P={href:"https://www.reddit.com/r/privacy/comments/3hynvp/how_do_you_counter_the_i_have_nothing_to_hide/",target:"_blank",rel:"noopener noreferrer"},q={href:"https://papers.ssrn.com/sol3/papers.cfm?abstract_id=998565",target:"_blank",rel:"noopener noreferrer"},T=e("h2",{id:"quotes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#quotes"},[e("span",null,"Quotes")])],-1),N={href:"https://www.reddit.com/r/IAmA/comments/36ru89/just_days_left_to_kill_mass_surveillance_under/crglgh2",target:"_blank",rel:"noopener noreferrer"},E={href:"https://www.theguardian.com/world/2013/jun/09/nsa-whistleblower-edward-snowden-why",target:"_blank",rel:"noopener noreferrer"},S={href:"https://www.huffingtonpost.com/2014/06/20/glenn-greenwald-privacy_n_5509704.html",target:"_blank",rel:"noopener noreferrer"},A=e("iframe",{src:"https://anchor.fm/podcast-8f267c0/embed/episodes/Privacy-Matters-with-Max-Hillebrand-BEC008-e3e0qt/a-abhd5q",height:"102px",width:"400px",frameborder:"0",scrolling:"no"},null,-1);function G(j,B){const n=r("ExternalLinkIcon"),a=r("router-link");return h(),d("div",null,[u,p,y,m,e("p",null,[e("a",w,[g,o(n)])]),_,v,e("nav",f,[e("ul",null,[e("li",null,[o(a,{to:"#privacy-i-don-t-have-anything-to-hide"},{default:i(()=>[t("Privacy? I don't have anything to hide")]),_:1})]),e("li",null,[o(a,{to:"#read-also"},{default:i(()=>[t("Read also")]),_:1})]),e("li",null,[o(a,{to:"#quotes"},{default:i(()=>[t("Quotes")]),_:1})])])]),b,e("blockquote",null,[e("p",null,[t(`Over the last 16 months, as I've debated this issue around the world, every single time somebody has said to me, "I don't really worry about invasions of privacy because I don't have anything to hide." I always say the same thing to them. I get out a pen, I write down my email address. I say, "Here's my email address. What I want you to do when you get home is email me the passwords to all of your email accounts, not just the nice, respectable work one in your name, but all of them, because I want to be able to just troll through what it is you're doing online, read what I want to read and publish whatever I find interesting. After all, if you're not a bad person, if you're doing nothing wrong, you should have nothing to hide." Not a single person has taken me up on that offer. - Glenn Greenwald in `),e("a",k,[t("Why privacy matters - TED Talk"),o(n)])])]),e("blockquote",null,[e("p",null,[t("The primary reason for window curtains in our house, is to stop people from being able to see in. The reason we don’t want them to see in is because we consider much of what we do inside our homes to be private. Whether that be having dinner at the table, watching a movie with your kids, or even engaging in intimate or sexual acts with your partner. None of these things are illegal by any means but even knowing this, we still keep the curtains and blinds on our windows. We clearly have this strong desire for privacy when it comes to our personal life and the public. - Joshua in "),e("a",I,[t("The Crypto Paper"),o(n)])])]),x,e("ul",null,[e("li",null,[e("a",W,[t("Nothing to hide argument (Wikipedia)"),o(n)])]),e("li",null,[e("a",P,[t('How do you counter the "I have nothing to hide?" argument? (reddit.com)'),o(n)])]),e("li",null,[e("a",q,[t("'I've Got Nothing to Hide' and Other Misunderstandings of Privacy (Daniel J. Solove - San Diego Law Review)"),o(n)])])]),T,e("blockquote",null,[e("p",null,[t("Arguing that you don't care about the right to privacy because you have nothing to hide is no different than saying you don't care about free speech because you have nothing to say. - Edward Snowden on "),e("a",N,[t("Reddit"),o(n)])])]),e("blockquote",null,[e("p",null,[t("The NSA has built an infrastructure that allows it to intercept almost everything. With this capability, the vast majority of human communications are automatically ingested without targeting. If I wanted to see your emails or your wife's phone, all I have to do is use intercepts. I can get your emails, passwords, phone records, credit cards. I don't want to live in a society that does these sort of things... I do not want to live in a world where everything I do and say is recorded. That is not something I am willing to support or live under. - Edward Snowden in "),e("a",E,[t("The Guardian"),o(n)])])]),e("blockquote",null,[e("p",null,[t("We all need places where we can go to explore without the judgmental eyes of other people being cast upon us, only in a realm where we're not being watched can we really test the limits of who we want to be. It's really in the private realm where dissent, creativity and personal exploration lie. - Glenn Greenwald in "),e("a",S,[t("Huffington Post"),o(n)])])]),A])}const H=l(c,[["render",G],["__file","WhyPrivacyImportant.html.vue"]]),L=JSON.parse(`{"path":"/why-wasabi/WhyPrivacyImportant.html","title":"Why Privacy is Important","lang":"en-US","frontmatter":{"title":"Why Privacy is Important","description":"An explanation of why Privacy is a fundamental human right, and why financial privacy is worth fighting for. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Privacy? I don't have anything to hide","slug":"privacy-i-don-t-have-anything-to-hide","link":"#privacy-i-don-t-have-anything-to-hide","children":[]},{"level":2,"title":"Read also","slug":"read-also","link":"#read-also","children":[]},{"level":2,"title":"Quotes","slug":"quotes","link":"#quotes","children":[]}],"git":{"updatedTime":1682266766000},"filePathRelative":"why-wasabi/WhyPrivacyImportant.md"}`);export{H as comp,L as data}; +import{_ as s}from"./Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js";import{_ as l,r,o as h,c as d,a as e,d as o,w as i,b as t}from"./app-BgbPjqpx.js";const c={},u=e("h1",{id:"why-privacy-is-important",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-privacy-is-important"},[e("span",null,"Why Privacy is Important")])],-1),p=e("blockquote",null,[e("p",null,"It's not that I have something to hide. It's that I have nothing to share.")],-1),y=e("p",null,"Privacy is the selective revealing of your Self to your peers. You have many thoughts in your mind which you choose to never tell anyone, and many of your actions are never witnessed by another person. The ability to keep a secret is an essential part of the human experience.",-1),m=e("ul",null,[e("li",null,"Why do you draw the curtains at night?"),e("li",null,"Why do you close the door when in the shower?"),e("li",null,"Why do you send your love letters only to your spouse?")],-1),w={href:"https://youtu.be/laem7G6LPAM",target:"_blank",rel:"noopener noreferrer"},g=e("img",{src:s,alt:"Watch the video"},null,-1),_=e("p",null,"Economic trade of goods and services is based on mutual beneficial voluntary action. But when an outside authority demands that the peers reveal the details of their exchange, then they must beg for permission of every act. Yet individuals can use the tools of self-defense at their disposal to regain their sovereignty.",-1),v=e("blockquote",null,[e("p",null,"Without financial privacy, there is no human dignity.")],-1),f={class:"table-of-contents"},b=e("h2",{id:"privacy-i-don-t-have-anything-to-hide",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#privacy-i-don-t-have-anything-to-hide"},[e("span",null,"Privacy? I don't have anything to hide")])],-1),k={href:"https://www.ted.com/talks/glenn_greenwald_why_privacy_matters",target:"_blank",rel:"noopener noreferrer"},I={href:"https://github.com/cryptoseb/CryptoPaper#let-me-explain-further",target:"_blank",rel:"noopener noreferrer"},x=e("h2",{id:"read-also",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#read-also"},[e("span",null,"Read also")])],-1),W={href:"https://en.wikipedia.org/wiki/Nothing_to_hide_argument",target:"_blank",rel:"noopener noreferrer"},P={href:"https://www.reddit.com/r/privacy/comments/3hynvp/how_do_you_counter_the_i_have_nothing_to_hide/",target:"_blank",rel:"noopener noreferrer"},q={href:"https://papers.ssrn.com/sol3/papers.cfm?abstract_id=998565",target:"_blank",rel:"noopener noreferrer"},T=e("h2",{id:"quotes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#quotes"},[e("span",null,"Quotes")])],-1),N={href:"https://www.reddit.com/r/IAmA/comments/36ru89/just_days_left_to_kill_mass_surveillance_under/crglgh2",target:"_blank",rel:"noopener noreferrer"},E={href:"https://www.theguardian.com/world/2013/jun/09/nsa-whistleblower-edward-snowden-why",target:"_blank",rel:"noopener noreferrer"},S={href:"https://www.huffingtonpost.com/2014/06/20/glenn-greenwald-privacy_n_5509704.html",target:"_blank",rel:"noopener noreferrer"},A=e("iframe",{src:"https://anchor.fm/podcast-8f267c0/embed/episodes/Privacy-Matters-with-Max-Hillebrand-BEC008-e3e0qt/a-abhd5q",height:"102px",width:"400px",frameborder:"0",scrolling:"no"},null,-1);function G(j,B){const n=r("ExternalLinkIcon"),a=r("router-link");return h(),d("div",null,[u,p,y,m,e("p",null,[e("a",w,[g,o(n)])]),_,v,e("nav",f,[e("ul",null,[e("li",null,[o(a,{to:"#privacy-i-don-t-have-anything-to-hide"},{default:i(()=>[t("Privacy? I don't have anything to hide")]),_:1})]),e("li",null,[o(a,{to:"#read-also"},{default:i(()=>[t("Read also")]),_:1})]),e("li",null,[o(a,{to:"#quotes"},{default:i(()=>[t("Quotes")]),_:1})])])]),b,e("blockquote",null,[e("p",null,[t(`Over the last 16 months, as I've debated this issue around the world, every single time somebody has said to me, "I don't really worry about invasions of privacy because I don't have anything to hide." I always say the same thing to them. I get out a pen, I write down my email address. I say, "Here's my email address. What I want you to do when you get home is email me the passwords to all of your email accounts, not just the nice, respectable work one in your name, but all of them, because I want to be able to just troll through what it is you're doing online, read what I want to read and publish whatever I find interesting. After all, if you're not a bad person, if you're doing nothing wrong, you should have nothing to hide." Not a single person has taken me up on that offer. - Glenn Greenwald in `),e("a",k,[t("Why privacy matters - TED Talk"),o(n)])])]),e("blockquote",null,[e("p",null,[t("The primary reason for window curtains in our house, is to stop people from being able to see in. The reason we don’t want them to see in is because we consider much of what we do inside our homes to be private. Whether that be having dinner at the table, watching a movie with your kids, or even engaging in intimate or sexual acts with your partner. None of these things are illegal by any means but even knowing this, we still keep the curtains and blinds on our windows. We clearly have this strong desire for privacy when it comes to our personal life and the public. - Joshua in "),e("a",I,[t("The Crypto Paper"),o(n)])])]),x,e("ul",null,[e("li",null,[e("a",W,[t("Nothing to hide argument (Wikipedia)"),o(n)])]),e("li",null,[e("a",P,[t('How do you counter the "I have nothing to hide?" argument? (reddit.com)'),o(n)])]),e("li",null,[e("a",q,[t("'I've Got Nothing to Hide' and Other Misunderstandings of Privacy (Daniel J. Solove - San Diego Law Review)"),o(n)])])]),T,e("blockquote",null,[e("p",null,[t("Arguing that you don't care about the right to privacy because you have nothing to hide is no different than saying you don't care about free speech because you have nothing to say. - Edward Snowden on "),e("a",N,[t("Reddit"),o(n)])])]),e("blockquote",null,[e("p",null,[t("The NSA has built an infrastructure that allows it to intercept almost everything. With this capability, the vast majority of human communications are automatically ingested without targeting. If I wanted to see your emails or your wife's phone, all I have to do is use intercepts. I can get your emails, passwords, phone records, credit cards. I don't want to live in a society that does these sort of things... I do not want to live in a world where everything I do and say is recorded. That is not something I am willing to support or live under. - Edward Snowden in "),e("a",E,[t("The Guardian"),o(n)])])]),e("blockquote",null,[e("p",null,[t("We all need places where we can go to explore without the judgmental eyes of other people being cast upon us, only in a realm where we're not being watched can we really test the limits of who we want to be. It's really in the private realm where dissent, creativity and personal exploration lie. - Glenn Greenwald in "),e("a",S,[t("Huffington Post"),o(n)])])]),A])}const H=l(c,[["render",G],["__file","WhyPrivacyImportant.html.vue"]]),L=JSON.parse(`{"path":"/why-wasabi/WhyPrivacyImportant.html","title":"Why Privacy is Important","lang":"en-US","frontmatter":{"title":"Why Privacy is Important","description":"An explanation of why Privacy is a fundamental human right, and why financial privacy is worth fighting for. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Privacy? I don't have anything to hide","slug":"privacy-i-don-t-have-anything-to-hide","link":"#privacy-i-don-t-have-anything-to-hide","children":[]},{"level":2,"title":"Read also","slug":"read-also","link":"#read-also","children":[]},{"level":2,"title":"Quotes","slug":"quotes","link":"#quotes","children":[]}],"git":{"updatedTime":1682266766000},"filePathRelative":"why-wasabi/WhyPrivacyImportant.md"}`);export{H as comp,L as data}; diff --git a/assets/app-BPKesm5h.js b/assets/app-BgbPjqpx.js similarity index 77% rename from assets/app-BPKesm5h.js rename to assets/app-BgbPjqpx.js index f17894f2c9..1b80264d3b 100644 --- a/assets/app-BPKesm5h.js +++ b/assets/app-BgbPjqpx.js @@ -2,7 +2,7 @@ * @vue/shared v3.4.19 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function Tl(e,t){const n=new Set(e.split(","));return t?i=>n.has(i.toLowerCase()):i=>n.has(i)}const ke={},an=[],et=()=>{},la=()=>!1,Gn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Wl=e=>e.startsWith("onUpdate:"),Ae=Object.assign,Rl=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},oa=Object.prototype.hasOwnProperty,he=(e,t)=>oa.call(e,t),ne=Array.isArray,cn=e=>Ti(e)==="[object Map]",Es=e=>Ti(e)==="[object Set]",se=e=>typeof e=="function",Le=e=>typeof e=="string",wn=e=>typeof e=="symbol",_e=e=>e!==null&&typeof e=="object",xs=e=>(_e(e)||se(e))&&se(e.then)&&se(e.catch),Ss=Object.prototype.toString,Ti=e=>Ss.call(e),sa=e=>Ti(e).slice(8,-1),Ls=e=>Ti(e)==="[object Object]",Ol=e=>Le(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,un=Tl(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Wi=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ra=/-(\w)/g,nt=Wi(e=>e.replace(ra,(t,n)=>n?n.toUpperCase():"")),aa=/\B([A-Z])/g,Zt=Wi(e=>e.replace(aa,"-$1").toLowerCase()),qn=Wi(e=>e.charAt(0).toUpperCase()+e.slice(1)),Qi=Wi(e=>e?`on${qn(e)}`:""),Ot=(e,t)=>!Object.is(e,t),Ji=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},ca=e=>{const t=parseFloat(e);return isNaN(t)?e:t},ua=e=>{const t=Le(e)?Number(e):NaN;return isNaN(t)?e:t};let ho;const Is=()=>ho||(ho=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Kn(e){if(ne(e)){const t={};for(let n=0;n{if(n){const i=n.split(ha);i.length>1&&(t[i[0].trim()]=i[1].trim())}}),t}function qe(e){let t="";if(Le(e))t=e;else if(ne(e))for(let n=0;nLe(e)?e:e==null?"":ne(e)||_e(e)&&(e.toString===Ss||!se(e.toString))?JSON.stringify(e,As,2):String(e),As=(e,t)=>t&&t.__v_isRef?As(e,t.value):cn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[i,l],o)=>(n[Yi(i,o)+" =>"]=l,n),{})}:Es(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Yi(n))}:wn(t)?Yi(t):_e(t)&&!ne(t)&&!Ls(t)?String(t):t,Yi=(e,t="")=>{var n;return wn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +**/function Tl(e,t){const n=new Set(e.split(","));return i=>n.has(i)}const ke={},an=[],et=()=>{},la=()=>!1,Gn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Wl=e=>e.startsWith("onUpdate:"),Ae=Object.assign,Rl=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},oa=Object.prototype.hasOwnProperty,he=(e,t)=>oa.call(e,t),ne=Array.isArray,cn=e=>Ti(e)==="[object Map]",Es=e=>Ti(e)==="[object Set]",se=e=>typeof e=="function",Le=e=>typeof e=="string",wn=e=>typeof e=="symbol",_e=e=>e!==null&&typeof e=="object",xs=e=>(_e(e)||se(e))&&se(e.then)&&se(e.catch),Ss=Object.prototype.toString,Ti=e=>Ss.call(e),sa=e=>Ti(e).slice(8,-1),Ls=e=>Ti(e)==="[object Object]",Ol=e=>Le(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,un=Tl(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Wi=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ra=/-(\w)/g,nt=Wi(e=>e.replace(ra,(t,n)=>n?n.toUpperCase():"")),aa=/\B([A-Z])/g,Zt=Wi(e=>e.replace(aa,"-$1").toLowerCase()),qn=Wi(e=>e.charAt(0).toUpperCase()+e.slice(1)),Qi=Wi(e=>e?`on${qn(e)}`:""),Ot=(e,t)=>!Object.is(e,t),Ji=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},ca=e=>{const t=parseFloat(e);return isNaN(t)?e:t},ua=e=>{const t=Le(e)?Number(e):NaN;return isNaN(t)?e:t};let ho;const Is=()=>ho||(ho=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Kn(e){if(ne(e)){const t={};for(let n=0;n{if(n){const i=n.split(ha);i.length>1&&(t[i[0].trim()]=i[1].trim())}}),t}function qe(e){let t="";if(Le(e))t=e;else if(ne(e))for(let n=0;nLe(e)?e:e==null?"":ne(e)||_e(e)&&(e.toString===Ss||!se(e.toString))?JSON.stringify(e,As,2):String(e),As=(e,t)=>t&&t.__v_isRef?As(e,t.value):cn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[i,l],o)=>(n[Yi(i,o)+" =>"]=l,n),{})}:Es(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Yi(n))}:wn(t)?Yi(t):_e(t)&&!ne(t)&&!Ls(t)?String(t):t,Yi=(e,t="")=>{var n;return wn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** * @vue/reactivity v3.4.19 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT @@ -10,23 +10,23 @@ * @vue/runtime-core v3.4.19 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function Rt(e,t,n,i){try{return i?e(...i):e()}catch(l){Jn(l,t,n)}}function tt(e,t,n,i){if(se(e)){const o=Rt(e,t,n,i);return o&&xs(o)&&o.catch(s=>{Jn(s,t,n)}),o}const l=[];for(let o=0;o>>1,l=De[i],o=Bn(l);out&&De.splice(t,1)}function Ja(e){ne(e)?hn.push(...e):(!Lt||!Lt.includes(e,e.allowRecurse?Ut+1:Ut))&&hn.push(e),Js()}function yo(e,t,n=Mn?ut+1:0){for(;nBn(n)-Bn(i));if(hn.length=0,Lt){Lt.push(...t);return}for(Lt=t,Ut=0;Ute.id==null?1/0:e.id,Ya=(e,t)=>{const n=Bn(e)-Bn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Ys(e){vl=!1,Mn=!0,De.sort(Ya);try{for(ut=0;utLe(g)?g.trim():g)),d&&(l=n.map(ca))}let r,a=i[r=Qi(t)]||i[r=Qi(nt(t))];!a&&o&&(a=i[r=Qi(Zt(t))]),a&&tt(a,e,6,l);const c=i[r+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,tt(c,e,6,l)}}function Xs(e,t,n=!1){const i=t.emitsCache,l=i.get(e);if(l!==void 0)return l;const o=e.emits;let s={},r=!1;if(!se(e)){const a=c=>{const u=Xs(c,t,!0);u&&(r=!0,Ae(s,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!r?(_e(e)&&i.set(e,null),null):(ne(o)?o.forEach(a=>s[a]=null):Ae(s,o),_e(e)&&i.set(e,s),s)}function Fi(e,t){return!e||!Gn(t)?!1:(t=t.slice(2).replace(/Once$/,""),he(e,t[0].toLowerCase()+t.slice(1))||he(e,Zt(t))||he(e,t))}let Pe=null,Zs=null;function Ci(e){const t=Pe;return Pe=e,Zs=e&&e.type.__scopeId||null,t}function He(e,t=Pe,n){if(!t||e._n)return e;const i=(...l)=>{i._d&&Wo(-1);const o=Ci(t);let s;try{s=e(...l)}finally{Ci(o),i._d&&Wo(1)}return s};return i._n=!0,i._c=!0,i._d=!0,i}function Xi(e){const{type:t,vnode:n,proxy:i,withProxy:l,props:o,propsOptions:[s],slots:r,attrs:a,emit:c,render:u,renderCache:d,data:h,setupState:g,ctx:m,inheritAttrs:y}=e;let k,x;const I=Ci(e);try{if(n.shapeFlag&4){const _=l||i,D=_;k=lt(u.call(D,_,d,o,g,h,m)),x=a}else{const _=t;k=lt(_.length>1?_(o,{attrs:a,slots:r,emit:c}):_(o,null)),x=t.props?a:Za(a)}}catch(_){On.length=0,Jn(_,e,1),k=ie(Ye)}let v=k;if(x&&y!==!1){const _=Object.keys(x),{shapeFlag:D}=v;_.length&&D&7&&(s&&_.some(Wl)&&(x=ec(x,s)),v=Ht(v,x))}return n.dirs&&(v=Ht(v),v.dirs=v.dirs?v.dirs.concat(n.dirs):n.dirs),n.transition&&(v.transition=n.transition),k=v,Ci(I),k}const Za=e=>{let t;for(const n in e)(n==="class"||n==="style"||Gn(n))&&((t||(t={}))[n]=e[n]);return t},ec=(e,t)=>{const n={};for(const i in e)(!Wl(i)||!(i.slice(9)in t))&&(n[i]=e[i]);return n};function tc(e,t,n){const{props:i,children:l,component:o}=e,{props:s,children:r,patchFlag:a}=t,c=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return i?ko(i,s,c):!!s;if(a&8){const u=t.dynamicProps;for(let d=0;de.__isSuspense;function tr(e,t){t&&t.pendingBranch?ne(e)?t.effects.push(...e):t.effects.push(e):Ja(e)}const sc=Symbol.for("v-scx"),rc=()=>ze(sc);function ac(e,t){return Vl(e,null,t)}const ai={};function Me(e,t,n){return Vl(e,t,n)}function Vl(e,t,{immediate:n,deep:i,flush:l,once:o,onTrack:s,onTrigger:r}=ke){if(t&&o){const W=t;t=(...F)=>{W(...F),D()}}const a=Oe,c=W=>i===!0?W:qt(W,i===!1?1:void 0);let u,d=!1,h=!1;if($e(e)?(u=()=>e.value,d=ki(e)):dn(e)?(u=()=>c(e),d=!0):ne(e)?(h=!0,d=e.some(W=>dn(W)||ki(W)),u=()=>e.map(W=>{if($e(W))return W.value;if(dn(W))return c(W);if(se(W))return Rt(W,a,2)})):se(e)?t?u=()=>Rt(e,a,2):u=()=>(g&&g(),tt(e,a,3,[m])):u=et,t&&i){const W=u;u=()=>qt(W())}let g,m=W=>{g=v.onStop=()=>{Rt(W,a,4),g=v.onStop=void 0}},y;if(Zn)if(m=et,t?n&&tt(t,a,3,[u(),h?[]:void 0,m]):u(),l==="sync"){const W=rc();y=W.__watcherHandles||(W.__watcherHandles=[])}else return et;let k=h?new Array(e.length).fill(ai):ai;const x=()=>{if(!(!v.active||!v.dirty))if(t){const W=v.run();(i||d||(h?W.some((F,b)=>Ot(F,k[b])):Ot(W,k)))&&(g&&g(),tt(t,a,3,[W,k===ai?void 0:h&&k[0]===ai?[]:k,m]),k=W)}else v.run()};x.allowRecurse=!!t;let I;l==="sync"?I=x:l==="post"?I=()=>Ge(x,a&&a.suspense):(x.pre=!0,a&&(x.id=a.uid),I=()=>Hi(x));const v=new jl(u,et,I),_=Ts(),D=()=>{v.stop(),_&&Rl(_.effects,v)};return t?n?x():k=v.run():l==="post"?Ge(v.run.bind(v),a&&a.suspense):v.run(),y&&y.push(D),D}function cc(e,t,n){const i=this.proxy,l=Le(e)?e.includes(".")?nr(i,e):()=>i[e]:e.bind(i,i);let o;se(t)?o=t:(o=t.handler,n=t);const s=Xn(this),r=Vl(l,o.bind(i),n);return s(),r}function nr(e,t){const n=t.split(".");return()=>{let i=e;for(let l=0;l0){if(n>=t)return e;n++}if(i=i||new Set,i.has(e))return e;if(i.add(e),$e(e))qt(e.value,t,n,i);else if(ne(e))for(let l=0;l{qt(l,t,n,i)});else if(Ls(e))for(const l in e)qt(e[l],t,n,i);return e}function Ei(e,t){if(Pe===null)return e;const n=zi(Pe)||Pe.proxy,i=e.dirs||(e.dirs=[]);for(let l=0;l{e.isMounted=!0}),Bi(()=>{e.isUnmounting=!0}),e}const Xe=[Function,Array],ir={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Xe,onEnter:Xe,onAfterEnter:Xe,onEnterCancelled:Xe,onBeforeLeave:Xe,onLeave:Xe,onAfterLeave:Xe,onLeaveCancelled:Xe,onBeforeAppear:Xe,onAppear:Xe,onAfterAppear:Xe,onAppearCancelled:Xe},dc={name:"BaseTransition",props:ir,setup(e,{slots:t}){const n=Ni(),i=uc();let l;return()=>{const o=t.default&&or(t.default(),!0);if(!o||!o.length)return;let s=o[0];if(o.length>1){for(const y of o)if(y.type!==Ye){s=y;break}}const r=pe(e),{mode:a}=r;if(i.isLeaving)return Zi(s);const c=Co(s);if(!c)return Zi(s);const u=bl(c,r,i,n);wl(c,u);const d=n.subTree,h=d&&Co(d);let g=!1;const{getTransitionKey:m}=c.type;if(m){const y=m();l===void 0?l=y:y!==l&&(l=y,g=!0)}if(h&&h.type!==Ye&&(!Gt(c,h)||g)){const y=bl(h,r,i,n);if(wl(h,y),a==="out-in")return i.isLeaving=!0,y.afterLeave=()=>{i.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},Zi(s);a==="in-out"&&c.type!==Ye&&(y.delayLeave=(k,x,I)=>{const v=lr(i,h);v[String(h.key)]=h,k[It]=()=>{x(),k[It]=void 0,delete u.delayedLeave},u.delayedLeave=I})}return s}}},hc=dc;function lr(e,t){const{leavingVNodes:n}=e;let i=n.get(t.type);return i||(i=Object.create(null),n.set(t.type,i)),i}function bl(e,t,n,i){const{appear:l,mode:o,persisted:s=!1,onBeforeEnter:r,onEnter:a,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:d,onLeave:h,onAfterLeave:g,onLeaveCancelled:m,onBeforeAppear:y,onAppear:k,onAfterAppear:x,onAppearCancelled:I}=t,v=String(e.key),_=lr(n,e),D=(b,M)=>{b&&tt(b,i,9,M)},W=(b,M)=>{const P=M[1];D(b,M),ne(b)?b.every(q=>q.length<=1)&&P():b.length<=1&&P()},F={mode:o,persisted:s,beforeEnter(b){let M=r;if(!n.isMounted)if(l)M=y||r;else return;b[It]&&b[It](!0);const P=_[v];P&&Gt(e,P)&&P.el[It]&&P.el[It](),D(M,[b])},enter(b){let M=a,P=c,q=u;if(!n.isMounted)if(l)M=k||a,P=x||c,q=I||u;else return;let C=!1;const H=b[ci]=te=>{C||(C=!0,te?D(q,[b]):D(P,[b]),F.delayedLeave&&F.delayedLeave(),b[ci]=void 0)};M?W(M,[b,H]):H()},leave(b,M){const P=String(e.key);if(b[ci]&&b[ci](!0),n.isUnmounting)return M();D(d,[b]);let q=!1;const C=b[It]=H=>{q||(q=!0,M(),H?D(m,[b]):D(g,[b]),b[It]=void 0,_[P]===e&&delete _[P])};_[P]=e,h?W(h,[b,C]):C()},clone(b){return bl(b,t,n,i)}};return F}function Zi(e){if(Yn(e))return e=Ht(e),e.children=null,e}function Co(e){return Yn(e)?e.children?e.children[0]:void 0:e}function wl(e,t){e.shapeFlag&6&&e.component?wl(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function or(e,t=!1,n){let i=[],l=0;for(let o=0;o1)for(let o=0;o!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function fc(e){se(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:i,delay:l=200,timeout:o,suspensible:s=!0,onError:r}=e;let a=null,c,u=0;const d=()=>(u++,a=null,h()),h=()=>{let g;return a||(g=a=t().catch(m=>{if(m=m instanceof Error?m:new Error(String(m)),r)return new Promise((y,k)=>{r(m,()=>y(d()),()=>k(m),u+1)});throw m}).then(m=>g!==a&&a?a:(m&&(m.__esModule||m[Symbol.toStringTag]==="Module")&&(m=m.default),c=m,m)))};return ge({name:"AsyncComponentWrapper",__asyncLoader:h,get __asyncResolved(){return c},setup(){const g=Oe;if(c)return()=>el(c,g);const m=I=>{a=null,Jn(I,g,13,!i)};if(s&&g.suspense||Zn)return h().then(I=>()=>el(I,g)).catch(I=>(m(I),()=>i?ie(i,{error:I}):null));const y=re(!1),k=re(),x=re(!!l);return l&&setTimeout(()=>{x.value=!1},l),o!=null&&setTimeout(()=>{if(!y.value&&!k.value){const I=new Error(`Async component timed out after ${o}ms.`);m(I),k.value=I}},o),h().then(()=>{y.value=!0,g.parent&&Yn(g.parent.vnode)&&(g.parent.effect.dirty=!0,Hi(g.parent.update))}).catch(I=>{m(I),k.value=I}),()=>{if(y.value&&c)return el(c,g);if(k.value&&i)return ie(i,{error:k.value});if(n&&!x.value)return ie(n)}}})}function el(e,t){const{ref:n,props:i,children:l,ce:o}=t.vnode,s=ie(e,i,l);return s.ref=n,s.ce=o,delete t.vnode.ce,s}const Yn=e=>e.type.__isKeepAlive;function pc(e,t){sr(e,"a",t)}function gc(e,t){sr(e,"da",t)}function sr(e,t,n=Oe){const i=e.__wdc||(e.__wdc=()=>{let l=n;for(;l;){if(l.isDeactivated)return;l=l.parent}return e()});if(Mi(t,i,n),n){let l=n.parent;for(;l&&l.parent;)Yn(l.parent.vnode)&&mc(i,t,n,l),l=l.parent}}function mc(e,t,n,i){const l=Mi(t,e,i,!0);Di(()=>{Rl(i[t],l)},n)}function Mi(e,t,n=Oe,i=!1){if(n){const l=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...s)=>{if(n.isUnmounted)return;en();const r=Xn(n),a=tt(t,n,e,s);return r(),tn(),a});return i?l.unshift(o):l.push(o),o}}const wt=e=>(t,n=Oe)=>(!Zn||e==="sp")&&Mi(e,(...i)=>t(...i),n),vc=wt("bm"),Ve=wt("m"),bc=wt("bu"),wc=wt("u"),Bi=wt("bum"),Di=wt("um"),yc=wt("sp"),kc=wt("rtg"),_c=wt("rtc");function Cc(e,t=Oe){Mi("ec",e,t)}function jt(e,t,n,i){let l;const o=n&&n[i];if(ne(e)||Le(e)){l=new Array(e.length);for(let s=0,r=e.length;st(s,r,void 0,o&&o[r]));else{const s=Object.keys(e);l=new Array(s.length);for(let r=0,a=s.length;rLi(t)?!(t.type===Ye||t.type===ye&&!rr(t.children)):!0)?e:null}const yl=e=>e?yr(e)?zi(e)||e.proxy:yl(e.parent):null,Tn=Ae(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>yl(e.parent),$root:e=>yl(e.root),$emit:e=>e.emit,$options:e=>Ul(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Hi(e.update)}),$nextTick:e=>e.n||(e.n=kn.bind(e.proxy)),$watch:e=>cc.bind(e)}),tl=(e,t)=>e!==ke&&!e.__isScriptSetup&&he(e,t),Ec={get({_:e},t){const{ctx:n,setupState:i,data:l,props:o,accessCache:s,type:r,appContext:a}=e;let c;if(t[0]!=="$"){const g=s[t];if(g!==void 0)switch(g){case 1:return i[t];case 2:return l[t];case 4:return n[t];case 3:return o[t]}else{if(tl(i,t))return s[t]=1,i[t];if(l!==ke&&he(l,t))return s[t]=2,l[t];if((c=e.propsOptions[0])&&he(c,t))return s[t]=3,o[t];if(n!==ke&&he(n,t))return s[t]=4,n[t];kl&&(s[t]=0)}}const u=Tn[t];let d,h;if(u)return t==="$attrs"&&Ke(e,"get",t),u(e);if((d=r.__cssModules)&&(d=d[t]))return d;if(n!==ke&&he(n,t))return s[t]=4,n[t];if(h=a.config.globalProperties,he(h,t))return h[t]},set({_:e},t,n){const{data:i,setupState:l,ctx:o}=e;return tl(l,t)?(l[t]=n,!0):i!==ke&&he(i,t)?(i[t]=n,!0):he(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:i,appContext:l,propsOptions:o}},s){let r;return!!n[s]||e!==ke&&he(e,s)||tl(t,s)||(r=o[0])&&he(r,s)||he(i,s)||he(Tn,s)||he(l.config.globalProperties,s)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:he(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Eo(e){return ne(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let kl=!0;function xc(e){const t=Ul(e),n=e.proxy,i=e.ctx;kl=!1,t.beforeCreate&&xo(t.beforeCreate,e,"bc");const{data:l,computed:o,methods:s,watch:r,provide:a,inject:c,created:u,beforeMount:d,mounted:h,beforeUpdate:g,updated:m,activated:y,deactivated:k,beforeDestroy:x,beforeUnmount:I,destroyed:v,unmounted:_,render:D,renderTracked:W,renderTriggered:F,errorCaptured:b,serverPrefetch:M,expose:P,inheritAttrs:q,components:C,directives:H,filters:te}=t;if(c&&Sc(c,i,null),s)for(const Q in s){const U=s[Q];se(U)&&(i[Q]=U.bind(n))}if(l){const Q=l.call(n,n);_e(Q)&&(e.data=Qn(Q))}if(kl=!0,o)for(const Q in o){const U=o[Q],Te=se(U)?U.bind(n,n):se(U.get)?U.get.bind(n,n):et,je=!se(U)&&se(U.set)?U.set.bind(n):et,Ue=R({get:Te,set:je});Object.defineProperty(i,Q,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:Be=>Ue.value=Be})}if(r)for(const Q in r)ar(r[Q],i,n,Q);if(a){const Q=se(a)?a.call(n):a;Reflect.ownKeys(Q).forEach(U=>{Yt(U,Q[U])})}u&&xo(u,e,"c");function T(Q,U){ne(U)?U.forEach(Te=>Q(Te.bind(n))):U&&Q(U.bind(n))}if(T(vc,d),T(Ve,h),T(bc,g),T(wc,m),T(pc,y),T(gc,k),T(Cc,b),T(_c,W),T(kc,F),T(Bi,I),T(Di,_),T(yc,M),ne(P))if(P.length){const Q=e.exposed||(e.exposed={});P.forEach(U=>{Object.defineProperty(Q,U,{get:()=>n[U],set:Te=>n[U]=Te})})}else e.exposed||(e.exposed={});D&&e.render===et&&(e.render=D),q!=null&&(e.inheritAttrs=q),C&&(e.components=C),H&&(e.directives=H)}function Sc(e,t,n=et){ne(e)&&(e=_l(e));for(const i in e){const l=e[i];let o;_e(l)?"default"in l?o=ze(l.from||i,l.default,!0):o=ze(l.from||i):o=ze(l),$e(o)?Object.defineProperty(t,i,{enumerable:!0,configurable:!0,get:()=>o.value,set:s=>o.value=s}):t[i]=o}}function xo(e,t,n){tt(ne(e)?e.map(i=>i.bind(t.proxy)):e.bind(t.proxy),t,n)}function ar(e,t,n,i){const l=i.includes(".")?nr(n,i):()=>n[i];if(Le(e)){const o=t[e];se(o)&&Me(l,o)}else if(se(e))Me(l,e.bind(n));else if(_e(e))if(ne(e))e.forEach(o=>ar(o,t,n,i));else{const o=se(e.handler)?e.handler.bind(n):t[e.handler];se(o)&&Me(l,o,e)}}function Ul(e){const t=e.type,{mixins:n,extends:i}=t,{mixins:l,optionsCache:o,config:{optionMergeStrategies:s}}=e.appContext,r=o.get(t);let a;return r?a=r:!l.length&&!n&&!i?a=t:(a={},l.length&&l.forEach(c=>xi(a,c,s,!0)),xi(a,t,s)),_e(t)&&o.set(t,a),a}function xi(e,t,n,i=!1){const{mixins:l,extends:o}=t;o&&xi(e,o,n,!0),l&&l.forEach(s=>xi(e,s,n,!0));for(const s in t)if(!(i&&s==="expose")){const r=Lc[s]||n&&n[s];e[s]=r?r(e[s],t[s]):t[s]}return e}const Lc={data:So,props:Lo,emits:Lo,methods:In,computed:In,beforeCreate:Ne,created:Ne,beforeMount:Ne,mounted:Ne,beforeUpdate:Ne,updated:Ne,beforeDestroy:Ne,beforeUnmount:Ne,destroyed:Ne,unmounted:Ne,activated:Ne,deactivated:Ne,errorCaptured:Ne,serverPrefetch:Ne,components:In,directives:In,watch:Pc,provide:So,inject:Ic};function So(e,t){return t?e?function(){return Ae(se(e)?e.call(this,this):e,se(t)?t.call(this,this):t)}:t:e}function Ic(e,t){return In(_l(e),_l(t))}function _l(e){if(ne(e)){const t={};for(let n=0;n1)return n&&se(t)?t.call(i&&i.proxy):t}}function Wc(e,t,n,i=!1){const l={},o={};wi(o,$i,1),e.propsDefaults=Object.create(null),ur(e,t,l,o);for(const s in e.propsOptions[0])s in l||(l[s]=void 0);n?e.props=i?l:zs(l):e.type.props?e.props=l:e.props=o,e.attrs=o}function Rc(e,t,n,i){const{props:l,attrs:o,vnode:{patchFlag:s}}=e,r=pe(l),[a]=e.propsOptions;let c=!1;if((i||s>0)&&!(s&16)){if(s&8){const u=e.vnode.dynamicProps;for(let d=0;d{a=!0;const[h,g]=dr(d,t,!0);Ae(s,h),g&&r.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!o&&!a)return _e(e)&&i.set(e,an),an;if(ne(o))for(let u=0;u-1,g[1]=y<0||m-1||he(g,"default"))&&r.push(d)}}}const c=[s,r];return _e(e)&&i.set(e,c),c}function Io(e){return e[0]!=="$"&&!un(e)}function Po(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function Ao(e,t){return Po(e)===Po(t)}function To(e,t){return ne(t)?t.findIndex(n=>Ao(n,e)):se(t)&&Ao(t,e)?0:-1}const hr=e=>e[0]==="_"||e==="$stable",Gl=e=>ne(e)?e.map(lt):[lt(e)],Oc=(e,t,n)=>{if(t._n)return t;const i=He((...l)=>Gl(t(...l)),n);return i._c=!1,i},fr=(e,t,n)=>{const i=e._ctx;for(const l in e){if(hr(l))continue;const o=e[l];if(se(o))t[l]=Oc(l,o,i);else if(o!=null){const s=Gl(o);t[l]=()=>s}}},pr=(e,t)=>{const n=Gl(t);e.slots.default=()=>n},jc=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=pe(t),wi(t,"_",n)):fr(t,e.slots={})}else e.slots={},t&&pr(e,t);wi(e.slots,$i,1)},Hc=(e,t,n)=>{const{vnode:i,slots:l}=e;let o=!0,s=ke;if(i.shapeFlag&32){const r=t._;r?n&&r===1?o=!1:(Ae(l,t),!n&&r===1&&delete l._):(o=!t.$stable,fr(t,l)),s=t}else t&&(pr(e,t),s={default:1});if(o)for(const r in l)!hr(r)&&s[r]==null&&delete l[r]};function Si(e,t,n,i,l=!1){if(ne(e)){e.forEach((h,g)=>Si(h,t&&(ne(t)?t[g]:t),n,i,l));return}if(fn(i)&&!l)return;const o=i.shapeFlag&4?zi(i.component)||i.component.proxy:i.el,s=l?null:o,{i:r,r:a}=e,c=t&&t.r,u=r.refs===ke?r.refs={}:r.refs,d=r.setupState;if(c!=null&&c!==a&&(Le(c)?(u[c]=null,he(d,c)&&(d[c]=null)):$e(c)&&(c.value=null)),se(a))Rt(a,r,12,[s,u]);else{const h=Le(a),g=$e(a);if(h||g){const m=()=>{if(e.f){const y=h?he(d,a)?d[a]:u[a]:a.value;l?ne(y)&&Rl(y,o):ne(y)?y.includes(o)||y.push(o):h?(u[a]=[o],he(d,a)&&(d[a]=u[a])):(a.value=[o],e.k&&(u[e.k]=a.value))}else h?(u[a]=s,he(d,a)&&(d[a]=s)):g&&(a.value=s,e.k&&(u[e.k]=s))};s?(m.id=-1,Ge(m,n)):m()}}}let Et=!1;const Fc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Mc=e=>e.namespaceURI.includes("MathML"),ui=e=>{if(Fc(e))return"svg";if(Mc(e))return"mathml"},di=e=>e.nodeType===8;function Bc(e){const{mt:t,p:n,o:{patchProp:i,createText:l,nextSibling:o,parentNode:s,remove:r,insert:a,createComment:c}}=e,u=(v,_)=>{if(!_.hasChildNodes()){n(null,v,_),_i(),_._vnode=v;return}Et=!1,d(_.firstChild,v,null,null,null),_i(),_._vnode=v,Et&&console.error("Hydration completed but contains mismatches.")},d=(v,_,D,W,F,b=!1)=>{const M=di(v)&&v.data==="[",P=()=>y(v,_,D,W,F,M),{type:q,ref:C,shapeFlag:H,patchFlag:te}=_;let le=v.nodeType;_.el=v,te===-2&&(b=!1,_.dynamicChildren=null);let T=null;switch(q){case mn:le!==3?_.children===""?(a(_.el=l(""),s(v),v),T=v):T=P():(v.data!==_.children&&(Et=!0,v.data=_.children),T=o(v));break;case Ye:I(v)?(T=o(v),x(_.el=v.content.firstChild,v,D)):le!==8||M?T=P():T=o(v);break;case Rn:if(M&&(v=o(v),le=v.nodeType),le===1||le===3){T=v;const Q=!_.children.length;for(let U=0;U<_.staticCount;U++)Q&&(_.children+=T.nodeType===1?T.outerHTML:T.data),U===_.staticCount-1&&(_.anchor=T),T=o(T);return M?o(T):T}else P();break;case ye:M?T=m(v,_,D,W,F,b):T=P();break;default:if(H&1)(le!==1||_.type.toLowerCase()!==v.tagName.toLowerCase())&&!I(v)?T=P():T=h(v,_,D,W,F,b);else if(H&6){_.slotScopeIds=F;const Q=s(v);if(M?T=k(v):di(v)&&v.data==="teleport start"?T=k(v,v.data,"teleport end"):T=o(v),t(_,Q,null,D,W,ui(Q),b),fn(_)){let U;M?(U=ie(ye),U.anchor=T?T.previousSibling:Q.lastChild):U=v.nodeType===3?Ft(""):ie("div"),U.el=v,_.component.subTree=U}}else H&64?le!==8?T=P():T=_.type.hydrate(v,_,D,W,F,b,e,g):H&128&&(T=_.type.hydrate(v,_,D,W,ui(s(v)),F,b,e,d))}return C!=null&&Si(C,null,W,_),T},h=(v,_,D,W,F,b)=>{b=b||!!_.dynamicChildren;const{type:M,props:P,patchFlag:q,shapeFlag:C,dirs:H,transition:te}=_,le=M==="input"||M==="option";if(le||q!==-1){H&&ct(_,null,D,"created");let T=!1;if(I(v)){T=gr(W,te)&&D&&D.vnode.props&&D.vnode.props.appear;const U=v.content.firstChild;T&&te.beforeEnter(U),x(U,v,D),_.el=v=U}if(C&16&&!(P&&(P.innerHTML||P.textContent))){let U=g(v.firstChild,_,v,D,W,F,b);for(;U;){Et=!0;const Te=U;U=U.nextSibling,r(Te)}}else C&8&&v.textContent!==_.children&&(Et=!0,v.textContent=_.children);if(P)if(le||!b||q&48)for(const U in P)(le&&(U.endsWith("value")||U==="indeterminate")||Gn(U)&&!un(U)||U[0]===".")&&i(v,U,null,P[U],void 0,void 0,D);else P.onClick&&i(v,"onClick",null,P.onClick,void 0,void 0,D);let Q;(Q=P&&P.onVnodeBeforeMount)&&Ze(Q,D,_),H&&ct(_,null,D,"beforeMount"),((Q=P&&P.onVnodeMounted)||H||T)&&tr(()=>{Q&&Ze(Q,D,_),T&&te.enter(v),H&&ct(_,null,D,"mounted")},W)}return v.nextSibling},g=(v,_,D,W,F,b,M)=>{M=M||!!_.dynamicChildren;const P=_.children,q=P.length;for(let C=0;C{const{slotScopeIds:M}=_;M&&(F=F?F.concat(M):M);const P=s(v),q=g(o(v),_,P,D,W,F,b);return q&&di(q)&&q.data==="]"?o(_.anchor=q):(Et=!0,a(_.anchor=c("]"),P,q),q)},y=(v,_,D,W,F,b)=>{if(Et=!0,_.el=null,b){const q=k(v);for(;;){const C=o(v);if(C&&C!==q)r(C);else break}}const M=o(v),P=s(v);return r(v),n(null,_,P,M,D,W,ui(P),F),M},k=(v,_="[",D="]")=>{let W=0;for(;v;)if(v=o(v),v&&di(v)&&(v.data===_&&W++,v.data===D)){if(W===0)return o(v);W--}return v},x=(v,_,D)=>{const W=_.parentNode;W&&W.replaceChild(v,_);let F=D;for(;F;)F.vnode.el===_&&(F.vnode.el=F.subTree.el=v),F=F.parent},I=v=>v.nodeType===1&&v.tagName.toLowerCase()==="template";return[u,d]}const Ge=tr;function Dc(e){return $c(e,Bc)}function $c(e,t){const n=Is();n.__VUE__=!0;const{insert:i,remove:l,patchProp:o,createElement:s,createText:r,createComment:a,setText:c,setElementText:u,parentNode:d,nextSibling:h,setScopeId:g=et,insertStaticContent:m}=e,y=(f,p,w,L=null,E=null,O=null,N=void 0,j=null,B=!!p.dynamicChildren)=>{if(f===p)return;f&&!Gt(f,p)&&(L=S(f),Be(f,E,O,!0),f=null),p.patchFlag===-2&&(B=!1,p.dynamicChildren=null);const{type:A,ref:G,shapeFlag:Z}=p;switch(A){case mn:k(f,p,w,L);break;case Ye:x(f,p,w,L);break;case Rn:f==null&&I(p,w,L,N);break;case ye:C(f,p,w,L,E,O,N,j,B);break;default:Z&1?D(f,p,w,L,E,O,N,j,B):Z&6?H(f,p,w,L,E,O,N,j,B):(Z&64||Z&128)&&A.process(f,p,w,L,E,O,N,j,B,K)}G!=null&&E&&Si(G,f&&f.ref,O,p||f,!p)},k=(f,p,w,L)=>{if(f==null)i(p.el=r(p.children),w,L);else{const E=p.el=f.el;p.children!==f.children&&c(E,p.children)}},x=(f,p,w,L)=>{f==null?i(p.el=a(p.children||""),w,L):p.el=f.el},I=(f,p,w,L)=>{[f.el,f.anchor]=m(f.children,p,w,L,f.el,f.anchor)},v=({el:f,anchor:p},w,L)=>{let E;for(;f&&f!==p;)E=h(f),i(f,w,L),f=E;i(p,w,L)},_=({el:f,anchor:p})=>{let w;for(;f&&f!==p;)w=h(f),l(f),f=w;l(p)},D=(f,p,w,L,E,O,N,j,B)=>{p.type==="svg"?N="svg":p.type==="math"&&(N="mathml"),f==null?W(p,w,L,E,O,N,j,B):M(f,p,E,O,N,j,B)},W=(f,p,w,L,E,O,N,j)=>{let B,A;const{props:G,shapeFlag:Z,transition:J,dirs:oe}=f;if(B=f.el=s(f.type,O,G&&G.is,G),Z&8?u(B,f.children):Z&16&&b(f.children,B,null,L,E,nl(f,O),N,j),oe&&ct(f,null,L,"created"),F(B,f,f.scopeId,N,L),G){for(const be in G)be!=="value"&&!un(be)&&o(B,be,null,G[be],O,f.children,L,E,We);"value"in G&&o(B,"value",null,G.value,O),(A=G.onVnodeBeforeMount)&&Ze(A,L,f)}oe&&ct(f,null,L,"beforeMount");const ae=gr(E,J);ae&&J.beforeEnter(B),i(B,p,w),((A=G&&G.onVnodeMounted)||ae||oe)&&Ge(()=>{A&&Ze(A,L,f),ae&&J.enter(B),oe&&ct(f,null,L,"mounted")},E)},F=(f,p,w,L,E)=>{if(w&&g(f,w),L)for(let O=0;O{for(let A=B;A{const j=p.el=f.el;let{patchFlag:B,dynamicChildren:A,dirs:G}=p;B|=f.patchFlag&16;const Z=f.props||ke,J=p.props||ke;let oe;if(w&&Dt(w,!1),(oe=J.onVnodeBeforeUpdate)&&Ze(oe,w,p,f),G&&ct(p,f,w,"beforeUpdate"),w&&Dt(w,!0),A?P(f.dynamicChildren,A,j,w,L,nl(p,E),O):N||U(f,p,j,null,w,L,nl(p,E),O,!1),B>0){if(B&16)q(j,p,Z,J,w,L,E);else if(B&2&&Z.class!==J.class&&o(j,"class",null,J.class,E),B&4&&o(j,"style",Z.style,J.style,E),B&8){const ae=p.dynamicProps;for(let be=0;be{oe&&Ze(oe,w,p,f),G&&ct(p,f,w,"updated")},L)},P=(f,p,w,L,E,O,N)=>{for(let j=0;j{if(w!==L){if(w!==ke)for(const j in w)!un(j)&&!(j in L)&&o(f,j,w[j],null,N,p.children,E,O,We);for(const j in L){if(un(j))continue;const B=L[j],A=w[j];B!==A&&j!=="value"&&o(f,j,A,B,N,p.children,E,O,We)}"value"in L&&o(f,"value",w.value,L.value,N)}},C=(f,p,w,L,E,O,N,j,B)=>{const A=p.el=f?f.el:r(""),G=p.anchor=f?f.anchor:r("");let{patchFlag:Z,dynamicChildren:J,slotScopeIds:oe}=p;oe&&(j=j?j.concat(oe):oe),f==null?(i(A,w,L),i(G,w,L),b(p.children||[],w,G,E,O,N,j,B)):Z>0&&Z&64&&J&&f.dynamicChildren?(P(f.dynamicChildren,J,w,E,O,N,j),(p.key!=null||E&&p===E.subTree)&&mr(f,p,!0)):U(f,p,w,G,E,O,N,j,B)},H=(f,p,w,L,E,O,N,j,B)=>{p.slotScopeIds=j,f==null?p.shapeFlag&512?E.ctx.activate(p,w,L,N,B):te(p,w,L,E,O,N,B):le(f,p,B)},te=(f,p,w,L,E,O,N)=>{const j=f.component=Jc(f,L,E);if(Yn(f)&&(j.ctx.renderer=K),Yc(j),j.asyncDep){if(E&&E.registerDep(j,T),!f.el){const B=j.subTree=ie(Ye);x(null,B,p,w)}}else T(j,f,p,w,E,O,N)},le=(f,p,w)=>{const L=p.component=f.component;if(tc(f,p,w))if(L.asyncDep&&!L.asyncResolved){Q(L,p,w);return}else L.next=p,Qa(L.update),L.effect.dirty=!0,L.update();else p.el=f.el,L.vnode=p},T=(f,p,w,L,E,O,N)=>{const j=()=>{if(f.isMounted){let{next:G,bu:Z,u:J,parent:oe,vnode:ae}=f;{const on=vr(f);if(on){G&&(G.el=ae.el,Q(f,G,N)),on.asyncDep.then(()=>{f.isUnmounted||j()});return}}let be=G,Ce;Dt(f,!1),G?(G.el=ae.el,Q(f,G,N)):G=ae,Z&&Ji(Z),(Ce=G.props&&G.props.onVnodeBeforeUpdate)&&Ze(Ce,oe,G,ae),Dt(f,!0);const Re=Xi(f),it=f.subTree;f.subTree=Re,y(it,Re,d(it.el),S(it),f,E,O),G.el=Re.el,be===null&&nc(f,Re.el),J&&Ge(J,E),(Ce=G.props&&G.props.onVnodeUpdated)&&Ge(()=>Ze(Ce,oe,G,ae),E)}else{let G;const{el:Z,props:J}=p,{bm:oe,m:ae,parent:be}=f,Ce=fn(p);if(Dt(f,!1),oe&&Ji(oe),!Ce&&(G=J&&J.onVnodeBeforeMount)&&Ze(G,be,p),Dt(f,!0),Z&&ve){const Re=()=>{f.subTree=Xi(f),ve(Z,f.subTree,f,E,null)};Ce?p.type.__asyncLoader().then(()=>!f.isUnmounted&&Re()):Re()}else{const Re=f.subTree=Xi(f);y(null,Re,w,L,f,E,O),p.el=Re.el}if(ae&&Ge(ae,E),!Ce&&(G=J&&J.onVnodeMounted)){const Re=p;Ge(()=>Ze(G,be,Re),E)}(p.shapeFlag&256||be&&fn(be.vnode)&&be.vnode.shapeFlag&256)&&f.a&&Ge(f.a,E),f.isMounted=!0,p=w=L=null}},B=f.effect=new jl(j,et,()=>Hi(A),f.scope),A=f.update=()=>{B.dirty&&B.run()};A.id=f.uid,Dt(f,!0),A()},Q=(f,p,w)=>{p.component=f;const L=f.vnode.props;f.vnode=p,f.next=null,Rc(f,p.props,L,w),Hc(f,p.children,w),en(),yo(f),tn()},U=(f,p,w,L,E,O,N,j,B=!1)=>{const A=f&&f.children,G=f?f.shapeFlag:0,Z=p.children,{patchFlag:J,shapeFlag:oe}=p;if(J>0){if(J&128){je(A,Z,w,L,E,O,N,j,B);return}else if(J&256){Te(A,Z,w,L,E,O,N,j,B);return}}oe&8?(G&16&&We(A,E,O),Z!==A&&u(w,Z)):G&16?oe&16?je(A,Z,w,L,E,O,N,j,B):We(A,E,O,!0):(G&8&&u(w,""),oe&16&&b(Z,w,L,E,O,N,j,B))},Te=(f,p,w,L,E,O,N,j,B)=>{f=f||an,p=p||an;const A=f.length,G=p.length,Z=Math.min(A,G);let J;for(J=0;JG?We(f,E,O,!0,!1,Z):b(p,w,L,E,O,N,j,B,Z)},je=(f,p,w,L,E,O,N,j,B)=>{let A=0;const G=p.length;let Z=f.length-1,J=G-1;for(;A<=Z&&A<=J;){const oe=f[A],ae=p[A]=B?Pt(p[A]):lt(p[A]);if(Gt(oe,ae))y(oe,ae,w,null,E,O,N,j,B);else break;A++}for(;A<=Z&&A<=J;){const oe=f[Z],ae=p[J]=B?Pt(p[J]):lt(p[J]);if(Gt(oe,ae))y(oe,ae,w,null,E,O,N,j,B);else break;Z--,J--}if(A>Z){if(A<=J){const oe=J+1,ae=oeJ)for(;A<=Z;)Be(f[A],E,O,!0),A++;else{const oe=A,ae=A,be=new Map;for(A=ae;A<=J;A++){const Qe=p[A]=B?Pt(p[A]):lt(p[A]);Qe.key!=null&&be.set(Qe.key,A)}let Ce,Re=0;const it=J-ae+1;let on=!1,ao=0;const Cn=new Array(it);for(A=0;A=it){Be(Qe,E,O,!0);continue}let at;if(Qe.key!=null)at=be.get(Qe.key);else for(Ce=ae;Ce<=J;Ce++)if(Cn[Ce-ae]===0&&Gt(Qe,p[Ce])){at=Ce;break}at===void 0?Be(Qe,E,O,!0):(Cn[at-ae]=A+1,at>=ao?ao=at:on=!0,y(Qe,p[at],w,null,E,O,N,j,B),Re++)}const co=on?Nc(Cn):an;for(Ce=co.length-1,A=it-1;A>=0;A--){const Qe=ae+A,at=p[Qe],uo=Qe+1{const{el:O,type:N,transition:j,children:B,shapeFlag:A}=f;if(A&6){Ue(f.component.subTree,p,w,L);return}if(A&128){f.suspense.move(p,w,L);return}if(A&64){N.move(f,p,w,K);return}if(N===ye){i(O,p,w);for(let Z=0;Zj.enter(O),E);else{const{leave:Z,delayLeave:J,afterLeave:oe}=j,ae=()=>i(O,p,w),be=()=>{Z(O,()=>{ae(),oe&&oe()})};J?J(O,ae,be):be()}else i(O,p,w)},Be=(f,p,w,L=!1,E=!1)=>{const{type:O,props:N,ref:j,children:B,dynamicChildren:A,shapeFlag:G,patchFlag:Z,dirs:J}=f;if(j!=null&&Si(j,null,w,f,!0),G&256){p.ctx.deactivate(f);return}const oe=G&1&&J,ae=!fn(f);let be;if(ae&&(be=N&&N.onVnodeBeforeUnmount)&&Ze(be,p,f),G&6)rt(f.component,w,L);else{if(G&128){f.suspense.unmount(w,L);return}oe&&ct(f,null,p,"beforeUnmount"),G&64?f.type.remove(f,p,w,E,K,L):A&&(O!==ye||Z>0&&Z&64)?We(A,p,w,!1,!0):(O===ye&&Z&384||!E&&G&16)&&We(B,p,w),L&&kt(f)}(ae&&(be=N&&N.onVnodeUnmounted)||oe)&&Ge(()=>{be&&Ze(be,p,f),oe&&ct(f,null,p,"unmounted")},w)},kt=f=>{const{type:p,el:w,anchor:L,transition:E}=f;if(p===ye){_t(w,L);return}if(p===Rn){_(f);return}const O=()=>{l(w),E&&!E.persisted&&E.afterLeave&&E.afterLeave()};if(f.shapeFlag&1&&E&&!E.persisted){const{leave:N,delayLeave:j}=E,B=()=>N(w,O);j?j(f.el,O,B):B()}else O()},_t=(f,p)=>{let w;for(;f!==p;)w=h(f),l(f),f=w;l(p)},rt=(f,p,w)=>{const{bum:L,scope:E,update:O,subTree:N,um:j}=f;L&&Ji(L),E.stop(),O&&(O.active=!1,Be(N,f,p,w)),j&&Ge(j,p),Ge(()=>{f.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&f.asyncDep&&!f.asyncResolved&&f.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},We=(f,p,w,L=!1,E=!1,O=0)=>{for(let N=O;Nf.shapeFlag&6?S(f.component.subTree):f.shapeFlag&128?f.suspense.next():h(f.anchor||f.el);let V=!1;const $=(f,p,w)=>{f==null?p._vnode&&Be(p._vnode,null,null,!0):y(p._vnode||null,f,p,null,null,null,w),V||(V=!0,yo(),_i(),V=!1),p._vnode=f},K={p:y,um:Be,m:Ue,r:kt,mt:te,mc:b,pc:U,pbc:P,n:S,o:e};let ue,ve;return t&&([ue,ve]=t(K)),{render:$,hydrate:ue,createApp:Tc($,ue)}}function nl({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Dt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function gr(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function mr(e,t,n=!1){const i=e.children,l=t.children;if(ne(i)&&ne(l))for(let o=0;o>1,e[n[r]]0&&(t[i]=n[o-1]),n[o]=i)}}for(o=n.length,s=n[o-1];o-- >0;)n[o]=s,s=t[s];return n}function vr(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:vr(t)}const zc=e=>e.__isTeleport,ye=Symbol.for("v-fgt"),mn=Symbol.for("v-txt"),Ye=Symbol.for("v-cmt"),Rn=Symbol.for("v-stc"),On=[];let ot=null;function z(e=!1){On.push(ot=e?null:[])}function Vc(){On.pop(),ot=On[On.length-1]||null}let Dn=1;function Wo(e){Dn+=e}function br(e){return e.dynamicChildren=Dn>0?ot||an:null,Vc(),Dn>0&&ot&&ot.push(e),e}function X(e,t,n,i,l,o){return br(fe(e,t,n,i,l,o,!0))}function xe(e,t,n,i,l){return br(ie(e,t,n,i,l,!0))}function Li(e){return e?e.__v_isVNode===!0:!1}function Gt(e,t){return e.type===t.type&&e.key===t.key}const $i="__vInternal",wr=({key:e})=>e??null,vi=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Le(e)||$e(e)||se(e)?{i:Pe,r:e,k:t,f:!!n}:e:null);function fe(e,t=null,n=null,i=0,l=null,o=e===ye?0:1,s=!1,r=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&wr(t),ref:t&&vi(t),scopeId:Zs,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:i,dynamicProps:l,dynamicChildren:null,appContext:null,ctx:Pe};return r?(ql(a,n),o&128&&e.normalize(a)):n&&(a.shapeFlag|=Le(n)?8:16),Dn>0&&!s&&ot&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&ot.push(a),a}const ie=Uc;function Uc(e,t=null,n=null,i=0,l=null,o=!1){if((!e||e===ic)&&(e=Ye),Li(e)){const r=Ht(e,t,!0);return n&&ql(r,n),Dn>0&&!o&&ot&&(r.shapeFlag&6?ot[ot.indexOf(e)]=r:ot.push(r)),r.patchFlag|=-2,r}if(nu(e)&&(e=e.__vccOpts),t){t=Gc(t);let{class:r,style:a}=t;r&&!Le(r)&&(t.class=qe(r)),_e(a)&&(Vs(a)&&!ne(a)&&(a=Ae({},a)),t.style=Kn(a))}const s=Le(e)?1:oc(e)?128:zc(e)?64:_e(e)?4:se(e)?2:0;return fe(e,t,n,i,l,s,o,!0)}function Gc(e){return e?Vs(e)||$i in e?Ae({},e):e:null}function Ht(e,t,n=!1){const{props:i,ref:l,patchFlag:o,children:s}=e,r=t?El(i||{},t):i;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:r,key:r&&wr(r),ref:t&&t.ref?n&&l?ne(l)?l.concat(vi(t)):[l,vi(t)]:vi(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ye?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ht(e.ssContent),ssFallback:e.ssFallback&&Ht(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ft(e=" ",t=0){return ie(mn,null,e,t)}function qc(e,t){const n=ie(Rn,null,e);return n.staticCount=t,n}function Se(e="",t=!1){return t?(z(),xe(Ye,null,e)):ie(Ye,null,e)}function lt(e){return e==null||typeof e=="boolean"?ie(Ye):ne(e)?ie(ye,null,e.slice()):typeof e=="object"?Pt(e):ie(mn,null,String(e))}function Pt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ht(e)}function ql(e,t){let n=0;const{shapeFlag:i}=e;if(t==null)t=null;else if(ne(t))n=16;else if(typeof t=="object")if(i&65){const l=t.default;l&&(l._c&&(l._d=!1),ql(e,l()),l._c&&(l._d=!0));return}else{n=32;const l=t._;!l&&!($i in t)?t._ctx=Pe:l===3&&Pe&&(Pe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else se(t)?(t={default:t,_ctx:Pe},n=32):(t=String(t),i&64?(n=16,t=[Ft(t)]):n=8);e.children=t,e.shapeFlag|=n}function El(...e){const t={};for(let n=0;nOe||Pe;let Ii,xl;{const e=Is(),t=(n,i)=>{let l;return(l=e[n])||(l=e[n]=[]),l.push(i),o=>{l.length>1?l.forEach(s=>s(o)):l[0](o)}};Ii=t("__VUE_INSTANCE_SETTERS__",n=>Oe=n),xl=t("__VUE_SSR_SETTERS__",n=>Zn=n)}const Xn=e=>{const t=Oe;return Ii(e),e.scope.on(),()=>{e.scope.off(),Ii(t)}},Ro=()=>{Oe&&Oe.scope.off(),Ii(null)};function yr(e){return e.vnode.shapeFlag&4}let Zn=!1;function Yc(e,t=!1){t&&xl(t);const{props:n,children:i}=e.vnode,l=yr(e);Wc(e,n,l,t),jc(e,i);const o=l?Xc(e,t):void 0;return t&&xl(!1),o}function Xc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Us(new Proxy(e.ctx,Ec));const{setup:i}=n;if(i){const l=e.setupContext=i.length>1?eu(e):null,o=Xn(e);en();const s=Rt(i,e,0,[e.props,l]);if(tn(),o(),xs(s)){if(s.then(Ro,Ro),t)return s.then(r=>{Oo(e,r,t)}).catch(r=>{Jn(r,e,0)});e.asyncDep=s}else Oo(e,s,t)}else kr(e,t)}function Oo(e,t,n){se(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:_e(t)&&(e.setupState=Ks(t)),kr(e,n)}let jo;function kr(e,t,n){const i=e.type;if(!e.render){if(!t&&jo&&!i.render){const l=i.template||Ul(e).template;if(l){const{isCustomElement:o,compilerOptions:s}=e.appContext.config,{delimiters:r,compilerOptions:a}=i,c=Ae(Ae({isCustomElement:o,delimiters:r},s),a);i.render=jo(l,c)}}e.render=i.render||et}{const l=Xn(e);en();try{xc(e)}finally{tn(),l()}}}function Zc(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return Ke(e,"get","$attrs"),t[n]}}))}function eu(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return Zc(e)},slots:e.slots,emit:e.emit,expose:t}}function zi(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ks(Us(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Tn)return Tn[n](e)},has(t,n){return n in t||n in Tn}}))}function tu(e,t=!0){return se(e)?e.displayName||e.name:e.name||t&&e.__name}function nu(e){return se(e)&&"__vccOpts"in e}const R=(e,t)=>Da(e,t,Zn);function ce(e,t,n){const i=arguments.length;return i===2?_e(t)&&!ne(t)?Li(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(i>3?n=Array.prototype.slice.call(arguments,2):i===3&&Li(n)&&(n=[n]),ie(e,t,n))}const iu="3.4.19";/** +**/function Rt(e,t,n,i){try{return i?e(...i):e()}catch(l){Jn(l,t,n)}}function tt(e,t,n,i){if(se(e)){const o=Rt(e,t,n,i);return o&&xs(o)&&o.catch(s=>{Jn(s,t,n)}),o}const l=[];for(let o=0;o>>1,l=De[i],o=Bn(l);out&&De.splice(t,1)}function Ja(e){ne(e)?hn.push(...e):(!Lt||!Lt.includes(e,e.allowRecurse?Ut+1:Ut))&&hn.push(e),Js()}function yo(e,t,n=Mn?ut+1:0){for(;nBn(n)-Bn(i));if(hn.length=0,Lt){Lt.push(...t);return}for(Lt=t,Ut=0;Ute.id==null?1/0:e.id,Ya=(e,t)=>{const n=Bn(e)-Bn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Ys(e){vl=!1,Mn=!0,De.sort(Ya);try{for(ut=0;utLe(g)?g.trim():g)),d&&(l=n.map(ca))}let r,a=i[r=Qi(t)]||i[r=Qi(nt(t))];!a&&o&&(a=i[r=Qi(Zt(t))]),a&&tt(a,e,6,l);const c=i[r+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,tt(c,e,6,l)}}function Xs(e,t,n=!1){const i=t.emitsCache,l=i.get(e);if(l!==void 0)return l;const o=e.emits;let s={},r=!1;if(!se(e)){const a=c=>{const u=Xs(c,t,!0);u&&(r=!0,Ae(s,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!r?(_e(e)&&i.set(e,null),null):(ne(o)?o.forEach(a=>s[a]=null):Ae(s,o),_e(e)&&i.set(e,s),s)}function Fi(e,t){return!e||!Gn(t)?!1:(t=t.slice(2).replace(/Once$/,""),he(e,t[0].toLowerCase()+t.slice(1))||he(e,Zt(t))||he(e,t))}let Pe=null,Zs=null;function Ci(e){const t=Pe;return Pe=e,Zs=e&&e.type.__scopeId||null,t}function He(e,t=Pe,n){if(!t||e._n)return e;const i=(...l)=>{i._d&&Wo(-1);const o=Ci(t);let s;try{s=e(...l)}finally{Ci(o),i._d&&Wo(1)}return s};return i._n=!0,i._c=!0,i._d=!0,i}function Xi(e){const{type:t,vnode:n,proxy:i,withProxy:l,props:o,propsOptions:[s],slots:r,attrs:a,emit:c,render:u,renderCache:d,data:h,setupState:g,ctx:m,inheritAttrs:y}=e;let k,x;const I=Ci(e);try{if(n.shapeFlag&4){const _=l||i,D=_;k=lt(u.call(D,_,d,o,g,h,m)),x=a}else{const _=t;k=lt(_.length>1?_(o,{attrs:a,slots:r,emit:c}):_(o,null)),x=t.props?a:Za(a)}}catch(_){On.length=0,Jn(_,e,1),k=ie(Ye)}let v=k;if(x&&y!==!1){const _=Object.keys(x),{shapeFlag:D}=v;_.length&&D&7&&(s&&_.some(Wl)&&(x=ec(x,s)),v=Ht(v,x))}return n.dirs&&(v=Ht(v),v.dirs=v.dirs?v.dirs.concat(n.dirs):n.dirs),n.transition&&(v.transition=n.transition),k=v,Ci(I),k}const Za=e=>{let t;for(const n in e)(n==="class"||n==="style"||Gn(n))&&((t||(t={}))[n]=e[n]);return t},ec=(e,t)=>{const n={};for(const i in e)(!Wl(i)||!(i.slice(9)in t))&&(n[i]=e[i]);return n};function tc(e,t,n){const{props:i,children:l,component:o}=e,{props:s,children:r,patchFlag:a}=t,c=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return i?ko(i,s,c):!!s;if(a&8){const u=t.dynamicProps;for(let d=0;de.__isSuspense;function tr(e,t){t&&t.pendingBranch?ne(e)?t.effects.push(...e):t.effects.push(e):Ja(e)}const sc=Symbol.for("v-scx"),rc=()=>ze(sc);function ac(e,t){return Vl(e,null,t)}const ai={};function Me(e,t,n){return Vl(e,t,n)}function Vl(e,t,{immediate:n,deep:i,flush:l,once:o,onTrack:s,onTrigger:r}=ke){if(t&&o){const W=t;t=(...F)=>{W(...F),D()}}const a=Oe,c=W=>i===!0?W:qt(W,i===!1?1:void 0);let u,d=!1,h=!1;if($e(e)?(u=()=>e.value,d=ki(e)):dn(e)?(u=()=>c(e),d=!0):ne(e)?(h=!0,d=e.some(W=>dn(W)||ki(W)),u=()=>e.map(W=>{if($e(W))return W.value;if(dn(W))return c(W);if(se(W))return Rt(W,a,2)})):se(e)?t?u=()=>Rt(e,a,2):u=()=>(g&&g(),tt(e,a,3,[m])):u=et,t&&i){const W=u;u=()=>qt(W())}let g,m=W=>{g=v.onStop=()=>{Rt(W,a,4),g=v.onStop=void 0}},y;if(Zn)if(m=et,t?n&&tt(t,a,3,[u(),h?[]:void 0,m]):u(),l==="sync"){const W=rc();y=W.__watcherHandles||(W.__watcherHandles=[])}else return et;let k=h?new Array(e.length).fill(ai):ai;const x=()=>{if(!(!v.active||!v.dirty))if(t){const W=v.run();(i||d||(h?W.some((F,b)=>Ot(F,k[b])):Ot(W,k)))&&(g&&g(),tt(t,a,3,[W,k===ai?void 0:h&&k[0]===ai?[]:k,m]),k=W)}else v.run()};x.allowRecurse=!!t;let I;l==="sync"?I=x:l==="post"?I=()=>Ge(x,a&&a.suspense):(x.pre=!0,a&&(x.id=a.uid),I=()=>Hi(x));const v=new jl(u,et,I),_=Ts(),D=()=>{v.stop(),_&&Rl(_.effects,v)};return t?n?x():k=v.run():l==="post"?Ge(v.run.bind(v),a&&a.suspense):v.run(),y&&y.push(D),D}function cc(e,t,n){const i=this.proxy,l=Le(e)?e.includes(".")?nr(i,e):()=>i[e]:e.bind(i,i);let o;se(t)?o=t:(o=t.handler,n=t);const s=Xn(this),r=Vl(l,o.bind(i),n);return s(),r}function nr(e,t){const n=t.split(".");return()=>{let i=e;for(let l=0;l0){if(n>=t)return e;n++}if(i=i||new Set,i.has(e))return e;if(i.add(e),$e(e))qt(e.value,t,n,i);else if(ne(e))for(let l=0;l{qt(l,t,n,i)});else if(Ls(e))for(const l in e)qt(e[l],t,n,i);return e}function Ei(e,t){if(Pe===null)return e;const n=zi(Pe)||Pe.proxy,i=e.dirs||(e.dirs=[]);for(let l=0;l{e.isMounted=!0}),Bi(()=>{e.isUnmounting=!0}),e}const Xe=[Function,Array],ir={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Xe,onEnter:Xe,onAfterEnter:Xe,onEnterCancelled:Xe,onBeforeLeave:Xe,onLeave:Xe,onAfterLeave:Xe,onLeaveCancelled:Xe,onBeforeAppear:Xe,onAppear:Xe,onAfterAppear:Xe,onAppearCancelled:Xe},dc={name:"BaseTransition",props:ir,setup(e,{slots:t}){const n=Ni(),i=uc();let l;return()=>{const o=t.default&&or(t.default(),!0);if(!o||!o.length)return;let s=o[0];if(o.length>1){for(const y of o)if(y.type!==Ye){s=y;break}}const r=pe(e),{mode:a}=r;if(i.isLeaving)return Zi(s);const c=Co(s);if(!c)return Zi(s);const u=bl(c,r,i,n);wl(c,u);const d=n.subTree,h=d&&Co(d);let g=!1;const{getTransitionKey:m}=c.type;if(m){const y=m();l===void 0?l=y:y!==l&&(l=y,g=!0)}if(h&&h.type!==Ye&&(!Gt(c,h)||g)){const y=bl(h,r,i,n);if(wl(h,y),a==="out-in")return i.isLeaving=!0,y.afterLeave=()=>{i.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},Zi(s);a==="in-out"&&c.type!==Ye&&(y.delayLeave=(k,x,I)=>{const v=lr(i,h);v[String(h.key)]=h,k[It]=()=>{x(),k[It]=void 0,delete u.delayedLeave},u.delayedLeave=I})}return s}}},hc=dc;function lr(e,t){const{leavingVNodes:n}=e;let i=n.get(t.type);return i||(i=Object.create(null),n.set(t.type,i)),i}function bl(e,t,n,i){const{appear:l,mode:o,persisted:s=!1,onBeforeEnter:r,onEnter:a,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:d,onLeave:h,onAfterLeave:g,onLeaveCancelled:m,onBeforeAppear:y,onAppear:k,onAfterAppear:x,onAppearCancelled:I}=t,v=String(e.key),_=lr(n,e),D=(b,M)=>{b&&tt(b,i,9,M)},W=(b,M)=>{const P=M[1];D(b,M),ne(b)?b.every(q=>q.length<=1)&&P():b.length<=1&&P()},F={mode:o,persisted:s,beforeEnter(b){let M=r;if(!n.isMounted)if(l)M=y||r;else return;b[It]&&b[It](!0);const P=_[v];P&&Gt(e,P)&&P.el[It]&&P.el[It](),D(M,[b])},enter(b){let M=a,P=c,q=u;if(!n.isMounted)if(l)M=k||a,P=x||c,q=I||u;else return;let C=!1;const H=b[ci]=te=>{C||(C=!0,te?D(q,[b]):D(P,[b]),F.delayedLeave&&F.delayedLeave(),b[ci]=void 0)};M?W(M,[b,H]):H()},leave(b,M){const P=String(e.key);if(b[ci]&&b[ci](!0),n.isUnmounting)return M();D(d,[b]);let q=!1;const C=b[It]=H=>{q||(q=!0,M(),H?D(m,[b]):D(g,[b]),b[It]=void 0,_[P]===e&&delete _[P])};_[P]=e,h?W(h,[b,C]):C()},clone(b){return bl(b,t,n,i)}};return F}function Zi(e){if(Yn(e))return e=Ht(e),e.children=null,e}function Co(e){return Yn(e)?e.children?e.children[0]:void 0:e}function wl(e,t){e.shapeFlag&6&&e.component?wl(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function or(e,t=!1,n){let i=[],l=0;for(let o=0;o1)for(let o=0;o!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function fc(e){se(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:i,delay:l=200,timeout:o,suspensible:s=!0,onError:r}=e;let a=null,c,u=0;const d=()=>(u++,a=null,h()),h=()=>{let g;return a||(g=a=t().catch(m=>{if(m=m instanceof Error?m:new Error(String(m)),r)return new Promise((y,k)=>{r(m,()=>y(d()),()=>k(m),u+1)});throw m}).then(m=>g!==a&&a?a:(m&&(m.__esModule||m[Symbol.toStringTag]==="Module")&&(m=m.default),c=m,m)))};return ge({name:"AsyncComponentWrapper",__asyncLoader:h,get __asyncResolved(){return c},setup(){const g=Oe;if(c)return()=>el(c,g);const m=I=>{a=null,Jn(I,g,13,!i)};if(s&&g.suspense||Zn)return h().then(I=>()=>el(I,g)).catch(I=>(m(I),()=>i?ie(i,{error:I}):null));const y=re(!1),k=re(),x=re(!!l);return l&&setTimeout(()=>{x.value=!1},l),o!=null&&setTimeout(()=>{if(!y.value&&!k.value){const I=new Error(`Async component timed out after ${o}ms.`);m(I),k.value=I}},o),h().then(()=>{y.value=!0,g.parent&&Yn(g.parent.vnode)&&(g.parent.effect.dirty=!0,Hi(g.parent.update))}).catch(I=>{m(I),k.value=I}),()=>{if(y.value&&c)return el(c,g);if(k.value&&i)return ie(i,{error:k.value});if(n&&!x.value)return ie(n)}}})}function el(e,t){const{ref:n,props:i,children:l,ce:o}=t.vnode,s=ie(e,i,l);return s.ref=n,s.ce=o,delete t.vnode.ce,s}const Yn=e=>e.type.__isKeepAlive;function pc(e,t){sr(e,"a",t)}function gc(e,t){sr(e,"da",t)}function sr(e,t,n=Oe){const i=e.__wdc||(e.__wdc=()=>{let l=n;for(;l;){if(l.isDeactivated)return;l=l.parent}return e()});if(Mi(t,i,n),n){let l=n.parent;for(;l&&l.parent;)Yn(l.parent.vnode)&&mc(i,t,n,l),l=l.parent}}function mc(e,t,n,i){const l=Mi(t,e,i,!0);Di(()=>{Rl(i[t],l)},n)}function Mi(e,t,n=Oe,i=!1){if(n){const l=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...s)=>{if(n.isUnmounted)return;en();const r=Xn(n),a=tt(t,n,e,s);return r(),tn(),a});return i?l.unshift(o):l.push(o),o}}const wt=e=>(t,n=Oe)=>(!Zn||e==="sp")&&Mi(e,(...i)=>t(...i),n),vc=wt("bm"),Ve=wt("m"),bc=wt("bu"),wc=wt("u"),Bi=wt("bum"),Di=wt("um"),yc=wt("sp"),kc=wt("rtg"),_c=wt("rtc");function Cc(e,t=Oe){Mi("ec",e,t)}function jt(e,t,n,i){let l;const o=n;if(ne(e)||Le(e)){l=new Array(e.length);for(let s=0,r=e.length;st(s,r,void 0,o));else{const s=Object.keys(e);l=new Array(s.length);for(let r=0,a=s.length;rLi(t)?!(t.type===Ye||t.type===ye&&!rr(t.children)):!0)?e:null}const yl=e=>e?yr(e)?zi(e)||e.proxy:yl(e.parent):null,Tn=Ae(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>yl(e.parent),$root:e=>yl(e.root),$emit:e=>e.emit,$options:e=>Ul(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Hi(e.update)}),$nextTick:e=>e.n||(e.n=kn.bind(e.proxy)),$watch:e=>cc.bind(e)}),tl=(e,t)=>e!==ke&&!e.__isScriptSetup&&he(e,t),Ec={get({_:e},t){const{ctx:n,setupState:i,data:l,props:o,accessCache:s,type:r,appContext:a}=e;let c;if(t[0]!=="$"){const g=s[t];if(g!==void 0)switch(g){case 1:return i[t];case 2:return l[t];case 4:return n[t];case 3:return o[t]}else{if(tl(i,t))return s[t]=1,i[t];if(l!==ke&&he(l,t))return s[t]=2,l[t];if((c=e.propsOptions[0])&&he(c,t))return s[t]=3,o[t];if(n!==ke&&he(n,t))return s[t]=4,n[t];kl&&(s[t]=0)}}const u=Tn[t];let d,h;if(u)return t==="$attrs"&&Ke(e,"get",t),u(e);if((d=r.__cssModules)&&(d=d[t]))return d;if(n!==ke&&he(n,t))return s[t]=4,n[t];if(h=a.config.globalProperties,he(h,t))return h[t]},set({_:e},t,n){const{data:i,setupState:l,ctx:o}=e;return tl(l,t)?(l[t]=n,!0):i!==ke&&he(i,t)?(i[t]=n,!0):he(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:i,appContext:l,propsOptions:o}},s){let r;return!!n[s]||e!==ke&&he(e,s)||tl(t,s)||(r=o[0])&&he(r,s)||he(i,s)||he(Tn,s)||he(l.config.globalProperties,s)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:he(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Eo(e){return ne(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let kl=!0;function xc(e){const t=Ul(e),n=e.proxy,i=e.ctx;kl=!1,t.beforeCreate&&xo(t.beforeCreate,e,"bc");const{data:l,computed:o,methods:s,watch:r,provide:a,inject:c,created:u,beforeMount:d,mounted:h,beforeUpdate:g,updated:m,activated:y,deactivated:k,beforeDestroy:x,beforeUnmount:I,destroyed:v,unmounted:_,render:D,renderTracked:W,renderTriggered:F,errorCaptured:b,serverPrefetch:M,expose:P,inheritAttrs:q,components:C,directives:H,filters:te}=t;if(c&&Sc(c,i,null),s)for(const Q in s){const U=s[Q];se(U)&&(i[Q]=U.bind(n))}if(l){const Q=l.call(n,n);_e(Q)&&(e.data=Qn(Q))}if(kl=!0,o)for(const Q in o){const U=o[Q],Te=se(U)?U.bind(n,n):se(U.get)?U.get.bind(n,n):et,je=!se(U)&&se(U.set)?U.set.bind(n):et,Ue=R({get:Te,set:je});Object.defineProperty(i,Q,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:Be=>Ue.value=Be})}if(r)for(const Q in r)ar(r[Q],i,n,Q);if(a){const Q=se(a)?a.call(n):a;Reflect.ownKeys(Q).forEach(U=>{Yt(U,Q[U])})}u&&xo(u,e,"c");function T(Q,U){ne(U)?U.forEach(Te=>Q(Te.bind(n))):U&&Q(U.bind(n))}if(T(vc,d),T(Ve,h),T(bc,g),T(wc,m),T(pc,y),T(gc,k),T(Cc,b),T(_c,W),T(kc,F),T(Bi,I),T(Di,_),T(yc,M),ne(P))if(P.length){const Q=e.exposed||(e.exposed={});P.forEach(U=>{Object.defineProperty(Q,U,{get:()=>n[U],set:Te=>n[U]=Te})})}else e.exposed||(e.exposed={});D&&e.render===et&&(e.render=D),q!=null&&(e.inheritAttrs=q),C&&(e.components=C),H&&(e.directives=H)}function Sc(e,t,n=et){ne(e)&&(e=_l(e));for(const i in e){const l=e[i];let o;_e(l)?"default"in l?o=ze(l.from||i,l.default,!0):o=ze(l.from||i):o=ze(l),$e(o)?Object.defineProperty(t,i,{enumerable:!0,configurable:!0,get:()=>o.value,set:s=>o.value=s}):t[i]=o}}function xo(e,t,n){tt(ne(e)?e.map(i=>i.bind(t.proxy)):e.bind(t.proxy),t,n)}function ar(e,t,n,i){const l=i.includes(".")?nr(n,i):()=>n[i];if(Le(e)){const o=t[e];se(o)&&Me(l,o)}else if(se(e))Me(l,e.bind(n));else if(_e(e))if(ne(e))e.forEach(o=>ar(o,t,n,i));else{const o=se(e.handler)?e.handler.bind(n):t[e.handler];se(o)&&Me(l,o,e)}}function Ul(e){const t=e.type,{mixins:n,extends:i}=t,{mixins:l,optionsCache:o,config:{optionMergeStrategies:s}}=e.appContext,r=o.get(t);let a;return r?a=r:!l.length&&!n&&!i?a=t:(a={},l.length&&l.forEach(c=>xi(a,c,s,!0)),xi(a,t,s)),_e(t)&&o.set(t,a),a}function xi(e,t,n,i=!1){const{mixins:l,extends:o}=t;o&&xi(e,o,n,!0),l&&l.forEach(s=>xi(e,s,n,!0));for(const s in t)if(!(i&&s==="expose")){const r=Lc[s]||n&&n[s];e[s]=r?r(e[s],t[s]):t[s]}return e}const Lc={data:So,props:Lo,emits:Lo,methods:In,computed:In,beforeCreate:Ne,created:Ne,beforeMount:Ne,mounted:Ne,beforeUpdate:Ne,updated:Ne,beforeDestroy:Ne,beforeUnmount:Ne,destroyed:Ne,unmounted:Ne,activated:Ne,deactivated:Ne,errorCaptured:Ne,serverPrefetch:Ne,components:In,directives:In,watch:Pc,provide:So,inject:Ic};function So(e,t){return t?e?function(){return Ae(se(e)?e.call(this,this):e,se(t)?t.call(this,this):t)}:t:e}function Ic(e,t){return In(_l(e),_l(t))}function _l(e){if(ne(e)){const t={};for(let n=0;n1)return n&&se(t)?t.call(i&&i.proxy):t}}function Wc(e,t,n,i=!1){const l={},o={};wi(o,$i,1),e.propsDefaults=Object.create(null),ur(e,t,l,o);for(const s in e.propsOptions[0])s in l||(l[s]=void 0);n?e.props=i?l:zs(l):e.type.props?e.props=l:e.props=o,e.attrs=o}function Rc(e,t,n,i){const{props:l,attrs:o,vnode:{patchFlag:s}}=e,r=pe(l),[a]=e.propsOptions;let c=!1;if((i||s>0)&&!(s&16)){if(s&8){const u=e.vnode.dynamicProps;for(let d=0;d{a=!0;const[h,g]=dr(d,t,!0);Ae(s,h),g&&r.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!o&&!a)return _e(e)&&i.set(e,an),an;if(ne(o))for(let u=0;u-1,g[1]=y<0||m-1||he(g,"default"))&&r.push(d)}}}const c=[s,r];return _e(e)&&i.set(e,c),c}function Io(e){return e[0]!=="$"&&!un(e)}function Po(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function Ao(e,t){return Po(e)===Po(t)}function To(e,t){return ne(t)?t.findIndex(n=>Ao(n,e)):se(t)&&Ao(t,e)?0:-1}const hr=e=>e[0]==="_"||e==="$stable",Gl=e=>ne(e)?e.map(lt):[lt(e)],Oc=(e,t,n)=>{if(t._n)return t;const i=He((...l)=>Gl(t(...l)),n);return i._c=!1,i},fr=(e,t,n)=>{const i=e._ctx;for(const l in e){if(hr(l))continue;const o=e[l];if(se(o))t[l]=Oc(l,o,i);else if(o!=null){const s=Gl(o);t[l]=()=>s}}},pr=(e,t)=>{const n=Gl(t);e.slots.default=()=>n},jc=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=pe(t),wi(t,"_",n)):fr(t,e.slots={})}else e.slots={},t&&pr(e,t);wi(e.slots,$i,1)},Hc=(e,t,n)=>{const{vnode:i,slots:l}=e;let o=!0,s=ke;if(i.shapeFlag&32){const r=t._;r?n&&r===1?o=!1:(Ae(l,t),!n&&r===1&&delete l._):(o=!t.$stable,fr(t,l)),s=t}else t&&(pr(e,t),s={default:1});if(o)for(const r in l)!hr(r)&&s[r]==null&&delete l[r]};function Si(e,t,n,i,l=!1){if(ne(e)){e.forEach((h,g)=>Si(h,t&&(ne(t)?t[g]:t),n,i,l));return}if(fn(i)&&!l)return;const o=i.shapeFlag&4?zi(i.component)||i.component.proxy:i.el,s=l?null:o,{i:r,r:a}=e,c=t&&t.r,u=r.refs===ke?r.refs={}:r.refs,d=r.setupState;if(c!=null&&c!==a&&(Le(c)?(u[c]=null,he(d,c)&&(d[c]=null)):$e(c)&&(c.value=null)),se(a))Rt(a,r,12,[s,u]);else{const h=Le(a),g=$e(a);if(h||g){const m=()=>{if(e.f){const y=h?he(d,a)?d[a]:u[a]:a.value;l?ne(y)&&Rl(y,o):ne(y)?y.includes(o)||y.push(o):h?(u[a]=[o],he(d,a)&&(d[a]=u[a])):(a.value=[o],e.k&&(u[e.k]=a.value))}else h?(u[a]=s,he(d,a)&&(d[a]=s)):g&&(a.value=s,e.k&&(u[e.k]=s))};s?(m.id=-1,Ge(m,n)):m()}}}let Et=!1;const Fc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Mc=e=>e.namespaceURI.includes("MathML"),ui=e=>{if(Fc(e))return"svg";if(Mc(e))return"mathml"},di=e=>e.nodeType===8;function Bc(e){const{mt:t,p:n,o:{patchProp:i,createText:l,nextSibling:o,parentNode:s,remove:r,insert:a,createComment:c}}=e,u=(v,_)=>{if(!_.hasChildNodes()){n(null,v,_),_i(),_._vnode=v;return}Et=!1,d(_.firstChild,v,null,null,null),_i(),_._vnode=v,Et&&console.error("Hydration completed but contains mismatches.")},d=(v,_,D,W,F,b=!1)=>{const M=di(v)&&v.data==="[",P=()=>y(v,_,D,W,F,M),{type:q,ref:C,shapeFlag:H,patchFlag:te}=_;let le=v.nodeType;_.el=v,te===-2&&(b=!1,_.dynamicChildren=null);let T=null;switch(q){case mn:le!==3?_.children===""?(a(_.el=l(""),s(v),v),T=v):T=P():(v.data!==_.children&&(Et=!0,v.data=_.children),T=o(v));break;case Ye:I(v)?(T=o(v),x(_.el=v.content.firstChild,v,D)):le!==8||M?T=P():T=o(v);break;case Rn:if(M&&(v=o(v),le=v.nodeType),le===1||le===3){T=v;const Q=!_.children.length;for(let U=0;U<_.staticCount;U++)Q&&(_.children+=T.nodeType===1?T.outerHTML:T.data),U===_.staticCount-1&&(_.anchor=T),T=o(T);return M?o(T):T}else P();break;case ye:M?T=m(v,_,D,W,F,b):T=P();break;default:if(H&1)(le!==1||_.type.toLowerCase()!==v.tagName.toLowerCase())&&!I(v)?T=P():T=h(v,_,D,W,F,b);else if(H&6){_.slotScopeIds=F;const Q=s(v);if(M?T=k(v):di(v)&&v.data==="teleport start"?T=k(v,v.data,"teleport end"):T=o(v),t(_,Q,null,D,W,ui(Q),b),fn(_)){let U;M?(U=ie(ye),U.anchor=T?T.previousSibling:Q.lastChild):U=v.nodeType===3?Ft(""):ie("div"),U.el=v,_.component.subTree=U}}else H&64?le!==8?T=P():T=_.type.hydrate(v,_,D,W,F,b,e,g):H&128&&(T=_.type.hydrate(v,_,D,W,ui(s(v)),F,b,e,d))}return C!=null&&Si(C,null,W,_),T},h=(v,_,D,W,F,b)=>{b=b||!!_.dynamicChildren;const{type:M,props:P,patchFlag:q,shapeFlag:C,dirs:H,transition:te}=_,le=M==="input"||M==="option";if(le||q!==-1){H&&ct(_,null,D,"created");let T=!1;if(I(v)){T=gr(W,te)&&D&&D.vnode.props&&D.vnode.props.appear;const U=v.content.firstChild;T&&te.beforeEnter(U),x(U,v,D),_.el=v=U}if(C&16&&!(P&&(P.innerHTML||P.textContent))){let U=g(v.firstChild,_,v,D,W,F,b);for(;U;){Et=!0;const Te=U;U=U.nextSibling,r(Te)}}else C&8&&v.textContent!==_.children&&(Et=!0,v.textContent=_.children);if(P)if(le||!b||q&48)for(const U in P)(le&&(U.endsWith("value")||U==="indeterminate")||Gn(U)&&!un(U)||U[0]===".")&&i(v,U,null,P[U],void 0,void 0,D);else P.onClick&&i(v,"onClick",null,P.onClick,void 0,void 0,D);let Q;(Q=P&&P.onVnodeBeforeMount)&&Ze(Q,D,_),H&&ct(_,null,D,"beforeMount"),((Q=P&&P.onVnodeMounted)||H||T)&&tr(()=>{Q&&Ze(Q,D,_),T&&te.enter(v),H&&ct(_,null,D,"mounted")},W)}return v.nextSibling},g=(v,_,D,W,F,b,M)=>{M=M||!!_.dynamicChildren;const P=_.children,q=P.length;for(let C=0;C{const{slotScopeIds:M}=_;M&&(F=F?F.concat(M):M);const P=s(v),q=g(o(v),_,P,D,W,F,b);return q&&di(q)&&q.data==="]"?o(_.anchor=q):(Et=!0,a(_.anchor=c("]"),P,q),q)},y=(v,_,D,W,F,b)=>{if(Et=!0,_.el=null,b){const q=k(v);for(;;){const C=o(v);if(C&&C!==q)r(C);else break}}const M=o(v),P=s(v);return r(v),n(null,_,P,M,D,W,ui(P),F),M},k=(v,_="[",D="]")=>{let W=0;for(;v;)if(v=o(v),v&&di(v)&&(v.data===_&&W++,v.data===D)){if(W===0)return o(v);W--}return v},x=(v,_,D)=>{const W=_.parentNode;W&&W.replaceChild(v,_);let F=D;for(;F;)F.vnode.el===_&&(F.vnode.el=F.subTree.el=v),F=F.parent},I=v=>v.nodeType===1&&v.tagName.toLowerCase()==="template";return[u,d]}const Ge=tr;function Dc(e){return $c(e,Bc)}function $c(e,t){const n=Is();n.__VUE__=!0;const{insert:i,remove:l,patchProp:o,createElement:s,createText:r,createComment:a,setText:c,setElementText:u,parentNode:d,nextSibling:h,setScopeId:g=et,insertStaticContent:m}=e,y=(f,p,w,L=null,E=null,O=null,N=void 0,j=null,B=!!p.dynamicChildren)=>{if(f===p)return;f&&!Gt(f,p)&&(L=S(f),Be(f,E,O,!0),f=null),p.patchFlag===-2&&(B=!1,p.dynamicChildren=null);const{type:A,ref:G,shapeFlag:Z}=p;switch(A){case mn:k(f,p,w,L);break;case Ye:x(f,p,w,L);break;case Rn:f==null&&I(p,w,L,N);break;case ye:C(f,p,w,L,E,O,N,j,B);break;default:Z&1?D(f,p,w,L,E,O,N,j,B):Z&6?H(f,p,w,L,E,O,N,j,B):(Z&64||Z&128)&&A.process(f,p,w,L,E,O,N,j,B,K)}G!=null&&E&&Si(G,f&&f.ref,O,p||f,!p)},k=(f,p,w,L)=>{if(f==null)i(p.el=r(p.children),w,L);else{const E=p.el=f.el;p.children!==f.children&&c(E,p.children)}},x=(f,p,w,L)=>{f==null?i(p.el=a(p.children||""),w,L):p.el=f.el},I=(f,p,w,L)=>{[f.el,f.anchor]=m(f.children,p,w,L,f.el,f.anchor)},v=({el:f,anchor:p},w,L)=>{let E;for(;f&&f!==p;)E=h(f),i(f,w,L),f=E;i(p,w,L)},_=({el:f,anchor:p})=>{let w;for(;f&&f!==p;)w=h(f),l(f),f=w;l(p)},D=(f,p,w,L,E,O,N,j,B)=>{p.type==="svg"?N="svg":p.type==="math"&&(N="mathml"),f==null?W(p,w,L,E,O,N,j,B):M(f,p,E,O,N,j,B)},W=(f,p,w,L,E,O,N,j)=>{let B,A;const{props:G,shapeFlag:Z,transition:J,dirs:oe}=f;if(B=f.el=s(f.type,O,G&&G.is,G),Z&8?u(B,f.children):Z&16&&b(f.children,B,null,L,E,nl(f,O),N,j),oe&&ct(f,null,L,"created"),F(B,f,f.scopeId,N,L),G){for(const be in G)be!=="value"&&!un(be)&&o(B,be,null,G[be],O,f.children,L,E,We);"value"in G&&o(B,"value",null,G.value,O),(A=G.onVnodeBeforeMount)&&Ze(A,L,f)}oe&&ct(f,null,L,"beforeMount");const ae=gr(E,J);ae&&J.beforeEnter(B),i(B,p,w),((A=G&&G.onVnodeMounted)||ae||oe)&&Ge(()=>{A&&Ze(A,L,f),ae&&J.enter(B),oe&&ct(f,null,L,"mounted")},E)},F=(f,p,w,L,E)=>{if(w&&g(f,w),L)for(let O=0;O{for(let A=B;A{const j=p.el=f.el;let{patchFlag:B,dynamicChildren:A,dirs:G}=p;B|=f.patchFlag&16;const Z=f.props||ke,J=p.props||ke;let oe;if(w&&Dt(w,!1),(oe=J.onVnodeBeforeUpdate)&&Ze(oe,w,p,f),G&&ct(p,f,w,"beforeUpdate"),w&&Dt(w,!0),A?P(f.dynamicChildren,A,j,w,L,nl(p,E),O):N||U(f,p,j,null,w,L,nl(p,E),O,!1),B>0){if(B&16)q(j,p,Z,J,w,L,E);else if(B&2&&Z.class!==J.class&&o(j,"class",null,J.class,E),B&4&&o(j,"style",Z.style,J.style,E),B&8){const ae=p.dynamicProps;for(let be=0;be{oe&&Ze(oe,w,p,f),G&&ct(p,f,w,"updated")},L)},P=(f,p,w,L,E,O,N)=>{for(let j=0;j{if(w!==L){if(w!==ke)for(const j in w)!un(j)&&!(j in L)&&o(f,j,w[j],null,N,p.children,E,O,We);for(const j in L){if(un(j))continue;const B=L[j],A=w[j];B!==A&&j!=="value"&&o(f,j,A,B,N,p.children,E,O,We)}"value"in L&&o(f,"value",w.value,L.value,N)}},C=(f,p,w,L,E,O,N,j,B)=>{const A=p.el=f?f.el:r(""),G=p.anchor=f?f.anchor:r("");let{patchFlag:Z,dynamicChildren:J,slotScopeIds:oe}=p;oe&&(j=j?j.concat(oe):oe),f==null?(i(A,w,L),i(G,w,L),b(p.children||[],w,G,E,O,N,j,B)):Z>0&&Z&64&&J&&f.dynamicChildren?(P(f.dynamicChildren,J,w,E,O,N,j),(p.key!=null||E&&p===E.subTree)&&mr(f,p,!0)):U(f,p,w,G,E,O,N,j,B)},H=(f,p,w,L,E,O,N,j,B)=>{p.slotScopeIds=j,f==null?p.shapeFlag&512?E.ctx.activate(p,w,L,N,B):te(p,w,L,E,O,N,B):le(f,p,B)},te=(f,p,w,L,E,O,N)=>{const j=f.component=Jc(f,L,E);if(Yn(f)&&(j.ctx.renderer=K),Yc(j),j.asyncDep){if(E&&E.registerDep(j,T),!f.el){const B=j.subTree=ie(Ye);x(null,B,p,w)}}else T(j,f,p,w,E,O,N)},le=(f,p,w)=>{const L=p.component=f.component;if(tc(f,p,w))if(L.asyncDep&&!L.asyncResolved){Q(L,p,w);return}else L.next=p,Qa(L.update),L.effect.dirty=!0,L.update();else p.el=f.el,L.vnode=p},T=(f,p,w,L,E,O,N)=>{const j=()=>{if(f.isMounted){let{next:G,bu:Z,u:J,parent:oe,vnode:ae}=f;{const on=vr(f);if(on){G&&(G.el=ae.el,Q(f,G,N)),on.asyncDep.then(()=>{f.isUnmounted||j()});return}}let be=G,Ce;Dt(f,!1),G?(G.el=ae.el,Q(f,G,N)):G=ae,Z&&Ji(Z),(Ce=G.props&&G.props.onVnodeBeforeUpdate)&&Ze(Ce,oe,G,ae),Dt(f,!0);const Re=Xi(f),it=f.subTree;f.subTree=Re,y(it,Re,d(it.el),S(it),f,E,O),G.el=Re.el,be===null&&nc(f,Re.el),J&&Ge(J,E),(Ce=G.props&&G.props.onVnodeUpdated)&&Ge(()=>Ze(Ce,oe,G,ae),E)}else{let G;const{el:Z,props:J}=p,{bm:oe,m:ae,parent:be}=f,Ce=fn(p);if(Dt(f,!1),oe&&Ji(oe),!Ce&&(G=J&&J.onVnodeBeforeMount)&&Ze(G,be,p),Dt(f,!0),Z&&ve){const Re=()=>{f.subTree=Xi(f),ve(Z,f.subTree,f,E,null)};Ce?p.type.__asyncLoader().then(()=>!f.isUnmounted&&Re()):Re()}else{const Re=f.subTree=Xi(f);y(null,Re,w,L,f,E,O),p.el=Re.el}if(ae&&Ge(ae,E),!Ce&&(G=J&&J.onVnodeMounted)){const Re=p;Ge(()=>Ze(G,be,Re),E)}(p.shapeFlag&256||be&&fn(be.vnode)&&be.vnode.shapeFlag&256)&&f.a&&Ge(f.a,E),f.isMounted=!0,p=w=L=null}},B=f.effect=new jl(j,et,()=>Hi(A),f.scope),A=f.update=()=>{B.dirty&&B.run()};A.id=f.uid,Dt(f,!0),A()},Q=(f,p,w)=>{p.component=f;const L=f.vnode.props;f.vnode=p,f.next=null,Rc(f,p.props,L,w),Hc(f,p.children,w),en(),yo(f),tn()},U=(f,p,w,L,E,O,N,j,B=!1)=>{const A=f&&f.children,G=f?f.shapeFlag:0,Z=p.children,{patchFlag:J,shapeFlag:oe}=p;if(J>0){if(J&128){je(A,Z,w,L,E,O,N,j,B);return}else if(J&256){Te(A,Z,w,L,E,O,N,j,B);return}}oe&8?(G&16&&We(A,E,O),Z!==A&&u(w,Z)):G&16?oe&16?je(A,Z,w,L,E,O,N,j,B):We(A,E,O,!0):(G&8&&u(w,""),oe&16&&b(Z,w,L,E,O,N,j,B))},Te=(f,p,w,L,E,O,N,j,B)=>{f=f||an,p=p||an;const A=f.length,G=p.length,Z=Math.min(A,G);let J;for(J=0;JG?We(f,E,O,!0,!1,Z):b(p,w,L,E,O,N,j,B,Z)},je=(f,p,w,L,E,O,N,j,B)=>{let A=0;const G=p.length;let Z=f.length-1,J=G-1;for(;A<=Z&&A<=J;){const oe=f[A],ae=p[A]=B?Pt(p[A]):lt(p[A]);if(Gt(oe,ae))y(oe,ae,w,null,E,O,N,j,B);else break;A++}for(;A<=Z&&A<=J;){const oe=f[Z],ae=p[J]=B?Pt(p[J]):lt(p[J]);if(Gt(oe,ae))y(oe,ae,w,null,E,O,N,j,B);else break;Z--,J--}if(A>Z){if(A<=J){const oe=J+1,ae=oeJ)for(;A<=Z;)Be(f[A],E,O,!0),A++;else{const oe=A,ae=A,be=new Map;for(A=ae;A<=J;A++){const Qe=p[A]=B?Pt(p[A]):lt(p[A]);Qe.key!=null&&be.set(Qe.key,A)}let Ce,Re=0;const it=J-ae+1;let on=!1,ao=0;const Cn=new Array(it);for(A=0;A=it){Be(Qe,E,O,!0);continue}let at;if(Qe.key!=null)at=be.get(Qe.key);else for(Ce=ae;Ce<=J;Ce++)if(Cn[Ce-ae]===0&&Gt(Qe,p[Ce])){at=Ce;break}at===void 0?Be(Qe,E,O,!0):(Cn[at-ae]=A+1,at>=ao?ao=at:on=!0,y(Qe,p[at],w,null,E,O,N,j,B),Re++)}const co=on?Nc(Cn):an;for(Ce=co.length-1,A=it-1;A>=0;A--){const Qe=ae+A,at=p[Qe],uo=Qe+1{const{el:O,type:N,transition:j,children:B,shapeFlag:A}=f;if(A&6){Ue(f.component.subTree,p,w,L);return}if(A&128){f.suspense.move(p,w,L);return}if(A&64){N.move(f,p,w,K);return}if(N===ye){i(O,p,w);for(let Z=0;Zj.enter(O),E);else{const{leave:Z,delayLeave:J,afterLeave:oe}=j,ae=()=>i(O,p,w),be=()=>{Z(O,()=>{ae(),oe&&oe()})};J?J(O,ae,be):be()}else i(O,p,w)},Be=(f,p,w,L=!1,E=!1)=>{const{type:O,props:N,ref:j,children:B,dynamicChildren:A,shapeFlag:G,patchFlag:Z,dirs:J}=f;if(j!=null&&Si(j,null,w,f,!0),G&256){p.ctx.deactivate(f);return}const oe=G&1&&J,ae=!fn(f);let be;if(ae&&(be=N&&N.onVnodeBeforeUnmount)&&Ze(be,p,f),G&6)rt(f.component,w,L);else{if(G&128){f.suspense.unmount(w,L);return}oe&&ct(f,null,p,"beforeUnmount"),G&64?f.type.remove(f,p,w,E,K,L):A&&(O!==ye||Z>0&&Z&64)?We(A,p,w,!1,!0):(O===ye&&Z&384||!E&&G&16)&&We(B,p,w),L&&kt(f)}(ae&&(be=N&&N.onVnodeUnmounted)||oe)&&Ge(()=>{be&&Ze(be,p,f),oe&&ct(f,null,p,"unmounted")},w)},kt=f=>{const{type:p,el:w,anchor:L,transition:E}=f;if(p===ye){_t(w,L);return}if(p===Rn){_(f);return}const O=()=>{l(w),E&&!E.persisted&&E.afterLeave&&E.afterLeave()};if(f.shapeFlag&1&&E&&!E.persisted){const{leave:N,delayLeave:j}=E,B=()=>N(w,O);j?j(f.el,O,B):B()}else O()},_t=(f,p)=>{let w;for(;f!==p;)w=h(f),l(f),f=w;l(p)},rt=(f,p,w)=>{const{bum:L,scope:E,update:O,subTree:N,um:j}=f;L&&Ji(L),E.stop(),O&&(O.active=!1,Be(N,f,p,w)),j&&Ge(j,p),Ge(()=>{f.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&f.asyncDep&&!f.asyncResolved&&f.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},We=(f,p,w,L=!1,E=!1,O=0)=>{for(let N=O;Nf.shapeFlag&6?S(f.component.subTree):f.shapeFlag&128?f.suspense.next():h(f.anchor||f.el);let V=!1;const $=(f,p,w)=>{f==null?p._vnode&&Be(p._vnode,null,null,!0):y(p._vnode||null,f,p,null,null,null,w),V||(V=!0,yo(),_i(),V=!1),p._vnode=f},K={p:y,um:Be,m:Ue,r:kt,mt:te,mc:b,pc:U,pbc:P,n:S,o:e};let ue,ve;return t&&([ue,ve]=t(K)),{render:$,hydrate:ue,createApp:Tc($,ue)}}function nl({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Dt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function gr(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function mr(e,t,n=!1){const i=e.children,l=t.children;if(ne(i)&&ne(l))for(let o=0;o>1,e[n[r]]0&&(t[i]=n[o-1]),n[o]=i)}}for(o=n.length,s=n[o-1];o-- >0;)n[o]=s,s=t[s];return n}function vr(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:vr(t)}const zc=e=>e.__isTeleport,ye=Symbol.for("v-fgt"),mn=Symbol.for("v-txt"),Ye=Symbol.for("v-cmt"),Rn=Symbol.for("v-stc"),On=[];let ot=null;function z(e=!1){On.push(ot=e?null:[])}function Vc(){On.pop(),ot=On[On.length-1]||null}let Dn=1;function Wo(e){Dn+=e}function br(e){return e.dynamicChildren=Dn>0?ot||an:null,Vc(),Dn>0&&ot&&ot.push(e),e}function X(e,t,n,i,l,o){return br(fe(e,t,n,i,l,o,!0))}function xe(e,t,n,i,l){return br(ie(e,t,n,i,l,!0))}function Li(e){return e?e.__v_isVNode===!0:!1}function Gt(e,t){return e.type===t.type&&e.key===t.key}const $i="__vInternal",wr=({key:e})=>e??null,vi=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Le(e)||$e(e)||se(e)?{i:Pe,r:e,k:t,f:!!n}:e:null);function fe(e,t=null,n=null,i=0,l=null,o=e===ye?0:1,s=!1,r=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&wr(t),ref:t&&vi(t),scopeId:Zs,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:i,dynamicProps:l,dynamicChildren:null,appContext:null,ctx:Pe};return r?(ql(a,n),o&128&&e.normalize(a)):n&&(a.shapeFlag|=Le(n)?8:16),Dn>0&&!s&&ot&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&ot.push(a),a}const ie=Uc;function Uc(e,t=null,n=null,i=0,l=null,o=!1){if((!e||e===ic)&&(e=Ye),Li(e)){const r=Ht(e,t,!0);return n&&ql(r,n),Dn>0&&!o&&ot&&(r.shapeFlag&6?ot[ot.indexOf(e)]=r:ot.push(r)),r.patchFlag|=-2,r}if(nu(e)&&(e=e.__vccOpts),t){t=Gc(t);let{class:r,style:a}=t;r&&!Le(r)&&(t.class=qe(r)),_e(a)&&(Vs(a)&&!ne(a)&&(a=Ae({},a)),t.style=Kn(a))}const s=Le(e)?1:oc(e)?128:zc(e)?64:_e(e)?4:se(e)?2:0;return fe(e,t,n,i,l,s,o,!0)}function Gc(e){return e?Vs(e)||$i in e?Ae({},e):e:null}function Ht(e,t,n=!1){const{props:i,ref:l,patchFlag:o,children:s}=e,r=t?El(i||{},t):i;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:r,key:r&&wr(r),ref:t&&t.ref?n&&l?ne(l)?l.concat(vi(t)):[l,vi(t)]:vi(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ye?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ht(e.ssContent),ssFallback:e.ssFallback&&Ht(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ft(e=" ",t=0){return ie(mn,null,e,t)}function qc(e,t){const n=ie(Rn,null,e);return n.staticCount=t,n}function Se(e="",t=!1){return t?(z(),xe(Ye,null,e)):ie(Ye,null,e)}function lt(e){return e==null||typeof e=="boolean"?ie(Ye):ne(e)?ie(ye,null,e.slice()):typeof e=="object"?Pt(e):ie(mn,null,String(e))}function Pt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ht(e)}function ql(e,t){let n=0;const{shapeFlag:i}=e;if(t==null)t=null;else if(ne(t))n=16;else if(typeof t=="object")if(i&65){const l=t.default;l&&(l._c&&(l._d=!1),ql(e,l()),l._c&&(l._d=!0));return}else{n=32;const l=t._;!l&&!($i in t)?t._ctx=Pe:l===3&&Pe&&(Pe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else se(t)?(t={default:t,_ctx:Pe},n=32):(t=String(t),i&64?(n=16,t=[Ft(t)]):n=8);e.children=t,e.shapeFlag|=n}function El(...e){const t={};for(let n=0;nOe||Pe;let Ii,xl;{const e=Is(),t=(n,i)=>{let l;return(l=e[n])||(l=e[n]=[]),l.push(i),o=>{l.length>1?l.forEach(s=>s(o)):l[0](o)}};Ii=t("__VUE_INSTANCE_SETTERS__",n=>Oe=n),xl=t("__VUE_SSR_SETTERS__",n=>Zn=n)}const Xn=e=>{const t=Oe;return Ii(e),e.scope.on(),()=>{e.scope.off(),Ii(t)}},Ro=()=>{Oe&&Oe.scope.off(),Ii(null)};function yr(e){return e.vnode.shapeFlag&4}let Zn=!1;function Yc(e,t=!1){t&&xl(t);const{props:n,children:i}=e.vnode,l=yr(e);Wc(e,n,l,t),jc(e,i);const o=l?Xc(e,t):void 0;return t&&xl(!1),o}function Xc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Us(new Proxy(e.ctx,Ec));const{setup:i}=n;if(i){const l=e.setupContext=i.length>1?eu(e):null,o=Xn(e);en();const s=Rt(i,e,0,[e.props,l]);if(tn(),o(),xs(s)){if(s.then(Ro,Ro),t)return s.then(r=>{Oo(e,r,t)}).catch(r=>{Jn(r,e,0)});e.asyncDep=s}else Oo(e,s,t)}else kr(e,t)}function Oo(e,t,n){se(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:_e(t)&&(e.setupState=Ks(t)),kr(e,n)}let jo;function kr(e,t,n){const i=e.type;if(!e.render){if(!t&&jo&&!i.render){const l=i.template||Ul(e).template;if(l){const{isCustomElement:o,compilerOptions:s}=e.appContext.config,{delimiters:r,compilerOptions:a}=i,c=Ae(Ae({isCustomElement:o,delimiters:r},s),a);i.render=jo(l,c)}}e.render=i.render||et}{const l=Xn(e);en();try{xc(e)}finally{tn(),l()}}}function Zc(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return Ke(e,"get","$attrs"),t[n]}}))}function eu(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return Zc(e)},slots:e.slots,emit:e.emit,expose:t}}function zi(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ks(Us(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Tn)return Tn[n](e)},has(t,n){return n in t||n in Tn}}))}function tu(e,t=!0){return se(e)?e.displayName||e.name:e.name||t&&e.__name}function nu(e){return se(e)&&"__vccOpts"in e}const R=(e,t)=>Da(e,t,Zn);function ce(e,t,n){const i=arguments.length;return i===2?_e(t)&&!ne(t)?Li(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(i>3?n=Array.prototype.slice.call(arguments,2):i===3&&Li(n)&&(n=[n]),ie(e,t,n))}const iu="3.4.19";/** * @vue/runtime-dom v3.4.19 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const lu="http://www.w3.org/2000/svg",ou="http://www.w3.org/1998/Math/MathML",At=typeof document<"u"?document:null,Ho=At&&At.createElement("template"),su={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,i)=>{const l=t==="svg"?At.createElementNS(lu,e):t==="mathml"?At.createElementNS(ou,e):At.createElement(e,n?{is:n}:void 0);return e==="select"&&i&&i.multiple!=null&&l.setAttribute("multiple",i.multiple),l},createText:e=>At.createTextNode(e),createComment:e=>At.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>At.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,i,l,o){const s=n?n.previousSibling:t.lastChild;if(l&&(l===o||l.nextSibling))for(;t.insertBefore(l.cloneNode(!0),n),!(l===o||!(l=l.nextSibling)););else{Ho.innerHTML=i==="svg"?`${e}`:i==="mathml"?`${e}`:e;const r=Ho.content;if(i==="svg"||i==="mathml"){const a=r.firstChild;for(;a.firstChild;)r.appendChild(a.firstChild);r.removeChild(a)}t.insertBefore(r,n)}return[s?s.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},xt="transition",En="animation",$n=Symbol("_vtc"),ei=(e,{slots:t})=>ce(hc,ru(e),t);ei.displayName="Transition";const _r={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ei.props=Ae({},ir,_r);const $t=(e,t=[])=>{ne(e)?e.forEach(n=>n(...t)):e&&e(...t)},Fo=e=>e?ne(e)?e.some(t=>t.length>1):e.length>1:!1;function ru(e){const t={};for(const C in e)C in _r||(t[C]=e[C]);if(e.css===!1)return t;const{name:n="v",type:i,duration:l,enterFromClass:o=`${n}-enter-from`,enterActiveClass:s=`${n}-enter-active`,enterToClass:r=`${n}-enter-to`,appearFromClass:a=o,appearActiveClass:c=s,appearToClass:u=r,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,m=au(l),y=m&&m[0],k=m&&m[1],{onBeforeEnter:x,onEnter:I,onEnterCancelled:v,onLeave:_,onLeaveCancelled:D,onBeforeAppear:W=x,onAppear:F=I,onAppearCancelled:b=v}=t,M=(C,H,te)=>{Nt(C,H?u:r),Nt(C,H?c:s),te&&te()},P=(C,H)=>{C._isLeaving=!1,Nt(C,d),Nt(C,g),Nt(C,h),H&&H()},q=C=>(H,te)=>{const le=C?F:I,T=()=>M(H,C,te);$t(le,[H,T]),Mo(()=>{Nt(H,C?a:o),St(H,C?u:r),Fo(le)||Bo(H,i,y,T)})};return Ae(t,{onBeforeEnter(C){$t(x,[C]),St(C,o),St(C,s)},onBeforeAppear(C){$t(W,[C]),St(C,a),St(C,c)},onEnter:q(!1),onAppear:q(!0),onLeave(C,H){C._isLeaving=!0;const te=()=>P(C,H);St(C,d),du(),St(C,h),Mo(()=>{C._isLeaving&&(Nt(C,d),St(C,g),Fo(_)||Bo(C,i,k,te))}),$t(_,[C,te])},onEnterCancelled(C){M(C,!1),$t(v,[C])},onAppearCancelled(C){M(C,!0),$t(b,[C])},onLeaveCancelled(C){P(C),$t(D,[C])}})}function au(e){if(e==null)return null;if(_e(e))return[il(e.enter),il(e.leave)];{const t=il(e);return[t,t]}}function il(e){return ua(e)}function St(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[$n]||(e[$n]=new Set)).add(t)}function Nt(e,t){t.split(/\s+/).forEach(i=>i&&e.classList.remove(i));const n=e[$n];n&&(n.delete(t),n.size||(e[$n]=void 0))}function Mo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let cu=0;function Bo(e,t,n,i){const l=e._endId=++cu,o=()=>{l===e._endId&&i()};if(n)return setTimeout(o,n);const{type:s,timeout:r,propCount:a}=uu(e,t);if(!s)return i();const c=s+"end";let u=0;const d=()=>{e.removeEventListener(c,h),o()},h=g=>{g.target===e&&++u>=a&&d()};setTimeout(()=>{u(n[m]||"").split(", "),l=i(`${xt}Delay`),o=i(`${xt}Duration`),s=Do(l,o),r=i(`${En}Delay`),a=i(`${En}Duration`),c=Do(r,a);let u=null,d=0,h=0;t===xt?s>0&&(u=xt,d=s,h=o.length):t===En?c>0&&(u=En,d=c,h=a.length):(d=Math.max(s,c),u=d>0?s>c?xt:En:null,h=u?u===xt?o.length:a.length:0);const g=u===xt&&/\b(transform|all)(,|$)/.test(i(`${xt}Property`).toString());return{type:u,timeout:d,propCount:h,hasTransform:g}}function Do(e,t){for(;e.length$o(n)+$o(e[i])))}function $o(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function du(){return document.body.offsetHeight}function hu(e,t,n){const i=e[$n];i&&(t=(t?[t,...i]:[...i]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Nn=Symbol("_vod"),Pi={beforeMount(e,{value:t},{transition:n}){e[Nn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):xn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:i}){!t==!n&&(e.style.display===e[Nn]||!t)||(i?t?(i.beforeEnter(e),xn(e,!0),i.enter(e)):i.leave(e,()=>{xn(e,!1)}):xn(e,t))},beforeUnmount(e,{value:t}){xn(e,t)}};function xn(e,t){e.style.display=t?e[Nn]:"none"}const fu=Symbol(""),pu=/(^|;)\s*display\s*:/;function gu(e,t,n){const i=e.style,l=Le(n),o=i.display;let s=!1;if(n&&!l){if(t&&!Le(t))for(const r in t)n[r]==null&&Sl(i,r,"");for(const r in n)r==="display"&&(s=!0),Sl(i,r,n[r])}else if(l){if(t!==n){const r=i[fu];r&&(n+=";"+r),i.cssText=n,s=pu.test(n)}}else t&&e.removeAttribute("style");Nn in e&&(e[Nn]=s?i.display:"",i.display=o)}const No=/\s*!important$/;function Sl(e,t,n){if(ne(n))n.forEach(i=>Sl(e,t,i));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const i=mu(e,t);No.test(n)?e.setProperty(Zt(i),n.replace(No,""),"important"):e[i]=n}}const zo=["Webkit","Moz","ms"],ll={};function mu(e,t){const n=ll[t];if(n)return n;let i=nt(t);if(i!=="filter"&&i in e)return ll[t]=i;i=qn(i);for(let l=0;lol||(Cu.then(()=>ol=0),ol=Date.now());function xu(e,t){const n=i=>{if(!i._vts)i._vts=Date.now();else if(i._vts<=n.attached)return;tt(Su(i,n.value),t,5,[i])};return n.value=e,n.attached=Eu(),n}function Su(e,t){if(ne(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(i=>l=>!l._stopped&&i&&i(l))}else return t}const qo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Lu=(e,t,n,i,l,o,s,r,a)=>{const c=l==="svg";t==="class"?hu(e,i,c):t==="style"?gu(e,n,i):Gn(t)?Wl(t)||ku(e,t,n,i,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Iu(e,t,i,c))?bu(e,t,i,o,s,r,a):(t==="true-value"?e._trueValue=i:t==="false-value"&&(e._falseValue=i),vu(e,t,i,c))};function Iu(e,t,n,i){if(i)return!!(t==="innerHTML"||t==="textContent"||t in e&&qo(t)&&se(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const l=e.tagName;if(l==="IMG"||l==="VIDEO"||l==="CANVAS"||l==="SOURCE")return!1}return qo(t)&&Le(n)?!1:t in e}const Pu={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Au=(e,t)=>{const n=e._withKeys||(e._withKeys={}),i=t.join(".");return n[i]||(n[i]=l=>{if(!("key"in l))return;const o=Zt(l.key);if(t.some(s=>s===o||Pu[s]===o))return e(l)})},Tu=Ae({patchProp:Lu},su);let sl,Ko=!1;function Wu(){return sl=Ko?sl:Dc(Tu),Ko=!0,sl}const Ru=(...e)=>{const t=Wu().createApp(...e),{mount:n}=t;return t.mount=i=>{const l=ju(i);if(l)return n(l,!0,Ou(l))},t};function Ou(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ju(e){return Le(e)?document.querySelector(e):e}var Hu=["link","meta","script","style","noscript","template"],Fu=["title","base"],Mu=([e,t,n])=>Fu.includes(e)?e:Hu.includes(e)?e==="meta"&&t.name?`${e}.${t.name}`:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,Object.entries(t).map(([i,l])=>typeof l=="boolean"?l?[i,""]:null:[i,l]).filter(i=>i!=null).sort(([i],[l])=>i.localeCompare(l)),n]):null,Bu=e=>{const t=new Set,n=[];return e.forEach(i=>{const l=Mu(i);l&&!t.has(l)&&(t.add(l),n.push(i))}),n},ti=e=>/^(https?:)?\/\//.test(e),Du=e=>/^[a-z][a-z0-9+.-]*:/.test(e),Kl=e=>Object.prototype.toString.call(e)==="[object Object]",$u=e=>{const[t,...n]=e.split(/(\?|#)/);if(!t||t.endsWith("/"))return e;let i=t.replace(/(^|\/)README.md$/i,"$1index.html");return i.endsWith(".md")?i=i.substring(0,i.length-3)+".html":i.endsWith(".html")||(i=i+".html"),i.endsWith("/index.html")&&(i=i.substring(0,i.length-10)),i+n.join("")},Cr=e=>e[e.length-1]==="/"?e.slice(0,-1):e,Er=e=>e[0]==="/"?e.slice(1):e,xr=(e,t)=>{const n=Object.keys(e).sort((i,l)=>{const o=l.split("/").length-i.split("/").length;return o!==0?o:l.length-i.length});for(const i of n)if(t.startsWith(i))return i;return"/"},dt=e=>typeof e=="string";const Nu="modulepreload",zu=function(e){return"/"+e},Qo={},ee=function(t,n,i){let l=Promise.resolve();if(n&&n.length>0){const o=document.getElementsByTagName("link");l=Promise.all(n.map(s=>{if(s=zu(s),s in Qo)return;Qo[s]=!0;const r=s.endsWith(".css"),a=r?'[rel="stylesheet"]':"";if(!!i)for(let d=o.length-1;d>=0;d--){const h=o[d];if(h.href===s&&(!r||h.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${s}"]${a}`))return;const u=document.createElement("link");if(u.rel=r?"stylesheet":Nu,r||(u.as="script",u.crossOrigin=""),u.href=s,document.head.appendChild(u),r)return new Promise((d,h)=>{u.addEventListener("load",d),u.addEventListener("error",()=>h(new Error(`Unable to preload CSS for ${s}`)))})}))}return l.then(()=>t()).catch(o=>{const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=o,window.dispatchEvent(s),!s.defaultPrevented)throw o})},Vu=JSON.parse("{}"),Uu=Object.fromEntries([["/",{loader:()=>ee(()=>import("./index.html-CSlUkczj.js"),__vite__mapDeps([])),meta:{title:""}}],["/FAQ/FAQ-Contribution.html",{loader:()=>ee(()=>import("./FAQ-Contribution.html-CxGGPr64.js"),__vite__mapDeps([0,1])),meta:{title:"Contribution FAQ"}}],["/FAQ/FAQ-GeneralBitcoinPrivacy.html",{loader:()=>ee(()=>import("./FAQ-GeneralBitcoinPrivacy.html-CKFHSkgl.js"),__vite__mapDeps([])),meta:{title:"Bitcoin Privacy FAQ"}}],["/FAQ/FAQ-Installation.html",{loader:()=>ee(()=>import("./FAQ-Installation.html-ByCwNgKw.js"),__vite__mapDeps([2,1,3])),meta:{title:"Installation FAQ"}}],["/FAQ/FAQ-Introduction.html",{loader:()=>ee(()=>import("./FAQ-Introduction.html-D5UobHXe.js"),__vite__mapDeps([4,1])),meta:{title:"Introduction FAQ"}}],["/FAQ/FAQ-UseWasabi.html",{loader:()=>ee(()=>import("./FAQ-UseWasabi.html-D5gJQVku.js"),__vite__mapDeps([5,6,7,8,9,10,11,12,1,13,14,15])),meta:{title:"Use of Wasabi FAQ"}}],["/FAQ/",{loader:()=>ee(()=>import("./index.html-rmdsKcvV.js"),__vite__mapDeps([])),meta:{title:"Frequently Asked Questions"}}],["/building-wasabi/ContributionChecklist.html",{loader:()=>ee(()=>import("./ContributionChecklist.html-DDqLw8Jr.js"),__vite__mapDeps([])),meta:{title:"Contribution Checklist"}}],["/building-wasabi/LICENSE.html",{loader:()=>ee(()=>import("./LICENSE.html-BADemgMk.js"),__vite__mapDeps([])),meta:{title:"MIT License"}}],["/building-wasabi/",{loader:()=>ee(()=>import("./index.html-CF7z19Y6.js"),__vite__mapDeps([])),meta:{title:"Building Wasabi"}}],["/building-wasabi/Security.html",{loader:()=>ee(()=>import("./Security.html-587mBq7c.js"),__vite__mapDeps([])),meta:{title:"Security Policy"}}],["/getting-started/",{loader:()=>ee(()=>import("./index.html-LiNA9Lcs.js"),__vite__mapDeps([])),meta:{title:"Getting Started"}}],["/glossary/Glossary-GeneralBitcoin.html",{loader:()=>ee(()=>import("./Glossary-GeneralBitcoin.html-DokuOXpF.js"),__vite__mapDeps([])),meta:{title:"Bitcoin in general"}}],["/glossary/Glossary-PrivacyWasabi.html",{loader:()=>ee(()=>import("./Glossary-PrivacyWasabi.html-Q6b2sZUc.js"),__vite__mapDeps([])),meta:{title:"Privacy and Wasabi"}}],["/glossary/",{loader:()=>ee(()=>import("./index.html-CzzoGAJl.js"),__vite__mapDeps([])),meta:{title:"Glossary"}}],["/using-wasabi/BIPs.html",{loader:()=>ee(()=>import("./BIPs.html-BNCOrWwH.js"),__vite__mapDeps([])),meta:{title:"Supported BIPs"}}],["/using-wasabi/BackupBestPractices.html",{loader:()=>ee(()=>import("./BackupBestPractices.html-Bd0zJ7KI.js"),__vite__mapDeps([])),meta:{title:"Wasabi Backup Best Practices"}}],["/using-wasabi/BitcoinFullNode.html",{loader:()=>ee(()=>import("./BitcoinFullNode.html-BnTWJ1TQ.js"),__vite__mapDeps([16,14])),meta:{title:"Bitcoin Full Node"}}],["/using-wasabi/BuildSource.html",{loader:()=>ee(()=>import("./BuildSource.html-Coa4JuE6.js"),__vite__mapDeps([])),meta:{title:"Build from source code"}}],["/using-wasabi/ChangeCoins.html",{loader:()=>ee(()=>import("./ChangeCoins.html-DsVkj0Hz.js"),__vite__mapDeps([])),meta:{title:"Change Coins"}}],["/using-wasabi/CoinJoin.html",{loader:()=>ee(()=>import("./CoinJoin.html-CtLVyHpU.js"),__vite__mapDeps([17,13,9])),meta:{title:"Coinjoin"}}],["/using-wasabi/ColdWasabi.html",{loader:()=>ee(()=>import("./ColdWasabi.html-D0lP8_S-.js"),__vite__mapDeps([])),meta:{title:"Hardware Wallet"}}],["/using-wasabi/Daemon.html",{loader:()=>ee(()=>import("./Daemon.html-Bt4YbORn.js"),__vite__mapDeps([])),meta:{title:"Headless Wasabi Daemon"}}],["/using-wasabi/DeterministicBuild.html",{loader:()=>ee(()=>import("./DeterministicBuild.html-BP3CVCVk.js"),__vite__mapDeps([])),meta:{title:"Deterministic Build"}}],["/using-wasabi/DiscreetMode.html",{loader:()=>ee(()=>import("./DiscreetMode.html-D9iPWlT5.js"),__vite__mapDeps([18,15])),meta:{title:"Discreet Mode"}}],["/using-wasabi/ELI5.html",{loader:()=>ee(()=>import("./ELI5.html-8HTj70-a.js"),__vite__mapDeps([])),meta:{title:"Explain Wasabi like I'm 5"}}],["/using-wasabi/InstallPackage.html",{loader:()=>ee(()=>import("./InstallPackage.html-CVAotl95.js"),__vite__mapDeps([19,3,1])),meta:{title:"Install-package"}}],["/using-wasabi/PasswordBestPractices.html",{loader:()=>ee(()=>import("./PasswordBestPractices.html-CbMk0pPl.js"),__vite__mapDeps([])),meta:{title:"Password Best Practices"}}],["/using-wasabi/PasswordFinder.html",{loader:()=>ee(()=>import("./PasswordFinder.html-BCm3pBw9.js"),__vite__mapDeps([])),meta:{title:"Password Finder"}}],["/using-wasabi/PayJoin.html",{loader:()=>ee(()=>import("./PayJoin.html-BHEwv_IX.js"),__vite__mapDeps([])),meta:{title:"PayJoin"}}],["/using-wasabi/",{loader:()=>ee(()=>import("./index.html-DG0RLxvG.js"),__vite__mapDeps([])),meta:{title:"Using Wasabi"}}],["/using-wasabi/RPC.html",{loader:()=>ee(()=>import("./RPC.html-CEyIqdII.js"),__vite__mapDeps([])),meta:{title:"RPC Interface"}}],["/using-wasabi/Receive.html",{loader:()=>ee(()=>import("./Receive.html-B2MaHiN7.js"),__vite__mapDeps([20,1,11])),meta:{title:"Receive"}}],["/using-wasabi/RestoreElectrum.html",{loader:()=>ee(()=>import("./RestoreElectrum.html-CcaenDmO.js"),__vite__mapDeps([])),meta:{title:"Restoring Wasabi Wallet in Electrum"}}],["/using-wasabi/Send.html",{loader:()=>ee(()=>import("./Send.html-B7sMNV6R.js"),__vite__mapDeps([21,1,12,9])),meta:{title:"Send"}}],["/using-wasabi/StartupParameters.html",{loader:()=>ee(()=>import("./StartupParameters.html-QIC2uQTw.js"),__vite__mapDeps([])),meta:{title:"Starting Wasabi with parameters"}}],["/using-wasabi/Testnet.html",{loader:()=>ee(()=>import("./Testnet.html-DBlKd0gX.js"),__vite__mapDeps([])),meta:{title:"Testnet"}}],["/using-wasabi/WalletGeneration.html",{loader:()=>ee(()=>import("./WalletGeneration.html-DM5zNUbr.js"),__vite__mapDeps([22,7,8,9])),meta:{title:"Wallet Generation"}}],["/using-wasabi/WalletLoad.html",{loader:()=>ee(()=>import("./WalletLoad.html-BVn8n-Hp.js"),__vite__mapDeps([23,10])),meta:{title:"Wallet Load"}}],["/using-wasabi/WalletRecovery.html",{loader:()=>ee(()=>import("./WalletRecovery.html-DPPR0Qji.js"),__vite__mapDeps([24,6,7])),meta:{title:"Recover a Wallet"}}],["/using-wasabi/WasabiSetupVM.html",{loader:()=>ee(()=>import("./WasabiSetupVM.html-BhxDhqTu.js"),__vite__mapDeps([])),meta:{title:"Wasabi Setup in Virtual Machines"}}],["/why-wasabi/AddressReuse.html",{loader:()=>ee(()=>import("./AddressReuse.html-D74GBKra.js"),__vite__mapDeps([])),meta:{title:"Address Reuse"}}],["/why-wasabi/Coins.html",{loader:()=>ee(()=>import("./Coins.html-CMgxodd1.js"),__vite__mapDeps([])),meta:{title:"Coins"}}],["/why-wasabi/LegalConcern.html",{loader:()=>ee(()=>import("./LegalConcern.html-B9SHgM6p.js"),__vite__mapDeps([])),meta:{title:"CoinJoin Legal Concern"}}],["/why-wasabi/NetworkLevelPrivacy.html",{loader:()=>ee(()=>import("./NetworkLevelPrivacy.html-NGtcEd_n.js"),__vite__mapDeps([25,1])),meta:{title:"Network-Level Privacy"}}],["/why-wasabi/",{loader:()=>ee(()=>import("./index.html-D6Bg9Vdg.js"),__vite__mapDeps([])),meta:{title:"Why Wasabi"}}],["/why-wasabi/TransactionGraph.html",{loader:()=>ee(()=>import("./TransactionGraph.html-VbiBeIfs.js"),__vite__mapDeps([])),meta:{title:"Transaction Graph"}}],["/why-wasabi/TransactionSurveillanceCompanies.html",{loader:()=>ee(()=>import("./TransactionSurveillanceCompanies.html-DE_CC3SQ.js"),__vite__mapDeps([])),meta:{title:"Transaction Surveillance Companies"}}],["/why-wasabi/WhyFinancialPrivacy.html",{loader:()=>ee(()=>import("./WhyFinancialPrivacy.html-CBrnls__.js"),__vite__mapDeps([])),meta:{title:"Why Financial Privacy is Especially Important"}}],["/why-wasabi/WhyPrivacyImportant.html",{loader:()=>ee(()=>import("./WhyPrivacyImportant.html-D3H3J795.js"),__vite__mapDeps([26,1])),meta:{title:"Why Privacy is Important"}}],["/404.html",{loader:()=>ee(()=>import("./404.html-CbyfL9Ee.js"),__vite__mapDeps([])),meta:{title:""}}]]);/*! +**/const lu="http://www.w3.org/2000/svg",ou="http://www.w3.org/1998/Math/MathML",At=typeof document<"u"?document:null,Ho=At&&At.createElement("template"),su={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,i)=>{const l=t==="svg"?At.createElementNS(lu,e):t==="mathml"?At.createElementNS(ou,e):At.createElement(e,n?{is:n}:void 0);return e==="select"&&i&&i.multiple!=null&&l.setAttribute("multiple",i.multiple),l},createText:e=>At.createTextNode(e),createComment:e=>At.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>At.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,i,l,o){const s=n?n.previousSibling:t.lastChild;if(l&&(l===o||l.nextSibling))for(;t.insertBefore(l.cloneNode(!0),n),!(l===o||!(l=l.nextSibling)););else{Ho.innerHTML=i==="svg"?`${e}`:i==="mathml"?`${e}`:e;const r=Ho.content;if(i==="svg"||i==="mathml"){const a=r.firstChild;for(;a.firstChild;)r.appendChild(a.firstChild);r.removeChild(a)}t.insertBefore(r,n)}return[s?s.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},xt="transition",En="animation",$n=Symbol("_vtc"),ei=(e,{slots:t})=>ce(hc,ru(e),t);ei.displayName="Transition";const _r={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ei.props=Ae({},ir,_r);const $t=(e,t=[])=>{ne(e)?e.forEach(n=>n(...t)):e&&e(...t)},Fo=e=>e?ne(e)?e.some(t=>t.length>1):e.length>1:!1;function ru(e){const t={};for(const C in e)C in _r||(t[C]=e[C]);if(e.css===!1)return t;const{name:n="v",type:i,duration:l,enterFromClass:o=`${n}-enter-from`,enterActiveClass:s=`${n}-enter-active`,enterToClass:r=`${n}-enter-to`,appearFromClass:a=o,appearActiveClass:c=s,appearToClass:u=r,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,m=au(l),y=m&&m[0],k=m&&m[1],{onBeforeEnter:x,onEnter:I,onEnterCancelled:v,onLeave:_,onLeaveCancelled:D,onBeforeAppear:W=x,onAppear:F=I,onAppearCancelled:b=v}=t,M=(C,H,te)=>{Nt(C,H?u:r),Nt(C,H?c:s),te&&te()},P=(C,H)=>{C._isLeaving=!1,Nt(C,d),Nt(C,g),Nt(C,h),H&&H()},q=C=>(H,te)=>{const le=C?F:I,T=()=>M(H,C,te);$t(le,[H,T]),Mo(()=>{Nt(H,C?a:o),St(H,C?u:r),Fo(le)||Bo(H,i,y,T)})};return Ae(t,{onBeforeEnter(C){$t(x,[C]),St(C,o),St(C,s)},onBeforeAppear(C){$t(W,[C]),St(C,a),St(C,c)},onEnter:q(!1),onAppear:q(!0),onLeave(C,H){C._isLeaving=!0;const te=()=>P(C,H);St(C,d),du(),St(C,h),Mo(()=>{C._isLeaving&&(Nt(C,d),St(C,g),Fo(_)||Bo(C,i,k,te))}),$t(_,[C,te])},onEnterCancelled(C){M(C,!1),$t(v,[C])},onAppearCancelled(C){M(C,!0),$t(b,[C])},onLeaveCancelled(C){P(C),$t(D,[C])}})}function au(e){if(e==null)return null;if(_e(e))return[il(e.enter),il(e.leave)];{const t=il(e);return[t,t]}}function il(e){return ua(e)}function St(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[$n]||(e[$n]=new Set)).add(t)}function Nt(e,t){t.split(/\s+/).forEach(i=>i&&e.classList.remove(i));const n=e[$n];n&&(n.delete(t),n.size||(e[$n]=void 0))}function Mo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let cu=0;function Bo(e,t,n,i){const l=e._endId=++cu,o=()=>{l===e._endId&&i()};if(n)return setTimeout(o,n);const{type:s,timeout:r,propCount:a}=uu(e,t);if(!s)return i();const c=s+"end";let u=0;const d=()=>{e.removeEventListener(c,h),o()},h=g=>{g.target===e&&++u>=a&&d()};setTimeout(()=>{u(n[m]||"").split(", "),l=i(`${xt}Delay`),o=i(`${xt}Duration`),s=Do(l,o),r=i(`${En}Delay`),a=i(`${En}Duration`),c=Do(r,a);let u=null,d=0,h=0;t===xt?s>0&&(u=xt,d=s,h=o.length):t===En?c>0&&(u=En,d=c,h=a.length):(d=Math.max(s,c),u=d>0?s>c?xt:En:null,h=u?u===xt?o.length:a.length:0);const g=u===xt&&/\b(transform|all)(,|$)/.test(i(`${xt}Property`).toString());return{type:u,timeout:d,propCount:h,hasTransform:g}}function Do(e,t){for(;e.length$o(n)+$o(e[i])))}function $o(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function du(){return document.body.offsetHeight}function hu(e,t,n){const i=e[$n];i&&(t=(t?[t,...i]:[...i]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Nn=Symbol("_vod"),Pi={beforeMount(e,{value:t},{transition:n}){e[Nn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):xn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:i}){!t==!n&&(e.style.display===e[Nn]||!t)||(i?t?(i.beforeEnter(e),xn(e,!0),i.enter(e)):i.leave(e,()=>{xn(e,!1)}):xn(e,t))},beforeUnmount(e,{value:t}){xn(e,t)}};function xn(e,t){e.style.display=t?e[Nn]:"none"}const fu=Symbol(""),pu=/(^|;)\s*display\s*:/;function gu(e,t,n){const i=e.style,l=Le(n),o=i.display;let s=!1;if(n&&!l){if(t&&!Le(t))for(const r in t)n[r]==null&&Sl(i,r,"");for(const r in n)r==="display"&&(s=!0),Sl(i,r,n[r])}else if(l){if(t!==n){const r=i[fu];r&&(n+=";"+r),i.cssText=n,s=pu.test(n)}}else t&&e.removeAttribute("style");Nn in e&&(e[Nn]=s?i.display:"",i.display=o)}const No=/\s*!important$/;function Sl(e,t,n){if(ne(n))n.forEach(i=>Sl(e,t,i));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const i=mu(e,t);No.test(n)?e.setProperty(Zt(i),n.replace(No,""),"important"):e[i]=n}}const zo=["Webkit","Moz","ms"],ll={};function mu(e,t){const n=ll[t];if(n)return n;let i=nt(t);if(i!=="filter"&&i in e)return ll[t]=i;i=qn(i);for(let l=0;lol||(Cu.then(()=>ol=0),ol=Date.now());function xu(e,t){const n=i=>{if(!i._vts)i._vts=Date.now();else if(i._vts<=n.attached)return;tt(Su(i,n.value),t,5,[i])};return n.value=e,n.attached=Eu(),n}function Su(e,t){if(ne(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(i=>l=>!l._stopped&&i&&i(l))}else return t}const qo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Lu=(e,t,n,i,l,o,s,r,a)=>{const c=l==="svg";t==="class"?hu(e,i,c):t==="style"?gu(e,n,i):Gn(t)?Wl(t)||ku(e,t,n,i,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Iu(e,t,i,c))?bu(e,t,i,o,s,r,a):(t==="true-value"?e._trueValue=i:t==="false-value"&&(e._falseValue=i),vu(e,t,i,c))};function Iu(e,t,n,i){if(i)return!!(t==="innerHTML"||t==="textContent"||t in e&&qo(t)&&se(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const l=e.tagName;if(l==="IMG"||l==="VIDEO"||l==="CANVAS"||l==="SOURCE")return!1}return qo(t)&&Le(n)?!1:t in e}const Pu={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Au=(e,t)=>{const n=e._withKeys||(e._withKeys={}),i=t.join(".");return n[i]||(n[i]=l=>{if(!("key"in l))return;const o=Zt(l.key);if(t.some(s=>s===o||Pu[s]===o))return e(l)})},Tu=Ae({patchProp:Lu},su);let sl,Ko=!1;function Wu(){return sl=Ko?sl:Dc(Tu),Ko=!0,sl}const Ru=(...e)=>{const t=Wu().createApp(...e),{mount:n}=t;return t.mount=i=>{const l=ju(i);if(l)return n(l,!0,Ou(l))},t};function Ou(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ju(e){return Le(e)?document.querySelector(e):e}var Hu=["link","meta","script","style","noscript","template"],Fu=["title","base"],Mu=([e,t,n])=>Fu.includes(e)?e:Hu.includes(e)?e==="meta"&&t.name?`${e}.${t.name}`:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,Object.entries(t).map(([i,l])=>typeof l=="boolean"?l?[i,""]:null:[i,l]).filter(i=>i!=null).sort(([i],[l])=>i.localeCompare(l)),n]):null,Bu=e=>{const t=new Set,n=[];return e.forEach(i=>{const l=Mu(i);l&&!t.has(l)&&(t.add(l),n.push(i))}),n},ti=e=>/^(https?:)?\/\//.test(e),Du=e=>/^[a-z][a-z0-9+.-]*:/.test(e),Kl=e=>Object.prototype.toString.call(e)==="[object Object]",$u=e=>{const[t,...n]=e.split(/(\?|#)/);if(!t||t.endsWith("/"))return e;let i=t.replace(/(^|\/)README.md$/i,"$1index.html");return i.endsWith(".md")?i=i.substring(0,i.length-3)+".html":i.endsWith(".html")||(i=i+".html"),i.endsWith("/index.html")&&(i=i.substring(0,i.length-10)),i+n.join("")},Cr=e=>e[e.length-1]==="/"?e.slice(0,-1):e,Er=e=>e[0]==="/"?e.slice(1):e,xr=(e,t)=>{const n=Object.keys(e).sort((i,l)=>{const o=l.split("/").length-i.split("/").length;return o!==0?o:l.length-i.length});for(const i of n)if(t.startsWith(i))return i;return"/"},dt=e=>typeof e=="string";const Nu="modulepreload",zu=function(e){return"/"+e},Qo={},ee=function(t,n,i){let l=Promise.resolve();return n&&n.length>0&&(document.getElementsByTagName("link"),l=Promise.all(n.map(o=>{if(o=zu(o),o in Qo)return;Qo[o]=!0;const s=o.endsWith(".css"),r=s?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${o}"]${r}`))return;const a=document.createElement("link");if(a.rel=s?"stylesheet":Nu,s||(a.as="script",a.crossOrigin=""),a.href=o,document.head.appendChild(a),s)return new Promise((c,u)=>{a.addEventListener("load",c),a.addEventListener("error",()=>u(new Error(`Unable to preload CSS for ${o}`)))})}))),l.then(()=>t()).catch(o=>{const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=o,window.dispatchEvent(s),!s.defaultPrevented)throw o})},Vu=JSON.parse("{}"),Uu=Object.fromEntries([["/",{loader:()=>ee(()=>import("./index.html-BV_EdjX3.js"),__vite__mapDeps([])),meta:{title:""}}],["/FAQ/FAQ-Contribution.html",{loader:()=>ee(()=>import("./FAQ-Contribution.html-CQsxetkq.js"),__vite__mapDeps([0,1])),meta:{title:"Contribution FAQ"}}],["/FAQ/FAQ-GeneralBitcoinPrivacy.html",{loader:()=>ee(()=>import("./FAQ-GeneralBitcoinPrivacy.html-CpR1ImCX.js"),__vite__mapDeps([])),meta:{title:"Bitcoin Privacy FAQ"}}],["/FAQ/FAQ-Installation.html",{loader:()=>ee(()=>import("./FAQ-Installation.html-CuD82U_3.js"),__vite__mapDeps([2,1,3])),meta:{title:"Installation FAQ"}}],["/FAQ/FAQ-Introduction.html",{loader:()=>ee(()=>import("./FAQ-Introduction.html-C7cqAIG6.js"),__vite__mapDeps([4,1])),meta:{title:"Introduction FAQ"}}],["/FAQ/FAQ-UseWasabi.html",{loader:()=>ee(()=>import("./FAQ-UseWasabi.html-94kDagvU.js"),__vite__mapDeps([5,6,7,8,9,10,11,12,1,13,14,15])),meta:{title:"Use of Wasabi FAQ"}}],["/FAQ/",{loader:()=>ee(()=>import("./index.html-QxRAyLdd.js"),__vite__mapDeps([])),meta:{title:"Frequently Asked Questions"}}],["/building-wasabi/ContributionChecklist.html",{loader:()=>ee(()=>import("./ContributionChecklist.html-OBd7F2pO.js"),__vite__mapDeps([])),meta:{title:"Contribution Checklist"}}],["/building-wasabi/LICENSE.html",{loader:()=>ee(()=>import("./LICENSE.html-DKeitlrQ.js"),__vite__mapDeps([])),meta:{title:"MIT License"}}],["/building-wasabi/",{loader:()=>ee(()=>import("./index.html-D8QPFW1A.js"),__vite__mapDeps([])),meta:{title:"Building Wasabi"}}],["/building-wasabi/Security.html",{loader:()=>ee(()=>import("./Security.html-DIwuLgN6.js"),__vite__mapDeps([])),meta:{title:"Security Policy"}}],["/getting-started/",{loader:()=>ee(()=>import("./index.html-BPPqNLwZ.js"),__vite__mapDeps([])),meta:{title:"Getting Started"}}],["/glossary/Glossary-GeneralBitcoin.html",{loader:()=>ee(()=>import("./Glossary-GeneralBitcoin.html-CSe7i-qZ.js"),__vite__mapDeps([])),meta:{title:"Bitcoin in general"}}],["/glossary/Glossary-PrivacyWasabi.html",{loader:()=>ee(()=>import("./Glossary-PrivacyWasabi.html-DZPZVU0l.js"),__vite__mapDeps([])),meta:{title:"Privacy and Wasabi"}}],["/glossary/",{loader:()=>ee(()=>import("./index.html-ysdckVqf.js"),__vite__mapDeps([])),meta:{title:"Glossary"}}],["/using-wasabi/BIPs.html",{loader:()=>ee(()=>import("./BIPs.html-D0DnGh8g.js"),__vite__mapDeps([])),meta:{title:"Supported BIPs"}}],["/using-wasabi/BackupBestPractices.html",{loader:()=>ee(()=>import("./BackupBestPractices.html-XHQT6mek.js"),__vite__mapDeps([])),meta:{title:"Wasabi Backup Best Practices"}}],["/using-wasabi/BitcoinFullNode.html",{loader:()=>ee(()=>import("./BitcoinFullNode.html-C_yN9emI.js"),__vite__mapDeps([16,14])),meta:{title:"Bitcoin Full Node"}}],["/using-wasabi/BuildSource.html",{loader:()=>ee(()=>import("./BuildSource.html-BTPFzo1C.js"),__vite__mapDeps([])),meta:{title:"Build from source code"}}],["/using-wasabi/ChangeCoins.html",{loader:()=>ee(()=>import("./ChangeCoins.html-VrjnBreJ.js"),__vite__mapDeps([])),meta:{title:"Change Coins"}}],["/using-wasabi/CoinJoin.html",{loader:()=>ee(()=>import("./CoinJoin.html-Buvm4ii4.js"),__vite__mapDeps([17,13,9])),meta:{title:"Coinjoin"}}],["/using-wasabi/ColdWasabi.html",{loader:()=>ee(()=>import("./ColdWasabi.html-BbLAbGKC.js"),__vite__mapDeps([])),meta:{title:"Hardware Wallet"}}],["/using-wasabi/Daemon.html",{loader:()=>ee(()=>import("./Daemon.html-B6QsLjUU.js"),__vite__mapDeps([])),meta:{title:"Headless Wasabi Daemon"}}],["/using-wasabi/DeterministicBuild.html",{loader:()=>ee(()=>import("./DeterministicBuild.html-CoygJOSJ.js"),__vite__mapDeps([])),meta:{title:"Deterministic Build"}}],["/using-wasabi/DiscreetMode.html",{loader:()=>ee(()=>import("./DiscreetMode.html-BJL1ea8e.js"),__vite__mapDeps([18,15])),meta:{title:"Discreet Mode"}}],["/using-wasabi/ELI5.html",{loader:()=>ee(()=>import("./ELI5.html-oph23Dfp.js"),__vite__mapDeps([])),meta:{title:"Explain Wasabi like I'm 5"}}],["/using-wasabi/InstallPackage.html",{loader:()=>ee(()=>import("./InstallPackage.html-D-UpXvj8.js"),__vite__mapDeps([19,3,1])),meta:{title:"Install-package"}}],["/using-wasabi/PasswordBestPractices.html",{loader:()=>ee(()=>import("./PasswordBestPractices.html-CyKqkdt_.js"),__vite__mapDeps([])),meta:{title:"Password Best Practices"}}],["/using-wasabi/PasswordFinder.html",{loader:()=>ee(()=>import("./PasswordFinder.html-DAqeoYmb.js"),__vite__mapDeps([])),meta:{title:"Password Finder"}}],["/using-wasabi/PayJoin.html",{loader:()=>ee(()=>import("./PayJoin.html-CfbDrzMn.js"),__vite__mapDeps([])),meta:{title:"PayJoin"}}],["/using-wasabi/",{loader:()=>ee(()=>import("./index.html-DB0XlitE.js"),__vite__mapDeps([])),meta:{title:"Using Wasabi"}}],["/using-wasabi/RPC.html",{loader:()=>ee(()=>import("./RPC.html-CFVSyrb9.js"),__vite__mapDeps([])),meta:{title:"RPC Interface"}}],["/using-wasabi/Receive.html",{loader:()=>ee(()=>import("./Receive.html-BpUPEVUm.js"),__vite__mapDeps([20,1,11])),meta:{title:"Receive"}}],["/using-wasabi/RestoreElectrum.html",{loader:()=>ee(()=>import("./RestoreElectrum.html-CmSE67oc.js"),__vite__mapDeps([])),meta:{title:"Restoring Wasabi Wallet in Electrum"}}],["/using-wasabi/Send.html",{loader:()=>ee(()=>import("./Send.html-B0uyGrbT.js"),__vite__mapDeps([21,1,12,9])),meta:{title:"Send"}}],["/using-wasabi/StartupParameters.html",{loader:()=>ee(()=>import("./StartupParameters.html-BoWGLe6W.js"),__vite__mapDeps([])),meta:{title:"Starting Wasabi with parameters"}}],["/using-wasabi/Testnet.html",{loader:()=>ee(()=>import("./Testnet.html-PlH0_UrE.js"),__vite__mapDeps([])),meta:{title:"Testnet"}}],["/using-wasabi/WalletGeneration.html",{loader:()=>ee(()=>import("./WalletGeneration.html-BYYxvj2X.js"),__vite__mapDeps([22,7,8,9])),meta:{title:"Wallet Generation"}}],["/using-wasabi/WalletLoad.html",{loader:()=>ee(()=>import("./WalletLoad.html-JBYidTLT.js"),__vite__mapDeps([23,10])),meta:{title:"Wallet Load"}}],["/using-wasabi/WalletRecovery.html",{loader:()=>ee(()=>import("./WalletRecovery.html-BiLw8XhX.js"),__vite__mapDeps([24,6,7])),meta:{title:"Recover a Wallet"}}],["/using-wasabi/WasabiSetupVM.html",{loader:()=>ee(()=>import("./WasabiSetupVM.html-CqY0iH63.js"),__vite__mapDeps([])),meta:{title:"Wasabi Setup in Virtual Machines"}}],["/why-wasabi/AddressReuse.html",{loader:()=>ee(()=>import("./AddressReuse.html-AL4Hzje_.js"),__vite__mapDeps([])),meta:{title:"Address Reuse"}}],["/why-wasabi/Coins.html",{loader:()=>ee(()=>import("./Coins.html-D3KQkX5V.js"),__vite__mapDeps([])),meta:{title:"Coins"}}],["/why-wasabi/LegalConcern.html",{loader:()=>ee(()=>import("./LegalConcern.html-BkQTNYbk.js"),__vite__mapDeps([])),meta:{title:"CoinJoin Legal Concern"}}],["/why-wasabi/NetworkLevelPrivacy.html",{loader:()=>ee(()=>import("./NetworkLevelPrivacy.html-fWyUnxDF.js"),__vite__mapDeps([25,1])),meta:{title:"Network-Level Privacy"}}],["/why-wasabi/",{loader:()=>ee(()=>import("./index.html-dAMsOFGn.js"),__vite__mapDeps([])),meta:{title:"Why Wasabi"}}],["/why-wasabi/TransactionGraph.html",{loader:()=>ee(()=>import("./TransactionGraph.html-mhL1IQAX.js"),__vite__mapDeps([])),meta:{title:"Transaction Graph"}}],["/why-wasabi/TransactionSurveillanceCompanies.html",{loader:()=>ee(()=>import("./TransactionSurveillanceCompanies.html-gyPMHDws.js"),__vite__mapDeps([])),meta:{title:"Transaction Surveillance Companies"}}],["/why-wasabi/WhyFinancialPrivacy.html",{loader:()=>ee(()=>import("./WhyFinancialPrivacy.html-X0y87-e5.js"),__vite__mapDeps([])),meta:{title:"Why Financial Privacy is Especially Important"}}],["/why-wasabi/WhyPrivacyImportant.html",{loader:()=>ee(()=>import("./WhyPrivacyImportant.html-Dj7M33g8.js"),__vite__mapDeps([26,1])),meta:{title:"Why Privacy is Important"}}],["/404.html",{loader:()=>ee(()=>import("./404.html-BStBYnh5.js"),__vite__mapDeps([])),meta:{title:""}}]]);/*! * vue-router v4.2.5 * (c) 2023 Eduardo San Martin Morote * @license MIT - */const rn=typeof window<"u";function Gu(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const me=Object.assign;function rl(e,t){const n={};for(const i in t){const l=t[i];n[i]=st(l)?l.map(e):e(l)}return n}const jn=()=>{},st=Array.isArray,qu=/\/$/,Ku=e=>e.replace(qu,"");function al(e,t,n="/"){let i,l={},o="",s="";const r=t.indexOf("#");let a=t.indexOf("?");return r=0&&(a=-1),a>-1&&(i=t.slice(0,a),o=t.slice(a+1,r>-1?r:t.length),l=e(o)),r>-1&&(i=i||t.slice(0,r),s=t.slice(r,t.length)),i=Xu(i??t,n),{fullPath:i+(o&&"?")+o+s,path:i,query:l,hash:s}}function Qu(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Jo(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Ju(e,t,n){const i=t.matched.length-1,l=n.matched.length-1;return i>-1&&i===l&&vn(t.matched[i],n.matched[l])&&Sr(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function vn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Sr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Yu(e[n],t[n]))return!1;return!0}function Yu(e,t){return st(e)?Yo(e,t):st(t)?Yo(t,e):e===t}function Yo(e,t){return st(t)?e.length===t.length&&e.every((n,i)=>n===t[i]):e.length===1&&e[0]===t}function Xu(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),i=e.split("/"),l=i[i.length-1];(l===".."||l===".")&&i.push("");let o=n.length-1,s,r;for(s=0;s1&&o--;else break;return n.slice(0,o).join("/")+"/"+i.slice(s-(s===i.length?1:0)).join("/")}var zn;(function(e){e.pop="pop",e.push="push"})(zn||(zn={}));var Hn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Hn||(Hn={}));function Zu(e){if(!e)if(rn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Ku(e)}const ed=/^[^#]+#/;function td(e,t){return e.replace(ed,"#")+t}function nd(e,t){const n=document.documentElement.getBoundingClientRect(),i=e.getBoundingClientRect();return{behavior:t.behavior,left:i.left-n.left-(t.left||0),top:i.top-n.top-(t.top||0)}}const Vi=()=>({left:window.pageXOffset,top:window.pageYOffset});function id(e){let t;if("el"in e){const n=e.el,i=typeof n=="string"&&n.startsWith("#"),l=typeof n=="string"?i?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!l)return;t=nd(l,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Xo(e,t){return(history.state?history.state.position-t:-1)+e}const Ll=new Map;function ld(e,t){Ll.set(e,t)}function od(e){const t=Ll.get(e);return Ll.delete(e),t}let sd=()=>location.protocol+"//"+location.host;function Lr(e,t){const{pathname:n,search:i,hash:l}=t,o=e.indexOf("#");if(o>-1){let r=l.includes(e.slice(o))?e.slice(o).length:1,a=l.slice(r);return a[0]!=="/"&&(a="/"+a),Jo(a,"")}return Jo(n,e)+i+l}function rd(e,t,n,i){let l=[],o=[],s=null;const r=({state:h})=>{const g=Lr(e,location),m=n.value,y=t.value;let k=0;if(h){if(n.value=g,t.value=h,s&&s===m){s=null;return}k=y?h.position-y.position:0}else i(g);l.forEach(x=>{x(n.value,m,{delta:k,type:zn.pop,direction:k?k>0?Hn.forward:Hn.back:Hn.unknown})})};function a(){s=n.value}function c(h){l.push(h);const g=()=>{const m=l.indexOf(h);m>-1&&l.splice(m,1)};return o.push(g),g}function u(){const{history:h}=window;h.state&&h.replaceState(me({},h.state,{scroll:Vi()}),"")}function d(){for(const h of o)h();o=[],window.removeEventListener("popstate",r),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",r),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:a,listen:c,destroy:d}}function Zo(e,t,n,i=!1,l=!1){return{back:e,current:t,forward:n,replaced:i,position:window.history.length,scroll:l?Vi():null}}function ad(e){const{history:t,location:n}=window,i={value:Lr(e,n)},l={value:t.state};l.value||o(i.value,{back:null,current:i.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,c,u){const d=e.indexOf("#"),h=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+a:sd()+e+a;try{t[u?"replaceState":"pushState"](c,"",h),l.value=c}catch(g){console.error(g),n[u?"replace":"assign"](h)}}function s(a,c){const u=me({},t.state,Zo(l.value.back,a,l.value.forward,!0),c,{position:l.value.position});o(a,u,!0),i.value=a}function r(a,c){const u=me({},l.value,t.state,{forward:a,scroll:Vi()});o(u.current,u,!0);const d=me({},Zo(i.value,a,null),{position:u.position+1},c);o(a,d,!1),i.value=a}return{location:i,state:l,push:r,replace:s}}function cd(e){e=Zu(e);const t=ad(e),n=rd(e,t.state,t.location,t.replace);function i(o,s=!0){s||n.pauseListeners(),history.go(o)}const l=me({location:"",base:e,go:i,createHref:td.bind(null,e)},t,n);return Object.defineProperty(l,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(l,"state",{enumerable:!0,get:()=>t.state.value}),l}function ud(e){return typeof e=="string"||e&&typeof e=="object"}function Ir(e){return typeof e=="string"||typeof e=="symbol"}const mt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Pr=Symbol("");var es;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(es||(es={}));function bn(e,t){return me(new Error,{type:e,[Pr]:!0},t)}function gt(e,t){return e instanceof Error&&Pr in e&&(t==null||!!(e.type&t))}const ts="[^/]+?",dd={sensitive:!1,strict:!1,start:!0,end:!0},hd=/[.+*?^${}()[\]/\\]/g;function fd(e,t){const n=me({},dd,t),i=[];let l=n.start?"^":"";const o=[];for(const c of e){const u=c.length?[]:[90];n.strict&&!c.length&&(l+="/");for(let d=0;dt.length?t.length===1&&t[0]===80?1:-1:0}function gd(e,t){let n=0;const i=e.score,l=t.score;for(;n0&&t[t.length-1]<0}const md={type:0,value:""},vd=/[a-zA-Z0-9_]/;function bd(e){if(!e)return[[]];if(e==="/")return[[md]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${c}": ${g}`)}let n=0,i=n;const l=[];let o;function s(){o&&l.push(o),o=[]}let r=0,a,c="",u="";function d(){c&&(n===0?o.push({type:0,value:c}):n===1||n===2||n===3?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function h(){c+=a}for(;r{s(I)}:jn}function s(u){if(Ir(u)){const d=i.get(u);d&&(i.delete(u),n.splice(n.indexOf(d),1),d.children.forEach(s),d.alias.forEach(s))}else{const d=n.indexOf(u);d>-1&&(n.splice(d,1),u.record.name&&i.delete(u.record.name),u.children.forEach(s),u.alias.forEach(s))}}function r(){return n}function a(u){let d=0;for(;d=0&&(u.record.path!==n[d].record.path||!Ar(u,n[d]));)d++;n.splice(d,0,u),u.record.name&&!ls(u)&&i.set(u.record.name,u)}function c(u,d){let h,g={},m,y;if("name"in u&&u.name){if(h=i.get(u.name),!h)throw bn(1,{location:u});y=h.record.name,g=me(is(d.params,h.keys.filter(I=>!I.optional).map(I=>I.name)),u.params&&is(u.params,h.keys.map(I=>I.name))),m=h.stringify(g)}else if("path"in u)m=u.path,h=n.find(I=>I.re.test(m)),h&&(g=h.parse(m),y=h.record.name);else{if(h=d.name?i.get(d.name):n.find(I=>I.re.test(d.path)),!h)throw bn(1,{location:u,currentLocation:d});y=h.record.name,g=me({},d.params,u.params),m=h.stringify(g)}const k=[];let x=h;for(;x;)k.unshift(x.record),x=x.parent;return{name:y,path:m,params:g,matched:k,meta:Cd(k)}}return e.forEach(u=>o(u)),{addRoute:o,resolve:c,removeRoute:s,getRoutes:r,getRecordMatcher:l}}function is(e,t){const n={};for(const i of t)i in e&&(n[i]=e[i]);return n}function kd(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:_d(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function _d(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const i in e.components)t[i]=typeof n=="object"?n[i]:n;return t}function ls(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Cd(e){return e.reduce((t,n)=>me(t,n.meta),{})}function os(e,t){const n={};for(const i in e)n[i]=i in t?t[i]:e[i];return n}function Ar(e,t){return t.children.some(n=>n===e||Ar(e,n))}const Tr=/#/g,Ed=/&/g,xd=/\//g,Sd=/=/g,Ld=/\?/g,Wr=/\+/g,Id=/%5B/g,Pd=/%5D/g,Rr=/%5E/g,Ad=/%60/g,Or=/%7B/g,Td=/%7C/g,jr=/%7D/g,Wd=/%20/g;function Ql(e){return encodeURI(""+e).replace(Td,"|").replace(Id,"[").replace(Pd,"]")}function Rd(e){return Ql(e).replace(Or,"{").replace(jr,"}").replace(Rr,"^")}function Il(e){return Ql(e).replace(Wr,"%2B").replace(Wd,"+").replace(Tr,"%23").replace(Ed,"%26").replace(Ad,"`").replace(Or,"{").replace(jr,"}").replace(Rr,"^")}function Od(e){return Il(e).replace(Sd,"%3D")}function jd(e){return Ql(e).replace(Tr,"%23").replace(Ld,"%3F")}function Hd(e){return e==null?"":jd(e).replace(xd,"%2F")}function Ai(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Fd(e){const t={};if(e===""||e==="?")return t;const i=(e[0]==="?"?e.slice(1):e).split("&");for(let l=0;lo&&Il(o)):[i&&Il(i)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function Md(e){const t={};for(const n in e){const i=e[n];i!==void 0&&(t[n]=st(i)?i.map(l=>l==null?null:""+l):i==null?i:""+i)}return t}const Bd=Symbol(""),rs=Symbol(""),Ui=Symbol(""),Jl=Symbol(""),Pl=Symbol("");function Sn(){let e=[];function t(i){return e.push(i),()=>{const l=e.indexOf(i);l>-1&&e.splice(l,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Tt(e,t,n,i,l){const o=i&&(i.enterCallbacks[l]=i.enterCallbacks[l]||[]);return()=>new Promise((s,r)=>{const a=d=>{d===!1?r(bn(4,{from:n,to:t})):d instanceof Error?r(d):ud(d)?r(bn(2,{from:t,to:d})):(o&&i.enterCallbacks[l]===o&&typeof d=="function"&&o.push(d),s())},c=e.call(i&&i.instances[l],t,n,a);let u=Promise.resolve(c);e.length<3&&(u=u.then(a)),u.catch(d=>r(d))})}function cl(e,t,n,i){const l=[];for(const o of e)for(const s in o.components){let r=o.components[s];if(!(t!=="beforeRouteEnter"&&!o.instances[s]))if(Dd(r)){const c=(r.__vccOpts||r)[t];c&&l.push(Tt(c,n,i,o,s))}else{let a=r();l.push(()=>a.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${s}" at "${o.path}"`));const u=Gu(c)?c.default:c;o.components[s]=u;const h=(u.__vccOpts||u)[t];return h&&Tt(h,n,i,o,s)()}))}}return l}function Dd(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function as(e){const t=ze(Ui),n=ze(Jl),i=R(()=>t.resolve(Y(e.to))),l=R(()=>{const{matched:a}=i.value,{length:c}=a,u=a[c-1],d=n.matched;if(!u||!d.length)return-1;const h=d.findIndex(vn.bind(null,u));if(h>-1)return h;const g=cs(a[c-2]);return c>1&&cs(u)===g&&d[d.length-1].path!==g?d.findIndex(vn.bind(null,a[c-2])):h}),o=R(()=>l.value>-1&&Vd(n.params,i.value.params)),s=R(()=>l.value>-1&&l.value===n.matched.length-1&&Sr(n.params,i.value.params));function r(a={}){return zd(a)?t[Y(e.replace)?"replace":"push"](Y(e.to)).catch(jn):Promise.resolve()}return{route:i,href:R(()=>i.value.href),isActive:o,isExactActive:s,navigate:r}}const $d=ge({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:as,setup(e,{slots:t}){const n=Qn(as(e)),{options:i}=ze(Ui),l=R(()=>({[us(e.activeClass,i.linkActiveClass,"router-link-active")]:n.isActive,[us(e.exactActiveClass,i.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&t.default(n);return e.custom?o:ce("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:l.value},o)}}}),Nd=$d;function zd(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Vd(e,t){for(const n in t){const i=t[n],l=e[n];if(typeof i=="string"){if(i!==l)return!1}else if(!st(l)||l.length!==i.length||i.some((o,s)=>o!==l[s]))return!1}return!0}function cs(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const us=(e,t,n)=>e??t??n,Ud=ge({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const i=ze(Pl),l=R(()=>e.route||i.value),o=ze(rs,0),s=R(()=>{let c=Y(o);const{matched:u}=l.value;let d;for(;(d=u[c])&&!d.components;)c++;return c}),r=R(()=>l.value.matched[s.value]);Yt(rs,R(()=>s.value+1)),Yt(Bd,r),Yt(Pl,l);const a=re();return Me(()=>[a.value,r.value,e.name],([c,u,d],[h,g,m])=>{u&&(u.instances[d]=c,g&&g!==u&&c&&c===h&&(u.leaveGuards.size||(u.leaveGuards=g.leaveGuards),u.updateGuards.size||(u.updateGuards=g.updateGuards))),c&&u&&(!g||!vn(u,g)||!h)&&(u.enterCallbacks[d]||[]).forEach(y=>y(c))},{flush:"post"}),()=>{const c=l.value,u=e.name,d=r.value,h=d&&d.components[u];if(!h)return ds(n.default,{Component:h,route:c});const g=d.props[u],m=g?g===!0?c.params:typeof g=="function"?g(c):g:null,k=ce(h,me({},m,t,{onVnodeUnmounted:x=>{x.component.isUnmounted&&(d.instances[u]=null)},ref:a}));return ds(n.default,{Component:k,route:c})||k}}});function ds(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Gd=Ud;function qd(e){const t=yd(e.routes,e),n=e.parseQuery||Fd,i=e.stringifyQuery||ss,l=e.history,o=Sn(),s=Sn(),r=Sn(),a=yn(mt);let c=mt;rn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=rl.bind(null,S=>""+S),d=rl.bind(null,Hd),h=rl.bind(null,Ai);function g(S,V){let $,K;return Ir(S)?($=t.getRecordMatcher(S),K=V):K=S,t.addRoute(K,$)}function m(S){const V=t.getRecordMatcher(S);V&&t.removeRoute(V)}function y(){return t.getRoutes().map(S=>S.record)}function k(S){return!!t.getRecordMatcher(S)}function x(S,V){if(V=me({},V||a.value),typeof S=="string"){const p=al(n,S,V.path),w=t.resolve({path:p.path},V),L=l.createHref(p.fullPath);return me(p,w,{params:h(w.params),hash:Ai(p.hash),redirectedFrom:void 0,href:L})}let $;if("path"in S)$=me({},S,{path:al(n,S.path,V.path).path});else{const p=me({},S.params);for(const w in p)p[w]==null&&delete p[w];$=me({},S,{params:d(p)}),V.params=d(V.params)}const K=t.resolve($,V),ue=S.hash||"";K.params=u(h(K.params));const ve=Qu(i,me({},S,{hash:Rd(ue),path:K.path})),f=l.createHref(ve);return me({fullPath:ve,hash:ue,query:i===ss?Md(S.query):S.query||{}},K,{redirectedFrom:void 0,href:f})}function I(S){return typeof S=="string"?al(n,S,a.value.path):me({},S)}function v(S,V){if(c!==S)return bn(8,{from:V,to:S})}function _(S){return F(S)}function D(S){return _(me(I(S),{replace:!0}))}function W(S){const V=S.matched[S.matched.length-1];if(V&&V.redirect){const{redirect:$}=V;let K=typeof $=="function"?$(S):$;return typeof K=="string"&&(K=K.includes("?")||K.includes("#")?K=I(K):{path:K},K.params={}),me({query:S.query,hash:S.hash,params:"path"in K?{}:S.params},K)}}function F(S,V){const $=c=x(S),K=a.value,ue=S.state,ve=S.force,f=S.replace===!0,p=W($);if(p)return F(me(I(p),{state:typeof p=="object"?me({},ue,p.state):ue,force:ve,replace:f}),V||$);const w=$;w.redirectedFrom=V;let L;return!ve&&Ju(i,K,$)&&(L=bn(16,{to:w,from:K}),Ue(K,K,!0,!1)),(L?Promise.resolve(L):P(w,K)).catch(E=>gt(E)?gt(E,2)?E:je(E):U(E,w,K)).then(E=>{if(E){if(gt(E,2))return F(me({replace:f},I(E.to),{state:typeof E.to=="object"?me({},ue,E.to.state):ue,force:ve}),V||w)}else E=C(w,K,!0,f,ue);return q(w,K,E),E})}function b(S,V){const $=v(S,V);return $?Promise.reject($):Promise.resolve()}function M(S){const V=_t.values().next().value;return V&&typeof V.runWithContext=="function"?V.runWithContext(S):S()}function P(S,V){let $;const[K,ue,ve]=Kd(S,V);$=cl(K.reverse(),"beforeRouteLeave",S,V);for(const p of K)p.leaveGuards.forEach(w=>{$.push(Tt(w,S,V))});const f=b.bind(null,S,V);return $.push(f),We($).then(()=>{$=[];for(const p of o.list())$.push(Tt(p,S,V));return $.push(f),We($)}).then(()=>{$=cl(ue,"beforeRouteUpdate",S,V);for(const p of ue)p.updateGuards.forEach(w=>{$.push(Tt(w,S,V))});return $.push(f),We($)}).then(()=>{$=[];for(const p of ve)if(p.beforeEnter)if(st(p.beforeEnter))for(const w of p.beforeEnter)$.push(Tt(w,S,V));else $.push(Tt(p.beforeEnter,S,V));return $.push(f),We($)}).then(()=>(S.matched.forEach(p=>p.enterCallbacks={}),$=cl(ve,"beforeRouteEnter",S,V),$.push(f),We($))).then(()=>{$=[];for(const p of s.list())$.push(Tt(p,S,V));return $.push(f),We($)}).catch(p=>gt(p,8)?p:Promise.reject(p))}function q(S,V,$){r.list().forEach(K=>M(()=>K(S,V,$)))}function C(S,V,$,K,ue){const ve=v(S,V);if(ve)return ve;const f=V===mt,p=rn?history.state:{};$&&(K||f?l.replace(S.fullPath,me({scroll:f&&p&&p.scroll},ue)):l.push(S.fullPath,ue)),a.value=S,Ue(S,V,$,f),je()}let H;function te(){H||(H=l.listen((S,V,$)=>{if(!rt.listening)return;const K=x(S),ue=W(K);if(ue){F(me(ue,{replace:!0}),K).catch(jn);return}c=K;const ve=a.value;rn&&ld(Xo(ve.fullPath,$.delta),Vi()),P(K,ve).catch(f=>gt(f,12)?f:gt(f,2)?(F(f.to,K).then(p=>{gt(p,20)&&!$.delta&&$.type===zn.pop&&l.go(-1,!1)}).catch(jn),Promise.reject()):($.delta&&l.go(-$.delta,!1),U(f,K,ve))).then(f=>{f=f||C(K,ve,!1),f&&($.delta&&!gt(f,8)?l.go(-$.delta,!1):$.type===zn.pop&>(f,20)&&l.go(-1,!1)),q(K,ve,f)}).catch(jn)}))}let le=Sn(),T=Sn(),Q;function U(S,V,$){je(S);const K=T.list();return K.length?K.forEach(ue=>ue(S,V,$)):console.error(S),Promise.reject(S)}function Te(){return Q&&a.value!==mt?Promise.resolve():new Promise((S,V)=>{le.add([S,V])})}function je(S){return Q||(Q=!S,te(),le.list().forEach(([V,$])=>S?$(S):V()),le.reset()),S}function Ue(S,V,$,K){const{scrollBehavior:ue}=e;if(!rn||!ue)return Promise.resolve();const ve=!$&&od(Xo(S.fullPath,0))||(K||!$)&&history.state&&history.state.scroll||null;return kn().then(()=>ue(S,V,ve)).then(f=>f&&id(f)).catch(f=>U(f,S,V))}const Be=S=>l.go(S);let kt;const _t=new Set,rt={currentRoute:a,listening:!0,addRoute:g,removeRoute:m,hasRoute:k,getRoutes:y,resolve:x,options:e,push:_,replace:D,go:Be,back:()=>Be(-1),forward:()=>Be(1),beforeEach:o.add,beforeResolve:s.add,afterEach:r.add,onError:T.add,isReady:Te,install(S){const V=this;S.component("RouterLink",Nd),S.component("RouterView",Gd),S.config.globalProperties.$router=V,Object.defineProperty(S.config.globalProperties,"$route",{enumerable:!0,get:()=>Y(a)}),rn&&!kt&&a.value===mt&&(kt=!0,_(l.location).catch(ue=>{}));const $={};for(const ue in mt)Object.defineProperty($,ue,{get:()=>a.value[ue],enumerable:!0});S.provide(Ui,V),S.provide(Jl,zs($)),S.provide(Pl,a);const K=S.unmount;_t.add(S),S.unmount=function(){_t.delete(S),_t.size<1&&(c=mt,H&&H(),H=null,a.value=mt,kt=!1,Q=!1),K()}}};function We(S){return S.reduce((V,$)=>V.then(()=>M($)),Promise.resolve())}return rt}function Kd(e,t){const n=[],i=[],l=[],o=Math.max(t.matched.length,e.matched.length);for(let s=0;svn(c,r))?i.push(r):n.push(r));const a=e.matched[s];a&&(t.matched.find(c=>vn(c,a))||l.push(a))}return[n,i,l]}function nn(){return ze(Ui)}function ln(){return ze(Jl)}var Yl=Symbol(""),pt=()=>{const e=ze(Yl);if(!e)throw new Error("useClientData() is called without provider.");return e},Qd=()=>pt().pageComponent,pn=()=>pt().pageData,ht=()=>pt().pageFrontmatter,Jd=()=>pt().pageHead,Yd=()=>pt().pageLang,Xd=()=>pt().pageLayout,_n=()=>pt().routeLocale,Zd=()=>pt().routes,Hr=()=>pt().siteData,Xl=()=>pt().siteLocaleData,eh=Symbol(""),Fr=yn(Vu),Vn=yn(Uu),Mr=e=>{const t=$u(e);if(Vn.value[t])return t;const n=encodeURI(t);return Vn.value[n]?n:Fr.value[t]||t},Zl=e=>{const t=Mr(e),n=Vn.value[t]??{...Vn.value["/404.html"],notFound:!0};return{path:t,notFound:!1,...n}},eo=ge({name:"ClientOnly",setup(e,t){const n=re(!1);return Ve(()=>{n.value=!0}),()=>{var i,l;return n.value?(l=(i=t.slots).default)==null?void 0:l.call(i):null}}}),th=ge({name:"Content",props:{path:{type:String,required:!1,default:""}},setup(e){const t=Qd(),n=R(()=>{if(!e.path)return t.value;const i=Zl(e.path);return fc(()=>i.loader().then(({comp:l})=>l))});return()=>ce(n.value)}}),Gi=e=>ti(e)?e:`/${Er(e)}`,nh=e=>{if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget){const t=e.currentTarget.getAttribute("target");if(t!=null&&t.match(/\b_blank\b/i))return}return e.preventDefault(),!0}},ni=({active:e=!1,activeClass:t="route-link-active",to:n,...i},{slots:l})=>{var r;const o=nn(),s=Gi(Mr(n));return ce("a",{...i,class:["route-link",{[t]:e}],href:s,onClick:(a={})=>{nh(a)?o.push(n).catch():Promise.resolve()}},(r=l.default)==null?void 0:r.call(l))};ni.displayName="RouteLink";ni.props={active:Boolean,activeClass:String,to:String};var ih="Layout",lh="en-US",zt=Qn({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageHead:(e,t,n)=>{const i=dt(t.description)?t.description:n.description,l=[...Array.isArray(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:i}]];return Bu(l)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||lh,resolvePageLayout:(e,t)=>{const n=dt(e.frontmatter.layout)?e.frontmatter.layout:ih;return t[n]},resolveRouteLocale:(e,t)=>xr(e,t),resolveSiteLocaleData:(e,t)=>{var n;return{...e,...e.locales[t],head:[...((n=e.locales[t])==null?void 0:n.head)??[],...e.head??[]]}}}),yt=(e={})=>e;function oh(e,t){let n,i,l;const o=re(!0),s=()=>{o.value=!0,l()};Me(e,s,{flush:"sync"});const r=typeof t=="function"?t:t.get,a=typeof t=="function"?void 0:t.set,c=Va((u,d)=>(i=u,l=d,{get(){return o.value&&(n=r(),o.value=!1),i(),n},set(h){a==null||a(h)}}));return Object.isExtensible(c)&&(c.trigger=s),c}function qi(e){return Ts()?(wa(e),!0):!1}function ft(e){return typeof e=="function"?e():Y(e)}const to=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const sh=Object.prototype.toString,rh=e=>sh.call(e)==="[object Object]",Al=()=>{};function Br(e,t){function n(...i){return new Promise((l,o)=>{Promise.resolve(e(()=>t.apply(this,i),{fn:t,thisArg:this,args:i})).then(l).catch(o)})}return n}const Dr=e=>e();function ah(e,t={}){let n,i,l=Al;const o=r=>{clearTimeout(r),l(),l=Al};return r=>{const a=ft(e),c=ft(t.maxWait);return n&&o(n),a<=0||c!==void 0&&c<=0?(i&&(o(i),i=null),Promise.resolve(r())):new Promise((u,d)=>{l=t.rejectOnCancel?d:u,c&&!i&&(i=setTimeout(()=>{n&&o(n),i=null,u(r())},c)),n=setTimeout(()=>{i&&o(i),i=null,u(r())},a)})}}function ch(e=Dr){const t=re(!0);function n(){t.value=!1}function i(){t.value=!0}const l=(...o)=>{t.value&&e(...o)};return{isActive:Oi(t),pause:n,resume:i,eventFilter:l}}function uh(e){let t;function n(){return t||(t=e()),t}return n.reset=async()=>{const i=t;t=void 0,i&&await i},n}function dh(e){return e||Ni()}function hh(e,t=200,n={}){return Br(ah(t,n),e)}function fh(e,t,n={}){const{eventFilter:i=Dr,...l}=n;return Me(e,Br(i,t),l)}function ph(e,t,n={}){const{eventFilter:i,...l}=n,{eventFilter:o,pause:s,resume:r,isActive:a}=ch(i);return{stop:fh(e,t,{...l,eventFilter:o}),pause:s,resume:r,isActive:a}}function no(e,t=!0,n){dh()?Ve(e,n):t?e():kn(e)}function gh(e,t,n={}){const{immediate:i=!0}=n,l=re(!1);let o=null;function s(){o&&(clearTimeout(o),o=null)}function r(){l.value=!1,s()}function a(...c){s(),l.value=!0,o=setTimeout(()=>{l.value=!1,o=null,e(...c)},ft(t))}return i&&(l.value=!0,to&&a()),qi(r),{isPending:Oi(l),start:a,stop:r}}function mh(e=!1,t={}){const{truthyValue:n=!0,falsyValue:i=!1}=t,l=$e(e),o=re(e);function s(r){if(arguments.length)return o.value=r,o.value;{const a=ft(n);return o.value=o.value===a?ft(i):a,o.value}}return l?s:[o,s]}function Kt(e){var t;const n=ft(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Mt=to?window:void 0,$r=to?window.navigator:void 0;function Bt(...e){let t,n,i,l;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,i,l]=e,t=Mt):[t,n,i,l]=e,!t)return Al;Array.isArray(n)||(n=[n]),Array.isArray(i)||(i=[i]);const o=[],s=()=>{o.forEach(u=>u()),o.length=0},r=(u,d,h,g)=>(u.addEventListener(d,h,g),()=>u.removeEventListener(d,h,g)),a=Me(()=>[Kt(t),ft(l)],([u,d])=>{if(s(),!u)return;const h=rh(d)?{...d}:d;o.push(...n.flatMap(g=>i.map(m=>r(u,g,m,h))))},{immediate:!0,flush:"post"}),c=()=>{a(),s()};return qi(c),c}function vh(){const e=re(!1);return Ni()&&Ve(()=>{e.value=!0}),e}function Ki(e){const t=vh();return R(()=>(t.value,!!e()))}function Nr(e,t={}){const{window:n=Mt}=t,i=Ki(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let l;const o=re(!1),s=c=>{o.value=c.matches},r=()=>{l&&("removeEventListener"in l?l.removeEventListener("change",s):l.removeListener(s))},a=ac(()=>{i.value&&(r(),l=n.matchMedia(ft(e)),"addEventListener"in l?l.addEventListener("change",s):l.addListener(s),o.value=l.matches)});return qi(()=>{a(),r(),l=void 0}),o}function hs(e,t={}){const{controls:n=!1,navigator:i=$r}=t,l=Ki(()=>i&&"permissions"in i);let o;const s=typeof e=="string"?{name:e}:e,r=re(),a=()=>{o&&(r.value=o.state)},c=uh(async()=>{if(l.value){if(!o)try{o=await i.permissions.query(s),Bt(o,"change",a),a()}catch{r.value="prompt"}return o}});return c(),n?{state:r,isSupported:l,query:c}:r}function bh(e={}){const{navigator:t=$r,read:n=!1,source:i,copiedDuring:l=1500,legacy:o=!1}=e,s=Ki(()=>t&&"clipboard"in t),r=hs("clipboard-read"),a=hs("clipboard-write"),c=R(()=>s.value||o),u=re(""),d=re(!1),h=gh(()=>d.value=!1,l);function g(){s.value&&r.value!=="denied"?t.clipboard.readText().then(x=>{u.value=x}):u.value=k()}c.value&&n&&Bt(["copy","cut"],g);async function m(x=ft(i)){c.value&&x!=null&&(s.value&&a.value!=="denied"?await t.clipboard.writeText(x):y(x),u.value=x,d.value=!0,h.start())}function y(x){const I=document.createElement("textarea");I.value=x??"",I.style.position="absolute",I.style.opacity="0",document.body.appendChild(I),I.select(),document.execCommand("copy"),I.remove()}function k(){var x,I,v;return(v=(I=(x=document==null?void 0:document.getSelection)==null?void 0:x.call(document))==null?void 0:I.toString())!=null?v:""}return{isSupported:c,text:u,copied:d,copy:m}}const hi=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},fi="__vueuse_ssr_handlers__",wh=yh();function yh(){return fi in hi||(hi[fi]=hi[fi]||{}),hi[fi]}function kh(e,t){return wh[e]||t}function _h(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Ch={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},fs="vueuse-storage";function zr(e,t,n,i={}){var l;const{flush:o="pre",deep:s=!0,listenToStorageChanges:r=!0,writeDefaults:a=!0,mergeDefaults:c=!1,shallow:u,window:d=Mt,eventFilter:h,onError:g=M=>{console.error(M)},initOnMounted:m}=i,y=(u?yn:re)(typeof t=="function"?t():t);if(!n)try{n=kh("getDefaultStorage",()=>{var M;return(M=Mt)==null?void 0:M.localStorage})()}catch(M){g(M)}if(!n)return y;const k=ft(t),x=_h(k),I=(l=i.serializer)!=null?l:Ch[x],{pause:v,resume:_}=ph(y,()=>D(y.value),{flush:o,deep:s,eventFilter:h});return d&&r&&no(()=>{Bt(d,"storage",b),Bt(d,fs,F),m&&b()}),m||b(),y;function D(M){try{if(M==null)n.removeItem(e);else{const P=I.write(M),q=n.getItem(e);q!==P&&(n.setItem(e,P),d&&d.dispatchEvent(new CustomEvent(fs,{detail:{key:e,oldValue:q,newValue:P,storageArea:n}})))}}catch(P){g(P)}}function W(M){const P=M?M.newValue:n.getItem(e);if(P==null)return a&&k!=null&&n.setItem(e,I.write(k)),k;if(!M&&c){const q=I.read(P);return typeof c=="function"?c(q,k):x==="object"&&!Array.isArray(q)?{...k,...q}:q}else return typeof P!="string"?P:I.read(P)}function F(M){b(M.detail)}function b(M){if(!(M&&M.storageArea!==n)){if(M&&M.key==null){y.value=k;return}if(!(M&&M.key!==e)){v();try{(M==null?void 0:M.newValue)!==I.write(y.value)&&(y.value=W(M))}catch(P){g(P)}finally{M?kn(_):_()}}}}}function Eh(e){return Nr("(prefers-color-scheme: dark)",e)}function xh(e,t,n={}){const{window:i=Mt,...l}=n;let o;const s=Ki(()=>i&&"ResizeObserver"in i),r=()=>{o&&(o.disconnect(),o=void 0)},a=R(()=>Array.isArray(e)?e.map(d=>Kt(d)):[Kt(e)]),c=Me(a,d=>{if(r(),s.value&&i){o=new ResizeObserver(t);for(const h of d)h&&o.observe(h,l)}},{immediate:!0,flush:"post",deep:!0}),u=()=>{r(),c()};return qi(u),{isSupported:s,stop:u}}function Sh(e,t={width:0,height:0},n={}){const{window:i=Mt,box:l="content-box"}=n,o=R(()=>{var d,h;return(h=(d=Kt(e))==null?void 0:d.namespaceURI)==null?void 0:h.includes("svg")}),s=re(t.width),r=re(t.height),{stop:a}=xh(e,([d])=>{const h=l==="border-box"?d.borderBoxSize:l==="content-box"?d.contentBoxSize:d.devicePixelContentBoxSize;if(i&&o.value){const g=Kt(e);if(g){const m=i.getComputedStyle(g);s.value=Number.parseFloat(m.width),r.value=Number.parseFloat(m.height)}}else if(h){const g=Array.isArray(h)?h:[h];s.value=g.reduce((m,{inlineSize:y})=>m+y,0),r.value=g.reduce((m,{blockSize:y})=>m+y,0)}else s.value=d.contentRect.width,r.value=d.contentRect.height},n);no(()=>{const d=Kt(e);d&&(s.value="offsetWidth"in d?d.offsetWidth:t.width,r.value="offsetHeight"in d?d.offsetHeight:t.height)});const c=Me(()=>Kt(e),d=>{s.value=d?t.width:0,r.value=d?t.height:0});function u(){a(),c()}return{width:s,height:r,stop:u}}function Lh(e={}){const{window:t=Mt,behavior:n="auto"}=e;if(!t)return{x:re(0),y:re(0)};const i=re(t.scrollX),l=re(t.scrollY),o=R({get(){return i.value},set(r){scrollTo({left:r,behavior:n})}}),s=R({get(){return l.value},set(r){scrollTo({top:r,behavior:n})}});return Bt(t,"scroll",()=>{i.value=t.scrollX,l.value=t.scrollY},{capture:!1,passive:!0}),{x:o,y:s}}function Ih(e={}){const{window:t=Mt,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:i=Number.POSITIVE_INFINITY,listenOrientation:l=!0,includeScrollbar:o=!0}=e,s=re(n),r=re(i),a=()=>{t&&(o?(s.value=t.innerWidth,r.value=t.innerHeight):(s.value=t.document.documentElement.clientWidth,r.value=t.document.documentElement.clientHeight))};if(a(),no(a),Bt("resize",a,{passive:!0}),l){const c=Nr("(orientation: portrait)");Me(c,()=>a())}return{width:s,height:r}}const ps=async(e,t)=>{const{path:n,query:i}=e.currentRoute.value,{scrollBehavior:l}=e.options;e.options.scrollBehavior=void 0,await e.replace({path:n,query:i,hash:t}),e.options.scrollBehavior=l},Ph=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:i=5})=>{const l=nn();Bt("scroll",hh(()=>{var m,y;const s=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(s-0)d.some(x=>x.hash===k.hash));for(let k=0;k=(((m=x.parentElement)==null?void 0:m.offsetTop)??0)-i,_=!I||s<(((y=I.parentElement)==null?void 0:y.offsetTop)??0)-i;if(!(v&&_))continue;const W=decodeURIComponent(l.currentRoute.value.hash),F=decodeURIComponent(x.hash);if(W===F)return;if(u){for(let b=k+1;b{const t=_n();return R(()=>e[t.value]??{})},jh=()=>{const e=Zd();return R(()=>Object.keys(e.value))},ul=(e,t)=>{var i;const n=(i=(t==null?void 0:t._instance)||Ni())==null?void 0:i.appContext.components;return n?e in n||nt(e)in n||qn(nt(e))in n:!1};var Hh={"/":{backToTop:"Back to top"}};const Fh=ge({name:"BackToTop",setup(e){const t=ht(),n=Vr(Hh),i=yn(),{height:l}=Sh(i),{height:o}=Ih(),{y:s}=Lh(),r=R(()=>t.value.backToTop!==!1&&s.value>100),a=R(()=>s.value/(l.value-o.value)*100);return Ve(()=>{i.value=document.body}),()=>ce(ei,{name:"back-to-top"},()=>r.value?ce("button",{type:"button",class:"vp-back-to-top-button","aria-label":n.value.backToTop,onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},[ce("span",{class:"vp-scroll-progress",role:"progressbar","aria-labelledby":"loadinglabel","aria-valuenow":a.value},ce("svg",ce("circle",{cx:"50%",cy:"50%",style:{"stroke-dasharray":`calc(${Math.PI*a.value}% - ${4*Math.PI}px) calc(${Math.PI*100}% - ${4*Math.PI}px)`}}))),ce("div",{class:"back-to-top-icon"})]):null)}}),Mh=yt({rootComponents:[Fh]}),Bh=/\b(?:Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini)/i,Dh=()=>typeof window<"u"&&window.navigator&&"userAgent"in window.navigator&&Bh.test(navigator.userAgent),dl=new Map,$h=({delay:e=500,duration:t=2e3,locales:n,selector:i,showInMobile:l})=>{const{copy:o}=bh({legacy:!0}),s=Vr(n),r=pn(),a=d=>{if(!d.hasAttribute("copy-code-registered")){const h=document.createElement("button");h.type="button",h.classList.add("vp-copy-code-button"),h.innerHTML='
      ',h.setAttribute("aria-label",s.value.copy),h.setAttribute("data-copied",s.value.copied),d.parentElement&&d.parentElement.insertBefore(h,d),d.setAttribute("copy-code-registered","")}},c=()=>{kn().then(()=>setTimeout(()=>{i.forEach(d=>{document.querySelectorAll(d).forEach(a)})},e))},u=(d,h,g)=>{let{innerText:m=""}=h;/language-(shellscript|shell|bash|sh|zsh)/.test(d.classList.toString())&&(m=m.replace(/^ *(\$|>) /gm,"")),o(m).then(()=>{g.classList.add("copied"),clearTimeout(dl.get(g));const y=setTimeout(()=>{g.classList.remove("copied"),g.blur(),dl.delete(g)},t);dl.set(g,y)})};Ve(()=>{const d=!Dh()||l;d&&c(),Bt("click",h=>{const g=h.target;if(g.matches('div[class*="language-"] > button.copy')){const m=g.parentElement,y=g.nextElementSibling;y&&u(m,y,g)}else if(g.matches('div[class*="language-"] div.vp-copy-icon')){const m=g.parentElement,y=m.parentElement,k=m.nextElementSibling;k&&u(y,k,m)}}),Me(()=>r.value.path,()=>{d&&c()})})};var Nh={"/":{copy:"Copy code",copied:"Copied"}},zh=['.theme-default-content div[class*="language-"] pre'];const Vh=500,Uh=2e3,Gh=Nh,qh=zh,Kh=!1,Qh=yt({setup:()=>{$h({selector:qh,locales:Gh,duration:Uh,delay:Vh,showInMobile:Kh})}}),Jh=ce("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[ce("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),ce("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),Yh=ge({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=_n(),n=R(()=>e.locales[t.value]??{openInNewWindow:"open in new window"});return()=>ce("span",[Jh,ce("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}});var Xh={"/":{openInNewWindow:"open in new window"}};const Zh=Xh,ef=yt({enhance({app:e}){e.component("ExternalLinkIcon",ce(Yh,{locales:Zh}))}});/*! medium-zoom 1.1.0 | MIT License | https://github.com/francoischalifour/medium-zoom */var Vt=Object.assign||function(e){for(var t=1;t{},st=Array.isArray,qu=/\/$/,Ku=e=>e.replace(qu,"");function al(e,t,n="/"){let i,l={},o="",s="";const r=t.indexOf("#");let a=t.indexOf("?");return r=0&&(a=-1),a>-1&&(i=t.slice(0,a),o=t.slice(a+1,r>-1?r:t.length),l=e(o)),r>-1&&(i=i||t.slice(0,r),s=t.slice(r,t.length)),i=Xu(i??t,n),{fullPath:i+(o&&"?")+o+s,path:i,query:l,hash:s}}function Qu(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Jo(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Ju(e,t,n){const i=t.matched.length-1,l=n.matched.length-1;return i>-1&&i===l&&vn(t.matched[i],n.matched[l])&&Sr(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function vn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Sr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Yu(e[n],t[n]))return!1;return!0}function Yu(e,t){return st(e)?Yo(e,t):st(t)?Yo(t,e):e===t}function Yo(e,t){return st(t)?e.length===t.length&&e.every((n,i)=>n===t[i]):e.length===1&&e[0]===t}function Xu(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),i=e.split("/"),l=i[i.length-1];(l===".."||l===".")&&i.push("");let o=n.length-1,s,r;for(s=0;s1&&o--;else break;return n.slice(0,o).join("/")+"/"+i.slice(s-(s===i.length?1:0)).join("/")}var zn;(function(e){e.pop="pop",e.push="push"})(zn||(zn={}));var Hn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Hn||(Hn={}));function Zu(e){if(!e)if(rn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Ku(e)}const ed=/^[^#]+#/;function td(e,t){return e.replace(ed,"#")+t}function nd(e,t){const n=document.documentElement.getBoundingClientRect(),i=e.getBoundingClientRect();return{behavior:t.behavior,left:i.left-n.left-(t.left||0),top:i.top-n.top-(t.top||0)}}const Vi=()=>({left:window.pageXOffset,top:window.pageYOffset});function id(e){let t;if("el"in e){const n=e.el,i=typeof n=="string"&&n.startsWith("#"),l=typeof n=="string"?i?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!l)return;t=nd(l,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Xo(e,t){return(history.state?history.state.position-t:-1)+e}const Ll=new Map;function ld(e,t){Ll.set(e,t)}function od(e){const t=Ll.get(e);return Ll.delete(e),t}let sd=()=>location.protocol+"//"+location.host;function Lr(e,t){const{pathname:n,search:i,hash:l}=t,o=e.indexOf("#");if(o>-1){let r=l.includes(e.slice(o))?e.slice(o).length:1,a=l.slice(r);return a[0]!=="/"&&(a="/"+a),Jo(a,"")}return Jo(n,e)+i+l}function rd(e,t,n,i){let l=[],o=[],s=null;const r=({state:h})=>{const g=Lr(e,location),m=n.value,y=t.value;let k=0;if(h){if(n.value=g,t.value=h,s&&s===m){s=null;return}k=y?h.position-y.position:0}else i(g);l.forEach(x=>{x(n.value,m,{delta:k,type:zn.pop,direction:k?k>0?Hn.forward:Hn.back:Hn.unknown})})};function a(){s=n.value}function c(h){l.push(h);const g=()=>{const m=l.indexOf(h);m>-1&&l.splice(m,1)};return o.push(g),g}function u(){const{history:h}=window;h.state&&h.replaceState(me({},h.state,{scroll:Vi()}),"")}function d(){for(const h of o)h();o=[],window.removeEventListener("popstate",r),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",r),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:a,listen:c,destroy:d}}function Zo(e,t,n,i=!1,l=!1){return{back:e,current:t,forward:n,replaced:i,position:window.history.length,scroll:l?Vi():null}}function ad(e){const{history:t,location:n}=window,i={value:Lr(e,n)},l={value:t.state};l.value||o(i.value,{back:null,current:i.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,c,u){const d=e.indexOf("#"),h=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+a:sd()+e+a;try{t[u?"replaceState":"pushState"](c,"",h),l.value=c}catch(g){console.error(g),n[u?"replace":"assign"](h)}}function s(a,c){const u=me({},t.state,Zo(l.value.back,a,l.value.forward,!0),c,{position:l.value.position});o(a,u,!0),i.value=a}function r(a,c){const u=me({},l.value,t.state,{forward:a,scroll:Vi()});o(u.current,u,!0);const d=me({},Zo(i.value,a,null),{position:u.position+1},c);o(a,d,!1),i.value=a}return{location:i,state:l,push:r,replace:s}}function cd(e){e=Zu(e);const t=ad(e),n=rd(e,t.state,t.location,t.replace);function i(o,s=!0){s||n.pauseListeners(),history.go(o)}const l=me({location:"",base:e,go:i,createHref:td.bind(null,e)},t,n);return Object.defineProperty(l,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(l,"state",{enumerable:!0,get:()=>t.state.value}),l}function ud(e){return typeof e=="string"||e&&typeof e=="object"}function Ir(e){return typeof e=="string"||typeof e=="symbol"}const mt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Pr=Symbol("");var es;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(es||(es={}));function bn(e,t){return me(new Error,{type:e,[Pr]:!0},t)}function gt(e,t){return e instanceof Error&&Pr in e&&(t==null||!!(e.type&t))}const ts="[^/]+?",dd={sensitive:!1,strict:!1,start:!0,end:!0},hd=/[.+*?^${}()[\]/\\]/g;function fd(e,t){const n=me({},dd,t),i=[];let l=n.start?"^":"";const o=[];for(const c of e){const u=c.length?[]:[90];n.strict&&!c.length&&(l+="/");for(let d=0;dt.length?t.length===1&&t[0]===80?1:-1:0}function gd(e,t){let n=0;const i=e.score,l=t.score;for(;n0&&t[t.length-1]<0}const md={type:0,value:""},vd=/[a-zA-Z0-9_]/;function bd(e){if(!e)return[[]];if(e==="/")return[[md]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${c}": ${g}`)}let n=0,i=n;const l=[];let o;function s(){o&&l.push(o),o=[]}let r=0,a,c="",u="";function d(){c&&(n===0?o.push({type:0,value:c}):n===1||n===2||n===3?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function h(){c+=a}for(;r{s(I)}:jn}function s(u){if(Ir(u)){const d=i.get(u);d&&(i.delete(u),n.splice(n.indexOf(d),1),d.children.forEach(s),d.alias.forEach(s))}else{const d=n.indexOf(u);d>-1&&(n.splice(d,1),u.record.name&&i.delete(u.record.name),u.children.forEach(s),u.alias.forEach(s))}}function r(){return n}function a(u){let d=0;for(;d=0&&(u.record.path!==n[d].record.path||!Ar(u,n[d]));)d++;n.splice(d,0,u),u.record.name&&!ls(u)&&i.set(u.record.name,u)}function c(u,d){let h,g={},m,y;if("name"in u&&u.name){if(h=i.get(u.name),!h)throw bn(1,{location:u});y=h.record.name,g=me(is(d.params,h.keys.filter(I=>!I.optional).map(I=>I.name)),u.params&&is(u.params,h.keys.map(I=>I.name))),m=h.stringify(g)}else if("path"in u)m=u.path,h=n.find(I=>I.re.test(m)),h&&(g=h.parse(m),y=h.record.name);else{if(h=d.name?i.get(d.name):n.find(I=>I.re.test(d.path)),!h)throw bn(1,{location:u,currentLocation:d});y=h.record.name,g=me({},d.params,u.params),m=h.stringify(g)}const k=[];let x=h;for(;x;)k.unshift(x.record),x=x.parent;return{name:y,path:m,params:g,matched:k,meta:Cd(k)}}return e.forEach(u=>o(u)),{addRoute:o,resolve:c,removeRoute:s,getRoutes:r,getRecordMatcher:l}}function is(e,t){const n={};for(const i of t)i in e&&(n[i]=e[i]);return n}function kd(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:_d(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function _d(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const i in e.components)t[i]=typeof n=="object"?n[i]:n;return t}function ls(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Cd(e){return e.reduce((t,n)=>me(t,n.meta),{})}function os(e,t){const n={};for(const i in e)n[i]=i in t?t[i]:e[i];return n}function Ar(e,t){return t.children.some(n=>n===e||Ar(e,n))}const Tr=/#/g,Ed=/&/g,xd=/\//g,Sd=/=/g,Ld=/\?/g,Wr=/\+/g,Id=/%5B/g,Pd=/%5D/g,Rr=/%5E/g,Ad=/%60/g,Or=/%7B/g,Td=/%7C/g,jr=/%7D/g,Wd=/%20/g;function Ql(e){return encodeURI(""+e).replace(Td,"|").replace(Id,"[").replace(Pd,"]")}function Rd(e){return Ql(e).replace(Or,"{").replace(jr,"}").replace(Rr,"^")}function Il(e){return Ql(e).replace(Wr,"%2B").replace(Wd,"+").replace(Tr,"%23").replace(Ed,"%26").replace(Ad,"`").replace(Or,"{").replace(jr,"}").replace(Rr,"^")}function Od(e){return Il(e).replace(Sd,"%3D")}function jd(e){return Ql(e).replace(Tr,"%23").replace(Ld,"%3F")}function Hd(e){return e==null?"":jd(e).replace(xd,"%2F")}function Ai(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Fd(e){const t={};if(e===""||e==="?")return t;const i=(e[0]==="?"?e.slice(1):e).split("&");for(let l=0;lo&&Il(o)):[i&&Il(i)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function Md(e){const t={};for(const n in e){const i=e[n];i!==void 0&&(t[n]=st(i)?i.map(l=>l==null?null:""+l):i==null?i:""+i)}return t}const Bd=Symbol(""),rs=Symbol(""),Ui=Symbol(""),Jl=Symbol(""),Pl=Symbol("");function Sn(){let e=[];function t(i){return e.push(i),()=>{const l=e.indexOf(i);l>-1&&e.splice(l,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Tt(e,t,n,i,l){const o=i&&(i.enterCallbacks[l]=i.enterCallbacks[l]||[]);return()=>new Promise((s,r)=>{const a=d=>{d===!1?r(bn(4,{from:n,to:t})):d instanceof Error?r(d):ud(d)?r(bn(2,{from:t,to:d})):(o&&i.enterCallbacks[l]===o&&typeof d=="function"&&o.push(d),s())},c=e.call(i&&i.instances[l],t,n,a);let u=Promise.resolve(c);e.length<3&&(u=u.then(a)),u.catch(d=>r(d))})}function cl(e,t,n,i){const l=[];for(const o of e)for(const s in o.components){let r=o.components[s];if(!(t!=="beforeRouteEnter"&&!o.instances[s]))if(Dd(r)){const c=(r.__vccOpts||r)[t];c&&l.push(Tt(c,n,i,o,s))}else{let a=r();l.push(()=>a.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${s}" at "${o.path}"`));const u=Gu(c)?c.default:c;o.components[s]=u;const h=(u.__vccOpts||u)[t];return h&&Tt(h,n,i,o,s)()}))}}return l}function Dd(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function as(e){const t=ze(Ui),n=ze(Jl),i=R(()=>t.resolve(Y(e.to))),l=R(()=>{const{matched:a}=i.value,{length:c}=a,u=a[c-1],d=n.matched;if(!u||!d.length)return-1;const h=d.findIndex(vn.bind(null,u));if(h>-1)return h;const g=cs(a[c-2]);return c>1&&cs(u)===g&&d[d.length-1].path!==g?d.findIndex(vn.bind(null,a[c-2])):h}),o=R(()=>l.value>-1&&Vd(n.params,i.value.params)),s=R(()=>l.value>-1&&l.value===n.matched.length-1&&Sr(n.params,i.value.params));function r(a={}){return zd(a)?t[Y(e.replace)?"replace":"push"](Y(e.to)).catch(jn):Promise.resolve()}return{route:i,href:R(()=>i.value.href),isActive:o,isExactActive:s,navigate:r}}const $d=ge({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:as,setup(e,{slots:t}){const n=Qn(as(e)),{options:i}=ze(Ui),l=R(()=>({[us(e.activeClass,i.linkActiveClass,"router-link-active")]:n.isActive,[us(e.exactActiveClass,i.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&t.default(n);return e.custom?o:ce("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:l.value},o)}}}),Nd=$d;function zd(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Vd(e,t){for(const n in t){const i=t[n],l=e[n];if(typeof i=="string"){if(i!==l)return!1}else if(!st(l)||l.length!==i.length||i.some((o,s)=>o!==l[s]))return!1}return!0}function cs(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const us=(e,t,n)=>e??t??n,Ud=ge({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const i=ze(Pl),l=R(()=>e.route||i.value),o=ze(rs,0),s=R(()=>{let c=Y(o);const{matched:u}=l.value;let d;for(;(d=u[c])&&!d.components;)c++;return c}),r=R(()=>l.value.matched[s.value]);Yt(rs,R(()=>s.value+1)),Yt(Bd,r),Yt(Pl,l);const a=re();return Me(()=>[a.value,r.value,e.name],([c,u,d],[h,g,m])=>{u&&(u.instances[d]=c,g&&g!==u&&c&&c===h&&(u.leaveGuards.size||(u.leaveGuards=g.leaveGuards),u.updateGuards.size||(u.updateGuards=g.updateGuards))),c&&u&&(!g||!vn(u,g)||!h)&&(u.enterCallbacks[d]||[]).forEach(y=>y(c))},{flush:"post"}),()=>{const c=l.value,u=e.name,d=r.value,h=d&&d.components[u];if(!h)return ds(n.default,{Component:h,route:c});const g=d.props[u],m=g?g===!0?c.params:typeof g=="function"?g(c):g:null,k=ce(h,me({},m,t,{onVnodeUnmounted:x=>{x.component.isUnmounted&&(d.instances[u]=null)},ref:a}));return ds(n.default,{Component:k,route:c})||k}}});function ds(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Gd=Ud;function qd(e){const t=yd(e.routes,e),n=e.parseQuery||Fd,i=e.stringifyQuery||ss,l=e.history,o=Sn(),s=Sn(),r=Sn(),a=yn(mt);let c=mt;rn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=rl.bind(null,S=>""+S),d=rl.bind(null,Hd),h=rl.bind(null,Ai);function g(S,V){let $,K;return Ir(S)?($=t.getRecordMatcher(S),K=V):K=S,t.addRoute(K,$)}function m(S){const V=t.getRecordMatcher(S);V&&t.removeRoute(V)}function y(){return t.getRoutes().map(S=>S.record)}function k(S){return!!t.getRecordMatcher(S)}function x(S,V){if(V=me({},V||a.value),typeof S=="string"){const p=al(n,S,V.path),w=t.resolve({path:p.path},V),L=l.createHref(p.fullPath);return me(p,w,{params:h(w.params),hash:Ai(p.hash),redirectedFrom:void 0,href:L})}let $;if("path"in S)$=me({},S,{path:al(n,S.path,V.path).path});else{const p=me({},S.params);for(const w in p)p[w]==null&&delete p[w];$=me({},S,{params:d(p)}),V.params=d(V.params)}const K=t.resolve($,V),ue=S.hash||"";K.params=u(h(K.params));const ve=Qu(i,me({},S,{hash:Rd(ue),path:K.path})),f=l.createHref(ve);return me({fullPath:ve,hash:ue,query:i===ss?Md(S.query):S.query||{}},K,{redirectedFrom:void 0,href:f})}function I(S){return typeof S=="string"?al(n,S,a.value.path):me({},S)}function v(S,V){if(c!==S)return bn(8,{from:V,to:S})}function _(S){return F(S)}function D(S){return _(me(I(S),{replace:!0}))}function W(S){const V=S.matched[S.matched.length-1];if(V&&V.redirect){const{redirect:$}=V;let K=typeof $=="function"?$(S):$;return typeof K=="string"&&(K=K.includes("?")||K.includes("#")?K=I(K):{path:K},K.params={}),me({query:S.query,hash:S.hash,params:"path"in K?{}:S.params},K)}}function F(S,V){const $=c=x(S),K=a.value,ue=S.state,ve=S.force,f=S.replace===!0,p=W($);if(p)return F(me(I(p),{state:typeof p=="object"?me({},ue,p.state):ue,force:ve,replace:f}),V||$);const w=$;w.redirectedFrom=V;let L;return!ve&&Ju(i,K,$)&&(L=bn(16,{to:w,from:K}),Ue(K,K,!0,!1)),(L?Promise.resolve(L):P(w,K)).catch(E=>gt(E)?gt(E,2)?E:je(E):U(E,w,K)).then(E=>{if(E){if(gt(E,2))return F(me({replace:f},I(E.to),{state:typeof E.to=="object"?me({},ue,E.to.state):ue,force:ve}),V||w)}else E=C(w,K,!0,f,ue);return q(w,K,E),E})}function b(S,V){const $=v(S,V);return $?Promise.reject($):Promise.resolve()}function M(S){const V=_t.values().next().value;return V&&typeof V.runWithContext=="function"?V.runWithContext(S):S()}function P(S,V){let $;const[K,ue,ve]=Kd(S,V);$=cl(K.reverse(),"beforeRouteLeave",S,V);for(const p of K)p.leaveGuards.forEach(w=>{$.push(Tt(w,S,V))});const f=b.bind(null,S,V);return $.push(f),We($).then(()=>{$=[];for(const p of o.list())$.push(Tt(p,S,V));return $.push(f),We($)}).then(()=>{$=cl(ue,"beforeRouteUpdate",S,V);for(const p of ue)p.updateGuards.forEach(w=>{$.push(Tt(w,S,V))});return $.push(f),We($)}).then(()=>{$=[];for(const p of ve)if(p.beforeEnter)if(st(p.beforeEnter))for(const w of p.beforeEnter)$.push(Tt(w,S,V));else $.push(Tt(p.beforeEnter,S,V));return $.push(f),We($)}).then(()=>(S.matched.forEach(p=>p.enterCallbacks={}),$=cl(ve,"beforeRouteEnter",S,V),$.push(f),We($))).then(()=>{$=[];for(const p of s.list())$.push(Tt(p,S,V));return $.push(f),We($)}).catch(p=>gt(p,8)?p:Promise.reject(p))}function q(S,V,$){r.list().forEach(K=>M(()=>K(S,V,$)))}function C(S,V,$,K,ue){const ve=v(S,V);if(ve)return ve;const f=V===mt,p=rn?history.state:{};$&&(K||f?l.replace(S.fullPath,me({scroll:f&&p&&p.scroll},ue)):l.push(S.fullPath,ue)),a.value=S,Ue(S,V,$,f),je()}let H;function te(){H||(H=l.listen((S,V,$)=>{if(!rt.listening)return;const K=x(S),ue=W(K);if(ue){F(me(ue,{replace:!0}),K).catch(jn);return}c=K;const ve=a.value;rn&&ld(Xo(ve.fullPath,$.delta),Vi()),P(K,ve).catch(f=>gt(f,12)?f:gt(f,2)?(F(f.to,K).then(p=>{gt(p,20)&&!$.delta&&$.type===zn.pop&&l.go(-1,!1)}).catch(jn),Promise.reject()):($.delta&&l.go(-$.delta,!1),U(f,K,ve))).then(f=>{f=f||C(K,ve,!1),f&&($.delta&&!gt(f,8)?l.go(-$.delta,!1):$.type===zn.pop&>(f,20)&&l.go(-1,!1)),q(K,ve,f)}).catch(jn)}))}let le=Sn(),T=Sn(),Q;function U(S,V,$){je(S);const K=T.list();return K.length?K.forEach(ue=>ue(S,V,$)):console.error(S),Promise.reject(S)}function Te(){return Q&&a.value!==mt?Promise.resolve():new Promise((S,V)=>{le.add([S,V])})}function je(S){return Q||(Q=!S,te(),le.list().forEach(([V,$])=>S?$(S):V()),le.reset()),S}function Ue(S,V,$,K){const{scrollBehavior:ue}=e;if(!rn||!ue)return Promise.resolve();const ve=!$&&od(Xo(S.fullPath,0))||(K||!$)&&history.state&&history.state.scroll||null;return kn().then(()=>ue(S,V,ve)).then(f=>f&&id(f)).catch(f=>U(f,S,V))}const Be=S=>l.go(S);let kt;const _t=new Set,rt={currentRoute:a,listening:!0,addRoute:g,removeRoute:m,hasRoute:k,getRoutes:y,resolve:x,options:e,push:_,replace:D,go:Be,back:()=>Be(-1),forward:()=>Be(1),beforeEach:o.add,beforeResolve:s.add,afterEach:r.add,onError:T.add,isReady:Te,install(S){const V=this;S.component("RouterLink",Nd),S.component("RouterView",Gd),S.config.globalProperties.$router=V,Object.defineProperty(S.config.globalProperties,"$route",{enumerable:!0,get:()=>Y(a)}),rn&&!kt&&a.value===mt&&(kt=!0,_(l.location).catch(ue=>{}));const $={};for(const ue in mt)Object.defineProperty($,ue,{get:()=>a.value[ue],enumerable:!0});S.provide(Ui,V),S.provide(Jl,zs($)),S.provide(Pl,a);const K=S.unmount;_t.add(S),S.unmount=function(){_t.delete(S),_t.size<1&&(c=mt,H&&H(),H=null,a.value=mt,kt=!1,Q=!1),K()}}};function We(S){return S.reduce((V,$)=>V.then(()=>M($)),Promise.resolve())}return rt}function Kd(e,t){const n=[],i=[],l=[],o=Math.max(t.matched.length,e.matched.length);for(let s=0;svn(c,r))?i.push(r):n.push(r));const a=e.matched[s];a&&(t.matched.find(c=>vn(c,a))||l.push(a))}return[n,i,l]}function nn(){return ze(Ui)}function ln(){return ze(Jl)}var Yl=Symbol(""),pt=()=>{const e=ze(Yl);if(!e)throw new Error("useClientData() is called without provider.");return e},Qd=()=>pt().pageComponent,pn=()=>pt().pageData,ht=()=>pt().pageFrontmatter,Jd=()=>pt().pageHead,Yd=()=>pt().pageLang,Xd=()=>pt().pageLayout,_n=()=>pt().routeLocale,Zd=()=>pt().routes,Hr=()=>pt().siteData,Xl=()=>pt().siteLocaleData,eh=Symbol(""),Fr=yn(Vu),Vn=yn(Uu),Mr=e=>{const t=$u(e);if(Vn.value[t])return t;const n=encodeURI(t);return Vn.value[n]?n:Fr.value[t]||t},Zl=e=>{const t=Mr(e),n=Vn.value[t]??{...Vn.value["/404.html"],notFound:!0};return{path:t,notFound:!1,...n}},eo=ge({name:"ClientOnly",setup(e,t){const n=re(!1);return Ve(()=>{n.value=!0}),()=>{var i,l;return n.value?(l=(i=t.slots).default)==null?void 0:l.call(i):null}}}),th=ge({name:"Content",props:{path:{type:String,required:!1,default:""}},setup(e){const t=Qd(),n=R(()=>{if(!e.path)return t.value;const i=Zl(e.path);return fc(()=>i.loader().then(({comp:l})=>l))});return()=>ce(n.value)}}),Gi=e=>ti(e)?e:`/${Er(e)}`,nh=e=>{if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget){const t=e.currentTarget.getAttribute("target");if(t!=null&&t.match(/\b_blank\b/i))return}return e.preventDefault(),!0}},ni=({active:e=!1,activeClass:t="route-link-active",to:n,...i},{slots:l})=>{var r;const o=nn(),s=Gi(Mr(n));return ce("a",{...i,class:["route-link",{[t]:e}],href:s,onClick:(a={})=>{nh(a)?o.push(n).catch():Promise.resolve()}},(r=l.default)==null?void 0:r.call(l))};ni.displayName="RouteLink";ni.props={active:Boolean,activeClass:String,to:String};var ih="Layout",lh="en-US",zt=Qn({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageHead:(e,t,n)=>{const i=dt(t.description)?t.description:n.description,l=[...Array.isArray(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:i}]];return Bu(l)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||lh,resolvePageLayout:(e,t)=>{const n=dt(e.frontmatter.layout)?e.frontmatter.layout:ih;return t[n]},resolveRouteLocale:(e,t)=>xr(e,t),resolveSiteLocaleData:(e,t)=>{var n;return{...e,...e.locales[t],head:[...((n=e.locales[t])==null?void 0:n.head)??[],...e.head??[]]}}}),yt=(e={})=>e;function oh(e,t){let n,i,l;const o=re(!0),s=()=>{o.value=!0,l()};Me(e,s,{flush:"sync"});const r=typeof t=="function"?t:t.get,a=typeof t=="function"?void 0:t.set,c=Va((u,d)=>(i=u,l=d,{get(){return o.value&&(n=r(),o.value=!1),i(),n},set(h){a==null||a(h)}}));return Object.isExtensible(c)&&(c.trigger=s),c}function qi(e){return Ts()?(wa(e),!0):!1}function ft(e){return typeof e=="function"?e():Y(e)}const to=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const sh=Object.prototype.toString,rh=e=>sh.call(e)==="[object Object]",Al=()=>{};function Br(e,t){function n(...i){return new Promise((l,o)=>{Promise.resolve(e(()=>t.apply(this,i),{fn:t,thisArg:this,args:i})).then(l).catch(o)})}return n}const Dr=e=>e();function ah(e,t={}){let n,i,l=Al;const o=r=>{clearTimeout(r),l(),l=Al};return r=>{const a=ft(e),c=ft(t.maxWait);return n&&o(n),a<=0||c!==void 0&&c<=0?(i&&(o(i),i=null),Promise.resolve(r())):new Promise((u,d)=>{l=t.rejectOnCancel?d:u,c&&!i&&(i=setTimeout(()=>{n&&o(n),i=null,u(r())},c)),n=setTimeout(()=>{i&&o(i),i=null,u(r())},a)})}}function ch(e=Dr){const t=re(!0);function n(){t.value=!1}function i(){t.value=!0}const l=(...o)=>{t.value&&e(...o)};return{isActive:Oi(t),pause:n,resume:i,eventFilter:l}}function uh(e){let t;function n(){return t||(t=e()),t}return n.reset=async()=>{const i=t;t=void 0,i&&await i},n}function dh(e){return Ni()}function hh(e,t=200,n={}){return Br(ah(t,n),e)}function fh(e,t,n={}){const{eventFilter:i=Dr,...l}=n;return Me(e,Br(i,t),l)}function ph(e,t,n={}){const{eventFilter:i,...l}=n,{eventFilter:o,pause:s,resume:r,isActive:a}=ch(i);return{stop:fh(e,t,{...l,eventFilter:o}),pause:s,resume:r,isActive:a}}function no(e,t=!0,n){dh()?Ve(e,n):t?e():kn(e)}function gh(e,t,n={}){const{immediate:i=!0}=n,l=re(!1);let o=null;function s(){o&&(clearTimeout(o),o=null)}function r(){l.value=!1,s()}function a(...c){s(),l.value=!0,o=setTimeout(()=>{l.value=!1,o=null,e(...c)},ft(t))}return i&&(l.value=!0,to&&a()),qi(r),{isPending:Oi(l),start:a,stop:r}}function mh(e=!1,t={}){const{truthyValue:n=!0,falsyValue:i=!1}=t,l=$e(e),o=re(e);function s(r){if(arguments.length)return o.value=r,o.value;{const a=ft(n);return o.value=o.value===a?ft(i):a,o.value}}return l?s:[o,s]}function Kt(e){var t;const n=ft(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Mt=to?window:void 0,$r=to?window.navigator:void 0;function Bt(...e){let t,n,i,l;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,i,l]=e,t=Mt):[t,n,i,l]=e,!t)return Al;Array.isArray(n)||(n=[n]),Array.isArray(i)||(i=[i]);const o=[],s=()=>{o.forEach(u=>u()),o.length=0},r=(u,d,h,g)=>(u.addEventListener(d,h,g),()=>u.removeEventListener(d,h,g)),a=Me(()=>[Kt(t),ft(l)],([u,d])=>{if(s(),!u)return;const h=rh(d)?{...d}:d;o.push(...n.flatMap(g=>i.map(m=>r(u,g,m,h))))},{immediate:!0,flush:"post"}),c=()=>{a(),s()};return qi(c),c}function vh(){const e=re(!1);return Ni()&&Ve(()=>{e.value=!0}),e}function Ki(e){const t=vh();return R(()=>(t.value,!!e()))}function Nr(e,t={}){const{window:n=Mt}=t,i=Ki(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let l;const o=re(!1),s=c=>{o.value=c.matches},r=()=>{l&&("removeEventListener"in l?l.removeEventListener("change",s):l.removeListener(s))},a=ac(()=>{i.value&&(r(),l=n.matchMedia(ft(e)),"addEventListener"in l?l.addEventListener("change",s):l.addListener(s),o.value=l.matches)});return qi(()=>{a(),r(),l=void 0}),o}function hs(e,t={}){const{controls:n=!1,navigator:i=$r}=t,l=Ki(()=>i&&"permissions"in i);let o;const s=typeof e=="string"?{name:e}:e,r=re(),a=()=>{o&&(r.value=o.state)},c=uh(async()=>{if(l.value){if(!o)try{o=await i.permissions.query(s),Bt(o,"change",a),a()}catch{r.value="prompt"}return o}});return c(),n?{state:r,isSupported:l,query:c}:r}function bh(e={}){const{navigator:t=$r,read:n=!1,source:i,copiedDuring:l=1500,legacy:o=!1}=e,s=Ki(()=>t&&"clipboard"in t),r=hs("clipboard-read"),a=hs("clipboard-write"),c=R(()=>s.value||o),u=re(""),d=re(!1),h=gh(()=>d.value=!1,l);function g(){s.value&&r.value!=="denied"?t.clipboard.readText().then(x=>{u.value=x}):u.value=k()}c.value&&n&&Bt(["copy","cut"],g);async function m(x=ft(i)){c.value&&x!=null&&(s.value&&a.value!=="denied"?await t.clipboard.writeText(x):y(x),u.value=x,d.value=!0,h.start())}function y(x){const I=document.createElement("textarea");I.value=x??"",I.style.position="absolute",I.style.opacity="0",document.body.appendChild(I),I.select(),document.execCommand("copy"),I.remove()}function k(){var x,I,v;return(v=(I=(x=document==null?void 0:document.getSelection)==null?void 0:x.call(document))==null?void 0:I.toString())!=null?v:""}return{isSupported:c,text:u,copied:d,copy:m}}const hi=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},fi="__vueuse_ssr_handlers__",wh=yh();function yh(){return fi in hi||(hi[fi]=hi[fi]||{}),hi[fi]}function kh(e,t){return wh[e]||t}function _h(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Ch={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},fs="vueuse-storage";function zr(e,t,n,i={}){var l;const{flush:o="pre",deep:s=!0,listenToStorageChanges:r=!0,writeDefaults:a=!0,mergeDefaults:c=!1,shallow:u,window:d=Mt,eventFilter:h,onError:g=M=>{console.error(M)},initOnMounted:m}=i,y=(u?yn:re)(typeof t=="function"?t():t);if(!n)try{n=kh("getDefaultStorage",()=>{var M;return(M=Mt)==null?void 0:M.localStorage})()}catch(M){g(M)}if(!n)return y;const k=ft(t),x=_h(k),I=(l=i.serializer)!=null?l:Ch[x],{pause:v,resume:_}=ph(y,()=>D(y.value),{flush:o,deep:s,eventFilter:h});return d&&r&&no(()=>{Bt(d,"storage",b),Bt(d,fs,F),m&&b()}),m||b(),y;function D(M){try{if(M==null)n.removeItem(e);else{const P=I.write(M),q=n.getItem(e);q!==P&&(n.setItem(e,P),d&&d.dispatchEvent(new CustomEvent(fs,{detail:{key:e,oldValue:q,newValue:P,storageArea:n}})))}}catch(P){g(P)}}function W(M){const P=M?M.newValue:n.getItem(e);if(P==null)return a&&k!=null&&n.setItem(e,I.write(k)),k;if(!M&&c){const q=I.read(P);return typeof c=="function"?c(q,k):x==="object"&&!Array.isArray(q)?{...k,...q}:q}else return typeof P!="string"?P:I.read(P)}function F(M){b(M.detail)}function b(M){if(!(M&&M.storageArea!==n)){if(M&&M.key==null){y.value=k;return}if(!(M&&M.key!==e)){v();try{(M==null?void 0:M.newValue)!==I.write(y.value)&&(y.value=W(M))}catch(P){g(P)}finally{M?kn(_):_()}}}}}function Eh(e){return Nr("(prefers-color-scheme: dark)",e)}function xh(e,t,n={}){const{window:i=Mt,...l}=n;let o;const s=Ki(()=>i&&"ResizeObserver"in i),r=()=>{o&&(o.disconnect(),o=void 0)},a=R(()=>Array.isArray(e)?e.map(d=>Kt(d)):[Kt(e)]),c=Me(a,d=>{if(r(),s.value&&i){o=new ResizeObserver(t);for(const h of d)h&&o.observe(h,l)}},{immediate:!0,flush:"post",deep:!0}),u=()=>{r(),c()};return qi(u),{isSupported:s,stop:u}}function Sh(e,t={width:0,height:0},n={}){const{window:i=Mt,box:l="content-box"}=n,o=R(()=>{var d,h;return(h=(d=Kt(e))==null?void 0:d.namespaceURI)==null?void 0:h.includes("svg")}),s=re(t.width),r=re(t.height),{stop:a}=xh(e,([d])=>{const h=l==="border-box"?d.borderBoxSize:l==="content-box"?d.contentBoxSize:d.devicePixelContentBoxSize;if(i&&o.value){const g=Kt(e);if(g){const m=i.getComputedStyle(g);s.value=Number.parseFloat(m.width),r.value=Number.parseFloat(m.height)}}else if(h){const g=Array.isArray(h)?h:[h];s.value=g.reduce((m,{inlineSize:y})=>m+y,0),r.value=g.reduce((m,{blockSize:y})=>m+y,0)}else s.value=d.contentRect.width,r.value=d.contentRect.height},n);no(()=>{const d=Kt(e);d&&(s.value="offsetWidth"in d?d.offsetWidth:t.width,r.value="offsetHeight"in d?d.offsetHeight:t.height)});const c=Me(()=>Kt(e),d=>{s.value=d?t.width:0,r.value=d?t.height:0});function u(){a(),c()}return{width:s,height:r,stop:u}}function Lh(e={}){const{window:t=Mt,behavior:n="auto"}=e;if(!t)return{x:re(0),y:re(0)};const i=re(t.scrollX),l=re(t.scrollY),o=R({get(){return i.value},set(r){scrollTo({left:r,behavior:n})}}),s=R({get(){return l.value},set(r){scrollTo({top:r,behavior:n})}});return Bt(t,"scroll",()=>{i.value=t.scrollX,l.value=t.scrollY},{capture:!1,passive:!0}),{x:o,y:s}}function Ih(e={}){const{window:t=Mt,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:i=Number.POSITIVE_INFINITY,listenOrientation:l=!0,includeScrollbar:o=!0}=e,s=re(n),r=re(i),a=()=>{t&&(o?(s.value=t.innerWidth,r.value=t.innerHeight):(s.value=t.document.documentElement.clientWidth,r.value=t.document.documentElement.clientHeight))};if(a(),no(a),Bt("resize",a,{passive:!0}),l){const c=Nr("(orientation: portrait)");Me(c,()=>a())}return{width:s,height:r}}const ps=async(e,t)=>{const{path:n,query:i}=e.currentRoute.value,{scrollBehavior:l}=e.options;e.options.scrollBehavior=void 0,await e.replace({path:n,query:i,hash:t}),e.options.scrollBehavior=l},Ph=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:i=5})=>{const l=nn();Bt("scroll",hh(()=>{var m,y;const s=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(s-0)d.some(x=>x.hash===k.hash));for(let k=0;k=(((m=x.parentElement)==null?void 0:m.offsetTop)??0)-i,_=!I||s<(((y=I.parentElement)==null?void 0:y.offsetTop)??0)-i;if(!(v&&_))continue;const W=decodeURIComponent(l.currentRoute.value.hash),F=decodeURIComponent(x.hash);if(W===F)return;if(u){for(let b=k+1;b{const t=_n();return R(()=>e[t.value]??{})},jh=()=>{const e=Zd();return R(()=>Object.keys(e.value))},ul=(e,t)=>{var i;const n=(i=Ni())==null?void 0:i.appContext.components;return n?e in n||nt(e)in n||qn(nt(e))in n:!1};var Hh={"/":{backToTop:"Back to top"}};const Fh=ge({name:"BackToTop",setup(e){const t=ht(),n=Vr(Hh),i=yn(),{height:l}=Sh(i),{height:o}=Ih(),{y:s}=Lh(),r=R(()=>t.value.backToTop!==!1&&s.value>100),a=R(()=>s.value/(l.value-o.value)*100);return Ve(()=>{i.value=document.body}),()=>ce(ei,{name:"back-to-top"},()=>r.value?ce("button",{type:"button",class:"vp-back-to-top-button","aria-label":n.value.backToTop,onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},[ce("span",{class:"vp-scroll-progress",role:"progressbar","aria-labelledby":"loadinglabel","aria-valuenow":a.value},ce("svg",ce("circle",{cx:"50%",cy:"50%",style:{"stroke-dasharray":`calc(${Math.PI*a.value}% - ${4*Math.PI}px) calc(${Math.PI*100}% - ${4*Math.PI}px)`}}))),ce("div",{class:"back-to-top-icon"})]):null)}}),Mh=yt({rootComponents:[Fh]}),Bh=/\b(?:Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini)/i,Dh=()=>typeof window<"u"&&window.navigator&&"userAgent"in window.navigator&&Bh.test(navigator.userAgent),dl=new Map,$h=({delay:e=500,duration:t=2e3,locales:n,selector:i,showInMobile:l})=>{const{copy:o}=bh({legacy:!0}),s=Vr(n),r=pn(),a=d=>{if(!d.hasAttribute("copy-code-registered")){const h=document.createElement("button");h.type="button",h.classList.add("vp-copy-code-button"),h.innerHTML='
      ',h.setAttribute("aria-label",s.value.copy),h.setAttribute("data-copied",s.value.copied),d.parentElement&&d.parentElement.insertBefore(h,d),d.setAttribute("copy-code-registered","")}},c=()=>{kn().then(()=>setTimeout(()=>{i.forEach(d=>{document.querySelectorAll(d).forEach(a)})},e))},u=(d,h,g)=>{let{innerText:m=""}=h;/language-(shellscript|shell|bash|sh|zsh)/.test(d.classList.toString())&&(m=m.replace(/^ *(\$|>) /gm,"")),o(m).then(()=>{g.classList.add("copied"),clearTimeout(dl.get(g));const y=setTimeout(()=>{g.classList.remove("copied"),g.blur(),dl.delete(g)},t);dl.set(g,y)})};Ve(()=>{const d=!Dh()||l;d&&c(),Bt("click",h=>{const g=h.target;if(g.matches('div[class*="language-"] > button.copy')){const m=g.parentElement,y=g.nextElementSibling;y&&u(m,y,g)}else if(g.matches('div[class*="language-"] div.vp-copy-icon')){const m=g.parentElement,y=m.parentElement,k=m.nextElementSibling;k&&u(y,k,m)}}),Me(()=>r.value.path,()=>{d&&c()})})};var Nh={"/":{copy:"Copy code",copied:"Copied"}},zh=['.theme-default-content div[class*="language-"] pre'];const Vh=500,Uh=2e3,Gh=Nh,qh=zh,Kh=!1,Qh=yt({setup:()=>{$h({selector:qh,locales:Gh,duration:Uh,delay:Vh,showInMobile:Kh})}}),Jh=ce("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[ce("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),ce("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),Yh=ge({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=_n(),n=R(()=>e.locales[t.value]??{openInNewWindow:"open in new window"});return()=>ce("span",[Jh,ce("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}});var Xh={"/":{openInNewWindow:"open in new window"}};const Zh=Xh,ef=yt({enhance({app:e}){e.component("ExternalLinkIcon",ce(Yh,{locales:Zh}))}});/*! medium-zoom 1.1.0 | MIT License | https://github.com/francoischalifour/medium-zoom */var Vt=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},i=window.Promise||function(C){function H(){}C(H,H)},l=function(C){var H=C.target;if(H===M){m();return}v.indexOf(H)!==-1&&y({target:H})},o=function(){if(!(D||!b.original)){var C=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(W-C)>F.scrollOffset&&setTimeout(m,150)}},s=function(C){var H=C.key||C.keyCode;(H==="Escape"||H==="Esc"||H===27)&&m()},r=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},H=C;if(C.background&&(M.style.background=C.background),C.container&&C.container instanceof Object&&(H.container=Vt({},F.container,C.container)),C.template){var te=bi(C.template)?C.template:document.querySelector(C.template);H.template=te}return F=Vt({},F,H),v.forEach(function(le){le.dispatchEvent(sn("medium-zoom:update",{detail:{zoom:P}}))}),P},a=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Vt({},F,C))},c=function(){for(var C=arguments.length,H=Array(C),te=0;te0?H.reduce(function(T,Q){return[].concat(T,ms(Q))},[]):v;return le.forEach(function(T){T.classList.remove("medium-zoom-image"),T.dispatchEvent(sn("medium-zoom:detach",{detail:{zoom:P}}))}),v=v.filter(function(T){return le.indexOf(T)===-1}),P},d=function(C,H){var te=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return v.forEach(function(le){le.addEventListener("medium-zoom:"+C,H,te)}),_.push({type:"medium-zoom:"+C,listener:H,options:te}),P},h=function(C,H){var te=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return v.forEach(function(le){le.removeEventListener("medium-zoom:"+C,H,te)}),_=_.filter(function(le){return!(le.type==="medium-zoom:"+C&&le.listener.toString()===H.toString())}),P},g=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},H=C.target,te=function(){var T={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},Q=void 0,U=void 0;if(F.container)if(F.container instanceof Object)T=Vt({},T,F.container),Q=T.width-T.left-T.right-F.margin*2,U=T.height-T.top-T.bottom-F.margin*2;else{var Te=bi(F.container)?F.container:document.querySelector(F.container),je=Te.getBoundingClientRect(),Ue=je.width,Be=je.height,kt=je.left,_t=je.top;T=Vt({},T,{width:Ue,height:Be,left:kt,top:_t})}Q=Q||T.width-F.margin*2,U=U||T.height-F.margin*2;var rt=b.zoomedHd||b.original,We=gs(rt)?Q:rt.naturalWidth||Q,S=gs(rt)?U:rt.naturalHeight||U,V=rt.getBoundingClientRect(),$=V.top,K=V.left,ue=V.width,ve=V.height,f=Math.min(Math.max(ue,We),Q)/ue,p=Math.min(Math.max(ve,S),U)/ve,w=Math.min(f,p),L=(-K+(Q-ue)/2+F.margin+T.left)/w,E=(-$+(U-ve)/2+F.margin+T.top)/w,O="scale("+w+") translate3d("+L+"px, "+E+"px, 0)";b.zoomed.style.transform=O,b.zoomedHd&&(b.zoomedHd.style.transform=O)};return new i(function(le){if(H&&v.indexOf(H)===-1){le(P);return}var T=function Ue(){D=!1,b.zoomed.removeEventListener("transitionend",Ue),b.original.dispatchEvent(sn("medium-zoom:opened",{detail:{zoom:P}})),le(P)};if(b.zoomed){le(P);return}if(H)b.original=H;else if(v.length>0){var Q=v;b.original=Q[0]}else{le(P);return}if(b.original.dispatchEvent(sn("medium-zoom:open",{detail:{zoom:P}})),W=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,D=!0,b.zoomed=lf(b.original),document.body.appendChild(M),F.template){var U=bi(F.template)?F.template:document.querySelector(F.template);b.template=document.createElement("div"),b.template.appendChild(U.content.cloneNode(!0)),document.body.appendChild(b.template)}if(b.original.parentElement&&b.original.parentElement.tagName==="PICTURE"&&b.original.currentSrc&&(b.zoomed.src=b.original.currentSrc),document.body.appendChild(b.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),b.original.classList.add("medium-zoom-image--hidden"),b.zoomed.classList.add("medium-zoom-image--opened"),b.zoomed.addEventListener("click",m),b.zoomed.addEventListener("transitionend",T),b.original.getAttribute("data-zoom-src")){b.zoomedHd=b.zoomed.cloneNode(),b.zoomedHd.removeAttribute("srcset"),b.zoomedHd.removeAttribute("sizes"),b.zoomedHd.removeAttribute("loading"),b.zoomedHd.src=b.zoomed.getAttribute("data-zoom-src"),b.zoomedHd.onerror=function(){clearInterval(Te),console.warn("Unable to reach the zoom image target "+b.zoomedHd.src),b.zoomedHd=null,te()};var Te=setInterval(function(){b.zoomedHd.complete&&(clearInterval(Te),b.zoomedHd.classList.add("medium-zoom-image--opened"),b.zoomedHd.addEventListener("click",m),document.body.appendChild(b.zoomedHd),te())},10)}else if(b.original.hasAttribute("srcset")){b.zoomedHd=b.zoomed.cloneNode(),b.zoomedHd.removeAttribute("sizes"),b.zoomedHd.removeAttribute("loading");var je=b.zoomedHd.addEventListener("load",function(){b.zoomedHd.removeEventListener("load",je),b.zoomedHd.classList.add("medium-zoom-image--opened"),b.zoomedHd.addEventListener("click",m),document.body.appendChild(b.zoomedHd),te()})}else te()})},m=function(){return new i(function(C){if(D||!b.original){C(P);return}var H=function te(){b.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(b.zoomed),b.zoomedHd&&document.body.removeChild(b.zoomedHd),document.body.removeChild(M),b.zoomed.classList.remove("medium-zoom-image--opened"),b.template&&document.body.removeChild(b.template),D=!1,b.zoomed.removeEventListener("transitionend",te),b.original.dispatchEvent(sn("medium-zoom:closed",{detail:{zoom:P}})),b.original=null,b.zoomed=null,b.zoomedHd=null,b.template=null,C(P)};D=!0,document.body.classList.remove("medium-zoom--opened"),b.zoomed.style.transform="",b.zoomedHd&&(b.zoomedHd.style.transform=""),b.template&&(b.template.style.transition="opacity 150ms",b.template.style.opacity=0),b.original.dispatchEvent(sn("medium-zoom:close",{detail:{zoom:P}})),b.zoomed.addEventListener("transitionend",H)})},y=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},H=C.target;return b.original?m():g({target:H})},k=function(){return F},x=function(){return v},I=function(){return b.original},v=[],_=[],D=!1,W=0,F=n,b={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?F=t:(t||typeof t=="string")&&c(t),F=Vt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},F);var M=nf(F.background);document.addEventListener("click",l),document.addEventListener("keyup",s),document.addEventListener("scroll",o),window.addEventListener("resize",m);var P={open:g,close:m,toggle:y,update:r,clone:a,attach:c,detach:u,on:d,off:h,getOptions:k,getImages:x,getZoomedImage:I};return P};function sf(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document>"u")){var i=document.head||document.getElementsByTagName("head")[0],l=document.createElement("style");l.type="text/css",n==="top"&&i.firstChild?i.insertBefore(l,i.firstChild):i.appendChild(l),l.styleSheet?l.styleSheet.cssText=e:l.appendChild(document.createTextNode(e))}}var rf=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";sf(rf);const af=Symbol("mediumZoom");var cf={};const uf=".theme-default-content > img, .theme-default-content :not(a) > img",df=cf,hf=300,ff=yt({enhance({app:e,router:t}){const n=of(df);n.refresh=(i=uf)=>{n.detach(),n.attach(i)},e.provide(af,n),t.afterEach(()=>{setTimeout(()=>n.refresh(),hf)})}});/** +See: https://github.com/francoischalifour/medium-zoom`)}},nf=function(t){var n=document.createElement("div");return n.classList.add("medium-zoom-overlay"),n.style.background=t,n},lf=function(t){var n=t.getBoundingClientRect(),i=n.top,l=n.left,o=n.width,s=n.height,r=t.cloneNode(),a=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,c=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;return r.removeAttribute("id"),r.style.position="absolute",r.style.top=i+a+"px",r.style.left=l+c+"px",r.style.width=o+"px",r.style.height=s+"px",r.style.transform="",r},sn=function(t,n){var i=Vt({bubbles:!1,cancelable:!1,detail:void 0},n);if(typeof window.CustomEvent=="function")return new CustomEvent(t,i);var l=document.createEvent("CustomEvent");return l.initCustomEvent(t,i.bubbles,i.cancelable,i.detail),l},of=function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=window.Promise||function(C){function H(){}C(H,H)},l=function(C){var H=C.target;if(H===M){m();return}v.indexOf(H)!==-1&&y({target:H})},o=function(){if(!(D||!b.original)){var C=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(W-C)>F.scrollOffset&&setTimeout(m,150)}},s=function(C){var H=C.key||C.keyCode;(H==="Escape"||H==="Esc"||H===27)&&m()},r=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},H=C;if(C.background&&(M.style.background=C.background),C.container&&C.container instanceof Object&&(H.container=Vt({},F.container,C.container)),C.template){var te=bi(C.template)?C.template:document.querySelector(C.template);H.template=te}return F=Vt({},F,H),v.forEach(function(le){le.dispatchEvent(sn("medium-zoom:update",{detail:{zoom:P}}))}),P},a=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Vt({},F,C))},c=function(){for(var C=arguments.length,H=Array(C),te=0;te0?H.reduce(function(T,Q){return[].concat(T,ms(Q))},[]):v;return le.forEach(function(T){T.classList.remove("medium-zoom-image"),T.dispatchEvent(sn("medium-zoom:detach",{detail:{zoom:P}}))}),v=v.filter(function(T){return le.indexOf(T)===-1}),P},d=function(C,H){var te=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return v.forEach(function(le){le.addEventListener("medium-zoom:"+C,H,te)}),_.push({type:"medium-zoom:"+C,listener:H,options:te}),P},h=function(C,H){var te=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return v.forEach(function(le){le.removeEventListener("medium-zoom:"+C,H,te)}),_=_.filter(function(le){return!(le.type==="medium-zoom:"+C&&le.listener.toString()===H.toString())}),P},g=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},H=C.target,te=function(){var T={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},Q=void 0,U=void 0;if(F.container)if(F.container instanceof Object)T=Vt({},T,F.container),Q=T.width-T.left-T.right-F.margin*2,U=T.height-T.top-T.bottom-F.margin*2;else{var Te=bi(F.container)?F.container:document.querySelector(F.container),je=Te.getBoundingClientRect(),Ue=je.width,Be=je.height,kt=je.left,_t=je.top;T=Vt({},T,{width:Ue,height:Be,left:kt,top:_t})}Q=Q||T.width-F.margin*2,U=U||T.height-F.margin*2;var rt=b.zoomedHd||b.original,We=gs(rt)?Q:rt.naturalWidth||Q,S=gs(rt)?U:rt.naturalHeight||U,V=rt.getBoundingClientRect(),$=V.top,K=V.left,ue=V.width,ve=V.height,f=Math.min(Math.max(ue,We),Q)/ue,p=Math.min(Math.max(ve,S),U)/ve,w=Math.min(f,p),L=(-K+(Q-ue)/2+F.margin+T.left)/w,E=(-$+(U-ve)/2+F.margin+T.top)/w,O="scale("+w+") translate3d("+L+"px, "+E+"px, 0)";b.zoomed.style.transform=O,b.zoomedHd&&(b.zoomedHd.style.transform=O)};return new i(function(le){if(H&&v.indexOf(H)===-1){le(P);return}var T=function Ue(){D=!1,b.zoomed.removeEventListener("transitionend",Ue),b.original.dispatchEvent(sn("medium-zoom:opened",{detail:{zoom:P}})),le(P)};if(b.zoomed){le(P);return}if(H)b.original=H;else if(v.length>0){var Q=v;b.original=Q[0]}else{le(P);return}if(b.original.dispatchEvent(sn("medium-zoom:open",{detail:{zoom:P}})),W=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,D=!0,b.zoomed=lf(b.original),document.body.appendChild(M),F.template){var U=bi(F.template)?F.template:document.querySelector(F.template);b.template=document.createElement("div"),b.template.appendChild(U.content.cloneNode(!0)),document.body.appendChild(b.template)}if(b.original.parentElement&&b.original.parentElement.tagName==="PICTURE"&&b.original.currentSrc&&(b.zoomed.src=b.original.currentSrc),document.body.appendChild(b.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),b.original.classList.add("medium-zoom-image--hidden"),b.zoomed.classList.add("medium-zoom-image--opened"),b.zoomed.addEventListener("click",m),b.zoomed.addEventListener("transitionend",T),b.original.getAttribute("data-zoom-src")){b.zoomedHd=b.zoomed.cloneNode(),b.zoomedHd.removeAttribute("srcset"),b.zoomedHd.removeAttribute("sizes"),b.zoomedHd.removeAttribute("loading"),b.zoomedHd.src=b.zoomed.getAttribute("data-zoom-src"),b.zoomedHd.onerror=function(){clearInterval(Te),console.warn("Unable to reach the zoom image target "+b.zoomedHd.src),b.zoomedHd=null,te()};var Te=setInterval(function(){b.zoomedHd.complete&&(clearInterval(Te),b.zoomedHd.classList.add("medium-zoom-image--opened"),b.zoomedHd.addEventListener("click",m),document.body.appendChild(b.zoomedHd),te())},10)}else if(b.original.hasAttribute("srcset")){b.zoomedHd=b.zoomed.cloneNode(),b.zoomedHd.removeAttribute("sizes"),b.zoomedHd.removeAttribute("loading");var je=b.zoomedHd.addEventListener("load",function(){b.zoomedHd.removeEventListener("load",je),b.zoomedHd.classList.add("medium-zoom-image--opened"),b.zoomedHd.addEventListener("click",m),document.body.appendChild(b.zoomedHd),te()})}else te()})},m=function(){return new i(function(C){if(D||!b.original){C(P);return}var H=function te(){b.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(b.zoomed),b.zoomedHd&&document.body.removeChild(b.zoomedHd),document.body.removeChild(M),b.zoomed.classList.remove("medium-zoom-image--opened"),b.template&&document.body.removeChild(b.template),D=!1,b.zoomed.removeEventListener("transitionend",te),b.original.dispatchEvent(sn("medium-zoom:closed",{detail:{zoom:P}})),b.original=null,b.zoomed=null,b.zoomedHd=null,b.template=null,C(P)};D=!0,document.body.classList.remove("medium-zoom--opened"),b.zoomed.style.transform="",b.zoomedHd&&(b.zoomedHd.style.transform=""),b.template&&(b.template.style.transition="opacity 150ms",b.template.style.opacity=0),b.original.dispatchEvent(sn("medium-zoom:close",{detail:{zoom:P}})),b.zoomed.addEventListener("transitionend",H)})},y=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},H=C.target;return b.original?m():g({target:H})},k=function(){return F},x=function(){return v},I=function(){return b.original},v=[],_=[],D=!1,W=0,F=n,b={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?F=t:(t||typeof t=="string")&&c(t),F=Vt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},F);var M=nf(F.background);document.addEventListener("click",l),document.addEventListener("keyup",s),document.addEventListener("scroll",o),window.addEventListener("resize",m);var P={open:g,close:m,toggle:y,update:r,clone:a,attach:c,detach:u,on:d,off:h,getOptions:k,getImages:x,getZoomedImage:I};return P};function sf(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(typeof document>"u")){var i=document.head||document.getElementsByTagName("head")[0],l=document.createElement("style");l.type="text/css",n==="top"&&i.firstChild?i.insertBefore(l,i.firstChild):i.appendChild(l),l.styleSheet?l.styleSheet.cssText=e:l.appendChild(document.createTextNode(e))}}var rf=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";sf(rf);const af=Symbol("mediumZoom");var cf={};const uf=".theme-default-content > img, .theme-default-content :not(a) > img",df=cf,hf=300,ff=yt({enhance({app:e,router:t}){const n=of(df);n.refresh=(i=uf)=>{n.detach(),n.attach(i)},e.provide(af,n),t.afterEach(()=>{setTimeout(()=>n.refresh(),hf)})}});/** * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress * @license MIT */const de={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
      '},status:null,set:e=>{const t=de.isStarted();e=hl(e,de.settings.minimum,1),de.status=e===1?null:e;const n=de.render(!t),i=n.querySelector(de.settings.barSelector),l=de.settings.speed,o=de.settings.easing;return n.offsetWidth,pf(s=>{gi(i,{transform:"translate3d("+vs(e)+"%,0,0)",transition:"all "+l+"ms "+o}),e===1?(gi(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){gi(n,{transition:"all "+l+"ms linear",opacity:"0"}),setTimeout(function(){de.remove(),s()},l)},l)):setTimeout(()=>s(),l)}),de},isStarted:()=>typeof de.status=="number",start:()=>{de.status||de.set(0);const e=()=>{setTimeout(()=>{de.status&&(de.trickle(),e())},de.settings.trickleSpeed)};return de.settings.trickle&&e(),de},done:e=>!e&&!de.status?de:de.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=de.status;return t?(typeof e!="number"&&(e=(1-t)*hl(Math.random()*t,.1,.95)),t=hl(t+e,0,.994),de.set(t)):de.start()},trickle:()=>de.inc(Math.random()*de.settings.trickleRate),render:e=>{if(de.isRendered())return document.getElementById("nprogress");bs(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=de.settings.template;const n=t.querySelector(de.settings.barSelector),i=e?"-100":vs(de.status||0),l=document.querySelector(de.settings.parent);return gi(n,{transition:"all 0 linear",transform:"translate3d("+i+"%,0,0)"}),l!==document.body&&bs(l,"nprogress-custom-parent"),l==null||l.appendChild(t),t},remove:()=>{ws(document.documentElement,"nprogress-busy"),ws(document.querySelector(de.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&gf(e)},isRendered:()=>!!document.getElementById("nprogress")},hl=(e,t,n)=>en?n:e,vs=e=>(-1+e)*100,pf=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),gi=function(){const e=["Webkit","O","Moz","ms"],t={};function n(s){return s.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(r,a){return a.toUpperCase()})}function i(s){const r=document.body.style;if(s in r)return s;let a=e.length;const c=s.charAt(0).toUpperCase()+s.slice(1);let u;for(;a--;)if(u=e[a]+c,u in r)return u;return s}function l(s){return s=n(s),t[s]??(t[s]=i(s))}function o(s,r,a){r=l(r),s.style[r]=a}return function(s,r){for(const a in r){const c=r[a];c!==void 0&&Object.prototype.hasOwnProperty.call(r,a)&&o(s,a,c)}}}(),Ur=(e,t)=>(typeof e=="string"?e:io(e)).indexOf(" "+t+" ")>=0,bs=(e,t)=>{const n=io(e),i=n+t;Ur(n,t)||(e.className=i.substring(1))},ws=(e,t)=>{const n=io(e);if(!Ur(e,t))return;const i=n.replace(" "+t+" "," ");e.className=i.substring(1,i.length-1)},io=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),gf=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)},mf=()=>{Ve(()=>{const e=nn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||de.start()}),e.afterEach(n=>{t.add(n.path),de.done()})})},vf=yt({setup(){mf()}}),bf=JSON.parse(`{"logo":"/Logo_without_text_dark.png","logoDark":"/Logo_without_text.png","docsRepo":"https://github.com/zkSNACKs/WasabiDoc","docsBranch":"master","docsDir":"docs","editLinks":true,"contributors":false,"colorMode":"dark","algolia":{"indexName":"wasabiwallet","apiKey":"c9d9b7688e0f9e6d0ed534655321a424","algoliaOptions":{"hitsPerPage":25},"autocompleteOptions":{"openOnFocus":true}},"head":[["link",{"rel":"icon","href":"/favicon.ico"}],["link",{"rel":"apple-touch-icon","href":"/apple-touch-icon.png","sizes":"180x180"}],["link",{"rel":"manifest","href":"/site.webmanifest"}],["link",{"rel":"mask-icon","href":"/safari-pinned-tab.svg","color":"#211b24"}],["link",{"rel":"stylesheet","href":"https://fonts.googleapis.com/css?family=Inconsolata:400,700|Playfair+Display:700&display=swap"}],["meta",{"name":"msapplication-TileColor","content":"#211b24"}],["meta",{"name":"theme-color","content":"#211b24"}]],"navbar":[{"text":"Getting Started","link":"/getting-started/"},{"text":"Why Wasabi","link":"/why-wasabi/"},{"text":"Using Wasabi","link":"/using-wasabi/"},{"text":"Building Wasabi","link":"/building-wasabi/"},{"text":"FAQ","link":"/FAQ/"},{"text":"Glossary","link":"/glossary/"}],"sidebar":{"/why-wasabi/":[{"text":"Why Privacy","collapsable":false,"sidebarDepth":2,"children":["/why-wasabi/WhyPrivacyImportant.md","/why-wasabi/WhyFinancialPrivacy.md","/why-wasabi/LegalConcern.md"]},{"text":"Privacy in Bitcoin","collapsable":false,"sidebarDepth":2,"children":["/why-wasabi/Coins.md","/why-wasabi/AddressReuse.md","/why-wasabi/TransactionGraph.md","/why-wasabi/NetworkLevelPrivacy.md","/why-wasabi/TransactionSurveillanceCompanies.md"]}],"/using-wasabi/":[{"text":"Introducing Wasabi","collapsable":false,"sidebarDepth":2,"children":["/using-wasabi/ELI5.md"]},{"text":"Installing Wasabi","collapsable":false,"sidebarDepth":2,"children":["/using-wasabi/InstallPackage.md"]},{"text":"Using Wasabi","collapsable":false,"sidebarDepth":2,"children":["/using-wasabi/WalletGeneration.md","/using-wasabi/WalletLoad.md","/using-wasabi/Receive.md","/using-wasabi/CoinJoin.md","/using-wasabi/Send.md","/using-wasabi/ColdWasabi.md","/using-wasabi/BitcoinFullNode.md"]},{"text":"Best Practices","collapsable":false,"sidebarDepth":2,"children":["/using-wasabi/PasswordBestPractices.md","/using-wasabi/BackupBestPractices.md","/using-wasabi/ChangeCoins.md"]},{"text":"Restoring Wasabi","collapsable":false,"sidebarDepth":2,"children":["/using-wasabi/WalletRecovery.md","/using-wasabi/RestoreElectrum.md","/using-wasabi/PasswordFinder.md"]},{"text":"Advanced Installing Wasabi","collapsable":false,"sidebarDepth":2,"children":["/using-wasabi/BuildSource.md","/using-wasabi/DeterministicBuild.md","/using-wasabi/WasabiSetupVM.md"]},{"text":"Advanced Using Wasabi","collapsable":false,"sidebarDepth":2,"children":["/using-wasabi/DiscreetMode.md","/using-wasabi/Testnet.md","/using-wasabi/PayJoin.md","/using-wasabi/Daemon.md","/using-wasabi/StartupParameters.md","/using-wasabi/RPC.md","/using-wasabi/BIPs.md"]}],"/building-wasabi/":[{"text":"Contributing to Wasabi","collapsable":false,"sidebarDepth":2,"children":["/building-wasabi/ContributionChecklist.md"]},{"text":"Advanced","collapsable":false,"sidebarDepth":2,"children":["/building-wasabi/Security.md","/building-wasabi/LICENSE.md"]}],"/FAQ/":[{"text":"Frequently Asked Questions","collapsable":false,"sidebarDepth":2,"children":["/FAQ/FAQ-Introduction.md","/FAQ/FAQ-Installation.md","/FAQ/FAQ-UseWasabi.md","/FAQ/FAQ-GeneralBitcoinPrivacy.md","/FAQ/FAQ-Contribution.md"]}],"/glossary/":[{"text":"Glossary","collapsable":false,"sidebarDepth":2,"children":["/glossary/Glossary-GeneralBitcoin.md","/glossary/Glossary-PrivacyWasabi.md"]}]},"locales":{"/":{"selectLanguageName":"English"}},"colorModeSwitch":true,"repo":null,"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebarDepth":2,"editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),wf=re(bf),Gr=()=>wf,qr=Symbol(""),yf=()=>{const e=ze(qr);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},kf=(e,t)=>{const{locales:n,...i}=e;return{...i,...n==null?void 0:n[t]}},_f=yt({enhance({app:e}){const t=Gr(),n=e._context.provides[Yl],i=R(()=>kf(t.value,n.routeLocale.value));e.provide(qr,i),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return i.value}}})}}),Cf=ge({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,n)=>(z(),X("span",{class:qe(["badge",e.type]),style:Kn({verticalAlign:e.vertical})},[we(t.$slots,"default",{},()=>[Ft(Ie(e.text),1)])],6))}}),Ee=(e,t)=>{const n=e.__vccOpts||e;for(const[i,l]of t)n[i]=l;return n},Ef=Ee(Cf,[["__file","Badge.vue"]]),xf=ge({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=re([]),i=re(-1),l=zr("vuepress-code-group",{}),o=R(()=>n.value.map(c=>c.innerText).join(","));Ve(()=>{Me(()=>l.value[o.value],(c=-1)=>{i.value!==c&&(i.value=c)},{immediate:!0}),Me(i,c=>{l.value[o.value]!==c&&(l.value[o.value]=c)})});const s=(c=i.value)=>{c{c>0?i.value=c-1:i.value=n.value.length-1,n.value[i.value].focus()},a=(c,u)=>{c.key===" "||c.key==="Enter"?(c.preventDefault(),i.value=u):c.key==="ArrowRight"?(c.preventDefault(),s(u)):c.key==="ArrowLeft"&&(c.preventDefault(),r(u))};return()=>{var u;const c=(((u=t.default)==null?void 0:u.call(t))||[]).filter(d=>d.type.name==="CodeGroupItem").map(d=>(d.props===null&&(d.props={}),d));return c.length===0?null:(i.value<0||i.value>c.length-1?(i.value=c.findIndex(d=>d.props.active===""||d.props.active===!0),i.value===-1&&(i.value=0)):c.forEach((d,h)=>{d.props.active=h===i.value}),ce("div",{class:"code-group"},[ce("div",{class:"code-group__nav",role:"tablist"},c.map((d,h)=>{const g=h===i.value;return ce("button",{ref:m=>{m&&(n.value[h]=m)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":g},role:"tab",ariaSelected:g,onClick:()=>i.value=h,onKeydown:m=>a(m,h)},d.props.title)})),c]))}}}),Sf=ge({name:"CodeGroupItem",__name:"CodeGroupItem",props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,n)=>(z(),X("div",{class:qe(["code-group-item",{"code-group-item__active":e.active}]),role:"tabpanel"},[we(t.$slots,"default")],2))}}),Lf=Ee(Sf,[["__file","CodeGroupItem.vue"]]),If=()=>Gr(),Fe=()=>yf(),Kr=Symbol(""),lo=()=>{const e=ze(Kr);if(!e)throw new Error("useDarkMode() is called without provider.");return e},Pf=()=>{const e=Fe(),t=Eh(),n=zr("vuepress-color-scheme",e.value.colorMode),i=R({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(l){l===t.value?n.value="auto":n.value=l?"dark":"light"}});Yt(Kr,i),Af(i)},Af=e=>{const t=(n=e.value)=>{const i=window==null?void 0:window.document.querySelector("html");i==null||i.classList.toggle("dark",n)};Ve(()=>{Me(e,t,{immediate:!0})}),Di(()=>t())};let fl=null,Ln=null;const Tf={wait:()=>fl,pending:()=>{fl=new Promise(e=>Ln=e)},resolve:()=>{Ln==null||Ln(),fl=null,Ln=null}},Qr=()=>Tf,oo=e=>{const{notFound:t,meta:n,path:i}=Zl(e);return t?{text:i,link:i}:{text:n.title||i,link:i}},ys=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Wf=(e,t)=>{if(t.hash===e)return!0;const n=ys(t.path),i=ys(e);return n===i},Jr=(e,t)=>e.link&&Wf(e.link,t)?!0:e.children?e.children.some(n=>Jr(n,t)):!1,Yr=e=>!ti(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Rf={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},Of=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=Yr(e);return n!==null?Rf[n]:null},jf=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:i,editLinkPattern:l})=>{if(!i)return null;const o=Of({docsRepo:e,editLinkPattern:l});return o?o.replace(/:repo/,ti(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,Er(`${Cr(n)}/${i}`)):null},Xr=Symbol("sidebarItems"),so=()=>{const e=ze(Xr);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},Hf=()=>{const e=Fe(),t=ht(),n=pn(),i=ln(),l=R(()=>Ff(t.value,e.value,n.value,i.path));Yt(Xr,l)},Ff=(e,t,n,i)=>{const l=e.sidebar??t.sidebar??"auto",o=e.sidebarDepth??t.sidebarDepth??2;return e.home||l===!1?[]:l==="auto"?Zr(n,o):Array.isArray(l)?ea(n,i,l,o):Kl(l)?Bf(n,i,l,o):[]},Mf=(e,t)=>({text:e.title,link:e.link,children:ro(e.children,t)}),ro=(e,t)=>t>0?e.map(n=>Mf(n,t-1)):[],Zr=(e,t)=>[{text:e.title,children:ro(e.headers,t)}],ea=(e,t,n,i)=>{const l=o=>{var r;let s;if(dt(o)?s=oo(o):s=o,s.children)return{...s,children:s.children.map(a=>l(a))};if(s.link===t){const a=((r=e.headers[0])==null?void 0:r.level)===1?e.headers[0].children:e.headers;return{...s,children:ro(a,i)}}return s};return n.map(o=>l(o))},Bf=(e,t,n,i)=>{const l=xr(n,t),o=n[l]??[];return o==="heading"?Zr(e,i):ea(e,t,o,i)},Df="979px",$f={mobile:Df};var Un;(function(e){e.MOBILE="mobile"})(Un||(Un={}));var Cs;const Nf={[Un.MOBILE]:Number.parseInt((Cs=$f.mobile)==null?void 0:Cs.replace("px",""),10)},ta=(e,t)=>{const n=Nf[e];Number.isInteger(n)&&Ve(()=>{t(n),window.addEventListener("resize",()=>t(n),!1),window.addEventListener("orientationchange",()=>t(n),!1)})},zf={},Vf={class:"theme-default-content"};function Uf(e,t){const n=Xt("Content");return z(),X("div",Vf,[ie(n)])}const Gf=Ee(zf,[["render",Uf],["__file","HomeContent.vue"]]),qf={key:0,class:"features"},Kf=ge({__name:"HomeFeatures",setup(e){const t=ht(),n=R(()=>Array.isArray(t.value.features)?t.value.features:[]);return(i,l)=>n.value.length?(z(),X("div",qf,[(z(!0),X(ye,null,jt(n.value,o=>(z(),X("div",{key:o.title,class:"feature"},[fe("h2",null,Ie(o.title),1),fe("p",null,Ie(o.details),1)]))),128))])):Se("",!0)}}),Qf=Ee(Kf,[["__file","HomeFeatures.vue"]]),Jf=["innerHTML"],Yf=["textContent"],Xf=ge({__name:"HomeFooter",setup(e){const t=ht(),n=R(()=>t.value.footer),i=R(()=>t.value.footerHtml);return(l,o)=>n.value?(z(),X(ye,{key:0},[i.value?(z(),X("div",{key:0,class:"footer",innerHTML:n.value},null,8,Jf)):(z(),X("div",{key:1,class:"footer",textContent:Ie(n.value)},null,8,Yf))],64)):Se("",!0)}}),Zf=Ee(Xf,[["__file","HomeFooter.vue"]]),ep=["href","rel","target","aria-label"],tp=ge({inheritAttrs:!1,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,n=ln(),i=Hr(),{item:l}=ji(t),o=R(()=>ti(l.value.link)),s=R(()=>!o.value&&Du(l.value.link)),r=R(()=>{if(!s.value){if(l.value.target)return l.value.target;if(o.value)return"_blank"}}),a=R(()=>r.value==="_blank"),c=R(()=>!o.value&&!s.value&&!a.value),u=R(()=>{if(!s.value){if(l.value.rel)return l.value.rel;if(a.value)return"noopener noreferrer"}}),d=R(()=>l.value.ariaLabel||l.value.text),h=R(()=>{const y=Object.keys(i.value.locales);return y.length?!y.some(k=>k===l.value.link):l.value.link!=="/"}),g=R(()=>h.value?n.path.startsWith(l.value.link):!1),m=R(()=>c.value?l.value.activeMatch?new RegExp(l.value.activeMatch).test(n.path):g.value:!1);return(y,k)=>{const x=Xt("RouteLink"),I=Xt("AutoLinkExternalIcon");return c.value?(z(),xe(x,El({key:0,active:m.value,to:Y(l).link,"aria-label":d.value},y.$attrs),{default:He(()=>[we(y.$slots,"before"),Ft(" "+Ie(Y(l).text)+" ",1),we(y.$slots,"after")]),_:3},16,["active","to","aria-label"])):(z(),X("a",El({key:1,class:"external-link",href:Y(l).link,rel:u.value,target:r.value,"aria-label":d.value},y.$attrs),[we(y.$slots,"before"),Ft(" "+Ie(Y(l).text)+" ",1),a.value?(z(),xe(I,{key:0})):Se("",!0),we(y.$slots,"after")],16,ep))}}}),bt=Ee(tp,[["__file","AutoLink.vue"]]),np={class:"hero"},ip={key:0,id:"main-title"},lp={key:1,class:"description"},op={key:2,class:"actions"},sp=ge({__name:"HomeHero",setup(e){const t=ht(),n=Xl(),i=lo(),l=R(()=>i.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),o=R(()=>t.value.heroAlt||r.value||"hero"),s=R(()=>t.value.heroHeight||280),r=R(()=>t.value.heroText===null?null:t.value.heroText||n.value.title||"Hello"),a=R(()=>t.value.tagline===null?null:t.value.tagline||n.value.description||"Welcome to your VuePress site"),c=R(()=>Array.isArray(t.value.actions)?t.value.actions.map(({text:d,link:h,type:g="primary"})=>({text:d,link:h,type:g})):[]),u=()=>{if(!l.value)return null;const d=ce("img",{src:Gi(l.value),alt:o.value,height:s.value});return t.value.heroImageDark===void 0?d:ce(eo,()=>d)};return(d,h)=>(z(),X("header",np,[ie(u),r.value?(z(),X("h1",ip,Ie(r.value),1)):Se("",!0),a.value?(z(),X("p",lp,Ie(a.value),1)):Se("",!0),c.value.length?(z(),X("p",op,[(z(!0),X(ye,null,jt(c.value,g=>(z(),xe(bt,{key:g.text,class:qe(["action-button",[g.type]]),item:g},null,8,["class","item"]))),128))])):Se("",!0)]))}}),rp=Ee(sp,[["__file","HomeHero.vue"]]),ap={class:"home"},cp=ge({__name:"Home",setup(e){return(t,n)=>(z(),X("main",ap,[ie(rp),ie(Qf),ie(Gf),ie(Zf)]))}}),up=Ee(cp,[["__file","Home.vue"]]),dp=["aria-hidden"],hp=ge({__name:"NavbarBrand",setup(e){const t=_n(),n=Xl(),i=Fe(),l=lo(),o=R(()=>i.value.home||t.value),s=R(()=>n.value.title),r=R(()=>l.value&&i.value.logoDark!==void 0?i.value.logoDark:i.value.logo),a=R(()=>i.value.logoAlt??s.value),c=R(()=>s.value.toLocaleUpperCase().trim()===a.value.toLocaleUpperCase().trim()),u=()=>{if(!r.value)return null;const d=ce("img",{class:"logo",src:Gi(r.value),alt:a.value});return i.value.logoDark===void 0?d:ce(eo,()=>d)};return(d,h)=>(z(),xe(Y(ni),{to:o.value},{default:He(()=>[ie(u),s.value?(z(),X("span",{key:0,class:qe(["site-name",{"can-hide":r.value}]),"aria-hidden":c.value},Ie(s.value),11,dp)):Se("",!0)]),_:1},8,["to"]))}}),fp=Ee(hp,[["__file","NavbarBrand.vue"]]),pp=ge({__name:"DropdownTransition",setup(e){const t=i=>{i.style.height=i.scrollHeight+"px"},n=i=>{i.style.height=""};return(i,l)=>(z(),xe(ei,{name:"dropdown",onEnter:t,onAfterEnter:n,onBeforeLeave:t},{default:He(()=>[we(i.$slots,"default")]),_:3}))}}),na=Ee(pp,[["__file","DropdownTransition.vue"]]),gp=["aria-label"],mp={class:"title"},vp=fe("span",{class:"arrow down"},null,-1),bp=["aria-label"],wp={class:"title"},yp={class:"navbar-dropdown"},kp={class:"navbar-dropdown-subtitle"},_p={key:1},Cp={class:"navbar-dropdown-subitem-wrapper"},Ep=ge({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:n}=ji(t),i=R(()=>n.value.ariaLabel||n.value.text),l=re(!1),o=ln();Me(()=>o.path,()=>{l.value=!1});const s=a=>{a.detail===0?l.value=!l.value:l.value=!1},r=(a,c)=>c[c.length-1]===a;return(a,c)=>(z(),X("div",{class:qe(["navbar-dropdown-wrapper",{open:l.value}])},[fe("button",{class:"navbar-dropdown-title",type:"button","aria-label":i.value,onClick:s},[fe("span",mp,Ie(Y(n).text),1),vp],8,gp),fe("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":i.value,onClick:c[0]||(c[0]=u=>l.value=!l.value)},[fe("span",wp,Ie(Y(n).text),1),fe("span",{class:qe(["arrow",l.value?"down":"right"])},null,2)],8,bp),ie(na,null,{default:He(()=>[Ei(fe("ul",yp,[(z(!0),X(ye,null,jt(Y(n).children,u=>(z(),X("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(z(),X(ye,{key:0},[fe("h4",kp,[u.link?(z(),xe(bt,{key:0,item:u,onFocusout:d=>r(u,Y(n).children)&&u.children.length===0&&(l.value=!1)},null,8,["item","onFocusout"])):(z(),X("span",_p,Ie(u.text),1))]),fe("ul",Cp,[(z(!0),X(ye,null,jt(u.children,d=>(z(),X("li",{key:d.link,class:"navbar-dropdown-subitem"},[ie(bt,{item:d,onFocusout:h=>r(d,u.children)&&r(u,Y(n).children)&&(l.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(z(),xe(bt,{key:1,item:u,onFocusout:d=>r(u,Y(n).children)&&(l.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[Pi,l.value]])]),_:1})],2))}}),xp=Ee(Ep,[["__file","NavbarDropdown.vue"]]),Sp=["aria-label"],Lp=ge({__name:"NavbarItems",setup(e){const t=()=>{const d=ln(),h=jh(),g=_n(),m=Hr(),y=Xl(),k=If(),x=Fe();return R(()=>{const I=Object.keys(m.value.locales);if(I.length<2)return[];const v=d.path,_=d.fullPath;return[{text:`${x.value.selectLanguageText}`,ariaLabel:`${x.value.selectLanguageAriaLabel??x.value.selectLanguageText}`,children:I.map(W=>{var C,H;const F=((C=m.value.locales)==null?void 0:C[W])??{},b=((H=k.value.locales)==null?void 0:H[W])??{},M=`${F.lang}`,P=b.selectLanguageName??M;let q;if(M===y.value.lang)q=_;else{const te=v.replace(g.value,W);h.value.some(le=>le===te)?q=_.replace(v,te):q=b.home??W}return{text:P,link:q}})}]})},n=()=>{const d=Fe(),h=R(()=>d.value.repo),g=R(()=>h.value?Yr(h.value):null),m=R(()=>h.value&&!ti(h.value)?`https://github.com/${h.value}`:h.value),y=R(()=>m.value?d.value.repoLabel?d.value.repoLabel:g.value===null?"Source":g.value:null);return R(()=>!m.value||!y.value?[]:[{text:y.value,link:m.value}])},i=d=>dt(d)?oo(d):d.children?{...d,children:d.children.map(h=>i(h))}:d,l=()=>{const d=Fe();return R(()=>(d.value.navbar||[]).map(h=>i(h)))},o=re(!1),s=l(),r=t(),a=n(),c=R(()=>[...s.value,...r.value,...a.value]);ta(Un.MOBILE,d=>{window.innerWidthFe().value.navbarLabel??"site navigation");return(d,h)=>c.value.length?(z(),X("nav",{key:0,class:"navbar-items","aria-label":u.value},[(z(!0),X(ye,null,jt(c.value,g=>(z(),X("div",{key:g.text,class:"navbar-item"},["children"in g?(z(),xe(xp,{key:0,item:g,class:qe(o.value?"mobile":"")},null,8,["item","class"])):(z(),xe(bt,{key:1,item:g},null,8,["item"]))]))),128))],8,Sp)):Se("",!0)}}),ia=Ee(Lp,[["__file","NavbarItems.vue"]]),Ip=["title"],Pp={class:"icon",focusable:"false",viewBox:"0 0 32 32"},Ap=qc('',9),Tp=[Ap],Wp={class:"icon",focusable:"false",viewBox:"0 0 32 32"},Rp=fe("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),Op=[Rp],jp=ge({__name:"ToggleColorModeButton",setup(e){const t=Fe(),n=lo(),i=()=>{n.value=!n.value};return(l,o)=>(z(),X("button",{class:"toggle-color-mode-button",title:Y(t).toggleColorMode,onClick:i},[Ei((z(),X("svg",Pp,Tp,512)),[[Pi,!Y(n)]]),Ei((z(),X("svg",Wp,Op,512)),[[Pi,Y(n)]])],8,Ip))}}),Hp=Ee(jp,[["__file","ToggleColorModeButton.vue"]]),Fp=["title"],Mp=fe("div",{class:"icon","aria-hidden":"true"},[fe("span"),fe("span"),fe("span")],-1),Bp=[Mp],Dp=ge({__name:"ToggleSidebarButton",emits:["toggle"],setup(e){const t=Fe();return(n,i)=>(z(),X("div",{class:"toggle-sidebar-button",title:Y(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:i[0]||(i[0]=l=>n.$emit("toggle"))},Bp,8,Fp))}}),$p=Ee(Dp,[["__file","ToggleSidebarButton.vue"]]),Np=ge({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=Fe(),n=re(null),i=re(null),l=re(0),o=R(()=>l.value?{maxWidth:l.value+"px"}:{});ta(Un.MOBILE,r=>{var c;const a=s(n.value,"paddingLeft")+s(n.value,"paddingRight");window.innerWidth{const c=Xt("NavbarSearch");return z(),X("header",{ref_key:"navbar",ref:n,class:"navbar"},[ie($p,{onToggle:a[0]||(a[0]=u=>r.$emit("toggle-sidebar"))}),fe("span",{ref_key:"navbarBrand",ref:i},[ie(fp)],512),fe("div",{class:"navbar-items-wrapper",style:Kn(o.value)},[we(r.$slots,"before"),ie(ia,{class:"can-hide"}),we(r.$slots,"after"),Y(t).colorModeSwitch?(z(),xe(Hp,{key:0})):Se("",!0),ie(c)],4)],512)}}}),zp=Ee(Np,[["__file","Navbar.vue"]]),Vp={class:"page-meta"},Up={key:0,class:"meta-item edit-link"},Gp={key:1,class:"meta-item last-updated"},qp={class:"meta-item-label"},Kp={class:"meta-item-info"},Qp={key:2,class:"meta-item contributors"},Jp={class:"meta-item-label"},Yp={class:"meta-item-info"},Xp=["title"],Zp=ge({__name:"PageMeta",setup(e){const t=()=>{const a=Fe(),c=pn(),u=ht();return R(()=>{if(!(u.value.editLink??a.value.editLink??!0))return null;const{repo:h,docsRepo:g=h,docsBranch:m="main",docsDir:y="",editLinkText:k}=a.value;if(!g)return null;const x=jf({docsRepo:g,docsBranch:m,docsDir:y,filePathRelative:c.value.filePathRelative,editLinkPattern:u.value.editLinkPattern??a.value.editLinkPattern});return x?{text:k??"Edit this page",link:x}:null})},n=()=>{const a=Fe(),c=pn(),u=ht();return R(()=>{var g,m;return!(u.value.lastUpdated??a.value.lastUpdated??!0)||!((g=c.value.git)!=null&&g.updatedTime)?null:new Date((m=c.value.git)==null?void 0:m.updatedTime).toLocaleString()})},i=()=>{const a=Fe(),c=pn(),u=ht();return R(()=>{var h;return u.value.contributors??a.value.contributors??!0?((h=c.value.git)==null?void 0:h.contributors)??null:null})},l=Fe(),o=t(),s=n(),r=i();return(a,c)=>{const u=Xt("ClientOnly");return z(),X("footer",Vp,[Y(o)?(z(),X("div",Up,[ie(bt,{class:"meta-item-label",item:Y(o)},null,8,["item"])])):Se("",!0),Y(s)?(z(),X("div",Gp,[fe("span",qp,Ie(Y(l).lastUpdatedText)+": ",1),ie(u,null,{default:He(()=>[fe("span",Kp,Ie(Y(s)),1)]),_:1})])):Se("",!0),Y(r)&&Y(r).length?(z(),X("div",Qp,[fe("span",Jp,Ie(Y(l).contributorsText)+": ",1),fe("span",Yp,[(z(!0),X(ye,null,jt(Y(r),(d,h)=>(z(),X(ye,{key:h},[fe("span",{class:"contributor",title:`email: ${d.email}`},Ie(d.name),9,Xp),h!==Y(r).length-1?(z(),X(ye,{key:0},[Ft(", ")],64)):Se("",!0)],64))),128))])])):Se("",!0)])}}}),eg=Ee(Zp,[["__file","PageMeta.vue"]]),tg=["aria-label"],ng={class:"inner"},ig={key:0,class:"prev"},lg={key:1,class:"next"},og=ge({__name:"PageNav",setup(e){const t=(u,d)=>d===!1?null:dt(d)?oo(u):Kl(d)?d:!1,n=(u,d,h)=>{const g=u.findIndex(m=>m.link===d);if(g!==-1){const m=u[g+h];return m!=null&&m.link?m:null}for(const m of u)if(m.children){const y=n(m.children,d,h);if(y)return y}return null},i=ht(),l=so(),o=ln(),s=nn(),r=R(()=>{const u=t(s,i.value.prev);return u!==!1?u:n(l.value,o.path,-1)}),a=R(()=>{const u=t(s,i.value.next);return u!==!1?u:n(l.value,o.path,1)}),c=R(()=>Fe().value.pageNavbarLabel??"page navigation");return(u,d)=>r.value||a.value?(z(),X("nav",{key:0,class:"page-nav","aria-label":c.value},[fe("p",ng,[r.value?(z(),X("span",ig,[ie(bt,{item:r.value},null,8,["item"])])):Se("",!0),a.value?(z(),X("span",lg,[ie(bt,{item:a.value},null,8,["item"])])):Se("",!0)])],8,tg)):Se("",!0)}}),sg=Ee(og,[["__file","PageNav.vue"]]),rg={class:"page"},ag={class:"theme-default-content"},cg=ge({__name:"Page",setup(e){return(t,n)=>{const i=Xt("Content");return z(),X("main",rg,[we(t.$slots,"top"),fe("div",ag,[we(t.$slots,"content-top"),ie(i),we(t.$slots,"content-bottom")]),ie(eg),ie(sg),we(t.$slots,"bottom")])}}}),ug=Ee(cg,[["__file","Page.vue"]]),dg={class:"sidebar-item-children"},hg=ge({__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(e){const t=e,{item:n,depth:i}=ji(t),l=ln(),o=nn(),s=R(()=>Jr(n.value,l)),r=R(()=>({"sidebar-item":!0,"sidebar-heading":i.value===0,active:s.value,collapsible:n.value.collapsible})),a=R(()=>n.value.collapsible?s.value:!0),[c,u]=mh(a.value),d=g=>{n.value.collapsible&&(g.preventDefault(),u())},h=o.afterEach(g=>{kn(()=>{c.value=a.value})});return Bi(()=>{h()}),(g,m)=>{var k;const y=Xt("SidebarItem",!0);return z(),X("li",null,[Y(n).link?(z(),xe(bt,{key:0,class:qe(r.value),item:Y(n)},null,8,["class","item"])):(z(),X("p",{key:1,tabindex:"0",class:qe(r.value),onClick:d,onKeydown:Au(d,["enter"])},[Ft(Ie(Y(n).text)+" ",1),Y(n).collapsible?(z(),X("span",{key:0,class:qe(["arrow",Y(c)?"down":"right"])},null,2)):Se("",!0)],34)),(k=Y(n).children)!=null&&k.length?(z(),xe(na,{key:2},{default:He(()=>[Ei(fe("ul",dg,[(z(!0),X(ye,null,jt(Y(n).children,x=>(z(),xe(y,{key:`${Y(i)}${x.text}${x.link}`,item:x,depth:Y(i)+1},null,8,["item","depth"]))),128))],512),[[Pi,Y(c)]])]),_:1})):Se("",!0)])}}}),fg=Ee(hg,[["__file","SidebarItem.vue"]]),pg={key:0,class:"sidebar-items"},gg=ge({__name:"SidebarItems",setup(e){const t=ln(),n=so();return Ve(()=>{Me(()=>t.hash,i=>{const l=document.querySelector(".sidebar");if(!l)return;const o=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${i}"]`);if(!o)return;const{top:s,height:r}=l.getBoundingClientRect(),{top:a,height:c}=o.getBoundingClientRect();as+r&&o.scrollIntoView(!1)})}),(i,l)=>Y(n).length?(z(),X("ul",pg,[(z(!0),X(ye,null,jt(Y(n),o=>(z(),xe(fg,{key:`${o.text}${o.link}`,item:o},null,8,["item"]))),128))])):Se("",!0)}}),mg=Ee(gg,[["__file","SidebarItems.vue"]]),vg={class:"sidebar"},bg=ge({__name:"Sidebar",setup(e){return(t,n)=>(z(),X("aside",vg,[ie(ia),we(t.$slots,"top"),ie(mg),we(t.$slots,"bottom")]))}}),wg=Ee(bg,[["__file","Sidebar.vue"]]),yg=ge({__name:"Layout",setup(e){const t=pn(),n=ht(),i=Fe(),l=R(()=>n.value.navbar!==!1&&i.value.navbar!==!1),o=so(),s=re(!1),r=k=>{s.value=typeof k=="boolean"?k:!s.value},a={x:0,y:0},c=k=>{a.x=k.changedTouches[0].clientX,a.y=k.changedTouches[0].clientY},u=k=>{const x=k.changedTouches[0].clientX-a.x,I=k.changedTouches[0].clientY-a.y;Math.abs(x)>Math.abs(I)&&Math.abs(x)>40&&(x>0&&a.x<=80?r(!0):r(!1))},d=R(()=>[{"no-navbar":!l.value,"no-sidebar":!o.value.length,"sidebar-open":s.value},n.value.pageClass]);let h;Ve(()=>{h=nn().afterEach(()=>{r(!1)})}),Di(()=>{h()});const g=Qr(),m=g.resolve,y=g.pending;return(k,x)=>(z(),X("div",{class:qe(["theme-container",d.value]),onTouchstart:c,onTouchend:u},[we(k.$slots,"navbar",{},()=>[l.value?(z(),xe(zp,{key:0,onToggleSidebar:r},{before:He(()=>[we(k.$slots,"navbar-before")]),after:He(()=>[we(k.$slots,"navbar-after")]),_:3})):Se("",!0)]),fe("div",{class:"sidebar-mask",onClick:x[0]||(x[0]=I=>r(!1))}),we(k.$slots,"sidebar",{},()=>[ie(wg,null,{top:He(()=>[we(k.$slots,"sidebar-top")]),bottom:He(()=>[we(k.$slots,"sidebar-bottom")]),_:3})]),we(k.$slots,"page",{},()=>[Y(n).home?(z(),xe(up,{key:0})):(z(),xe(ei,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:Y(m),onBeforeLeave:Y(y)},{default:He(()=>[(z(),xe(ug,{key:Y(t).path},{top:He(()=>[we(k.$slots,"page-top")]),"content-top":He(()=>[we(k.$slots,"page-content-top")]),"content-bottom":He(()=>[we(k.$slots,"page-content-bottom")]),bottom:He(()=>[we(k.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),kg=Ee(yg,[["__file","Layout.vue"]]),_g={class:"theme-container"},Cg={class:"page"},Eg={class:"theme-default-content"},xg=fe("h1",null,"404",-1),Sg=ge({__name:"NotFound",setup(e){const t=_n(),n=Fe(),i=n.value.notFound??["Not Found"],l=()=>i[Math.floor(Math.random()*i.length)],o=n.value.home??t.value,s=n.value.backToHome??"Back to home";return(r,a)=>(z(),X("div",_g,[fe("main",Cg,[fe("div",Eg,[xg,fe("blockquote",null,Ie(l()),1),ie(Y(ni),{to:Y(o)},{default:He(()=>[Ft(Ie(Y(s)),1)]),_:1},8,["to"])])])]))}}),Lg=Ee(Sg,[["__file","NotFound.vue"]]),Ig=yt({enhance({app:e,router:t}){ul("Badge")||e.component("Badge",Ef),ul("CodeGroup")||e.component("CodeGroup",xf),ul("CodeGroupItem")||e.component("CodeGroupItem",Lf),e.component("AutoLinkExternalIcon",()=>{const i=e.component("ExternalLinkIcon");return i?ce(i):null}),e.component("NavbarSearch",()=>{const i=e.component("Docsearch")||e.component("SearchBox");return i?ce(i):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...i)=>(await Qr().wait(),n(...i))},setup(){Pf(),Hf()},layouts:{Layout:kg,NotFound:Lg}}),Pg=e=>e instanceof Element?document.activeElement===e&&(["TEXTAREA","SELECT","INPUT"].includes(e.tagName)||e.hasAttribute("contenteditable")):!1,Ag=(e,t)=>t.some(n=>{if(dt(n))return n===e.key;const{key:i,ctrl:l=!1,shift:o=!1,alt:s=!1}=n;return i===e.key&&l===e.ctrlKey&&o===e.shiftKey&&s===e.altKey}),Tg=/[^\x00-\x7F]/,Wg=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),ks=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),_s=(e,t)=>{const n=t.join(" "),i=Wg(e);if(Tg.test(e))return i.some(s=>n.toLowerCase().indexOf(s)>-1);const l=e.endsWith(" ");return new RegExp(i.map((s,r)=>i.length===r+1&&!l?`(?=.*\\b${ks(s)})`:`(?=.*\\b${ks(s)}\\b)`).join("")+".+","gi").test(n)},Rg=({input:e,hotKeys:t})=>{if(t.value.length===0)return;const n=i=>{e.value&&Ag(i,t.value)&&!Pg(i.target)&&(i.preventDefault(),e.value.focus())};Ve(()=>{document.addEventListener("keydown",n)}),Bi(()=>{document.removeEventListener("keydown",n)})},Og=[{title:"",headers:[{level:2,title:"How to use this documentation",slug:"how-to-use-this-documentation",link:"#how-to-use-this-documentation",children:[{level:3,title:"Explain Like I'm 5",slug:"explain-like-i-m-5",link:"#explain-like-i-m-5",children:[]},{level:3,title:"Stand-alone chapters",slug:"stand-alone-chapters",link:"#stand-alone-chapters",children:[]},{level:3,title:"Search function",slug:"search-function",link:"#search-function",children:[]}]}],path:"/",pathLocale:"/",extraFields:[]},{title:"Contribution FAQ",headers:[{level:3,title:"How to donate to Wasabi Wallet?",slug:"how-to-donate-to-wasabi-wallet",link:"#how-to-donate-to-wasabi-wallet",children:[]},{level:2,title:"The Wasabikas",slug:"the-wasabikas",link:"#the-wasabikas",children:[{level:3,title:"Who is contributing to Wasabi already?",slug:"who-is-contributing-to-wasabi-already",link:"#who-is-contributing-to-wasabi-already",children:[]},{level:3,title:"Who reviews and merges the pull requests?",slug:"who-reviews-and-merges-the-pull-requests",link:"#who-reviews-and-merges-the-pull-requests",children:[]},{level:3,title:"What is on the future roadmap of Wasabi development?",slug:"what-is-on-the-future-roadmap-of-wasabi-development",link:"#what-is-on-the-future-roadmap-of-wasabi-development",children:[]}]},{level:2,title:"You can become a Wasabika",slug:"you-can-become-a-wasabika",link:"#you-can-become-a-wasabika",children:[{level:3,title:"How should I start contributing to Wasabi?",slug:"how-should-i-start-contributing-to-wasabi",link:"#how-should-i-start-contributing-to-wasabi",children:[]},{level:3,title:"Is there a bounty program?",slug:"is-there-a-bounty-program",link:"#is-there-a-bounty-program",children:[]},{level:3,title:"How can I report a bug?",slug:"how-can-i-report-a-bug",link:"#how-can-i-report-a-bug",children:[]},{level:3,title:"How can I request a feature?",slug:"how-can-i-request-a-feature",link:"#how-can-i-request-a-feature",children:[]},{level:3,title:"How can I get help and support?",slug:"how-can-i-get-help-and-support",link:"#how-can-i-get-help-and-support",children:[]},{level:3,title:"What does the Wasabi project need help with?",slug:"what-does-the-wasabi-project-need-help-with",link:"#what-does-the-wasabi-project-need-help-with",children:[]}]}],path:"/FAQ/FAQ-Contribution.html",pathLocale:"/",extraFields:[]},{title:"Bitcoin Privacy FAQ",headers:[{level:2,title:"Why Privacy matters",slug:"why-privacy-matters",link:"#why-privacy-matters",children:[{level:3,title:"I have nothing to hide, do I still need financial privacy?",slug:"i-have-nothing-to-hide-do-i-still-need-financial-privacy",link:"#i-have-nothing-to-hide-do-i-still-need-financial-privacy",children:[]},{level:3,title:"How is financial privacy an essential element to fungibility in Bitcoin?",slug:"how-is-financial-privacy-an-essential-element-to-fungibility-in-bitcoin",link:"#how-is-financial-privacy-an-essential-element-to-fungibility-in-bitcoin",children:[]},{level:3,title:"How is financial privacy essential for entrepreneurs?",slug:"how-is-financial-privacy-essential-for-entrepreneurs",link:"#how-is-financial-privacy-essential-for-entrepreneurs",children:[]},{level:3,title:"How is financial privacy essential for personal safety?",slug:"how-is-financial-privacy-essential-for-personal-safety",link:"#how-is-financial-privacy-essential-for-personal-safety",children:[]},{level:3,title:"How is financial privacy essential for human dignity?",slug:"how-is-financial-privacy-essential-for-human-dignity",link:"#how-is-financial-privacy-essential-for-human-dignity",children:[]}]},{level:2,title:"The Privacy of Bitcoin",slug:"the-privacy-of-bitcoin",link:"#the-privacy-of-bitcoin",children:[{level:3,title:"How is Bitcoin good in terms of privacy?",slug:"how-is-bitcoin-good-in-terms-of-privacy",link:"#how-is-bitcoin-good-in-terms-of-privacy",children:[]},{level:3,title:"How is Bitcoin bad in terms of privacy?",slug:"how-is-bitcoin-bad-in-terms-of-privacy",link:"#how-is-bitcoin-bad-in-terms-of-privacy",children:[]},{level:3,title:"Why is it important to run a full node?",slug:"why-is-it-important-to-run-a-full-node",link:"#why-is-it-important-to-run-a-full-node",children:[]},{level:3,title:"How does a full node protect my privacy?",slug:"how-does-a-full-node-protect-my-privacy",link:"#how-does-a-full-node-protect-my-privacy",children:[]},{level:3,title:"How can I set up a full node?",slug:"how-can-i-set-up-a-full-node",link:"#how-can-i-set-up-a-full-node",children:[]},{level:3,title:"Why is it important to use a new address for every payment?",slug:"why-is-it-important-to-use-a-new-address-for-every-payment",link:"#why-is-it-important-to-use-a-new-address-for-every-payment",children:[]},{level:3,title:"What is a coinjoin Sudoku?",slug:"what-is-a-coinjoin-sudoku",link:"#what-is-a-coinjoin-sudoku",children:[]}]},{level:2,title:"The Privacy of Tor",slug:"the-privacy-of-tor",link:"#the-privacy-of-tor",children:[{level:3,title:"How does Tor protect my network-level privacy?",slug:"how-does-tor-protect-my-network-level-privacy",link:"#how-does-tor-protect-my-network-level-privacy",children:[]},{level:3,title:"Why does Tor process keep running after closing Wasabi Wallet?",slug:"why-does-tor-process-keep-running-after-closing-wasabi-wallet",link:"#why-does-tor-process-keep-running-after-closing-wasabi-wallet",children:[]},{level:3,title:"My country/ISP is blocking/censoring Tor, how can I use Wasabi with Tor bridges?",slug:"my-country-isp-is-blocking-censoring-tor-how-can-i-use-wasabi-with-tor-bridges",link:"#my-country-isp-is-blocking-censoring-tor-how-can-i-use-wasabi-with-tor-bridges",children:[]}]}],path:"/FAQ/FAQ-GeneralBitcoinPrivacy.html",pathLocale:"/",extraFields:[]},{title:"Installation FAQ",headers:[{level:2,title:"Installing the Package",slug:"installing-the-package",link:"#installing-the-package",children:[{level:3,title:"Where can I download Wasabi?",slug:"where-can-i-download-wasabi",link:"#where-can-i-download-wasabi",children:[]},{level:3,title:"Why is it important to verify PGP signatures?",slug:"why-is-it-important-to-verify-pgp-signatures",link:"#why-is-it-important-to-verify-pgp-signatures",children:[]},{level:3,title:"How can I verify PGP signatures?",slug:"how-can-i-verify-pgp-signatures",link:"#how-can-i-verify-pgp-signatures",children:[]},{level:3,title:"How do I install Wasabi on Debian and Ubuntu?",slug:"how-do-i-install-wasabi-on-debian-and-ubuntu",link:"#how-do-i-install-wasabi-on-debian-and-ubuntu",children:[]},{level:3,title:"How do I install Wasabi on other Linux?",slug:"how-do-i-install-wasabi-on-other-linux",link:"#how-do-i-install-wasabi-on-other-linux",children:[]},{level:3,title:"How do I install Wasabi on Windows?",slug:"how-do-i-install-wasabi-on-windows",link:"#how-do-i-install-wasabi-on-windows",children:[]},{level:3,title:"How do I install Wasabi on macOS?",slug:"how-do-i-install-wasabi-on-macos",link:"#how-do-i-install-wasabi-on-macos",children:[]},{level:3,title:"Why are there two different packages for macOS (intel and Apple Silicon)?",slug:"why-are-there-two-different-packages-for-macos-intel-and-apple-silicon",link:"#why-are-there-two-different-packages-for-macos-intel-and-apple-silicon",children:[]},{level:3,title:"What happens when I install the wrong package for macOS?",slug:"what-happens-when-i-install-the-wrong-package-for-macos",link:"#what-happens-when-i-install-the-wrong-package-for-macos",children:[]},{level:3,title:"Do I need to install Tor separately?",slug:"do-i-need-to-install-tor-separately",link:"#do-i-need-to-install-tor-separately",children:[]},{level:3,title:"Can I use Wasabi on Tails?",slug:"can-i-use-wasabi-on-tails",link:"#can-i-use-wasabi-on-tails",children:[]},{level:3,title:"Can I use Wasabi on Whonix?",slug:"can-i-use-wasabi-on-whonix",link:"#can-i-use-wasabi-on-whonix",children:[]},{level:3,title:'What are the differences between the Debian/Ubuntu version and the "Other Linux" version?',slug:"what-are-the-differences-between-the-debian-ubuntu-version-and-the-other-linux-version",link:"#what-are-the-differences-between-the-debian-ubuntu-version-and-the-other-linux-version",children:[]}]},{level:2,title:"Update Wasabi",slug:"update-wasabi",link:"#update-wasabi",children:[{level:3,title:"Why should I update Wasabi?",slug:"why-should-i-update-wasabi",link:"#why-should-i-update-wasabi",children:[]},{level:3,title:"How do I check the current version of Wasabi?",slug:"how-do-i-check-the-current-version-of-wasabi",link:"#how-do-i-check-the-current-version-of-wasabi",children:[]},{level:3,title:"How do I know about a new version of Wasabi?",slug:"how-do-i-know-about-a-new-version-of-wasabi",link:"#how-do-i-know-about-a-new-version-of-wasabi",children:[]},{level:3,title:"How do I securely upgrade Wasabi?",slug:"how-do-i-securely-upgrade-wasabi",link:"#how-do-i-securely-upgrade-wasabi",children:[]},{level:3,title:"What does Auto download new version in the settings mean?",slug:"what-does-auto-download-new-version-in-the-settings-mean",link:"#what-does-auto-download-new-version-in-the-settings-mean",children:[]},{level:3,title:"How does the Auto download new version work?",slug:"how-does-the-auto-download-new-version-work",link:"#how-does-the-auto-download-new-version-work",children:[]}]},{level:2,title:"Advanced Installation",slug:"advanced-installation",link:"#advanced-installation",children:[{level:3,title:"How do I compile Wasabi from source?",slug:"how-do-i-compile-wasabi-from-source",link:"#how-do-i-compile-wasabi-from-source",children:[]},{level:3,title:"How can I verify the deterministic build?",slug:"how-can-i-verify-the-deterministic-build",link:"#how-can-i-verify-the-deterministic-build",children:[]},{level:3,title:"My antivirus marks Wasabi Wallet as a virus. Am I downloading the right software?",slug:"my-antivirus-marks-wasabi-wallet-as-a-virus-am-i-downloading-the-right-software",link:"#my-antivirus-marks-wasabi-wallet-as-a-virus-am-i-downloading-the-right-software",children:[]},{level:3,title:"Why is the executable called wassabee?",slug:"why-is-the-executable-called-wassabee",link:"#why-is-the-executable-called-wassabee",children:[]}]}],path:"/FAQ/FAQ-Installation.html",pathLocale:"/",extraFields:[]},{title:"Introduction FAQ",headers:[{level:2,title:"The Basics",slug:"the-basics",link:"#the-basics",children:[{level:3,title:"Who can use Wasabi?",slug:"who-can-use-wasabi",link:"#who-can-use-wasabi",children:[]},{level:3,title:"What is a coinjoin?",slug:"what-is-a-coinjoin",link:"#what-is-a-coinjoin",children:[]},{level:3,title:"Do I need to trust Wasabi with my coins?",slug:"do-i-need-to-trust-wasabi-with-my-coins",link:"#do-i-need-to-trust-wasabi-with-my-coins",children:[]},{level:3,title:"What is the privacy I get after mixing with Wasabi?",slug:"what-is-the-privacy-i-get-after-mixing-with-wasabi",link:"#what-is-the-privacy-i-get-after-mixing-with-wasabi",children:[]},{level:3,title:"Why is Wasabi Bitcoin-only?",slug:"why-is-wasabi-bitcoin-only",link:"#why-is-wasabi-bitcoin-only",children:[]},{level:3,title:"What is considered a sufficient anonymity score?",slug:"what-is-considered-a-sufficient-anonymity-score",link:"#what-is-considered-a-sufficient-anonymity-score",children:[]},{level:3,title:"Is there a way to check Wasabi's uptime status?",slug:"is-there-a-way-to-check-wasabi-s-uptime-status",link:"#is-there-a-way-to-check-wasabi-s-uptime-status",children:[]},{level:3,title:"What software supplies the block filters that Wasabi uses?",slug:"what-software-supplies-the-block-filters-that-wasabi-uses",link:"#what-software-supplies-the-block-filters-that-wasabi-uses",children:[]},{level:3,title:"Is the Backend's (Coordinator) code open-source?",slug:"is-the-backend-s-coordinator-code-open-source",link:"#is-the-backend-s-coordinator-code-open-source",children:[]},{level:3,title:"Is there an Android/iOs version?",slug:"is-there-an-android-ios-version",link:"#is-there-an-android-ios-version",children:[]},{level:3,title:"Where can I find Wasabi Wallet on social media?",slug:"where-can-i-find-wasabi-wallet-on-social-media",link:"#where-can-i-find-wasabi-wallet-on-social-media",children:[]}]},{level:2,title:"For advanced Wasabikas",slug:"for-advanced-wasabikas",link:"#for-advanced-wasabikas",children:[{level:3,title:"Can the coordinator attack me?",slug:"can-the-coordinator-attack-me",link:"#can-the-coordinator-attack-me",children:[]},{level:3,title:"What is the history of Wasabi?",slug:"what-is-the-history-of-wasabi",link:"#what-is-the-history-of-wasabi",children:[]},{level:3,title:"Why is Wasabi libre and open-source software?",slug:"why-is-wasabi-libre-and-open-source-software",link:"#why-is-wasabi-libre-and-open-source-software",children:[]},{level:3,title:"What is the general idea of WabiSabi coinjoin?",slug:"what-is-the-general-idea-of-wabisabi-coinjoin",link:"#what-is-the-general-idea-of-wabisabi-coinjoin",children:[]},{level:3,title:"What are the supported operating systems?",slug:"what-are-the-supported-operating-systems",link:"#what-are-the-supported-operating-systems",children:[]},{level:3,title:"What are the minimal requirements to run Wasabi?",slug:"what-are-the-minimal-requirements-to-run-wasabi",link:"#what-are-the-minimal-requirements-to-run-wasabi",children:[]}]}],path:"/FAQ/FAQ-Introduction.html",pathLocale:"/",extraFields:[]},{title:"Use of Wasabi FAQ",headers:[{level:2,title:"General",slug:"general",link:"#general",children:[{level:3,title:"How do I start using Wasabi?",slug:"how-do-i-start-using-wasabi",link:"#how-do-i-start-using-wasabi",children:[]},{level:3,title:"How do I generate a new wallet?",slug:"how-do-i-generate-a-new-wallet",link:"#how-do-i-generate-a-new-wallet",children:[]},{level:3,title:"Can I rename my Wallet?",slug:"can-i-rename-my-wallet",link:"#can-i-rename-my-wallet",children:[]},{level:3,title:"What is the password used for?",slug:"what-is-the-password-used-for",link:"#what-is-the-password-used-for",children:[]},{level:3,title:"What password should I use?",slug:"what-password-should-i-use",link:"#what-password-should-i-use",children:[]},{level:3,title:"Where can I find the Wasabi data folder?",slug:"where-can-i-find-the-wasabi-data-folder",link:"#where-can-i-find-the-wasabi-data-folder",children:[]},{level:3,title:"Can I spend my bitcoin without the password?",slug:"can-i-spend-my-bitcoin-without-the-password",link:"#can-i-spend-my-bitcoin-without-the-password",children:[]},{level:3,title:"Why BIP 38?",slug:"why-bip-38",link:"#why-bip-38",children:[]},{level:3,title:"What are the terms and conditions?",slug:"what-are-the-terms-and-conditions",link:"#what-are-the-terms-and-conditions",children:[]},{level:3,title:"Can I import a watch-only extended public key?",slug:"can-i-import-a-watch-only-extended-public-key",link:"#can-i-import-a-watch-only-extended-public-key",children:[]},{level:3,title:"What does the privacy progress mean?",slug:"what-does-the-privacy-progress-mean",link:"#what-does-the-privacy-progress-mean",children:[]},{level:3,title:"Why does the privacy progress change if I select a different coinjoin strategy?",slug:"why-does-the-privacy-progress-change-if-i-select-a-different-coinjoin-strategy",link:"#why-does-the-privacy-progress-change-if-i-select-a-different-coinjoin-strategy",children:[]},{level:3,title:"What does the bar with the colored segments mean?",slug:"what-does-the-bar-with-the-colored-segments-mean",link:"#what-does-the-bar-with-the-colored-segments-mean",children:[]},{level:3,title:"How can I display the fee in sats?",slug:"how-can-i-display-the-fee-in-sats",link:"#how-can-i-display-the-fee-in-sats",children:[]},{level:3,title:"What is the box (music box) at the bottom of the wallet's main view?",slug:"what-is-the-box-music-box-at-the-bottom-of-the-wallet-s-main-view",link:"#what-is-the-box-music-box-at-the-bottom-of-the-wallet-s-main-view",children:[]},{level:3,title:"Does Wasabi support Taproot?",slug:"does-wasabi-support-taproot",link:"#does-wasabi-support-taproot",children:[]}]},{level:2,title:"Synchronization",slug:"synchronization",link:"#synchronization",children:[{level:3,title:"What are BIP-158 block filters?",slug:"what-are-bip-158-block-filters",link:"#what-are-bip-158-block-filters",children:[]},{level:3,title:"How does Wasabi download a relevant block?",slug:"how-does-wasabi-download-a-relevant-block",link:"#how-does-wasabi-download-a-relevant-block",children:[]},{level:3,title:"How do I know if the synchronization is finished?",slug:"how-do-i-know-if-the-synchronization-is-finished",link:"#how-do-i-know-if-the-synchronization-is-finished",children:[]},{level:3,title:"Why does the Tor status have a warning triangle icon?",slug:"why-does-the-tor-status-have-a-warning-triangle-icon",link:"#why-does-the-tor-status-have-a-warning-triangle-icon",children:[]},{level:3,title:"How long does the initial, and a subsequent synchronization take?",slug:"how-long-does-the-initial-and-a-subsequent-synchronization-take",link:"#how-long-does-the-initial-and-a-subsequent-synchronization-take",children:[]},{level:3,title:"Can I shutdown my computer while a wallet is synchronizing?",slug:"can-i-shutdown-my-computer-while-a-wallet-is-synchronizing",link:"#can-i-shutdown-my-computer-while-a-wallet-is-synchronizing",children:[]},{level:3,title:"How do I resync (rescan) my wallet?",slug:"how-do-i-resync-rescan-my-wallet",link:"#how-do-i-resync-rescan-my-wallet",children:[]},{level:3,title:"Can Wasabi work with a pruned bitcoin node?",slug:"can-wasabi-work-with-a-pruned-bitcoin-node",link:"#can-wasabi-work-with-a-pruned-bitcoin-node",children:[]},{level:3,title:"Can I run a Wasabi headless daemon?",slug:"can-i-run-a-wasabi-headless-daemon",link:"#can-i-run-a-wasabi-headless-daemon",children:[]}]},{level:2,title:"Receive",slug:"receive",link:"#receive",children:[{level:3,title:"Why is it bad to re-use addresses?",slug:"why-is-it-bad-to-re-use-addresses",link:"#why-is-it-bad-to-re-use-addresses",children:[]},{level:3,title:"How do I generate a new receiving address?",slug:"how-do-i-generate-a-new-receiving-address",link:"#how-do-i-generate-a-new-receiving-address",children:[]},{level:3,title:"Where can I find previously generated addresses?",slug:"where-can-i-find-previously-generated-addresses",link:"#where-can-i-find-previously-generated-addresses",children:[]},{level:3,title:"What is the gap limit?",slug:"what-is-the-gap-limit",link:"#what-is-the-gap-limit",children:[]},{level:3,title:"How do I change the gap limit of a wallet?",slug:"how-do-i-change-the-gap-limit-of-a-wallet",link:"#how-do-i-change-the-gap-limit-of-a-wallet",children:[]},{level:3,title:"Why do I have to label my address?",slug:"why-do-i-have-to-label-my-address",link:"#why-do-i-have-to-label-my-address",children:[]},{level:3,title:"How can I change the label of my receive address?",slug:"how-can-i-change-the-label-of-my-receive-address",link:"#how-can-i-change-the-label-of-my-receive-address",children:[]},{level:3,title:"How can I edit the labels of my address after a transaction has gone through?",slug:"how-can-i-edit-the-labels-of-my-address-after-a-transaction-has-gone-through",link:"#how-can-i-edit-the-labels-of-my-address-after-a-transaction-has-gone-through",children:[]},{level:3,title:"Are there privacy concerns regarding whom I send my address?",slug:"are-there-privacy-concerns-regarding-whom-i-send-my-address",link:"#are-there-privacy-concerns-regarding-whom-i-send-my-address",children:[]},{level:3,title:"Why does Wasabi only use SegWit bech32 addresses?",slug:"why-does-wasabi-only-use-segwit-bech32-addresses",link:"#why-does-wasabi-only-use-segwit-bech32-addresses",children:[]},{level:3,title:"Why do some third party services say the Wasabi address is invalid?",slug:"why-do-some-third-party-services-say-the-wasabi-address-is-invalid",link:"#why-do-some-third-party-services-say-the-wasabi-address-is-invalid",children:[]},{level:3,title:"Where can I find my address QR code?",slug:"where-can-i-find-my-address-qr-code",link:"#where-can-i-find-my-address-qr-code",children:[]},{level:3,title:"What derivation paths does Wasabi use?",slug:"what-derivation-paths-does-wasabi-use",link:"#what-derivation-paths-does-wasabi-use",children:[]},{level:3,title:"Can I generate a multi signature script?",slug:"can-i-generate-a-multi-signature-script",link:"#can-i-generate-a-multi-signature-script",children:[]},{level:3,title:"How does Wasabi know of incoming transactions to the mempool?",slug:"how-does-wasabi-know-of-incoming-transactions-to-the-mempool",link:"#how-does-wasabi-know-of-incoming-transactions-to-the-mempool",children:[]},{level:3,title:"Can I export all my receive addresses?",slug:"can-i-export-all-my-receive-addresses",link:"#can-i-export-all-my-receive-addresses",children:[]}]},{level:2,title:"Send",slug:"send",link:"#send",children:[{level:3,title:"How do I set a destination address?",slug:"how-do-i-set-a-destination-address",link:"#how-do-i-set-a-destination-address",children:[]},{level:3,title:"How do I set the payment amount?",slug:"how-do-i-set-the-payment-amount",link:"#how-do-i-set-the-payment-amount",children:[]},{level:3,title:"Can I pay to many addresses?",slug:"can-i-pay-to-many-addresses",link:"#can-i-pay-to-many-addresses",children:[]},{level:3,title:"Can I set a custom change address?",slug:"can-i-set-a-custom-change-address",link:"#can-i-set-a-custom-change-address",children:[]},{level:3,title:"Does Wasabi support sending RBF?",slug:"does-wasabi-support-sending-rbf",link:"#does-wasabi-support-sending-rbf",children:[]},{level:3,title:"Why does Wasabi choose a new random node every time I send a transaction?",slug:"why-does-wasabi-choose-a-new-random-node-every-time-i-send-a-transaction",link:"#why-does-wasabi-choose-a-new-random-node-every-time-i-send-a-transaction",children:[]},{level:3,title:"What fee should I select?",slug:"what-fee-should-i-select",link:"#what-fee-should-i-select",children:[]},{level:3,title:"How do I set custom fee rate?",slug:"how-do-i-set-custom-fee-rate",link:"#how-do-i-set-custom-fee-rate",children:[]},{level:3,title:"How does Wasabi select which coins to send?",slug:"how-does-wasabi-select-which-coins-to-send",link:"#how-does-wasabi-select-which-coins-to-send",children:[]},{level:3,title:"How is the transaction broadcast?",slug:"how-is-the-transaction-broadcast",link:"#how-is-the-transaction-broadcast",children:[]},{level:3,title:"What is the cluster history?",slug:"what-is-the-cluster-history",link:"#what-is-the-cluster-history",children:[]},{level:3,title:"Why Wasabi did not send some of my selected coins?",slug:"why-wasabi-did-not-send-some-of-my-selected-coins",link:"#why-wasabi-did-not-send-some-of-my-selected-coins",children:[]},{level:3,title:"How can I bump the transaction fee with child pays for parent (CPFP)?",slug:"how-can-i-bump-the-transaction-fee-with-child-pays-for-parent-cpfp",link:"#how-can-i-bump-the-transaction-fee-with-child-pays-for-parent-cpfp",children:[]},{level:3,title:"How can I speed up a pending/unconfirmed transaction (CPFP/RBF)?",slug:"how-can-i-speed-up-a-pending-unconfirmed-transaction-cpfp-rbf",link:"#how-can-i-speed-up-a-pending-unconfirmed-transaction-cpfp-rbf",children:[]},{level:3,title:"How can I cancel a pending/unconfirmed transaction?",slug:"how-can-i-cancel-a-pending-unconfirmed-transaction",link:"#how-can-i-cancel-a-pending-unconfirmed-transaction",children:[]},{level:3,title:"Why is there no Send button, only the Receive button is displayed?",slug:"why-is-there-no-send-button-only-the-receive-button-is-displayed",link:"#why-is-there-no-send-button-only-the-receive-button-is-displayed",children:[]},{level:3,title:"Can I send (privately) from my wallet when the privacy progress is below 100%?",slug:"can-i-send-privately-from-my-wallet-when-the-privacy-progress-is-below-100",link:"#can-i-send-privately-from-my-wallet-when-the-privacy-progress-is-below-100",children:[]}]},{level:2,title:"CoinJoin",slug:"coinjoin",link:"#coinjoin",children:[{level:3,title:"What's the legal status of Wasabi/CoinJoin?",slug:"what-s-the-legal-status-of-wasabi-coinjoin",link:"#what-s-the-legal-status-of-wasabi-coinjoin",children:[]},{level:3,title:"What is the minimum amount required to coinjoin?",slug:"what-is-the-minimum-amount-required-to-coinjoin",link:"#what-is-the-minimum-amount-required-to-coinjoin",children:[]},{level:3,title:"What is the maximum amount I can coinjoin?",slug:"what-is-the-maximum-amount-i-can-coinjoin",link:"#what-is-the-maximum-amount-i-can-coinjoin",children:[]},{level:3,title:"What are the fees for the coinjoin?",slug:"what-are-the-fees-for-the-coinjoin",link:"#what-are-the-fees-for-the-coinjoin",children:[]},{level:3,title:"What is the anonymity set?",slug:"what-is-the-anonymity-set",link:"#what-is-the-anonymity-set",children:[]},{level:3,title:"What is the anonymity score?",slug:"what-is-the-anonymity-score",link:"#what-is-the-anonymity-score",children:[]},{level:3,title:"What is the difference between anonymity set and anonymity score?",slug:"what-is-the-difference-between-anonymity-set-and-anonymity-score",link:"#what-is-the-difference-between-anonymity-set-and-anonymity-score",children:[]},{level:3,title:"What are the equal denominations created in a coinjoin round?",slug:"what-are-the-equal-denominations-created-in-a-coinjoin-round",link:"#what-are-the-equal-denominations-created-in-a-coinjoin-round",children:[]},{level:3,title:"What is happening in the input registration phase?",slug:"what-is-happening-in-the-input-registration-phase",link:"#what-is-happening-in-the-input-registration-phase",children:[]},{level:3,title:"What is happening in the connection confirmation phase?",slug:"what-is-happening-in-the-connection-confirmation-phase",link:"#what-is-happening-in-the-connection-confirmation-phase",children:[]},{level:3,title:"What is happening in the output registration phase?",slug:"what-is-happening-in-the-output-registration-phase",link:"#what-is-happening-in-the-output-registration-phase",children:[]},{level:3,title:"What is happening in the signing phase?",slug:"what-is-happening-in-the-signing-phase",link:"#what-is-happening-in-the-signing-phase",children:[]},{level:3,title:"What is happening during the blame round?",slug:"what-is-happening-during-the-blame-round",link:"#what-is-happening-during-the-blame-round",children:[]},{level:3,title:"What is happening in the broadcasting phase?",slug:"what-is-happening-in-the-broadcasting-phase",link:"#what-is-happening-in-the-broadcasting-phase",children:[]},{level:3,title:"Is there any additional anonymity using multiple wallets for CoinJoins?",slug:"is-there-any-additional-anonymity-using-multiple-wallets-for-coinjoins",link:"#is-there-any-additional-anonymity-using-multiple-wallets-for-coinjoins",children:[]},{level:3,title:"How is the anonymity set target determined for CoinJoins?",slug:"how-is-the-anonymity-set-target-determined-for-coinjoins",link:"#how-is-the-anonymity-set-target-determined-for-coinjoins",children:[]},{level:3,title:"I'd like to experience coinjoin but I'm not comfortable using real Bitcoin. What can I do?",slug:"i-d-like-to-experience-coinjoin-but-i-m-not-comfortable-using-real-bitcoin-what-can-i-do",link:"#i-d-like-to-experience-coinjoin-but-i-m-not-comfortable-using-real-bitcoin-what-can-i-do",children:[]},{level:3,title:"Does Wasabi have to stay on during coinjoin?",slug:"does-wasabi-have-to-stay-on-during-coinjoin",link:"#does-wasabi-have-to-stay-on-during-coinjoin",children:[]},{level:3,title:"What if there's a power outage during CoinJoin? Do I lose my coins?",slug:"what-if-there-s-a-power-outage-during-coinjoin-do-i-lose-my-coins",link:"#what-if-there-s-a-power-outage-during-coinjoin-do-i-lose-my-coins",children:[]},{level:3,title:"How much anonymity set do I need?",slug:"how-much-anonymity-set-do-i-need",link:"#how-much-anonymity-set-do-i-need",children:[]},{level:3,title:"How does my wallet communicate with the Wasabi coordinator server?",slug:"how-does-my-wallet-communicate-with-the-wasabi-coordinator-server",link:"#how-does-my-wallet-communicate-with-the-wasabi-coordinator-server",children:[]},{level:3,title:"What is the address of the coordinator?",slug:"what-is-the-address-of-the-coordinator",link:"#what-is-the-address-of-the-coordinator",children:[]},{level:3,title:"What is the maximum number of coins that can be registered in a coinjoin?",slug:"what-is-the-maximum-number-of-coins-that-can-be-registered-in-a-coinjoin",link:"#what-is-the-maximum-number-of-coins-that-can-be-registered-in-a-coinjoin",children:[]},{level:3,title:"How many coins/outputs do I get from a coinjoin?",slug:"how-many-coins-outputs-do-i-get-from-a-coinjoin",link:"#how-many-coins-outputs-do-i-get-from-a-coinjoin",children:[]},{level:3,title:"Can I manually select which coins to register for coinjoin?",slug:"can-i-manually-select-which-coins-to-register-for-coinjoin",link:"#can-i-manually-select-which-coins-to-register-for-coinjoin",children:[]},{level:3,title:"How to exclude/freeze coins from coinjoin?",slug:"how-to-exclude-freeze-coins-from-coinjoin",link:"#how-to-exclude-freeze-coins-from-coinjoin",children:[]},{level:3,title:"How long does it take to make my wallet 100% private?",slug:"how-long-does-it-take-to-make-my-wallet-100-private",link:"#how-long-does-it-take-to-make-my-wallet-100-private",children:[]},{level:3,title:"What coinjoin strategy should I select?",slug:"what-coinjoin-strategy-should-i-select",link:"#what-coinjoin-strategy-should-i-select",children:[]},{level:3,title:"What is the coinjoin strategy?",slug:"what-is-the-coinjoin-strategy",link:"#what-is-the-coinjoin-strategy",children:[]},{level:3,title:"What are the differences/settings per coinjoin strategy?",slug:"what-are-the-differences-settings-per-coinjoin-strategy",link:"#what-are-the-differences-settings-per-coinjoin-strategy",children:[]},{level:3,title:"What does the Auto-start coinjoin threshold mean in the coinjoin settings?",slug:"what-does-the-auto-start-coinjoin-threshold-mean-in-the-coinjoin-settings",link:"#what-does-the-auto-start-coinjoin-threshold-mean-in-the-coinjoin-settings",children:[]},{level:3,title:"What does the Red coin isolation mean in the coinjoin settings?",slug:"what-does-the-red-coin-isolation-mean-in-the-coinjoin-settings",link:"#what-does-the-red-coin-isolation-mean-in-the-coinjoin-settings",children:[]},{level:3,title:"Do coinjoin transactions signal RBF?",slug:"do-coinjoin-transactions-signal-rbf",link:"#do-coinjoin-transactions-signal-rbf",children:[]},{level:3,title:"Why do my coins occasionally get banned from participating in CoinJoin?",slug:"why-do-my-coins-occasionally-get-banned-from-participating-in-coinjoin",link:"#why-do-my-coins-occasionally-get-banned-from-participating-in-coinjoin",children:[]}]},{level:2,title:"Backup and Recovery",slug:"backup-and-recovery",link:"#backup-and-recovery",children:[{level:3,title:"How do I back up my mnemonic words?",slug:"how-do-i-back-up-my-mnemonic-words",link:"#how-do-i-back-up-my-mnemonic-words",children:[]},{level:3,title:"How do I back up my wallet file?",slug:"how-do-i-back-up-my-wallet-file",link:"#how-do-i-back-up-my-wallet-file",children:[]},{level:3,title:"What do I need to recover my wallet?",slug:"what-do-i-need-to-recover-my-wallet",link:"#what-do-i-need-to-recover-my-wallet",children:[]},{level:3,title:"Can I recover my wallet without the password?",slug:"can-i-recover-my-wallet-without-the-password",link:"#can-i-recover-my-wallet-without-the-password",children:[]},{level:3,title:"What should I do if I forget my password?",slug:"what-should-i-do-if-i-forget-my-password",link:"#what-should-i-do-if-i-forget-my-password",children:[]},{level:3,title:"I lost the recovery words but I still have the .json file and the password. Is my wallet still recoverable?",slug:"i-lost-the-recovery-words-but-i-still-have-the-json-file-and-the-password-is-my-wallet-still-recoverable",link:"#i-lost-the-recovery-words-but-i-still-have-the-json-file-and-the-password-is-my-wallet-still-recoverable",children:[]},{level:3,title:"Can I verify the Recovery Words of an existing wallet?",slug:"can-i-verify-the-recovery-words-of-an-existing-wallet",link:"#can-i-verify-the-recovery-words-of-an-existing-wallet",children:[]}]},{level:2,title:"Hardware Wallet",slug:"hardware-wallet",link:"#hardware-wallet",children:[{level:3,title:"What hardware wallets does Wasabi support?",slug:"what-hardware-wallets-does-wasabi-support",link:"#what-hardware-wallets-does-wasabi-support",children:[]},{level:3,title:"Why does Wasabi use the Hardware Wallet Interface?",slug:"why-does-wasabi-use-the-hardware-wallet-interface",link:"#why-does-wasabi-use-the-hardware-wallet-interface",children:[]},{level:3,title:"Does Wasabi support the hidden wallets of hardware wallets?",slug:"does-wasabi-support-the-hidden-wallets-of-hardware-wallets",link:"#does-wasabi-support-the-hidden-wallets-of-hardware-wallets",children:[]},{level:3,title:"How can I generate a Wasabi skeleton wallet file in ColdCard?",slug:"how-can-i-generate-a-wasabi-skeleton-wallet-file-in-coldcard",link:"#how-can-i-generate-a-wasabi-skeleton-wallet-file-in-coldcard",children:[]},{level:3,title:"How can I import the Wasabi skeleton wallet file?",slug:"how-can-i-import-the-wasabi-skeleton-wallet-file",link:"#how-can-i-import-the-wasabi-skeleton-wallet-file",children:[]},{level:3,title:"How can I generate a receiving address of my hardware wallet?",slug:"how-can-i-generate-a-receiving-address-of-my-hardware-wallet",link:"#how-can-i-generate-a-receiving-address-of-my-hardware-wallet",children:[]},{level:3,title:"How can I sign a transaction with a USB connected hardware wallet?",slug:"how-can-i-sign-a-transaction-with-a-usb-connected-hardware-wallet",link:"#how-can-i-sign-a-transaction-with-a-usb-connected-hardware-wallet",children:[]},{level:3,title:"How can I build and export a transaction to ColdCard?",slug:"how-can-i-build-and-export-a-transaction-to-coldcard",link:"#how-can-i-build-and-export-a-transaction-to-coldcard",children:[]},{level:3,title:"How can I sign a transaction on the ColdCard?",slug:"how-can-i-sign-a-transaction-on-the-coldcard",link:"#how-can-i-sign-a-transaction-on-the-coldcard",children:[]},{level:3,title:"How can I import and broadcast a final transaction from ColdCard?",slug:"how-can-i-import-and-broadcast-a-final-transaction-from-coldcard",link:"#how-can-i-import-and-broadcast-a-final-transaction-from-coldcard",children:[]},{level:3,title:"Can I coinjoin bitcoins on my hardware wallet?",slug:"can-i-coinjoin-bitcoins-on-my-hardware-wallet",link:"#can-i-coinjoin-bitcoins-on-my-hardware-wallet",children:[]},{level:3,title:"Does Ledger Live send my public keys and addresses to a third party server?",slug:"does-ledger-live-send-my-public-keys-and-addresses-to-a-third-party-server",link:"#does-ledger-live-send-my-public-keys-and-addresses-to-a-third-party-server",children:[]},{level:3,title:"After I coinjoined my coins and reached 100% privacy, I sent them to my hardware wallet and now the coins have anonscore 1. Why?",slug:"after-i-coinjoined-my-coins-and-reached-100-privacy-i-sent-them-to-my-hardware-wallet-and-now-the-coins-have-anonscore-1-why",link:"#after-i-coinjoined-my-coins-and-reached-100-privacy-i-sent-them-to-my-hardware-wallet-and-now-the-coins-have-anonscore-1-why",children:[]},{level:3,title:"Can I use Trezor One with Wasabi?",slug:"can-i-use-trezor-one-with-wasabi",link:"#can-i-use-trezor-one-with-wasabi",children:[]},{level:3,title:"Can I use BitBox with Wasabi?",slug:"can-i-use-bitbox-with-wasabi",link:"#can-i-use-bitbox-with-wasabi",children:[]},{level:3,title:"How can I type in the passphrase of my Trezor T?",slug:"how-can-i-type-in-the-passphrase-of-my-trezor-t",link:"#how-can-i-type-in-the-passphrase-of-my-trezor-t",children:[]},{level:3,title:"I have coinjoined with a Trezor device on Trezor Suite, but in Wasabi I cannot see my coins?",slug:"i-have-coinjoined-with-a-trezor-device-on-trezor-suite-but-in-wasabi-i-cannot-see-my-coins",link:"#i-have-coinjoined-with-a-trezor-device-on-trezor-suite-but-in-wasabi-i-cannot-see-my-coins",children:[]},{level:3,title:"How can I use Hardware Wallets on Linux (udev rules)?",slug:"how-can-i-use-hardware-wallets-on-linux-udev-rules",link:"#how-can-i-use-hardware-wallets-on-linux-udev-rules",children:[]}]},{level:2,title:"History",slug:"history",link:"#history",children:[{level:3,title:"How can I check the transactions history?",slug:"how-can-i-check-the-transactions-history",link:"#how-can-i-check-the-transactions-history",children:[]},{level:3,title:"How can I see coinjoins in the history list?",slug:"how-can-i-see-coinjoins-in-the-history-list",link:"#how-can-i-see-coinjoins-in-the-history-list",children:[]},{level:3,title:"Can I sort the history items?",slug:"can-i-sort-the-history-items",link:"#can-i-sort-the-history-items",children:[]},{level:3,title:"Can I search for a transaction ID in the history?",slug:"can-i-search-for-a-transaction-id-in-the-history",link:"#can-i-search-for-a-transaction-id-in-the-history",children:[]},{level:3,title:"Can I export a list of transactions?",slug:"can-i-export-a-list-of-transactions",link:"#can-i-export-a-list-of-transactions",children:[]}]},{level:2,title:"Settings",slug:"settings",link:"#settings",children:[{level:3,title:"How do I connect my own full node to Wasabi?",slug:"how-do-i-connect-my-own-full-node-to-wasabi",link:"#how-do-i-connect-my-own-full-node-to-wasabi",children:[]},{level:3,title:"How can I turn off Tor?",slug:"how-can-i-turn-off-tor",link:"#how-can-i-turn-off-tor",children:[]},{level:3,title:"How can I change the anonymity score target?",slug:"how-can-i-change-the-anonymity-score-target",link:"#how-can-i-change-the-anonymity-score-target",children:[]},{level:3,title:"What is the dust threshold?",slug:"what-is-the-dust-threshold",link:"#what-is-the-dust-threshold",children:[]},{level:3,title:"Where can I find the logs?",slug:"where-can-i-find-the-logs",link:"#where-can-i-find-the-logs",children:[]},{level:3,title:"How to activate/deactivate discreet mode?",slug:"how-to-activate-deactivate-discreet-mode",link:"#how-to-activate-deactivate-discreet-mode",children:[]},{level:3,title:"How can I change to the white theme?",slug:"how-can-i-change-to-the-white-theme",link:"#how-can-i-change-to-the-white-theme",children:[]}]},{level:2,title:"Coin Control Best Practices",slug:"coin-control-best-practices",link:"#coin-control-best-practices",children:[{level:3,title:"What are coins?",slug:"what-are-coins",link:"#what-are-coins",children:[]},{level:3,title:"How can I enable (manual) coin control?",slug:"how-can-i-enable-manual-coin-control",link:"#how-can-i-enable-manual-coin-control",children:[]},{level:3,title:"How do I select coins for spending?",slug:"how-do-i-select-coins-for-spending",link:"#how-do-i-select-coins-for-spending",children:[]},{level:3,title:"Can I consolidate anonset coins?",slug:"can-i-consolidate-anonset-coins",link:"#can-i-consolidate-anonset-coins",children:[]},{level:3,title:"How can I send my anonset coins to my hardware wallet?",slug:"how-can-i-send-my-anonset-coins-to-my-hardware-wallet",link:"#how-can-i-send-my-anonset-coins-to-my-hardware-wallet",children:[]},{level:3,title:"What can I do with small change?",slug:"what-can-i-do-with-small-change",link:"#what-can-i-do-with-small-change",children:[]}]},{level:2,title:"Music Box",slug:"music-box",link:"#music-box",children:[{level:3,title:"What does Awaiting cheaper coinjoins mean?",slug:"what-does-awaiting-cheaper-coinjoins-mean",link:"#what-does-awaiting-cheaper-coinjoins-mean",children:[]},{level:3,title:"What does Awaiting the blame round mean?",slug:"what-does-awaiting-the-blame-round-mean",link:"#what-does-awaiting-the-blame-round-mean",children:[]},{level:3,title:"What does Insufficient funds eligible for coinjoin mean?",slug:"what-does-insufficient-funds-eligible-for-coinjoin-mean",link:"#what-does-insufficient-funds-eligible-for-coinjoin-mean",children:[]},{level:3,title:"What does Some funds are rejected from coinjoining mean?",slug:"what-does-some-funds-are-rejected-from-coinjoining-mean",link:"#what-does-some-funds-are-rejected-from-coinjoining-mean",children:[]}]},{level:2,title:"Buy Anything Button",slug:"buy-anything-button",link:"#buy-anything-button",children:[{level:3,title:"What is the Buy Anything Button?",slug:"what-is-the-buy-anything-button",link:"#what-is-the-buy-anything-button",children:[]},{level:3,title:"How does the Buy Anything Button work?",slug:"how-does-the-buy-anything-button-work",link:"#how-does-the-buy-anything-button-work",children:[]},{level:3,title:"Does the Buy Anything Button hurt my privacy?",slug:"does-the-buy-anything-button-hurt-my-privacy",link:"#does-the-buy-anything-button-hurt-my-privacy",children:[]},{level:3,title:"What can I order and for whom is this available?",slug:"what-can-i-order-and-for-whom-is-this-available",link:"#what-can-i-order-and-for-whom-is-this-available",children:[]}]},{level:2,title:"Advanced Usage",slug:"advanced-usage",link:"#advanced-usage",children:[{level:3,title:"Can I change the default ports for the Wasabi's bundled Tor?",slug:"can-i-change-the-default-ports-for-the-wasabi-s-bundled-tor",link:"#can-i-change-the-default-ports-for-the-wasabi-s-bundled-tor",children:[]},{level:3,title:"Where does the BTC exchange rate come from?",slug:"where-does-the-btc-exchange-rate-come-from",link:"#where-does-the-btc-exchange-rate-come-from",children:[]}]}],path:"/FAQ/FAQ-UseWasabi.html",pathLocale:"/",extraFields:[]},{title:"Frequently Asked Questions",headers:[{level:2,title:"Chapters",slug:"chapters",link:"#chapters",children:[]}],path:"/FAQ/",pathLocale:"/",extraFields:[]},{title:"Contribution Checklist",headers:[{level:2,title:"Who is a contributor?",slug:"who-is-a-contributor",link:"#who-is-a-contributor",children:[]},{level:2,title:"Say hello and get started",slug:"say-hello-and-get-started",link:"#say-hello-and-get-started",children:[]},{level:2,title:"Learn how Wasabikas work",slug:"learn-how-wasabikas-work",link:"#learn-how-wasabikas-work",children:[]},{level:2,title:"What to work on",slug:"what-to-work-on",link:"#what-to-work-on",children:[{level:3,title:"Education Contributor",slug:"education-contributor",link:"#education-contributor",children:[]},{level:3,title:"GitHub Contributor",slug:"github-contributor",link:"#github-contributor",children:[]}]}],path:"/building-wasabi/ContributionChecklist.html",pathLocale:"/",extraFields:[]},{title:"MIT License",headers:[],path:"/building-wasabi/LICENSE.html",pathLocale:"/",extraFields:[]},{title:"Building Wasabi",headers:[{level:2,title:"Chapters",slug:"chapters",link:"#chapters",children:[{level:3,title:"Contributing to Wasabi",slug:"contributing-to-wasabi",link:"#contributing-to-wasabi",children:[]},{level:3,title:"Advanced",slug:"advanced",link:"#advanced",children:[]}]}],path:"/building-wasabi/",pathLocale:"/",extraFields:[]},{title:"Security Policy",headers:[],path:"/building-wasabi/Security.html",pathLocale:"/",extraFields:[]},{title:"Getting Started",headers:[{level:2,title:"Download Wasabi",slug:"download-wasabi",link:"#download-wasabi",children:[]},{level:2,title:"Verify the Download",slug:"verify-the-download",link:"#verify-the-download",children:[]},{level:2,title:"Install Wasabi",slug:"install-wasabi",link:"#install-wasabi",children:[]},{level:2,title:"Welcome Screen",slug:"welcome-screen",link:"#welcome-screen",children:[]},{level:2,title:"Add Wallet",slug:"add-wallet",link:"#add-wallet",children:[]},{level:2,title:"Receive bitcoin",slug:"receive-bitcoin",link:"#receive-bitcoin",children:[]},{level:2,title:"Coinjoin",slug:"coinjoin",link:"#coinjoin",children:[]},{level:2,title:"Funds 100% private",slug:"funds-100-private",link:"#funds-100-private",children:[]},{level:2,title:"Use the private bitcoin",slug:"use-the-private-bitcoin",link:"#use-the-private-bitcoin",children:[]}],path:"/getting-started/",pathLocale:"/",extraFields:[]},{title:"Bitcoin in general",headers:[{level:2,title:"Bitcoin in general",slug:"bitcoin-in-general",link:"#bitcoin-in-general",children:[{level:3,title:"Address",slug:"address",link:"#address",children:[]},{level:3,title:"Bitcoin",slug:"bitcoin",link:"#bitcoin",children:[]},{level:3,title:"Bitcoin Core",slug:"bitcoin-core",link:"#bitcoin-core",children:[]},{level:3,title:"Bitcoin Improvement Proposal (BIP)",slug:"bitcoin-improvement-proposal-bip",link:"#bitcoin-improvement-proposal-bip",children:[]},{level:3,title:"Bitcoin Knots",slug:"bitcoin-knots",link:"#bitcoin-knots",children:[]},{level:3,title:"Block",slug:"block",link:"#block",children:[]},{level:3,title:"Blockchain",slug:"blockchain",link:"#blockchain",children:[]},{level:3,title:"Change",slug:"change",link:"#change",children:[]},{level:3,title:"Child Pays For Parent (CPFP)",slug:"child-pays-for-parent-cpfp",link:"#child-pays-for-parent-cpfp",children:[]},{level:3,title:"Coinbase",slug:"coinbase",link:"#coinbase",children:[]},{level:3,title:"Coinbase Transaction",slug:"coinbase-transaction",link:"#coinbase-transaction",children:[]},{level:3,title:"Cold Storage",slug:"cold-storage",link:"#cold-storage",children:[]},{level:3,title:"Confirmations",slug:"confirmations",link:"#confirmations",children:[]},{level:3,title:"Consensus",slug:"consensus",link:"#consensus",children:[]},{level:3,title:"Consensus Rules",slug:"consensus-rules",link:"#consensus-rules",children:[]},{level:3,title:"Custodial (Wallet or Mixer)",slug:"custodial-wallet-or-mixer",link:"#custodial-wallet-or-mixer",children:[]},{level:3,title:"Difficulty",slug:"difficulty",link:"#difficulty",children:[]},{level:3,title:"Difficulty Retargeting (Difficulty Adjustment)",slug:"difficulty-retargeting-difficulty-adjustment",link:"#difficulty-retargeting-difficulty-adjustment",children:[]},{level:3,title:"Difficulty Target",slug:"difficulty-target",link:"#difficulty-target",children:[]},{level:3,title:"ECDSA",slug:"ecdsa",link:"#ecdsa",children:[]},{level:3,title:"Fork",slug:"fork",link:"#fork",children:[]},{level:3,title:"Full node",slug:"full-node",link:"#full-node",children:[]},{level:3,title:"Fungibility",slug:"fungibility",link:"#fungibility",children:[]},{level:3,title:"Genesis Block",slug:"genesis-block",link:"#genesis-block",children:[]},{level:3,title:"Hard Fork",slug:"hard-fork",link:"#hard-fork",children:[]},{level:3,title:"Hardware Wallet (HWW)",slug:"hardware-wallet-hww",link:"#hardware-wallet-hww",children:[]},{level:3,title:"Hash",slug:"hash",link:"#hash",children:[]},{level:3,title:"Hierarchical Deterministic (HD) Protocol",slug:"hierarchical-deterministic-hd-protocol",link:"#hierarchical-deterministic-hd-protocol",children:[]},{level:3,title:"Hierarchical Deterministic (HD) Wallet",slug:"hierarchical-deterministic-hd-wallet",link:"#hierarchical-deterministic-hd-wallet",children:[]},{level:3,title:"Hot Wallet",slug:"hot-wallet",link:"#hot-wallet",children:[]},{level:3,title:"Input",slug:"input",link:"#input",children:[]},{level:3,title:"Lightning Network (LN)",slug:"lightning-network-ln",link:"#lightning-network-ln",children:[]},{level:3,title:"Mainnet",slug:"mainnet",link:"#mainnet",children:[]},{level:3,title:"Mempool",slug:"mempool",link:"#mempool",children:[]},{level:3,title:"Merkle Root",slug:"merkle-root",link:"#merkle-root",children:[]},{level:3,title:"Merkle Tree",slug:"merkle-tree",link:"#merkle-tree",children:[]},{level:3,title:"Miner",slug:"miner",link:"#miner",children:[]},{level:3,title:"Mining Reward",slug:"mining-reward",link:"#mining-reward",children:[]},{level:3,title:"Multisignature (multisig)",slug:"multisignature-multisig",link:"#multisignature-multisig",children:[]},{level:3,title:"Non-Custodial (Wallet or Mixer)",slug:"non-custodial-wallet-or-mixer",link:"#non-custodial-wallet-or-mixer",children:[]},{level:3,title:"Nonce",slug:"nonce",link:"#nonce",children:[]},{level:3,title:"Off-chain Transaction",slug:"off-chain-transaction",link:"#off-chain-transaction",children:[]},{level:3,title:"Output",slug:"output",link:"#output",children:[]},{level:3,title:"P2PKH",slug:"p2pkh",link:"#p2pkh",children:[]},{level:3,title:"P2SH",slug:"p2sh",link:"#p2sh",children:[]},{level:3,title:"P2TR",slug:"p2tr",link:"#p2tr",children:[]},{level:3,title:"P2WPKH",slug:"p2wpkh",link:"#p2wpkh",children:[]},{level:3,title:"Paper Wallet",slug:"paper-wallet",link:"#paper-wallet",children:[]},{level:3,title:"Partially Signed Bitcoin Transaction (PSBT)",slug:"partially-signed-bitcoin-transaction-psbt",link:"#partially-signed-bitcoin-transaction-psbt",children:[]},{level:3,title:"Pay-to-Witness-Public-Key-Hash (P2WPKH)",slug:"pay-to-witness-public-key-hash-p2wpkh",link:"#pay-to-witness-public-key-hash-p2wpkh",children:[]},{level:3,title:"Payment Channels",slug:"payment-channels",link:"#payment-channels",children:[]},{level:3,title:"Plausible deniability",slug:"plausible-deniability",link:"#plausible-deniability",children:[]},{level:3,title:"Private Key",slug:"private-key",link:"#private-key",children:[]},{level:3,title:"Proof of Work (POW)",slug:"proof-of-work-pow",link:"#proof-of-work-pow",children:[]},{level:3,title:"Public Key",slug:"public-key",link:"#public-key",children:[]},{level:3,title:"Regtest",slug:"regtest",link:"#regtest",children:[]},{level:3,title:"Replace by Fee (RBF)",slug:"replace-by-fee-rbf",link:"#replace-by-fee-rbf",children:[]},{level:3,title:"satoshi (sat)",slug:"satoshi-sat",link:"#satoshi-sat",children:[]},{level:3,title:"Satoshi Nakamoto",slug:"satoshi-nakamoto",link:"#satoshi-nakamoto",children:[]},{level:3,title:"Schnorr Digital Signature Scheme",slug:"schnorr-digital-signature-scheme",link:"#schnorr-digital-signature-scheme",children:[]},{level:3,title:"Script",slug:"script",link:"#script",children:[]},{level:3,title:"ScriptPubKey",slug:"scriptpubkey",link:"#scriptpubkey",children:[]},{level:3,title:"ScriptSig",slug:"scriptsig",link:"#scriptsig",children:[]},{level:3,title:"Segregated Witness (SegWit)",slug:"segregated-witness-segwit",link:"#segregated-witness-segwit",children:[]},{level:3,title:"Simplified Payment Verification (SPV)",slug:"simplified-payment-verification-spv",link:"#simplified-payment-verification-spv",children:[]},{level:3,title:"Soft Fork",slug:"soft-fork",link:"#soft-fork",children:[]},{level:3,title:"Taproot",slug:"taproot",link:"#taproot",children:[]},{level:3,title:"Testnet",slug:"testnet",link:"#testnet",children:[]},{level:3,title:"Timechain",slug:"timechain",link:"#timechain",children:[]},{level:3,title:"Transaction",slug:"transaction",link:"#transaction",children:[]},{level:3,title:"Transaction Fees",slug:"transaction-fees",link:"#transaction-fees",children:[]},{level:3,title:"Unspent Transaction Output (UTXO)",slug:"unspent-transaction-output-utxo",link:"#unspent-transaction-output-utxo",children:[]},{level:3,title:"Wallet",slug:"wallet",link:"#wallet",children:[]}]}],path:"/glossary/Glossary-GeneralBitcoin.html",pathLocale:"/",extraFields:[]},{title:"Privacy and Wasabi",headers:[{level:2,title:"Privacy and Wasabi",slug:"privacy-and-wasabi",link:"#privacy-and-wasabi",children:[{level:3,title:"#twoweeks",slug:"twoweeks",link:"#twoweeks",children:[]},{level:3,title:"Address Reuse",slug:"address-reuse",link:"#address-reuse",children:[]},{level:3,title:"Anonymity Score (anonscore)",slug:"anonymity-score-anonscore",link:"#anonymity-score-anonscore",children:[]},{level:3,title:"Anonymity Set (anonset)",slug:"anonymity-set-anonset",link:"#anonymity-set-anonset",children:[]},{level:3,title:"Auto-start coinjoin (Pleb Stop) threshold",slug:"auto-start-coinjoin-pleb-stop-threshold",link:"#auto-start-coinjoin-pleb-stop-threshold",children:[]},{level:3,title:"Backend",slug:"backend",link:"#backend",children:[]},{level:3,title:"Block filters",slug:"block-filters",link:"#block-filters",children:[]},{level:3,title:"Blockchain Analysis",slug:"blockchain-analysis",link:"#blockchain-analysis",children:[]},{level:3,title:"Bloom Filter",slug:"bloom-filter",link:"#bloom-filter",children:[]},{level:3,title:"Change Address Detection",slug:"change-address-detection",link:"#change-address-detection",children:[]},{level:3,title:"Chaumian CoinJoin",slug:"chaumian-coinjoin",link:"#chaumian-coinjoin",children:[]},{level:3,title:"Client",slug:"client",link:"#client",children:[]},{level:3,title:"Cluster",slug:"cluster",link:"#cluster",children:[]},{level:3,title:"Coin Control",slug:"coin-control",link:"#coin-control",children:[]},{level:3,title:"CoinJoin (CJ)",slug:"coinjoin-cj",link:"#coinjoin-cj",children:[]},{level:3,title:"Coinjoin Strategy",slug:"coinjoin-strategy",link:"#coinjoin-strategy",children:[]},{level:3,title:"Coinjoin Time Preference",slug:"coinjoin-time-preference",link:"#coinjoin-time-preference",children:[]},{level:3,title:"CoinJoined coins",slug:"coinjoined-coins",link:"#coinjoined-coins",children:[]},{level:3,title:"Common-Input-Ownership heuristic",slug:"common-input-ownership-heuristic",link:"#common-input-ownership-heuristic",children:[]},{level:3,title:"Coordinator",slug:"coordinator",link:"#coordinator",children:[]},{level:3,title:"Daemon",slug:"daemon",link:"#daemon",children:[]},{level:3,title:"Discreet Mode",slug:"discreet-mode",link:"#discreet-mode",children:[]},{level:3,title:"Dust",slug:"dust",link:"#dust",children:[]},{level:3,title:"Label",slug:"label",link:"#label",children:[]},{level:3,title:"Know Your Customer (KYC)",slug:"know-your-customer-kyc",link:"#know-your-customer-kyc",children:[]},{level:3,title:"Observers",slug:"observers",link:"#observers",children:[]},{level:3,title:"Pay to EndPoint (P2EP)",slug:"pay-to-endpoint-p2ep",link:"#pay-to-endpoint-p2ep",children:[]},{level:3,title:"Peers",slug:"peers",link:"#peers",children:[]},{level:3,title:"RPC",slug:"rpc",link:"#rpc",children:[]},{level:3,title:"Safety coinjoin",slug:"safety-coinjoin",link:"#safety-coinjoin",children:[]},{level:3,title:"Taint",slug:"taint",link:"#taint",children:[]},{level:3,title:"The Onion Router (Tor)",slug:"the-onion-router-tor",link:"#the-onion-router-tor",children:[]},{level:3,title:"Transaction Surveillance Company",slug:"transaction-surveillance-company",link:"#transaction-surveillance-company",children:[]},{level:3,title:"Tumbling / Tumbler",slug:"tumbling-tumbler",link:"#tumbling-tumbler",children:[]},{level:3,title:"TurboSync",slug:"turbosync",link:"#turbosync",children:[]},{level:3,title:"WabiSabi",slug:"wabisabi",link:"#wabisabi",children:[]},{level:3,title:"Wallet fingerprinting",slug:"wallet-fingerprinting",link:"#wallet-fingerprinting",children:[]},{level:3,title:"Wasabika",slug:"wasabika",link:"#wasabika",children:[]},{level:3,title:"XPUB (Extended Public Key)",slug:"xpub-extended-public-key",link:"#xpub-extended-public-key",children:[]},{level:3,title:"ZeroLink",slug:"zerolink",link:"#zerolink",children:[]}]}],path:"/glossary/Glossary-PrivacyWasabi.html",pathLocale:"/",extraFields:[]},{title:"Glossary",headers:[{level:2,title:"Chapters",slug:"chapters",link:"#chapters",children:[]}],path:"/glossary/",pathLocale:"/",extraFields:[]},{title:"Supported BIPs",headers:[{level:2,title:"What is supported",slug:"what-is-supported",link:"#what-is-supported",children:[]},{level:2,title:"What is not supported",slug:"what-is-not-supported",link:"#what-is-not-supported",children:[]}],path:"/using-wasabi/BIPs.html",pathLocale:"/",extraFields:[]},{title:"Wasabi Backup Best Practices",headers:[{level:2,title:"Common mediums for backups",slug:"common-mediums-for-backups",link:"#common-mediums-for-backups",children:[{level:3,title:"Written on a piece of paper",slug:"written-on-a-piece-of-paper",link:"#written-on-a-piece-of-paper",children:[]},{level:3,title:"Printed on a piece of paper",slug:"printed-on-a-piece-of-paper",link:"#printed-on-a-piece-of-paper",children:[]},{level:3,title:"On laminated paper",slug:"on-laminated-paper",link:"#on-laminated-paper",children:[]},{level:3,title:"Engraved / etched / ablated / stamped on a piece of metal",slug:"engraved-etched-ablated-stamped-on-a-piece-of-metal",link:"#engraved-etched-ablated-stamped-on-a-piece-of-metal",children:[]},{level:3,title:"Stored digitally on a computer",slug:"stored-digitally-on-a-computer",link:"#stored-digitally-on-a-computer",children:[]},{level:3,title:"Stored digitally on CD, floppy disk, laserdisc, or mini-disc",slug:"stored-digitally-on-cd-floppy-disk-laserdisc-or-mini-disc",link:"#stored-digitally-on-cd-floppy-disk-laserdisc-or-mini-disc",children:[]},{level:3,title:"Stored digitally on a flash drive",slug:"stored-digitally-on-a-flash-drive",link:"#stored-digitally-on-a-flash-drive",children:[]},{level:3,title:"A pre-funded physical bitcoin coin (where the manufacturer generates and installs the secret key)",slug:"a-pre-funded-physical-bitcoin-coin-where-the-manufacturer-generates-and-installs-the-secret-key",link:"#a-pre-funded-physical-bitcoin-coin-where-the-manufacturer-generates-and-installs-the-secret-key",children:[]}]}],path:"/using-wasabi/BackupBestPractices.html",pathLocale:"/",extraFields:[]},{title:"Bitcoin Full Node",headers:[{level:2,title:"The importance of running a full node",slug:"the-importance-of-running-a-full-node",link:"#the-importance-of-running-a-full-node",children:[]},{level:2,title:"How does Wasabi use your Bitcoin full node",slug:"how-does-wasabi-use-your-bitcoin-full-node",link:"#how-does-wasabi-use-your-bitcoin-full-node",children:[]},{level:2,title:"bitcoind within Wasabi",slug:"bitcoind-within-wasabi",link:"#bitcoind-within-wasabi",children:[]},{level:2,title:"Using an already existing local Bitcoin full node",slug:"using-an-already-existing-local-bitcoin-full-node",link:"#using-an-already-existing-local-bitcoin-full-node",children:[]},{level:2,title:"Using an already existing remote Bitcoin full node",slug:"using-an-already-existing-remote-bitcoin-full-node",link:"#using-an-already-existing-remote-bitcoin-full-node",children:[]},{level:2,title:"Verify that Wasabi is connected to your full node",slug:"verify-that-wasabi-is-connected-to-your-full-node",link:"#verify-that-wasabi-is-connected-to-your-full-node",children:[]}],path:"/using-wasabi/BitcoinFullNode.html",pathLocale:"/",extraFields:[]},{title:"Build from source code",headers:[{level:2,title:"Introduction",slug:"introduction",link:"#introduction",children:[]},{level:2,title:"Get The Requirements",slug:"get-the-requirements",link:"#get-the-requirements",children:[]},{level:2,title:"Get Wasabi",slug:"get-wasabi",link:"#get-wasabi",children:[]},{level:2,title:"Run Wasabi",slug:"run-wasabi",link:"#run-wasabi",children:[]},{level:2,title:"Update Wasabi",slug:"update-wasabi",link:"#update-wasabi",children:[]},{level:2,title:"Check out a developer branch",slug:"check-out-a-developer-branch",link:"#check-out-a-developer-branch",children:[]}],path:"/using-wasabi/BuildSource.html",pathLocale:"/",extraFields:[]},{title:"Change Coins",headers:[{level:2,title:"Types of change",slug:"types-of-change",link:"#types-of-change",children:[{level:3,title:"Non-Coinjoin change",slug:"non-coinjoin-change",link:"#non-coinjoin-change",children:[]},{level:3,title:"Coinjoin change",slug:"coinjoin-change",link:"#coinjoin-change",children:[]}]},{level:2,title:"Why change is an issue",slug:"why-change-is-an-issue",link:"#why-change-is-an-issue",children:[]},{level:2,title:"Your options to use change privately",slug:"your-options-to-use-change-privately",link:"#your-options-to-use-change-privately",children:[{level:3,title:"Avoid change in the first place",slug:"avoid-change-in-the-first-place",link:"#avoid-change-in-the-first-place",children:[]},{level:3,title:"Make it difficult to deduce the change",slug:"make-it-difficult-to-deduce-the-change",link:"#make-it-difficult-to-deduce-the-change",children:[]},{level:3,title:"Spend the change to the same entity as in the initial transaction",slug:"spend-the-change-to-the-same-entity-as-in-the-initial-transaction",link:"#spend-the-change-to-the-same-entity-as-in-the-initial-transaction",children:[]},{level:3,title:"Spend the change with another entity, where you don't mind if each of the two know that you transact with the other entity",slug:"spend-the-change-with-another-entity-where-you-don-t-mind-if-each-of-the-two-know-that-you-transact-with-the-other-entity",link:"#spend-the-change-with-another-entity-where-you-don-t-mind-if-each-of-the-two-know-that-you-transact-with-the-other-entity",children:[]},{level:3,title:"Coinjoin more",slug:"coinjoin-more",link:"#coinjoin-more",children:[]}]}],path:"/using-wasabi/ChangeCoins.html",pathLocale:"/",extraFields:[]},{title:"Coinjoin",headers:[{level:2,title:"Introduction",slug:"introduction",link:"#introduction",children:[]},{level:2,title:"Coinjoin step-by-step",slug:"coinjoin-step-by-step",link:"#coinjoin-step-by-step",children:[{level:3,title:"Music box",slug:"music-box",link:"#music-box",children:[]},{level:3,title:"More Details",slug:"more-details",link:"#more-details",children:[]},{level:3,title:"Fees",slug:"fees",link:"#fees",children:[]}]},{level:2,title:"WabiSabi protocol step-by-step",slug:"wabisabi-protocol-step-by-step",link:"#wabisabi-protocol-step-by-step",children:[{level:3,title:"Input registration",slug:"input-registration",link:"#input-registration",children:[]},{level:3,title:"Connection confirmation",slug:"connection-confirmation",link:"#connection-confirmation",children:[]},{level:3,title:"Output registration",slug:"output-registration",link:"#output-registration",children:[]},{level:3,title:"Signing",slug:"signing",link:"#signing",children:[]},{level:3,title:"Blame round",slug:"blame-round",link:"#blame-round",children:[]},{level:3,title:"Broadcasting",slug:"broadcasting",link:"#broadcasting",children:[]}]},{level:2,title:"Coinjoin Settings",slug:"coinjoin-settings",link:"#coinjoin-settings",children:[{level:3,title:"Automatically start coinjoin",slug:"automatically-start-coinjoin",link:"#automatically-start-coinjoin",children:[]},{level:3,title:"Auto-start coinjoin threshold",slug:"auto-start-coinjoin-threshold",link:"#auto-start-coinjoin-threshold",children:[]},{level:3,title:"Coinjoin Strategy",slug:"coinjoin-strategy",link:"#coinjoin-strategy",children:[]}]},{level:2,title:"Wasabi Coinjoin examples",slug:"wasabi-coinjoin-examples",link:"#wasabi-coinjoin-examples",children:[]}],path:"/using-wasabi/CoinJoin.html",pathLocale:"/",extraFields:[]},{title:"Hardware Wallet",headers:[{level:2,title:"Using hardware wallet step-by-step",slug:"using-hardware-wallet-step-by-step",link:"#using-hardware-wallet-step-by-step",children:[]},{level:2,title:"What is Cold Storage",slug:"what-is-cold-storage",link:"#what-is-cold-storage",children:[]},{level:2,title:"Hardware Wallet with Wasabi",slug:"hardware-wallet-with-wasabi",link:"#hardware-wallet-with-wasabi",children:[{level:3,title:"Connecting via USB",slug:"connecting-via-usb",link:"#connecting-via-usb",children:[]},{level:3,title:"Connecting Coldcard via SD card",slug:"connecting-coldcard-via-sd-card",link:"#connecting-coldcard-via-sd-card",children:[]}]},{level:2,title:"Cold-Wasabi protocol",slug:"cold-wasabi-protocol",link:"#cold-wasabi-protocol",children:[]},{level:2,title:"GUI tutorial",slug:"gui-tutorial",link:"#gui-tutorial",children:[{level:3,title:"Coinjoin on the hot Wasabi",slug:"coinjoin-on-the-hot-wasabi",link:"#coinjoin-on-the-hot-wasabi",children:[]},{level:3,title:"Set up your cold-Wasabi",slug:"set-up-your-cold-wasabi",link:"#set-up-your-cold-wasabi",children:[]},{level:3,title:"Send bitcoins from hot to cold Wasabi",slug:"send-bitcoins-from-hot-to-cold-wasabi",link:"#send-bitcoins-from-hot-to-cold-wasabi",children:[]},{level:3,title:"Send bitcoins from cold Wasabi",slug:"send-bitcoins-from-cold-wasabi",link:"#send-bitcoins-from-cold-wasabi",children:[]}]}],path:"/using-wasabi/ColdWasabi.html",pathLocale:"/",extraFields:[]},{title:"Headless Wasabi Daemon",headers:[{level:2,title:"Introduction",slug:"introduction",link:"#introduction",children:[]},{level:2,title:"How to run",slug:"how-to-run",link:"#how-to-run",children:[{level:3,title:"If the package is installed",slug:"if-the-package-is-installed",link:"#if-the-package-is-installed",children:[]},{level:3,title:"If building from source code",slug:"if-building-from-source-code",link:"#if-building-from-source-code",children:[]}]},{level:2,title:"Examples",slug:"examples",link:"#examples",children:[]}],path:"/using-wasabi/Daemon.html",pathLocale:"/",extraFields:[]},{title:"Deterministic Build",headers:[],path:"/using-wasabi/DeterministicBuild.html",pathLocale:"/",extraFields:[]},{title:"Discreet Mode",headers:[{level:2,title:"How to activate/deactivate Discreet Mode",slug:"how-to-activate-deactivate-discreet-mode",link:"#how-to-activate-deactivate-discreet-mode",children:[]},{level:2,title:"More information on Discreet Mode",slug:"more-information-on-discreet-mode",link:"#more-information-on-discreet-mode",children:[]}],path:"/using-wasabi/DiscreetMode.html",pathLocale:"/",extraFields:[]},{title:"Explain Wasabi like I'm 5",headers:[{level:2,title:"Introduction",slug:"introduction",link:"#introduction",children:[]},{level:2,title:"Installing Wasabi",slug:"installing-wasabi",link:"#installing-wasabi",children:[]},{level:2,title:"Generating a Wallet",slug:"generating-a-wallet",link:"#generating-a-wallet",children:[]},{level:2,title:"Receiving bitcoin",slug:"receiving-bitcoin",link:"#receiving-bitcoin",children:[]},{level:2,title:"Sending bitcoin",slug:"sending-bitcoin",link:"#sending-bitcoin",children:[]},{level:2,title:"Coinjoin with Wasabi",slug:"coinjoin-with-wasabi",link:"#coinjoin-with-wasabi",children:[]}],path:"/using-wasabi/ELI5.html",pathLocale:"/",extraFields:[]},{title:"Install-package",headers:[{level:2,title:"Introduction",slug:"introduction",link:"#introduction",children:[]},{level:2,title:"Install Wasabi step-by-step",slug:"install-wasabi-step-by-step",link:"#install-wasabi-step-by-step",children:[]},{level:2,title:"Windows",slug:"windows",link:"#windows",children:[]},{level:2,title:"Debian and Ubuntu",slug:"debian-and-ubuntu",link:"#debian-and-ubuntu",children:[]},{level:2,title:"Other Linux",slug:"other-linux",link:"#other-linux",children:[]},{level:2,title:"macOS",slug:"macos",link:"#macos",children:[{level:3,title:"Optional PGP Verification",slug:"optional-pgp-verification",link:"#optional-pgp-verification",children:[]}]}],path:"/using-wasabi/InstallPackage.html",pathLocale:"/",extraFields:[]},{title:"Password Best Practices",headers:[{level:2,title:"Introduction",slug:"introduction",link:"#introduction",children:[]},{level:2,title:"Password basics",slug:"password-basics",link:"#password-basics",children:[]},{level:2,title:"What not to do",slug:"what-not-to-do",link:"#what-not-to-do",children:[]},{level:2,title:"Use Diceware",slug:"use-diceware",link:"#use-diceware",children:[]},{level:2,title:"Use a dictionary",slug:"use-a-dictionary",link:"#use-a-dictionary",children:[]},{level:2,title:"Use an open-source password manager",slug:"use-an-open-source-password-manager",link:"#use-an-open-source-password-manager",children:[]},{level:2,title:"Password entropy",slug:"password-entropy",link:"#password-entropy",children:[{level:3,title:"How to calculate entropy",slug:"how-to-calculate-entropy",link:"#how-to-calculate-entropy",children:[]},{level:3,title:'"Bits" of entropy',slug:"bits-of-entropy",link:"#bits-of-entropy",children:[]},{level:3,title:"How much entropy is needed",slug:"how-much-entropy-is-needed",link:"#how-much-entropy-is-needed",children:[]}]}],path:"/using-wasabi/PasswordBestPractices.html",pathLocale:"/",extraFields:[]},{title:"Password Finder",headers:[{level:2,title:"Limitations",slug:"limitations",link:"#limitations",children:[]},{level:2,title:"Usage",slug:"usage",link:"#usage",children:[]}],path:"/using-wasabi/PasswordFinder.html",pathLocale:"/",extraFields:[]},{title:"PayJoin",headers:[{level:2,title:"Sending PayJoin step-by-step",slug:"sending-payjoin-step-by-step",link:"#sending-payjoin-step-by-step",children:[]},{level:2,title:"The goal of PayJoin",slug:"the-goal-of-payjoin",link:"#the-goal-of-payjoin",children:[]},{level:2,title:"Coordination",slug:"coordination",link:"#coordination",children:[]},{level:2,title:"Fallback transaction",slug:"fallback-transaction",link:"#fallback-transaction",children:[]},{level:2,title:"PayJoin transaction",slug:"payjoin-transaction",link:"#payjoin-transaction",children:[]},{level:2,title:"Advantages of PayJoin",slug:"advantages-of-payjoin",link:"#advantages-of-payjoin",children:[]}],path:"/using-wasabi/PayJoin.html",pathLocale:"/",extraFields:[]},{title:"Using Wasabi",headers:[{level:2,title:"Chapters",slug:"chapters",link:"#chapters",children:[{level:3,title:"Introducing Wasabi",slug:"introducing-wasabi",link:"#introducing-wasabi",children:[]},{level:3,title:"Installing Wasabi",slug:"installing-wasabi",link:"#installing-wasabi",children:[]},{level:3,title:"Using Wasabi",slug:"using-wasabi-1",link:"#using-wasabi-1",children:[]},{level:3,title:"Best Practices",slug:"best-practices",link:"#best-practices",children:[]},{level:3,title:"Restoring Wasabi",slug:"restoring-wasabi",link:"#restoring-wasabi",children:[]},{level:3,title:"Advanced Installing Wasabi",slug:"advanced-installing-wasabi",link:"#advanced-installing-wasabi",children:[]},{level:3,title:"Advanced Using Wasabi",slug:"advanced-using-wasabi",link:"#advanced-using-wasabi",children:[]}]}],path:"/using-wasabi/",pathLocale:"/",extraFields:[]},{title:"RPC Interface",headers:[{level:2,title:"Limitations",slug:"limitations",link:"#limitations",children:[]},{level:2,title:"Configure RPC",slug:"configure-rpc",link:"#configure-rpc",children:[]},{level:2,title:"Available methods",slug:"available-methods",link:"#available-methods",children:[{level:3,title:"getstatus",slug:"getstatus",link:"#getstatus",children:[]},{level:3,title:"createwallet",slug:"createwallet",link:"#createwallet",children:[]},{level:3,title:"recoverwallet",slug:"recoverwallet",link:"#recoverwallet",children:[]},{level:3,title:"listwallets",slug:"listwallets",link:"#listwallets",children:[]},{level:3,title:"loadwallet",slug:"loadwallet",link:"#loadwallet",children:[]},{level:3,title:"listcoins",slug:"listcoins",link:"#listcoins",children:[]},{level:3,title:"listunspentcoins",slug:"listunspentcoins",link:"#listunspentcoins",children:[]},{level:3,title:"getwalletinfo",slug:"getwalletinfo",link:"#getwalletinfo",children:[]},{level:3,title:"getnewaddress",slug:"getnewaddress",link:"#getnewaddress",children:[]},{level:3,title:"send",slug:"send",link:"#send",children:[]},{level:3,title:"build",slug:"build",link:"#build",children:[]},{level:3,title:"broadcast",slug:"broadcast",link:"#broadcast",children:[]},{level:3,title:"speeduptransaction",slug:"speeduptransaction",link:"#speeduptransaction",children:[]},{level:3,title:"canceltransaction",slug:"canceltransaction",link:"#canceltransaction",children:[]},{level:3,title:"gethistory",slug:"gethistory",link:"#gethistory",children:[]},{level:3,title:"getfeerates",slug:"getfeerates",link:"#getfeerates",children:[]},{level:3,title:"listkeys",slug:"listkeys",link:"#listkeys",children:[]},{level:3,title:"excludefromcoinjoin",slug:"excludefromcoinjoin",link:"#excludefromcoinjoin",children:[]},{level:3,title:"startcoinjoin",slug:"startcoinjoin",link:"#startcoinjoin",children:[]},{level:3,title:"payincoinjoin",slug:"payincoinjoin",link:"#payincoinjoin",children:[]},{level:3,title:"listpaymentsincoinjoin",slug:"listpaymentsincoinjoin",link:"#listpaymentsincoinjoin",children:[]},{level:3,title:"cancelpaymentincoinjoin",slug:"cancelpaymentincoinjoin",link:"#cancelpaymentincoinjoin",children:[]},{level:3,title:"startcoinjoinsweep",slug:"startcoinjoinsweep",link:"#startcoinjoinsweep",children:[]},{level:3,title:"stopcoinjoin",slug:"stopcoinjoin",link:"#stopcoinjoin",children:[]},{level:3,title:"buildunsafetransaction",slug:"buildunsafetransaction",link:"#buildunsafetransaction",children:[]},{level:3,title:"stop",slug:"stop",link:"#stop",children:[]}]},{level:2,title:"Errors",slug:"errors",link:"#errors",children:[{level:3,title:"Method not found",slug:"method-not-found",link:"#method-not-found",children:[]},{level:3,title:"Parse error",slug:"parse-error",link:"#parse-error",children:[]},{level:3,title:"Mismatching parameters",slug:"mismatching-parameters",link:"#mismatching-parameters",children:[]}]},{level:2,title:"Expose the RPC server as an onion service",slug:"expose-the-rpc-server-as-an-onion-service",link:"#expose-the-rpc-server-as-an-onion-service",children:[{level:3,title:"Example",slug:"example",link:"#example",children:[]}]}],path:"/using-wasabi/RPC.html",pathLocale:"/",extraFields:[]},{title:"Receive",headers:[{level:2,title:"Generating addresses step-by-step",slug:"generating-addresses-step-by-step",link:"#generating-addresses-step-by-step",children:[]},{level:2,title:"Bitcoin public keys and addresses",slug:"bitcoin-public-keys-and-addresses",link:"#bitcoin-public-keys-and-addresses",children:[]},{level:2,title:"The problem with address reuse",slug:"the-problem-with-address-reuse",link:"#the-problem-with-address-reuse",children:[]},{level:2,title:"The importance of labeling",slug:"the-importance-of-labeling",link:"#the-importance-of-labeling",children:[{level:3,title:"Clusters",slug:"clusters",link:"#clusters",children:[]},{level:3,title:"Coinjoined coins",slug:"coinjoined-coins",link:"#coinjoined-coins",children:[]},{level:3,title:"Final words about labels and examples",slug:"final-words-about-labels-and-examples",link:"#final-words-about-labels-and-examples",children:[]}]}],path:"/using-wasabi/Receive.html",pathLocale:"/",extraFields:[]},{title:"Restoring Wasabi Wallet in Electrum",headers:[{level:2,title:"Restoring Wasabi Wallet via Electrum GUI",slug:"restoring-wasabi-wallet-via-electrum-gui",link:"#restoring-wasabi-wallet-via-electrum-gui",children:[]}],path:"/using-wasabi/RestoreElectrum.html",pathLocale:"/",extraFields:[]},{title:"Send",headers:[{level:2,title:"How to send bitcoin step-by-step",slug:"how-to-send-bitcoin-step-by-step",link:"#how-to-send-bitcoin-step-by-step",children:[]},{level:2,title:"Coins",slug:"coins",link:"#coins",children:[]},{level:2,title:"Clusters",slug:"clusters",link:"#clusters",children:[]},{level:2,title:"Anonymity Set",slug:"anonymity-set",link:"#anonymity-set",children:[]},{level:2,title:"Receiving Address",slug:"receiving-address",link:"#receiving-address",children:[]},{level:2,title:"Observers",slug:"observers",link:"#observers",children:[]},{level:2,title:"Amount",slug:"amount",link:"#amount",children:[]},{level:2,title:"Mining Fee",slug:"mining-fee",link:"#mining-fee",children:[]},{level:2,title:"Privacy Suggestions",slug:"privacy-suggestions",link:"#privacy-suggestions",children:[]},{level:2,title:"Password",slug:"password",link:"#password",children:[]},{level:2,title:"Broadcast",slug:"broadcast",link:"#broadcast",children:[]},{level:2,title:"Speed Up or Cancel Transaction",slug:"speed-up-or-cancel-transaction",link:"#speed-up-or-cancel-transaction",children:[]}],path:"/using-wasabi/Send.html",pathLocale:"/",extraFields:[]},{title:"Starting Wasabi with parameters",headers:[{level:2,title:"Available commands",slug:"available-commands",link:"#available-commands",children:[{level:3,title:"Config file configurations",slug:"config-file-configurations",link:"#config-file-configurations",children:[]},{level:3,title:"Non-Config file configurations",slug:"non-config-file-configurations",link:"#non-config-file-configurations",children:[]}]}],path:"/using-wasabi/StartupParameters.html",pathLocale:"/",extraFields:[]},{title:"Testnet",headers:[{level:2,title:"Bitcoin testnet",slug:"bitcoin-testnet",link:"#bitcoin-testnet",children:[]},{level:2,title:"Activating testnet in Wasabi",slug:"activating-testnet-in-wasabi",link:"#activating-testnet-in-wasabi",children:[]},{level:2,title:"Loading a wallet",slug:"loading-a-wallet",link:"#loading-a-wallet",children:[]},{level:2,title:"Receiving testnet bitcoin",slug:"receiving-testnet-bitcoin",link:"#receiving-testnet-bitcoin",children:[]},{level:2,title:"Coinjoin on testnet",slug:"coinjoin-on-testnet",link:"#coinjoin-on-testnet",children:[]}],path:"/using-wasabi/Testnet.html",pathLocale:"/",extraFields:[]},{title:"Wallet Generation",headers:[{level:2,title:"Introduction",slug:"introduction",link:"#introduction",children:[]},{level:2,title:"Generating the wallet step-by-step",slug:"generating-the-wallet-step-by-step",link:"#generating-the-wallet-step-by-step",children:[]},{level:2,title:"Important info about your wallet password",slug:"important-info-about-your-wallet-password",link:"#important-info-about-your-wallet-password",children:[]},{level:2,title:"How are the secrets created",slug:"how-are-the-secrets-created",link:"#how-are-the-secrets-created",children:[]}],path:"/using-wasabi/WalletGeneration.html",pathLocale:"/",extraFields:[]},{title:"Wallet Load",headers:[{level:2,title:"Loading wallet step-by-step",slug:"loading-wallet-step-by-step",link:"#loading-wallet-step-by-step",children:[{level:3,title:"Wallet list",slug:"wallet-list",link:"#wallet-list",children:[]}]},{level:2,title:"Synchronization",slug:"synchronization",link:"#synchronization",children:[{level:3,title:"Filter download",slug:"filter-download",link:"#filter-download",children:[]},{level:3,title:"Filter scanning",slug:"filter-scanning",link:"#filter-scanning",children:[]},{level:3,title:"Block download",slug:"block-download",link:"#block-download",children:[]},{level:3,title:"TurboSync",slug:"turbosync",link:"#turbosync",children:[]}]}],path:"/using-wasabi/WalletLoad.html",pathLocale:"/",extraFields:[]},{title:"Recover a Wallet",headers:[{level:2,title:"Mnemonic Recovery Words and Password",slug:"mnemonic-recovery-words-and-password",link:"#mnemonic-recovery-words-and-password",children:[]},{level:2,title:"Back up Wallet File and Password",slug:"back-up-wallet-file-and-password",link:"#back-up-wallet-file-and-password",children:[]}],path:"/using-wasabi/WalletRecovery.html",pathLocale:"/",extraFields:[]},{title:"Wasabi Setup in Virtual Machines",headers:[{level:2,title:"Benefits of Virtual Machines",slug:"benefits-of-virtual-machines",link:"#benefits-of-virtual-machines",children:[]},{level:2,title:"Qubes",slug:"qubes",link:"#qubes",children:[{level:3,title:"Generate Template VM",slug:"generate-template-vm",link:"#generate-template-vm",children:[]},{level:3,title:"Install Dependencies",slug:"install-dependencies",link:"#install-dependencies",children:[]},{level:3,title:"Generate App VM",slug:"generate-app-vm",link:"#generate-app-vm",children:[]},{level:3,title:"Compile and Run Wasabi",slug:"compile-and-run-wasabi",link:"#compile-and-run-wasabi",children:[]},{level:3,title:"Install Package in App VM",slug:"install-package-in-app-vm",link:"#install-package-in-app-vm",children:[]}]},{level:2,title:"VirtualBox",slug:"virtualbox",link:"#virtualbox",children:[{level:3,title:"Create Your First Virtual Machine",slug:"create-your-first-virtual-machine",link:"#create-your-first-virtual-machine",children:[]},{level:3,title:"Generate a Template VM",slug:"generate-a-template-vm",link:"#generate-a-template-vm",children:[]},{level:3,title:"Install Required Dependencies",slug:"install-required-dependencies",link:"#install-required-dependencies",children:[]},{level:3,title:"Cloning a Virtual Machine",slug:"cloning-a-virtual-machine",link:"#cloning-a-virtual-machine",children:[]},{level:3,title:"How to Create a Linked Clone",slug:"how-to-create-a-linked-clone",link:"#how-to-create-a-linked-clone",children:[]},{level:3,title:"Compile and Run Wasabi in Your VM",slug:"compile-and-run-wasabi-in-your-vm",link:"#compile-and-run-wasabi-in-your-vm",children:[]},{level:3,title:"Install Latest Package",slug:"install-latest-package",link:"#install-latest-package",children:[]}]}],path:"/using-wasabi/WasabiSetupVM.html",pathLocale:"/",extraFields:[]},{title:"Address Reuse",headers:[{level:2,title:"Problem",slug:"problem",link:"#problem",children:[{level:3,title:"Easy wallet clustering",slug:"easy-wallet-clustering",link:"#easy-wallet-clustering",children:[]},{level:3,title:"Publicly advertised addresses (donations)",slug:"publicly-advertised-addresses-donations",link:"#publicly-advertised-addresses-donations",children:[]},{level:3,title:"Dusting",slug:"dusting",link:"#dusting",children:[]},{level:3,title:"Intentionally malicious",slug:"intentionally-malicious",link:"#intentionally-malicious",children:[]}]},{level:2,title:"Wasabi's Solution",slug:"wasabi-s-solution",link:"#wasabi-s-solution",children:[{level:3,title:"Remove used address from GUI",slug:"remove-used-address-from-gui",link:"#remove-used-address-from-gui",children:[]}]}],path:"/why-wasabi/AddressReuse.html",pathLocale:"/",extraFields:[]},{title:"Coins",headers:[{level:2,title:"Problem",slug:"problem",link:"#problem",children:[{level:3,title:"UTXOs are not fungible",slug:"utxos-are-not-fungible",link:"#utxos-are-not-fungible",children:[]}]},{level:2,title:"Wasabi's Solution",slug:"wasabi-s-solution",link:"#wasabi-s-solution",children:[{level:3,title:"Manual coin labeling and selection",slug:"manual-coin-labeling-and-selection",link:"#manual-coin-labeling-and-selection",children:[]},{level:3,title:"Change avoidance suggestion",slug:"change-avoidance-suggestion",link:"#change-avoidance-suggestion",children:[]}]},{level:2,title:"Heuristics identifying change",slug:"heuristics-identifying-change",link:"#heuristics-identifying-change",children:[{level:3,title:"Address reuse",slug:"address-reuse",link:"#address-reuse",children:[]},{level:3,title:"Wallet fingerprinting",slug:"wallet-fingerprinting",link:"#wallet-fingerprinting",children:[]},{level:3,title:"Round numbers",slug:"round-numbers",link:"#round-numbers",children:[]},{level:3,title:"CoinJoin",slug:"coinjoin",link:"#coinjoin",children:[]},{level:3,title:"Replace by Fee",slug:"replace-by-fee",link:"#replace-by-fee",children:[]}]}],path:"/why-wasabi/Coins.html",pathLocale:"/",extraFields:[]},{title:"CoinJoin Legal Concern",headers:[{level:2,title:"Overview",slug:"overview",link:"#overview",children:[]},{level:2,title:"CoinJoin transactions",slug:"coinjoin-transactions",link:"#coinjoin-transactions",children:[{level:3,title:"Difference between ordinary banking and blockchain",slug:"difference-between-ordinary-banking-and-blockchain",link:"#difference-between-ordinary-banking-and-blockchain",children:[]},{level:3,title:"Service providers' obligations regarding privacy",slug:"service-providers-obligations-regarding-privacy",link:"#service-providers-obligations-regarding-privacy",children:[]},{level:3,title:"CoinJoin as a privacy-preserving tool",slug:"coinjoin-as-a-privacy-preserving-tool",link:"#coinjoin-as-a-privacy-preserving-tool",children:[]}]},{level:2,title:"Privacy perspective from the companies' point of view",slug:"privacy-perspective-from-the-companies-point-of-view",link:"#privacy-perspective-from-the-companies-point-of-view",children:[{level:3,title:"Suppliers",slug:"suppliers",link:"#suppliers",children:[]},{level:3,title:"Clients",slug:"clients",link:"#clients",children:[]},{level:3,title:"Competitors",slug:"competitors",link:"#competitors",children:[]},{level:3,title:"Employees",slug:"employees",link:"#employees",children:[]},{level:3,title:"Phishing attacks",slug:"phishing-attacks",link:"#phishing-attacks",children:[]}]},{level:2,title:"Privacy perspective from the institutional investor’s point of view",slug:"privacy-perspective-from-the-institutional-investor-s-point-of-view",link:"#privacy-perspective-from-the-institutional-investor-s-point-of-view",children:[]},{level:2,title:"Resolving AML conflicts",slug:"resolving-aml-conflicts",link:"#resolving-aml-conflicts",children:[{level:3,title:"User privacy",slug:"user-privacy",link:"#user-privacy",children:[]},{level:3,title:"KYC/AML",slug:"kyc-aml",link:"#kyc-aml",children:[]},{level:3,title:"Using CoinJoin as a custodial service provider",slug:"using-coinjoin-as-a-custodial-service-provider",link:"#using-coinjoin-as-a-custodial-service-provider",children:[]}]},{level:2,title:"Conclusion",slug:"conclusion",link:"#conclusion",children:[]}],path:"/why-wasabi/LegalConcern.html",pathLocale:"/",extraFields:[]},{title:"Network-Level Privacy",headers:[{level:2,title:"Problem",slug:"problem",link:"#problem",children:[{level:3,title:"Clearnet light clients",slug:"clearnet-light-clients",link:"#clearnet-light-clients",children:[]}]},{level:2,title:"Wasabi's solution",slug:"wasabi-s-solution",link:"#wasabi-s-solution",children:[{level:3,title:"Full node by default & block filters over Tor",slug:"full-node-by-default-block-filters-over-tor",link:"#full-node-by-default-block-filters-over-tor",children:[]}]},{level:2,title:"In-depth comparison",slug:"in-depth-comparison",link:"#in-depth-comparison",children:[{level:3,title:"Bitcoin Core",slug:"bitcoin-core",link:"#bitcoin-core",children:[]},{level:3,title:"Bitcoin Core + Tor",slug:"bitcoin-core-tor",link:"#bitcoin-core-tor",children:[]},{level:3,title:"Wasabi Wallet light node",slug:"wasabi-wallet-light-node",link:"#wasabi-wallet-light-node",children:[]},{level:3,title:"Wasabi Wallet + full node",slug:"wasabi-wallet-full-node",link:"#wasabi-wallet-full-node",children:[]}]},{level:2,title:"Universal Attacks",slug:"universal-attacks",link:"#universal-attacks",children:[{level:3,title:"Protection",slug:"protection",link:"#protection",children:[]}]}],path:"/why-wasabi/NetworkLevelPrivacy.html",pathLocale:"/",extraFields:[]},{title:"Why Wasabi",headers:[{level:2,title:"Chapters",slug:"chapters",link:"#chapters",children:[{level:3,title:"Why Privacy",slug:"why-privacy",link:"#why-privacy",children:[]},{level:3,title:"Privacy in Bitcoin",slug:"privacy-in-bitcoin",link:"#privacy-in-bitcoin",children:[]}]}],path:"/why-wasabi/",pathLocale:"/",extraFields:[]},{title:"Transaction Graph",headers:[{level:2,title:"Problem",slug:"problem",link:"#problem",children:[{level:3,title:"Public transaction history",slug:"public-transaction-history",link:"#public-transaction-history",children:[]}]},{level:2,title:"Wasabi's Solution",slug:"wasabi-s-solution",link:"#wasabi-s-solution",children:[{level:3,title:"WabiSabi coinjoins",slug:"wabisabi-coinjoins",link:"#wabisabi-coinjoins",children:[]}]}],path:"/why-wasabi/TransactionGraph.html",pathLocale:"/",extraFields:[]},{title:"Transaction Surveillance Companies",headers:[{level:2,title:"Spying technology",slug:"spying-technology",link:"#spying-technology",children:[{level:3,title:"AML/KYC information",slug:"aml-kyc-information",link:"#aml-kyc-information",children:[]},{level:3,title:"Blockchain analysis",slug:"blockchain-analysis",link:"#blockchain-analysis",children:[]},{level:3,title:"Wallet synchronization analysis",slug:"wallet-synchronization-analysis",link:"#wallet-synchronization-analysis",children:[]},{level:3,title:"Transaction broadcasting",slug:"transaction-broadcasting",link:"#transaction-broadcasting",children:[]}]},{level:2,title:"Criticisms",slug:"criticisms",link:"#criticisms",children:[{level:3,title:"Attempt to invade privacy",slug:"attempt-to-invade-privacy",link:"#attempt-to-invade-privacy",children:[]},{level:3,title:"Attempt to destroy fungibility",slug:"attempt-to-destroy-fungibility",link:"#attempt-to-destroy-fungibility",children:[]},{level:3,title:"No mechanism for oversight or appeal",slug:"no-mechanism-for-oversight-or-appeal",link:"#no-mechanism-for-oversight-or-appeal",children:[]},{level:3,title:"Jurisdiction",slug:"jurisdiction",link:"#jurisdiction",children:[]},{level:3,title:"Incentivized to oppose bitcoin updates",slug:"incentivized-to-oppose-bitcoin-updates",link:"#incentivized-to-oppose-bitcoin-updates",children:[]},{level:3,title:"Oversold effectiveness",slug:"oversold-effectiveness",link:"#oversold-effectiveness",children:[]}]},{level:2,title:"Examples",slug:"examples",link:"#examples",children:[]}],path:"/why-wasabi/TransactionSurveillanceCompanies.html",pathLocale:"/",extraFields:[]},{title:"Why Financial Privacy is Especially Important",headers:[{level:2,title:"Why it is important to keep your funds private",slug:"why-it-is-important-to-keep-your-funds-private",link:"#why-it-is-important-to-keep-your-funds-private",children:[]},{level:2,title:"Pseudonyms protect your identity in Bitcoin",slug:"pseudonyms-protect-your-identity-in-bitcoin",link:"#pseudonyms-protect-your-identity-in-bitcoin",children:[]},{level:2,title:"How Bitcoin empowers anonymity",slug:"how-bitcoin-empowers-anonymity",link:"#how-bitcoin-empowers-anonymity",children:[]},{level:2,title:"Privacy through pseudonymous accounts",slug:"privacy-through-pseudonymous-accounts",link:"#privacy-through-pseudonymous-accounts",children:[]},{level:2,title:"Threat model",slug:"threat-model",link:"#threat-model",children:[]}],path:"/why-wasabi/WhyFinancialPrivacy.html",pathLocale:"/",extraFields:[]},{title:"Why Privacy is Important",headers:[{level:2,title:"Privacy? I don't have anything to hide",slug:"privacy-i-don-t-have-anything-to-hide",link:"#privacy-i-don-t-have-anything-to-hide",children:[]},{level:2,title:"Read also",slug:"read-also",link:"#read-also",children:[]},{level:2,title:"Quotes",slug:"quotes",link:"#quotes",children:[]}],path:"/why-wasabi/WhyPrivacyImportant.html",pathLocale:"/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],jg=re(Og),Hg=()=>jg,Fg=({searchIndex:e,routeLocale:t,query:n,maxSuggestions:i})=>{const l=R(()=>e.value.filter(o=>o.pathLocale===t.value));return R(()=>{const o=n.value.trim().toLowerCase();if(!o)return[];const s=[],r=(a,c)=>{_s(o,[c.title])&&s.push({link:`${a.path}#${c.slug}`,title:a.title,header:c.title});for(const u of c.children){if(s.length>=i.value)return;r(a,u)}};for(const a of l.value){if(s.length>=i.value)break;if(_s(o,[a.title,...a.extraFields])){s.push({link:a.path,title:a.title});continue}for(const c of a.headers){if(s.length>=i.value)break;r(a,c)}}return s})},Mg=e=>{const t=re(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},Bg=ge({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:n,maxSuggestions:i}=ji(e),l=nn(),o=_n(),s=Hg(),r=re(null),a=re(!1),c=re(""),u=R(()=>t.value[o.value]??{}),d=Fg({searchIndex:s,routeLocale:o,query:c,maxSuggestions:i}),{focusIndex:h,focusNext:g,focusPrev:m}=Mg(d);Rg({input:r,hotKeys:n});const y=R(()=>a.value&&!!d.value.length),k=()=>{y.value&&m()},x=()=>{y.value&&g()},I=v=>{if(!y.value)return;const _=d.value[v];_&&l.push(_.link).then(()=>{c.value="",h.value=0})};return()=>ce("form",{class:"search-box",role:"search"},[ce("input",{ref:r,type:"search",placeholder:u.value.placeholder,autocomplete:"off",spellcheck:!1,value:c.value,onFocus:()=>a.value=!0,onBlur:()=>a.value=!1,onInput:v=>c.value=v.target.value,onKeydown:v=>{switch(v.key){case"ArrowUp":{k();break}case"ArrowDown":{x();break}case"Enter":{v.preventDefault(),I(h.value);break}}}}),y.value&&ce("ul",{class:"suggestions",onMouseleave:()=>h.value=-1},d.value.map(({link:v,title:_,header:D},W)=>ce("li",{class:["suggestion",{focus:h.value===W}],onMouseenter:()=>h.value=W,onMousedown:()=>I(W)},ce("a",{href:v,onClick:F=>F.preventDefault()},[ce("span",{class:"page-title"},_),D&&ce("span",{class:"page-header"},`> ${D}`)]))))])}});var Dg=["s","/"],$g={"/":{placeholder:"Search..."}};const Ng=$g,zg=Dg,Vg=15,Ug=yt({enhance({app:e}){e.component("SearchBox",t=>ce(Bg,{locales:Ng,hotKeys:zg,maxSuggestions:Vg,...t}))}}),mi=[Oh,Mh,Qh,ef,ff,vf,_f,Ig,Ug],Gg=JSON.parse('{"base":"/","lang":"en-US","title":"Wasabi Docs","description":"An archive of knowledge about Wasabi Wallet, an open-source, non-custodial and privacy-focused Bitcoin wallet for desktop.","head":[],"locales":{}}');var Pn=yn(Gg),qg=cd,Kg=()=>{const e=qd({history:qg(Cr("/")),routes:[{name:"vuepress-route",path:"/:catchAll(.*)",components:{}}],scrollBehavior:(t,n,i)=>i||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{if(t.path!==n.path||n===mt){const i=Zl(t.path);if(i.path!==t.path)return i.path;const l=await i.loader();t.meta={...i.meta,_pageChunk:l}}}),e},Qg=e=>{e.component("ClientOnly",eo),e.component("Content",th),e.component("RouteLink",ni)},Jg=(e,t,n)=>{const i=R(()=>t.currentRoute.value.path),l=oh(i,()=>t.currentRoute.value.meta._pageChunk),o=R(()=>zt.resolveLayouts(n)),s=R(()=>zt.resolveRouteLocale(Pn.value.locales,i.value)),r=R(()=>zt.resolveSiteLocaleData(Pn.value,s.value)),a=R(()=>l.value.comp),c=R(()=>l.value.data),u=R(()=>c.value.frontmatter),d=R(()=>zt.resolvePageHeadTitle(c.value,r.value)),h=R(()=>zt.resolvePageHead(d.value,u.value,r.value)),g=R(()=>zt.resolvePageLang(c.value,r.value)),m=R(()=>zt.resolvePageLayout(c.value,o.value)),y={layouts:o,pageData:c,pageComponent:a,pageFrontmatter:u,pageHead:h,pageHeadTitle:d,pageLang:g,pageLayout:m,redirects:Fr,routeLocale:s,routePath:i,routes:Vn,siteData:Pn,siteLocaleData:r};return e.provide(Yl,y),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>u.value},$head:{get:()=>h.value},$headTitle:{get:()=>d.value},$lang:{get:()=>g.value},$page:{get:()=>c.value},$routeLocale:{get:()=>s.value},$site:{get:()=>Pn.value},$siteLocale:{get:()=>r.value},$withBase:{get:()=>Gi}}),y},Yg=()=>{const e=Jd(),t=Yd();let n=[];const i=()=>{e.value.forEach(s=>{const r=Xg(s);r&&n.push(r)})},l=()=>{const s=[];return e.value.forEach(r=>{const a=Zg(r);a&&s.push(a)}),s},o=()=>{document.documentElement.lang=t.value;const s=l();n.forEach((r,a)=>{const c=s.findIndex(u=>r.isEqualNode(u));c===-1?(r.remove(),delete n[a]):s.splice(c,1)}),s.forEach(r=>document.head.appendChild(r)),n=[...n.filter(r=>!!r),...s]};Yt(eh,o),Ve(()=>{i(),Me(e,o,{immediate:!1})})},Xg=([e,t,n=""])=>{const i=Object.entries(t).map(([r,a])=>dt(a)?`[${r}=${JSON.stringify(a)}]`:a===!0?`[${r}]`:"").join(""),l=`head > ${e}${i}`;return Array.from(document.querySelectorAll(l)).find(r=>r.innerText===n)||null},Zg=([e,t,n])=>{if(!dt(e))return null;const i=document.createElement(e);return Kl(t)&&Object.entries(t).forEach(([l,o])=>{dt(o)?i.setAttribute(l,o):o===!0&&i.setAttribute(l,"")}),dt(n)&&i.appendChild(document.createTextNode(n)),i},em=Ru,tm=async()=>{var n;const e=em({name:"Vuepress",setup(){var o;Yg();for(const s of mi)(o=s.setup)==null||o.call(s);const i=mi.flatMap(({rootComponents:s=[]})=>s.map(r=>ce(r))),l=Xd();return()=>[ce(l.value),i]}}),t=Kg();Qg(e),Jg(e,t,mi);for(const i of mi)await((n=i.enhance)==null?void 0:n.call(i,{app:e,router:t,siteData:Pn}));return e.use(t),{app:e,router:t}};tm().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Ee as _,fe as a,Ft as b,X as c,tm as createVueApp,ie as d,qc as e,z as o,Xt as r,He as w}; function __vite__mapDeps(indexes) { if (!__vite__mapDeps.viteFileDeps) { - __vite__mapDeps.viteFileDeps = ["assets/FAQ-Contribution.html-CxGGPr64.js","assets/Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js","assets/FAQ-Installation.html-ByCwNgKw.js","assets/DownloadMac-DUSPDgNE.js","assets/FAQ-Introduction.html-D5UobHXe.js","assets/FAQ-UseWasabi.html-D5gJQVku.js","assets/AddWalletButton-C7JVhQwV.js","assets/AddWalletAddPassphrase-M0V8PDu3.js","assets/AddWalletConfirmRecoveryWords-DoQpsOos.js","assets/CoinjoinStrategy-BZrDbG5n.js","assets/WalletSynchronizing-Bg2Cuco7.js","assets/AddressAwaitingPayment-B9ABKMdf.js","assets/HistoryRightClick-DykL0_1P.js","assets/AutoStartCoinjoinThreshold-B0lFY-5G.js","assets/SettingsBitcoinCore-DgSldI_2.js","assets/DiscreetModeActivate-Cg4X--AC.js","assets/BitcoinFullNode.html-BnTWJ1TQ.js","assets/CoinJoin.html-CtLVyHpU.js","assets/DiscreetMode.html-D9iPWlT5.js","assets/InstallPackage.html-CVAotl95.js","assets/Receive.html-B2MaHiN7.js","assets/Send.html-B7sMNV6R.js","assets/WalletGeneration.html-DM5zNUbr.js","assets/WalletLoad.html-BVn8n-Hp.js","assets/WalletRecovery.html-DPPR0Qji.js","assets/NetworkLevelPrivacy.html-NGtcEd_n.js","assets/WhyPrivacyImportant.html-D3H3J795.js"] + __vite__mapDeps.viteFileDeps = ["assets/FAQ-Contribution.html-CQsxetkq.js","assets/Logo_without_text_with_bg_dark_with_yt-D8lqXhN0.js","assets/FAQ-Installation.html-CuD82U_3.js","assets/DownloadMac-DUSPDgNE.js","assets/FAQ-Introduction.html-C7cqAIG6.js","assets/FAQ-UseWasabi.html-94kDagvU.js","assets/AddWalletButton-C7JVhQwV.js","assets/AddWalletAddPassphrase-M0V8PDu3.js","assets/AddWalletConfirmRecoveryWords-DoQpsOos.js","assets/CoinjoinStrategy-BZrDbG5n.js","assets/WalletSynchronizing-Bg2Cuco7.js","assets/AddressAwaitingPayment-B9ABKMdf.js","assets/HistoryRightClick-DykL0_1P.js","assets/AutoStartCoinjoinThreshold-B0lFY-5G.js","assets/SettingsBitcoinCore-DgSldI_2.js","assets/DiscreetModeActivate-Cg4X--AC.js","assets/BitcoinFullNode.html-C_yN9emI.js","assets/CoinJoin.html-Buvm4ii4.js","assets/DiscreetMode.html-BJL1ea8e.js","assets/InstallPackage.html-D-UpXvj8.js","assets/Receive.html-BpUPEVUm.js","assets/Send.html-B0uyGrbT.js","assets/WalletGeneration.html-BYYxvj2X.js","assets/WalletLoad.html-JBYidTLT.js","assets/WalletRecovery.html-BiLw8XhX.js","assets/NetworkLevelPrivacy.html-fWyUnxDF.js","assets/WhyPrivacyImportant.html-Dj7M33g8.js"] } return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) } diff --git a/assets/index.html-LiNA9Lcs.js b/assets/index.html-BPPqNLwZ.js similarity index 99% rename from assets/index.html-LiNA9Lcs.js rename to assets/index.html-BPPqNLwZ.js index e4c8af24a1..866277a34f 100644 --- a/assets/index.html-LiNA9Lcs.js +++ b/assets/index.html-BPPqNLwZ.js @@ -1 +1 @@ -import{_ as r,r as l,o as c,c as u,a as t,d as a,w as o,b as e,e as d}from"./app-BPKesm5h.js";const h={},p=t("h1",{id:"getting-started",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#getting-started"},[t("span",null,"Getting Started")])],-1),w=t("p",null,"This is a short comprehensive guide on how to get started using Wasabi.",-1),b=t("p",null,"Please refer to the rest of the documentation for detailed explanations and best practices.",-1),f={class:"table-of-contents"},m=t("h2",{id:"download-wasabi",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#download-wasabi"},[t("span",null,"Download Wasabi")])],-1),g={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},v={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},_=t("h2",{id:"verify-the-download",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#verify-the-download"},[t("span",null,"Verify the Download")])],-1),y=t("p",null,"Optionally, but highly recommended is to verify the downloaded package. This needs to be done in order to make sure that the just downloaded package is the authentic one and not a malicious one (replaced by a hacker etc...).",-1),k=t("h2",{id:"install-wasabi",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#install-wasabi"},[t("span",null,"Install Wasabi")])],-1),x=t("p",null,"The downloaded Wasabi package needs to be installed on the computer so the application can be used.",-1),W=d('

      Welcome Screen

      The first time that you start Wasabi, you will be welcomed with information about the app. Read it and continue.

      Add Wallet

      You will be asked what kind of wallet you want to add. There are 4 options:

      • Create a new wallet
      • Connect hardware wallet
      • Import a wallet
      • Recover a wallet

      Select Create a new wallet.

      Now follow the next few steps/dialogs:

      • Write down the recovery words. (do not share these with anyone!)
      • Add a password. (do not forget it and also write it down on a separate place from the recovery words, without your password you cannot open your wallet and send your bitcoin!)
      • Select the coinjoin strategy: we select the default one Maximize Speed.

      DANGER

      The Recovery words can never be shown again.

      DANGER

      The password cannot be changed later on. If you lose your password you lose your bitcoin.

      Receive bitcoin

      ',11),j=t("code",null,"Receive",-1),I=d('

      Coinjoin

      After you have received some bitcoin, Wasabi will automatically coinjoin the bitcoin for you.

      Coinjoin will automatically start after the incoming funds are confirmed. You need to manually press the play button in the musicbox (at the bottom of the wallet) if you received less than 0.01 BTC.

      You know that your wallet is coinjoining if you see the stop button in the musicbox and the spectrum ("waving" color animation) at the bottom of the wallet.

      Now wait while you leave Wasabi running so it can do some coinjoins. You might need to wait for (a couple of) hour(s) (sometimes less or sometimes more) to get successful coinjoins and to see your privacy percentage reach 100%.

      Funds 100% private

      After one or more coinjoins your funds should be made private as you can see in the Privacy Progress tile at the top. All your funds are private if it displays 100%. In the history you will see a shield icon(s), which indicates that you successfully participated in a coinjoin round(s).

      Use the private bitcoin

      Now that all your bitcoin is private you can use your bitcoin to:

      • Make a payment.
      • Send it to cold storage.

      TIP

      Congratulations you are now using Wasabi!

      ',11);function S(R,T){const i=l("router-link"),s=l("ExternalLinkIcon"),n=l("RouteLink");return c(),u("div",null,[p,w,b,t("nav",f,[t("ul",null,[t("li",null,[a(i,{to:"#download-wasabi"},{default:o(()=>[e("Download Wasabi")]),_:1})]),t("li",null,[a(i,{to:"#verify-the-download"},{default:o(()=>[e("Verify the Download")]),_:1})]),t("li",null,[a(i,{to:"#install-wasabi"},{default:o(()=>[e("Install Wasabi")]),_:1})]),t("li",null,[a(i,{to:"#welcome-screen"},{default:o(()=>[e("Welcome Screen")]),_:1})]),t("li",null,[a(i,{to:"#add-wallet"},{default:o(()=>[e("Add Wallet")]),_:1})]),t("li",null,[a(i,{to:"#receive-bitcoin"},{default:o(()=>[e("Receive bitcoin")]),_:1})]),t("li",null,[a(i,{to:"#coinjoin"},{default:o(()=>[e("Coinjoin")]),_:1})]),t("li",null,[a(i,{to:"#funds-100-private"},{default:o(()=>[e("Funds 100% private")]),_:1})]),t("li",null,[a(i,{to:"#use-the-private-bitcoin"},{default:o(()=>[e("Use the private bitcoin")]),_:1})])])]),m,t("p",null,[e("Download Wasabi from the official website "),t("a",g,[e("wasabiwallet.io"),a(s)]),e(" or "),t("a",v,[e("wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion"),a(s)]),e(" if you're using the Tor Browser.")]),_,y,t("p",null,[e("How to do this depends on the desktop operating system, the detailed guides can be found here: "),a(n,{to:"/using-wasabi/InstallPackage.html#windows"},{default:o(()=>[e("Windows")]),_:1}),e(", "),a(n,{to:"/using-wasabi/InstallPackage.html#debian-and-ubuntu"},{default:o(()=>[e("Debian/Ubuntu")]),_:1}),e(", "),a(n,{to:"/using-wasabi/InstallPackage.html#other-linux"},{default:o(()=>[e("Other Linux")]),_:1}),e(", "),a(n,{to:"/using-wasabi/InstallPackage.html#macos"},{default:o(()=>[e("macOS")]),_:1})]),k,x,t("p",null,[e("How to do this depends on the desktop operating system, the detailed guides can be found here: "),a(n,{to:"/using-wasabi/InstallPackage.html#windows"},{default:o(()=>[e("Windows")]),_:1}),e(", "),a(n,{to:"/using-wasabi/InstallPackage.html#debian-and-ubuntu"},{default:o(()=>[e("Debian/Ubuntu")]),_:1}),e(", "),a(n,{to:"/using-wasabi/InstallPackage.html#other-linux"},{default:o(()=>[e("Other Linux")]),_:1}),e(", "),a(n,{to:"/using-wasabi/InstallPackage.html#macos"},{default:o(()=>[e("macOS")]),_:1})]),W,t("p",null,[e("As you can see, the new wallet is empty as it has 0.00000000 BTC. Click on "),j,e(" at the top right to "),a(n,{to:"/using-wasabi/Receive.html"},{default:o(()=>[e("receive")]),_:1}),e(" some bitcoin to this new wallet.")]),I])}const P=r(h,[["render",S],["__file","index.html.vue"]]),A=JSON.parse('{"path":"/getting-started/","title":"Getting Started","lang":"en-US","frontmatter":{"title":"Getting Started","description":"An easy and short guide on how to get started using Wasabi Wallet. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Download Wasabi","slug":"download-wasabi","link":"#download-wasabi","children":[]},{"level":2,"title":"Verify the Download","slug":"verify-the-download","link":"#verify-the-download","children":[]},{"level":2,"title":"Install Wasabi","slug":"install-wasabi","link":"#install-wasabi","children":[]},{"level":2,"title":"Welcome Screen","slug":"welcome-screen","link":"#welcome-screen","children":[]},{"level":2,"title":"Add Wallet","slug":"add-wallet","link":"#add-wallet","children":[]},{"level":2,"title":"Receive bitcoin","slug":"receive-bitcoin","link":"#receive-bitcoin","children":[]},{"level":2,"title":"Coinjoin","slug":"coinjoin","link":"#coinjoin","children":[]},{"level":2,"title":"Funds 100% private","slug":"funds-100-private","link":"#funds-100-private","children":[]},{"level":2,"title":"Use the private bitcoin","slug":"use-the-private-bitcoin","link":"#use-the-private-bitcoin","children":[]}],"git":{"updatedTime":1706179181000},"filePathRelative":"getting-started/README.md"}');export{P as comp,A as data}; +import{_ as r,r as l,o as c,c as u,a as t,d as a,w as o,b as e,e as d}from"./app-BgbPjqpx.js";const h={},p=t("h1",{id:"getting-started",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#getting-started"},[t("span",null,"Getting Started")])],-1),w=t("p",null,"This is a short comprehensive guide on how to get started using Wasabi.",-1),b=t("p",null,"Please refer to the rest of the documentation for detailed explanations and best practices.",-1),f={class:"table-of-contents"},m=t("h2",{id:"download-wasabi",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#download-wasabi"},[t("span",null,"Download Wasabi")])],-1),g={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},v={href:"http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion",target:"_blank",rel:"noopener noreferrer"},_=t("h2",{id:"verify-the-download",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#verify-the-download"},[t("span",null,"Verify the Download")])],-1),y=t("p",null,"Optionally, but highly recommended is to verify the downloaded package. This needs to be done in order to make sure that the just downloaded package is the authentic one and not a malicious one (replaced by a hacker etc...).",-1),k=t("h2",{id:"install-wasabi",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#install-wasabi"},[t("span",null,"Install Wasabi")])],-1),x=t("p",null,"The downloaded Wasabi package needs to be installed on the computer so the application can be used.",-1),W=d('

      Welcome Screen

      The first time that you start Wasabi, you will be welcomed with information about the app. Read it and continue.

      Add Wallet

      You will be asked what kind of wallet you want to add. There are 4 options:

      • Create a new wallet
      • Connect hardware wallet
      • Import a wallet
      • Recover a wallet

      Select Create a new wallet.

      Now follow the next few steps/dialogs:

      • Write down the recovery words. (do not share these with anyone!)
      • Add a password. (do not forget it and also write it down on a separate place from the recovery words, without your password you cannot open your wallet and send your bitcoin!)
      • Select the coinjoin strategy: we select the default one Maximize Speed.

      DANGER

      The Recovery words can never be shown again.

      DANGER

      The password cannot be changed later on. If you lose your password you lose your bitcoin.

      Receive bitcoin

      ',11),j=t("code",null,"Receive",-1),I=d('

      Coinjoin

      After you have received some bitcoin, Wasabi will automatically coinjoin the bitcoin for you.

      Coinjoin will automatically start after the incoming funds are confirmed. You need to manually press the play button in the musicbox (at the bottom of the wallet) if you received less than 0.01 BTC.

      You know that your wallet is coinjoining if you see the stop button in the musicbox and the spectrum ("waving" color animation) at the bottom of the wallet.

      Now wait while you leave Wasabi running so it can do some coinjoins. You might need to wait for (a couple of) hour(s) (sometimes less or sometimes more) to get successful coinjoins and to see your privacy percentage reach 100%.

      Funds 100% private

      After one or more coinjoins your funds should be made private as you can see in the Privacy Progress tile at the top. All your funds are private if it displays 100%. In the history you will see a shield icon(s), which indicates that you successfully participated in a coinjoin round(s).

      Use the private bitcoin

      Now that all your bitcoin is private you can use your bitcoin to:

      • Make a payment.
      • Send it to cold storage.

      TIP

      Congratulations you are now using Wasabi!

      ',11);function S(R,T){const i=l("router-link"),s=l("ExternalLinkIcon"),n=l("RouteLink");return c(),u("div",null,[p,w,b,t("nav",f,[t("ul",null,[t("li",null,[a(i,{to:"#download-wasabi"},{default:o(()=>[e("Download Wasabi")]),_:1})]),t("li",null,[a(i,{to:"#verify-the-download"},{default:o(()=>[e("Verify the Download")]),_:1})]),t("li",null,[a(i,{to:"#install-wasabi"},{default:o(()=>[e("Install Wasabi")]),_:1})]),t("li",null,[a(i,{to:"#welcome-screen"},{default:o(()=>[e("Welcome Screen")]),_:1})]),t("li",null,[a(i,{to:"#add-wallet"},{default:o(()=>[e("Add Wallet")]),_:1})]),t("li",null,[a(i,{to:"#receive-bitcoin"},{default:o(()=>[e("Receive bitcoin")]),_:1})]),t("li",null,[a(i,{to:"#coinjoin"},{default:o(()=>[e("Coinjoin")]),_:1})]),t("li",null,[a(i,{to:"#funds-100-private"},{default:o(()=>[e("Funds 100% private")]),_:1})]),t("li",null,[a(i,{to:"#use-the-private-bitcoin"},{default:o(()=>[e("Use the private bitcoin")]),_:1})])])]),m,t("p",null,[e("Download Wasabi from the official website "),t("a",g,[e("wasabiwallet.io"),a(s)]),e(" or "),t("a",v,[e("wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onion"),a(s)]),e(" if you're using the Tor Browser.")]),_,y,t("p",null,[e("How to do this depends on the desktop operating system, the detailed guides can be found here: "),a(n,{to:"/using-wasabi/InstallPackage.html#windows"},{default:o(()=>[e("Windows")]),_:1}),e(", "),a(n,{to:"/using-wasabi/InstallPackage.html#debian-and-ubuntu"},{default:o(()=>[e("Debian/Ubuntu")]),_:1}),e(", "),a(n,{to:"/using-wasabi/InstallPackage.html#other-linux"},{default:o(()=>[e("Other Linux")]),_:1}),e(", "),a(n,{to:"/using-wasabi/InstallPackage.html#macos"},{default:o(()=>[e("macOS")]),_:1})]),k,x,t("p",null,[e("How to do this depends on the desktop operating system, the detailed guides can be found here: "),a(n,{to:"/using-wasabi/InstallPackage.html#windows"},{default:o(()=>[e("Windows")]),_:1}),e(", "),a(n,{to:"/using-wasabi/InstallPackage.html#debian-and-ubuntu"},{default:o(()=>[e("Debian/Ubuntu")]),_:1}),e(", "),a(n,{to:"/using-wasabi/InstallPackage.html#other-linux"},{default:o(()=>[e("Other Linux")]),_:1}),e(", "),a(n,{to:"/using-wasabi/InstallPackage.html#macos"},{default:o(()=>[e("macOS")]),_:1})]),W,t("p",null,[e("As you can see, the new wallet is empty as it has 0.00000000 BTC. Click on "),j,e(" at the top right to "),a(n,{to:"/using-wasabi/Receive.html"},{default:o(()=>[e("receive")]),_:1}),e(" some bitcoin to this new wallet.")]),I])}const P=r(h,[["render",S],["__file","index.html.vue"]]),A=JSON.parse('{"path":"/getting-started/","title":"Getting Started","lang":"en-US","frontmatter":{"title":"Getting Started","description":"An easy and short guide on how to get started using Wasabi Wallet. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Download Wasabi","slug":"download-wasabi","link":"#download-wasabi","children":[]},{"level":2,"title":"Verify the Download","slug":"verify-the-download","link":"#verify-the-download","children":[]},{"level":2,"title":"Install Wasabi","slug":"install-wasabi","link":"#install-wasabi","children":[]},{"level":2,"title":"Welcome Screen","slug":"welcome-screen","link":"#welcome-screen","children":[]},{"level":2,"title":"Add Wallet","slug":"add-wallet","link":"#add-wallet","children":[]},{"level":2,"title":"Receive bitcoin","slug":"receive-bitcoin","link":"#receive-bitcoin","children":[]},{"level":2,"title":"Coinjoin","slug":"coinjoin","link":"#coinjoin","children":[]},{"level":2,"title":"Funds 100% private","slug":"funds-100-private","link":"#funds-100-private","children":[]},{"level":2,"title":"Use the private bitcoin","slug":"use-the-private-bitcoin","link":"#use-the-private-bitcoin","children":[]}],"git":{"updatedTime":1706179181000},"filePathRelative":"getting-started/README.md"}');export{P as comp,A as data}; diff --git a/assets/index.html-CSlUkczj.js b/assets/index.html-BV_EdjX3.js similarity index 98% rename from assets/index.html-CSlUkczj.js rename to assets/index.html-BV_EdjX3.js index c7fcea1380..1403acf8ee 100644 --- a/assets/index.html-CSlUkczj.js +++ b/assets/index.html-BV_EdjX3.js @@ -1 +1 @@ -import{_ as l,r as s,o as r,c,a as e,b as t,d as o,w as i}from"./app-BPKesm5h.js";const h={},u=e("hr",null,null,-1),d={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},p={href:"https://github.com/zkSNACKs/WasabiDoc/",target:"_blank",rel:"noopener noreferrer"},f={href:"https://web.archive.org/web/20220804041943/https://docs.wasabiwallet.io/",target:"_blank",rel:"noopener noreferrer"},m=e("h2",{id:"how-to-use-this-documentation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-to-use-this-documentation"},[e("span",null,"How to use this documentation")])],-1),_=e("p",null,"This documentation is a good place to start your education on how to use Wasabi Wallet, as it is a thorough archive about many nuances of Bitcoin privacy.",-1),b=e("h3",{id:"explain-like-i-m-5",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#explain-like-i-m-5"},[e("span",null,"Explain Like I'm 5")])],-1),w=e("h3",{id:"stand-alone-chapters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#stand-alone-chapters"},[e("span",null,"Stand-alone chapters")])],-1),y=e("h3",{id:"search-function",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#search-function"},[e("span",null,"Search function")])],-1);function k(g,v){const a=s("ExternalLinkIcon"),n=s("RouteLink");return r(),c("div",null,[u,e("p",null,[t("This is "),e("a",d,[t("Wasabi Wallet's"),o(a)]),t(" open source documentation. Here you will find information about the nuances of privacy in Bitcoin, how Wasabi solves some of the existing problems, and how you can use this tool to defend yourself. Everyone is welcome to make the Wasabi Wallet documentation better, by contributing "),e("a",p,[t("on GitHub"),o(a)]),t("! The documentation of Wasabi Wallet 1.0 is archived "),e("a",f,[t("here"),o(a)]),t(".")]),m,_,b,e("p",null,[t("If you are new to Wasabi and want to get a quick tutorial on how to use it, you may "),o(n,{to:"/using-wasabi/ELI5.html"},{default:i(()=>[t("start here")]),_:1}),t(".")]),w,e("p",null,[t("If you are interested in the nuances of how one specific aspect of Wasabi works, then check-out the "),o(n,{to:"/using-wasabi/"},{default:i(()=>[t("detailed chapters here")]),_:1}),t(".")]),y,e("p",null,[t("If you have a question about some particular detail, then use the search function at the top right corner to browse the entire archive, including the "),o(n,{to:"/FAQ/"},{default:i(()=>[t("frequently asked questions")]),_:1}),t(".")])])}const W=l(h,[["render",k],["__file","index.html.vue"]]),I=JSON.parse(`{"path":"/","title":"","lang":"en-US","frontmatter":{"home":true,"heroText":"Wasabi Documentation","heroImage":"/Logo_without_text_dark.png","heroImageDark":"/Logo_without_text.png","tagline":"An archive of knowledge about Wasabi Wallet, an open-source, non-custodial and privacy-focused Bitcoin wallet for desktop.","actions":[{"text":"Reclaim Your Privacy →","link":"/getting-started/","type":"primary"}],"features":[{"title":"Open-source","details":"Don't trust, verify. Wasabi is libre and open source software under the MIT license. You have full access to every single line of code, and you can do with it as you please."},{"title":"Non-custodial","details":"Not your keys, not your bitcoin. With Wasabi, you are always in full control of your private and public keys, you never share them with any third party."},{"title":"Privacy-focused","details":"Privacy is the ability to choose what you reveal to others. Wasabi is designed with one goal in mind, to protect your sensitive financial data, on the network level and on the blockchain level."}]},"headers":[{"level":2,"title":"How to use this documentation","slug":"how-to-use-this-documentation","link":"#how-to-use-this-documentation","children":[{"level":3,"title":"Explain Like I'm 5","slug":"explain-like-i-m-5","link":"#explain-like-i-m-5","children":[]},{"level":3,"title":"Stand-alone chapters","slug":"stand-alone-chapters","link":"#stand-alone-chapters","children":[]},{"level":3,"title":"Search function","slug":"search-function","link":"#search-function","children":[]}]}],"git":{"updatedTime":1708599885000},"filePathRelative":"README.md"}`);export{W as comp,I as data}; +import{_ as l,r as s,o as r,c,a as e,b as t,d as o,w as i}from"./app-BgbPjqpx.js";const h={},u=e("hr",null,null,-1),d={href:"https://wasabiwallet.io",target:"_blank",rel:"noopener noreferrer"},p={href:"https://github.com/zkSNACKs/WasabiDoc/",target:"_blank",rel:"noopener noreferrer"},f={href:"https://web.archive.org/web/20220804041943/https://docs.wasabiwallet.io/",target:"_blank",rel:"noopener noreferrer"},m=e("h2",{id:"how-to-use-this-documentation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-to-use-this-documentation"},[e("span",null,"How to use this documentation")])],-1),_=e("p",null,"This documentation is a good place to start your education on how to use Wasabi Wallet, as it is a thorough archive about many nuances of Bitcoin privacy.",-1),b=e("h3",{id:"explain-like-i-m-5",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#explain-like-i-m-5"},[e("span",null,"Explain Like I'm 5")])],-1),w=e("h3",{id:"stand-alone-chapters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#stand-alone-chapters"},[e("span",null,"Stand-alone chapters")])],-1),y=e("h3",{id:"search-function",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#search-function"},[e("span",null,"Search function")])],-1);function k(g,v){const a=s("ExternalLinkIcon"),n=s("RouteLink");return r(),c("div",null,[u,e("p",null,[t("This is "),e("a",d,[t("Wasabi Wallet's"),o(a)]),t(" open source documentation. Here you will find information about the nuances of privacy in Bitcoin, how Wasabi solves some of the existing problems, and how you can use this tool to defend yourself. Everyone is welcome to make the Wasabi Wallet documentation better, by contributing "),e("a",p,[t("on GitHub"),o(a)]),t("! The documentation of Wasabi Wallet 1.0 is archived "),e("a",f,[t("here"),o(a)]),t(".")]),m,_,b,e("p",null,[t("If you are new to Wasabi and want to get a quick tutorial on how to use it, you may "),o(n,{to:"/using-wasabi/ELI5.html"},{default:i(()=>[t("start here")]),_:1}),t(".")]),w,e("p",null,[t("If you are interested in the nuances of how one specific aspect of Wasabi works, then check-out the "),o(n,{to:"/using-wasabi/"},{default:i(()=>[t("detailed chapters here")]),_:1}),t(".")]),y,e("p",null,[t("If you have a question about some particular detail, then use the search function at the top right corner to browse the entire archive, including the "),o(n,{to:"/FAQ/"},{default:i(()=>[t("frequently asked questions")]),_:1}),t(".")])])}const W=l(h,[["render",k],["__file","index.html.vue"]]),I=JSON.parse(`{"path":"/","title":"","lang":"en-US","frontmatter":{"home":true,"heroText":"Wasabi Documentation","heroImage":"/Logo_without_text_dark.png","heroImageDark":"/Logo_without_text.png","tagline":"An archive of knowledge about Wasabi Wallet, an open-source, non-custodial and privacy-focused Bitcoin wallet for desktop.","actions":[{"text":"Reclaim Your Privacy →","link":"/getting-started/","type":"primary"}],"features":[{"title":"Open-source","details":"Don't trust, verify. Wasabi is libre and open source software under the MIT license. You have full access to every single line of code, and you can do with it as you please."},{"title":"Non-custodial","details":"Not your keys, not your bitcoin. With Wasabi, you are always in full control of your private and public keys, you never share them with any third party."},{"title":"Privacy-focused","details":"Privacy is the ability to choose what you reveal to others. Wasabi is designed with one goal in mind, to protect your sensitive financial data, on the network level and on the blockchain level."}]},"headers":[{"level":2,"title":"How to use this documentation","slug":"how-to-use-this-documentation","link":"#how-to-use-this-documentation","children":[{"level":3,"title":"Explain Like I'm 5","slug":"explain-like-i-m-5","link":"#explain-like-i-m-5","children":[]},{"level":3,"title":"Stand-alone chapters","slug":"stand-alone-chapters","link":"#stand-alone-chapters","children":[]},{"level":3,"title":"Search function","slug":"search-function","link":"#search-function","children":[]}]}],"git":{"updatedTime":1708599885000},"filePathRelative":"README.md"}`);export{W as comp,I as data}; diff --git a/assets/index.html-CF7z19Y6.js b/assets/index.html-D8QPFW1A.js similarity index 97% rename from assets/index.html-CF7z19Y6.js rename to assets/index.html-D8QPFW1A.js index 789c9fb3df..30965aa492 100644 --- a/assets/index.html-CF7z19Y6.js +++ b/assets/index.html-D8QPFW1A.js @@ -1 +1 @@ -import{_ as s,r as l,o,c as d,a,d as i,w as t,e as r,b as n}from"./app-BPKesm5h.js";const c={},h=r('

      Building Wasabi

      This is the place with all the nuances of how Wasabi Wallet is being built. You will also find some of the issues they are working on now, the research for future ideas, and all of the necessary information needed to quickly begin making your own invaluable contributions.

      Chapters

      Contributing to Wasabi

      ',4),u=a("h3",{id:"advanced",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#advanced"},[a("span",null,"Advanced")])],-1);function b(p,f){const e=l("RouteLink");return o(),d("div",null,[h,a("ul",null,[a("li",null,[i(e,{to:"/building-wasabi/ContributionChecklist.html"},{default:t(()=>[n("Contribution Checklist")]),_:1})])]),u,a("ul",null,[a("li",null,[i(e,{to:"/building-wasabi/Security.html"},{default:t(()=>[n("Security Policy")]),_:1})]),a("li",null,[i(e,{to:"/building-wasabi/LICENSE.html"},{default:t(()=>[n("MIT License")]),_:1})])])])}const w=s(c,[["render",b],["__file","index.html.vue"]]),_=JSON.parse('{"path":"/building-wasabi/","title":"Building Wasabi","lang":"en-US","frontmatter":{"title":"Building Wasabi","description":"All the information for those Wasabikas interested in helping us build Wasabi Wallet. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Chapters","slug":"chapters","link":"#chapters","children":[{"level":3,"title":"Contributing to Wasabi","slug":"contributing-to-wasabi","link":"#contributing-to-wasabi","children":[]},{"level":3,"title":"Advanced","slug":"advanced","link":"#advanced","children":[]}]}],"git":{"updatedTime":1672842207000},"filePathRelative":"building-wasabi/README.md"}');export{w as comp,_ as data}; +import{_ as s,r as l,o,c as d,a,d as i,w as t,e as r,b as n}from"./app-BgbPjqpx.js";const c={},h=r('

      Building Wasabi

      This is the place with all the nuances of how Wasabi Wallet is being built. You will also find some of the issues they are working on now, the research for future ideas, and all of the necessary information needed to quickly begin making your own invaluable contributions.

      Chapters

      Contributing to Wasabi

      ',4),u=a("h3",{id:"advanced",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#advanced"},[a("span",null,"Advanced")])],-1);function b(p,f){const e=l("RouteLink");return o(),d("div",null,[h,a("ul",null,[a("li",null,[i(e,{to:"/building-wasabi/ContributionChecklist.html"},{default:t(()=>[n("Contribution Checklist")]),_:1})])]),u,a("ul",null,[a("li",null,[i(e,{to:"/building-wasabi/Security.html"},{default:t(()=>[n("Security Policy")]),_:1})]),a("li",null,[i(e,{to:"/building-wasabi/LICENSE.html"},{default:t(()=>[n("MIT License")]),_:1})])])])}const w=s(c,[["render",b],["__file","index.html.vue"]]),_=JSON.parse('{"path":"/building-wasabi/","title":"Building Wasabi","lang":"en-US","frontmatter":{"title":"Building Wasabi","description":"All the information for those Wasabikas interested in helping us build Wasabi Wallet. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Chapters","slug":"chapters","link":"#chapters","children":[{"level":3,"title":"Contributing to Wasabi","slug":"contributing-to-wasabi","link":"#contributing-to-wasabi","children":[]},{"level":3,"title":"Advanced","slug":"advanced","link":"#advanced","children":[]}]}],"git":{"updatedTime":1672842207000},"filePathRelative":"building-wasabi/README.md"}');export{w as comp,_ as data}; diff --git a/assets/index.html-DG0RLxvG.js b/assets/index.html-DB0XlitE.js similarity index 98% rename from assets/index.html-DG0RLxvG.js rename to assets/index.html-DB0XlitE.js index cbf3ff3800..86706a77d5 100644 --- a/assets/index.html-DG0RLxvG.js +++ b/assets/index.html-DB0XlitE.js @@ -1 +1 @@ -import{_ as t,r as n,o as u,c as o,a,d as l,w as e,e as d,b as s}from"./app-BPKesm5h.js";const r={},c=d('

      Using Wasabi

      Here are all the nuances of how to use Wasabi Wallet in all regards. Starting with a step-by-step guide on how to verify and install the software. Further tutorials about the different parts of the wallet, for newbies and power users.

      Chapters

      Introducing Wasabi

      ',4),h=a("h3",{id:"installing-wasabi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#installing-wasabi"},[a("span",null,"Installing Wasabi")])],-1),b=a("h3",{id:"using-wasabi-1",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#using-wasabi-1"},[a("span",null,"Using Wasabi")])],-1),g=a("h3",{id:"best-practices",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#best-practices"},[a("span",null,"Best Practices")])],-1),w=a("h3",{id:"restoring-wasabi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#restoring-wasabi"},[a("span",null,"Restoring Wasabi")])],-1),f=a("h3",{id:"advanced-installing-wasabi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#advanced-installing-wasabi"},[a("span",null,"Advanced Installing Wasabi")])],-1),p=a("h3",{id:"advanced-using-wasabi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#advanced-using-wasabi"},[a("span",null,"Advanced Using Wasabi")])],-1);function _(m,W){const i=n("RouteLink");return u(),o("div",null,[c,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/ELI5.html"},{default:e(()=>[s("Explain Wasabi like I'm 5")]),_:1})])]),h,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/InstallPackage.html"},{default:e(()=>[s("Install package")]),_:1})])]),b,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/WalletGeneration.html"},{default:e(()=>[s("Wallet Generation")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/WalletLoad.html"},{default:e(()=>[s("Wallet Load")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/Receive.html"},{default:e(()=>[s("Receive")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/CoinJoin.html"},{default:e(()=>[s("CoinJoin")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/Send.html"},{default:e(()=>[s("Send")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/ColdWasabi.html"},{default:e(()=>[s("Hardware Wallet")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/BitcoinFullNode.html"},{default:e(()=>[s("Bitcoin Full Node")]),_:1})])]),g,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/PasswordBestPractices.html"},{default:e(()=>[s("Passwords")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/BackupBestPractices.html"},{default:e(()=>[s("Backups")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/ChangeCoins.html"},{default:e(()=>[s("Change Coins")]),_:1})])]),w,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/WalletRecovery.html"},{default:e(()=>[s("Recover a Wallet")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/RestoreElectrum.html"},{default:e(()=>[s("Restoring Wasabi Wallet to Electrum")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/PasswordFinder.html"},{default:e(()=>[s("Password Finder")]),_:1})])]),f,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/BuildSource.html"},{default:e(()=>[s("Build from source code")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/DeterministicBuild.html"},{default:e(()=>[s("Deterministic Build")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/WasabiSetupVM.html"},{default:e(()=>[s("Wasabi Setup using Virtual Machines")]),_:1})])]),p,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/StartupParameters.html"},{default:e(()=>[s("Startup parameters")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/Daemon.html"},{default:e(()=>[s("Headless Wasabi Daemon")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/RPC.html"},{default:e(()=>[s("RPC Interface")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/DiscreetMode.html"},{default:e(()=>[s("Discreet Mode")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/PayJoin.html"},{default:e(()=>[s("PayJoin")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/Testnet.html"},{default:e(()=>[s("Testnet")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/BIPs.html"},{default:e(()=>[s("Supported BIPs")]),_:1})])])])}const k=t(r,[["render",_],["__file","index.html.vue"]]),B=JSON.parse('{"path":"/using-wasabi/","title":"Using Wasabi","lang":"en-US","frontmatter":{"title":"Using Wasabi","description":"Information and step-by-step guides on the nuances of how to use Wasabi. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Chapters","slug":"chapters","link":"#chapters","children":[{"level":3,"title":"Introducing Wasabi","slug":"introducing-wasabi","link":"#introducing-wasabi","children":[]},{"level":3,"title":"Installing Wasabi","slug":"installing-wasabi","link":"#installing-wasabi","children":[]},{"level":3,"title":"Using Wasabi","slug":"using-wasabi-1","link":"#using-wasabi-1","children":[]},{"level":3,"title":"Best Practices","slug":"best-practices","link":"#best-practices","children":[]},{"level":3,"title":"Restoring Wasabi","slug":"restoring-wasabi","link":"#restoring-wasabi","children":[]},{"level":3,"title":"Advanced Installing Wasabi","slug":"advanced-installing-wasabi","link":"#advanced-installing-wasabi","children":[]},{"level":3,"title":"Advanced Using Wasabi","slug":"advanced-using-wasabi","link":"#advanced-using-wasabi","children":[]}]}],"git":{"updatedTime":1705475528000},"filePathRelative":"using-wasabi/README.md"}');export{k as comp,B as data}; +import{_ as t,r as n,o as u,c as o,a,d as l,w as e,e as d,b as s}from"./app-BgbPjqpx.js";const r={},c=d('

      Using Wasabi

      Here are all the nuances of how to use Wasabi Wallet in all regards. Starting with a step-by-step guide on how to verify and install the software. Further tutorials about the different parts of the wallet, for newbies and power users.

      Chapters

      Introducing Wasabi

      ',4),h=a("h3",{id:"installing-wasabi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#installing-wasabi"},[a("span",null,"Installing Wasabi")])],-1),b=a("h3",{id:"using-wasabi-1",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#using-wasabi-1"},[a("span",null,"Using Wasabi")])],-1),g=a("h3",{id:"best-practices",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#best-practices"},[a("span",null,"Best Practices")])],-1),w=a("h3",{id:"restoring-wasabi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#restoring-wasabi"},[a("span",null,"Restoring Wasabi")])],-1),f=a("h3",{id:"advanced-installing-wasabi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#advanced-installing-wasabi"},[a("span",null,"Advanced Installing Wasabi")])],-1),p=a("h3",{id:"advanced-using-wasabi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#advanced-using-wasabi"},[a("span",null,"Advanced Using Wasabi")])],-1);function _(m,W){const i=n("RouteLink");return u(),o("div",null,[c,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/ELI5.html"},{default:e(()=>[s("Explain Wasabi like I'm 5")]),_:1})])]),h,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/InstallPackage.html"},{default:e(()=>[s("Install package")]),_:1})])]),b,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/WalletGeneration.html"},{default:e(()=>[s("Wallet Generation")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/WalletLoad.html"},{default:e(()=>[s("Wallet Load")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/Receive.html"},{default:e(()=>[s("Receive")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/CoinJoin.html"},{default:e(()=>[s("CoinJoin")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/Send.html"},{default:e(()=>[s("Send")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/ColdWasabi.html"},{default:e(()=>[s("Hardware Wallet")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/BitcoinFullNode.html"},{default:e(()=>[s("Bitcoin Full Node")]),_:1})])]),g,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/PasswordBestPractices.html"},{default:e(()=>[s("Passwords")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/BackupBestPractices.html"},{default:e(()=>[s("Backups")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/ChangeCoins.html"},{default:e(()=>[s("Change Coins")]),_:1})])]),w,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/WalletRecovery.html"},{default:e(()=>[s("Recover a Wallet")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/RestoreElectrum.html"},{default:e(()=>[s("Restoring Wasabi Wallet to Electrum")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/PasswordFinder.html"},{default:e(()=>[s("Password Finder")]),_:1})])]),f,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/BuildSource.html"},{default:e(()=>[s("Build from source code")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/DeterministicBuild.html"},{default:e(()=>[s("Deterministic Build")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/WasabiSetupVM.html"},{default:e(()=>[s("Wasabi Setup using Virtual Machines")]),_:1})])]),p,a("ul",null,[a("li",null,[l(i,{to:"/using-wasabi/StartupParameters.html"},{default:e(()=>[s("Startup parameters")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/Daemon.html"},{default:e(()=>[s("Headless Wasabi Daemon")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/RPC.html"},{default:e(()=>[s("RPC Interface")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/DiscreetMode.html"},{default:e(()=>[s("Discreet Mode")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/PayJoin.html"},{default:e(()=>[s("PayJoin")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/Testnet.html"},{default:e(()=>[s("Testnet")]),_:1})]),a("li",null,[l(i,{to:"/using-wasabi/BIPs.html"},{default:e(()=>[s("Supported BIPs")]),_:1})])])])}const k=t(r,[["render",_],["__file","index.html.vue"]]),B=JSON.parse('{"path":"/using-wasabi/","title":"Using Wasabi","lang":"en-US","frontmatter":{"title":"Using Wasabi","description":"Information and step-by-step guides on the nuances of how to use Wasabi. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Chapters","slug":"chapters","link":"#chapters","children":[{"level":3,"title":"Introducing Wasabi","slug":"introducing-wasabi","link":"#introducing-wasabi","children":[]},{"level":3,"title":"Installing Wasabi","slug":"installing-wasabi","link":"#installing-wasabi","children":[]},{"level":3,"title":"Using Wasabi","slug":"using-wasabi-1","link":"#using-wasabi-1","children":[]},{"level":3,"title":"Best Practices","slug":"best-practices","link":"#best-practices","children":[]},{"level":3,"title":"Restoring Wasabi","slug":"restoring-wasabi","link":"#restoring-wasabi","children":[]},{"level":3,"title":"Advanced Installing Wasabi","slug":"advanced-installing-wasabi","link":"#advanced-installing-wasabi","children":[]},{"level":3,"title":"Advanced Using Wasabi","slug":"advanced-using-wasabi","link":"#advanced-using-wasabi","children":[]}]}],"git":{"updatedTime":1705475528000},"filePathRelative":"using-wasabi/README.md"}');export{k as comp,B as data}; diff --git a/assets/index.html-rmdsKcvV.js b/assets/index.html-QxRAyLdd.js similarity index 96% rename from assets/index.html-rmdsKcvV.js rename to assets/index.html-QxRAyLdd.js index 5065b5e99c..f72e9cc0ee 100644 --- a/assets/index.html-rmdsKcvV.js +++ b/assets/index.html-QxRAyLdd.js @@ -1 +1 @@ -import{_ as i,r as o,o as l,c as r,a as e,d as n,w as a,b as s}from"./app-BPKesm5h.js";const c={},u=e("h1",{id:"frequently-asked-questions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#frequently-asked-questions"},[e("span",null,"Frequently Asked Questions")])],-1),d=e("p",null,"This is an archive with many questions that Wasabikas have asked most frequently, including:",-1),h=e("ul",null,[e("li",null,"Answers about the basics of privacy and Bitcoin in general."),e("li",null,"The important details of how to install Wasabi properly, and the best practices for using it."),e("li",null,"Further guidance for those who are interested in contributing to Wasabi.")],-1),f=e("h2",{id:"chapters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#chapters"},[e("span",null,"Chapters")])],-1);function p(_,m){const t=o("RouteLink");return l(),r("div",null,[u,d,h,f,e("ul",null,[e("li",null,[n(t,{to:"/FAQ/FAQ-Introduction.html"},{default:a(()=>[s("Introduction FAQ")]),_:1})]),e("li",null,[n(t,{to:"/FAQ/FAQ-Installation.html"},{default:a(()=>[s("Installation FAQ")]),_:1})]),e("li",null,[n(t,{to:"/FAQ/FAQ-UseWasabi.html"},{default:a(()=>[s("Use of Wasabi FAQ")]),_:1})]),e("li",null,[n(t,{to:"/FAQ/FAQ-GeneralBitcoinPrivacy.html"},{default:a(()=>[s("Bitcoin Privacy FAQ")]),_:1})]),e("li",null,[n(t,{to:"/FAQ/FAQ-Contribution.html"},{default:a(()=>[s("Contribution FAQ")]),_:1})])])])}const F=i(c,[["render",p],["__file","index.html.vue"]]),Q=JSON.parse('{"path":"/FAQ/","title":"Frequently Asked Questions","lang":"en-US","frontmatter":{"title":"Frequently Asked Questions","description":"Some of the questions that Wasabikas frequently have, with answers for easy reference. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Chapters","slug":"chapters","link":"#chapters","children":[]}],"git":{"updatedTime":1668961773000},"filePathRelative":"FAQ/README.md"}');export{F as comp,Q as data}; +import{_ as i,r as o,o as l,c as r,a as e,d as n,w as a,b as s}from"./app-BgbPjqpx.js";const c={},u=e("h1",{id:"frequently-asked-questions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#frequently-asked-questions"},[e("span",null,"Frequently Asked Questions")])],-1),d=e("p",null,"This is an archive with many questions that Wasabikas have asked most frequently, including:",-1),h=e("ul",null,[e("li",null,"Answers about the basics of privacy and Bitcoin in general."),e("li",null,"The important details of how to install Wasabi properly, and the best practices for using it."),e("li",null,"Further guidance for those who are interested in contributing to Wasabi.")],-1),f=e("h2",{id:"chapters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#chapters"},[e("span",null,"Chapters")])],-1);function p(_,m){const t=o("RouteLink");return l(),r("div",null,[u,d,h,f,e("ul",null,[e("li",null,[n(t,{to:"/FAQ/FAQ-Introduction.html"},{default:a(()=>[s("Introduction FAQ")]),_:1})]),e("li",null,[n(t,{to:"/FAQ/FAQ-Installation.html"},{default:a(()=>[s("Installation FAQ")]),_:1})]),e("li",null,[n(t,{to:"/FAQ/FAQ-UseWasabi.html"},{default:a(()=>[s("Use of Wasabi FAQ")]),_:1})]),e("li",null,[n(t,{to:"/FAQ/FAQ-GeneralBitcoinPrivacy.html"},{default:a(()=>[s("Bitcoin Privacy FAQ")]),_:1})]),e("li",null,[n(t,{to:"/FAQ/FAQ-Contribution.html"},{default:a(()=>[s("Contribution FAQ")]),_:1})])])])}const F=i(c,[["render",p],["__file","index.html.vue"]]),Q=JSON.parse('{"path":"/FAQ/","title":"Frequently Asked Questions","lang":"en-US","frontmatter":{"title":"Frequently Asked Questions","description":"Some of the questions that Wasabikas frequently have, with answers for easy reference. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Chapters","slug":"chapters","link":"#chapters","children":[]}],"git":{"updatedTime":1668961773000},"filePathRelative":"FAQ/README.md"}');export{F as comp,Q as data}; diff --git a/assets/index.html-D6Bg9Vdg.js b/assets/index.html-dAMsOFGn.js similarity index 97% rename from assets/index.html-D6Bg9Vdg.js rename to assets/index.html-dAMsOFGn.js index 20539e2669..9ae4dabda7 100644 --- a/assets/index.html-D6Bg9Vdg.js +++ b/assets/index.html-dAMsOFGn.js @@ -1 +1 @@ -import{_ as l,r as s,o,c as r,a,d as i,w as t,e as c,b as n}from"./app-BPKesm5h.js";const h={},d=c('

      Why Wasabi

      This is the place with an introduction to privacy in general, and why especially financial privacy is so important. Here is covered how Bitcoin is already good for privacy, much better than the incumbent monetary system. And why Wasabi can make Bitcoin an even better tool of self-defense by default.

      Chapters

      Why Privacy

      ',4),y=a("h3",{id:"privacy-in-bitcoin",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#privacy-in-bitcoin"},[a("span",null,"Privacy in Bitcoin")])],-1);function p(u,w){const e=s("RouteLink");return o(),r("div",null,[d,a("ul",null,[a("li",null,[i(e,{to:"/why-wasabi/WhyPrivacyImportant.html"},{default:t(()=>[n("Why Privacy is Important")]),_:1})]),a("li",null,[i(e,{to:"/why-wasabi/WhyFinancialPrivacy.html"},{default:t(()=>[n("Why Financial Privacy is Especially Important")]),_:1})]),a("li",null,[i(e,{to:"/why-wasabi/LegalConcern.html"},{default:t(()=>[n("CoinJoin Legal Concern")]),_:1})])]),y,a("ul",null,[a("li",null,[i(e,{to:"/why-wasabi/Coins.html"},{default:t(()=>[n("Coins")]),_:1})]),a("li",null,[i(e,{to:"/why-wasabi/AddressReuse.html"},{default:t(()=>[n("Address Reuse")]),_:1})]),a("li",null,[i(e,{to:"/why-wasabi/TransactionGraph.html"},{default:t(()=>[n("Transaction Graph")]),_:1})]),a("li",null,[i(e,{to:"/why-wasabi/NetworkLevelPrivacy.html"},{default:t(()=>[n("Network-Level Privacy")]),_:1})]),a("li",null,[i(e,{to:"/why-wasabi/TransactionSurveillanceCompanies.html"},{default:t(()=>[n("Transaction Surveillance Companies")]),_:1})])])])}const m=l(h,[["render",p],["__file","index.html.vue"]]),b=JSON.parse('{"path":"/why-wasabi/","title":"Why Wasabi","lang":"en-US","frontmatter":{"title":"Why Wasabi","description":"An introduction to why privacy is important and what problems Wasabi solves. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Chapters","slug":"chapters","link":"#chapters","children":[{"level":3,"title":"Why Privacy","slug":"why-privacy","link":"#why-privacy","children":[]},{"level":3,"title":"Privacy in Bitcoin","slug":"privacy-in-bitcoin","link":"#privacy-in-bitcoin","children":[]}]}],"git":{"updatedTime":1666104632000},"filePathRelative":"why-wasabi/README.md"}');export{m as comp,b as data}; +import{_ as l,r as s,o,c as r,a,d as i,w as t,e as c,b as n}from"./app-BgbPjqpx.js";const h={},d=c('

      Why Wasabi

      This is the place with an introduction to privacy in general, and why especially financial privacy is so important. Here is covered how Bitcoin is already good for privacy, much better than the incumbent monetary system. And why Wasabi can make Bitcoin an even better tool of self-defense by default.

      Chapters

      Why Privacy

      ',4),y=a("h3",{id:"privacy-in-bitcoin",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#privacy-in-bitcoin"},[a("span",null,"Privacy in Bitcoin")])],-1);function p(u,w){const e=s("RouteLink");return o(),r("div",null,[d,a("ul",null,[a("li",null,[i(e,{to:"/why-wasabi/WhyPrivacyImportant.html"},{default:t(()=>[n("Why Privacy is Important")]),_:1})]),a("li",null,[i(e,{to:"/why-wasabi/WhyFinancialPrivacy.html"},{default:t(()=>[n("Why Financial Privacy is Especially Important")]),_:1})]),a("li",null,[i(e,{to:"/why-wasabi/LegalConcern.html"},{default:t(()=>[n("CoinJoin Legal Concern")]),_:1})])]),y,a("ul",null,[a("li",null,[i(e,{to:"/why-wasabi/Coins.html"},{default:t(()=>[n("Coins")]),_:1})]),a("li",null,[i(e,{to:"/why-wasabi/AddressReuse.html"},{default:t(()=>[n("Address Reuse")]),_:1})]),a("li",null,[i(e,{to:"/why-wasabi/TransactionGraph.html"},{default:t(()=>[n("Transaction Graph")]),_:1})]),a("li",null,[i(e,{to:"/why-wasabi/NetworkLevelPrivacy.html"},{default:t(()=>[n("Network-Level Privacy")]),_:1})]),a("li",null,[i(e,{to:"/why-wasabi/TransactionSurveillanceCompanies.html"},{default:t(()=>[n("Transaction Surveillance Companies")]),_:1})])])])}const m=l(h,[["render",p],["__file","index.html.vue"]]),b=JSON.parse('{"path":"/why-wasabi/","title":"Why Wasabi","lang":"en-US","frontmatter":{"title":"Why Wasabi","description":"An introduction to why privacy is important and what problems Wasabi solves. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Chapters","slug":"chapters","link":"#chapters","children":[{"level":3,"title":"Why Privacy","slug":"why-privacy","link":"#why-privacy","children":[]},{"level":3,"title":"Privacy in Bitcoin","slug":"privacy-in-bitcoin","link":"#privacy-in-bitcoin","children":[]}]}],"git":{"updatedTime":1666104632000},"filePathRelative":"why-wasabi/README.md"}');export{m as comp,b as data}; diff --git a/assets/index.html-CzzoGAJl.js b/assets/index.html-ysdckVqf.js similarity index 95% rename from assets/index.html-CzzoGAJl.js rename to assets/index.html-ysdckVqf.js index 4f54adcbbc..d812f5d3e1 100644 --- a/assets/index.html-CzzoGAJl.js +++ b/assets/index.html-ysdckVqf.js @@ -1 +1 @@ -import{_ as n,r as i,o as r,c as l,a as e,d as s,w as t,b as o}from"./app-BPKesm5h.js";const c={},d=e("h1",{id:"glossary",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#glossary"},[e("span",null,"Glossary")])],-1),h=e("p",null,"This glossary contains the explanations of common words used in Wasabi and regarding Bitcoin privacy in general. Every item contains a link to the respective full document for more details.",-1),p=e("h2",{id:"chapters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#chapters"},[e("span",null,"Chapters")])],-1);function u(m,_){const a=i("RouteLink");return r(),l("div",null,[d,h,p,e("ul",null,[e("li",null,[s(a,{to:"/glossary/Glossary-GeneralBitcoin.html"},{default:t(()=>[o("Bitcoin in general")]),_:1})]),e("li",null,[s(a,{to:"/glossary/Glossary-PrivacyWasabi.html"},{default:t(()=>[o("Privacy and Wasabi")]),_:1})])])])}const y=n(c,[["render",u],["__file","index.html.vue"]]),g=JSON.parse('{"path":"/glossary/","title":"Glossary","lang":"en-US","frontmatter":{"title":"Glossary","description":"Explanations of common words used in Wasabi and regarding Bitcoin privacy with links to the docs for more details. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Chapters","slug":"chapters","link":"#chapters","children":[]}],"git":{"updatedTime":1668961773000},"filePathRelative":"glossary/README.md"}');export{y as comp,g as data}; +import{_ as n,r as i,o as r,c as l,a as e,d as s,w as t,b as o}from"./app-BgbPjqpx.js";const c={},d=e("h1",{id:"glossary",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#glossary"},[e("span",null,"Glossary")])],-1),h=e("p",null,"This glossary contains the explanations of common words used in Wasabi and regarding Bitcoin privacy in general. Every item contains a link to the respective full document for more details.",-1),p=e("h2",{id:"chapters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#chapters"},[e("span",null,"Chapters")])],-1);function u(m,_){const a=i("RouteLink");return r(),l("div",null,[d,h,p,e("ul",null,[e("li",null,[s(a,{to:"/glossary/Glossary-GeneralBitcoin.html"},{default:t(()=>[o("Bitcoin in general")]),_:1})]),e("li",null,[s(a,{to:"/glossary/Glossary-PrivacyWasabi.html"},{default:t(()=>[o("Privacy and Wasabi")]),_:1})])])])}const y=n(c,[["render",u],["__file","index.html.vue"]]),g=JSON.parse('{"path":"/glossary/","title":"Glossary","lang":"en-US","frontmatter":{"title":"Glossary","description":"Explanations of common words used in Wasabi and regarding Bitcoin privacy with links to the docs for more details. This is the Wasabi documentation, an archive of knowledge about the open-source, non-custodial and privacy-focused Bitcoin wallet for desktop."},"headers":[{"level":2,"title":"Chapters","slug":"chapters","link":"#chapters","children":[]}],"git":{"updatedTime":1668961773000},"filePathRelative":"glossary/README.md"}');export{y as comp,g as data}; diff --git a/building-wasabi/ContributionChecklist.html b/building-wasabi/ContributionChecklist.html index aab2f81e53..86e781a352 100644 --- a/building-wasabi/ContributionChecklist.html +++ b/building-wasabi/ContributionChecklist.html @@ -27,11 +27,11 @@ Contribution Checklist | Wasabi Docs - - + +

      Contribution Checklist

      So you're interested in contributing to Wasabi - welcome!

      Embrace the open-source crypto-anarchy!

      No one is here to tell you what to do, and it is not required to work on an existing issue to contribute to Wasabi. Contributors are free to work on their own forked versions on whatever they want, however they wish and without any permission from anyone. With that being said, in order to maximize the usefulness/impact of your work, it's a good idea to consult with other Wasabikas via Slack, GitHub, or other communication channels before setting out on any serious contribution effort.

      This checklist will get you plugged in and productive as quickly as possible.

      Who is a contributor?

      A contributor is any individual who works to improve and add value to Wasabi and its users.

      You can become a Wasabika!

      Wasabi Wallet is free and open-source software, but contributing is not just about writing code. This means anything from fixing typos in documentation, answering questions of fellow Wasabikas, creating videos, podcasts and memes, implementing new Wasabi features and everything in-between. All such contributions are very welcomed and greatly appreciated.

      Say hello and get started

      • Join our Slackopen in new window and especially check out our GitHub repositoryopen in new window.
      • Introduce yourself, say a bit about your skills and interests. This will help others point you in the right direction.
      • Explore the communication channels and find out what the peers are tinkering on, learn about the project and who is contributing in what way. This will help you to find the interesting challenges you can work on.
      • Wasabi Research Club is a weekly online call, focused mainly on Bitcoin privacy. Everyone is welcome to join the discussions. However, being familiar with the topic (if there is any) is recommended.

      Discussions might be recorded and published on the Wasabi Wallet YouTube channelopen in new window.

      You can find the schedule, call link, past recordings and more at the Wasabi Research Club repositoryopen in new window.

      Learn how Wasabikas work

      It’s a simple set of collaboration rules based on GitHub’s fork and pull request model, and a foundational part of how we work together.

      What to work on

      Education and development are vitally important aspects of Bitcoin privacy and Wasabi Wallet specifically.

      The more Wasabi users there are, the better their privacy, because anonymity loves companyopen in new window.

      The better UX and privacy Wasabi provides, the more there will be users, because of network effectopen in new window.

      Education Contributor

      1. Videos, podcasts, memes and articles are great ways of sharing information to your peers. You can create wallet tutorials, record insightful discussions, write articles or make memes about Wasabi and privacy.
      2. Organizing events and doing presentations about Wasabi Wallet and Bitcoin privacy. Connecting like-minded individuals, who want to take control of their own financial privacy and teaching them about the awesome tools that are available, can be life changing.
      3. Helping and teaching new users, once you are familiar with the software, is something that can't be underestimated. You can do this in any social media like Twitter, Telegram, Reddit etc or in your own neighborhood.

      [zkSNACKs Ltd.](https://zksnacks.com/) is known for compensating educators who consistently help out new users or create good content.

      The company is actively sponsoring Bitcoin events and organizing Contribution Gamesopen in new window. In case you have been contributing already, feel free to let other Wasabikas know by sending us a link to your content in Slackopen in new window.

      GitHub Contributor

      1. Find a problem somewhere in Wasabi-land that (a) needs fixing or improvement and (b) is a match for your skills and interests. Browse open issuesopen in new window and ask around about what other contributors think needs fixing. Because while you don’t need anybody’s permission and you can work on whatever you want, you’ll want to know up front whether anybody else is going to care about the work you do.
      2. Do work to fix that problem. Submit your fix for review with a pull request (for codeopen in new window and documentationopen in new window changes) or with a GitHub issueopen in new window (for everything else).
      3. Request that others review your work. The best way to do this is by writing good commit comments and pull request/issue descriptions that clearly explain the problem your work is intended to solve, why it’s important, and why you fixed it the way you did. Make it as easy as possible for others to review your work. Make it a pleasure for others to review your work.
      4. Incorporate review feedback you get until your fix gets merged or is otherwise accepted.
      5. Repeat steps 1–4.

      Remember: every contributor is free to work on what they want, including maintainers who may or may not want to review and merge your pull request if they don't have any prior context for it, or reason to believe it's worth spending their time on.

      Reviews are for everybody!

      If you want to be really popular around here, don’t just submit your own work, but also spend time reviewing the work of others.

      - + diff --git a/building-wasabi/LICENSE.html b/building-wasabi/LICENSE.html index c3f8cff67c..1718f75455 100644 --- a/building-wasabi/LICENSE.html +++ b/building-wasabi/LICENSE.html @@ -27,11 +27,11 @@ MIT License | Wasabi Docs - - + +

      MIT License

      Wasabi Wallet and Wasabi documentation is licensed under the MIT License.

      A short and simple permissive license with conditions only requiring preservation of copyright and license notices. Licensed works, modifications, and larger works may be distributed under different terms and without source code.

      PermissionsLimitationsConditions
      Commercial useLiabilityLicense and copyright notice
      ModificationWarranty
      Distribution
      Private use

      You can check the license hereopen in new window.

      - + diff --git a/building-wasabi/Security.html b/building-wasabi/Security.html index 1ac3956bcf..7615f41aee 100644 --- a/building-wasabi/Security.html +++ b/building-wasabi/Security.html @@ -27,8 +27,8 @@ Security Policy | Wasabi Docs - - + +

      Security Policy

      If a vulnerability does not compromise users' privacy or security, open a regular GitHub issueopen in new window.

      If it does, then pay great care to responsible disclosure. Report a private vulnerability on GitHubopen in new window or send an email to molnardavid84@gmail.com, preferably using PGP encryption: F079 0C08 68BD BAB8 EE33 F9CE 50FB 7FEB 00F9 7588

      -----BEGIN PGP PUBLIC KEY BLOCK-----
      @@ -178,6 +178,6 @@
       =QePN
       -----END PGP PUBLIC KEY BLOCK-----
       
      - + diff --git a/building-wasabi/index.html b/building-wasabi/index.html index 6f92283b46..8e4f970f9b 100644 --- a/building-wasabi/index.html +++ b/building-wasabi/index.html @@ -27,11 +27,11 @@ Building Wasabi | Wasabi Docs - - + +

      Building Wasabi

      This is the place with all the nuances of how Wasabi Wallet is being built. You will also find some of the issues they are working on now, the research for future ideas, and all of the necessary information needed to quickly begin making your own invaluable contributions.

      Chapters

      Contributing to Wasabi

      Advanced

      - + diff --git a/getting-started/index.html b/getting-started/index.html index 3abb83ba82..3d8cd4f966 100644 --- a/getting-started/index.html +++ b/getting-started/index.html @@ -27,11 +27,11 @@ Getting Started | Wasabi Docs - - + +

      Getting Started

      This is a short comprehensive guide on how to get started using Wasabi.

      Please refer to the rest of the documentation for detailed explanations and best practices.

      Download Wasabi

      Download Wasabi from the official website wasabiwallet.ioopen in new window or wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onionopen in new window if you're using the Tor Browser.

      Verify the Download

      Optionally, but highly recommended is to verify the downloaded package. This needs to be done in order to make sure that the just downloaded package is the authentic one and not a malicious one (replaced by a hacker etc...).

      How to do this depends on the desktop operating system, the detailed guides can be found here: Windows, Debian/Ubuntu, Other Linux, macOS

      Install Wasabi

      The downloaded Wasabi package needs to be installed on the computer so the application can be used.

      How to do this depends on the desktop operating system, the detailed guides can be found here: Windows, Debian/Ubuntu, Other Linux, macOS

      Welcome Screen

      The first time that you start Wasabi, you will be welcomed with information about the app. Read it and continue.

      Add Wallet

      You will be asked what kind of wallet you want to add. There are 4 options:

      • Create a new wallet
      • Connect hardware wallet
      • Import a wallet
      • Recover a wallet

      Select Create a new wallet.

      Now follow the next few steps/dialogs:

      • Write down the recovery words. (do not share these with anyone!)
      • Add a password. (do not forget it and also write it down on a separate place from the recovery words, without your password you cannot open your wallet and send your bitcoin!)
      • Select the coinjoin strategy: we select the default one Maximize Speed.

      DANGER

      The Recovery words can never be shown again.

      DANGER

      The password cannot be changed later on. If you lose your password you lose your bitcoin.

      Receive bitcoin

      As you can see, the new wallet is empty as it has 0.00000000 BTC. Click on Receive at the top right to receive some bitcoin to this new wallet.

      Coinjoin

      After you have received some bitcoin, Wasabi will automatically coinjoin the bitcoin for you.

      Coinjoin will automatically start after the incoming funds are confirmed. You need to manually press the play button in the musicbox (at the bottom of the wallet) if you received less than 0.01 BTC.

      You know that your wallet is coinjoining if you see the stop button in the musicbox and the spectrum ("waving" color animation) at the bottom of the wallet.

      Now wait while you leave Wasabi running so it can do some coinjoins. You might need to wait for (a couple of) hour(s) (sometimes less or sometimes more) to get successful coinjoins and to see your privacy percentage reach 100%.

      Funds 100% private

      After one or more coinjoins your funds should be made private as you can see in the Privacy Progress tile at the top. All your funds are private if it displays 100%. In the history you will see a shield icon(s), which indicates that you successfully participated in a coinjoin round(s).

      Use the private bitcoin

      Now that all your bitcoin is private you can use your bitcoin to:

      • Make a payment.
      • Send it to cold storage.

      TIP

      Congratulations you are now using Wasabi!

      - + diff --git a/glossary/Glossary-GeneralBitcoin.html b/glossary/Glossary-GeneralBitcoin.html index 7ad95c36e7..ac1606fcb4 100644 --- a/glossary/Glossary-GeneralBitcoin.html +++ b/glossary/Glossary-GeneralBitcoin.html @@ -27,11 +27,11 @@ Bitcoin in general | Wasabi Docs - - + +

      Bitcoin in general

      Address

      A Bitcoin invoice address commits to a public key or script which defines who can spend the coin. It is specified in the output of a transaction, and it should only be used once. Wasabi uses the bech32 and bech32m format to encode native segregated witness addresses. Read more: Bitcoin addresses

      Bitcoin

      Bitcoin is a peer-to-peer electronic cash system. An innovative payment network and a new kind of money. It is a decentralized digital currency without a central bank or single administrator that can be sent from user to user on the peer-to-peer bitcoin blockchain network without the need for intermediaries.

      Bitcoin Core

      Bitcoin Core is an open-source project which maintains and releases Bitcoin client software called Bitcoin Core, considered to be Bitcoin's reference implementation. It is a direct descendant of the original Bitcoin software client released by Satoshi Nakamoto after he published the famous Bitcoin whitepaper.

      Bitcoin Core consists of both full-node software for fully validating the blockchain as well as a Bitcoin wallet. The project also currently maintains related software such as the cryptography library libsecp256k1 and others located at GitHub. Read more: Bitcoin Core Websiteopen in new window

      Bitcoin Improvement Proposal (BIP)

      Bitcoin Improvement Proposal. A design document for introducing features or information to Bitcoin. Read more: Wasabi Supported BIPs

      Bitcoin Knots

      Bitcoin Knots is a derivative of Bitcoin Core with a collection of improvements backported from and sometimes maintained outside of Core's master git tree. Since version 1.1.11, Wasabi has partial Bitcoin Knots integration. This means that it is possible (but not mandatory) to start Bitcoin Knots during the launch of Wasabi, without having to install or configure anything. Read more: Bitcoin Knots Websiteopen in new window

      Block

      A block is a batch of valid Bitcoin transactions and its hash must be a value below a certain difficulty target to prove the work of the miner. Each block references the hash of the previous block, thus creating a hash chain of blocks. On average a new block is mined every 10 minutes.

      Blockchain

      The blockchain is the one chain of valid Bitcoin blocks with the most accumulated proof of work. It is an append-only data structure with new blocks being added on average every 10 minutes. Because of its uniquely verifiable and global consensus, it is a revolutionary standard for time, thus some call it timechain.

      Change

      In a transaction where the provided input coins are larger than the value sent to the destination address, then the leftover change is sent to a new address of the same wallet. Read more: Change coins

      Child Pays For Parent (CPFP)

      Child Pays For Parent (CPFP) is a fee bumping technique where a user spends an output from a low fee rate unconfirmed transaction in a child transaction with a high fee rate in order to encourage miners to include both transactions in a block.

      Coinbase

      A special field used as the sole input for coinbase transactions. The coinbase allows claiming the block reward and provides up to 100 bytes for arbitrary data.

      Coinbase Transaction

      The first transaction in a block. Always created by a miner, it includes a single coinbase.

      Cold Storage

      Refers to keeping a reserve of important Bitcoin secrets offline. Cold storage is achieved when Bitcoin private keys are created and stored in a secure offline environment. Cold storage is important for anyone with bitcoin holdings. Online computers are vulnerable to hackers and should not be used to store a significant amount of bitcoin. Read more: Cold Wasabi Protocol

      Confirmations

      Once a transaction is included in a block, it has one confirmation. As soon as another block is mined on the same blockchain, the transaction has two confirmations, and so on. Six or more confirmations is considered sufficient proof that a transaction cannot be reversed.

      Consensus

      When several nodes, usually most nodes on the network, all have the same blocks in their locally-validated best blockchain.

      Consensus Rules

      The block validation rules that full nodes follow to stay in consensus with other nodes.

      Custodial (Wallet or Mixer)

      A custodial wallet is any wallet where the private keys of your coins are in the hands of a third party. In essence, they operate similarly to traditional banks.

      A custodial mixer needs you to send your bitcoins to a central part before mixing. This means that you are at risk of being stolen from.

      Difficulty

      A network-wide setting that controls how much computation is required to produce a proof of work.

      Difficulty Retargeting (Difficulty Adjustment)

      A network-wide recalculation of the difficulty that occurs once every 2,016 blocks and considers the hashing power of the previous 2,016 blocks.

      Difficulty Target

      A difficulty at which all the computation in the network will find blocks approximately every 10 minutes. It specifies the numeric value the hash of a block must not be above to be considered a valid block.

      ECDSA

      ECDSA (Elliptic Curve Digital Signature Algorithm) is one of the digital signature algorithms used by Bitcoin to ensure that funds can only be spent by their rightful owners.

      Fork

      Fork, also known as accidental fork, occurs when two or more blocks have the same block height, forking the blockchain. Typically occurs when two or more miners find blocks at nearly the same time. Can also happen as part of an attack.

      Full node

      Any computer that connects to the Bitcoin network is called a node. Nodes that fully verify all of the rules of Bitcoin are called full nodes. Full nodes download every block and transaction and check them against Bitcoin's consensus rules.

      Fungibility

      Fungibility is a desirable property of Bitcoin UTXOs that are indistinguishable from each other. Read more: Transaction surveillance companies attempting to destroy fungibility

      Genesis Block

      The first block in the blockchain, used to initialize the cryptocurrency.

      Hard Fork

      Hard fork, also known as hard-forking change, is a permanent divergence in the blockchain, it occurs when non-upgraded nodes can not validate blocks created by upgraded nodes that follow newer consensus rules. The upgraded nodes break the rules of the legacy nodes. Not to be confused with fork, soft fork, software fork or Git fork.

      Hardware Wallet (HWW)

      A hardware wallet is a special type of Bitcoin wallet which generates and stores the user's private keys on a dedicated hardware device. Read more: Hardware Wallet FAQs

      Hash

      A cryptographic hash function takes any input of arbitrary size [the message] and computes a value of fixed size that is unique to the input, which is called a hash or a digest. If one bit of the input changes, the output will be completely different [avalanche effect]. And there are no two messages that result in the same hash [collision resistance]. The only way to get any given input, is by computing all possible inputs, it is a one-way function [pre-image resistance]. Bitcoin uses the SHA256 in many parts of the protocol.

      Hierarchical Deterministic (HD) Protocol

      The Hierarchical Deterministic key creation and transfer protocol (BIP32), which allows creating child keys from parent keys in a hierarchy.

      Hierarchical Deterministic (HD) Wallet

      Wallets using the Hierarchical Deterministic Protocol key creation and transfer protocol (BIP32).

      Hot Wallet

      A hot wallet is a software wallet that runs on a device which is connected to the Internet. Wasabi is a hot wallet by default.

      Input

      Input, transaction input, or TxIn is an input in a Bitcoin transaction which contains two fields: a unique transaction hash and an index number, which references one utxo of a previous transaction which is spent in this transaction.

      Lightning Network (LN)

      Lightning Network is a proposed implementation of Hashed Timelock Contracts (HTLCs) with bi-directional payment channels which allows payments to be securely routed across multiple peer-to-peer payment channels. This allows the formation of a network where any peer on the network can pay any other peer even if they don't directly have a channel open between each other.

      Mainnet

      The original and main network for Bitcoin transactions, where satoshis have real economic value.

      Mempool

      The Bitcoin Mempool (memory pool) is a collection of all transaction data in a block that have been verified by Bitcoin nodes, but are not yet confirmed. Read more: How does Wasabi know of incoming transactions to the mempool?

      Merkle Root

      The root node of a merkle tree, a descendant of all the hashed pairs in the tree. Block headers must include a valid merkle root descended from all transactions in that block.

      Merkle Tree

      A tree constructed by hashing paired data (the leaves), then pairing and hashing the results until a single hash remains, the merkle root. In Bitcoin, the leaves are almost always transactions from a single block.

      Miner

      A Bitcoin user that attempts to find valid proof of work for new candidate blocks, by repeated hashing until the difficulty target is met.

      Mining Reward

      An amount of satoshis included in each new block as a reward by the network to the miner who found the proof of work solution. Initially it was 50 bitcoin per block, which is halved every 210 000 blocks, or roughly 4 years. This leads to a total money supply of just below 21 million bitcoin.

      Multisignature (multisig)

      Multisignature (m-of-n multisig) refers to requiring more than one key to authorize a Bitcoin transaction. Only with m signatures of n public keys can the bitcoin be spent. Read more: Can I generate a multi signature script?

      Non-Custodial (Wallet or Mixer)

      A non-custodial wallet is any wallet where the private keys of your coins are in your hands. Non-custodial wallets give you full control over your bitcoins.

      A non-custodial mixer like Wasabi eliminates the risk that the coordinator can steal your bitcoin. Each participant verifies the proposed transaction, and signs it only if it is valid. This signature is only valid for this transaction, so any attempt to change the transaction after the fact is futile. The funds will always be in a Bitcoin address that you control.

      Nonce

      The nonce in a Bitcoin block is a 32-bit (4-byte) field whose value is set so that the hash of the block will contain a run of leading zeros. The rest of the fields may not be changed, as they have a defined meaning.

      Off-chain Transaction

      An off-chain transaction is the movement of value outside of the blockchain. While an on-chain transaction - usually referred to as simply a transaction - modifies the blockchain and depends on the blockchain to determine its validity. An off-chain transaction relies on other methods to record and validate the transaction.

      Output

      Output, transaction output, or TxOut is an output in a Bitcoin transaction which contains two fields: a value field for transferring zero or more satoshis and a pubkey script for indicating what conditions must be fulfilled for those satoshis to be further spent.

      P2PKH

      Many transactions processed on the Bitcoin network spend outputs locked with a Pay-to-Public-Key-Hash or P2PKH script. These outputs contain a locking script that locks the output to a public key hash, more commonly known as a Bitcoin address. An output locked by a P2PKH script can be unlocked (spent) by presenting a public key and a digital signature created by the corresponding private key.

      P2SH

      P2SH or Pay-to-Script-Hash is a type of transaction that simplifies the use of complex transaction scripts. With P2SH the complex script that details the spending conditions (redeem script) is committed to with a hash in the locking script.

      P2TR

      A pay-to-taproot (P2TR), also known as a Taproot or Bech32m address, is the most recent and advanced bitcoin address format. Taproot introduces more advanced security, privacy, flexibility and scaling to bitcoin.

      P2WPKH

      The signature of a P2WPKH (Pay-to-Witness-Public-Key-Hash) contains the same information as a P2PKH spending, but is located in the witness field instead of the scriptSig field.

      Paper Wallet

      In the most specific sense, a paper wallet is a document containing all the secrets to spend a Bitcoin UTXO. It is a way of storing bitcoin offline as a physical document.

      Partially Signed Bitcoin Transaction (PSBT)

      PSBT is a binary transaction format which contains the information necessary for a signer to produce signatures for the transaction and holds the signatures for an input while the input does not have a complete set of signatures. The signer can be offline as all necessary information will be provided in the transaction. Read more: BIP 174 Partially Signed Bitcoin Transaction Formatopen in new window

      Pay-to-Witness-Public-Key-Hash (P2WPKH)

      The signature of a P2WPKH contains the same information as a Pay-to-Public-Key-Hash (P2PKH) spending, but is located in the witness field instead of the scriptSig field. The scriptPubKey is also modified. Read more: BIP 84 derivation scheme for P2WPKH based accountsopen in new window

      Payment Channels

      A payment channel is class of techniques designed to allow users to make multiple Bitcoin transactions without committing all of the transactions to the Bitcoin blockchain. In a typical payment channel, only two transactions are added to the blockchain, one funding and one closing transaction, but a nearly unlimited number of payments can be made between the participants.

      Plausible deniability

      Plausible deniability is the ability to deny knowledge of or responsibility for any damnable actions committed by others in an organizational hierarchy because of a lack of evidence that can confirm their participation, even if they were personally involved in or at least willfully ignorant of the actions.

      Private Key

      A private key is a large number that must be chosen at random, it is thus a very secure password and should be kept secret. With knowledge of this number, anyone can easily compute the public key, and a signature over any message. It can also be used to decrypt any message that was encrypted to the public key corresponding to the private key. In Bitcoin, a signature over a valid transaction message gives the right to spend a coin, thus knowledge of the private key corresponds to ownership of the bitcoin. Read more: Bitcoin private keys

      Proof of Work (POW)

      One of the requirements for a Bitcoin block to be valid is its hash should be below a certain difficulty target. In order to create a valid block, a miner must repeatedly hash a candidate block with a changing nonce until by sheer luck he finds a hash with low value. By providing this pre-image block, anyone can verify the amount of computational energy that a miner on average should have invested in order to find this block, and this is what is known as Proof of Work.

      Public Key

      A public key is calculated by multiplying the private key to the generator point of an elliptic curve. Given only the public key, the private key cannot be calculated. Anyone can encrypt a message using a public key. This encrypted message (cyphertext) can only be decrypted through the related private key. Given a public key and a signature over a message, anyone can verify that the signer had the private key and the message. In Bitcoin, the public key is the pseudonymous identity of the owner of a coin. Read more: Bitcoin private keys

      Regtest

      A local testing environment in which developers can instantly generate blocks on demand for testing events, and can create private satoshis with no real-world value.

      Replace by Fee (RBF)

      Replacing one version of an unconfirmed transaction with a different version of the transaction that pays a higher transaction fee.

      satoshi (sat)

      A satoshi is the smallest denomination of bitcoin that can be recorded on the blockchain. It is the equivalent of 0.00000001 bitcoin and is named after the creator of Bitcoin, Satoshi Nakamoto.

      Satoshi Nakamoto

      Satoshi Nakamoto is the name used by the person or group of people who designed Bitcoin and created its original reference implementation. As a part of the implementation, they also devised the first blockchain database. In the process they were the first to solve the double-spending problem for digital currency in a decentralized and self verifying nature. Their real identity remains unknown.

      Schnorr Digital Signature Scheme

      Schnorr Digital Signature Scheme is one of the digital signature algorithms used by Bitcoin to ensure that funds can only be spent by their rightful owners. Schnorr signatures and public keys can be aggregated, meaning that multiple parties with unique private keys can sign the same message, which can be verified in batches instead of individually.

      Script

      Bitcoin uses a scripting system for transactions. Forth-like, Script is simple, stack-based and processed from left to right. It is purposefully not Turing-complete, with no loops.

      ScriptPubKey

      ScriptPubKey or pubkey script, is a script included in outputs which sets the conditions that must be fulfilled for those satoshis to be spent. Data for fulfilling the conditions can be provided in a signature script.

      ScriptSig

      ScriptSig or signature script, is the data generated by a spender which is almost always used as variables to satisfy a pubkey script.

      Segregated Witness (SegWit)

      Segregated Witness is a structure where the witness [signature or redeem script] is stored separately from the transaction Merkle tree. This is separated because the witness contains only data concerning transaction validity, but not about transaction effect. Read more: Why Wasabi uses only SegWit

      Simplified Payment Verification (SPV)

      SPV is a method for verifying particular transactions were included in a block without downloading the entire block. The method is used by some lightweight Bitcoin clients.

      Soft Fork

      A soft fork is a change to the Bitcoin consensus rules that is backwards compatible. Users of this update do not break the rules of legacy users, but rather restrict themselves to a more narrow rule set.

      Taproot

      Taproot is an upgrade to Bitcoin which introduces several new features. Taproot integrates the Schnorr digital signature scheme into Bitcoin, upgrading Bitcoin’s core cryptography. Taproot builds on the SegWit upgrade to improve Bitcoin’s privacy and lower transaction fees. Taproot makes future Bitcoin upgrades easier by reforming Bitcoin’s scripting language.

      Testnet

      A testing environment in which users can obtain and spend satoshis that have no real-world value on a global network that is very similar to the Bitcoin mainnet.

      Timechain

      Timechain is a synonym of blockchain. It emphasizes the achievement of the Bitcoin protocol to establish consensus on the temporal order of transactions so to prevent double-spends.

      Transaction

      In simple terms, a transfer of bitcoin. More precisely, a transaction is a signed data structure expressing a transfer of value and consisting mainly of inputs and outputs. Transactions are transmitted over the Bitcoin network, collected by miners, and included into blocks, made permanent on the blockchain.

      Transaction Fees

      A transaction has a fee payment to the miner who includes the transaction in a valid block. It is implied by the difference of inputs - outputs. Read more: What fee should I select?

      Unspent Transaction Output (UTXO)

      UTXO is an unspent transaction output that can be spent as an input in a new transaction. Read more: How can I select UTXOs for CoinJoin?

      Wallet

      Software that holds all your Bitcoin addresses and secret keys. Use it to send, receive, and store your bitcoin.

      - + diff --git a/glossary/Glossary-PrivacyWasabi.html b/glossary/Glossary-PrivacyWasabi.html index f47ad449cc..6aeeadd611 100644 --- a/glossary/Glossary-PrivacyWasabi.html +++ b/glossary/Glossary-PrivacyWasabi.html @@ -27,11 +27,11 @@ Privacy and Wasabi | Wasabi Docs - - + +

      Privacy and Wasabi

      #twoweeks

      The #twoweeks is a fun inside joke often used in the Wasabi documentation and, more generally, in the Internet community. In the case of Wasabi documentation, it usually indicates the arrival of a new function or update, to which the future date is still uncertain.

      E.g. "Lightning Network is coming to Wasabi in #twoweeks"

      Address Reuse

      Address reuse refers to the use of the same address for multiple transactions, this is very bad for privacy. Read more: Address reuse

      Anonymity Score (anonscore)

      Anonymity score is a new way to estimate the entropy level of a UTXO in an unequal-but-highly-composable output value coinjoin. The anonymity score is a metric to help the wallet decide when it's time to stop the coinjoining process. Read more: What is the anonymity score?

      Anonymity Set (anonset)

      The anonymity set is effectively the size of the group you are hiding in during a CoinJoin. It's the quantity of equal value outputs of one CoinJoin transaction. Read more: What is the anonymity set?

      Auto-start coinjoin (Pleb Stop) threshold

      The auto-start coinjoin threshold, a.k.a Pleb Stop, is the minimum wallet balance at which coinjoin will automatically start/continue. The amount can be changed in the Coinjoin Settings (Auto-start coinjoin threshold setting), the default is 0.01 BTC.

      Backend

      The part of a software system that is not usually visible or accessible to a user of that systemopen in new window. In the case of Wasabi, the backend functions as the coinjoin coordinator and provides data to the client (user) like block filters, exchange rate, and network estimations (mempool).

      Block filters

      A filter representing a compact list of addresses in one block. Wasabi checks locally if any block filter contains transactions with addresses of the wallet. No public keys are sent to any third party server, thus it is very private. Read more: BIP 158: Compact Block Filters for Light Clientsopen in new window

      Blockchain Analysis

      Blockchain analysis is used by transaction surveillance companies to follow the transaction history of coins. Techniques like the common-input-ownership heuristic or change detection are used to create a cluster of transactions belonging to one user. Read more: Blockchain Analysis

      Bloom Filter

      A filter used primarily by SPV clients to request only block headers and merkle proofs of a given transaction from full nodes. This is very bad for privacy, as third party servers learn about which addresses you are interested in. Read more: BIP 37: Connection Bloom Filteringopen in new window

      Change Address Detection

      Many Bitcoin transactions have change outputs. It would be a serious privacy leak if the change address can be somehow found, as it would link the ownership of the (now spent) inputs with a new output. Read more: Change coins

      Chaumian CoinJoin

      A Chaumian CoinJoin is a special type of CoinJoin that utilizes Chaumian [or Schnorr] blind signatures to prevent the central coordinator from spying on the linkage between inputs and outputs. Read more: Use of blind signatures in CoinJoin

      Client

      A software that allows a computer to function as a client in a networkopen in new window. In the case of Wasabi, the client is a Wasabi Wallet software version which a user has on his own local machine. The client can communicate with the backend.

      Cluster

      Which entities know about which coins. For example, this coin belongs to a cluster that is known by a KYC exchange and Alice. Read more: What is the cluster history?

      Coin Control

      The possiblity for the user to manually select UTXO's. It is mostly used for sending, so the user can select which UTXO's should be used as the inputs of the transaction. Read more: Coin Control Best Practices

      CoinJoin (CJ)

      CoinJoin is a trustless method for combining multiple Bitcoin payments from multiple spenders into a single transaction to make it more difficult for outside parties to determine which spender paid which recipient. Read more: What is a CoinJoin?

      Coinjoin Strategy

      A Coinjoin Strategy contains instructions for the automatic "coinjoin robot" about configurations like when and how much to coinjoin. Read more: Coinjoin Strategy

      Coinjoin Time Preference

      The wallet will only participate in coinjoin when the fee rate is below the median of the chosen time frame (Hours, Days, Weeks, or Months).

      (FeeRateMedianTimeFrameHours in the wallet file)

      CoinJoined coins

      Coins that have successfully participated in a CoinJoin (with the exception of the change) and thus lose their association to a previous cluster. Read more: What is the privacy I get after mixing with Wasabi?

      Common-Input-Ownership heuristic

      This is a heuristic or assumption which says that if a transaction has more than one input then all those inputs are owned by the same entity.

      Coordinator

      The coordinator is a server which creates CoinJoins and accepts UTXOs in the mix. Read more: How does my wallet communicate with the Wasabi coordinator server?

      Daemon

      A daemon is a command line interface to run Wasabi without the GUI (Graphical User Interface). Read more: Headless Wasabi Daemon

      Discreet Mode

      Discreet Mode is a Wasabi feature that hides sensitive and critical information on the wallet itself, which is useful for screenshots. Read more: Discreet Mode

      Dust

      Dust is an UTXO that is uneconomical to spend. Also, small portions of bitcoin can lead to serious consequences for one's privacy, for example the so called forced address reuse attack. Read more: What is the dust threshold

      Label

      A label can be added to a coin, as a small note on who knows this coin belongs to you. Good labelling can help the user and the wallet to make better privacy conscious decisions later on when spending. Read more: Why do I have to label my address

      Know Your Customer (KYC)

      KYC (Know Your Customer) is the process of a business being forced to identify and verify the identity of its clients, and to share this information with a government. The term is also used to refer to the bank regulation which governs these activities. Read more: AML/KYC Information

      Observers

      A way to track who knows about the ownership of your coins. Not to be confused with a description of a transaction. Read more: The importance of labeling

      Pay to EndPoint (P2EP)

      Pay to EndPoint is when the receiver is reachable over the internet and the sender communicates with the receiver to coordinate a more advanced transaction. The Tor onion service, IP address or domain of the receiver is included in a BIP21 Bitcoin URI payment link.

      Peers

      Peers in our documentation refers mainly to Bitcoin and Wasabi Wallet users, but it also means people. They are literally peers in the network, or in the CoinJoin.

      RPC

      RPC, or Remote Procedure Call, is an interface to interact with Wasabi Wallet programmatically. Read more: RPC Interface

      Safety coinjoin

      Safety coinjoin is a concept for doing an extra coinjoin after a user registers only anonymity score 1 (non-private) coins in their first round.

      This was added in Wasabi 2.0.6 versionopen in new window to increase privacy for people who generate a new wallet -> receive a coin -> do one coinjoin -> send all the money out. It aims to prevent targeted analysis that compares the value of consolidated coinjoin outputs with the value of one of the coinjoin's inputs.

      Taint

      Taint is equivalent to the 'trail' that a Bitcoin transaction leaves during the course of its journey. The taint analysis of a Bitcoin transaction evaluates the association between an address involved in the chain of transactions. Read more: Blockchain Analysis

      The Onion Router (Tor)

      Tor (The Onion Router) is free and open-source software for enabling anonymous communication. It is widely used by Wasabi. Read more: How does Tor protect my network level privacy?

      Transaction Surveillance Company

      A transaction surveillance company is one which attempts to spy on all Bitcoin users. Their business model is usually to sell the data to any government, corporation or individual willing to pay for their services. Read more: Transaction Surveillance Companies

      Tumbling / Tumbler

      Tumbling is a synonym of 'Mixing'. Similarly, Tumbler is the synonym of 'Mixer'.

      TurboSync

      A feature in Wasabi to reduce wallet loading time. With TurboSync, some addresses (internal keys only) are skipped and tested in the background. Read more: TurboSync

      WabiSabi

      WabiSabi is a protocol for constructing coinjoin transactions with the aid of a centralized coordinator. It utilizes keyed-verification anonymous credentials, homomorphic value commitments, and zero knowledge proofs to achieve privacy and flexibility. Read more: WabiSabiopen in new window

      Wallet fingerprinting

      A careful analyst sometimes deduces which software created a certain transaction, because many different wallet softwares don't always create transactions in exactly the same way.

      Wasabika

      Wasabikas are builders, users and supporters of Wasabi in general.

      XPUB (Extended Public Key)

      An xpub, also known as Extended Public Key, is a part of BIP-32 that will allow you to observe your wallet without the private key (xpriv).

      ZeroLink is a framework to holistically design a privacy and fungibility setup for Bitcoin. This encompasses more than just a single CoinJoin transaction, but also includes network level privacy defense against third party spying. Read more: ZeroLink: the Bitcoin Fungibility Framework

      - + diff --git a/glossary/index.html b/glossary/index.html index bbb9e71cff..da11cf508a 100644 --- a/glossary/index.html +++ b/glossary/index.html @@ -27,11 +27,11 @@ Glossary | Wasabi Docs - - + +

      Glossary

      This glossary contains the explanations of common words used in Wasabi and regarding Bitcoin privacy in general. Every item contains a link to the respective full document for more details.

      Chapters

      - + diff --git a/index.html b/index.html index 0b7f1c76a4..f2f98e04f1 100644 --- a/index.html +++ b/index.html @@ -27,11 +27,11 @@ Wasabi Docs - - + +

      Wasabi Documentation

      An archive of knowledge about Wasabi Wallet, an open-source, non-custodial and privacy-focused Bitcoin wallet for desktop.

      Reclaim Your Privacy →

      Open-source

      Don't trust, verify. Wasabi is libre and open source software under the MIT license. You have full access to every single line of code, and you can do with it as you please.

      Non-custodial

      Not your keys, not your bitcoin. With Wasabi, you are always in full control of your private and public keys, you never share them with any third party.

      Privacy-focused

      Privacy is the ability to choose what you reveal to others. Wasabi is designed with one goal in mind, to protect your sensitive financial data, on the network level and on the blockchain level.


      This is Wasabi Wallet'sopen in new window open source documentation. Here you will find information about the nuances of privacy in Bitcoin, how Wasabi solves some of the existing problems, and how you can use this tool to defend yourself. Everyone is welcome to make the Wasabi Wallet documentation better, by contributing on GitHubopen in new window! The documentation of Wasabi Wallet 1.0 is archived hereopen in new window.

      How to use this documentation

      This documentation is a good place to start your education on how to use Wasabi Wallet, as it is a thorough archive about many nuances of Bitcoin privacy.

      Explain Like I'm 5

      If you are new to Wasabi and want to get a quick tutorial on how to use it, you may start here.

      Stand-alone chapters

      If you are interested in the nuances of how one specific aspect of Wasabi works, then check-out the detailed chapters here.

      Search function

      If you have a question about some particular detail, then use the search function at the top right corner to browse the entire archive, including the frequently asked questions.

      - + diff --git a/using-wasabi/BIPs.html b/using-wasabi/BIPs.html index 87c5f2afb1..6ffd2c0ce2 100644 --- a/using-wasabi/BIPs.html +++ b/using-wasabi/BIPs.html @@ -27,11 +27,11 @@ Supported BIPs | Wasabi Docs - - + +
      - + diff --git a/using-wasabi/BackupBestPractices.html b/using-wasabi/BackupBestPractices.html index 90243625db..c3853b8b9c 100644 --- a/using-wasabi/BackupBestPractices.html +++ b/using-wasabi/BackupBestPractices.html @@ -27,11 +27,11 @@ Wasabi Backup Best Practices | Wasabi Docs - - + +

      Wasabi Backup Best Practices

      Common mediums for backups

      Written on a piece of paper

      • Anyone who can see it, can steal it
      • Handwriting can be hard to read or completely illegible
      • Human error in transcription can cause errors on the end product
      • Paper can rot, be torn, burn, or be smoke damaged

      Printed on a piece of paper

      • Anyone who can see it, can steal it
      • Type of printer - non-laser printers ink can run if the paper gets wet
      • Have to trust printer - some have internet connections, wifi, and memory
      • Paper can rot, be torn, burn, or be smoke damaged

      On laminated paper

      • Anyone who can see it, can steal it
      • Lamination is prone to degradation over time, as well as punctures or cuts that could allow moisture to get trapped in the paper and cause deterioration or rotting in some circumstances | store in cool dry place
      • Can burn or be smoke damaged
      • 'Fireproof' & 'Fire-resistant' boxes can help protect paper in a small house fire but be warned that they can sometimes fall apart in the fire and get wet if the fire is put out with water. Remember people can just carry out a small safe

      Engraved / etched / ablated / stamped on a piece of metal

      • Anyone who can see it, can steal it
      • Some metals can deteriorate or corrode, choose a good metal; also store your metal away from direct contact other metals.
      • Some metals that are corrosion resistant have low melting points, are extremely expensive, or hard to machine.
      • Metals can still deform or melt from heat, destroying any engraved SK. "Most house fires do not burn hotter than 1,200 degrees Fahrenheit. This temperature is typically associated with the hottest portion of a home, which is in the roof area. Homes that burn for longer than 30 minutes or consist of multiple levels sometimes burn at higher temperatures." You want to pick a metal that won't be destroyed by a fire. So magnesium, tin, and lead are all out as engraving materials.
      • Silver, gold, copper, brass, bronze, nickel, cobalt, would survive the housefire unmelted. Some Aluminium alloys can survive but you have to have the right ones. At around 1500° Steel and Nickel should be okay. Titanium is above the housefire range and so is tungsten, however tungsten rings are known to shatter due to the brittle nature of the very hard metal.

      Stored digitally on a computer

      • Computers can crash, making data recovery expensive
      • Data can still technically be recovered after a system is abandoned by the user. In some cases data can be recovered after multiple overwriting attempts and physical destruction (as long as the attacker can get all or most the of pieces) so if you copy files to a new computer and ditch the old one, be careful.
      • Can burn or be smoke damaged
      • A traditional hard disc drive can have data corrupted by powerful magnetic fields and can physically shatter
      • A non-negligible amount of HDDs suffer from factory defects that will cause them to fail unexpectedly during their lifetime
      • Accidents can happen that could result in loss of data
      • Solid state drives (SSDs) will lose data if unpowered, they may last years before this becomes a problem but it is unwise to store long-term data in unpowered SSDs
      • Connecting to the internet is another attack vector and the safety is only as good as the encryption used; I don't know what I would recommend but it wouldn't be BitLocker. Someone could be trying to break into the computer constantly. Even with good encryption if the machine or location is compromised the key could be stolen as soon as it is decrypted.
      • There are a lot of ongoing threats with computers, from 0-day exploits to firmware exploits and malicious USB cords
      • External HDDs are good for storage for a few years at least if stored properly
      • If not connected to internet, safety is only as good as the physical protection encryption used; could someone break into the location and copy the data without anyone noticing?

      Stored digitally on CD, floppy disk, laserdisc, or mini-disc

      • Plastics break down over time and with exposure to heat, humidity, regular light, all sorts of chemicals, even the oxygen in the air. This can lead to the loss of your data when stored on a medium made of plastic or written/printed on plastic.
      • Can burn or be smoke damaged
      • Can be physically damaged, making data recovery expensive or even impossible
      • Magnetic media (tapes, floppy disc) can be damaged by magnets
      • Data can become difficult to recover if the software and/or hardware to decode is old, don't use proprietary formats

      Stored digitally on a flash drive

      • Can break and have to be physically repaired before use
      • Rapidly changing magnetic fields (See MRIs) can damage the data stored on flash drives
      • Can burn, or be smoke damaged
      • Can become corroded from salt water or some atmospheric conditions
      • If they break apart, some lighting conditions can cause data corruption (you can also put them back together and often still get the data)
      • Different devices are inconsistent. Even similar devices from the same production batch can be different. There are large quality differences in drives, but I am assuming you aren't using these for anything but storage.
      • There are some fake flash drives that look like they saved the data but you can't get it back later.
      • Flash drives are not advised for long term storage; they can be used as one part of a multi-medium-location-format plan.

      A pre-funded physical bitcoin coin (where the manufacturer generates and installs the secret key)

      • The medium that the key is on is often paper/plastic which can burn or be smoke damaged
      • Trust in the manufacturer themselves, they could copy the key
      • Trust in their key generation procedure
      • Trust in the operational security of the manufacturer, they could be generating the keys on their everyday computer
      • Trust no one is successfully spying on them, electronically, looking through their documents while they are out of town, or with tiny tin foil hat cameras or long range ones
      • Trust that the object was not tampered with in delivery
      • Trust that no one has tampered with the object since you got it

      These are the methods you can use for your Wasabi backup and their benefits and tradeoffs.

      - + diff --git a/using-wasabi/BitcoinFullNode.html b/using-wasabi/BitcoinFullNode.html index 668a13abed..cef89db3b2 100644 --- a/using-wasabi/BitcoinFullNode.html +++ b/using-wasabi/BitcoinFullNode.html @@ -27,11 +27,11 @@ Bitcoin Full Node | Wasabi Docs - - + +

      Bitcoin Full Node

      The importance of running a full node

      When running a Bitcoin full node, you define the precise monetary rules that you voluntarily agree on. Nobody else forces this choice upon you. Thus any sovereign individual who wants to claim financial independence must run a full node. Once your own rules are firmly established, your software discovers other nodes in the Bitcoin peer-to-peer network which do not break your rules. These peers send you transactions and blocks which are valid according to their set of rules, and you verify for yourself if they are also correct for you. If one of the proposed transactions breaks your own rules, then you mark it as invalid, disconnect from and ban the node who sent you the malicious transaction.

      Claim your monetary sovereignty

      With your full node you define, verify, and enforce the rules of your sound money Bitcoin.

      Only by running a full node, do you verify by yourself that the money you receive is actually valid bitcoin. You do not trust an external third party, and thus you also do not leak any sensitive financial information.

      There are several software implementations that function as a full node, for example, Bitcoin Coreopen in new window, Bitcoin Knotsopen in new window, or LibBitcoinopen in new window.

      How does Wasabi use your Bitcoin full node

      Wasabi currently has a work in progress partial Bitcoin Knots integration. As of now, the zkSNACKs coordinating server broadcasts BIP 158 block filtersopen in new window to all Wasabi clients, who locally check if the filter hits for their public keys. Then you know that this block has a transaction of yours included, or maybe it is a false positive.

      Work in progress

      The zkSNACKs server has to be trusted to serve correct filters. This current work in progress integration does not verify consensus within Wasabi.

      If a full node is connected to Wasabi, then the relevant block is fetched from this trusted node, and not from a random P2P node. Wasabi also queries if your local mempool has unconfirmed transactions that are of interest to you. Further, your full node is used to estimate the current mining fee level based on the bitcoind smartfee algorithm. Your full node is not used to broadcast your transactions, as this is done through a random peer-to-peer node with a new tor identity, which is better for your network-level privacy.

      The future goal is that the local full node (Knots) is used to generate the BIP 158 block filters from the verified blocks. Only then is there full verification, and no trust in the zkSNACKs server.

      bitcoind within Wasabi

      Wasabi Wallet ships with Bitcoin Knotsopen in new window. This means that every Wasabi client has the necessary software to run a Bitcoin full node and define, verify, and enforce monetary consensus with bitcoind, but this verification is not yet used within Wasabi itself, it is a work in progress. By default, bitcoind is not started together with Wasabi. This must be activated explicitly in the settings because this is a bandwidth, CPU and storage-intensive program. It is optional to keep bitcoind running even after Wasabi Wallet is shut down, so as to verify blocks as soon as they are received.

      Wasabi Wallet Bitcoin Knots full node integration

      Using an already existing local Bitcoin full node

      If you have a Bitcoin full node already pre-installed on the same computer you use to run Wasabi Wallet, then Wasabi will use your node by default. You do not need to change anything in the settings, it should work plug and play. This is especially useful to save on bandwidth, as you have already downloaded and verified a block with your full node, so you don't need to download it again with Wasabi.

      Using an already existing remote Bitcoin full node

      If you have a Bitcoin full node already on a remote computer, then Wasabi Wallet can use this too. In the Bitcoin settings, specify the local IP address and port or the Tor onion service of your full node.

      Wasabi Wallet remote Bitcoin P2P full node endpoint

      Verify that Wasabi is connected to your full node

      There are two ways to confirm that your Wasabi client is connected to your own full node.

      First, in the Wasabi logs. Once you receive a transaction Wasabi downloads the block containing that transaction from your node, and in the logs you should see: Block {hash} acquired from node '{node}'.

      Second, by checking the connected peers inside your full node. Wasabi will show up as one of the connected peers while it is downloading a block. You can check this in the Bitcoin Core / Knots GUI by clicking on Window -> Peers. During the period when Wasabi is fetching a block, it will show up in the User Agent column. Alternatively, you can use the Bitcoin RPC call bitcoin-cli getpeerinfo and see the Wasabi client listed.

      - + diff --git a/using-wasabi/BuildSource.html b/using-wasabi/BuildSource.html index d9c16578cc..19e2009d3a 100644 --- a/using-wasabi/BuildSource.html +++ b/using-wasabi/BuildSource.html @@ -27,8 +27,8 @@ Build from source code | Wasabi Docs - - + +

      Build from source code

      Introduction

      You can compile the source code in order to get the most recent commits by the developers. This enables you to try out features or fixes that are not yet released. This can be the main repository master branch for those changes that should be in the next release, or developer branches for cutting edge features. Be aware that these branches might be unstable and can include bugs that lead to a loss of funds, so use with caution and on testnet.

      Get The Requirements

      1. Install Gitopen in new window

      2. Install .NET 8.0 SDKopen in new window for "Build apps"

        Optional for privacy

        You can disable .NET's telemetry, which is sending some usage information to Microsoft, by typing:

        export DOTNET_CLI_TELEMETRY_OPTOUT=1 on Linux and macOS.

        setx DOTNET_CLI_TELEMETRY_OPTOUT 1 to disable it permanently on Windows.

      Get Wasabi

      Clone Wasabi repository:

      git clone https://github.com/zkSNACKs/WalletWasabi.git
      @@ -40,6 +40,6 @@
       git checkout branchname
       git pull
       
      - + diff --git a/using-wasabi/ChangeCoins.html b/using-wasabi/ChangeCoins.html index e2a422e0ee..7f6c8e0300 100644 --- a/using-wasabi/ChangeCoins.html +++ b/using-wasabi/ChangeCoins.html @@ -27,11 +27,11 @@ Change Coins | Wasabi Docs - - + +

      Change coins

      Types of change

      Non-Coinjoin change

      Let's assume you want to send 0.5 bitcoin to Alice. You enter Alice's address in the To field (destination address), and set the Amount to 0.5 BTC. This will be one output of the transaction.

      Since your chosen UTXO is worth 2 bitcoins, after sending 0.5 bitcoin to Alice there will be 1.5 bitcoins change from the original amount. This leftover amount will automatically go to a new address in your wallet, and this is called the change output.

      This leftover 1.5 bitcoins change UTXO is connected to the input UTXO of the transaction, and thus also has an anonymity set of 1. As a result, when you send this leftover/change coin in a new transaction, it is clear to any observer that you were part of the transaction that sent 0.5 bitcoin to someone.

      This process is applicable to any Bitcoin transaction where the sent amount is less than the total value of the input UTXO.

      Coinjoin change

      In some few cases, especially for the wealthiest user of a coinjoin, there will be an anonymity score 1 output in a coinjoin transaction. Eventhough it is not trivial to link those to the inputs of the same user, they should be handled with care. Wasabi will not automatically spend those change coins in a payment, but instead register them again in a future coinjoin round.

      Why change is an issue

      Change is not inherently bad, it's a fundamental part of how Bitcoin and the UTXO model works. However, when sending a coin that is change from an earlier transaction, then the receiver can easily deduce that the sender was also part of the previous transaction that generated the change.

      Whenever you are merging coins in one transaction, it becomes clear to any outside observer that these coins belong to the same entity, thus linking the previous transaction history. Thus identifying change based on some heuristics is a top goal of transaction surveillance.

      You want to avoid merging coins with different anonymity set values whenever possible, because this will link these coins and reduce their anonymity set to the lowest value.

      Your options to use change privately

      Avoid change in the first place

      Whenever possible, choose UTXO's for transactions where the destination addresses receive the entire value of your UTXO's, and you don't get any change back. This can easily be done by clicking the shield icon in the top right corner of the transaction preview screen, and adjusting the payment amount to be slightly higher or lower. This might not be possible in some cases where you have to pay a specific value of a payment request.

      Make it difficult to deduce the change

      There are common heuristics identifying change outputs, try to avoid these with every transaction. Don't reuse addresses, don't send precise amounts but randomize them, use replace by fee (RBF) only if necessary, and try to send to bech32 or bech32m addresses.

      Spend the change to the same entity as in the initial transaction

      If in the first transaction you have 0.10 bitcoin and send Alice 0.04 bitcoin, you get 0.06 bitcoin back as change in a new address, which Alice can see belongs to you. Now, in a second transaction where you want to send Alice 0.05 bitcoin, you can select that 0.06 bitcoin change coin without losing any privacy, because Alice already knows this is your coin.

      In this second transaction you will get back 0.01 bitcoin as change, which again, will still be known to Alice. If in a third transaction you want to send Alice 0.02 bitcoin, then you can consolidate the 0.01 bitcoin change with a new 0.10 bitcoin mixed coin, thus getting 0.09 bitcoin change.

      Now Alice will know that you owned the 0.10 bitcoin and that you currently own the 0.09 bitcoin change, but she cannot find out about your premix transaction history.

      Wasabi will automatically check if you have a coin with the same label for the current payment recipient, and will use those coins to be spent.

      Spend the change with another entity, where you don't mind if each of the two know that you transact with the other entity

      When you send a transaction to Alice, then she knows that the change output goes back to you. You can use this change to send bitcoin to Bob, and if he has bad privacy habits, Alice can find out you sent to him. But if you have a trusted relationship with the two, then this is alright, and not part of your threat model.

      Coinjoin more

      Since Wasabi 2.0 has a minimum amount for coinjoin of only 5000 sats, any change coin with an amount larger than that will be registered in a future coinjoin round. If you wait long enough, Wasabi will make sure that you don't have any anonscore 1 change coin in your wallet, but only private coins not linked to any previous payment.

      - + diff --git a/using-wasabi/CoinJoin.html b/using-wasabi/CoinJoin.html index d649fc9b63..45b17bf1cc 100644 --- a/using-wasabi/CoinJoin.html +++ b/using-wasabi/CoinJoin.html @@ -27,11 +27,11 @@ Coinjoin | Wasabi Docs - - + +

      Coinjoin

      Introduction

      A coinjoinopen in new window is a special Bitcoin transaction where several peers get together to literally join their coins in a single transaction. They collaboratively build a transaction where each of them provides some coins as inputs, and fresh addresses as outputs. The concept has been around since the early days of Bitcoin, and it was formalized by the great Greg Maxwell in this awesome introductory threadopen in new window.

      The goal is to gain privacy by breaking the link of which input "pays" which output so that none of the outputs can be attributed to the owner of the input. WabiSabi enables centrally coordinated coinjoins with variable amounts in a trustless (meaning nobody can steal) and private (meaning even the coordinator cannot spy) manner, as described in the WabiSabi paperopen in new window.

      WabiSabi Coinjoin Explained in 3 Minutesopen in new window

      Coinjoin step-by-step

      1. Launch Wasabi and open your wallet.
      2. Wait. Wasabi coinjoins automatically in the background.
      3. You're done! You can make private payments now.

      Music box

      After opening a hot wallet, it will automatically start a countdown to start coinjoining (±10 minutes). This and other coinjoin related information is shown in the music box.

      Music Box Countdown

      After the Waiting to auto-start coinjoin countdown is finished the wallet should start participating in the coinjoin process.

      A blue aura will show up at the the bottom of the wallet, which indicates that the wallet is coinjoining, and the music box message will change.

      Music Box Awaiting Other Participants

      After some time the blue aura will change to an orange one, this indicates that the coinjoin process is now in a critical phase. Wasabi will prevent you from shutting down the app during the orange aura to not disrupt the coinjoin round.

      Music Box Coinjoin In Progress

      If this is succesfull, the coinjoin is completed and the coinjoin will show up in the history list.

      Music Box Success

      Notice that the wallet might have to repeat the coinjoin steps multiple times before a successful coinjoin is created. So it is possible that the aura colors will change without a successful coinjoin. Please leave Wasabi Wallet running, and eventually there will be a successful coinjoin.

      More Details

      By default, Wasabi starts automatically coinjoining your funds when the total value of the non-private coins is equal to or above the Auto-start coinjoin threshold (0.01 BTC by default). Automatically start coinjoin can be disabled from the coinjoin settings. In case you want to start the process manually, then click the play button; if you want to stop coinjoin, then click the pause button.

      Once a coin achieves enough privacy (reaches the Anonymity score target), then the corresponding amount will show up in the wallet's main view as "PRIVATE".

      Notice that it is not yet possible to coinjoin from a hardware wallet, the keys must be "hot" on your computer.

      Fees

      A 0.3% coordination fee will be taken from fresh coins bigger than 0.01 BTC. Coins less than or equal to 0.01 BTC don't pay coordination fees at all, according to the PlebsDontPay threshold.

      Remixing is free, as well as coinjoining coins 1 hop from a coinjoin, although, Bitcoin mining fees still do apply, as shown in this table. So if you send a coinjoined coin and receive a change output, you will not be charged the coordination fee for this change output. The recipient of the payment will not have to pay the coordination fee, as long as he is making coinjoins with the same coordinator.

      WabiSabi protocol step-by-step

      WabiSabi protocol requires 5 steps to successfully create and broadcast a coinjoin transaction to the bitcoin network.

      The round starts either as soon as the number of registered inputs reaches the maximum, or after the input registration time is reached and as long as the minimum number of inputs is satisfied.

      Input registration

      During the input registration, the client selects how many and which coins will be registered for coinjoin. These coins need to be confirmed on the Bitcoin blockchain. In the background Wasabi generates input proofs, which are signatures over challenge messages, made with the private keys that lock up the coins. With this, the coordinator can verify that you actually own these coins.

      Wasabi wallet generates a new Tor identityopen in new window called Alice for each input. She is a separate entity, and for every round you use a new Alice who is not linked to any other input or previous connection. With Alice, you send the input ownership proof to the coordinator.

      The Wasabi coordinator now verifies that:

      • There is still room for more inputs on this coinjoin.
      • The input has not already been registered, is not banned, is unspent, and that the input proof is valid.
      • The input has at least 5000 sats value.

      Only when all these checks are passed, does the coordinator allow this input to be registered. The coordinator creates and sends a credential back to Alice, which has the same amount as the input minus fees.

      The input registration phase ends when either: the number of registered inputs reaches the maximum, or when the time elapsed and the minimum number of inputs (180) is satisfied.

      Connection confirmation

      There are many users registering their inputs (with different Alice for each input) in the first phase, and this takes a while. The connection confirmation phase makes sure that all of them are still online and ready to continue. The coordinator verifies the unique ID from each Alice, and if everyone is still communicating. The coordinator sends a zero value credential to each Alice for each successful connection confirmation.

      The round is abandoned and re-started if too many Alices have dropped, for example when their Wasabi is shut down, or when their Tor connection is temporarily broken. The connection confirmation phase ends when all Alices have provided their unique IDs, or after a timeout and the number of online Alices is still larger than the minimum number of inputs.

      Output registration

      Now that all peers are online, we are ready to proceed with the output registration phase of the round.

      First, every client needs to change the value of their credentials to the desired output values. For this, the client presents to the coordinator two old credentials, and two newly created ones. The coordinator does not know the amount value of any of those credentials, but it can verify, that the two pairs sum up to exactly the same value. For example, a user can present one 5 btc and one 0 btc credential, and redeem one 2 btc and one 3 btc credential. Or a user can present one 4 btc and one 1 btc credential, and redeem one 5 btc and one 0 btc credential. After potentially many rounds of reissuance, each client has exactly the amount credential it desires. Each of these reissuance is perfectly private, so the coordinator cannot link any of them to the same user.

      Next, your Wasabi client generates multiple new Tor identities called Bob, which are in no way tied to any Alice. Bob sends to the Wasabi coordinator:

      • An unblinded credential signed by the coordinator
      • A new (unused) bitcoin address

      Because the coordinator can verify its own credential, it knows that this credential came into existence after an input of at least this much value was registered. However, it cannot know which input exactly.

      It is very important that the coordinator cannot link Alice to Bob. Because Alice has sent the cleartext input, and Bob sends the cleartext output. So, if the two were to be linked, then the coordinator can specifically link the input to the output, meaning that the anonymity set is 1. Because Alice received a credential from the coordinator, and because Bob is a new Tor identity not linked to Alice, the coordinator can verify that nobody is cheating, but it cannot deanonymize the peers.

      The output registration phase ends when the value of cleartext outputs is equal to the value of inputs, meaning that all Bobs have registered. If after a timeout not all outputs are registered, then this round is abandoned, the missing inputs are temporarily banned, and a new round is started.

      Possibility of Taproot outputs from coinjoin

      Since Wasabi version 2.0.3open in new window coinjoin outputs can be SegWit v0 and SegWit v1 (Taproot). If running this version or higher, the client registers the output type in a semi-random way (~50% chance of receiving Taproot output).

      Signing

      Now that all inputs and outputs are registered, the coordinator can start the signing phase, by building the coinjoin transaction with all the registered inputs and outputs. It sends this transaction to all the Alices of the round.

      Each Alice does the following:

      • Verifies that her input and output are included.
      • Signs the transaction with the private key of her input.
      • Sends the signature to the coordinator, who verifies this information.

      The signing phase ends when the coordinator has received all the valid signatures for all the registered inputs.

      Blame round

      When the signing phase fails due to some Alices disrupting the round (failing to sign or send the signature to the coordinator), then the successful Alices will continue into a blame round. The blame round will redo the coinjoin phases in order to create a successful coinjoin.

      This mechanism also prevents coinjoins from being DDoS-ed, because bad actors that are willingly disturbing rounds won't be able to join the blame round. The client will keep going to the blame round until there are not enough Alices left to meet the minimum input count of blame rounds (150).

      The blame round is not a mandatory phase of the coinjoin process. It was introduced in order to have a higher coinjoin success rate.

      Broadcasting

      The coinjoin transaction has been successfully built and signed, and it is now ready to be broadcast to the peers of the Bitcoin network. The coordinator sends this transaction over the Tor network to random Bitcoin P2P nodes, and from there it is gossiped to other nodes and miners. To save on mining fees, the target confirmation time is roughly 24 hours.

      Coinjoin Settings

      Wasabi Wallet has automatic coinjoin. It is done by the built-in automatic coinjoin "robot". The robot contains instructions/settings, like how often and when to coinjoin. The user is able to specify these settings in the Coinjoin Settings dialog, according to his own preferences. The wallet ships with default settings, which are good enough for most users.

      Wasabi Wallet Coinjoin Settings

      Coinjoin settings are wallet specific

      As the coinjoin settings apply per individual wallet, it is possible to have multiple wallets with different coinjoin settings.

      Automatically start coinjoin

      This setting is enabled by default.

      When this is enabled, the wallet will automatically start coinjoining soon after the wallet is loaded. The wallet will coinjoin until the privacy progress is 100%.

      When this is not enabled, the user will have to manually press the Play button in order to start coinjoining.

      Coinjoin Settings Automatically Start Coinjoin

      Auto-start coinjoin threshold

      The default Auto-start coinjoin threshold is 0.01 BTC.

      The wallet will not automatically start coinjoining if the non-private balance is below the Auto-start coinjoin threshold, even if the Automatically start coinjoin is enabled. In this case the user has to manually press Play to start coinjoining. This setting can be used to prevent paying (relatively) high fees for smaller bitcoin amounts.

      For example, if the non-private balance is 0.005 BTC and the Auto-start coinjoin threshold is 0.01 BTC, the user will have to manually press Play to start coinjoining.

      Auto-start Coinjoin Threshold

      It is OK to set the Auto-start coinjoin threshold to 0

      If you have some small non-private left overs: you can coinjoin these by pressing Play, or wait until you receive more funds. If you want to always automatically coinjoin ALL your coins, this can be set to 0 BTC. Note that you might pay relatively more fees for coinjoining smaller amounts.

      Coinjoin Strategy

      Wasabi ships with 3 coinjoin strategies: Minimize Costs, Maximize Speed, and Maximize Privacy. Each of these contain different configurations, as shown in this table. They determine the Anonymity score target, Coinjoin time preference, and if Red coin isolation is enabled or not.

      Coinjoin Strategy Settings

      The default strategy is Maximize Speed.

      It is possible to make your own custom strategy by using the customize button.

      Coinjoin Strategy

      Wasabi Coinjoin examples

      Here's a list of Wasabi coinjoin examples and how they appear on a block explorer:

      - + diff --git a/using-wasabi/ColdWasabi.html b/using-wasabi/ColdWasabi.html index 700c94c569..09cb5c60fb 100644 --- a/using-wasabi/ColdWasabi.html +++ b/using-wasabi/ColdWasabi.html @@ -27,11 +27,11 @@ Hardware Wallet | Wasabi Docs - - + +

      Cold-Wasabi Hardware Wallet Mode

      Using hardware wallet step-by-step

      1. Start your Wasabi Wallet and go to Add Wallet.
      2. Click on Connect to hardware wallet and then connect the hardware wallet via cable. Alternatively, you can import a Coldcard skeleton file via SD card by using Import Wallet at the Add Wallet dialog.
      3. Confirm that the detected hardware wallet is correct.
      4. Click Open, and wait for the wallet to load.
      5. Now you can receive bitcoin to addresses controlled by the hardware wallet.
      6. You can spend these coins in the Send dialog, though the hardware wallet must be connected via USB to sign the transaction. Alternatively, you can build a PSBT, export this via SD card to your Coldcard wallet for signing, then import the final transaction to Wasabi for broadcasting.

      No coinjoin

      Unfortunately, as of now, you cannot coinjoin with just the private keys on your hardware wallet. The keys need to be on the internet-connected computer to be able to coinjoin.

      What is Cold Storage

      Cold storage refers to generating and storing private keys completely offline. This is an often-used security precaution, especially dealing with large amounts of bitcoin. Because the private keys are not on a computer that is connected to the internet, many remote attack vectors are nullified.

      Methods of cold storage include keeping private keys on a:

      • USB drive or other data storage medium
      • Paper wallet
      • Bearer item such as a physical bitcoin
      • Hardware wallet

      Use a hardware wallet for cold storage

      There are multiple ways to exercise cold storage, however it is highly reccommended to use a hardware wallet. This is by far the best and most secure way of using bitcoin for almost all users.

      Hardware Wallet with Wasabi

      You can use Wasabi Wallet with almost any hardware wallet out there because Wasabi utilizes Bitcoin Core Hardware Wallet Interface [HWI]open in new window. The setup is thoroughly tested for Trezor model Topen in new window, Ledger Nano S, Nano S Plus and Nano Xopen in new window, and Coldcardopen in new window.

      Connecting via USB

      Import the wallet

      1. Go to Add wallet.
      2. Click on Connect to hardware wallet.
      3. Give the wallet a name.
      4. Connect the hardware wallet to the PC and enter the pin on the hardware wallet to unlock it.
      5. Confirm that the correct hardware wallet is detected.
      6. Open the wallet.

      This wallet can be used as a watch-only wallet when the hardware wallet device is not connected.

      Wasabi remembers the wallet's information like xpub, wallet fingerprint and addresses etc. But it never knows the private keys, which are on the hardware wallet. So, you can see the balance and all it's transactions in Wasabi and you can generate addresses, but you cannot send without the hardware wallet being connected. Because you need to sign (confirm) the outgoing transactions on the hardware wallet.

      Receiving bitcoin

      After the first time you loaded a new device, the public keys will be stored locally on the computer, and you can use Wasabi to receive bitcoin to the hardware wallet without having it connected.

      Verify the receive address on the hardware wallet for extra security

      It's always a good practice to verify that the receive address on Wasabi corresponds to the one on the hardware wallet, before receiving (large amounts of) bitcoin. This could prevent malicious firmware which replaces a receive address with a fake one. You can do this by clicking on Show on the hardware wallet at a receive address. The address will now be displayed on the hardware wallet, check that the addresses correspond and then confirm this on the hardware wallet.

      Sending bitcoin

      Only when you want to send bitcoin you need to connect the device over USB again.

      1. Click the Send button.
      2. Enter the amount and destination address.
      3. Enter the label of whom you are sending to.
      4. At the Preview Transaction screen, check that everything is correct.
      5. Click Send Now.
      6. Connect the hardware wallet & unlock it.
      7. Check on the hardware wallet that everything is correct.
      8. Confirm on the hardware wallet.
      9. The transaction is sent!

      The private keys are not on the computer, thus the transaction is signed on the hardware wallet after you confirm with a physical button click. The final transaction is automatically broadcast over Tor with Wasabi Wallet.

      Connecting Coldcard via SD card

      You can use Wasabi Wallet together with Coldcard without ever connecting it via USB, thus further reducing possible attack vectors. For more details see the Coldcard documentationopen in new window.

      Import the skeleton wallet

      Power your Coldcard on a power bank or electricity socket, then unlock it with your pin. Put in a MicroSD card and go to Advanced > MicroSD Card > Export Wallet > Wasabi Wallet. This will write the public keys, wallet fingerprint, derivation path and other metadata to a skeleton file new-wallet.json.

      Protect your public keys!

      This file does not include your private keys, so an attacker cannot use it to spend your bitcoin. However, he can use it to derive a full transaction history, thus it is a potential privacy leak.

      Now insert the SD card to your computer, and open Wasabi Wallet. Go to the Add Wallet dialog, and click Import a wallet, browse to the SD card and select the new-wallet.json file. Wasabi will automatically import and modify this skeleton file and store it in your Wallets and WalletBackups folders.

      Receiving bitcoin

      After the skeleton wallet is imported, you can open the wallet from the wallet list at the NavBar, without having to power on the Coldcard. Generate a receive address as usual. The private key corresponding to this address is on the hardware wallet.

      Sending bitcoin

      Sending bitcoin airgapped works as follows:

      1. Enable PSBT workflow in the Wallet Settings
      2. Click the Send button.
      3. Enter the amount and destination address.
      4. Enter the label of whom you are sending to.
      5. At the Preview Transaction screen, check that everything is correct.
      6. Click Save PSBT file, and save the file on the MicroSD card.
      7. Remove the MicroSD card from the computer and put it into your Coldcard.
      8. On the Coldcard, click Ready to Sign.
      9. Verify the transaction details shown on the Coldcard, and approve to sign the transaction.
      10. Remove the MicroSD card from Coldcard and insert it into the computer.
      11. In Wasabi, click on Broadcaster (in the search bar).
      12. Select Import Transaction.
      13. Select the final signed transaction, which looks like this xxx-final.txn.
      14. Broadcast the transaction.

      Enable PSBT workflow in the settings

      You need to have PSBT workflow enabled in the wallet settings in order to have Save PSBT file show up at the Preview Transaction screen. After it is enabled, a Broadcast button will appear next to the Send button for an easier workflow.

      Cold-Wasabi protocol

      This is how you can safely eat cold Wasabi, or store your coins on a hardware wallet after coinjoining with Wasabi Wallet. Because you cannot do coinjoin with the private keys on the hardware wallet, you will need to generate and load two different wallets in Wasabi. A 'hot' (coinjoin) and a 'cold' (storage) wallet will both be running in parallel, label them accordingly so you don't mix them up.

      GUI tutorial

      Coinjoin on the hot Wasabi

      First

      You should make your existing coins private. It is useful to generate a complete new hot wallet for this, so as to keep the coinjoin transaction history separate from other wallets.

      1. Generate a new hot-Wasabi Wallet.
      2. Open the Receive dialog to get a new address.
      3. Send bitcoin into this Hot-Wasabi Wallet.
      4. Start the automatic coinjoin process and wait for the coinjoin to be done (i.e. privacy progress 100%).

      Set up your cold-Wasabi

      Second

      In order to separate these new private coins, you should generate a fresh wallet on your hardware device.

      1. Generate a new set of keys on your hardware wallet and make a backup.
      2. Load your hardware wallet device to Wasabi, either via USB or SD card.
      3. Label and generate a receive address for the hardware wallet. For the first setup, you need to connect the hardware wallet to the computer that runs Wasabi, afterwards, you can generate receive addresses without the device being connected.
      4. Copy the receiving address from the cold-Wasabi.

      Send bitcoins from hot to cold Wasabi

      Third

      When your coins are private, it is a good practice to send them out in multiple batches in order to not consolidate all your coins. Wait some time in-between sending them, so that timing analysis becomes more difficult.

      1. Go to the hot-Wasabi Send dialog and enter the amount.
      2. Paste the cold-Wasabi address.

      Send bitcoins from cold Wasabi

      Finally

      You can at any time spend the bitcoin from the cold-Wasabi.

      1. Connect your hardware wallet to the computer.
      2. Load the cold Wasabi wallet.
      3. Go to the Send dialog, enter the amount and the destination address, then sign the transaction with the hardware wallet.

      Success!

      おめでとうございます!

      You are now eating Cold Wasabi!

      WARNING

      The anonymity score is tied to the wallet that you used to coinjoin, if you send a mixed coin to another Wasabi Wallet (in this case your hardware wallet), it will have an anonymity score of 1 (and will be marked as non-private) because this wallet doesn't know that the coin was coinjoined.

      You should use a meaningful label when you generate a receive address in your hardware wallet, e.g. "Myself coinjoin private" (something that reminds you that you got this utxo from your Wasabi Wallet and it was coinjoined).

      - + diff --git a/using-wasabi/Daemon.html b/using-wasabi/Daemon.html index 0c2b4d59e2..1a4fb6eb56 100644 --- a/using-wasabi/Daemon.html +++ b/using-wasabi/Daemon.html @@ -27,8 +27,8 @@ Headless Wasabi Daemon | Wasabi Docs - - + +

      Headless Wasabi Daemon

      Introduction

      The default of how to interact with your Wasabi wallet is the graphical user interface (GUI). There is also a headless daemon where you do not run a resource-intensive GUI, but only the command line interface. Running the daemon minimizes the usage of resources (CPU, GPU, Memory, Bandwidth) with the goal of making it more suitable for running all the time in the background. The RPC interface can be used to interact with the Daemon.

      The daemon is included in the package starting from Wasabi version 2.0.4open in new window and can be launched using the command line.

      The desktop app (GUI) is built on top of the daemon. Meaning that command line arguments/variables can also be used to configure the desktop app.

      The available startup parameters can be found at the Starting Wasabi with parameters pillar.

      How to run

      If the package is installed

      Depending on your operating system, open the command line and execute:

      Linux

      wassabeed
      @@ -43,6 +43,6 @@
       

      Check the Wasabi Daemon version

      $ wassabeed --version
       Wasabi Daemon 2.0.7.1
       
      - + diff --git a/using-wasabi/DeterministicBuild.html b/using-wasabi/DeterministicBuild.html index 7c58ff792d..ccbb7dd5bb 100644 --- a/using-wasabi/DeterministicBuild.html +++ b/using-wasabi/DeterministicBuild.html @@ -27,11 +27,11 @@ Deterministic Build | Wasabi Docs - - + + - + diff --git a/using-wasabi/DiscreetMode.html b/using-wasabi/DiscreetMode.html index 2142410f62..5b89e1f2df 100644 --- a/using-wasabi/DiscreetMode.html +++ b/using-wasabi/DiscreetMode.html @@ -27,11 +27,11 @@ Discreet Mode | Wasabi Docs - - + +

      Discreet Mode

      Discreet Mode is a Wasabi Wallet feature that hides sensitive and critical information from physical observers and allows you to post screenshots without worrying about your privacy.

      Wasabi Wallet Discreet Mode


      How to activate/deactivate Discreet Mode

      You can activate or deactivate by clicking the Discreet Mode icon in the bottom left corner of the main view.

      Enable Discreet Mode in Wasabi Wallet

      Disable Discreet Mode in Wasabi Wallet

      More information on Discreet Mode

      • In Discreet Mode the wallet is still usable, meaning that you can send and receive payments, as well as coinjoin.
      • Discreet Mode only masks the surface. This means that when you click to see more Details, some information (which wasn't visible at first) will be shown.
      • When hovering over the ### chars with the cursor, the content will be visible for a short amount of time.
      • Some justification of design decisions can be seen hereopen in new window.
      - + diff --git a/using-wasabi/ELI5.html b/using-wasabi/ELI5.html index 4e5d6aea77..b0592ba9ae 100644 --- a/using-wasabi/ELI5.html +++ b/using-wasabi/ELI5.html @@ -27,11 +27,11 @@ Explain Wasabi like I'm 5 | Wasabi Docs - - + +

      Explain Wasabi like I'm 5

      Introduction

      Wasabi Wallet is an open-source, non-custodial, privacy-focused Bitcoin wallet with built-in coinjoins. It is a piece of software that runs on your computer and helps you to manage your bitcoins. Although Wasabi has some very advanced magic under the hood, it is rather easy to use. You can generate a new set of seed words, or import already existing ones. With Wasabi you can receive bitcoins into your full control, and you can send them to someone else without needing permission from any other person or entity. There is also a powerful auto-coinjoin feature to help obfuscate your transaction history. You can use Wasabi to manage your hardware wallet, and it even connects to your own full node. Of course, Wasabi is libre and open-source, which means you have full control over the software you manage your money with.

      Installing Wasabi

      Installing Wasabi is super-easy. Go to the official website wasabiwallet.ioopen in new window and download the version for your operating system. You can then install Wasabi as you would do any other software on your computer.

      See this chapter for a detailed step-by-step tutorial for all operating systems, and also how to verify the PGP signature.

      Generating a Wallet

      When you start Wasabi for the first time, the dialog to generate a new wallet will be open. You can set a unique name for the wallet so that you remember what it is for. In the next step, Wasabi will show your 12 recovery words. These must be carefully backed up, in the correct order, as they are needed to recover your wallet (together with the password) on another computer or in another wallet software. Next, choose a very secure password, as this encrypts the secrets, and should not be guessed by others. You will always need this password in order to spend your bitcoins, so take great care to back it up properly. Make sure you store the backup of your recovery words in a different location than the backup of your password.

      Backup both!

      If you ever need to restore your wallet in Wasabi, or any other wallet, you will need both: your password AND your 12 recovery words.

      See this chapter for more information on how to securely generate your wallet.

      Receiving bitcoin

      In order to receive bitcoin, you need to generate an address in the Receive dialog. But first, you must label it with the names of any observers who know that this address is yours. For example, if Alice pays you back for last nights pizza, then the label is Alice. This is an important feature for you and the wallet to know which coin is from whom, and it will help with your privacy in the future. Once this newly generated address receives some coins, Wasabi Wallet will automatically hide this used address, so you don't reuse it by accident.

      See this chapter for a tutorial on how to properly label your addresses and receive bitcoin.

      Sending bitcoin

      Sending process is different depending on the privacy of coins you have. Assuming you have enough private coins the sending process is the following:

      1. Click the Send button (top right corner) at the main view.
      2. Insert the address of the receiver and type in the amount the receiver should get, then click Continue.
      3. Enter the name of the person or company receiving the payment and click Continue.
      4. Make sure everything is filled in correctly in Preview Transaction window and click Confirm.
      5. Type in your password and click Continue.

      You will now see a pop-up window telling you that the transaction is broadcasted to the Bitcoin network.

      See this chapter for more details about sending bitcoin and the privacy nuances of it.

      Coinjoin with Wasabi

      If you don't like that your employer knows where you spend your money, or that a merchant can find out how much money you have, then you should coinjoin your bitcoin, as this breaks link to its transaction history. Although the coinjoin protocol is a bit complex, it is very easy to use in Wasabi. The wallet automatically coinjoins all your funds, so that your money becomes private. This process might take some time (hours/days). You can still use your wallet in the mean time, however it is a best practice to only use private funds, which the wallet does automatically when possible. At the wallet's homescreen the percentage indicates the progress to making your wallet fully private. The exact available private amount of bitcoin is listed as PRIVATE.

      See this chapter for a thorough analysis of coinjoin, details on the Wasabi implementation and best practices on how to use it properly.

      - + diff --git a/using-wasabi/InstallPackage.html b/using-wasabi/InstallPackage.html index 2e64b38be7..1ce82b4e41 100644 --- a/using-wasabi/InstallPackage.html +++ b/using-wasabi/InstallPackage.html @@ -27,11 +27,11 @@ Install-package | Wasabi Docs - - + +

      Install package

      Introduction

      The easiest way to start with Wasabi is to download, verify and install the released package. This is a version of the software that is thoroughly reviewed by the contributors. The package has the binary code that is needed to run the Wasabi Wallet client including the graphical user interface. For compiling the open-source code with cutting edge development features, also including the backend server, see this tutorial here.

      Download the packages either from the official WasabiWallet.ioopen in new window clearnet website or for your privacy's sake, from the official Tor onion service http://wasabiukrxmkdgve5kynjztuovbg43uxcbcxn6y2okcrsg7gb6jdmbad.onionopen in new window.

      Operating systems supported by Wasabi Wallet

      Although there is automatic signature verification on Windows and macOS, it is still recommended to manually VERIFY PGP SIGNATURES of the downloaded package with zkSNACKs' PGP public key 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861Eopen in new window before installing Wasabi. This protects you against malicious phishing sites giving you back-doored wallet software. If you have personally verified zkSNACKs' PGP public key 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861Eopen in new window and you are familiar with the Web Of Trustopen in new window, please consider also signing itopen in new window.

      Always

      Don't trust - Verify!

      Install Wasabi step-by-step

      1. Download the Wasabi package relevant to your operating system from wasabiwallet.ioopen in new window.
      2. Verify the PGP signatures of the download.
      3. Install Wasabi package as you would do any other software on your operating system.

      Windows

      1. Downloadopen in new window the .msi installer of the latest Wasabi release.

      Download Wasabi Wallet for Windows

      1. Install Wasabi by double-clicking the .msi and following the GUI instructions.

      2. Make sure that you see this window that verifies the installer was signed by zkSNACKs Limited. Manual PGP verification is optional, as the package is signed and verified automatically on Windows.

      Wasabi Wallet Windows signature verification

      Wasabi will be installed to your C:\Program Files\WasabiWallet\ folder. You will also have an icon in your Start Menu and on your Desktop. After the first run, a data folder will be created. Among others, here is where your wallet files and your logs reside.

      Debian and Ubuntu

      If you have already imported zkSNACKs' PGP public key, then jump to step 2.

      1. Download zkSNACKs' PGP public key hereopen in new window, and then import it with gpg --import PGP.txt.

        Verify that the fingerprint is 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E by running this command gpg --list-keys zkSNACKs.

      2. Downloadopen in new window the latest Wasabi release, both the .deb package and the corresponding .asc signature file.

      Download Wasabi Wallet for Debian

      1. Verify the signature in the Download repository with gpg --verify Wasabi-2.0.7.1.deb.asc Wasabi-2.0.7.1.deb. If the message returned says Good signature from zkSNACKs and that it was signed with Primary key fingerprint: 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E, then the software was not tampered with since the developer signed it.

        TIP

        The output from the verify command may contain WARNING: This key is not certified with a trusted signature!. You can ignore this, but if you want to fully verify your download, you need to ask people you trust to confirm that the key fingerprint belongs to zkSNACKs.

      2. [GUI] Install by double-clicking and follow the GUI Instruction.
        [CLI] In the Download repository, execute the command sudo apt install ./Wasabi-2.0.7.1.deb to install Wasabi and after that run Wasabi by executing wassabee.

      After the first run, a data folder will be created. Among others, here is where your wallet files and your logs reside.

      Other Linux

      If you have already imported zkSNACKs' PGP public key, then jump to step 2.

      1. Download zkSNACKs' PGP public key hereopen in new window, and then import it with gpg --import PGP.txt.

        Verify that the fingerprint is 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E by running this command gpg --list-keys zkSNACKs.

      2. Downloadopen in new window the latest Wasabi release, both the .tar.gz archive and the corresponding .asc signature file.

      Download Wasabi Wallet for Linux

      1. In the Download folder, run gpg --verify Wasabi-2.0.7.1.tar.gz.asc Wasabi-2.0.7.1.tar.gz.

        If the message returned says Good signature from zkSNACKs and that it was signed with Primary key fingerprint: 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E, then the software was not tampered with since the developer signed it.

        TIP

        The output from the verify command may contain WARNING: This key is not certified with a trusted signature!. You can ignore this, but if you want to fully verify your download, you need to ask people you trust to confirm that the key fingerprint belongs to zkSNACKs.

      2. Extract the archive while keeping the file permissions: tar -pxzf Wasabi-2.0.7.1.tar.gz.

      3. Run Wasabi by executing ./wassabee.

      After the first run, a data folder will be created. Among others, here is where your wallet files and your logs reside.

      macOS

      1. Downloadopen in new window the .dmg package of Wasabi 2.0.7.1 for your machine's processor. There are two types of packages for macOS, one for Intel and one for the Apple Silicon chip. If you're not sure what processor your device has, you can check itopen in new window.

      Download Wasabi Wallet for macOS

      1. Double-click .dmg to open it.

      2. Install Wasabi by dragging it into your Applications folder.

      3. At first startup, there will be a pop-up that Wasabi was downloaded from the internet. Click on Open and restart Wasabi.

      After the first run, a data folder will be created. Among others, here is where your wallet files and your logs reside.

      Optional PGP Verification

      If you have already imported zkSNACKs' PGP public key, then jump to step 4.

      1. Get GnuPGopen in new window.

      2. Copy zkSNACKs' PGP public keyopen in new window into a new TextEdit document and saving it as zkSNACKsPubKey.txt. Before saving, you need to go to Format / Make Plain Text (otherwise TextEdit will not be able to save it as a .txt file).

      3. Open Terminal and go to the folder in which you saved the zkSNACKsPubKey.txt file and import the PGP public key with sudo gpg --import zkSNACKsPubKey.txt. This should return the output: key 856348328949861E: public key "zkSNACKs <zksnacks@gmail.com>" imported.

      4. Downloadopen in new window the latest Wasabi release, both the .dmg package and the corresponding .asc signature file.

      5. In the Download folder, run sudo gpg --verify Wasabi-2.0.7.1.dmg.asc Wasabi-2.0.7.1.dmg. If the message returned says Good signature from zkSNACKs and that it was signed with Primary key fingerprint: 6FB3 872B 5D42 292F 5992 0797 8563 4832 8949 861E, then the software was not tampered with since the developer signed it.

        TIP

        The output from the verify command may contain WARNING: This key is not certified with a trusted signature!. You can ignore this, but if you want to fully verify your download, you need to ask people you trust to confirm that the key fingerprint belongs to zkSNACKs.

      Watch the videoopen in new window

      Watch the videoopen in new window

      - + diff --git a/using-wasabi/PasswordBestPractices.html b/using-wasabi/PasswordBestPractices.html index 3af0943442..3da933a3c6 100644 --- a/using-wasabi/PasswordBestPractices.html +++ b/using-wasabi/PasswordBestPractices.html @@ -27,13 +27,13 @@ Password Best Practices | Wasabi Docs - - + +

      Password best practices

      Introduction

      You shouldn't try to re-invent the wheel for something as complicated and nuanced as cryptography, and especially in regards to entropy.

      These are some of the industry best practices:

      TIP

      Don't "roll your own" crypto.

      Password basics

      1. Randomness is the single-most important requirement for a strong password, because randomness means that the password has no predictable pattern to it. This makes it impossible to crack without doing an exhaustive, "brute-force" attack.

      2. Assuming a password is constructed randomly, its length has the most impact on its strength. However, a password that is very long, but not randomly constructed, such as: thequickbrownfoxjumpedoverthelazydogsback, or a passage from literature, is certain to be on every serious hacker's guess list.

      3. "Entropy" is a term commonly used to define the strength of a random password. There is a tutorial about how to calculate and evaluate entropy in your password here.

      What not to do

      Here are a few examples that do it completely wrong. You should not generate your password like this:

      1. Do not use publicly known information like your grandma's maiden name and the birthday of your dog. Emma1992 is a really, really, really bad password, because it can easily be guessed and it is very short. Here is a list of the worst and most commonly used passwordsopen in new window in recent years. Password hackers start with lists like this.

      2. Do not use the same password that you have used in other places. Because if one password is leaked, then other ones are compromised.

      3. Do try to use a mix of uppercase and lowercase letters, numbers, and special characters (&$%@ etc.) in your password.

      4. Do not take a famous quote, or well-known passage from literature and use it for a password. It will not fool any serious hacker, even if you throw in substitutions such as: "@" instead of "a", or "$" instead of "s".

        Make a secure password!!

        It is of utmost importance to generate a secure password following best practices.

      Use Diceware

      Rolling dice is an easy and effective way to get high entropy and randomness in a password that can even be memorized.

      The Diceware method is a great strategy for your most precious passwords (e.g. the password to your computer, your backups, or your encryption key). You can even use Diceware to create secure wallets.

      To generate a password using Diceware, you just need a high-quality die, a pen, and some paper. You can find EFF's Diceware list at the Electronic Frontier Foundation websiteopen in new window. Make sure you are alone and there are no cameras nearby. For maximum protection, disconnect your computer from the internet (after you save the Diceware list) and cover your webcam.

      To start, roll the die five times. Record the number from each roll using the pen and paper. You will end up with a five-digit number. We got 52611. Now search on the Diceware list for the five digit number you just created. Write down the word the number corresponds to, in our case it is salvo. This word by itself is not a good password, it would only take about a thousandth of a second to crack. Repeat the dice rolling process at least five more times.

      After six sets of five rolls, we ended up with 52611 51631 63432 43123 21641 and 14146. This corresponds to the password salvo rhoda walton mudd croft bride.

      This six-word passphrase, even though easy to remember, is just one of 2.21 x 10^23, or 221 sextillion possible six-word combinations taken from the list of 7776 words. A computer capable of 1 trillion guesses/second would take, on average, over 3500 years to correctly guess this or any six-word combination of words from the list, if they are chosen randomly.

      A 6-word passphrase derived as just discussed has 77 bits of entropy. Best practices for being secure against any adversary currently recommendopen in new window a minimum of near 80 bits of entropy, so this example phrase barely qualifies.

      Use a dictionary

      All of the major languages have at least 100,000 words in their dictionaries. Most have over 300,000 words. You can take a dictionary in any language that you are comfortable with and create a very strong password by randomly selecting as few as 5 words from it.

      The quick, but not technically random way would be to flip open your chosen dictionary to any seemingly random page, close your eyes, and put your fingertip down on the page. Choose the word nearest your fingertip that has at least 4 letters. Repeat this process at least 4 more times.

      If you'd prefer a truly random way to select pages, and you are using either Windows or Linux, you can easily create random numbers in a selected range (such as the number of pages in your dictionary) from your terminal.

      Assuming your dictionary has, for example, 854 pages:

      Windows: Open a Powershell terminal and enter:

      [C:\User>] get-random -maximum 854
       

      Linux: Open a terminal and enter:

      [user@you:~$] echo $(( $RANDOM % 854 ))
       

      Each time you repeat this command, your operating system will return a random number somewhere in the range of available pages of your dictionary.

      Use this function to pick pages in a truly random manner, and select the needed words in the same way as before.

      Both this and the Diceware method are good ways to create a password with sufficient randomness that was generated completely off-line.

      Use an open-source password manager

      There are several well-known, cross-platform, and open-source password managers available. The main requirement besides being open-source, is a cryptographically secure random number generator, with the ability to generate significant entropy while using letters, numbers, and special characters.

      It is recommended that you use all available characters when generating a password, and the length of the password should be at least 12 characters for minimally sufficient entropy.

      It is up to the user to choose between a password manager that stores its data in the cloud, making it easy to stay in sync across various devices, or one that only stores its data locally.

      As it so often happens, more convenience means less security in this decision.

      Password entropy

      "Entropy" is a term commonly used to define password strength. It is typically used to describe the combined effect of randomness, length, and number of characters (lowercase/uppercase letters, numbers, and special characters) or words in a password or passphrase.

      Calculating entropy allows the strength of different randomly constructed passwords or phrases to be compared. It also defines the size of the search-space an attacker would need to cover to find the password by trying all possibilities.

      How to calculate entropy

      Assuming a password or passphrase is constructed randomly, its level of entropy can be calculated in this way:

      • For a password, the total number of possible outcomes given a specific length (L), and number of characters used (C), is: C raised to the power of L, or C^L.
        Example: jwodnrosqf is lowercase only (C = 26) and 10 characters long (L = 10). So, 26^10 = 141,000,000,000,000 (141 trillion).

        Including uppercase letters in the same password: jWoDNrosqF to double (C), results in 52^10 possible passwords = 145,000,000,000,000,000 (145 quadrillion).

        Including special characters in the same password: jW0DNro$qF raises (C) to 95, resulting in 95^10 possibilities = 59,900,000,000,000,000,000 (59.9 quintillion).

      • For a passphrase chosen randomly from a list of words, the total number of possible outcomes given a specific number of words (N) and wordlist size (S) is: S raised to the power of N, or S^N.
        Example: The EFF Diceware list contains 7776 words. Randomly selecting 5 words from the list results in 7776^5 possible passphrases = 28,400,000,000,000,000,000 (28.4 quintillion).

      Just knowing how to do these basic calculations allows you to compare the strength of different randomly-generated passwords or phrases.

      "Bits" of entropy

      Password entropy is often discussed and compared in a context of bits of entropy. This is, of course, because computers can only process 0's and 1's, or bits, so everything related is expressed that way. To calculate bits of entropy, use a calculator that does logarithmsopen in new window and compute log2(x), where x = the total number of possible outcomes for an event.

      For example, there are 7776 words on the EFF wordlist commonly used with dice to create passphrases. Plugging 7776 into the calculator to get log2(7776), it is shown that each word taken randomly from the list contributes 12.92 bits of entropy to the strength of the passphrase. So, a 5-word passphrase selected randomly from the EFF list will have 5 x 12.92 = 64 bits of entropy.

      Since the combination of: lowercase + uppercase letters, numbers, and special characters = 95, a password constructed using all of these will have log2(95), or 6.57 bits of entropy for each character that comprises the password.

      From that, we can now calculate that, in order to get the same level of entropy with a password instead of a 5-word passphrase, the password must be at least 10 characters in length.

      How much entropy is needed

      Entropy matters because it allows one to compare the required search-space of a potential password with the search-speed known to be available to various potential adversaries. In doing so, it is possible to then know how long it would take an adversary with known resources to attempt every mathematically possible password or passphrase for a given level of entropy.

      Edward Snowden revealed in 2013 that the NSA had the ability to guess passwords at a rate of 1 trillion guesses/second. At that speed of guessing, the password in the above example (28.4 quintillion possibilities) could be guessed in at most, 11 months.

      Since there is an equal chance of finding the password in the first half of the total number of guesses as there is in finding it in the second half of the total number, it is accurate to assume that on average, a password will be found in 1/2 of the time required to do an exhaustive search. That means just over 5 months for the example just mentioned.

      Keep in mind that Snowden's information in quite old, in a processing-power context. We have no way of knowing what is currently possible, so if a State-Level attacker is a part of your assumed threat-model, it would be wise to assume that their tools are now much more powerful.

      Even if a given threat-model does not include State-Level attackers, it is still important to consider that there are GPU-based password hacking tools publicly available that are capable of guessing well into the billions of guesses/second.

      - + diff --git a/using-wasabi/PasswordFinder.html b/using-wasabi/PasswordFinder.html index f55d0a3f44..6bf86950a3 100644 --- a/using-wasabi/PasswordFinder.html +++ b/using-wasabi/PasswordFinder.html @@ -27,11 +27,11 @@ Password Finder | Wasabi Docs - - + +

      Password Finder

      Wasabi Password Finder is a tool for helping those who made a mistake typing the password during the wallet creation process. This tool tries to find the password that decrypts the encrypted secret key stored in a given wallet file.

      Limitations

      Wasabi Wallet protects the encrypted secret key with the same technology used to protect paper wallets (BIP 38open in new window) and for that reason, it is computationally infeasible to brute force the password using all the possible combinations (assuming a secure password was chosen).

      WARNING

      It is important to know that the Wasabi Password Finder is not for breaking wallet passwords but for finding errors (typos) in an already known password, and that it's success rate is limited.

      Usage

      After an incorrect password is entered when opening a wallet, Forgot Password will show up.

      Wasabi Wallet Forgot Password

      First you will be asked questions, like your most likely password, which language, which characters it contains etc. After that it will search if your password can be found.

      - + diff --git a/using-wasabi/PayJoin.html b/using-wasabi/PayJoin.html index ed9e7934ba..b88cedd64c 100644 --- a/using-wasabi/PayJoin.html +++ b/using-wasabi/PayJoin.html @@ -27,8 +27,8 @@ PayJoin | Wasabi Docs - - + +

      PayJoin

      Sending PayJoin step-by-step

      1. Load a wallet and open the Send dialog.

      2. Request from the receiver a BIP21 Bitcoin URIopen in new window with the flag pj= and paste it into the To field of the Send dialog. (E.g. bitcoin:tb1q0382a3m2jzvyk5lkea5h5jcht88xa6l0jufgwx?amount=0.00010727&pj=https://payjoin.test.kukks.org/BTC/pj)

      Send Bitcoin PayJoin transaction in Wasabi Wallet

      1. Click Continue.

      2. Enter the label.

      3. At Preview Transaction, verify that the information is correct.

      PayJoinPreviewTransaction

      1. Click Confirm, and type in the password.

      The success of a PayJoin transaction is not something that depends on Wasabi.

      It may happen that the transaction is broadcast with success, but that it is not a PayJoin. This can happen for several reasons including:

      • The receiver did not have any utxos to contribute towards a PayJoin.
      • Your wallet does not use the same address format as the receiver's.
      • The PayJoin server is not available.

      The goal of PayJoin

      PayJoin is a collaborative transaction between the sender and the receiver of a payment, for example the merchant and the customer. The goal of the protocol is to break the common input ownership heuristic, while making it difficult to fingerprint that the transaction is in fact a CoinJoin. Further, it reduces the transaction fees paid by the merchant due to consolidation of coins.

      Coordination

      The coordination of this coinjoin is done with the PayToEndPoint [P2EP] concept. The receiver is reachable over the internet, either over a Tor onion service or clearnet IP address. The link is included in a BIP21 Bitcoin URI, and is provided to the sender as the payment invoice. The sender uses this onion service or IP address to connect to the server of the receiver and communicate the further protocol. The coordination is usually done within seconds, and will abort to the fallback transaction after some time if the connection breaks.

      Fallback transaction

      In the very first request to the receiving server, the sender provides a finalized signed transaction which has only the inputs of the sender, like any other Bitcoin transaction. The inputs are only from the sender. The outputs are the address of the receiver, as well as the change address of the sender. For example here, Alice pays Bob 0.2 bitcoin.

      Alice input   1 bitcoin   -->   Bob output            0.2 bitcoin
      @@ -36,6 +36,6 @@
       

      Both the sender and the receiver could broadcast this transaction.

      PayJoin transaction

      The receiving server responds to this initial proposal, with a transaction that adds more inputs to the transaction. Thus, the output belonging to the receiver increases in value, above the value that the payment amount is due.

      Alice input   1 bitcoin   -->   Bob output            0.7 bitcoin
       Bob input     0.5 bitcoin -->   Alice change output   0.8 bitcoin
       

      The sender broadcasts this transaction to the Bitcoin network.

      Advantages of PayJoin

      First and foremost, the common input ownership heuristic is broken, meaning that the inputs do not belong to one single entity, but to several of them. This breaks one of the most important assumptions of transaction surveillance companies. Contrarily to other coinjoin implementations, the outputs are not of equal value, so it is not obvious that this transaction is in fact a coinjoin.

      Further, the outputs do not reflect the actual value of the transaction. In our example, the economic transfer is of 0.2 bitcoin from Alice to Bob, but the outputs are worth 0.7 bitcoin and 0.8 bitcoin. This is obfuscating the actual amount payed.

      Finally, the receiver is consolidating his coins, thus saving on future transaction fees. Without the PayJoin, the receiver would have two coins, worth 0.2 bitcoin and 0.5 bitcoin, and he would have to pay twice the transaction fee to spend these coins. But because of using PayJoin, he only has one coin, worth 0.7 bitcoin, thus reducing his future transaction costs when spending this coin.

      - + diff --git a/using-wasabi/RPC.html b/using-wasabi/RPC.html index bbab191d09..cc769428aa 100644 --- a/using-wasabi/RPC.html +++ b/using-wasabi/RPC.html @@ -27,8 +27,8 @@ RPC Interface | Wasabi Docs - - + +

      Wasabi Remote Procedure Call Interface

      Wasabi Wallet provides an RPC interface to interact with the wallet programmatically. The RPC server is listening by default on port 37128.

      Limitations

      The RPC server does NOT support batch requests or TLS communications (because it is not supported on Linux and on Macopen in new window). Requests are served in order one-by-one in series (no parallel processing). It is intentionally limited to serve only one whitelisted local address and it is disabled by default.

      The more user friendly command line interface wcli can be found hereopen in new window.

      Configure RPC

      The RPC server has to be configured and enabled. This is done in the Config.json file and the relevant settings are:

      JsonRpcServerEnabled: [true | false] (default: false)
      @@ -534,6 +534,6 @@
         "id": "1"
       }
       
      - + diff --git a/using-wasabi/Receive.html b/using-wasabi/Receive.html index abc5bed25b..a11f15239f 100644 --- a/using-wasabi/Receive.html +++ b/using-wasabi/Receive.html @@ -27,8 +27,8 @@ Receive | Wasabi Docs - - + +

      Receive bitcoin

      Receive bitcoin in Wasabi Walletopen in new window

      Generating addresses step-by-step

      1. Start Wasabi and open the wallet that you want to receive coins into.
      2. Click the Receive button in the main view's top right corner.
      3. Type in the name of the entities who know that this address is yours. If you have already used a label before, simply choose it from the suggested labels.

      Receive label in Wasabi

      1. Press Continue and the wallet will generate a new address.

      Bitcoin address in Wasabi

      Bitcoin public keys and addresses

      The Bitcoin protocol utilizes public key cryptographyopen in new window to defend and verify the property rights of the individuals holding and transacting bitcoin. A private key is a large random number that should be kept secret. With the elliptic curve digital signature algorithmopen in new window, based on the private key you can calculate a public key. If someone has only the public key, it is computationally infeasible [pretty much impossible] to calculate the private key. Whoever knows the private key can calculate a cryptography signature over a message, which proves that the private key was known by the signer, without actually revealing the secret.

      For data size efficiency, in Bitcoin, the public key is hashedopen in new window and encoded into a bech32 address. This address commits to the public key, which commits to the private key. In a Bitcoin transaction, the output creates a new unspent transaction output which is "locked up" by an address. The input of the transaction spends a UTXO by providing a valid signature of the public key that the address committed to.

      TIP

      Wasabi Wallet does not "store your money", rather it stores your public keys and an encrypted secret that requires your password to derive the private keys. It creates addresses for receiving bitcoin, and it signs transactions that spend your bitcoin.

      The problem with address reuse

      Whenever you use the same address to lock up different UTXOs, then all these coins can be spent by anyone who knows the same private key. This makes it obvious for anyone that this one entity [you] owns all these coins, which is very bad for privacy. The first rule of Bitcoin privacy is never reuse addresses!

      TIP

      This is why Wasabi removes the address from the Addresses Awaiting Payment list as soon as it has received a coin.

      The importance of labeling

      Satoshis are the base unit currency of the Bitcoin network and are truly fungible, meaning that any 100 000 000 satoshis are always equal to 1 bitcoin. Just like with gold atoms, it doesn't matter which specific gold atoms you have, as long as it's gold, it's gold. However, an unspent transaction output, a bitcoin, is a chunk of money and is not fungible, because it has a different amount of satoshis in it, a different public key locking it up, a unique transaction history, and a unique index number. This is just like a gold coin, with a unique amount of gold atoms, and either a pretty mintage or an old chipped broken coin. Because UTXOs are not fungible, it is very important to know exactly which coin is which, and that is done by carefully labeling.

      For example, if I create a new address to receive a 0.5 BTC payment from Andrew for a laptop that I sold to him then the label has to be: Andrew.

      The label is not for describing the reason for payment, but rather to list those who know that this address is yours. Understanding this difference between labeling an address and describing a transaction is very important for your privacy.

      TIP

      In Wasabi it is mandatory to give every receive address a label of those who know that this address is yours, so that later you know what to do with it, and it also helps the auto coin selection algorithm when sending.

      Clusters

      Following the previous example, if I have to send a fraction (0.1 BTC) of the previously received coin to Charlie then in the Send tab the observers should be: Charlie. In that way, the change (0.4 BTC) will be known by Andrew and Charlie because they both will be able to follow the change. That's exactly what Wasabi displays in the coins list (cluster column), Wasabi tells us who are the ones that know about each of our coins in order to allow us to decide what to do with the coins.

      Let's take a look at another example: Imagine you have three coins, one known by Alice, one known by a KYC exchange and finally one known by Charlie. Imagine you need to sell a few sats to Charlie, which coin/s should you send? The obvious selection is the one already known by Charlie because by doing that he cannot learn anything new about our wallet, moreover, neither Alice nor the KYC exchange can learn anything new! But what if the coin is not big enough and we need to use more than one coin? You can use the one known by Alice or the one known by the KYC exchange, but are you okay with Charlie knowing about your deposit/withdrawal from the exchange? Are you okay with Alice knowing about your deal with Charlie? In case none of those combinations are acceptable for you then you should CoinJoin your coins.

      Coinjoined coins

      Those inputs that participate in a Wasabi coinjoin transaction get transformed into arbitrary sized outputs with an increased anonymity score. By default, Wasabi tries to create big coinjoin transactions with many inputs and outputs, but the individual coins' privacy varies depending on the final amounts and values of the inputs and outputs of other participants. The higher the anonymity score of a coin, the harder it is for an observer to know who that coin belongs to. For that reason, coins with a high anonymity score are usually the ones preferred when making a payment transaction. When coins achieve the target anonymity score of the selected coinjoin strategy, their values will the visible under the Privacy Progress bar.

      Final words about labels and examples

      4 coins with good labels:

      Andrew
      @@ -38,6 +38,6 @@
       

      2 coins with bad labels:

      Payment from Andrew for my laptop
       From my old wallet
       

      In case we take the two first coins with good labels and send them to María, look how the change cluster will be displayed: Maria, Andrew, David, Me (these people know about the coin). Now, look how this will be displayed if I use the two coins with bad labels: Maria, Payment from Andrew for my laptop, From my old wallet (Is this high-quality info about the privacy level of my coin? Not really.).

      So, think about coins, think about who knows and make sure to make decisions about privacy based on what you are going to reveal and to whom. Wasabi doesn't care about why you transact with bitcoins, it only cares about who you transact with because this is what helps you reclaim your privacy.

      - + diff --git a/using-wasabi/RestoreElectrum.html b/using-wasabi/RestoreElectrum.html index 79acca7dfb..49d622849d 100644 --- a/using-wasabi/RestoreElectrum.html +++ b/using-wasabi/RestoreElectrum.html @@ -27,14 +27,14 @@ Restoring Wasabi Wallet in Electrum | Wasabi Docs - - + +

      Restoring Wasabi Wallet in Electrum

      Potential privacy leak!

      If you do not run your own Electrum server, you will leak all your addresses to random third-party servers, losing anonymity against those entities, so you must make a judgement call by being aware of this.

      To gain some privacy by using Electrum you should set up Tor on Network preferences or by installing your own Electrum server via Electrum Personal Serveropen in new window, ElectrumXopen in new window or Electrsopen in new window.

      Electrum does currently not support Taproot

      As of Wasabi version 2.0.3open in new window, users may receive Taproot outputs from coinjoin or as a change output from a normal transaction. So when recovering a wallet from Wasabi in Electrum some funds might be missing, as the Taproot (SegWit v1) coins are not shown. An other wallet that does support Taproot should be used for recovering Taproot coins.

      Restoring Wasabi Wallet via Electrum GUI

      1. Launch Electrum.

        If you don't have a wallet created on Electrum it should automatically display an Install Wizard. If it opens your default wallet then go to File -> New/Restore.

      2. Name your new Electrum wallet.

      3. Choose Standard wallet.

      4. Choose I already have a seed.

      5. Type in your seed (recovery words).

      6. Click the Options button, then select BIP39 seed and if you created your Wasabi wallet with a password make sure to check Extend this seed with custom words and type your password in the Seed extension window.

      7. On the Script type and Derivation path window, choose native SegWit (p2wpkh) or manually insert m/84'/0'/0'.

      8. Increase the gap limit by opening Electrum's Console and execute the following commands:

        wallet.change_gap_limit(100)
         wallet.gap_limit_for_change = 100
         wallet.synchronize()
         
      - + diff --git a/using-wasabi/Send.html b/using-wasabi/Send.html index 0d9550ff41..9e30316a1d 100644 --- a/using-wasabi/Send.html +++ b/using-wasabi/Send.html @@ -27,11 +27,11 @@ Send | Wasabi Docs - - + +

      Send

      Send in Wasabi Walletopen in new window

      How to send bitcoin step-by-step

      1. Click the Send button.

      Wasabi Wallet Send Button

      1. Enter the destination address.

      Wasabi Wallet Send To Field

      1. Specify the amount of bitcoin to send to the destination address. Optionally, you can specify the dollar amount to send instead.

      Wasabi Wallet Send Amount Field

      1. Click Continue.

      Wasabi Wallet Send

      1. Label the recipient by entering the name of the person or company who you are sending to.

      Wasabi Wallet Send Recipient Label

      1. Preview Transaction.

        • Verify the amount, recipient, and the address.
        • Review the estimated time for confirmation and the transaction fee. Optionally, you can change the transaction fee or confirmation time by clicking on the edit fee icon.

        Wasabi Wallet Send Change Fee

        • Review the suggestions to improve your privacy by clicking the shield icon in the top right corner. For example, you may want to slightly increase or decrease your payment amount to avoid change.

        Wasabi Wallet Send Privacy Suggestion

      2. Click Confirm.

      Wasabi Wallet Send Preview Transaction

      1. Type in your password, then click Continue.

      Wasabi Wallet Send Password

      1. Transaction successfully sent!

      Wasabi Wallet Payment Successful

      Coins

      A coin is an unspent transaction output (UTXO): a chunk of bitcoin that can be sent in a future transaction. Unlike fiat currencies which have fixed denominations, each UTXO contains a variable amount of bitcoin. You can get coins by first receiving them from someone else. When you want to send some bitcoin you simply enter the amount to send and the address after clicking the Send button. Wasabi Wallet does the job of automatically selecting the appropriate combination of coins to include as inputs in the transaction.

      Clusters

      Every time you receive a payment, you first must label the observers who know this address is yours. This transaction metadata is used to build a cluster of which people know about your coins. For example, if you receive a coin from Alice, then the cluster is Alice. If you now send half of this coin to Bob, then the cluster of your change coin is Alice, Bob. The goal is to know the observers who know about your coins and try to reduce their number for each coin.

      Anonymity Set

      A typical bitcoin transaction will contain one input and two outputs - one of the outputs is the coin you are sending and the other output is the change coin that goes back to your wallet. Your change coin can be linked to this one input. There is a 1 in 1 chance to find this link and no plausible deniability. Thus, Wasabi denotes this coin's anonymity set as 1.

      In a Wasabi coinjoin, many peers register coins in the input of the transaction, and in the output there are several equal value coins. For example, the output may contain 20 coins worth exactly 0.3 bitcoin. This means that when looking at one of these coinjoin outputs, there is a 1 in 20 chance to find the corresponding input: thus an anonymity set of 20. Therefore, the higher the anonymity set, the more your post-coinjoin coin is delinked from the pre-coinjoin history.

      There are three coinjoin strategies to choose from in Wasabi Wallet which effect the target anonymity score for your coins. These three strategies are Minimize Cost, Maximize Speed, and Maximize Privacy. Each of these strategies come with different trade-offs.

      Alternatively, custom coinjoin settings can be configured.

      Coinjoin Strategy

      Receiving Address

      When sending bitcoin, you need to know the destination address of the receiver. This commits to the spending condition that the receiver agrees to have for this coin. The address can be a public key hash [starting with 1], a script hash [starting with 3], a native SegWit bech32 public key hash [starting with bc1q], or a Taproot bech32m public key [starting with bc1p]. Make sure that you ask the receiver for a new address for every payment to protect your privacy and theirs. Wasabi will calculate the checksum and notify you if the provided address is wrong.

      Observers

      In Wasabi it is mandatory to provide one or more labels each time you initiate a transfer of bitcoin. These labels should be the observers of the transaction. An observer of a sending transaction is, of course, the receiver, as well as any other third party that knows that you are the sender of this transaction. For example, you should include as a label the payment processor or the bitcoin exchange if you use their services. This metadata will be used to build an accurate cluster of observers who know about your coins.

      Amount

      In the Amount text box you can specify how many bitcoins the receiving address will gain. You can also see and enter the current US Dollar value of the sending amount.

      Avoid sending rounded values

      If you specify a rounded amount, like 0.0100 0000 bitcoin, then the change output will not be rounded, like 0.0896 8413 bitcoin. This makes it easy for an observer to conclude that the spending amount was the 0.01 bitcoin, and that the other output is the change back to the sender. So in order to increase your privacy, you can set a non-rounded amount, like 0.0101 6843.

      Send Amount Field

      Mining Fee

      Every transaction must specify a fee which incentives the miner to include it in a block, it is calculated by value of inputs - value of outputs. The higher the fee per virtual byte (vByte) transaction size, the more likely miners are to confirm this transaction. Wasabi uses Bitcoin Core's smart fee algorithm to estimate the time it will take to confirm at the given fee level. You can change the fee by moving the slider, or by manually setting the transaction fee rate.

      Wasabi Wallet Fee Slider

      In some cases, there is very little demand for block space, and then Wasabi will set the minimum fee of 1 sat/vByte.

      High-priority transaction fees

      If you have a transaction that is high-priority and you really want it to be confirmed ASAP:

      1. Use a mempool monitoropen in new window (available Tor onion websiteopen in new window) to see what fees are likely to get a transaction to be confirmed in the next block.
      2. Select a fee that is well above the current highest fee (perhaps double or triple it) if it is very important to you that the transaction is confirmed soon.

      For a deeper dive into the fee estimation process, this articleopen in new window is worth reading.

      Privacy Suggestions

      Since Wasabi version 2.0.4open in new window the Preview Transaction dialog contains privacy suggestions. The privacy suggestions help the user to improve their transaction. They are displayed when hovering over the triangle or shield in the top right corner. The suggestions are based on the current coin selection for this transaction. For example, the suggestions will warn the user when the transaction contains non-private coins.

      There are warnings for:

      • Interlinking labels
      • Using non-private coins
      • Using semi-private coins
      • Creating change
      • Consolidating 10 coins or more
      • Using unconfirmed coins
      • Using coinjoining coins

      There are clickable suggestions to:

      • Manage labels (when interlinking labels)
      • Only use private coins
      • Not use non-private coins (only use private and semi-private)
      • Avoid change

      The suggestion to only use semi-private or private coins is only shown if the amount difference is less than or equal to 25%.

      TIP

      Each suggestion has a tooltip. Hover over the suggestion to see more information.

      Password

      In order to spend a coin, the transaction must be signed by the private key corresponding to that coin. Wasabi stores a secret on the computer, encrypted with the password that you specified during the wallet generation. To spend a coin you need to type in the password, which decrypts the encrypted secret, and then derive the child private key that signs the transaction. Afterwards, the password is wiped from memory.

      Broadcast

      Once the transaction is signed, Wasabi will connect to a random Bitcoin P2P node over Tor and provide this transaction, then it will immediately disconnect. This first node will gossip the transaction throughout the network, then miners can include it in a block.

      If for some reason the first broadcast fails, then if you have Wasabi connected to your own Bitcoin full node this node will broadcast the transaction to the network. If this also fails, then the transaction is sent to the backend coordinator with a new Tor identity, who then broadcasts the transaction to the network.

      Speed Up or Cancel Transaction

      Pending (unconfirmed) Bitcoin transactions can be replaced by sending a new transaction that pays a higher fee rate using the same (or some) coins/UTXOs. This can be used to speed up or cancel a transaction. The miners are incentivized to mine the transaction with the higher fee rate, as this will earn them more money. If the new higher fee rate paying transaction is confirmed, the old transaction can be considered "replaced".

      Since Wasabi version 2.0.4open in new window it is possible to easily speed up or cancel a pending transaction. Speeding up and cancelling are similar to each other, the main difference being that a Cancel Transaction will send the coins to a new address owned by the user/wallet (this is all done automatically). The transaction is then "cancelled" because the bitcoin (minus the fees) is returned to the user's wallet.

      Speeding up or cancelling a transaction costs additional fees, because a new bitcoin transaction with a higher fee rate (than the previous transaction) has to be sent.

      Wasabi first tries to utilize RBF, if that's not possible it tries to do CPFP.

      To Speed Up or Cancel a Transaction, right-click on the pending transaction in the history.

      History Right Click

      Click one of the two options and then confirm that you want to pay the additional fee for this action. After which the succesfully speed up/cancelled dialog is displayed.

      In the history, the transaction will now have a rocket (speeded up) or a cross (cancelled) icon. The transaction is still pending, but it should be confirmed sooner than the initial transaction.

      How to speed up Bitcoin transactionopen in new window

      - + diff --git a/using-wasabi/StartupParameters.html b/using-wasabi/StartupParameters.html index a3fcb751e0..bc6b1cdc37 100644 --- a/using-wasabi/StartupParameters.html +++ b/using-wasabi/StartupParameters.html @@ -27,11 +27,11 @@ Starting Wasabi with parameters | Wasabi Docs - - + +

      Starting Wasabi with parameters

      Available commands

      It is possible to start Wasabi with specific parameters. The parameters override the configurations in the configuration file.

      When entering the commands on the command line, they are capital letter insensitive.

      The parameters work for both the GUI and the Daemon.

      Help about the options is available when using the command line by adding --help to the executable: wassabeed --help or dotnet run -- --help when building from source.

      Config file configurations

      All configuration options available via the Config.json file are also available as command line arguments:

      Config FileCommand LineEnvironment variable
      ""Network": "TestNet"--network=testnetWASABI-NETWORK=testnet
      "MainNetBackendUri": "https://api.wasabiwallet.io/"--mainnetbackenduri="https://api.wasabiwallet.io/"WASABI-MAINNETBACKENDURI="https://api.wasabiwallet.io/"
      "TestNetClearnetBackendUri": "https://api.wasabiwallet.co/"--testnetbackenduri="https://api.wasabiwallet.co/"WASABI-TESTNETBACKENDURI="https://api.wasabiwallet.co/"
      "RegTestBackendUri": "http://localhost:37127/"--regtestbackenduri="http://localhost:37127/"WASABI-REGTESTBACKENDURI="http://localhost:37127/"
      ""UseTor": ""true"--usetor=trueWASABI-USETOR=true
      "TerminateTorOnExit": ""false"--terminatetoronexit=falseWASABI-TERMINATETORONEXIT=false
      "DownloadNewVersion": true--downloadnewversion=trueWASABI-DOWNLOADNEWVERSION=true
      "StartLocalBitcoinCoreOnStartup": false--startlocalbitcoincoreonstartup=falseWASABI-STARTLOCALBITCOINCOREONSTARTUP=false
      "StopLocalBitcoinCoreOnShutdown": true--stoplocalbitcoincoreonshutdown=trueWASABI-STOPLOCALBITCOINCOREONSHUTDOWN=true
      "LocalBitcoinCoreDataDir": "/home/UserName/.bitcoin"--localbitcoincoredatadir="/home/UserName/.bitcoin"WASABI-LOCALBITCOINCOREDATADIR="/home/UserName/.bitcoin"
      "MainNetBitcoinP2pEndPoint": "127.0.0.1:8333"--mainnetbitcoinp2pendpoint="127.0.0.1:8333"WASABI-MAINNETBITCOINP2PENDPOINT="127.0.0.1:8333"
      "TestNetBitcoinP2pEndPoint": "127.0.0.1:18333"--testnetbitcoinp2pendpoint="127.0.0.1:18333"WASABI-TESTNETBITCOINP2PENDPOINT="127.0.0.1:18333"
      "RegTestBitcoinP2pEndPoint": "127.0.0.1:18444"--regtestbitcoinp2pendpoint="127.0.0.1:18444"WASABI-REGTESTBITCOINP2PENDPOINT="127.0.0.1:18444"
      "JsonRpcServerEnabled": "true"--jsonrpcserverenabled=trueWASABI-JSONRPCSERVERENABLED=true
      "JsonRpcUser": ""--jsonrpcuser=""WASABI-JSONRPCUSER=""
      "JsonRpcPassword": ""--jsonrpcpassword=""WASABI-JSONRPCPASSWORD=""
      "JsonRpcServerPrefixes":["http://127.0.0.1:37128/", "http://localhost:37128/"]--jsonrpcserverprefixes=["http://127.0.0.1:37128/", "http://localhost:37128/"]WASABI-JSONRPCSERVERPREFIXES=["http://127.0.0.1:37128/", "http://localhost:37128/"]
      "DustThreshold": "0.00005"--dustthreshold=0.00005WASABI-DUSTTHRESHOLD=0.00005
      "EnableGpu": true--enablegpu=trueWASABI-ENABLEGPU=true
      "CoordinatorIdentifier": "CoinJoinCoordinatorIdentifier"--coordinatoridentifier="coinjoincoordinatoridentifier"WASABI-COORDINATORIDENTIFIER="coinjoincoordinatoridentifier"

      Non-Config file configurations

      There are a few special switches that are not present in the Config.json file and are only available using the command line:

      SwitchCommand LineEnvironment variable
      Ignore P2P transactions--blockonly=trueWASABI-BLOCKONLY=true
      The level of detail used during logging--loglevel=traceWASABI-LOGLEVEL=trace
      The path to the directory used during runtime--datadir="$HOME/temp/wasabi-1"WASABI-DATADIR="$HOME/temp/wasabi-1"
      Open wallet "WalletName"--wallet=WalletNameWASABI--WALLET=WalletName
      Expose the RPC as onion service--rpconionenabled=trueWASABI-RPCONIONENABLED=true
      Tor will listen to this SOCKS5 port--torsocksport=35000WASABI-TORSOCKSPORT=35000
      Tor will listen to this control port--torcontrolport=35001WASABI-TORCONTROLPORT=35001
      - + diff --git a/using-wasabi/Testnet.html b/using-wasabi/Testnet.html index 0a8ebdb246..210a02a8f8 100644 --- a/using-wasabi/Testnet.html +++ b/using-wasabi/Testnet.html @@ -27,11 +27,11 @@ Testnet | Wasabi Docs - - + +

      Testnet

      Bitcoin testnet

      The Bitcoin testnet is a network that behaves almost exactly the same as the Bitcoin mainnet. The major difference is that the bitcoin on the testnet do not have any economical value, they should not be used to buy or sell goods and services. This makes the network very useful for testing software and features, because there is no risk of losing precious "real" bitcoin from the main network.

      Don't loose your bitcoin

      When testing cutting edge software like Wasabi, use testnet to ensure that your mistakes don't cost you money!

      Activating testnet in Wasabi

      First, open your Wasabi Wallet and click the Settings button in the bottom left corner.

      Settings button

      Select the Bitcoin tab, click on the Network dropdown and select TestNet.

      Settings Network Dropdown

      Restart Wasabi to activate the change. After the restart, you should see the TestNet indicator in the top right corner of the wallet.

      Bitcoin testnet network activated in Wasabi Wallet

      When Wasabi is started in testnet, it will fetch testnet BIP 158 block filtersopen in new window from the coordinator. For the first start, this may take a couple of minutes.

      After the testing, set the settings back to mainnet, and close Wasabi. It will load on mainnet the next time you start it.

      TIP

      Alternatively, you can edit the Config.json file in your Wasabi data folder. In the second line you can modify the value of "Network":, to "Main", "TestNet", or "RegTest". The changes will apply on the next launch of Wasabi.

      Loading a wallet

      Wasabi differentiates between Mainnet and TestNet wallets. Meaning that a TestNet wallet will not show up when the Main network is active, and vice versa. You have to create a new wallet when you activate TestNet for the first time.

      Receiving testnet bitcoin

      You can generate a receive address the same way as on mainnet, by labeling the known by entities in the Receive dialog. Notice that testnet SegWit addresses start with tb1q..., and not with bc1q... as mainnet addresses.

      Because testnet bitcoin don't have economical value, they are gifted by different sources. There are faucetsopen in new window like this oneopen in new window or bitcoinfaucet.uo1.netopen in new window that give a certain amount of testnet bitcoin per time period. You may also ask other developers if they have a couple of spare testnet coins available.

      Coinjoin on testnet

      CoinJoin on testnet is as easy as on mainnet. Usually there are other testers doing a coinjoin, but if you are the only one at the moment, then load two wallets and start coinjoining in both of them.

      - + diff --git a/using-wasabi/WalletGeneration.html b/using-wasabi/WalletGeneration.html index eff5d73da7..6a54959c43 100644 --- a/using-wasabi/WalletGeneration.html +++ b/using-wasabi/WalletGeneration.html @@ -27,8 +27,8 @@ Wallet Generation | Wasabi Docs - - + +

      Wallet Generation

      Introduction

      With Wasabi you can generate an unlimited number of Bitcoin wallets very quickly, without any cost, and without asking anyone for permission. Each wallet has separate private and public keys in a unique backup, and they are not at all linked to the other wallets generated on the same computer. So, with several wallets, you can conveniently manage your bitcoin for different use cases without worrying about revealing that you control them.

      Generating the wallet step-by-step

      1. Launch Wasabi Wallet. The very first time you run the software the Add Wallet dialog will be open automatically, but you can also access it by clicking on Add Wallet in the NavBar or Searchbar.

      2. Click Create a new wallet to generate a new wallet.

      Add a Bitcoin wallet with Wasabi

      1. Give the wallet a name. This name is not shared with anyone, it is only stored locally on your computer. (If there are no wallets then this step is skipped and the new wallet will automatically be named Wallet) Click Continue.

      Add Wallet Wallet Name

      1. Write down the 12 recovery words (mnemonic seed phrase) in the correct order and store them in a safe place. You have to use this seed phrase together with your passphrase to recover your wallet (using Wasabi or another BIP 39open in new window compliant wallet).

        Back up your recovery words!

        Without the recovery words (Seed phrase) AND the passphrase, you cannot recover your wallet. So, triple-check that you have a proper backup! Make sure the backup of your recovery words is stored separately from the passphrase backup.

      Wasabi Wallet recovery words

      1. You must confirm the Recovery Words by clicking on the right word in the right order, as a check to make sure that your Recovery Words are backed up. So, confirm the Recovery Words, and click Continue.

      Wasabi Wallet confirm recovery words

      1. Write a long and random passphrase (password) and back it up. It encrypts your secrets, and you will need it every time you want to open the wallet, spend bitcoin from this wallet or recover your wallet.

        If you are uncertain about how to create a secure passphrase, refer to Password Best Practices for helpful information.

        Back up your password!

        Without the passphrase, you cannot spend your bitcoin or recover your wallet, even if you have the recovery words (Seed phrase). So, triple-check that you have a proper backup!

      2. Confirm the password and click the Continue button.

      Wasabi Wallet Add Password

      1. Select the coinjoin strategy for this wallet and click Continue.

      Add Wallet Coinjoin Strategy

      1. The wallet is succesfully added and will automatically be opened.

      Wallet Successfully Added

      Important info about your wallet password

      Wasabi integrates BIP 38: Password-Protected Private Keyopen in new window, which means that the secrets needed to spend the bitcoin are encrypted on the computer. If someone has compromised your operating system and hardware and he only has the encrypted secrets, then no bitcoin can be spent by him. You need both the encrypted secrets and the password (passphrase) in order to enable the private key which can sign a spending transaction. This means that the password is your last line of defense against anyone who tries to steal your bitcoin.

      How are the secrets created

      Wasabi uses BIP 38: Password-Protected Private Keyopen in new window

                            +--------------+
      @@ -73,6 +73,6 @@
                         +--------------------+
       
       
      - + diff --git a/using-wasabi/WalletLoad.html b/using-wasabi/WalletLoad.html index c6be18f0cb..4176e380de 100644 --- a/using-wasabi/WalletLoad.html +++ b/using-wasabi/WalletLoad.html @@ -27,11 +27,11 @@ Wallet Load | Wasabi Docs - - + +

      Wallet Load

      Loading wallet step-by-step

      To load a wallet and start the synchonization process, you need to open your wallet by typing in the password. The first time synchronization of your wallet might take some time depending on the size of its history.

      Wallet list

      On the left side of Wasabi Wallet is the Wallet list, where you see an alphabetically sorted list of all the previously generated wallets.

      Click the wallet you want to view, type in the password and press Open.

      Type your password to open the wallet

      Synchronization

      Filter download

      As soon as you start Wasabi, it connects to the backend server with a new Tor identity and requests the BIP 158 block filtersopen in new window. At the first start, this can take a while because all filters need to be downloaded, but for the subsequent starts, this is faster as only the most recent filters are requested.

      Wallet is synchronizing itself with the Bitcoin network

      Filter scanning

      When you load a wallet, it checks if the generated addresses within the gap limit hit against a block filter. Most filters do not hit, and then the wallet is certain that this block does not contain a transaction of yours so it will not download it. If a transaction of yours is in a block, then the corresponding filter will always be hit, and the wallet will know this is a relevant block for you. There can be a small chance for a false positive where the filter matches, but the block actually does not contain a transaction.

      Block download

      When a block filter hits, either a true match or a false positive, then this block is important for you, so the wallet will download it. If you have a Bitcoin full node connected, then it will fetch the verified block locally. If not, then Wasabi will connect to a random Bitcoin P2P node with a new Tor identity, request only this block for download, and then disconnect. In this step, your Wasabi behaves like any other full node, and cannot be differentiated.

      TurboSync

      Since Wasabi version 2.0.4open in new window a new feature is added called TurboSync. TurboSync leads to a significant reduction of wallet loading time, especially for a big wallet.

      During a coinjoin, a new address (key) has to be generated for each output. As a result, wallets that use the coinjoin service a lot have a quickly growing set of generated addresses. This is a problem for wallet synchronization: each address has to be tested against each filter, with a small probability of matching as false-positive for every address. As a result, wallets with many derived addresses will have to download many false-positive blocks, making the synchronization more time consuming.

      It leverages a simple heuristic: addresses used as coinjoin outputs or as change (internal keys) should only be used once. In other terms, once an internal address has been used to receive a coin and then this coin was used as input in a new transaction (the coin has been spent), the address should never be used again, and there is no need to test it against the remaining filters.

      Wallets coinjoining a lot will benefit the most from this feature, as the vast majority of their addresses will be skipped, reducing the number of blocks to download because of false-positive matches.

      Once the wallet is opened, the skipped addresses will be tested in the background, in the case that some funds have been received on those addresses. Users in that edge case would see their balance update automatically after some time. Once done the message Wallet is fully synchronized. is written to the logs file to indicate that the verification process has finished.

      You can disable it!

      TurboSync feature shouldn't cause any problem, but you might want to disable it to debug potential issues with the synchronization of your wallet. In that case, go to your wallet file (search for Wallet Folder using Wasabi's searchbar then open the file corresponding to your wallet) and set UseTurboSync to false.

      - + diff --git a/using-wasabi/WalletRecovery.html b/using-wasabi/WalletRecovery.html index e2b44dd103..c550cd1cbd 100644 --- a/using-wasabi/WalletRecovery.html +++ b/using-wasabi/WalletRecovery.html @@ -27,11 +27,11 @@ Recover a Wallet | Wasabi Docs - - + +

      Recover a Wallet

      There are two different ways that you can recover an already used wallet in Wasabi.

      Mnemonic Recovery Words and Password

      Wasabi uses the BIP 39open in new window mnemonic code for generating BIP 32open in new window hierarchical deterministic wallets. Both your password and the generated 12 mnemonic recovery words are the necessary secrets to recover your wallet. The recovery words are spell checked based on the official wordlistopen in new window, with the right word shown below the text box.

      To recover a wallet:

      1. Click on Add Wallet at the bottom left corner of the main view.

      Wasabi Wallet Add Wallet

      1. Click on Recover a wallet.

      Wasabi Wallet Add Wallet

      1. Give the wallet a name for future recognition of the wallet.

      Wasabi Wallet Name Wallet

      1. Type in the Recovery Words in the correct order and click Continue.

      Wasabi Wallet Recover Wallet

      1. Type in the Password.

      Add Wallet Add Password

      Now Wasabi will recover your wallet.

      With this, only the private keys are imported, but not the labels of your addresses.

      DANGER

      At recovery, Wasabi is unable to check if your password is correct or not. If you type a wrong password a completely different wallet will be recovered.

      You can also use the Advanced Recovery Options to specify the gap limit. The gap limit is about how far Wasabi will check the HD wallet structure for consecutive addresses that have no coins, in some cases, you may want to increase this limit.

      Wasabi Wallet Recovery Advanced

      TIP

      With this method, you can recover a wallet that was generated with any BIP39 compatible software, not just a Wasabi generated wallet.

      Back up Wallet File and Password

      Wasabi Wallet creates a backup of your wallet file inside WalletBackups in your Wasabi data folder. If you have done a backup of this file, then you can import it at Add Wallet, by clicking on Import a wallet.

      Alternitavely: copy the wallet file to the Wallets folder, and upon the next restart of Wasabi, it will show this wallet in the NavBar, from there you can open it as usual.

      Using this method will also backup your address labels and cluster history.

      WARNING

      Make sure to back up your password separately because it is necessary to spend your bitcoin.

      - + diff --git a/using-wasabi/WasabiSetupVM.html b/using-wasabi/WasabiSetupVM.html index 3b8d39c067..db90d0e83b 100644 --- a/using-wasabi/WasabiSetupVM.html +++ b/using-wasabi/WasabiSetupVM.html @@ -27,8 +27,8 @@ Wasabi Setup in Virtual Machines | Wasabi Docs - - + +

      Wasabi Setup in Virtual Machines

      Benefits of Virtual Machines

      Virtualization allows you to create and run as many virtual machines (VMs) on a single computer at one time as desired. The only constraints are the amount of RAM and hard disk space available on the host computer.

      Each VM is isolated from the host machine. Therefore, such things as corrupted files, configuration errors, malware, etc., encountered during the use of a VM do not affect the host computer.

      If you are a developer, using virtual machines gives you several powerful features. You can easily:

      • Create snapshots of a VM's state at any time. These snapshots can be restored later if a problem or undesired condition arises in the current state of the VM.

      • Set up a template VM with a desired development environment or configuration, and then quickly create lightweight, disposable clones of the template for specific tests.

      • Develop and/or test applications in Windows, Linux, and macOS at the same time, on the same computer. You can link them together in a customizable internal network if desired.

      For developers, the use of virtual machines offers some of the basic version control features of git but applied to operating systems rather than files or projects.

      Qubes

      Qubesopen in new window is a free and open-source security-oriented operating system meant for single-user desktop computing. Qubes OS leverages xen-based virtualization to allow for the creation and management of isolated virtual machines (VMs) called qubes. This is valuable for users of high security software like Wasabi Wallet, and especially useful for testers of cutting edge developer branches. There is a separation of the virtual machines running Wasabi on testnet, and those running on mainnet with valuable private keys. If a reviewer compiles a malicious developer branch, then his mainnet private keys are secure in a different qube.

      This is a step-by-step guide on how to properly compile Wasabi Wallet from source in independent qubes. For tutorials on how to downloadopen in new window and installopen in new window Qubes, please see their exhaustive documentation.

      Generate Template VM

      The dependencies to compile Wasabi from source will be downloaded and installed in a new template VM, which is generated by cloning the Debian template from the dom0 terminal.

      [user@dom0 ~]$ qvm-clone debian-12-xfce template-wasabi
      @@ -59,6 +59,6 @@
       your@vm:~$ git checkout <development branch>
       

      Pull the latest commits.

      your@vm:~$ git pull
       

      If you are comfortable with Gitopen in new window, you can now have several versions of Wasabi running for testing purposes, at the same time, on the same computer.

      Install Latest Package

      Alternatively, you can also install the package in a new VM. This is a stable version suitable to use on mainnet and is separated from the development VM. There are no additional dependencies required to run this version.

      Download, verify and install the latest Wasabi-2.0.7.1 package in your VM, then start Wasabi.

      Have fun, and please consider contributing to the Wasabi project!

      - + diff --git a/using-wasabi/index.html b/using-wasabi/index.html index 74dab75726..9409e0125c 100644 --- a/using-wasabi/index.html +++ b/using-wasabi/index.html @@ -27,11 +27,11 @@ Using Wasabi | Wasabi Docs - - + +
      - + diff --git a/why-wasabi/AddressReuse.html b/why-wasabi/AddressReuse.html index 39c8e090e2..65c0f83df1 100644 --- a/why-wasabi/AddressReuse.html +++ b/why-wasabi/AddressReuse.html @@ -27,11 +27,11 @@ Address Reuse | Wasabi Docs - - + +

      Address Reuse

      The first rule of Bitcoin privacy:

      Never reuse addresses!

      The second rule of Bitcoin privacy:

      NEVER reuse addresses!!


      Problem

      Easy wallet clustering

      If an address is used more than once, it means that the same private key can spend all its coins. It is very easy to find all the UTXOs of an address, and thus to find out how many bitcoin the private key holds.

      Further, in a transaction where one output has a reused address, then it is very likely that this output is the payment destination, and not the change. Most wallets automatically generate new change addresses for every transaction, but payment addresses are selected manually by the user.

      Read more about the privacy concerns of address reuse in the separate entryopen in new window and the privacy chapteropen in new window of the Bitcoin wiki.

      There are different types of address reuse:

      Publicly advertised addresses (donations)

      Here, a person publishes a single address to a public forum, like in the bio of a social media network or on a website, and anyone can send bitcoin to this address.

      Dusting

      With a forced address reuse attackopen in new window, an attacker sends a small amount of bitcoin to an already existing address. The attacker hopes that this dust coin is consolidated with another coin, thus linking the two in a cluster.

      Intentionally malicious

      Since Wasabi is libre and open-source, anyone can modify a fork of Wasabi to make sure the same two addresses are recycled in every CoinJoin registration. This is someone intentionally deanonymizing himself, and he might have quite dubious motives.

      Wasabi's Solution

      Remove used address from GUI

      Wasabi encourages the user to not reuse addresses. You always get a new Bitcoin address whenever you generate one. Previously generated addresses, which haven't received bitcoin yet, are displayed at Addresses Awaiting Payment. An address is automatically removed from the Addresses Awaiting Payment list once that address receives funds.

      To protect against forced address reuse attack (Dusting), Wasabi has a modifiable dust limit, where the wallet does not show coins below a certain threshold value.

      - + diff --git a/why-wasabi/Coins.html b/why-wasabi/Coins.html index 6abe417258..a066373ccf 100644 --- a/why-wasabi/Coins.html +++ b/why-wasabi/Coins.html @@ -27,8 +27,8 @@ Coins | Wasabi Docs - - + +

      Coins

      Bitcoin has an accounting model of unspent transaction output [UTXO]open in new window. A transaction has inputs: the coins that are being spent, and outputs: the corresponding newly created coins (unspent). The input of a transaction has to be an unspent output of a previous transaction. Each UTXO is the tip of the chain of links between inputs and outputs, all the way back to a coinbase transactionopen in new window that pays the miner.


      Problem

      UTXOs are not fungible

      Each UTXO is a unique snowflake with a public transaction history. For example, when Alice sends a coin to Bob, then Bob does not just have any random UTXO, but he has specifically the coin that Alice has sent him. When Bob sends this coin to Charlie, then Charlie can check the history of the coin and see the transaction from Alice to Bob. But due to the pseudonymity of Bitcoin, he does not necessarily find out that Alice is involved.

      Further, when Alice has one non-private coin and one private coin, and she selects both of them as the inputs of a transaction, the linking of these two coins strongly suggests that the coin that was private also belongs to Alice. This means that coin consolidation can lead to an overall decrease in privacy, especially when using an automatic coin selection algorithm.

      Wasabi's Solution

      Manual coin labeling and selection

      Using Wasabi it is mandatory to label every receiving and destination address. This helps the user to know where their coins came from so that they can judge whether there are privacy concerns when sending a specific coin to a specific receiver. The default Send workflow uses the auto coin selection algorithm, which is based on the labeling system.

      Read more here.

      Change avoidance suggestion

      When sending bitcoin, the transaction might contain change (back to the sender). This can have privacy downsides as explained here. When sending in Wasabi the user will be shown with an option to avoid change by slightly increasing or decreasing the send amount in order to avoid change (if possible). There is a shield icon shown at the Preview Transaction screen at the top right corner which displays the options when hovering over with the cursor.

      Heuristics identifying change

      One prime goal of transaction surveillance companies is to identify the change coin of a Bitcoin transaction, as this is vital information for building a cluster of coins belonging to one entity. There are several heuristics, practical assumptions which are not guaranteed to be accurate or optimal, that are used to deanonymize users:

      Address reuse

      When several coins have the same address, then they are owned by the same entity. Thus if a transaction has a reused address in the output, it is very likely to be the payment amount from one entity to another. Thus the other output of this transaction is likely to be the change of the entity providing the inputs of the transaction.

      Remember

      Never reuse addresses!

      Wallet fingerprinting

      Different software wallets have different methods of creating Bitcoin transactions. So if it is known that a transaction was created by a specific wallet, then it can be checked how this wallet handles change.

      Wasabi tries to build the most common form of transaction structure, thus reducing the likelihood of identifying any given transaction as being from Wasabi. However, Wasabi CoinJoins are very easily fingerprinted, and any coin associated is clearly managed with Wasabi Wallet.

      Round numbers

      When making a payment, then often the destination address receives a round number of bitcoin. Because the input is usually a non-round number, the other output will also be a non-round number. This makes it clear that the non-round number output is the change back to the sender.

      A [0.1293 0112 btc]  -->  B [0.0500 0000 btc]
      @@ -48,6 +48,6 @@
       A [1.3576 1516 btc]  -->  B [1.0135 6515 btc]
                                 C [0.3440 4721 btc] (= change)
       
      - + diff --git a/why-wasabi/LegalConcern.html b/why-wasabi/LegalConcern.html index 9d5babe42c..c04725063c 100644 --- a/why-wasabi/LegalConcern.html +++ b/why-wasabi/LegalConcern.html @@ -27,11 +27,11 @@ CoinJoin Legal Concern | Wasabi Docs - - + +

      CoinJoin Legal Concern


      Using Bitcoin and other cryptocurrencies in the everyday course of businesses is becoming more and more popular. Digital money has a lot of advantages, from unstoppable transactions to relatively low fees, and quick final settlement of international payments. But all come at a price: the blockchain stores sensitive information like the amount and involved addresses of a transaction, giving away too much business-related information to the public. However, this does not necessarily need to be the case.

      Overview

      A CoinJoin transaction obfuscates the history of a given coin, making it hard to trace the coin back to the originator of the funds. The implementation of Wasabi Wallet CoinJoin allows the original user to get back his funds with an obfuscated history.

      It is often assumed that the main problem with an obfuscated transaction history is that financial regulators may have concerns about money laundering. However, this is only the first impression, if we go into the details it can become more transparent why institutions should not worry about violating AML rules and why companies could have a direct competitive advantage using CoinJoin transactions.

      With a transparent financial track record, companies paying with cryptocurrencies may find themselves in a squeezing situation, where their suppliers, clients, and competitors are aware of all of their payment steps and prices. For institutional investors, each step would be scrutinized by the market causing intentional or unintentional price manipulation.

      While the Bitcoin blockchain does not store personal information about the owners of the specific Bitcoin addresses, using metadata makes it possible to link Bitcoin addresses to certain companies and individuals. If such a link can be established, all past and future transactions can be traced.

      CoinJoin transactions

      Difference between ordinary banking and blockchain

      The ordinary banking system is closed, a very non-transparent system, where the data inside this system is hidden from outside observers. “Only” the bank and the user know the transactions made inside the system. In opposition, the blockchain is transparent and open to everyone. This means not only the “bank” (custodial service provider) but also outsider 3rd party observers are capable of tracking these transactions.

      Service providers' obligations regarding privacy

      There is no question a service provider who keeps a record of personal information needs to deal with the different privacy regulations and act according to them. In the ordinary banking system personal financial information is handled as a secret thus preserving individual privacy from third parties. Whereas in the open blockchain system this information by the nature of the technology cannot be kept secret, so there is a large risk of a privacy leak of sensitive financial information. This is obviously not intentional and even though the personal information might be protected, the financial information is nevertheless leaked due to the pseudonym nature of the system. This information has similar sensitivity as name, address, gender, etc. so it should be handled with great care.

      CoinJoin as a privacy-preserving tool

      Since the Bitcoin blockchain is transparent, transactions cannot be kept secret. Currently, one prevalent solution in Bitcoin to gain privacy is to CoinJoin the different coins to obfuscate their history. By the use of this tool, a custodial service provider can at least start to protect its users' financial privacy.

      Privacy perspective from the companies' point of view

      The essence of competitive advantages is to keep and hold business secrets. Each and every successful company has developed its own mechanism to deliver the best products and services to its customers. To reach this, they usually use a secret sauce, called the business secret to deliver the results. If anything, when a financial payment becomes fully transparent this business secret is evaporating Let’s look a bit deeper into what exactly this means for companies, who would like to use Bitcoin as the payment method, where all transactions are recorded on the blockchain.

      Suppliers

      Companies use suppliers to acquire products and services they use in their own production stages. For these products and services, of course, they pay a reasonable price. However, this price is usually negotiable, especially in B2B relationships or large scale orders. What would happen if all of a sudden, the price of raw materials for a company becomes fully public? Other competitors can now demand similar discounts, forcing industries into a vicious cycle of price reduction. As each and every price discount is negotiated on a case by case basis, considering factors as creditworthiness and timing of payment, transparent supplier prices would only cause enormous pressure on suppliers to deal with negotiations.

      Beyond the price of products, the timing of payments is also fully transparent on the blockchain. However, in certain circumstances, it is also a crucial business secret to keep the information on the sequence of invoice payments indoors. Considering cash flow implications, it can happen that one invoice is paid on time, while other invoices are still pending payment. In the case of blockchain transactions however all payments are transparent, so it can be clear for each counterparty that only a selected number of invoices has been paid even if the sufficient funds are available which can cause unnecessary tension between business partners.

      Additionally, if all historical transactions of a company are known, its creditworthiness might be considered incorrectly. It can happen that the creditworthiness is considered better than it is if the incoming funds to a specific address are extraordinarily high, but these funds are needed in other parts of the business, so the overall solvency of the business can be still negative despite the large funds. On the other hand, creditworthiness can be considered worse than it actually is, if only a handful of addresses are taken into consideration for the solvency analysis, neglecting other forms of wealth, like other Bitcoin addresses, or fiat accounts.

      Clients

      From the client’s perspective, the factors listed under suppliers are all applicable. If a client knows the revenue stream of the company, they can draw an incorrect conclusion about the actual financial situation of a company and make a decision of purchasing a product based on this assumed financial situation. If for example, there are no incoming funds for a given period, clients may stay away from purchasing products and services, solely because they might consider the company dormant or insolvent. But in reality, the seasonality of incoming funds is not disclosed for all companies, so it can be a perfectly stable business situation to receive incoming funds only in a given period of a year, while still being able to deliver service throughout the year.

      Another aspect is the possible price negotiations on the client-side. If a client finds out that another client is paying less for a service or product, they can demand similar discounts which can result in downward price pressure in the industry. This can ultimately result in companies going out of businesses if they cannot adjust to the lower price levels which are below the equilibrium prices.

      Competitors

      Everyone can agree that the pricing structure of services is a very sensitive topic and is the core of the business secret which makes a company successful. If all competitors can look at the transactions of the company, it also means they can adjust their own pricing structure to follow the successful market leaders in the industry, causing turbulence in competition. Each company has its own pricing structure which should be coming from the internal processes, know-how, and resources. Although external factors should be considered in pricing, they should not be the main driving force in pricing decisions.

      Employees

      There is now a growing number of companies that are paying their employees salaries in bitcoin due to the trustless transactions with relatively low fees, especially with international transactions.

      With transparent transaction history, employees would be aware of each other’s salaries without the company disclosing this information. Although there are some theories supporting a transparent salary structure, up to now the majority of the companies prefer to keep salaries as secret and obligate employees to keep salary and wage information confidential. Obfuscated transaction history can help companies to keep salary information confidential which can keep a relaxed atmosphere among employees with no wage pressures.

      Phishing attacks

      Disclosing financial information for a company makes them more vulnerable to phishing attacks. If the exact time and amount of payment are publicly known, attackers can use this information to build trust with the company and squeeze out other crucial business information pretending to be a trusted partner.

      Privacy perspective from the institutional investor’s point of view

      The Bitcoin market is considered fairly concentratedopen in new window in the sense that out of the millions of Bitcoin addresses, less than 1% holds 87% of bitcoins.

      Bitcoin address distribution

      Institutional investors and cryptocurrency exchanges are holding large sums of bitcoin on a blockchain where transactions are completely transparent. These so-called whales sometimes need to move large amounts of coins for any reason which can often lead to unintentional price manipulation. If a large bitcoin holding is on the move, it can always raise concern in the media regarding the future of Bitcoin, causing unnecessary price fluctuations. In the case of unintentional price manipulation, it is difficult to prove there has been no insider trading on the institutional side, which can cause loss of faith from the clients.

      Using obfuscated transaction history in large bitcoin transactions can help to keep the market stable and avoid unintentional price manipulations.

      Resolving AML conflicts

      Privacy is not just for criminals. One of the major critiques against using CoinJoin is that if the transaction history is not known for a company, it may be used as a way to launder money. From the above-listed cases, we already see that currently using fiat payments, during the normal course of businesses, companies do not disclose all financial information as that would result in a loss of business secrets. Why would they need to do this if they are just using a new method of payment, called Bitcoin? Using privacy tools to obfuscate Bitcoin transactions is completely legal and in accordance with the current legal framework.

      User privacy

      In all jurisdictions, there are different laws and acts that are made to protect customers privacy. This is not limited only to personal data but also financial data. In the EU there is GDPR, in the USA there is the Privacy Act of 1974, in Canada, there is the Privacy Act of 1985, etc. These set different rules to be kept in order to preserve individual privacy both on personal and financial levels.

      KYC/AML

      By now in mainly all jurisdictions, custodial cryptocurrency service providers (wallet, exchange, payment processor, etc.) are requested to run KYC/AML checks on users and their transactions. The KYC process and inner policies should ensure personal data protection. The accounts are assigned to these individual users, who are verified by the provider. This means the provider identifies the user just like a legacy bank would do. The different AML checks are run on deposits or withdrawals. The suspicious transactions can be linked to users based on the transactions that are initiated by them personally. KYC and AML procedures now ensure that all transactions involving fiat (like buying and selling bitcoin on exchanges for fiat currency) have a detailed background in terms of who is sending what money to whom, the identification of transactions are even more strict than in the current banking world, where two companies or individuals can send even large funds without the need to verify their source.

      Using CoinJoin as a custodial service provider

      As soon as a user deposits the funds to any of these service providers, the funds are in one large cluster. From now on the funds are possessed by the service provider and the actual user balances are only kept on internal records. At this point all KYC/AML procedures are done, funds should be considered “clean”. The funds are controlled by the service provider and different policies are set for securing these funds (hot and cold storage, multisig, etc.). The record system of the provider will show the exact value of funds belonging to the different users. This is the time when a provider could preserve its users’ privacy by applying CoinJoin on these funds. In case of a withdrawal, coinjoined UTXOs could be sent to the user. Again, this user is already KYC-ed, the provider has full knowledge about the user. In case of a law enforcement request, all data can be provided, since the deposit history of the user in question is still available. The only thing CoinJoin does, in this case, is protecting the user from third-party observers, while the service provider is still enabled to provide data for law enforcement if requested.

      Conclusion

      Companies using Bitcoin as a method of payment currently do not have sufficient privacy regarding their financial information. Outsiders can get valuable business-related information by studying the public transaction history of a company, causing economic damage in the long run. Using CoinJoin transactions can help businesses to keep their privacy while still enjoying the benefits that Bitcoin transactions can provide. Concerns from the AML perspective are not valid, as the necessary data can be provided to authorities upon investigation requests.

      - + diff --git a/why-wasabi/NetworkLevelPrivacy.html b/why-wasabi/NetworkLevelPrivacy.html index 6119643514..7deb0f9bdc 100644 --- a/why-wasabi/NetworkLevelPrivacy.html +++ b/why-wasabi/NetworkLevelPrivacy.html @@ -27,11 +27,11 @@ Network-Level Privacy | Wasabi Docs - - + +

      Network-Level Privacy - Bitcoin Core vs Wasabi Wallet

      Bitcoin is a peer-to-peer network of full nodes that define, verify, and enforce the Bitcoin consensus rules. There is a lot of communication between them and metadata can be used to de-anonymize Bitcoin users.

      Problem

      Clearnet light clients

      When the communication to the network is unencrypted over clearnet, then there is an easy correlation of the Bitcoin transactions to the IP address of the peer who sent it. The IP address can even be used to find the physical location of the user!

      A Bitcoin full node broadcasts not just the transactions of its user, but it also gossips all of the other transactions that it has received from its peers. Thus it is very difficult to find out which transactions originated from which full node. However, when a node or a wallet does not gossip all transactions, but only the transactions of its user, then it is easier to find out which node has sent those specific transactions.

      There are light wallets, which query a backend server to get information regarding specific addresses or use BIP 37open in new window bloom filtering SPV wallet protocol, which is extremely bad for privacyopen in new window. And there is Electrum, which sends your addressesopen in new window to random Electrum servers.

      DANGER

      When the user sends the extended public key or a filter of all the addresses to the central server, then the server can COMPLETELY deanonymize the users.

      Wasabi's solution

      Full node by default & block filters over Tor

      Wasabi checks if there is a local Tor instance installed, and if so, it uses this to onion-route all the traffic to and from the network. If Tor is not already installed, then it is accessed automatically from within Wasabi. This means that by default, all network communication is secured from outside snooping and the IP address is hidden.

      In order to fully verify everything, running a full node is essential. If bitcoindopen in new window is installed and run on the same computer as Wasabi, then it will automatically and by default connect to the full node. It is also possible to connect Wasabi to a remote full node on another computer by specifying the local IP address or Tor onion service in the settings. Then, Wasabi pulls the verified blocks and queries the mempool from the full node.

      Wasabi ships with Bitcoin Knots!

      Wasabi has a partial Bitcoin Knots integration. This means that it is possible (but not mandatory) to start Bitcoin Knots during the launch of Wasabi, without having to install or configure anything manually.

      However, even if no full node is installed, Wasabi has a light client mode based on BIP 158 block filtersopen in new window. The Wasabi server sends a filter of all the transactions in each block to all the users. Then, users check locally if the block contains any transactions with their addresses. If not, then the filter is stored for later reference, and no block is downloaded. However, if there is a user transaction in that block, then Wasabi connects to a random Bitcoin P2P node over Tor and asks for this entire block, not only one transaction. This block request is indistinguishable from the regular P2P gossip, and thus nobody, neither the server nor the full node, know which addresses belong to the user.

      Privacy by default!

      Wasabi has network-level privacy as good as a Bitcoin full node.

      In-depth comparison

      Furthermore, network-level privacy consists of two sub-categories.

      • Private UTXO Retrieval
      • Private Transaction Broadcasting

      Bitcoin Core

      Private UTXO retrieval

      Bitcoin Core downloads all the blocks ever created and establishes your wallet balances locally. This is as good as it gets.

      Private transaction broadcasting

      Bitcoin Core broadcasts transactions to other peers on the clearnet, unencrypted. Other peers cannot figure out which transaction originates from a specific node because Core does not only broadcast its own transactions but also propagates every other transaction that hits its mempool. However, some papers note it’s not bulletproof:

      Bitcoin transaction propagation does not hide the source of a transaction very well, especially against a “supernode” eavesdropper that forms a large number of outgoing connections to reachable nodes on the network. Dandelion: Privacy-Preserving Transaction Propagationopen in new window.

      Adversaries identified

      • Malicious Peer
      • Supernode

      Bitcoin Core + Tor

      You can use Bitcoin Core with Tor, which solves some of the above-mentioned issues. In this case, a supernode cannot track back transactions to your IP address.

      An entity that can break Tor is a universal adversary, however, most Tor attacks are not possible if exit nodes are not involved. It is reasonable to assume that this entity can break the onion routing, not Tor's encryption itself.

      Adversaries identified

      • Tor breaker

      Wasabi Wallet light node

      Private UTXO retrieval

      The backend server serves block filters to all the clients over Tor. From those filters, the clients figure out which blocks they are interested in and download them [and some false positive blocks] from peers. One block per peer, and always over a fresh Tor stream. When a block is acquired, the peer gets disconnected. Because of the end-to-end encryption of the onion network, it immediately defeats an ISP adversary and makes the already impossible job of the Sybil adversary even more impossible. The only adversary that could possibly overcome this would have to setup thousands of full nodes over Tor and also break Tor itself.

      Private transaction broadcasting

      All Wasabi traffic is tunneled through Tor. Wasabi connects only to onion nodes, so end-to-end encryption is enforced between the wallet and peers. All this without involving any exit node. Wasabi connects to each peer through a different Tor stream. A new Bitcoin peer is chosen for every transaction broadcast.

      Everything over Tor!

      Wasabi broadcast transactions to only one peer over Tor, and immediately after that the peer is disconnected.

      Adversaries identified

      • ISP
      • Tor Breaker Sybil Attacker With Thousands Of Full Nodes Over Onion

      Wasabi Wallet + full node

      TIP

      Wasabi has a partial Bitcoin Knots integration. This means that it is possible (but not mandatory) to start Bitcoin Knots during the launch of Wasabi, without having to install or configure anything manually.

      Private UTXO retrieval

      If you have a listening full node running in the background (not only Bitcoin Core, any full node) then Wasabi automatically picks it up and instead of asking peers for blocks, it asks for blocks from your own node. Using Wasabi this way results in the same privacy model as Bitcoin Core's, regarding Private UTXO Retrieval.

      Private transaction broadcasting

      Even when Wasabi is connected to your own node, it will broadcast the transaction in the above-described way: to one new peer over Tor.

      Universal Attacks

      Every time you use software that interacts with a Bitcoin network, and especially a Bitcoin node, you leave a sticky fingerprint in your traffic. It comes in the form of a small but unavoidable spike in volume every time a new block is mined and the nodes start gossiping about it. The blocks in Bitcoin are quite big, and the propagation speed is critical for consensus (greater delay means more frequent accidental forks), so such effect is predictable, and, in a sense, inherent to the Bitcoin architecture.

      Notably, the volume of block-related messages was drastically reduced since the introduction of Compact Block Relay (BIP 152open in new window. Instead of requesting whole blocks, mostly consisting of transactions already known to the node, the peer informed of a new block is only requesting the missing transactions. Yet the amount of extra communications in the seconds following a new block is still considerable. This effect may not be noticeable for a single block, but over time it gets statistically significant and may get exploited.

      As reported by Niko Kudriastev and Michael Maltsevopen in new window, it is possible to detect Bitcoin communications using nothing but traffic volume over time - a piece of information even most privacy concerned individuals are likely leaking to their law-abiding Internet Service Provider. In this case, using a VPN and running the node over Tor may not be enough to avoid being detected.

      Protection

      There are many ways to go about it, but staying completely undetected is far from trivial - traditional privacy-enhancing tools mostly focus on the packet level, which is orthogonal to the technique. Let’s break down the potential defense vectors.

      • VPN / Tor - unlikely to affect the time series shape much, and therefore for larger traffic lengths the statistical significance of block-related spikes will inevitably become overwhelming.

      • Traffic mixing - for traffic volumes that are orders of magnitude higher than Bitcoin P2P communications, mixing is likely to be very effective. That would, however, demand constant shielding of both upstream and downstream communications, and couldn't be done effectively by just running the node on a general-purpose machine - any noticeably long unshielded period may be enough for detection.

      • Being your own ISP - too spicy for most, but that should work.

      • Blockstream Satellite - the ultimate solution. Eliminates the traffic analysis threat altogether.

      Beyond active measures available now, both the privacy and the bandwidth efficiency of Bitcoin communications are actively worked on. It is entirely possible that the messaging protocol will get to the point where block propagation doesn't trigger any significant spikes in traffic volume.

      You can read more about BitSniff hereopen in new window and check the interactive demo hereopen in new window.

      Watch the videoopen in new window

      - + diff --git a/why-wasabi/TransactionGraph.html b/why-wasabi/TransactionGraph.html index 5b5ae3da55..1615cc7688 100644 --- a/why-wasabi/TransactionGraph.html +++ b/why-wasabi/TransactionGraph.html @@ -27,11 +27,11 @@ Transaction Graph | Wasabi Docs - - + +

      Transaction Graph

      Problem

      Public transaction history

      Because of the input and output model of Bitcoin, there is a chain of digital signatures all the way from the coinbase reward to the current UTXO. This transaction history can reveal sensitive information about the spending patterns of individuals. The receiver of a coin can look back into the transaction history of the sender. And the sender can see the future spending of the receiver.

      Wasabi's Solution

      WabiSabi coinjoins

      In order to obfuscate the link between inputs and outputs, Wasabi uses the WabiSabiopen in new window coinjoin protocol. The Wasabi central coordinator cannot steal and cannot spy, it simply helps many peers to build a huge transaction, with many inputs, and many outputs. The non-private inputs can be linked to their previous transaction history. However, the coinjoin outputs with an anonymity score cannot be tied to the inputs.

      This means that when sending an anonscore coin, the receiver does not know about the transaction history before the coinjoin. And when the receiver does a coinjoin himself, then the sender cannot spy on the later spending patterns. An outside observer can only guess the correct link at a rate of 1 in the anonscore, for example, 1-in-100, or 1%.

      - + diff --git a/why-wasabi/TransactionSurveillanceCompanies.html b/why-wasabi/TransactionSurveillanceCompanies.html index 6ea92e31ca..5aafd7fd38 100644 --- a/why-wasabi/TransactionSurveillanceCompanies.html +++ b/why-wasabi/TransactionSurveillanceCompanies.html @@ -27,11 +27,11 @@ Transaction Surveillance Companies | Wasabi Docs - - + +

      Transaction Surveillance Companies

      A transaction surveillance company is one that attempts to spy on bitcoin users. Their business model is usually to sell the data to any governments, corporations and individuals willing to pay for their services.

      Spying technology

      There are a number of techniques probably used by transaction surveillance companies:

      AML/KYC information

      Many bitcoin exchanges require users to undergo Anti-Money Laundering (AML) and Know-Your-Customer (KYC) checks, which requires users to reveal all kinds of invasive personal information such as their real name, residence, occupation, net worth and income. All this information is usually passed onto the exchange's partner transaction surveillance company, which keeps a database linking the victim's personal information with their bitcoin addresses and transactions.

      Blockchain analysis

      Bitcoin on-chain transactions are visible to all and so can be analyzed. Important techniques are the common-input-ownership heuristic and address reuse.

      Wallet synchronization analysis

      Bitcoin lightweight wallets often download their own history and balance by querying a third-party server. Transaction surveillance companies often try to exploit this to learn which addresses and transactions belong to certain wallets and IPs. The companies have been known to collect BIP 37open in new window filters from BIP37-enabled wallets. They almost-certainly also run many Electrum servers which can spy on any Electrum wallet that connects to them.

      Transaction broadcasting

      Surveillance companies have been known to sybil and eclipse attack the bitcoin network, and specific nodes, in order to try to find the source IP addresses of unconfirmed transactions.

      Criticisms

      Attempt to invade privacy

      The right to privacy is recognized as a human right, for instance in the US constitution, European Union regulations and the Constitution of India.

      Financial privacy is an essential criteria for the efficient operation of a free market: if you run a business, you cannot effectively set prices if your suppliers and customers can see all your transactions against your will. You cannot compete effectively if your competition is tracking your sales. Individually your informational leverage is lost in your private dealings if you don't have privacy over your accounts: if you pay your landlord in Bitcoin without enough privacy in place, your landlord will see when you've received a pay raise and can hit you up for more rent.

      Financial privacy is essential for personal safety: if thieves can see your income, holdings, and spending, they can use that information to target and exploit you. Without privacy, malicious parties have more ability to steal your identity, snatch your packages from your doorstep, or impersonate businesses you transact with. They also know exactly how much to try to scam you for.

      Financial privacy is essential for human dignity: no one wants the snotty barista at the coffee shop or their nosy neighbors commenting on their income or spending habits. No one wants their baby-crazy in-laws asking why they're buying contraception (or sex toys). Your employer has no business knowing what church you donate to. Only in a perfectly enlightened discrimination-free world where no one has undue authority over anyone else could we retain our dignity and make our lawful transactions freely without self-censorship if we don't have privacy.

      Most importantly, financial privacy isn't incompatible with things like law enforcement or transparency. You can always keep records, be ordered (or volunteer) to provide them to whomever, have judges hold against your interest when you can't produce records (as is the case today). None of this requires globally visible public records.

      Globally visible public records in finance are completely unheard-of. They are undesirable and arguably intolerable. The Bitcoin whitepaper made a promise of how we could get around the visibility of the ledger with pseudonymous addresses, but the ecosystem has broken that promise in a bunch of places and we ought to fix it. Bitcoin could have coded your name or IP address into every transaction. It didn't. The whitepaper even has a section on privacy. Sufficient privacy is an essential prerequisite for a viable digital currency.

      Attempt to destroy fungibility

      Privacy invasions can lead to damaging or destroying bitcoin fungibility. The aim of bitcoin is to be a decentralized digital currency, but if all users are eventually required to consult centralized blacklists before accepting bitcoin, then its decentralization will be destroyed.

      How is financial privacy an essential element to fungibility in Bitcoin?

      No mechanism for oversight or appeal

      There appears to be no recourse for someone affected by false positive identification of exchange-disapproved transaction history. This could result in them wrongly having their coins confiscated.

      Jurisdiction

      Transaction surveillance company market themselves as a tool for finding "bad guys", but it's unclear which jurisdiction that applies to. For example, could one day the government of China pressure those companies into marking certain coins as "bad" because they belong to users who disagree with Chinese government policy?

      Incentivized to oppose bitcoin updates

      During the deployment of segregated witness, certain transaction surveillance companies were believed to have spread misinformation about it, because the update enables Lightning Network. The companies saw it as a threat to their business, since it can enable transacting with bitcoin more privately.

      Oversold effectiveness

      Transaction surveillance companies rely on heuristics or assumptions when analyzing the blockchain. These heuristics are sometimes not true, for example, the common-input-ownership heuristic is broken by CoinJoin. Even if that heuristic is true, it still requires actually identifying the cluster, which is not always possible.

      Laws surrounding anti-money-laundering typically require businesses to make reasonable efforts to investigate the source of funds. Usually, the transaction surveillance company's customers simply want to legally protect themselves, regardless of whether the surveillance actually works. There is a lot of money in this space from governments and other authorities, who usually don't understand the underlying technology and are happy to throw money at several startups who claim to be able to accurately track everything. Whether the activities of transaction surveillance companies actually help against money laundering is an open question.

      image

      According to an excerpt from Chainalysis in their 2021 reportopen in new window, in 2019, criminal activity represented only 2.1% of all cryptocurrency transaction volume.

      Examples

      - + diff --git a/why-wasabi/WhyFinancialPrivacy.html b/why-wasabi/WhyFinancialPrivacy.html index fdcc912343..247ee431be 100644 --- a/why-wasabi/WhyFinancialPrivacy.html +++ b/why-wasabi/WhyFinancialPrivacy.html @@ -27,11 +27,11 @@ Why Financial Privacy is Especially Important | Wasabi Docs - - + +

      Why Financial Privacy is Especially Important

      The possibility to be anonymous or pseudonymous relies on you not revealing any identifying information about yourself in connection with the bitcoin addresses you use. If you post your bitcoin address on the web, then you're associating that address and any transactions with it with the name you posted under. If you posted under a handle that you haven't associated with your real identity, then you're still pseudonymous. For greater privacy, it's best to use bitcoin addresses only once.

      By Satoshi Nakamoto in How anonymous are bitcoins? - Bitcointalkopen in new window

      Gaining privacy with Wasabi Wallet for Bitcoin transactions


      Why it is important to keep your funds private

      One of the apparent contradictions of Bitcoin is the notion that your transactions can be private but have a public transaction record.

      As a financial system, Bitcoin functions completely differently from the established banking network. Bitcoin allows you to store funds yourself, without the need for a third party and therefore places the burden on you of keeping said funds secure and accessible.

      While opening an account with a traditional bank or other financial institution requires significant cost and effort, creating a Bitcoin wallet is quick and easy to do on your home computer. This speedy process makes it possible to create hundreds of separate wallets if you wish.

      Two aspects —in particular privacy and identity— function very differently with Bitcoin than in the legacy financial system.

      Pseudonyms protect your identity in Bitcoin

      A bank account, PayPal account, or credit card is always tied to a real identity, making it difficult for many people to open one. Bitcoin doesn't require any identity to be part of this network.

      Being able to use the internet anonymously or pseudonymously is the only way for many people to truly be themselves. Hundreds of millions of people around the globe are not accepted in their societies for reasons they cannot control.

      Maintaining an identity with a large following might require paid services such as blogs, logo designs, stock photos, VPNs, or translations. Without the ability to pay for these services anonymously, you would be forced to reveal your true identity in order to maintain your pseudonym situation. This clearly makes no sense and has potentially dangerous ramifications.

      How Bitcoin empowers anonymity

      Bitcoin is an important, empowering technology. Using Bitcoin protects your right to remain anonymous on the internet. It allows anonymous or pseudonymous fundraising. Groups can collectively control Bitcoin accounts and choose to either hide or reveal financial information at will.

      There are many positive reasons for a private and secure banking system like Bitcoin.

      For example, a workers' rights group could raise funds with Bitcoin. The money could be used for servers, flyers, remote helpers… and all without tying any transaction to the real identities of the volunteers.

      Likewise, a domestic abuse victim might use Bitcoin to securely stack away funds to prepare for an independent life.

      Privacy through pseudonymous accounts

      Privacy in traditional banking is guaranteed by the institutions that make up the system, such as banks, credit card companies, and governments. They (try to) ensure that your bank balance stays a secret. This puts them in a powerful position, where only they have complete oversight as to what is going on.

      In the Bitcoin ecosystem, everyone can see the history and balance of every address, but they cannot necessarily see who controls it. All addresses and transactions are recorded in Bitcoin's publicly distributed database, the blockchain. The addresses do not have names or IP addresses attached to them, so it is not always possible to know which transaction belongs to which individual.

      Threat model

      When considering privacy you need to think about exactly who you're hiding from. You must examine how a hypothetical adversary could spy on you, what kind of information is most important to you and which technology you need to use to protect your privacy. The kind of behaviour needed to protect your privacy therefore depends on your threat model.

      Newcomers to privacy often think that they can simply download some software and all their privacy concerns will be solved. This is not so. Privacy requires a change in behaviour, however slight. For example, imagine if you had a perfectly private internet where who you're communicating with and what you say are completely private. You could still use this to communicate with a social media website to write your real name, upload a selfie and talk about what you're doing right now. Anybody on the internet could view that information so your privacy would be ruined even though you were using perfectly private technology.

      For details read the talk Opsec for Hackers by grugqopen in new window. The talk is aimed mostly at political activists who need privacy from governments, but the advice generally applies to all of us.

      Most of the time plausible deniability is not good enough because lots of spying methods only need to work on a statistical level (e.g. targeted advertising).

      - + diff --git a/why-wasabi/WhyPrivacyImportant.html b/why-wasabi/WhyPrivacyImportant.html index ba5b4bcf8c..970f044238 100644 --- a/why-wasabi/WhyPrivacyImportant.html +++ b/why-wasabi/WhyPrivacyImportant.html @@ -27,11 +27,11 @@ Why Privacy is Important | Wasabi Docs - - + +

      Why Privacy is Important

      It's not that I have something to hide. It's that I have nothing to share.

      Privacy is the selective revealing of your Self to your peers. You have many thoughts in your mind which you choose to never tell anyone, and many of your actions are never witnessed by another person. The ability to keep a secret is an essential part of the human experience.

      • Why do you draw the curtains at night?
      • Why do you close the door when in the shower?
      • Why do you send your love letters only to your spouse?

      Watch the videoopen in new window

      Economic trade of goods and services is based on mutual beneficial voluntary action. But when an outside authority demands that the peers reveal the details of their exchange, then they must beg for permission of every act. Yet individuals can use the tools of self-defense at their disposal to regain their sovereignty.

      Without financial privacy, there is no human dignity.

      Privacy? I don't have anything to hide

      Over the last 16 months, as I've debated this issue around the world, every single time somebody has said to me, "I don't really worry about invasions of privacy because I don't have anything to hide." I always say the same thing to them. I get out a pen, I write down my email address. I say, "Here's my email address. What I want you to do when you get home is email me the passwords to all of your email accounts, not just the nice, respectable work one in your name, but all of them, because I want to be able to just troll through what it is you're doing online, read what I want to read and publish whatever I find interesting. After all, if you're not a bad person, if you're doing nothing wrong, you should have nothing to hide." Not a single person has taken me up on that offer. - Glenn Greenwald in Why privacy matters - TED Talkopen in new window

      The primary reason for window curtains in our house, is to stop people from being able to see in. The reason we don’t want them to see in is because we consider much of what we do inside our homes to be private. Whether that be having dinner at the table, watching a movie with your kids, or even engaging in intimate or sexual acts with your partner. None of these things are illegal by any means but even knowing this, we still keep the curtains and blinds on our windows. We clearly have this strong desire for privacy when it comes to our personal life and the public. - Joshua in The Crypto Paperopen in new window

      Read also

      Quotes

      Arguing that you don't care about the right to privacy because you have nothing to hide is no different than saying you don't care about free speech because you have nothing to say. - Edward Snowden on Redditopen in new window

      The NSA has built an infrastructure that allows it to intercept almost everything. With this capability, the vast majority of human communications are automatically ingested without targeting. If I wanted to see your emails or your wife's phone, all I have to do is use intercepts. I can get your emails, passwords, phone records, credit cards. I don't want to live in a society that does these sort of things... I do not want to live in a world where everything I do and say is recorded. That is not something I am willing to support or live under. - Edward Snowden in The Guardianopen in new window

      We all need places where we can go to explore without the judgmental eyes of other people being cast upon us, only in a realm where we're not being watched can we really test the limits of who we want to be. It's really in the private realm where dissent, creativity and personal exploration lie. - Glenn Greenwald in Huffington Postopen in new window

      - + diff --git a/why-wasabi/index.html b/why-wasabi/index.html index f99ed7ef2d..74e5fb389f 100644 --- a/why-wasabi/index.html +++ b/why-wasabi/index.html @@ -27,11 +27,11 @@ Why Wasabi | Wasabi Docs - - + + - +