# Railway Wallet

Help and FAQs for common use cases

Welcome to the User Guide for Railway Wallet!

The following articles will help you **set up** **a privacy-centric DeFi Wallet** using Railway Wallet, and send encrypted blockchain transactions using the [RAILGUN Privacy System](https://docs.railgun.org).

To get started, head to [Creating & Importing Wallets](/setup/create-wallet), or send your first [Private Transfer](/transactions/private-transfers).

### Recommended for first-time users

1. [Create a New Wallet](/setup/create-wallet)
2. [Shield tokens](/transactions/shield-unshield) into your 0zk address (privacy-protected address)
3. [Unshield](/transactions/shield-unshield) ETH/BNB/MATIC to a second, fresh 0x address for [Self-Broadcasting](/transactions/self-signing)
4. Maintain a Private Balance and enjoy Private DeFi!

{% embed url="<https://youtu.be/Za1v1DvC4F4>" %}

### Contents

1. **Basic Setup**
   * [Create a New Wallet](/setup/create-wallet)
   * [Import an Existing Wallet](/setup/import-wallet)
   * [View-Only Wallets](/setup/view-only-wallets)
   * [Setting Custom RPCs](/setup/setting-custom-rpcs)
2. **Private Transactions**
   * [Shielding & Unshielding](/transactions/shield-unshield)
   * [Private Sends](/transactions/private-transfers)
   * [Public Broadcasting](/transactions/public-broadcasting)
   * [Self-Broadcasting](/transactions/self-signing)
3. **Integrated dApps**
   * [Swaps](/integrated-dapps/swaps)
   * [Private Yield Farming](/integrated-dapps/private-yield-farming)
   * [Ethereum Name Service (ENS)](/integrated-dapps/using-an-ethereum-name-service-ens-domain)
   * [Unstoppable Domains](/integrated-dapps/unstoppable-domains)
4. **Customize Wallet**
   * [Setting Network Fees](/customize/network-fees)
5. **Private Proofs of Innocence**
   * [Private Proofs of Innocence](/private-proofs-of-innocence)

### Installation

[Railway Wallet for iOS](https://railway.xyz/ios)

[Railway Wallet for Android](https://railway.xyz/android)

[Railway Wallet for Desktop (Mac, Windows, Linux)](https://railway.xyz/desktop)


# Wallet Setup


# Create a New Wallet

Start your Railway Wallet journey with a fresh 0x and 0zk address

When first loading the Railway Wallet application, you will be prompted to **Create** or **Import** **a wallet**.

## Creating a new wallet

1. **Click** **"Create wallet"**
2. **Create** or **enter a password** *(you will need to enter this password to send every transaction so don't make it too hard to type or remember).*&#x20;

<div data-full-width="true"><figure><img src="/files/WUw5BmQlSlnPUhTX7iGy" alt="" width="368"><figcaption></figcaption></figure></div>

3. Next, **name** **your wallet** and click "Submit". Wallet names can be up to 18 characters.

<figure><img src="/files/mnCktkp428DJ5onQAbHC" alt=""><figcaption></figcaption></figure>

4. By default your newly generated seed phrase is hidden. To **view your seed phrase** click "Click to show". Once you have **securely recorded** *(written down on pen and paper)* your recovery phrase, **click** "Next"

You do NOT need to reveal your seed phrase to copy it.

**WARNING:** *Ensure you have your seed phrase securely stored. Cryptoassets are entirely self-custodial and if you misplace or lose your seed phrase you will lose control of your assets.*

*If this happens, there are no account recovery options. Store your seed phrase offline and securely.*

<figure><img src="/files/0sLKN0idhTosu8HxJbEh" alt=""><figcaption></figcaption></figure>

5. Click "Finish" to **complete** adding your new wallet.

## Success

You've now generated your new wallet and private address! Each wallet has a public (0x) and private (0zk) component, both addresses are derived from the same private key.

To **switch** **between Public or Private balances**, click the button in the upper right.

Any valid 12 or 24-word recovery phrase can be imported and does NOT need to have been generated in Railway Wallet. For example, **a recovery phrase created in MetaMask can be easily imported into Railway Wallet** and vice versa.

### Further Info

*Wallet data is encrypted and securely stored locally in a secure enclave. When using the web app, clearing your browser data will delete your encrypted private key and you will have to re-enter your private key.*

*Railway supports both 12 and 24-word mnemonic recovery phrases (seed phrases). Recovery phrases generated in Railway have 12 words.*


# Import an Existing Wallet

Import a wallet from Metamask or other wallet provider

## Importing an existing wallet

1. **Click your wallet name in the upper right**. For this example, it is named ***"My Wallet"***.

<figure><img src="/files/w3adHcDzn6E9y0tumumc" alt="" width="375"><figcaption></figcaption></figure>

2. Next, **click "Open wallet settings"**. This page also gives you easy access to all loaded wallets.

<figure><img src="/files/Y8pKxoZo3eU81cESYBmQ" alt=""><figcaption></figcaption></figure>

3. **Click "Add Wallet +"** to bring up options. Next, **click "Import using seed phrase" and enter/set your password**.

<figure><img src="/files/Trk8WkjCIGn3vdRAUiKB" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/31X7TS3NBzGNHtxxVLY0" alt=""><figcaption></figcaption></figure>

4. **Enter the desired name** for your wallet and seed phrase, then **click "Submit"**.

<figure><img src="/files/6RqURgdlfW1ZSW0gkiY9" alt=""><figcaption></figcaption></figure>

5. **Click "Finish" to complete import process**.

### Switching Between Wallets

1. **Switch wallets by clicking your wallet name** in the top right. In this screenshot, ***"My Other Wallet"***.

<figure><img src="/files/0ltoU4nMZiDNINWcWVZe" alt=""><figcaption></figcaption></figure>

2. Currently active wallet is highlighted with a green border. From here, **click the wallet you want to set as active**.

<figure><img src="/files/y5JeXyWJ2lmtwqOhG33M" alt=""><figcaption></figcaption></figure>

### Advanced Feature: Non-Zero Wallet Derivations

HD wallets allow for the generation of **multiple 0x addresses from the same seed phrase**. Railway supports non-zero wallet derivations.

1. **Click "Wallet settings", click "Import existing wallet", and enter your password.**
2. **Name your wallet and enter the seed phrase. Then, click "Show advanced options".**
3. **Enter the Derivation Index of the 0x address** you want to add and **click "Submit"**.

<figure><img src="/files/zLcWP0OQBxQAyEQazw0s" alt=""><figcaption></figcaption></figure>


# View-Only Wallets

Create a Read-Only Viewing Key for your Railway Wallet

Railway users can **import a View-Only Wallet**. This wallet will be associated with a 0zk address, and can view transaction history and balances, without being able to spend funds.&#x20;

**WARNING:** *Currently, Viewing Keys grant full transaction viewing access and will permanently display all transactions (including future transactions) to a Viewing Key holder. Viewing Keys cannot be revoked once shared.*&#x20;

### Generating your Shareable Viewing Key

1. **Click "Settings"** in the bottom left **then "Wallets"**.

<figure><img src="/files/LLiWopdSJ5oZYY3ucKqA" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/mFxYNvRQX4KihX0qMEhL" alt=""><figcaption></figcaption></figure>

2. Here, you can view/modify wallet settings. **Click on your wallet and then "Show View-Only Private Key"**.

   <figure><img src="/files/y6llLmzlAe8vsb4YbYhl" alt=""><figcaption></figcaption></figure>
3. This opens a dialog box with clickable text. **Click the text to copy it to your clipboard**.&#x20;

<figure><img src="/files/sxhhnFhQgzhlr2snQTUX" alt=""><figcaption></figcaption></figure>

### Importing a Viewing Key

1. **Click "Settings" then "Wallets"**. **Click "Add Wallet" and "Add view-only wallet" and enter your password.**

<figure><img src="/files/LLiWopdSJ5oZYY3ucKqA" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/6MH5TVLOLDfg611KHq5y" alt=""><figcaption></figcaption></figure>

2. **Name your wallet and paste in the Viewing Key then click "Submit".**

<figure><img src="/files/DfEAr5jIs2BF8UPQ1qa5" alt=""><figcaption></figcaption></figure>

2. **Click "Finish" once the wallet is imported**. *Importing may take up to 20 seconds.*
3. Railway will now sync the balance and transaction history for the Viewing Key. This may take up to 2 minutes. **Click "Activity" to see the decoded transaction history.**

<figure><img src="/files/WyTi8R8bin7UWOqTQBo1" alt=""><figcaption></figcaption></figure>

If you want to try importing a View-Only Wallet, here is an example Viewing Key:&#x20;

82a57670726976d94036663534343366653430366535326262386564663039666166353661356436363639326463613763326561356331626635663231316534366463623638623839a473707562d94066323130306335376166343966656534343334343865316165626365323163653630396439613065333437333864386537633539613639313161643835623239

### Further Info

*View-Only wallets can be useful for recordkeeping purposes – for example, accountants may use View-Only Wallets to view the transaction history of their clients. RAILGUN transactions are entirely private, and only those with View access can see the wallet's decrypted transaction history. Read more about RAILGUN Viewing Keys* [*here*](https://docs.railgun.org/wiki/learn/wallets-and-keys)*.*


# Setting Custom RPCs

A Remote Procedure Call (RPC) Node is how Railway Wallet fetches and updates blockchain data. You may want to set a custom RPC node from time to time.

**NOTE: Railway Wallet contributors do not maintain or recommend any specific RPC nodes. All RPC nodes are maintained by independent third parties with no connection to Railway Wallet.**

{% embed url="<https://www.youtube.com/watch?v=JVtUweNcpvA>" %}

1. Click "**Settings"** then click “Network & RPCs”

<figure><img src="/files/QAqWty4gMxANISIw0bdQ" alt=""><figcaption></figcaption></figure>

2. Click the **network** you wish to add a custom RPC to. In this case, it's Ethereum.

<figure><img src="/files/JpW5CZHDHBNqdBRyWjch" alt=""><figcaption></figcaption></figure>

3. Click "**Set custom provider"**

<figure><img src="/files/91KJtdIaT3F31bLj2H38" alt=""><figcaption></figcaption></figure>

3. Find an RPC provider that matches your privacy and latency requirements. Choice of RPC provider is entirely up to the user and no one can recommend specific RPCs to you. \
   \
   A good place to start is an independent list of RPCs like [Chainlist](https://chainlist.org)&#x20;
4. Once you've selected an RPC, copy and paste the URL into the custom RPC URL box and click "**Submit**"

<figure><img src="/files/GtNXFiuFYkeWt4Wl4fwb" alt=""><figcaption></figcaption></figure>

5. Your custom RPC is now toggled on by default.&#x20;

<figure><img src="/files/C4KLyWDQehzqhcaU7mUU" alt=""><figcaption></figcaption></figure>

6. To toggle on default RPCs as a backup, click the "**Status**" button. You can also add additional custom RPCs by clicking "**Add custom provider**" again.

<figure><img src="/files/dIQpYACoCGUZ8NRmcxXY" alt=""><figcaption></figcaption></figure>


# Private Transactions


# Shielding

Move tokens to any 0zk address

**Please note, as of 6 November 2023, new shields have an Unshield-Only Standby Period of 1 hour. During this period, the only available action will be to unshield back to the original shielding address. This is due to the** [**Private Proof of Innocence**](/private-proofs-of-innocence) **system.**

Shielding transfers tokens from a public 0x address to a private 0zk address. When shielding, the 0zk address is completely private and never appears on the blockchain.

Once in a 0zk address, your funds are completely sealed from public view and no one can see what you do or what you hold. To read more about RAILGUN privacy, check out this [article](https://medium.com/@Railgun_Project/what-is-crypto-privacy-how-railgun-can-help-7-privacy-tips-for-dank-degens-cce294c6fc70).

From a 0zk address, users can send, swap, and interact with DeFi privately.&#x20;

For an alternative to Shielding through Railway Wallet, you can send funds to any 0zk address with [**https://tokenshielder.com**](https://tokenshielder.com).

### Shielding Tokens into a 0zk Address

1. **Click the token you would like to Shield**. *It's recommended to first Shield the networks base token or stablecoins like DAI or USDC to pay Broadcaster fees for private transactions.*

<figure><img src="/files/Pf1N88DsaXDE5BLnkOKT" alt="" width="366"><figcaption></figcaption></figure>

2. From here you can easily send Public transactions, view your address/receive QR code, and Shield tokens into Railgun. **Click "Shield" to continue**.

<figure><img src="/files/fswnFmLghYANyl7G797K" alt="" width="367"><figcaption></figcaption></figure>

3. RAILGUN supports Shielding to any 0zk address. **Copy and paste a 0zk address into the "Recipient" box OR click "Select" to Shield to a saved address to continue.**

<figure><img src="/files/KEPBwCbjUKSDYcjtpXDb" alt=""><figcaption></figcaption></figure>

4. We will shield tokens to the 0zk address associated with ***"My Wallet"***
5. Enter the amount of tokens you want to Shield and **click "Confirm amount".**

<figure><img src="/files/9hf0c8xt5HTJtaoZY0za" alt=""><figcaption></figcaption></figure>

6. **Shielding the base token of a given network will auto-convert to the wrapped version**, WMATIC for this example.&#x20;

<figure><img src="/files/qPichTyQyoTswRrJU0aP" alt=""><figcaption></figcaption></figure>

7. **Click "Next" and enter your password**.
8. Here you can view a summary of the Shielding transaction and fees paid (0.25%). **To set a custom gas price click the "Network Fee" bar** to see available options for fees. **Click "Shield" to submit the transaction**.

<figure><img src="/files/KsSJBuYfWEglGWdc0bqu" alt=""><figcaption></figcaption></figure>

9. Navigate to your Private balance by **clicking the "Private" button** in the top right to view your freshly Shielded tokens.

<figure><img src="/files/p4Eeyz659vDfsVBymvXi" alt=""><figcaption></figcaption></figure>

### Further Info

All transaction costs can be paid with wrapped base network tokens or stablecoins, so you do not need to keep a private balance of ETH, BNB or MATIC for private transactions.

If this is your first time using Railway Wallet, it's a good idea to Unshield some of the base network token (ETH/BNB/MATIC) to a **fresh 0x address** to assist with [**Self-Broadcasting**](/transactions/self-signing) as a backup to the Broadcaster network.


# Unshielding

Move tokens from your 0zk address to a 0x public wallet

### Unshielding Tokens into a 0x Address

1. **Click the token you would like to Unshield**. For this example, we will use WMATIC. **Click "Unshield" to continue**.

<figure><img src="/files/fzsrdpklbhm4ZDSjHoWO" alt="" width="368"><figcaption></figcaption></figure>

2. **Paste the 0x address into the recipient box**. **Click "Select" to see list of saved/associated addresses**. You can Unshield tokens to any 0x address.

<figure><img src="/files/qm7TN6r2WTq8zWprw404" alt="" width="394"><figcaption></figcaption></figure>

3. Next, **enter the quantity of tokens** you want to Unshield and **click "Confirm amount"**.

<figure><img src="/files/U4NNGxPO6wPG9CBr4gJs" alt="" width="392"><figcaption></figcaption></figure>

4. If, Unshielding a network's base token, **select how you want to receive the token**, either wrapped (WETH, WBNB, or WMATIC) or native (ETH, BNB, or MATIC). If Unshielding to a new wallet, select native to pay for gas on the other side.

<figure><img src="/files/Q8lmbq5iKQcXslhqsvH6" alt=""><figcaption></figcaption></figure>

5. **Enter your password.**
6. Here you can view a summary of the Unshielding transaction and fees paid (0.25%). **See the** [**Self-Broadcasting**](/transactions/self-signing) section on how to Self-Broadcast a transaction. **Click the Broadcaster Fee box to select Fee Token or select a higher or lower fee amount**.

<figure><img src="/files/Q6JX9jCt9SHoiqPEDO4H" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Q6JX9jCt9SHoiqPEDO4H" alt=""><figcaption></figcaption></figure>

7. **Click "Generate Proof" to prepare the transaction**. Generated proofs are valid for about 3 minutes.

<figure><img src="/files/RQB9RAiRGCrNVjL20rT3" alt=""><figcaption></figcaption></figure>

8. **Click "Unshield" to submit the transaction** to the selected Broadcaster.&#x20;

<figure><img src="/files/ob5efXGzFVHa8G6N7sTu" alt=""><figcaption></figcaption></figure>

5. If you wish to use a different Broadcaster or pay the transaction fee with a different token or amount, **click the "Broadcaster Fee" box to see available options**.&#x20;

Once the transaction is confirmed by the blockchain, your **tokens will be available in the destination 0x address**.

### Further Info

All transaction costs can be paid with wrapped base network tokens or stablecoins, so you do not need to keep a private balance of ETH, BNB or MATIC for transactions from your 0zk address.

If this is your first time using Railway Wallet, it's a good idea to Unshield some of the base network token (ETH/BNB/MATIC) to a **fresh 0x address** to assist with [**Self-Broadcasting**](/transactions/self-signing) as a backup to the Broadcaster network.


# Private Transfers

Send funds to another 0zk address privately

**Please keep Railway open and active after sending a 0zk-0zk transfer (up to 30 seconds on desktop/web and 1-2 minutes on mobile) until a** [**Private Proof of Innocence**](/private-proofs-of-innocence) **is created. This will guarantee that the recipient will be able to use those tokens immediately.**

*In addition to privatizing funds, RAILGUN also supports robust completely sealed peer to peer payments. Just like a bank account or Venmo transaction, all details of a 0zk to 0zk transfer are hidden from public view, including sender, recipient, token type, and amount.*

### Sending a 0zk to 0zk Transfer

1. To start a Private Send, **click the "Send" button** on your 0zk balance screen.

<figure><img src="/files/aFbJzydephCJSBnkjLaj" alt=""><figcaption></figcaption></figure>

2. **Paste in the destination 0zk address** or choose from your saved addresses. **Select token type and amount and click "Confirm amount"**.

<figure><img src="/files/hyLNZnzOQtlNblTCVtzL" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/7cDEoCsI7OwS2ScBq25z" alt=""><figcaption></figcaption></figure>

3. **Click "Next" to proceed**. After confirming the first token and amount, you can **send multiple assets as a part of the same transaction by** **clicking "Another token"**

<figure><img src="/files/oogyWXm27EvZanYWVUq3" alt=""><figcaption></figcaption></figure>

4. Select either [Public Brodcaster](/transactions/public-broadcasting) or [Self-Broadcast](/transactions/self-signing)

<figure><img src="/files/YvbGz9aMwiEtEv9tkLuV" alt=""><figcaption></figcaption></figure>

5. **Click "Generate Proof" to proceed.**

<figure><img src="/files/TBOStj6xYPZpkQ7C2dIS" alt=""><figcaption></figcaption></figure>

6. Once proof generation is complete, **click "Send" to submit the transaction**.

<figure><img src="/files/ieKzlNcUWXjsJhxsGpZS" alt=""><figcaption></figcaption></figure>

4. Once the transaction is submitted to the blockchain, you will receive a notification. Please keep Railway open for a few moments after confirmation (30 seconds on desktop and 1-2 minutes on mobile) to ensure that tokens are immediately [spendable](/private-proofs-of-innocence) for your recipient.
5. You can **see the details of any Private Sends in your "Activity" tab**.

### Further Info

*Only the holder of the Private Key or Viewing Key can decrypt the details of a transaction. The image below is what the above example transaction looks like to anyone observing on a block explorer. The "From" address is the Broadcaster address and the "To" address is the RAILGUN smart contract whilst all other details are hidden except for gas paid.*

*To see for yourself, here is the block explorer link for this transaction:* [*https://arbiscan.io/tx/0x3d14156a2092096e00eb9a274bb3801abacda6dcc7856a5554ae1fab67da7697*](https://arbiscan.io/tx/0x3d14156a2092096e00eb9a274bb3801abacda6dcc7856a5554ae1fab67da7697)


# Public Broadcasting

Use a third-party public broadcaster to sign a private transaction and broadcast to the blockchain nodes. This provides more anonymity.

**Note: Public broadcasters do not ever gain control or custody of your funds and cannot see any details of the sender or the contents of the private transaction. Railway does not control or maintain any broadcasters in the decentralized public broadcaster network.**

When you select "public broadcaster" you will see a variety of public broadcast options.&#x20;

{% embed url="<https://www.youtube.com/watch?v=R6Z4tQLEKs4>" %}

### Fee Ratio

At the top of each option is the Fee Ratio. When using a public broadcaster, you are buying gas using a fee token. The "Fee ratio" is the premium or discount you are paying for gas relative to the token you are using.

Railway Wallet performs a gas estimation which is then expressed as a ratio to your fee token.

For example, in the image below, according to the gas estimate, it would cost you 0.91 ETH to get 1 ETH worth of gas. It doesn't actually cost 1 ETH to send the transaction, it's just an indication of the premium to use a broadcaster.

The amount is lower because transactions rarely consume the whole gas estimate (usually about 80-90% of the gas estimate is consumed) and the broadcaster will take the difference as a reward for broadcasting the transaction.&#x20;

The lower the number on the left, the less the transaction will cost you.

​

<figure><img src="/files/QXDDw5VYZPZswt9vUeQg" alt="" width="375"><figcaption></figcaption></figure>

Rankings range from green, yellow, and red based on railway reliability. If you select **Random Broadcaster** it will automatically assign a broadcaster with higher reliability.

<figure><img src="/files/gqM4IFzMVbtQVTmltxmK" alt="" width="375"><figcaption></figcaption></figure>

Below the broadcaster options we can change the **fee token.** Generally speaking, it is best to pay the fee token with the same token you are trying to transact with. Make sure to set your fee token to a wallet with adequate balance.

Review the transaction and click **generate proof.**

If a broadcast fails, click **"retry broadcaster"**  and it will select the next best broadcaster option. Keep trying until the transaction succeeds.&#x20;


# Self-Broadcasting

Users can sign transactions using any 0x wallet, avoiding the use of a Broadcaster. Self-Signing may sometimes be preferable to save on Broadcaster fees.\
\
A broadcaster is any 0x address that pays the gas on behalf of a 0zk address. Read more about RAILGUN Broadcasters[ here](https://docs.railgun.org/wiki/learn/privacy-system/community-relayers).

{% embed url="<https://www.youtube.com/watch?v=R6Z4tQLEKs4>" %}

### How to seed a self-broadcaster

1. First we[ **need to create a 2nd, fresh new wallet in Railway Wallet**](https://help.railway.xyz/setup/create-wallet). *This wallet should have a clean history on Etherscan or other block explorers.*&#x20;
2. Next we need to [**Unshield ETH/MATIC/BNB into this new wallet**](https://help.railway.xyz/transactions/shield-unshield). Click **Unshield as ETH/BNB/MATIC** to ensure the self-broadcast wallet can pay for gas. *This will require a existing Broadcaster, this way the origin of these funds will be the RAILGUN smart contract, rather than any address linked to you.*

*Your 0zk address supports WETH. This can be unshielded to the self-broadcaster wallet you just created. If you do not have any WETH, you can perform a private swap to obtain it.*

### How to execute a self-broadcast transaction&#x20;

When performing a transaction on railway you may choose between "public broadcaster" and "self-broadcast".&#x20;

At your next "self-broadcast" transaction, **click the "Signer" field**. **Select the newly created and seeded wallet**.&#x20;

<figure><img src="/files/OKW2Zw78Zi4eUfs72cY7" alt=""><figcaption></figcaption></figure>


# Integrated dApps


# Swaps

Perform a token swap with Railway DEX

*Railway supports swapping from both 0x and 0zk addresses through Railway DEX. Easily swap any ERC-20 through the* [*0x API*](https://www.0x.org/) *(the same DEX aggregation tool powering Matcha.xyz). Learn more about Railway DEX* [*here*](https://docs.railgun.org/wiki/learn/railway-dex-swaps)*.*

### Swaps&#x20;

1. From your Public Wallet, **click "dApps" and then "Railway DEX"**.
2. **Select the tokens you want to swap**. *You can import any token if it's not in the current list by pasting its contract address into the token selector.* **Click "Approve"** if this is the first time you're swapping the token.

<figure><img src="/files/hjafQxN7weFUPqD0YkTn" alt="" width="375"><figcaption></figcaption></figure>

3. To modify swap settings like slippage, **click the "Settings" icon**.
4. By default, slippage is set to 1%. **Drag the slider to set it anywhere between 0.1%-20%. Click "Save" to set slippage.**

<figure><img src="/files/UU10lGl0XnYYNpya7kqP" alt=""><figcaption></figcaption></figure>

5. **Click "Review order" and enter your password to continue. Select** [**Public Broadcaster**](/transactions/public-broadcasting) **or** [**Self-Broadcast**](/transactions/self-signing) **then click "Generate Proof"**

<figure><img src="/files/d1DsGfGwk3GLOrLhzxO9" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/WV85u2NBRYyidCWkF3Ua" alt=""><figcaption></figcaption></figure>

5. **Click "Swap" to submit the transaction**. You can also set a custom fee by **clicking the "Network Fee" box**.

<figure><img src="/files/ThvgsV57zSbYXVl1MXHG" alt=""><figcaption></figcaption></figure>

4. You will receive a confirmation of the swap. View the details of the transaction from the **"Activity" tab or a block explorer**.

<figure><img src="/files/Zacx0zC3wcdgUA66RyI8" alt=""><figcaption></figcaption></figure>


# Private Yield Farming

Earn yield on your private balance on Railway Farm

Railway Wallet supports private yield farming through [beefy.com](https://beefy.com).

<figure><img src="/files/hpcMlMZf7Ke5OEI5q2T1" alt=""><figcaption></figcaption></figure>

**Please note, most Beefy vaults are for farm tokens (such as Liquidity Pool \[LP] tokens on a DEX) and rarely support single-sided raw assets like WETH or USDC by themselves. In most cases, you will need to provide liquidity on the underlying DEX or farm first, then** [**shield**](/transactions/shield-unshield) **to proceed with private yield farming.**

**For example, if you wanted to deposit into the Convex cvxFXS farm privately, you would obtain cvxFXS by depositing FXS on Convex, shield the cvxFXS then proceed with the following steps.**

### Depositing Tokens

1. **Navigate** to the Farm by clicking 'dApps' then 'Farm'

<figure><img src="/files/d9da2BApGpFHmAbdiItN" alt=""><figcaption></figcaption></figure>

2. **If you already have a shielded farmable asset**, then **click** on the asset in the list. \
   \
   **If you do not have a farmable asset**, **click** 'Beefy Vaults' to see the full list and obtain the farm token for the vault you want. You will need to [shield](/transactions/shield-unshield) a farmable asset such as an LP token to proceed.&#x20;

<figure><img src="/files/8TYjpPfGJhk90FrBOIGD" alt=""><figcaption></figcaption></figure>

3. **Enter** in the amount you want to farm with and **click** 'Confirm Amount'

<figure><img src="/files/IPfQL1J3URrx7EtJG9u9" alt=""><figcaption></figcaption></figure>

4. **Click** 'Add moo\[Token] to wallet'. *Moo tokens are Beefy's receipt token. They are redeemable over time for more of the underlying token.*

<figure><img src="/files/6oRzxXEMeuCbd3VzNVdr" alt=""><figcaption></figcaption></figure>

5. **Click** 'Add'
6. **Click** 'Next'

<figure><img src="/files/1JUaPJB5w4R3jyIVmtxJ" alt=""><figcaption></figcaption></figure>

7. **Review** the transaction details closely. **Click** 'Deposit into Beefy Vault' and select either [Public Broadcaster](/transactions/public-broadcasting) or [Self-Broadcast](/transactions/self-signing) to complete the transaction.

<figure><img src="/files/MPS7ZF28UMbzyuZKFVFn" alt=""><figcaption></figcaption></figure>

### Redeeming Tokens

1. **Navigate** to the 'Farm' page by clicking 'dApps' then 'Farm'

<figure><img src="/files/c9UcJ0nWbj9AOaSx3CuZ" alt=""><figcaption></figcaption></figure>

2. **Click** the dropdown and **select** 'Assets to redeem'

<figure><img src="/files/eeoPDnLb80BtkfhnrHeK" alt="" width="563"><figcaption></figcaption></figure>

3. **Select** the moo\[Token] of the farm which you wish to withdraw from

<figure><img src="/files/d0S2BN7E2UuCAcJvNm38" alt="" width="563"><figcaption></figcaption></figure>

4. **Enter** the withdrawal amount and **click** 'Confirm amount'

<figure><img src="/files/gz87HK3oyd2JhQCqi6HA" alt=""><figcaption></figcaption></figure>

5. **Click** 'Next'

<figure><img src="/files/2Oe2rQv6rpyU5HSSlA44" alt=""><figcaption></figcaption></figure>

6. **Review** the withdraw transaction closely. **Click** 'Redeem from Beefy Vault' to proceed. Select either [Public Broadcaster](/transactions/public-broadcasting) or [Self-Broadcast](/transactions/self-signing) to complete the transaction.

<figure><img src="/files/Bf2vBluh5hhjQhtS8FpD" alt=""><figcaption></figcaption></figure>

### Farm Activity

1. **Click** 'Activity' to see your Private Farm transaction history such as deposits and redemptions.
2. Private Farm transaction history can also be seen if you click the asset in your asset list. You can also deposit and withdraw from vaults from this panel as well.


# Private Liquidity Provisioning

{% hint style="info" %}
[Uniswap v2 style pools](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/pools) require equal value amounts of the underlying assets. Users deposit assets and receive Liquidity Pool (LP) tokens redeemable for the assets.
{% endhint %}

### Prerequisites

* You have a [created](/setup/create-wallet) or [imported](/setup/import-wallet) a wallet into Railway
* [Shielded](/transactions/shield-unshield) some assets into your 0zk balance

### Add Liquidity Instructions

#### 1. Click 'dApps' and select 'Liquidity'

<figure><img src="/files/vx0EXVTb4mJi7iYQwWvN" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Tip**: You can also farm LP tokens in the [Railway Farm](/integrated-dapps/private-yield-farming). Click 'Farm' and then a vault provider to see a list of farmable assets. Once you've selected a compatible vault you can then return to the 'Liquidity' tab to enter an LP.&#x20;
{% endhint %}

#### 2. Select the Liquidity Pool you want to provide liquidity to

{% hint style="info" %}
You will need to [shield](/transactions/shield-unshield) equal proportions of the 2 underlying tokens to enter into LPs.&#x20;
{% endhint %}

If you want to see a full list of liquidity sources, these buttons will take you to the exchange's full list of available liquidity pools

#### 3. Enter your desired token amount. Pools can only be entered from the token on the left. For example, on the 'WETH-DAI' pool, you would have to set the amount using WETH and not DAI.

<figure><img src="/files/ZJYKfhjzoRCbYOmVjaqY" alt=""><figcaption></figcaption></figure>

#### 4. Click 'Confirm Amount' to proceed. You can also change slippage by clicking the Settings.

<figure><img src="/files/sOpZYNmmJYkhwzjgsiVp" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/6mntJOG4qyda2AEn4H18" alt=""><figcaption></figcaption></figure>

#### 5. Add the resulting LP token to your wallet to view it in your asset list. You will also see the outcome of the liquidity provisioning.

<figure><img src="/files/qw14tEKqj0dW4Kt2eF60" alt=""><figcaption></figcaption></figure>

#### 6. Check the LP amounts again closely and click 'Next' to proceed

<figure><img src="/files/oniajnKOFKM5xWaT2QFJ" alt=""><figcaption></figcaption></figure>

#### 7. Review the transaction details closely including the RAILGUN protocol fee and click 'Generate Proof' to continue

<figure><img src="/files/o7Vkecos94yK7nv8xtF1" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/OlDh87w8Guli75eD47OC" alt=""><figcaption></figcaption></figure>

#### 8. Once the transaction is complete, you will see the resulting LP tokens in your balance and transaction details are visible in the 'Activity' tab

<figure><img src="/files/f8XhfcnsFOktpfyCbgX6" alt=""><figcaption></figcaption></figure>

### Remove Liquidity

#### 1. On the 'Liquidity' tab, select 'Remove Liquidity' from the dropdown menu

#### 2. Select the LP token you would like to remove liquidity from

#### 3. Enter in the amount of LP tokens you would like to remove and click 'Confirm amount'. You can also change slippage by clicking the cog.

#### 4. Click 'Next'

#### 5. Review transaction details closely including RAILGUN protocol fee and click 'Generate proof' to continue

#### 7. The remove liquidity transaction details will be visible in the 'Activity' tab


# Using an Ethereum Name Service (ENS) Domain

Railway Wallet and RAILGUN 0zk addresses support Ethereum Name Service (ENS) domains. Once linked, you can receive Private Transfers to a private balance via an ENS instead of a 0zk address.

1. Head to <https://app.ens.domains/my/names> and **click** on your domain name. If you don’t have an ENS, [here’s a guide](https://medium.com/@brantly.eth/step-by-step-guide-to-registering-a-eth-name-on-the-new-ens-registrar-c07d3ab9d6a6) on how to register one.
2. **Click** ‘Edit Profile’ and **click** ‘Add more to profile’
3. **Click** ‘Other’ and ‘Custom’
4. **Click** ‘Save’ and **click** ‘Open Wallet’ and complete the blockchain transaction (you will need some ETH to pay for gas in the wallet that owns the domain)
5. Once the transaction is confirmed, your chosen ENS will resolve to your 0zk address in Railway Wallet.


# Using Railway Wallet with Unstoppable Domains

Receive private payments to an Unstoppable Domains address

You can quickly and easily receive payments to an memorable Unstoppable Domains address instead of your long 0zk address.

### Setting up an Unstoppable Domains NFT

1. Head to the Unstopppable Domains [homepage](https://unstoppableweb.co/3sHHosw).
2. Type your desired domain name into the search bar
3. Select your desired domain name suffix
4. Click "Checkout" and select one of the sign-in options.
5. Complete the payment process with desired payment method

### Minting an Unstoppable Domains NFT

1. Go to ‘My Account’ in the top right and select ‘My Domains’ in the dropdown menu
2. If you did not sign in with your wallet, connect you wallet and make sure it is connected to Polygon and click ‘Free Mint’ (you will not need any gas to mint your domain or manage it)
3. Click ‘Confirm’ to start the minting process, this may take a few minutes after the transaction is confirmed on-chain to reflect.

### Linking an Unstoppable Domains NFT and a 0zk address

1. Once complete, click ‘My Account’ and ‘My Domains’ again and click ‘Manage’ on your new NFT domain
2. To set your 0zk address click ‘Crypto’ on the left panel and ‘Add Currency’ at the bottom
3. Select ‘RAILGUN’ from the popup list and enter in your 0zk address next to the ‘0zk’ textbox and click ‘Confirm Changes’. This will prompt a signature from your wallet.
4. Click ‘Track Progress’ to see the progress of the transaction. Once complete, voila, you can now receive Private Sends directly to your domain.
5. To try it out, click "Send" on Railway and enter in the domain name which will then resolve to the 0zk address tied to it. Unstoppable Domains are also supported on Ethereum, BSC, and Polygon.
6. After this, the process is like any other [Private Send](/transactions/private-transfers).


# Customize


# Setting Network Fees

Set desired transaction fees and change the Nonce of a transaction.

*If you need speedier transaction execution, you can set a higher network fee. The below example is a public transaction from 0x address, however, the process is identical for private 0zk transactions.*

### Setting Custom Fees

1. From any transaction confirmation screen, **click "Network Fee" (0x transactions) or "Broadcaster Fee" (0zk transactions)** **to bring up the fee modifier window**.
2. Railway Wallet calculates Slow, Standard, and Aggressive fees for you with the currently **selected fee tier highlighted in green**. You can also enter a custom fee by **clicking the "Custom" box**.
3. Here, you can set the Max Base Fee and Priority Fee. **Click "Submit" to apply the values** entered. You can read more about what these 2 fee types mean [here](https://medium.com/imtoken/how-to-set-eip-1559-gas-fees-3ea9b9f16242).


# Koinly Tax Reports

Railway Wallet supports CSV exports readable by the Koinly tax software.

For now, Koinly exports are available on the Railway web and desktop apps only. Getting Railway Wallet tax reports into Koinly is quick and simple.

1\.       Head to the “**Activity**” page

2\.       Click the **download** icon.

3\.       Select “**Koinly Tax Software**” and your tax year and click **Export as CSV**. This will download a Koinly friendly CSV file into your browser’s download folder.

4\.       Head to **app.koinly.io**, login and head to **Wallets > ‘Add wallet/exchange’**

5\.       Search for and click ‘Railway Wallet’ and select ‘**Import from file**’

6\.       Drag and drop the CSV file you exported earlier and click ‘**Import**’ and you’re done, your Railway Wallet transactions will show up alongside any other wallets/exchanges you’ve imported and you can generate a tax report as normal.


# Private Proofs of Innocence

### Introduction

Railway Wallet has integrated the RAILGUN Private Proofs of Innocence (Private POI) assurance system, a decentralized and privacy preserving tool which gives cryptographic assurance of the origin of shielded funds. Users of RAILGUN integrated wallets with Private POI (like Railway Wallet), create a Zero-Knowledge (ZK) proof that their funds are not a part of a publicly known set of undesirable transactions. By using this system, all Railway Wallet users are

Private POI uses only publicly available data and as it is built using ZK cryptography, is entirely privacy protecting. It does not affect the privacy levels of your Railway Wallet 0zk addresses in any way and all private Railway Wallet transactions remain private to everyone and are impossible to deanonymize by anyone. You can read more about Private POI (including architecture and technical descriptions) in the documentation from RAILGUN contributors [here](https://docs.railgun.org/wiki/assurance/privacy-pools-private-proofs-of-innocence).

With this upgrade, there are some changes on how to best use Railway Wallet.

### Shielding

"Shielding" means adding tokens to your hidden 0zk address where you still retain full control of it. Clicking "Shield" in Railway also creates Private Proofs of Innocence (Private POI) which are useful later. This involves a Unshield-only Standby Period.

Please understand this process:

1. 1 hour must pass before your shielded funds can do things other than go back to the 0x wallet that the shield was initiated from. This is called a Unshield-only Standby Period.\
   \
   (In the future this may be upgraded to a shorter time.) During the initial Private POIs beta stage this standby will be one hour, and during this standby period, like any other time with 0zk addresses, no person other than yourself can see or control your tokens. If something urgent comes up, you will still be able to unshield them to origin without waiting.
2. The Private Proofs of Innocence system creates a Zero-knowledge proof (a small piece of data) that says your shield is not from a certain list of undesirable addresses. You as Railway Wallet user will be able to choose which list to use, in the future. To begin with, there is only the default list, which is the free and public OFAC designated list updated by Chainalysis. (To be clear, no data at all will be shared with them, they are only giving away a free list). In the future, knowledgeable community organizations will probably publish and update more lists to help wallet users avoid bad actors. Railway Wallet itself does not make or update any list or lists.\
   \
   Addresses that shielded tokens from the list will not be able to create a Private POI and will not be able to use Railway Wallet.
3. Private POI and Railway Wallet app does not share any of your transaction history with anyone - not even with the app publishers or contractors. Transactions sent from 0zk wallets are and will always be impossible to deanonymize by anyone, as they are encrypted to all outside viewers.\
   \
   Private POI proofs are blinded, meaning that they don't reveal any information about the underlying transaction. Proofs are generated on your device and, as they are zero-knowledge, remain completely private.\
   \
   Private POI is a very new and exciting system and Railway Wallet is the first app to ever test it. Please bear in mind the experience will improve in the future and help us with the goal of being the best high-tech, non-profit, free and zero ads, privacy-respecting wallet app.

### Private Transfers

Please keep Railway open and active after sending a 0zk-0zk transfer (up to 30 seconds on desktop/web and 1-2 minutes on mobile) until a Private Proof of Innocence is created. This will guarantee that the recipient will be able to use those tokens immediately.

#### Why?

Private Proofs of Innocence are created after a transaction is confirmed. For the transferred tokens to be spendable by the recipient, a valid Private Proof of Innocence will be auto-generated by the sender whilst the Wallet is open. In the meantime, the transfer will show as "Incomplete" on the recipient's wallet. If the sender closes the app before the Private POI is created, they may simply re-open it and wait for the POI to generate.

#### Is there any risk to the receiver?

If you use Railway Wallet, there is a guarantee that private transactions can generate a Proof of Innocence. There is no risk that tokens will be unspendable if you give enough time after a transaction to allow a proof to generate.

### Balance Types

There are 4 balance types within Railway Wallet depending on Private POI status. Please note the following.

**Spendable**: Tokens marked as Spendable have a valid Private POI and can be spent by your 0zk address with no limitations.

**Pending**: Tokens currently in the Unshield-Only Standby Period. After this period, you will be able to generate a Private POI. You still retain full control over these tokens during the Unshield-Only Standby Period and can unshield them back to the original depositing address.

**Incomplete**: “Incomplete” tokens have passed the Unshield-Only spending period and are currently waiting on a Private POI. Please wait a few moments for your wallet to generate a Private POI check OR, if you received tokens from another wallet, please ask the sender to open their Railway Wallet app to complete the Private POI process.

**Restricted**: Tokens that are from known undesirable activity as indicated by a list provider. These tokens will not become Spendable and Unshielding to the original address is the only option.

### Transaction Flow

<figure><img src="/files/WPwfmMZq37TYJeXx6p8L" alt=""><figcaption><p>How funds move through Railway Wallet</p></figcaption></figure>

The standard transaction flow of funds through Railway Wallet and balance types:

1. Shield tokens into a 0zk address through Railway Wallet for on-chain privacy, private transfers, and private DeFi
2. Wait for the Unshield-Only Standby Period of 1 hour for newly shielded tokens. Tokens still this Standby Period are part of your Pending Balance.
3. Once the Unshield-Only Standby Period is complete, these tokens now have a completed Private POI, and are now part of your Spendable Balance. Tokens in a Spendable Balance can be sent to another 0zk address, used in private DeFi, or unshielded to a different 0x address immediately.
4. Tokens sent from a spendable balance to another 0zk address will be usable by that recipient immediately, without needing to wait for an Unshield-Only Standby Period, as long as the sender keeps the Railway Wallet app open for a few moments (30 seconds on desktop & 1-2 minutes on mobile) after the transaction is confirmed.
5. Unshield to a 0x address through a Broadcaster. Again, this transaction has no waiting time, as the Private POI is carried forward from the initial shield. After the transaction is confirmed, the unshielding wallet will auto-generate a Private POI. Any third-party (like a centralized exchange receiving unshields) can privately verify that the unshield transaction has a completed Private POI, without any other data (like address, balances, or history) being revealed.


# Private POI Walkthrough

### Shielding Walkthrough

1. Begin the [Shield](/transactions/shield-unshield) process. There is now an indication of the length of the Unshield-Only Standby Period (5 minutes on testnets and 1 hour on mainnet).&#x20;
2. Tokens from this shield will show as "Pending" in the Activity tab. See [Balance Types](/private-proofs-of-innocence#balance-types) for more information.
3. To see pending balance time, click "View pending balances" on the Shield transaction or click "Pending balances" on the settings panel.
4. Here, you will be able to see the approximate wait time for your balances to become "Spendable"

### Unshield to Origin Walkthrough

If you need your tokens prior to the completion of the Unshield-Only Standby Period, you can Unshield back to the originating 0x address.

1. Navigate to the "Pending balances" window and click 'Unshield to origin"
2. Go through the [unshield](/transactions/shield-unshield-1) process as normal. Please note the 0.25% shield and unshield fee.
3. Wait for the Private POI process to complete. You will see a few windows showing proof generation progress


