# Introduction to Qwertycoin

Special thanks to one of our developers, blockinator. His previous contribution to Qwertycoin documentation made this transition seamless.

Qwertycoin is a fast, easy, and private cryptocurrency that allows you to send money to friends and businesses.

One of Qwertycoin's main goals is to make things as simple and as accessible as possible for everyday people, creating a cryptocurrency that is inviting, fun, and friendly.

Qwertycoin's code is forked from the Karbowanec and Bytecoin code, and it has majorly the same privacy features you'll find in Monero and Aeon. Every transaction is private.

Some of the main features of Qwertycoin include:

* On-chain privacy
* On-chain voting
* On-chain trading
* Genesis Reference Block
* Only eight decimal places
* Fast transactions
* User-centric developers
* Encrypted Blockchain Messenger
* Easy to mine and fair rewards
* Easy to use
* Amazing community

### Basic Coin Specifications

* Coin Name: Qwertycoin
* Ticker: QWC&#x20;
* Type: 0% Premined Decentralized Community&#x20;
* Cryptography: CryptoNote V2.0
* Proof Type: EPow (Egalitarian Proof of Work)
* Mining Algorithm: Cryptonight
* Difficulty Algorithm: CIMA + CLIF, Adjusted every block
* Blocktime: 120 seconds
* Tx Hash: Instant
* Required Confirmations: 10 confirmations
* Total Number of Coins: 184,467,440,737 QWC
* Coin Decimals: 1/10000000 (0.00000001)
* QWC Block Reward: Decrease by each block
* Dev. Language: C++

## Contributing to Qwertycoin Development

To help contribute and improve the Qwertycoin project, you can:

* Submit pull requests, or create issues over at our [Github Repo](https://github.com/qwertycoin-org/qwertycoin)
* Help make various tools (wallets, daemons etc.)
* Help improve this wiki by submitting a pull request/making an issue over at it's [Github Repo](https://github.com/qwertycoin-org/qwertycoin).

Check the [Github Repo](https://github.com/qwertycoin-org/qwertycoin) for more information.

The `#bounties channel` in the [Discord](https://qwertycoin.org/discord) has a (pinned) list of bounties offered to users who can help improve functionality in existing tools/make a tool that can be used.

## To learn more about us, check out our links:

Github Source Code: <https://github.com/qwertycoin-org>\
Bitcoin Talk Thread: <https://bitcointalk.org/index.php?topic=2881418.0>\
Daemon Download: <https://github.com/qwertycoin-org/qwertycoin/releases>\
Desktop Wallet(GUI) Download: <https://github.com/qwertycoin-org/qwertycoin-gui/releases>\
Desktop Wallet(ZERO) Download: <https://github.com/qwertycoin-org/qwertycoin-zero/releases>\
Web Wallet: <https://myqwertycoin.com>\
API Endpoint Mobile Wallet for Android: <https://play.google.com/store/apps/details?id=org.qwertycoin.wallet&hl=en_US>\
Explorer, Node List, Pools: [https://explorer.qwertycoin.org](https://explorer.qwertycoin.org/#pools)\
Master Node Map: <https://nodes.qwertycoin.org>\
Voting Platform: <https://voting.qwertycoin.org>\
Online Guides: <https://docs.qwertycoin.org/>

**Community Links:**

Telegram: <https://t.me/qwertycoin>\
Facebook: <https://www.facebook.com/Qwertycoin-422694361519282/>\
Discord: <https://discord.gg/U5amwCs>\
Twitter: <https://twitter.com/Qwertycoin_QWC>\
Reddit: <https://www.reddit.com/r/QWERTYCOIN/>

**Support & Contact Information:**

Telegram: <https://t.me/qwc_support>\
Email: <support@qwertycoin.org>

We recommend you take some time off and read them, to get acquainted with Qwertycoin!


# Terminology

## Consensus Related

* Proof of Work (PoW) - a blockchain consensus that involves mining for a reward system and security.<br>
* Proof of Stake (PoS) - a blockchain consensus that involves staking coins as a reward system and security<br>
* Delegated Proof of Stake (DPoS) - a blockchain consensus that involves staking and delegation of rights to a designated number of nodes<br>
* Egalitarian Proof of Work (EPoW) - a blockchain consensus that involves mining for an egalitarian reward system and security.<br>
* Egalitarian Proof of Service (EPoSe) - a blockchain consensus with a combination of EPoW and Uptime Nodes for egalitarian reward system and security. Qwertycoin(QWC)'s original concept.&#x20;

## Wallet Related

* Wallet - software that helps user to send/receive coins as well as keep transaction records + additional blockchain add-on features.<br>

* Wallet Address - an address derived from public key. Users can use an wallet address to receive payments from others or send coins from exchanges.<br>

* Public Key - a unique key used for generating a wallet address and transactions. A wallet address is derived from this key. Users can retrieve this information from wallet.
  * Users can retrieve this information from wallet.<br>

* Private Key - a unique key used in wallets. This key is unique per address and grants a full access to the respective wallet address.&#x20;
  * ***Keep it to yourself only and do not post or share it anyone.***
  * Users can retrieve this information from wallet.
  * Users can import this key in wallet to get a full access including viewing and spending.<br>

* View Key - a unique key used to view the details including transactions of a wallet address. It can be shared, but do not recommend it.&#x20;
  * Users can retrieve this information from wallet.
  * Users can import this information in wallet to view details of its transactions and wallet address. <br>

* Spend Key - It is a synonym of private key.&#x20;

  * ***Keep it to yourself only and do not post or share it anyone.***

* Mnemonic Seed - a sequence of words derived from a private key.
  * ***Keep it to yourself only and do not post or share it anyone.***<br>

* Churning - making a transaction from and to the same wallet address.<br>

* Full-Node Wallet -  a type of wallet that runs a node and a wallet within the same software; this type of wallet stores entire blockchain data with a wallet file and its transactions in local device. It does not require a remote connection to a public or private node since it uses its own node. \
  \
  Pros:&#x20;

  * This is the most secure type of wallet.
  * Initial blockchain synchronization can take sometime since users can make transactions after block synchronization is finished. A snapshot of blockchain is available for download if users want to shorten this downtime.
  * Node service fee is waived.

  \
  Cons:&#x20;

  * Users sacrifice time for block synchronization and a lot of disk space is required for storing entire blockchain. This wallet is not recommended for non-daily users.
  * This type of wallet is not practical for mobile and web platforms.
  * Slow internet speed or outdated computers can be problems.
  * A proper backup of private and/or mneumonic seeds is required for gaining a full access to a wallet address.

    <br>

* SPV(Simplified Payment Verification) Wallet - a type of wallet that runs without a node; a remote connection to a public or private node is required to send/receive and record transactions. Only a wallet file and its transaction records are stored in local device.<br>

  Pros:&#x20;

  * This wallet provide good security measure.
  * No need for blockchain synchronization. Once connection to a remote node is established, users can send/receive payments.
  * Can also be developed as mobile and web platforms.
  * Even slow internet speed or outdated computers can work with this wallet.

  \
  Cons:&#x20;

  * Node service fee has to be paid.
  * A proper backup of private and/or mneumonic seeds is required for gaining a full access to a wallet address.

    <br>

* API Endpoint Wallet - a type of wallet that runs without a node; only keys are stored in the local device and delegates all other works to the wallet service provider.<br>

  Pros:&#x20;

  * No need for blockchain synchronization. Once connection to a remote node is established, users can send/receive payments.
  * Can also be developed as mobile and web platforms.

  \
  Cons:&#x20;

  * This wallet provide the least security measure.
  * Wallet loading time takes forever. This is intrinsic to its structure.
  * Node service fee has to be paid.
  * Slow internet speed or insufficient server performance can be a problem.
  * Clearing browser cache will erase locally stored keys. A proper backup of private and/or mneumonic seeds is required for gaining a full access to a wallet address.<br>

* Offline Wallet - a type of wallet that runs without a node; only wallet address, key and/or mneumonic seeds information are provided.<br>

  Pros:&#x20;

  * Some considers this the most secure wallet.

  \
  Cons:&#x20;

  * The wallet address can be used for receiving funds. To make a transaction, the wallet file must be imported through a wallet before use.<br>

* Snapshot - a blockchain file for download to speed up block synchronization process.

## Node Related

* Node - a software that verifies/holds transactions from wallet and stores block information. It is also called as a daemon.<br>
* Checkpoint - irreversible point of blockchain<br>
* Node Fee - amount of payment paid to node's registered wallet address when using remote node connection to make transactions from wallet <br>
* Uptime - a measure of time that a node has been providing service above minimum performance level to blockchain. Used for selecting <br>
* Memory Pool - a memory space used to temporarily store transactions until they are included in blocks.

## Mining Related

* Mining - a process of finding a complex problem by using computer resources including CPU, GPU, FGPA or ASIC.<br>
* Miner - a person or a a device that participates in mining activities.<br>
* Mining Software - software used for solving problems proposed by blockchain with PoW consensus.<br>
* CPU - an abbreviation of Core or Central Processing Unit of a computer (Intel or AMD processors)<br>
* GPU - an abbreviation of Graphics Processing Unit of a computer (Nvidia or AMD)<br>
* FPGA - an abbreviation of field-programmable gate array; an integrated circuit designed to be configured by a customer or a designer after manufacturing<br>
* ASIC - an abbreviation of application-specific integrated circuit; an integrated circuit chip customized for a particular use, rather than intended for general-purpose use<br>


# Simple Steps

To improve your understanding, please make yourself familiar with blockchain [terminology](/getting-started/terminology). Below is essentially a checklist of tasks you have to do to get started with Qwertycoin.

## Wallet Address and Critical Information

A user must generate a wallet address in order to use QWC blockchain from available QWC wallets. There are various types of wallets you can choose including [Paper wallet](https://paper-wallet.md/), [CLI wallet](/wallet/cli-wallet), [GUI wallet](/wallet/gui-wallet), [Web wallet](/wallet/web-wallet) and [Mobile wallet](/wallet/mobile-wallet).\
\
Make sure to keep a record of the following information before using the blockchain.\
1\. Private Key (Critical)\
2\. Mnemonic Seeds (Critical)\
3\. Wallet Address\
4\. Wallet File (Not provided by Paper Wallet)\
\
The information marked (Critical) shall not be shared with anyone but yourself. If you lost both critical information and wallet file, you are not able to gain access to your funds stored in respective wallet address. \
\
**At all times, do not private key or mnemonic seeds with anyone.**

## Setting Up a New Wallet Address

You can generate a wallet address from wallets.&#x20;

To view a list of them, their interface and a brief description, as a well as guides on how to use them, you can check [this guide](/wallet/types-of-wallet).

## Start Mining Qwertycoin

Mining is essentially the process of using your computer to help verify and secure a cryptocurrency network, in our case, it is the Qwertycoin network. By doing this, you will be rewarded with Qwertycoin.

If you want to learn about crypt-currencies, mining is a great place to start!

To view an in-depth guide on how to mine Qwertycoin, you can view [this guide](/mining/mining-options)

## Start Trading Qwertycoin

Qwertycoin coin is currently available for trading on exchanges with several different trading pairs.

You can learn how to trade Qwertycoin [here](/trading/exchanges).

## Track the Price of Qwertycoin

You can track the price of Qwertycoin across a number of cryptocurrency listing websites. Some of those top listings are:

* [CoinMarketCap](https://coinmarketcap.com/currencies/qwertycoin/)
* [CoinGecko](https://www.coingecko.com/en/coins/qwertycoin)
* [Coinranking](https://coinranking.com/coin/qwertycoin-qwc)
* [Coinlib](https://coinlib.io/coin/QWC/Qwertycoin)

## Socialize!

We have an awesome [community](https://docs.qwertycoin.org/about/Community) and would love for you to join in!

You can join our [Discord](https://qwertycoin.org/discord) or come on over to our [subreddit](https://www.reddit.com/r/QWERTYCOIN/)! We can't wait to see you :)


# Types of Wallet

## Offline Wallet

Name: Paper Wallet\
Wallet Type: [Offline Wallet](/getting-started/terminology#wallet-related)\
Supported Platforms: All devices and web browsers\
Output: Wallet Address, Private Key, Public Key, Mnemonic Seeds\
\
The main purpose of a paper wallet is to quickly create a wallet to start receiving funds. You will not be able to spend or send your funds to other people until you set up a CLI, GUI or Web Wallet.\
\
To view a guide on how to make a paper wallet, you can go [here](/wallet/paper-wallet).

## Command Line Interface Wallets

Name: Simplewallet & walletd\
Wallet Type: [SPV Wallet](/getting-started/terminology#wallet-related)\
Supported Platforms: Windows, MacOS, Linux\
Output: Wallet Address, Private Key, Public Key, Mnemonic Seeds, Wallet File\
\
These wallets require users to enter commands in command line interface to work and you cannot use your mouse. However, it is currently the most stable and gets the newest updates first.\
\
If you would like to use CLI Wallet, you can check out [this guide](/wallet/cli-wallet).

## Cross Platform Wallet

Name: QWCX\
Wallet Type: [SPV Wallet](/getting-started/terminology#wallet-related)\
Supported Platforms: Windows, MacOS, Linux, Android, iOS, Web\
Output: Wallet Address, Private Key, Public Key, Mnemonic Seeds, Wallet File\
\
This wallet is a multi-platform program for Windows/Linux/Mac/Android/iOS/Web and currently under development.\
\
An update will be provided when it is released.

## Graphical User Interface Wallets

Name: GUI wallet and Zero wallet\
Wallet Type: [Full-Node Wallet or SPV Wallet](/getting-started/terminology#wallet-related)\
Supported Platforms: Windows, MacOS, Linux\
Output: Wallet Address, Private Key, Public Key, Mnemonic Seeds, Wallet File\
\
They can run as either full-node wallets or SPV wallets upon selecting a connection option in software.\
\
If you would like to setup a GUI wallet, you can take a look at [this guide](/wallet/gui-wallet).

## Mobile Wallets (Android & iOS)

Name: Mobile Wallet\
Wallet Type: [API Endpoint Wallet](/getting-started/terminology#wallet-related)\
Supported Platforms: Android(Google Playstore), iOS(App Store)\
Output: Wallet Address, Private Key, Public Key, Mnemonic Seeds\
\
The current mobile wallet is simple and easy to use.\
\
If you would like to setup a Mobile wallet, you can take a look at [this guide](/wallet/mobile-wallet).

## Web Wallet

Name: Web Wallet\
Wallet Type: [API Endpoint Wallet](/getting-started/terminology#wallet-related)\
Supported Platforms: All web browsers\
Output: Wallet Address, Private Key, Public Key, Mnemonic Seeds\
\
Using a web wallet is a quick and the easiest way to store, send and receive Qwertycoin without downloading any wallet.\
\
If you would like to setup a web wallet, you can follow [this guide](/wallet/web-wallet).


# Paper Wallet

The main purpose of a paper wallet is to quickly create a wallet address to start receiving funds. But you won't be able to spend or send your funds until you setup a CLI, GUI or Web Wallet.

## Generate a Wallet Address

* Go [here](https://explorer.qwertycoin.org/#paperwallet) to go to the paper wallet generator. You will see something like this:
* To generate the wallet, click the 'Generate' button at the top of the page. A new wallet will be generated for you.
* Once generated you will be given your Qwertycoin wallet address, mnemonic seed, legacy GUI keys, view keys and spend keys.

![Screenshot of Paper Wallet Generator](/files/-M4MQ6XMK6wAVWz4IOvS)

***Make sure to copy all this information down and keep it in a safe place!***

***Do not share your mnemonic seed and keys with anyone!*** If you do they will have access to your funds.

You can safely give out your wallet address to receive funds.


# CLI Wallet

CLI Wallet is a desktop platform software programmed to run on Windows, Mac or Linux operating system using Command Line Interface.

## Download CLI Wallet Software

You can find the binary distributions [here](https://github.com/qwertycoin-org/qwertycoin/releases/latest).

Check the version of the software and make sure that it is marked with "Latest release" with "Verified" Symbol.&#x20;

!["Latest release" in green with "Verified" symbol](/files/-M4MX8tp-qXvFPQ5WvVG)

Within that version of release, scroll down and you will find a list of files that has the same version number of the latest release.

![](/files/-M4MYKryS0r-kyy6KaxV)

From here you will be able to choose the appropriate file for your chosen platform (ex. Linux, Windows, Mac). The binaries are provided in .zip files.

## Install

### Linux

Extract the .zip file

```
upzip qwertycoin-linux-v5.0.0.zip
```

### Windows

Extract the .zip file

```
qwertycoin-win64-v5.0.0.zip
```

### Mac

Download .dmg file

## Syncing the Blockchain

Running `qwertycoind` will start the network daemon which will start downloading and verifying the Qwertycoin blockchain.

This can take sometime because qwertycoind must verify every block.

### Syncing the Blockchain Using Checkpoints

You can sync the blockchain much faster by using checkpoints.

#### Setup

* Right click [this link](https://github.com/qwertycoin-org/checkpoints/raw/master/checkpoints.csv) and choose `Save link as...` to download the latest checkpoints.csv.
* Place checkpoints.csv in the same folder as your Qwertycoind daemon
* You can get Qwertycoind from here if you don't have it already: <https://github.com/qwertycoin-org/qwertycoin/releases>
* Make sure you shut down any GUI wallets, or any other instances of Qwertycoind.

#### Usage

**Linux, Apple**

* First, open a command prompt in the same directory as Qwertycoind.
* You can use the `cd` command to change to this directory. For example, `cd Downloads/qwertycoincoin-v3.0.1`
* Alternatively, your file manager may provide the ability to open a terminal in your current directory. Navigate to the folder with Qwertycoind in, and try right clicking, to see if you can open a terminal there:
* Finally, type `./Qwertycoind --load-checkpoints checkpoints.csv` in the terminal.

**Windows**

* First, open a command prompt in the same directory as Qwertycoind.
* This can easily be done by moving to the Qwertycoind directory in Windows Explorer, then typing `cmd` in the search bar and hitting enter:
* Finally, type Qwertycoind.exe --load-checkpoints checkpoints.csv in the command prompt.

#### Expected Output

If you did the steps correctly, you should see something like this output.

```
2018-May-13 11:58:39.654478 INFO    Welcome to Qwertycoind v3.0.1.1948 (HEAVY)
2018-May-13 11:58:39.654914 INFO    Module folder: Qwertycoind
2018-May-13 11:58:39.655249 INFO    Loading Checkpoints for faster initial sync...
2018-May-13 11:58:40.854979 INFO    Loaded 90695 checkpoints from checkpoints.csv
```

* Qwertycoind will then start syncing from checkpoints.
* If you are using the CLI wallet, then you can just wait for it to finish syncing, and open your wallet.
* If you are using a GUI wallet, let it finish syncing, close it down by typing `exit` in the window, then open your GUI wallet.

## Using Simplewallet

With `qwertycoind` still running in the background or another terminal prompt, open simplewallet.

### Linux/Mac

```
./simplewallet
```

### Windows

Run the `simplewallet.exe` executable from the extracted folder.

## Simplewallet Commands

### Generate a wallet

To create a wallet, type `G` and press `enter` and then answer the questions when prompted. I provided an example below.

```
What do you want to do?: g
O - open wallet
G - generate new wallet
I - import wallet from keys
R - restore backup/paperwallet
T - import tracking wallet
E - exit

Specify wallet file name (e.g., wallet.bin).
Wallet file name: testwallet
password: **********
confirm password: **********
Generated new wallet: QWC1PHRpPucbuQ9PGRG5n8TnGttFhdQ5yatecnQS9kz3F1Su2EodYiUBGVT3mwzpVfXkbTd6YEuR5J1ynrL8dBHP1SbYMGVDJ8
view key: 4f4572eacda8c813b7deb8614e0f7f317eed0de6779d38a51e4eed89eaf6f109
PLEASE NOTE: the following 25 words can be used to recover access to your wallet. Please write them down and store them somewhere safe and secure. Please do not store them in your email or on file storage services outside of your immediate control.

dialect vexed onion problems gadget jester kernels trolling boldly pegs knowledge sensible waveform bicycle guest paradise value pliers gnome quick unafraid network dwindling evaluate guest

[wallet QWC1fv]:
```

### Opening a Wallet

To open an existing wallet; type `o` and press `enter`. Enter your wallet's name and password when prompted.

### Additional Commands and What They Do

Commands:

* **address** - Show current wallet public address
* **balance**- Show current wallet balance
* **bc\_height** - Show blockchain height
* **consolidate** - Consolidate \<height> \<mixin> - consolidate all UTXOs below the \<height> to a new (set of) transactions. Use 0 for \<mixin> value to minimize the use of blockchain.
* **estimate\_fusion** - Show the number of outputs available for optimization for a given \<threshold>
* **exit** - Close wallet
* **export\_keys** - Show the secret keys of the opened wallet
* **get\_tx\_key** - Get secret transaction key for a given
* **help** - Show this help
* **incoming\_transfers** - Show incoming transfers
* **list\_transfers** - Show all known transfers
* **list\_msgs** - Show all known messages
* **outgoing\_transfers** - Show outgoing transfers
* **outputs** - Show the number of unlocked outputs available for a transaction
* **password** - Change password
* **payment\_id** - Generate random Payment ID
* **payments** - **payments \<payment\_id\_1> \[\<payment\_id\_2> ... \<payment\_id\_N>]** - Show payments \<payment\_id\_1>, ... \<payment\_id\_N>
* **purge** - Discard cache data and start synchronizing from the start
* **rescan** - Reread wallet-related data from blockchain, keeps wallet history cache data
* **save** - Save wallet synchronized data
* **send\_msg** - **send\_msg \<addr\_1> \<addr\_N> -m "Here could be your Message" \[-ttl 1 - 840 Minutes] \[-fee fee] \[-a 0 or 1]** ttl means time to live, its for self-destructing Messages only. 0 or 1 for anonymity on or off, if 0 the receiver will not see the last 16 digits from your Address.
* **set\_log-set\_log** - Change current log level, is a number 0-4
* **show\_seed** - Get wallet recovery phrase (deterministic seed)
* **sign\_message** - Sign the message
* **start\_mining** - start\_mining \[\<number\_of\_threads>] - Start mining in daemon
* **stop\_mining** - Stop mining in daemon
* **sweep\_dust** - Sweep unmixable dust
* **tracking\_key** - Show the tracking key of the opened wallet
* **transfer** - **transfer \<mixin\_count> \<addr\_1> \<amount\_1> \[\<addr\_2> \<amount\_2> ... \<addr\_N> \<amount\_N>] \[-p payment\_id] \[-f fee]** - Transfer \<amount\_1>,... \<amount\_N> to \<address\_1>,... \<address\_N>, respectively. \<mixin\_count> is the number of transactions yours is indistinguishable from (from 0 to maximum available)
* **verify\_message** - Verify a signature of the message


# GUI Wallet

## Downloading

Binary distributions can be found [here](https://github.com/qwertycoin-org/qwertycoin-gui/releases).

Select the appropriate file for the target platform (Windows, Mac, Linux).

Windows and Mac binaries are provided in `.zip` format, while Linux binaries are provided in `.tar.gz` format.

## Installing

### Installing on Linux

Extract the `.tar.gz` file (`qwertycoin-gui-linux-v5.0.0.zip`).

### Installing on Mac

Download the `.dmg` file (`qwertycoin-gui-macos-high-sierra-v5.0.0.dmg`).

### Installing on Windows

Extract the `.zip` file (`qwertycoin-gui-win64-v5.0.0.zip`).

## Starting Wallet

### Linux

Double click `qwertycoin-gui-linux-v5.0.0.zip` and run executable.

### Mac

Double click `qwertycoin-gui-macos-high-sierra-v5.0.0.dmg`.

If you have a blocking warning that says that this app comes from an unknown developer, right-click on the app, then click Open > Open.

### Windows

Double click `qwertycoin-gui-win64-v5.0.0.zip` and run the executable from the extracted files.

## Creating New Wallet Address and a Wallet File&#x20;

On the start screen you will have two options. Once is to create a new wallet and the second is to open an existing one. Click 'Create New Wallet'.

A popup will then appear with a mnemonic phrase. Repeat the phrase in the box below and click 'OK'.

**Make sure to write down the mnemonic phrase and store it in a safe place because that is how you restore your wallet!**

## Synchronizing the Blockchain

Once the wallet is created it will automatically start syncing from a public node to ensure that you can connect with the network quickly without using excessive storage.

You will not be able to use the wallet until it is fully synced.

## Using Wallet

### Encrypting Wallet

By default your wallet is not encrypted. To encrypt it with a password go to the 'Wallet' tab and click 'Encrypt Wallet'. Next enter a password and confirm it then press 'OK' to finish.

### Viewing Wallet Address

Your wallet address can be seen at the top of the wallet as a string of numbers and letters beginning with 'QWC'.

### Exporting Keys

It is important to export your keys and save them in a safe place. In the event that your wallet crashes or becomes corrupted, the keys are the only way to restore a wallet and recover the funds that it holds.

To export, go to the 'Wallet' tab and click 'Export private key'. Copy your View and Spend secret keys and store them in a safe place.

**Do not share these with anyone!**

### Viewing Wallet Balance

You can view your wallet balance by pressing the 'Overview' button on the left hand side of the wallet.

### Sending Qwertycoin

You can send QWC by clicking the 'Send' button on the left side of the wallet. To send QWC paste the wallet address of the person you are sending funds to in the 'Pay to' box.

Next enter the amount that you would like to send into the amount box.

When you are done click the 'Send' button at the bottom left of the screen.

### Saving Wallet

To safely close your wallet click the 'x' button at the top of the wallet.

### Restoring from Backup

#### Private View and Spend Keys

You can easily restore your wallet with your private view and spend keys.

To restore, click on 'Wallet' tab and press 'Import private key'. Paste in your private key and enter where you would like to save the file and click 'OK'.

The wallet will be restored and begin syncing with the blockchain.

#### 25 Word Mnemonic Seed

If you want to recover your wallet with your mnemonic phrase, it's pretty easy as well.

To restore, go to the 'Wallet' tab and click 'Restore from mnemonic seed'. Enter your phrase and indicate where you would like to save the new wallet file. Click 'OK' when you are finished.

The wallet will be restored and begin syncing with the blockchain.

## ***(Optional)*** Compiling Wallet from Source Code

### Prerequisites

* You will need the following packages: boost (1.55 or higher), QT Library (5.9.0 orhigher) cmake, git, gcc (4.9 or higher), g++ (4.9 or higher), make, and python. Most of these should already be installed on your system.
* For example on ubuntu: `sudo apt-get install build-essential python-dev gcc g++ git cmake libboost-all-dev qtbase5-dev`
* After this you can compile your Qwertycoin

### 1. Clone Wallet Source Code

`git clone https://github.com/qwertycoin-org/qwertycoin-gui`

### 2. Set Symbolic Link to Coin Sources at the Same Level as Source

### For example:

`ln -s ../qwertycoin cryptonote`

Alternative way is to create git submodule:

`git submodule add https://github.com/qwertycoin-org/qwertycoin.git cryptonote`

### 3. Build

`mkdir build && cd build && cmake .. && make`


# Zero Wallet

## Downloading

Binary distributions can be found [here](https://github.com/qwertycoin-org/qwertycoin-zero/releases).

Select the appropriate file for the target platform (Windows, Mac, Linux).

Windows and Linux binaries are provided in `.zip` format, while Mac binaries are provided in `.dmg` format.

## Installing

### Installing on Linux

Extract the `.zip` file (`qwertycoin-zero-linux-v1.1.3.zip`).

### Installing on Mac

Download the `.dmg` file (`qwertycoin-zero-macos-high-sierra-v1.1.3.dmg`).

### Installing on Windows

Extract the `.zip` file (`qwertycoin-zero-win64-v1.1.3.zip`).

## Starting Wallet

### Linux

Double click `qwertycoin-zero-linux-v1.1.3.zip` and run executable.

### Mac

Double click `qwertycoin-zero-macos-high-sierra-v1.1.3.dmg`.

If you have a blocking warning that says that this app comes from an unknown developer, right-click on the app, then click Open > Open.

### Windows

Double click `qwertycoin-zero-win64-v1.1.3.zip` and run the executable from the extracted files.

## Creating New Wallet Address and a Wallet File

On the start screen you will have two options. Once is to create a new wallet and the second is to open an existing one. Click 'Create New Wallet'.

![Initial Screen of Zero Wallet](/files/-M3HvPq7WCtCKz8uyd2R)

A popup will then appear with a mnemonic phrase.

**Make sure to write down the mnemonic phrase and store it in a safe place because that is how you restore your wallet!**

## Synchronizing the Blockchain

Once the wallet is created it will automatically start syncing from a remote node to ensure that you can connect with the network quickly without using excessive storage. The Zero wallet doesn't download the entire blockchain like the GUI wallet that requires you to download the entire blockchain before using the wallet.

You will not be able to use the zero wallet until it has finished syncing.

![](/files/-M4MT6Ncs0K7M5G0AJnI)

## Using Wallet

### Encrypting wallet

By default your wallet is **not** encrypted. To encrypt it with a password click the 'Set password' button under your wallet address at the top of the screen. Click 'OK' to confirm.

If you lose your password, you cannot recover it. Please write down the password somewhere secure.

![Encrypt your wallet with password](/files/-M4MUUZb21aOZvFTGBlu)

### Viewing Wallet Address and Balance

Your wallet address can be seen at the top of the wallet as a string of numbers and letters beginning with 'QWC'.

You can view your wallet balance by pressing the 'Overview' button on the left hand side of the wallet.

![](/files/-M4MUO9pNCBW1550GMQQ)

### Exporting Keys

It is important to export your keys and save them in a safe place. In the event that your wallet crashes or becomes corrupted, the keys are the only way to restore a wallet and recover the funds that it holds.

To export, go to the 'Wallet' tab and click 'Export private key'. Copy your View and Spend secret keys and store them in a safe place.

![Do not share this information with anyone!](/files/-M7L3nWf2Iv_8VPIwTyn)

### Sending Qwertycoin

1.You can send QWC by clicking the 'Send' button on the left column of the wallet.&#x20;

2\. Paste the recipient's  wallet address under the 'Pay to' box. If you have a saved contacts, you can also select the address from the contact list.

3\. Enter the amount that you would like to send into the amount box.

4\. \[Optional]: You can also set the priority of the transaction (pay a higher fee to send it faster) or add more anonymity to it.

5\. When you are done, click the 'Send' button at the bottom left of the screen.

![Sending QWC](/files/-M4MUgbltdbxyG-ZVI5o)

### Saving Wallet

To safely close your wallet click the 'x' button at the top of the wallet.

### Restoring from Backup

#### Private View and Spend Keys

You can easily restore your wallet with your private view and spend keys.

To restore, click on 'Wallet' tab and press 'Import private key'. Paste in your private key and enter where you would like to save the file and click 'OK'.

The wallet will be restored and begin syncing with the blockchain.

![](/files/-M4MUZ-20KMYzxJo4roJ)

#### Mnemonic Seed

If you want to recover your wallet with your mnemonic phrase, it's pretty easy as well.

To restore, go to the 'Wallet' tab and click 'Restore from mnemonic seed'. Enter your phrase and indicate where you would like to save the new wallet file. Click 'OK' when you are finished.

The wallet will be restored and begin syncing with the blockchain.

![](/files/-M4MTGgXehJFbeK15KOC)

## ***(Optional)*** Compiling wallet from source

### Prerequisites Linux (Ubuntu)

* You will need the following packages: boost (1.64 or higher), QT Library (5.9.0 or higher) cmake (3.10 or higher), git, gcc (4.9 or higher), g++ (4.9 or higher), make, and python. Most of these should already be installed on your system.
* For example on ubuntu: `sudo apt-get install build-essential python-dev gcc g++ git cmake libboost-all-dev qtbase5-dev`
* After this you can build your Qwertycoin Zero Wallet.

#### Building

* After installing dependencies run simple script:

```
git clone --recurse-submodules https://github.com/qwertycoin-org/qwertycoin-zero
cd ./qwertycoin-zero
mkdir ./build
cd ./build
cmake ..
cmake --build . --config Release
```

* If all went well, it will complete successfully, and you will find all your binaries in the `./build/Release directory.`

### Prerequisites Mac

* Install Xcode and Developer Tools
* Install [cmake](https://cmake.org/). See [here](https://stackoverflow.com/questions/23849962/cmake-installer-for-mac-fails-to-create-usr-bin-symlinks) if you are unable to call `cmake` from the terminal after installing
* Install git

#### Building

* After installing dependencies run simple script:

```
git clone https://github.com/qwertycoin-org/qwertycoin-zero
cd ./qwertycoin-zero
mkdir ./build
cd ./build
cmake ..
cmake --build . --config Release
```

* If all went well, it will complete successfully, and you will find all your binaries in the ./build/Release directory.

### Prerequisites Windows

* Install \[Visual Studio 2017 Community Edition]\(Visual Studio 2017 Community Edition).
* When installing Visual Studio, it is **required** that you install **Desktop development with C++** and the **VC++ v140 toolchain** when selecting features. The option to install the v140 toolchain can be found by expanding the "Desktop development with C++" node on the right. You will need this for the project to build correctly.
* Make sure that bundled cmake version is 3.10 or higher.

#### Building

* From the start menu, open "x64 Native Tools Command Prompt for vs2017" and the run the following commands:

```
git clone https://github.com/qwertycoin-org/qwertycoin-zero
cd qwertycoin-zero
md build
cd build
cmake -G "Visual Studio 15 2017 Win64" ..
cmake --build . --config Release
```

* If all went well, it will complete successfully, and you will find all your binaries in the `.\build\Release` directory.
* Additionally, a `.sln` file will have been created in the `build` directory. If you wish to open the project in Visual Studio with this, you can.


# Mobile Wallet

The Qwertycoin mobile wallet is currently only available on Android. The iOS version is complete but Apple is making it difficult to add it to the App Store. So we advise iOS users use the [web wallet](https://myqwertycoin.org/) for now.

## Installing the Mobile Wallet App

* Go to the Google Play store and search for Qwertycoin wallet. Or you can click [this link](https://play.google.com/store/apps/details?id=org.qwertycoin.wallet) to bring you there.
* Once you are there click the 'Install' button to add the app to your phone.

## Creating a New Wallet Address

* Click on the newly installed Qwertycoin wallet app and it will bring you to this home screen:
* Next click the 'Create a wallet' button to begin. You will be prompted to create a password. Enter and confirm the password then press 'Use this password' to continue.
* Now you will need to save your private keys. Write these down and save them in a safe place. **Do not share these with anyone!!** Once you have written them down click the "I have written my seed phrase down button" and then the 'I understand. Continue.' button to finish.
* Once you have done that you will be brought to the home screen.

## Using the Wallet

The mobile wallet works just like the [web wallet](https://myqwertycoin.org/). You can learn about all the different features below.

### Sending Qwertycoin

* To send QWC click on the 'Send' tab.
* Next enter the address that you want to send the Qwertycoin too. You can paste in the address or use the camera function to scan the receivers QR code.
* After that enter the amount you want to send. You can also add a payment ID if you like.
* Once you have done that and have confirmed the information you entered, you can click the 'Send' button to send your funds.

### Receiving Qwertycoin

* To receive QWC click on the 'Receive' tab.
* You can give the sender your wallet address or they can scan your wallet's QR code. You can personalize the QR code with the amount, the recipient's name, and the transaction description if you want. If you do so click the 'Update' button to update your QR code.

### Exporting keys

* To export your private keys click on the 'Export' tab.
* From there you can export your private keys or the mnemonic phrase.

### Settings

* To access the settings, click on the 'Settings' tab.
* From there you will be able to change the app's language, update the speed at which the wallet syncs, and update the scanning height of the wallet. You can also change your wallet's password, delete contacts and delete the stored wallet data on the app.

## Importing an Existing Wallet Address

* You can import an existing wallet by a variety of methods. You can import from keys, from a file, from a mnemonic phrase, and from a QR code.
* Once you have made your choice, click on the corresponding button and follow the steps listed there. Then click 'Import' once you are finished.


# Web Wallet

You will have two options for using the Qwertycoin web wallet. You can create a new wallet or you can import an existing one.

## Option 1: Creating a New Wallet Address

### 1. Generate a Wallet Address

Go to the website [here](https://myqwertycoin.com/#!index) and click the 'Create' button at the top right of the web page.

Once the wallet is done being generated it will prompt you to enter a password to protect your wallet. Enter a secure password and confirm it then press the 'Use this password' button.

### 2. Save Private Credentials

You have two options to save the credentials that grant a full access to your wallet address. You can download a PDF copy that contains QR codes for your keys or you can write down your 'Private Key' and 'Mnemonic Phrase' on a piece of paper.

Whichever you choose, make sure that you store it in a safe location. ***DO NOT SHARE THESE WITH ANYONE!*** Otherwise they would be able to steal your cryptocurrency.

Once you have saved your private keys press the 'I understand. Continue.' button.

### Interacting with Your Wallet

From the account home page you are able to do a number of things such as:

* Send and receive Qwertycoin
* Export your wallet
* Change wallet settings (ex. change wallet update speed, change wallet password, delete wallet)
* Check network stats
* Donate to help fund web wallet and Qwertycoin development

## Option 2: Importing an Existing Qwertycoin Wallet Address

### 1. Import Wallet Credentials

Go to the website [here](https://myqwertycoin.com/#!index) and click the 'Import a wallet' button at the top right of the webpage.

### 2. Choose an Import Method

You can import an existing wallet from your private keys, wallet file, mnemonic phrase or from a QR code.

Once you have made your choice you will be asked to create and confirm a password to protect your wallet and choose a height to sync the blockchain from. Also, depending on your choice, you will be asked to enter your keys, mnemonic phrase, attach wallet file, or scan QR code.

Once you have entered the required information you can press 'Import'. You will then be able to interact with your Qwertycoin wallet.


# RPC Wallet

## Overview

Qwertycoin RPC Wallet is a HTTP server which provides JSON 2.0 RPC interface for Qwertycoin payment operations and address management.&#x20;

Qwertycoin RPC Wallet allows you to accept incoming payments, generate an address for each user via Qwertycoin RPC Wallet JSON RPC API and much more. You can find detailed description of every method [here](/api/untitled-2).

## Download Qwertycoin RPC Wallet

Before you begin the integration process you will need to first download the Qwertycoin RPC Wallet. You can find the download [here](https://qwertycoin.org/wallet/).

Or if you would rather build it from source code, you can do that [here](https://github.com/qwertycoin-org/qwertycoin).

## Generate a new wallet

Once you have compiled or built the RPC wallet you are going to want to generate a container. The container file is the only file that stores all the data required to run your service. It contains the user addresses and private keys required to operate them. **Make sure to backup this file regularly**.

To generate a new container you should run the following command in your terminal:

```
./walletd --container-file=<mycontainer> --container-password=<mypassword> --generate-container
```

where:

* &#x20;is the container file name and a path to it (relative or absolute); path is optional in this argument, specifying only a container's name will result in new file located in the same folder as RPC Wallet
* &#x20;is a secret password for the new wallet file. Whichever you like;
* **--generate-container** option tells RPC wallet to generate container file and exit.

**Note:** if exists Qwertycoin RPC Wallet will show you the notification and will ask you to provide a different name.

If the container generation was successful you will get a corresponding message with your new Qwertycoin address. At the same time, Qwertycoin RPC Wallet will save your container on the local disk (in the same folder where Qwertycoin RPC Wallet is located) and shut down.

## Starting Qwertycoin RPC Wallet

There are two ways to start Qwertycoin RPC wallet:

### 1. Start with a remote connection to the Daemon

Starting with a remote connection allows you to bind your Qwertycoin RPC Wallet to a remote Qwertycoin daemon (Qwertycoind). This type of connection allows you to start Qwertycoin RPC Wallet on a relatively slow machine while a heavy loaded daemon runs on a separate more powerful server.

* For local daemons use localhost or 127.0.0.1 as an IP address.
* For remote daemons specify the remote daemon's IP address.
* The default Qwertycoin daemon ports are 8196 and 8197.

You can use the following command to start Qwertycoin RPC Wallet with a remote connection:

```
./walletd --container-file=mycontainer --container-password=mypassword --daemon-address=remote_ip --daemon-port=8197
```

**Note:** The Qwertycoin daemon (Qwertycoind) should be running before you start the RPC wallet.

**Note:** Qwertycoin RPC Wallet will still provide some functionality even if Daemon server fails. For example, you will be able to generate addresses for your users.

### 2. Start as in-process node

If you don't want to start the RPC Wallet with a remote daemon, you can start it with an in-process node instead. This allows you to start the RPC Wallet out-of-box with no external daemon required. You will still get a fully functional node for Qwertycoin network inside Qwertycoin RPC Wallet. You don't have to download or install anything besides Qwertycoin RPC Wallet to use this feature. This approach can help reduce the overhead cost required for infrastructure maintenance.

You can use the following command to start Qwertycoin RPC Wallet with an in-process node:

```
./walletd --container-file=mycontainer --container-password=mypassword --local
```

## How to configure Qwertycoin RPC Wallet

You can use both the command line and a config file to configure your RPC Wallet. A config file allows you to configure your settings only once and use "--config" option further. The command below launches Qwertycoin RPC Wallet with a specific config file:

### 1. Starting with a Config File

The command below launches Qwertycoin RPC Wallet with a specific config file:

```
./walletd --config=/home/Downloads/myconfig.conf
```

To get help on available options run:

```
./walletd -h
```

Please note, Qwertycoin RPC Wallet config file may consist only of these options:

| Option             | Description                                                                                                                         | Config Example                          | Console Example                         |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | --------------------------------------- |
| bind-address       | Which address to bind Qwertycoin RPC Wallet to. Default value is 0.0.0.0                                                            | bind-address = 127.0.0.1                | --bind-address=127.0.0.1                |
| bind-port          | Which port to bind Qwertycoin RPC Wallet to. Default value is 8070                                                                  | bind-port = 8071                        | --bind-port=8071                        |
| daemon-address     | Qwertycoin daemon (Qwertycoind) address for remote daemon connection infrastructure                                                 | daemon-address = 127.0.0.1              | --daemon-address=127.0.0.1              |
| daemon-port        | Qwertycoin daemon (Qwertycoind) port for remote daemon connection infrastructure. Default Qwertycoin daemon ports are 8196 and 8197 | daemon-port = 8197                      | --daemon-port=8197                      |
| container-file     | - - Mandatory\*\*. Your container's file name                                                                                       | container-file = mycontainer            | --container-file=mycontainer            |
| container-password | - - Mandatory\*\*. Your container's password                                                                                        | container-password = mypassword         | --container-password=mypassword         |
| log-file           | A name of log file that you want to use for logging. Default is walletd.log                                                         | log-file = mylog.log                    | --log-file=mylog.log                    |
| server-root        | Working directory that you wish to use for Qwertycoin RPC Wallet. Default is current working directory.                             | server-root = /home/Downloads/RPCWallet | --server-root=/home/Downloads/RPCWallet |
| log-level          | Level of logging. Default is 1.                                                                                                     | log-level = 2                           | --log-level=2                           |
| testnet            | Allows you to run Qwertycoin RPC Wallet in testnet.                                                                                 | testnet = no                            | --testnet=no                            |
| local              | Option that allows you to start Qwertycoin RPC Wallet as an in-process node                                                         | local                                   | --local                                 |

Here's an example of a config file:

```
  $ cat rpc_wallet.conf
  container-file = mycontainer
  container-password = mypassword
  daemon-port = 8197
  bind-port = 8050
  testnet = no
```

### 2. Starting with console arguments

You may specify Qwertycoin config directly through console arguments. Here's the same example as above in console:

```
./walletd --container-file=mycontainer --container-password=mypassword --daemon-port=8197 --bind-port=8050 --testnet=no
```

**Note:** config file's path is relative to current working directory, not server root.

**Note:** options "container-file" and "container-password" should ALWAYS be set (in either command line or config file mode).

**Note:**' "container-file" and "log-file" options are relative to "server-root". "server-root" default is the current working directory.

## How to run the Qwertycoin RPC Wallet

The Qwertycoin RPC wallet can be started in both daemon and console modes.

* **Daemon mode** - Qwertycoin RPC Wallet is launched in the background, while you can continue to work with a console window.
* **Console mode** - Qwertycoin RPC Wallet is launched and prints log messages on the screen.

**The Qwertycoin RPC wallet starts in console mode by default.**

### Start as daemon (UNIX only)

To start RPC wallet as daemon just set "--daemon" (or short "-d") option.

```
./walletd --container-file=mycontainer --container-password=mypassword --daemon
```

**Note:** it's a common practice for daemons to set in the server's root directory.

Server root is the directory where RPC Wallet stores all its files. All relative paths in RPC Wallet configuration are relative to the server root directory.

### Start as service (Windows only)

To run RPC wallet as a service on Windows you have to do the following:

1. Create a config file and place it in the same directory where your RPC wallet's executable resides in.

A note for Windows Users: In case the server root in config file is not specified all paths should be ABSOLUTE. If you set server root you can use relative paths (relative to your server root);

1. Register your Qwertycoin RPC Wallet as a service. To do so, run the following command as an ADMINISTRATOR:

```
walletd.exe --register-service
```

1. After you see message about successful service registration you can run it in your Services panel.

### Uninstall service (Windows only)

If you want to delete RPC Wallet you have to unregister the Windows service first (if you have registered it before). Run as an ADMINISTRATOR:

```
walletd.exe --unregister-service
```

## Qwertycoin RPC Wallet JSON RPC API

The Qwertycoin RPC Wallet API allows you to create addresses for your users, accept and send transactions and much more.

A detailed description for every Qwertycoin RPC Wallet API method can be found [here](https://docs.qwertycoin.org/guides/wallets/developer/api/Wallet-RPC-API).


# Wallet Backup

## 5 things to remember when backing up your wallet

1. Keep the wallet file
2. Keep a record of wallet address
3. Keep a record of private key(or Spend Key) - Must
4. Keep a record of view Key
5. Keep a record of mnemonic seeds - Must

## Backup your Wallet using CLI Wallet

coming soon

## Backup your Wallet using GUI Wallet

1. Open Your wallet
2. Go to **Wallet** -> **Export private key**
3. Save your **Private keys** (You need this for recovery your Wallet via GUI Wallet) and the **Spend Secret Key** and the **View Secret Key** (You need this for recovery your Wallet with CLI Wallet).

![](https://cdn.qwertycoin.org/images/other/github/export_privatekeys.PNG)

## You can also backup your Wallet with SEED

**Note**: GUI Seed is only valid for GUI Wallet! GUI Wallet Seed and Paper wallet Seeds are different.

1. Open Your wallet
2. Go to **Wallet** -> **Show mnemonic seed**
3. Save your seed

![](https://cdn.qwertycoin.org/images/other/github/export_seed.PNG)


# Wallet Recovery

Recovery your Wallet in case of broken Software Updates or accidentally deleted wallet file with **Seed** (mnemonic phrase), **Private Key** (GUI Private Key) or with **Spend Secret Key** and **View Secret Key**.

## Recovering your Wallet using CLI Wallet:

coming soon

## Recovering your GUI Wallet using private key:

1. Open Qwertycoin GUI Software
2. Go to **Wallet** -> **Import private key**
3. Insert your **Private keys**
4. Select folder **Where to save new wallet file**
5. Click on **OK**

![](https://cdn.qwertycoin.org/images/other/github/import_privatekeys.PNG)

## You can also backup your Wallet with SEED:

**Note**: Only GUI Seed is valid for GUI Wallet! GUI Wallet Seed and Paper wallet Seeds are different.

1. Open Qwertycoin GUI Software
2. Go to **Wallet** -> **Restore from mnemonic seed**
3. Enter your Mnemonic
4. Select folder **Where to save new wallet file**
5. Click on **OK**

![](https://cdn.qwertycoin.org/images/other/github/import_seed.PNG)

## Recovering Paper Wallet

1. Go to [paperwallet.qwertycoin.org](https://paperwallet.qwertycoin.org/)
2. Select the **Restore** tab and **Enter your Passphrase**
3. Click on **RESTORE WALLET**

Download this page


# Wallet Update

If you see a message when open your Wallet?

![](https://cdn.qwertycoin.org/images/other/github/updateinform.jpg)

Or read a message that a new wallet is available you can follow [this guide](https://docs.qwertycoin.org/guides/wallets/Wallet-Backup) so safely update.

## First Backup your Wallet

This step is not mandatory but recommended (for worst case scenario). You can copy your wallet file and move it to a second folder (maybe on a USB Stick or other). Please follow [this guide](https://docs.qwertycoin.org/guides/wallets/Wallet-Backup) for backup your Wallet using CLI-Wallet or GUI Wallet

## Update Wallet Software

1. Go to [qwertycoin.org](https://qwertycoin.org/wallet/)
2. Download your new GUI or CLI Wallet
3. Unzip it

Optional:

## Recovery your Wallet

Please follow [this guide](https://docs.qwertycoin.org/guides/wallets/Wallet-Recovery)


# Sign and Verify Messages

You can sign a message using the CLI sign\_message command like this

`sign_message <"Your Message">`

The signature will then be printed to the screen. You may then provide this signature to someone else to verify. The command to verify is:

`verify_message <"Your Message"> <address> <signature>`

### Try it yourself

You may reproduce those steps and make sure you get the same results: Create a wallet using the seed

> dodge ouch present sake aquarium mystery woken cell aztec duplex inundate vogue vinegar afloat rumble aphid siren sowed junk otter potato argue banjo bays duplex

**(do not use this seed for anything else except this test)**

Open this wallet and type `sign_message "My Message"`

> SigV1fYJ8t1rf4UkNATJFK7fxmJAcg9GCBGG9dXrr7bs4KZNBjnFgNJ33256MFRX7AG2q1Kdi8XQDruMkZbiNwXwAsLb9

This is your signature. Then verify the signature:

`verify_message "My Message" QWC1LxPvCVibmBUAaJu1hm8xk35UjJqYvTA4AisTSerheZ53Yse3SwAg8U7WkPcDAxZH1QpqDVxBcKvDUmMUuRJuAEZa9HzZm9 SigV1fYJ8t1rf4UkNATJFK7fxmJAcg9GCBGG9dXrr7bs4KZNBjnFgNJ33256MFRX7AG2q1Kdi8XQDruMkZbiNwXwAsLb9`

> Valid signature from QWC1LxPvCVibmBUAaJu1hm8xk35UjJqYvTA4AisTSerheZ53Yse3SwAg8U7WkPcDAxZH1QpqDVxBcKvDUmMUuRJuAEZa9HzZm9

If you sign this text yourself you will probably get a different signature than me. This is because the signing is not deterministic. Nevertheless, you should be able to verify my signature without problems.

## Sign & Verify using the GUI Wallet

1. Create a new wallet from the example seed above
2. Navigate to File > Sign message Write My Message in the the message field at the top.
3. Copy the generated "Signature" into the verification field (Verify message) or navigate to File > "Verify signed message" Copy the message into the verification "message" field. Paste the Qwertycoin address in the "Address" field Your Message will be verified.

![](https://cdn.qwertycoin.org/images/other/signverify.PNG)


# Mining Options

Mining is essentially the process of using your computer to help verify and secure a cryptocurrency network, in our case, it is the Qwertycoin network. By doing this, you will be rewarded with some Qwertycoin.

If you want to learn about cryptocurrencies, mining is a great place to start!

## How to Mine Qwertycoin?

**Please note**: Unfortunately because of some bad people using mining software in malware, most antivirus software will detect the programs below as unsafe.

It is **likely** you will need to add exceptions and exclusions to your antivirus software in order to make things work properly.

Unless you know what you are doing, please **only** download from the links below.

There are currently a few different ways in which you can start mining Qwertycoin:

## 1. [XMR-Stak](https://github.com/fireice-uk/xmr-stak)

XMR-Stak is a unified miner, which means the same program will be used to mine with both your CPU and your GPU. It will automatically detect your hardware and adjust the settings accordingly.

Please follow [this guide](/mining/xmr-stak) to start mining Qwertycoin with XMR-Stak.

If you're on Linux, check [this guide](/mining/xmr-stak-linux).

## 2. [XMRig](https://github.com/xmrig/xmrig)

XMRig is a little bit different to XMR-Stak, you need to download a CPU and GPU miner separately and run two separate instances in your computer. One will use your CPU and the other one will use your GPU.

Please follow [this guide](/mining/xmrig) to start mining Qwertycoin with XMRig.

## 3. Cloud Mining

Please follow [this guide](/mining/cloud-mining) to mine with the cloud.

## 4. SBC/Raspberry PI Mining

Please follow [this guide](https://docs.qwertycoin.org/guides/mining/Mining-with-SBC) to mine with a SBC/Rasperry Pi.

## 5. Mobile Mining

**Please note**: Using your mobile to mine Qwertycoin is not effective and should only be done for the lulz. It may also cause the phone to overheat and result in premature silicon degradation, shortening the lifespan of your phone.

Please follow [this guide](/mining/mobile-mining) to mine with your mobile phone.

## 6. Mine with your Daemon

You can do Solo mining with your Qwertycoind.exe (CLI-Download).

1. Open your Qwertycoind.exe
2. Wait for 100% synchronize
3. Type `start_mining <address> <threads>` (`start_mining QWC1N7egU2BQQ1dLHQZfjd5JvmGNd4LiT9wX66QL4ZNTNZkNMTxr54C3wrJK81Ho2RjodprfHhGE6ckKLCkLx4hV9FR8YoRxzh 8`

## Pools

You may view a comprehensive list of pools [here](https://explorer.qwertycoin.org/#pools). Have Questions or Need Help?

Check out our [Discord](https://qwertycoin.org/discord) or [subreddit](https://www.reddit.com/r/QWERTYCOIN/) to get in touch.


# Cloud Mining

## Setting up EC2 instance

### Create AWS Account

* Create an account with [Amazon AWS](https://portal.aws.amazon.com/billing/signup?nc2=h_ct\&src=default\&redirect_url=https%3A%2F%2Faws.amazon.com%2Fregistration-confirmation#/start).

### Setup an Instance

* On the home page, click the services tab and then go to compute and click 'EC2'. Once you are there you will chose your region on the top of the page in the header section. Next click the 'Launch Instance' button at the center of the page and then select an AMI. For this tutorial I am using Ubuntu Server 16.04 LTS.
* Next you will need to choose an instance type. I am just going to use the preselected t2.micro for the tutorial. For the purpose of mining, the Compute Optimized and the GPU instances are your best choices.
* You can then skip to step six and under the source tap select my IP.
* Next press Review and Launch and then create a new key pair to be able to connect with your instance. Once the instance is live, you can connect to your instance using an SSH through Terminal, PuTTY or similar program.
* The final step is to install your mining software of choice and start mining! With a compute optimized c4.8xlarge instance you will get about 750 H/s when mining for Cryptonote currencies such as Qwertycoin.

### SSH into the Isnstance

1. Download key pair that you created earlier
2. Make sure you are in the same directory as the key and allow permissions

`chmod 600 <key-name>.pem`

1. SSH into instance

`ssh -i <key-name>.pem ubuntu@<EC2-IP-Address>`

## Install Mining Software

1. In the terminal install dependencies by running this command

`sudo apt install libmicrohttpd-dev libssl-dev cmake build-essential libhwloc-dev git`

1. Clone the package

`git clone https://github.com/fireice-uk/xmr-stak.git`

1. To remove donations, type

`nano xmr-stak/xmrstak/donate-level.hpp`

Change `constexpr double fDevDonationLevel = 2.0 / 100.0;`

to `constexpr double fDevDonationLevel = 0.0 / 100.0;`

1. Make build directory

`mkdir xmr-stak/build`

1. Move into the new directory

`cd xmr-stak/build`

1. Run cmake

`cmake .. -DCUDA_ENABLE=OFF -DOpenCL_ENABLE=OFF`

1. Finish building it

`make install`

1. XMR-Stak will now be located in `/home/user/xmr-stak/build/bin`
2. Move to where it's at

`cd bin`

1. Launch XMR-Stak

`./xmr-stak`

1. Check [XMR-Stak Setup and Configuration](https://docs.qwertycoin.org/guides/mining/guides/mining/XMR-Stak)


# Creating a Mining Pool

## Prepare Server

### Create AWS Account

Create an account with [Amazon AWS](https://portal.aws.amazon.com/billing/signup?nc2=h_ct\&src=default\&redirect_url=https%3A%2F%2Faws.amazon.com%2Fregistration-confirmation#/start).

### Setup an Instance

On the home page, click the services tab and then go to compute and click 'EC2'. Once you are there you will chose your region on the top of the page in the header section. Next click the 'Launch Instance' button at the center of the page and then select an AMI. For this tutorial I am using Ubuntu Server 16.04 LTS.

Next you will need to choose an instance type. I am just going to use the t2.large for the tutorial.

You can then skip to step six and under the source tap select my IP.

Next press Review and Launch and then create a new key pair to be able to connect with your instance. Once the instance is live, you can connect to your instance using an SSH through Terminal, PuTTY or similar program.

### SSH into the Instance

1. Download key pair that you created earlier
2. Make sure you are in the same directory as the key and allow permissions

```
chmod 600 <key-name>.pem
```

1. SSH into instance

```
ssh -i <key-name>.pem ubuntu@<EC2-IP-Address>
```

### Install Dependancies

```
sudo apt-get install aptitude
```

```
sudo aptitude update
```

```
sudo aptitude install –with-recommends build-essential autotools-dev autoconf automake libcurl3 libcurl4-gnutls-dev git make cmake libssl-dev pkg-config libevent-dev libunbound-dev libminiupnpc-dev doxygen supervisor jq libboost-all-dev htop
```

```
sudo apt-get install build-essential libtool autotools-dev autoconf pkg-config libssl-dev
```

```
sudo apt-get install libboost-all-dev git npm nodejs nodejs-legacy libminiupnpc-dev redis-server
```

```
add-apt-repository ppa:bitcoin/bitcoin
```

```
sudo apt-get update
```

```
apt-get install libdb4.8-dev libdb4.8++-dev
```

```
curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh -o install_nvm.sh
```

```
bash install_nvm.sh
```

* After npm is installed you will have to log out and then back into your instance and continue installing dependancies.

```
source ~/.profile
```

```
nvm install 0.10.48
```

```
nvm use 0.10.48
```

```
nvm alias default 0.10.48
```

```
nvm use default
```

* Install Apache2 for hosting the front end.

```
sudo apt-get update
```

```
sudo apt-get install apache2
```

* Adjust firewall to allow Apache full.

```
sudo ufw allow 'Apache Full'
```

## Install Qwertycoin

```
git clone --recurse-submodules https://github.com/qwertycoin-org/qwertycoin
```

```
cd ./qwertycoin
```

```
mkdir ./build
```

```
cd ./build
```

```
cmake ..
```

```
cmake --build . --config Release
```

### Start Daemon and Let It Sync

```
 cd build/src
```

```
tmux
```

```
./qwertycoind
```

* Let the blockchain sync before continuing
* To sync the blockchain faster follow [this guide](https://docs.qwertycoin.org/guides/mining/guides/daemon/Load-Checkpoints)
* control b + d to exit tmux

### Start Simple Wallet and Follow Steps to Generate a New Wallet Address

* After you generated a new wallet exit it and run this:

```
tmux
```

```
./simplewallet --wallet-file <wallet_name> --password <wallet_password> --rpc-bind-port 8198
```

* control b + d to exit tmux

## Install Pool Software

### Install Dependancies

```
sudo apt-get install libssl-dev libboost-all-dev
```

```
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash
```

```
sudo apt-get install -y nodejs
```

```
sudo add-apt-repository ppa:chris-lea/redis-server
```

```
sudo apt-get update
```

```
sudo apt-get install redis-server
```

* Clone repository

```
git clone https://github.com/dvandal/cryptonote-nodejs-pool.git pool
```

```
cd pool && npm update
```

### Pool Configuration

* Copy the `config_examples/qwertycoin.json` file to `config.json`

```
cp config_examples/qwertycoin.json config.json
```

Change the following variables: Line 2 - Pool host to your pools IP Address Line 30 - Your simplewallet address that you generated Line 138 - Set your API password Line 125-127 - (Optional) change pool fees

### Copy website\_example Files to html directory

```
sudo cp -rf js/ lang/ pages/ themes/ admin.html config.js index.html /var/www/html
```

### Configuring website\_example

* Edit `config.js` to use your pool's specific configuration

### Start the Mining Pool

```
cd && cd pool
```

```
node init.js
```

* Your pool should now be visible at your server's IP address
* You can visit your admin page by appending `admin.html` to your server IP address in your browsers search bar like so:

`http://server-ip-address/admin.html`

* Your admin password is your API password you set earlier in `config.json`


# Mining With SBC

The following guide will show you how to compile a CPU miner (xmrig) for SBCs like the Raspberry Pi.

What are the benefits of compiling xmrig from scratch?

* You'll have the most up-to-date version of xmrig
* You can optimize xmrig for specific SBCs (improves hash rate)
* You can compile xmrig with different releases of GCC (may improve hash rate)
* It's possible to disable certain features of xmrig (more info)

### Setup

First we want to make sure your SBC's software is up to date:

`sudo apt-get update && sudo apt-get upgrade`

After that's done, we're going to install some tools that are important for the process:

`sudo apt-get install git build-essential cmake make libuv1-dev libmicrohttpd-dev gcc g++ automake autoconf pkg-config libcurl4-openssl-dev libjansson-dev libssl-dev libgmp-dev`

### Compiling xmrig

At this step we'll obtain the latest binaries of xmrig and create a directory called build:

`cd ~` `git clone https://github.com/xmrig/xmrig.git` `cd xmrig && mkdir build && cd build`

Now we specify the build flags to optimize xmrig for your SBC in particular. You'll have to only choose one of these:

* for any SBC:

`cmake ..`

* for the Raspberry Pi 2:

`cmake .. -DCMAKE_C_FLAGS="-mcpu=cortex-a7 -mtune=cortex-a7" -DCMAKE_CXX_FLAGS="-mcpu=cortex-a7 -mtune=cortex-a7"`

* for the Raspberry Pi 3:

`cmake .. -DCMAKE_C_FLAGS="-mcpu=cortex-a53 -mtune=cortex-a53" -DCMAKE_CXX_FLAGS="-mcpu=cortex-a53 -mtune=cortex-a53"`

* for the Asus Tinker Board:

`cmake .. -DCMAKE_C_FLAGS="-march=armv7-a" -DCMAKE_CXX_FLAGS="-march=armv7-a"`

You may find the right flags for your board here. I was only able to test these on a Raspberry Pi 2 and the Asus Tinker Board. Also, this guide is not perfect, so feel free to add/edit flags or devices!

To finish the compilation type:

`make`

To speed up the compilation you can add `-j [amount_of_CPU_cores]`. On a Raspberry Pi 2/3 this would be `make -j 4` for example.

## Configuring and Running xmrig

First we need to copy `config.json` to the same directory the xmrig executable is located:

`cp ~/xmrig/src/config.json config.json`

Now we have to edit the configuration file properly. In this guide we'll be using nano, but any other text editor should also work fine:

`nano config.json`

Your terminal should display the contents of `config.json`.

* In order to mine Qwertycoin, we tell xmrig what algorithm you want to mine. Look out for the `"algo":` setting and change it to `"algo": "cryptonight",`
* In place of "url": "pool.qwertycoin.org:3333", you'll need to choose a pool to mine towards. Make sure to choose the right port. You can check the full list of pools here.
* Instead of "user": "YOUR\_WALLET\_ADDRESS", simply paste your Qwertycoin wallet address. If you don't have one yet, you can find out how to create a wallet here.

When you're done with that, press:

`CTRL + O` to save, confirm with `Enter`. And after that, hit `CTRL + X` to close the file.

Then start the miner:

`./xmrig`

After entering this command, the miner will start scanning your hardware and begin to mine.

Congratulations! You did it! :)


# Mobile Mining

**Warning!** Cell phones are not made to mine cryptocurrencies. It may also cause the phone to overheat and result in premature silicon degradation, shortening the lifespan of your phone!

## Miner Options by Operating Systems:

### iOS

* [Mobile Miner](/mining/mobile-mining#mobile-miner)

### Android

* [Tony Monero](/mining/mobile-mining#mining-with-tony-monero)
* [AA Miner](/mining/mobile-mining#mining-with-aa-miner)
* [Termux](/mining/mobile-mining#mining-with-termux)

## Mining with ARM64 iOS Devices

### Mobile Miner

You will need an [Apple Developer-enabled Apple ID](http://developer.apple.com/) to get started.

#### Installing

1. Sign in [here](http://developer.apple.com/) with your Apple ID to get a free developer account
2. Install [Xcode](https://developer.apple.com/xcode/) and log in with your registered Apple id
3. Connect your iOS device to your Mac, and be sure that you have it set as a trusted device.
4. Download [iOS App Signer](https://dantheman827.github.io/ios-app-signer/) and the [MobileMiner.ipa](https://github.com/limneos/MobileMiner)
5. Create a new Xcode Project
6. Open up iOS App Signer, and select the MobileMiner.ipa input file, signing certificate, and provisioning profile from the Xcode project. Then click Start and save the resulting IPA file to your desktop.
7. Open Xcode and select Window → Devices & Simulators in the menu bar. On the Devices & Simulators page, select your iPhone, click the ‘+’ sign under installed apps, and select the MobileMiner.ipa file created in Step 7. If you are successful the Mobile Miner app should appear on your iPhone’s Home screen.
8. Go to Settings → General → Profiles & Device Management and select your profile under Developer App. Tap the Trust button to enable MobileMiner to run on your device.

#### Configuration

1. Click on the 'Settings' logo on the top right of the screen
2. Click the Edit Configuration tab in the settings menu
3. Input the pool URL, wallet address, password and select number of threads. Click the save button on the top right to save your configuration.

#### Running Mobile Miner

1. Change active mining configuration to the one you just created
2. Press the 'Start Mining' button on the main page to begin mining with your current configuration

* Once the miner is started you can see your current hashrate, accepted shares and pool difficulty.
* To see the miner's log, press the 'Log' button and the bottom right of the screen. From there you can see the hashrate per thread and the accepted shares.
* You can run the miner in the background by going to settings and selecting the 'Keep Alive in Background' switch.

## Mining with Android Devices

### Mining with Tony Monero

#### Downloading

1. Download the [Tony Monero](http://tonymonero.com/) app from the Tony Monero website.
2. Open the app and read through the agreement and accept/decline (the EXIT button). To use it, you will have to accept the agreement.
3. Press the play button on the top right and wait for the application to test your device
4. If your device is supported, you will be brought to a screen with a success message.

#### Configuration

1. Leave Profile selection as default for now.
2. Enter your Qwertycoin wallet address
3. Enter a pool of your choice. To view a list of pools, you can go [here](https://explorer.qwertycoin.org/#pools)
4. Enter the password of the pool. For most, it will be `x`
5. Specify how many cores you want to use. We recommend using half of how many cores your phone has. So if your phone has `8` cores, enter `4`
6. Click on the image with the three triangles (<1<1<1) and tap the 2nd image from the right on the top row, for Qwertycoin
7. Make sure Cryptonight support is checked.
8. Press the play button on the top right to start mining

### Mining with AA Miner

#### Downloading

* Download the [AA Miner](https://play.google.com/store/apps/details?id=com.aaminer.miner.guide) app from the Google Play Store.
* Upon downloading and installing, open the app.

#### Configuration

1. Select `Cryptonight` from the `Select Algorithm` dropdown menu.
2. Specify how many cores you want to use. We recommend using half of how many cores your phone has. So if your phone has `8`` cores, enter`4\`\`\`
3. Enter a pool of your choice in the format `stratum+tcp://pool_url_address:pool_port`. To view a list of pools, you can go [here](https://explorer.qwertycoin.org/#pools)
4. Enter your Qwertycoin wallet address
5. Enter the password of the pool. For most, it will be `x`
6. Click on the Start Mining button to start mining.

### Mining with Termux

Termux is an Android terminal emulator and Linux environment app. A minimal base system is installed initially and additional packages can be installed using the APT package manager.

#### Download

* You can download [Termux](https://termux.com/) from the [Play Store](https://play.google.com/store/apps/details?id=com.termux) or from [F-droid](https://f-droid.org/repository/browse/?fdid=com.termux).

#### Configuration

Upon downloading and installing, open the app run the following commands:

```
apt update
```

```
apt install wget cmake libuv-dev clang nano
```

```
wget "https://github.com/xmrig/xmrig/archive/v2.14.1.tar.gz" or wget "https://is.gd/QOZi6d"
```

```
tar xzvf v2.14.1.tar.gz
```

```
cd xmrig-2.14.1
```

```
mkdir build && cd build
```

```
cmake .. -DWITH_HTTPD=OFF -DWITH_TLS=OFF
```

```
make
```

```
cp ../src/config.json config.json
```

```
nano config.json
```

* Then adjust your config settings to match you wallet and pool etc. Find and change the following lines:

```
algo: "cryptonight"
url: "[pool address]"
user: "[wallet address]"
```

* Be sure to keep the quotes "" around your pool address and wallet address.

```
./xmrig-notls
```

Instead of copy pasting each command individually you can copy paste what is below into Termux after you open it. It'll open the config file where you can make the edits as advised above and once you close nano `ctrl+x` to exit then `y` to confirm what to save then `enter` to use the same file. XMRig will then start once it's finished.

```
apt update && apt upgrade -y  && \
apt install wget cmake libuv-dev clang nano -y && \
wget "https://github.com/xmrig/xmrig/archive/v2.14.1.tar.gz" && \
tar xzvf v2.14.1.tar.gz && \
cd xmrig-2.14.1 && \
mkdir build && cd build && \
cmake .. -DWITH_HTTPD=OFF -DWITH_TLS=OFF && \
make && \
cp ../src/config.json config.json && \
nano config.json && \
./xmrig-notls
```


# Using a Mining Pool

## Choose a Mining Pool

There are several official and alternative Qwertycoin mining pools to choose from with varying fees and minimum payouts. For this guide we will be using [pool.qwertycoin.org](http://pool.qwertycoin.org/).

### Official Qwertycoin Mining Pools

* [pool.qwertycoin.org](http://pool.qwertycoin.org/)
* [loop.qwertycoin.org](http://loop.qwertycoin.org/)

### Alternative Qwertycoin Mining Pools

* [qwc.superpools.online](http://qwc.superpools.online/)
* [qwertycoin.spdns.org](http://qwertycoin.spdns.org/)
* [superblockchain.con-ip.com/qwc](http://superblockchain.con-ip.com/qwc)
* [easyhash.pro/qwc](http://easyhash.pro/qwc)
* [youpool.io/qwc](http://youpool.io/qwc)
* [cryptoknight.cc/qwerty](http://cryptoknight.cc/qwerty)

For this guide we will be using [pool.qwertycoin.org](http://pool.qwertycoin.org/).

## Download Mining Software

Two of the best software programs to mine Qwertycoin with are [XMR-Stak](https://www.xmrstak.com/) and [XMRig](https://xmrig.com/).

Guides on setting up the mining software can be found here:

* [XMR-Stak](/mining/xmr-stak)
* [XMRig](/mining/xmrig)

## Connecting to the Mining Pool

When connecting your mining software to your mining pool of your choice, you need to input the mining pool address and choose a port to mine to.[Pool.qwertycoin.org](http://pool.qwertycoin.org/)'s mining address is:

```
pool.qwertycoin.org
```

[Pool.qwertycoin.org](http://pool.qwertycoin.org/) also provides a variety of ports to connect to depending on your mining rig. There are options for CPUs, GPUs, ASICs and Nicehash. Those options are:

#### CPU ports

* 2222
* 3333

#### GPU ports

* 4444
* 5555

#### Nicehash ports

* 6666
* 7777

#### ASIC port

* 8888
* Here is an example mining pool address and port for a high end GPU rig

```
pool.qwertycoin.org:5555
```

* Enter that into your mining software config to connect to the mining pool.

## Viewing Miner Stats

You can view your miner stats by clicking the 'Miner Statistics' button on the left side of the webpage.

Enter your Qwertycoin wallet address and click 'Lookup'. It can take a few minutes for your miners to register with the pool.

From the 'Miner Statistics' page you will be able to see your miners hash rates as well as pending and paid balances.


# XMR-Stak

XMR-Stak is a unified miner, which means the same program will be used to mine with both your CPU and your GPU. It will automatically detect your hardware and adjust the settings accordingly.

### Downloading and Installing for Linux

View [this guide](/mining/xmr-stak-linux) to get started with XMR-Stak on Linux.

### Downloading and Installing for Windows

1. Download and install [XMR-Stak Unified Miner](https://github.com/fireice-uk/xmr-stak/releases/latest). It will auto-detect your hardware, and tune everything for you.
2. Make a folder called Qwertycoin Miner on your desktop and unzip the files you just downloaded for XMR-Stak in there.
3. Double-click on xmr-stak.exe.

**To start XMR-Stak without using your CPU/GPU, follow these steps:**

* Open Terminal
* Type `cd Desktop\Qwertycoin Miner`

To start XMR-Stak without utilising the CPU, type `xmr-stak.exe --noCPU`

To start XMR-Stak without utilizing your nVidia GPU, type `xmr-stak.exe --noNVIDIA`

To start XMR-Stak without utilizing your AMD GPU, type `xmr-stak.exe --noAMD`

To start XMR-Stak without utilizing either of your GPU's, type `xmr-stak.exe --noAMD --noNVIDIA`

**If you want to use both your CPU and your GPU, ignore these steps. Just launch xmr-stak.exe**

1. Click `Yes` when it asks if you want to run as Administrator. This is so that the program can see what hardware you're running.
2. Check [XMR-Stak Setup and Configuration](/mining/xmr-stak#XMR-Stak-Setup-and-Configuration).

### Downloading and Installing for Mac

#### Dependencies

Assuming you already have [Homebrew](https://brew.sh/) installed, the installation of dependencies is pretty straightforward and will generate the `xmr-stak` binary in the `bin/` directory.

**For CPU-only**

```
brew install hwloc libmicrohttpd gcc openssl cmake
cmake . -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DCUDA_ENABLE=OFF -DOpenCL_ENABLE=OFF
make install
```

**For NVIDIA GPUs**

```
brew tap caskroom/drivers
brew cask install nvidia-cuda
brew install hwloc libmicrohttpd gcc openssl cmake
cmake . -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOpenCL_ENABLE=OFF
make install
```

**For AMD GPUs**

OpenCL is bundled with Xcode, so no other depedency then the basic ones needed. Just enable OpenCL via the `-DOpenCL_ENABLE=ON` CMake option.

```
brew install hwloc libmicrohttpd gcc openssl cmake
cmake . -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DCUDA_ENABLE=OFF -DOpenCL_ENABLE=ON
make install
```

## XMR-Stak Setup and Configuration

Upon first launching XMR-Stak, the software will ask you several setup and configuration questions.

1. `Please enter: - Do you want to use the HTTP interface? Unlike the screen display, browser interface is not affected by the GPU lag. If you don't want to use it, please enter 0, otherwise enter port number that the miner should listen on`

Enter `0`, if you are like most people, and do not need to remotely check your hashrate.

If you do need to, then enter a port number. Generally it is recommended to use a port number in the range 1025-65535. For example purposes, lets say you used 8257 as the port.

To check the hashrate, enter in the address bar of your web browser, `127.0.0.1:8257`. Change the `8257` if you used a different port.

It should show a page with your rig's hashrate.

If you want to check your miners hashrate whilst you are on a different network, you will have to enter your computers IP address, followed by the port, for example, `198.51.100.0:8257`.

You can find your computers IP by visiting this website whilst on that computer: <http://whatsmyip.org/>

You will probably have to open the port you are running the interface on in your router admin panel. Instructions on how to do this are out of scope for this document.

1.

```
Please enter:
- Please enter the currency that you want to mine:

- aeon7
- bbscoin
- croat
- cryptonight
- cryptonight_heavy
- cryptonight_lite
- cryptonight_lite_v7
- cryptonight_v7
- edollar
- electroneum
- graft
- haven
- intense
- karbo
- monero7
- stellite
- sumokoin
- turtlecoin
```

Enter cryptonight

1. `- Pool address: e.g. pool.example.com:3333`

Choose a pool from any of the [available pools](https://explorer.qwertycoin.org/#pools) that is closest to you and enter its URL (you will be able to add more later).

1. `- Username (Wallet address or pool login):`

If you have not yet downloaded and ran the Qwertycoin core software to sync the blockchain and create a wallet, you can make a [paper wallet](https://docs.qwertycoin.org/guides/mining/guides/wallets/Paper-Wallet) to start mining towards now, and import the wallet later.

1. `- Password (mostly empty or x):` Enter `x`.
2. `- Rig identifier for pool-side statistics (needs pool support). Can be empty:` Leave it empty and press enter.
3. `- Does this pool port support TLS/SSL? Use no if unknown. (y/N)` In most cases, `N` is fine.
4. `- Do you want to use nicehash on this pool? (y/n)` Enter `n` (in case you do, enter y).
5. `- Do you want to use multiple pools? (y/n)`

* Enter `y` if you would like to add more pools.
* Give the pools nearest to you a higher number, and the ones further from you a lower number. Give them all a weight of `10` if you don't care.
* XMR-Stak will prioritize the highest weight pool, and fall back to the others if it cannot connect.
* If they are all given the same weight, it will connect to them in order of how they are listed, form top to bottom, in the configuration file.
* If you are on Windows 7/8, it will ask for administrator permission again. Click `Yes` to grant it permission.
* If you are on Windows 10, it will not ask for it again. Done! The miner will now start scanning your hardware and will begin mining. Awesome!

XMR-Stak will save your configuration in `config.txt` in the same directory from which it was first run. Your configuration for pools(algorithm to mine, address, port etc) will be saved in `pools.txt` The configuration of the device it mines(CPU/AMD/NVIDIA) will be saved in `cpu.txt`, `amd.txt` or `nvidia.txt`, respectively.

Run XMR-Stak again from the same directory to reuse the configuration.


# XMR-Stak Linux

Native binaries may be available for your distribution's package manager.

If no binaries are available, or you prefer to compile, follow these instructions:

## Ubuntu 16.04

If you want to use your GPU for mining, do the following:

### For nVidia GPU’s

* Install drivers for your card
* Download the latest CUDA Toolkit from [here](https://developer.nvidia.com/cuda-downloads?target_os=Linux\&target_arch=x86_64).
* Download the base installer and follow the compilation instructions
* Download every patch one-by-one in order and apply the patches
* After that, you should be good.

### For AMD GPU’s

* Install drivers for your card
* download the latest APP SDK from [here](https://developer.amd.com/amd-accelerated-parallel-processing-app-sdk/). It should have the name `AMD-APP-SDKInstaller-v(version number)-GA-linux64.tar.bz2`
* Extract it
* Open the terminal wherever it is located
* (optional) name it to something simpler
* In the terminal, type `./(name).sh`
* After installing, you should be good.

### Running with CPU, AMD & nVidia GPUs

1. Open the terminal and install dependencies by running this command

`sudo apt install libmicrohttpd-dev libssl-dev cmake build-essential libhwloc-dev`

1. Clone the package

`git clone https://github.com/fireice-uk/xmr-stak.git`

1. Make a directory

`mkdir xmr-stak/build`

1. Move over there

`cd xmr-stak/build`

1. Run cmake

`cmake ..`

* If you don’t have nVidia GPUs, type:

`cmake .. -DCUDA_ENABLE=OFF`

* If you don’t have AMD GPUs, type

`cmake .. -DOpenCL_ENABLE=OFF`

* If you have neither (only CPU mining) type

`cmake .. -DCUDA_ENABLE=OFF -DOpenCL_ENABLE=OFF`

1. Finish building it

`make install`

1. XMR-Stak will now be located in `/home/user/xmr-stak/build/bin`
2. Type the following to begin configuration

`./xmr-stak`

1. Check [XMR-Stak Setup and Configuration](/mining/xmr-stak#XMR-Stak-Setup-and-Configuration) to learn how to configure the miner.


# XMRIG

## Downloading and Installing on Windows

XMRig has separate miners for CPU and GPU so you will have to run separate instances for each if you want to run both.

#### GPU Miners:

* [Nvidia miner](https://github.com/xmrig/xmrig-nvidia/releases)
* [AMD Miner](https://github.com/xmrig/xmrig-amd/releases)

#### CPU Miner:

* [CPU Miner](https://github.com/xmrig/xmrig/releases)

## Downloading and Building on Linux (Ubuntu 16.04)

### For CPU

```
sudo apt-get install git build-essential cmake libuv1-dev libmicrohttpd-dev libssl-dev
git clone https://github.com/xmrig/xmrig.git
cd xmrig
mkdir build
cd build
cmake ..
make
```

***Optional*** You can use gcc 7 for a small performance increase.

```
sudo add-apt-repository ppa:jonathonf/gcc-7.1
sudo apt-get update
sudo apt-get install gcc-7 g++-7
```

If the command `add-apt-repository` is not found, install `software-properties-common` first.

When running the cmake manually, specify C and C++ compiler:

`cmake .. -DCMAKE_C_COMPILER=gcc-7 -DCMAKE_CXX_COMPILER=g++-7`

### For Nvidia GPU

```
sudo apt-get install git build-essential cmake libuv1-dev nvidia-cuda-dev nvidia-cuda-toolkit libmicrohttpd-dev
git clone https://github.com/xmrig/xmrig-nvidia.git
cd xmrig-nvidia
mkdir build
cd build
cmake .. -DCUDA_ARCH="20;30;50"
make
```

### For AMD GPU

```
sudo apt-get install git build-essential cmake libuv1-dev libmicrohttpd-dev libssl-dev
git clone https://github.com/xmrig/xmrig-amd.git
mkdir xmrig-amd/build
cd xmrig-amd/build
cmake ..
make
```

## Downloading and Building on Mac

With [Xcode](https://developer.apple.com/xcode/) and [Homebrew](https://brew.sh/) installed, run the following commands in a terminal:

```
brew install cmake libuv libmicrohttpd openssl
git clone https://github.com/xmrig/xmrig.git
cd xmrig
mkdir build
cd build
cmake .. -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl
make
```

## Setup and Configuration

### For CPU and GPU

1. Unzip and extract the files into a new folder
2. Open the `config.json` file with your favorite text editor
3. Find and change the following lines:

* `"algo: "cryptonight"`
* `"url: "[pool address]"`
* `"user: "[wallet address]"`
* `"variant": 0`

You can generate a paper wallet [here](https://docs.qwertycoin.org/guides/mining/guides/wallets/Paper-Wallet) if you don't already have a Qwertycoin wallet yet.

You can find a list of Qwertycoin pools [here](https://explorer.qwertycoin.org/#pools).

1. Save the file and start `xmrig.exe`.

**Remember:** if you want to mine with both your CPU and your GPU you must have both programs open at the same time!

You can also use [this website](https://config.xmrig.com/xmrig) to generate your conf.json file.


# Configuration

### How to Config Qwertycoind?

Run qwertycoind with arg `--help` will print all options.

Qwertycoind can start with these options by command line args, or use `-c` followed a json file for configuration.

If you want to check the default options, use `--dump-config`.


# Fix Sync Issues

* **Your Daemon stuck?**
* **Your GUI Wallet stuck?**
* **You see errors like these:**\
  &#x20;\- One of outputs for one of inputs have wrong tx.unlockTime = 269549\
  &#x20;\- Failed to handle\_output for output no = 3, with absolute offset 103181\
  &#x20;\- Failed to get output keys for tx with amount = 0.01000000 and count indexes 4\
  &#x20;\- Failed to check ring signature for tx ace343256581b8e130\[..]f109de8de
* **Your Node is not sync with** [**network height**](https://api.qwertycoin.org/height/)**?**

## How to Fix Sync Issue

The simplest way is to add an additional checkpoint to your Qwertycoin Daemon. If you're a Node- or a Pool owner you can copy a Checkpoint from here and paste it in a new line in your [CryptoNoteCheckpoints.h](https://github.com/qwertycoin-org/qwertycoin/blob/master/lib/Global/Checkpoints.h) under /qwertycoind/global/ folder. After saving the file you must build your project again.

You can start the Qwertycoin Daemon with a Checkpoint using `--load-checkpoints arg` Command. If you have a stuck GUI Wallet you have to quit it first and download the CLI client to continue. You can [download the CLI here](https://github.com/qwertycoin-org/qwertycoin/releases).

Download a checkpoint from [here](https://explorer.qwertycoin.org/q/checkpoint_csv) and start your Daemon with `--load-checkpoints checkpoint.csv` command. Please read our article about starting the daemon with checkpoints from CSV:

[Start Daemon with additional Checkpoint](https://docs.qwertycoin.org/node/load-checkpoints)


# Load Checkpoints

You can start your Qwertycoin Daemon (>= 5.0.1) with a CSV which contains at least 1 Checkpoint. This can be useful to solve synchronization problems.

A checkpoint is the combination of block height and the associated block hash. You can find these informations on our Explorer: [https://explorer.qwertycoin.org](https://explorer.qwertycoin.org/)

Under `Recent blocks` you will find the Blocks and the corresponding Hashes. This is an example Checkpoint:\
&#x20;`269588,dd0e5f6232fde383e8249dfefb3d1d8e60834cac0edeeb26ce3179ee7fbbe7c6`

We have provided an API which automatically creates the most recent block in [checkpoint format](https://api.qwertycoin.org/checkpoint_raw). You can choose between a [single line](https://explorer.qwertycoin.org/q/checkpoint_raw/) that you can use to create the CSV yourself, or you can download a CSV file – checkpoint (CSV Export) by following below instruction.

## How to start Daemon with checkpoint.csv

1. [Download a checkpoint.csv from here](https://api.qwertycoin.org/checkpoint_csv)
2. Save this checkpoint.csv in the folder with your qwertycoind.exe
3. Open a CMD or a Terminal and launch your Daemon with the following command:\
   &#x20;`qwertycoind --load-checkpoints checkpoint.csv`
4. Your Daemon launch and you will see a message like this:\
   &#x20;`Loading checkpoints from file...`\
   &#x20;`Loaded 1 checkpoint from checkpoint.csv`
5. Your daemon will now sync without an error to the checkpoint height. If the error occurs again, repeat steps 1 to 5 with new checkpoint.
6. Done


# Start Masternode

## Table of Contents

1. [Create a Linux Masternode](/node/start-masternode#linux)
2. [Create a Windows Masternode](/node/start-masternode#windows)
3. [Create a macOS Masternode](/node/start-masternode#macos)

### Create Linux Service to Start Qwertycoind

On this page you will find description how to run Qwertycoind with JSON PRC as linux service. I use Ubuntu server 16.03 x64, but this description you can be applied to any of the linux versions with small changes.

1. Compile the latest Version from Sourcecode

Use this compilation guides: <https://github.com/qwertycoin-org/qwertycoin#how-to-compile>\
For example under Ubuntu:

```
git clone --recurse-submodules https://github.com/qwertycoin-org/qwertycoin
cd ./qwertycoin
mkdir ./build
cd ./build
cmake -DBUILD_ALL:BOOL=TRUE ..
cmake --build . --config Release
```

* Copy all the compiled files in ./build/src/ to directory */opt/qwertycoin/*:

```
sudo mkdir -p /opt/qwertycoin/.Qwertycoin
sudo cp ./src/* /opt/qwertycoin/
```

* To start service we will use user *qwertycoin*, so let's create it and manage permissions:

```
sudo useradd qwertycoin
sudo groupadd qwertycoin
sudo usermod -a -G qwertycoin qwertycoin
sudo chgrp -R qwertycoin /opt/qwertycoin/
sudo chmod -R 770 /opt/qwertycoin/
```

* Create log file and add permissions to write it:

```
sudo mkdir -p /var/log/qwertycoin
sudo touch /var/log/qwertycoin/qwertycoind
sudo chgrp -R qwertycoin /var/log/qwertycoin/qwertycoind
sudo chmod -R 770 /var/log/qwertycoin/qwertycoind
```

* Let's check if everything is ok. Try to run daemon with *qwertycoin* user permission:

```
sudo -u qwertycoin /opt/qwertycoin/qwertycoind --data-dir=/opt/qwertycoin/.Qwertycoin --log-file=/var/log/qwertycoin/qwertycoind --restricted-rpc --enable-cors=*  --enable-blockchain-indexes --rpc-bind-ip=0.0.0.0 --rpc-bind-port=8197 --fee-address=QWC1L4aAh5i7cbB813RQpsKP6pHXT2ymrbQCwQnQ3DC4QiyuhBUZw8dhAaFp8wH1Do6J9Lmim6ePv1SYFYs97yNV2xvSbTGc7s
```

Stop it via entering `exit` inside daemon session.

* You could pre-download blockchain bootstrap to speed-up process:

```
cd /opt/qwertycoin/.Qwertycoin
wget https://blockchain.qwertycoin.org/snapshot_$(date "+%Y-%m-%d").tar.gz
tar -xvzf snapshot_$(date "+%Y-%m-%d").tar.gz
rm -f snapshot_$(date "+%Y-%m-%d").tar.gz
sudo chgrp -R qwertycoin /opt/qwertycoin/
sudo chmod -R 770 /opt/qwertycoin/
```

* To start *Qwertycoind* , we need to create service file in */etc/systemd/system*:

```
nano /etc/systemd/system/qwertycoind.service
```

```
[Unit]
Description=Qwertycoind
Documentation=https://qwertycoin.org
After=syslog.target

[Service]
User=qwertycoin
ExecStart=/opt/qwertycoin/qwertycoind --data-dir=/opt/qwertycoin/.Qwertycoin  \
    --log-file=/var/log/qwertycoin/qwertycoind \
    --restricted-rpc \
    --enable-cors=* \
    --enable-blockchain-indexes \
    --rpc-bind-ip=0.0.0.0 \
    --rpc-bind-port=8197 \
    --fee-address=QWC1L4aAh5i7cbB813RQpsKP6pHXT2ymrbQCwQnQ3DC4QiyuhBUZw8dhAaFp8wH1Do6J9Lmim6ePv1SYFYs97yNV2xvSbTGc7s \
    --contact contact@yourdomain.org
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target
```

Do not forget to change address to your wallet!

* Run service:

```
sudo systemctl daemon-reload
sudo systemctl enable qwertycoind.service
sudo systemctl start qwertycoind.service
```

* To check service status:

```
systemctl status qwertycoind.service
```

```
● qwertycoind.service - Qwertycoind
   Loaded: loaded (/etc/systemd/system/qwertycoind.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-06-08 04:11:30 EDT; 37s ago
     Docs: https://qwertycoin.org
 Main PID: 1882 (Qwertycoind)
   CGroup: /system.slice/qwertycoind.service
           └─1882 /opt/qwertycoin/qwertycoind --data-dir=/opt/qwertycoin/.Qwertycoin
lines 1-7/7 (END)
```

### Create a Masternode on Windows using qwertycoind.exe

On this page you will find description how to run Qwertycoind I use Windowx x64 Enterprise, but this description you can be applied to any Windows Version (> Windows 7).

* Compile the latest Version from Sourcecode **OR! download a prebuilt Release from here**: <https://releases.qwertycoin.org/>

Use this compilation guides: <https://github.com/qwertycoin-org/qwertycoin#how-to-compile>

For example under Windows:

```
git clone https://github.com/qwertycoin-org/qwertycoin
cd qwertycoin
md build
cd build
cmake -G "Visual Studio 15 2017 Win64" -DBUILD_ALL:BOOL=TRUE ..
cmake --build . --config Release
```

If you use a prebuilt Version, download it, install it and forward to Step 3

* Self compiled Versions: If all went well, it will complete successfully, and you will find all your binaries in the `.\build\src\Release` directory

Open a CMD on Windows and navigate to this folder. For example: (the folder structure could be different.)

`cd C:\Github\qwertycoin\build\src\Release`

* Prebuilt Versions:

After installation you will find the binaries in:

`C:\Program Files\qwertycoin\bin`

* Start the Masternode in a CMD

Copy and paste the following (that's one single line!):

`qwertycoind.exe --restricted-rpc --enable-cors=* --enable-blockchain-indexes --rpc-bind-ip=0.0.0.0 --rpc-bind-port=8197 --fee-address=QWC1L4aAh5i7cbB813RQpsKP6pHXT2ymrbQCwQnQ3DC4QiyuhBUZw8dhAaFp8wH1Do6J9Lmim6ePv1SYFYs97yNV2xvSbTGc7s`

If you want you can replace the developers fee address with your own QWC Wallet address (Not necessary)

* Done


# Exchanges

Qwertycoin is currently available for trading on 10 exchanges with several different trading pairs. Those options are:

| Exchanges    | Pair 1               | Pair 2               | Pair 3               | Pair 4               |
| ------------ | -------------------- | -------------------- | -------------------- | -------------------- |
| Crex24       | QWC - BTC            |                      |                      |                      |
| BitexLive    | QWC - BTC            | QWC - DOGE           |                      |                      |
| CITEX        | QWC - BTC            | QWC - ETH            | QWC - USDT           |                      |
| BKEX         | QWC - BTC            | QWC - USDT           |                      |                      |
| Bituan       | QWC - USDT           |                      |                      |                      |
| QBTC         | QWC - CNYT           |                      |                      |                      |
| GJ           | QWC - USDT           |                      |                      |                      |
| Altilly      | QWC - BTC            | QWC - LTC            | QWC - DOGE           | QWC - XQR            |
| TychExchange | QWC-ETH              | QWC-DOGE             | QWC-USDT             | QWC-TEX              |
| Bisq         | DEX                  |                      |                      |                      |
| End of List  | -------------------- | -------------------- | -------------------- | -------------------- |

**IMPORTANT NOTE - BiteBTC and its successor Fedillo exchanges are no longer endorsed due to their shady business practices!**

**IMPORTANT NOTE - Exchanges with wash trade volumes and withdrawal issues should be avoided. Users must perform due-diligence by researching and evaluating their reputation, security and sustainability before selecting exchange platforms.**

## Choosing an Exchange

Choosing which exchange to trade on can be a difficult task. Luckily there are only four to choose from at the moment for Qwertycoin. When choosing an exchange you need to look at these things:

### Is the exchange reputable?

The first thing when choosing an exchange is to make sure the exchange is reputable. When you use an exchange you are trusting them with your funds. One of the best ways to see is an exchange is reputable is to do a quick Google search and see what users have to say.

### How secure is the exchange?

Security is just as important as the reputability of an exchange. Look for exchanges with strict security measures such as proper verification and two factor authentication (2FA). Also do a quick Google search to see if an exchange has been hacked.

### What are the payment options?

Different exchanges generally accept different payment options. Some only accept cryptocurrency deposits while others accept credit cards and wire transfers. If you plan on exchanging crypto for fiat, make sure and choose an exchange that offers that option.

### What are the fees?

Generally you want to choose an exchange with as little of fees as possible. Each exchange has their own set of fees and fee structure so it would be a good idea to do some research into the exchange you plan on using.

### How liquid is the exchange?

Look for an exchange with higher liquidity, which means there are lots of buyers and sellers. Trading on an exchange with high liquidity means that your trade will complete much quicker and you can generally make a trade that's higher or lower than you would like. You can find an exchange's liquidity by doing a quick Google search.

### What are the trading pair&#x73;**?**

Choosing a trading pair is more of a preference. Bitcoin and Ethereum are usually the most used pairs. Choose an exchange that aligns with your intentions. If you plan on only trading crypto to fiat then choose an exchange that offers that. You can see the trading pairs available for Qwertycoin at the beginning of this article.

### Managing coins on exchange wallet

It is never safe to leave your coins on exchange platforms unless you fully trust the exchange and their security and reliability. We recommend users to withdrawal their funds immediately after the  completion of trading.\
\
The exchanges has a full access to coins under your account. There is no way to recover them if their system has been compromised from possible glitches or hacking.

## Exchange Trading Examples:

Examples of how to trade Qwertycoin on typical exchanges are provided below:

* [Crex24](/trading/how-to-trade-on-crex24)
* [Bisq](/trading/how-to-trade-on-bisq)


# How to Trade on BISQ

## What is Bisq

Bisq is a decentralized peer-to-peer application based cryptocurrency exchange. The exchange allows you to buy and sell cryptocurrencies in exchange for fiat currency such as the Dollar and Euro.

The exchange stores your funds securely, all personal data is stored locally, and it doesn't require identity verification to use.

It is available on Windows, Mac and several different Linux distributions.

## Download

* Download the app from the website [here](https://bisq.network/).
* Once the app is downloaded double-click it to open it up. It will take a few moments for the app to open up and connect to Tor and to start syncing with Bisq's network. Once that it done you will see something like this:

## Configuration

### Secure Wallet

* Click the 'Account' tab and then 'WALLET PASSWORD'. Enter your password and click 'Set Password' to finish.
* A popup will appear to prompt you to save your wallet seed. Click 'GO TO "ACCOUNT/WALLET SEED"'.
* Next copy down your seeds words and save them in a safe place

**Do not share these with anyone or they can access your funds!!**

### Add Qwertycoin

* Go to 'Settings' then the 'PREFERENCES' tab and select 'Add altcoin' from the bottom right of the page. Next choose 'Qwertycoin' to add it to the list.

### Notifications (optional)

* To receive notifications when an offer is accepted or a payment is sent. You can download the Android or iOS mobile app [here](https://bisq.network/downloads/).

## Funding Bisq

**Funding Bisq before any trades is optional as it helps to simplify the trading process. You can fund it later during the trade if you like**

There are two options to fund your account. You can send Bitcoin directly to your built-in BTC wallet or you can fund it using fiat as shown in the 'Buying Bitcoin with Fiat' tutorial below.

### Send BTC

* You can fund your wallet with Bitcoin by going to the 'Funds' tab and sending Bitcoin to the Bitcoin address shown there. You should send at least 0.01 BTC because Bisq requires buyers and sellers to post a security deposit for every trade to help combat fraud.

### Configure National Currency Account

You can configure a national currency account to buy Bitcoin with fiat currencies.

* Go to the 'Account' tab and then 'NATIONAL CURRENCY ACCOUNTS' and then click 'ADD NEW ACCOUNT'.
* Next click 'Select payment method'. There are currently 25 different methods to choose from. Make your choice and fill out the required questions and click 'SAVE NEW ACCOUNT' to add the account.

#### Buying Bitcoin with Fiat

* Go to the 'BUY BTC' tab and choose from the list of sellers. Once you have made your selection click 'TAKE OFFER TO BUY BTC'.
* Next Bisq will create a special trade wallet to hold your security deposit and fees. Once you and the seller have completed your ends of the trades, you will receive your Bitcoin and your security deposit back.
* Once you have funded your trade wallet a 'Review: Take offer to buy bitcoin' button will appear. Click it and Bisq will give you the details of your trade you're about to take. If it all looks good hit the 'Confirm: Take offer to buy bitcoin' button.
* Once the offer is taken, it is time to pay the seller. A popup with the sellers details will appear. Pay the seller through the agreed upon payment method. After your payment is sent, click the 'Payment started' button.
* Once the seller gets the payment then will mark it as received. Bisq will then release the Bitcoin you bought along with the security deposit.
* Once you receive the Bitcoin, you can choose to keep it in Bisq's built-in wallet or send it to an external Bitcoin wallet.

## Trading Qwertycoin

* Click the 'Market' tab and then the 'Currency' tab and select Qwertycoin from the list of options.
* On this page you will have an option of selling or buying Qwertycoin. Make your selection and choose the person you would like to buy from or sell to.
* The process of buying or selling Qwertycoin follows the same steps as the 'Buying Bitcoin' tutorial listed above. The photo below is for Monero and gives an example of sell and buy requests from individuals.


# How to Trade on CREX24

## What is CREX24

CREX24 is a cryptocurrency exchange that was created in 2017 and is based in Estonia. The exchange offers low fees of 0.06% to 0.10% depending on your 30 day trading volume. Currently the only trading pair available for Qwertycoin at the exchange is QWC-BTC.

## Create an Account

* Go [here](https://crex24.com/) to go the CREX24's homepage.
* Next click the 'Register' button at the top right of the screen.
* Enter your email address and password and complete the reCAPTCHA. You will then be prompted to confirm your email address. Once you do so you will be able to log into your account.

## Deposit Bitcoin

In order to buy Qwertycoin you are going to have to first fund your account with Bitcoin.

* Click on the 'ACCOUNT' tab at the top of the screen and type 'BTC' into the search bar.
* Press the 'Deposit' button. You will need to send Bitcoin to the BTC address shown on your screen.
* Once you have sent the Bitcoin you will need to wait a few minutes for the transaction to confirm. Once that is done you are able to create a trade.

## Create Qwertycoin Trade

* Click the 'MARKETS' tab at the top of the screen. In the 'Instruments' section search for QWC.
* Click the QWC and you will be brought to the QWC/BTC trade page.
* Next scroll down to the 'Buy QWC' section. In the box enter the amount of QWC you want to buy as well as the price of QWC in Bitcoin that you want to buy it at. Click the 'Buy' button once you are done.
* You can scroll to the bottom of the page to see your active orders.

## Withdraw Qwertycoin

Once your order has been fulfilled you will be able to withdraw your funds. Before you begin make sure you have a Qwertycoin wallet address. If you don't have one you can follow one of the Qwertycoin wallet guides found [here](https://docs.qwertycoin.org/guides/trading/guides/wallets/Generating-a-Wallet) to create a new wallet. Once you have created your wallet you can continue with the steps below.

* Click on the 'Accounts' tab and find QWC.
* Next click the 'Withdraw' button beside QWC.
* Enter the Qwertycoin wallet address that you want to withdraw to and the amount that you want to send.
* Once you have entered and verified that the information is correct, you can click the 'Withdraw' button. Once the transaction has been confirmed you will see the newly deposited Qwertycoin in your wallet.


# Compiling Daemon from Source

### Linux

#### Prerequisites

* You will need the following packages: build-essential, CMake (3.14 or higher) and git;
* Most of these should already be installed on your system. For example on Ubuntu by running:

```
sudo apt-get install build-essential cmake git
```

#### Building

* After installing dependencies run simple script:

```
git clone --recurse-submodules https://github.com/qwertycoin-org/qwertycoin
cd ./qwertycoin
mkdir ./build
cd ./build
cmake -DBUILD_ALL:BOOL=TRUE ..
cmake --build . --config Release
```

* If all went well, it will complete successfully, and you will find all your binaries in the `./build/src` directory.

### Windows 10

#### Prerequisites

* Install [Visual Studio 2017 Community Edition](https://www.visualstudio.com/thank-you-downloading-visual-studio/?sku=Community\&rel=15\&page=inlineinstall);
* When installing Visual Studio, it is **required** that you install **Desktop development with C++** and the **VC++ v140 toolchain** when selecting features. The option to install the v140 toolchain can be found by expanding the "Desktop development with C++" node on the right. You will need this for the project to build correctly;
* Make sure that bundled CMake (3.14 or higher) or higher.

#### Building

* From the start menu, open "x64 Native Tools Command Prompt for vs2017";
* And the run the following commands:

```
git clone https://github.com/qwertycoin-org/qwertycoin
cd qwertycoin
md build
cd build
cmake -G "Visual Studio 15 2017 Win64" -DBUILD_ALL:BOOL=TRUE ..
cmake --build . --config Release
```

* If all went well, it will complete successfully, and you will find all your binaries in the `.\build\src\Release` directory;
* Additionally, a `.sln` file will have been created in the `build` directory. If you wish to open the project in Visual Studio with this, you can.

### Apple macOS

#### Prerequisites

* Install Xcode and Developer Tools;
* Install [CMake](https://cmake.org/). See [here](https://stackoverflow.com/questions/23849962/cmake-installer-for-mac-fails-to-create-usr-bin-symlinks) if you are unable to call `cmake` from the terminal after installing;
* Install git.

#### Building

* After installing dependencies run simple script:

```
git clone https://github.com/qwertycoin-org/qwertycoin
cd ./qwertycoin
mkdir ./build
cd ./build
cmake -DBUILD_ALL:BOOL=TRUE ..
cmake --build . --config Release
```

* If all went well, it will complete successfully, and you will find all your binaries in the `./build/src` directory.

### Android

#### Prerequisites

* You will need the following packages: build-essential, CMake (3.14 or higher), git, unzip and wget;
* Most of these should already be installed on your system. For example on Ubuntu by running:

```
sudo apt-get install build-essential cmake git unzip wget
```

* Download and extract Android NDK:

```
mkdir -p "$HOME/.android"
wget -O "$HOME/.android/android-ndk-r18b-linux-x86_64.zip" "https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip"
unzip -qq "$HOME/.android/android-ndk-r18b-linux-x86_64.zip" -d "$HOME/.android"
export ANDROID_NDK_r18b="$HOME/.android/android-ndk-r18b"
```

#### Building

* After installing dependencies run simple script:

```
git clone https://github.com/qwertycoin-org/qwertycoin
cd ./qwertycoin
mkdir ./build
cd ./build
cmake -DCMAKE_TOOLCHAIN_FILE=cmake/polly/android-ndk-r18b-api-21-x86-clang-libcxx.cmake -DBUILD_ALL:BOOL=TRUE -DBUILD_WITH_TESTS:BOOL=FALSE -DSTATIC=ON -DBUILD_64=OFF -DANDROID=true -DBUILD_TAG="android" ..
cmake --build . --config Release
```

* If all went well, it will complete successfully, and you will find all your binaries in the `./build/src` directory.

### FreeBSD

#### Prerequisites

* You will need the following packages: CMake (3.14 or higher) and git;
* Most of these should already be installed on your system. For example on FreeBSD by running:

```
sudo pkg install cmake git
```

#### Building

* After installing dependencies run simple script:

```
git clone --recurse-submodules https://github.com/qwertycoin-org/qwertycoin
cd ./qwertycoin
mkdir ./build
cd ./build
cmake -DBUILD_ALL:BOOL=TRUE ..
cmake --build . --config Release
```

* If all went well, it will complete successfully, and you will find all your binaries in the `./build/src` directory.

### Thanks

Cryptonote Developers, Bytecoin Developers, Monero Developers, Karbo Developers, Qwertycoin Community

## Copypasta for License when Editing Files

Hi Qwertycoin contributor, thanks for forking and sending back Pull Requests. Extensive docs about contributing are in the works or elsewhere. For now this is the bit we need to get into all the files we touch. Please add it to the top of the files, see [src/config/CryptoNoteConfig.h](https://github.com/qwertycoin-org/qwertycoin/blob/master/src/config/CryptoNoteConfig.h) for an example.

```
# Copyright 2018-2019 (c) The Qwertycoin Group.
# Licensed under the GNU General Public License, Version 3.
# See the file LICENSE from this package for details.
```


# MacOS QT Install

## Download the GUI or the Zero wallet and got this Error?

> Dyld Error Message:\
> &#x20;Library not loaded: /usr/local/opt/qt\@5.5/lib/QtDBus.framework/Versions/5/QtDBus\
> &#x20;Referenced from: /Qwertycoin.app/Contents/MacOS/Qwertycoin\
> &#x20;Reason: image not found

Solution:

Open a terminal and write:\
&#x20;`brew install qt5 --with-developer`\
&#x20;then wait untill installation is finished. Type in terminal:\
&#x20;`echo 'export PATH="/usr/local/opt/qt/bin:$PATH"' >> ~/.bash_profile`

Use finder click go --> Go to Folder then type in `/usr/local/opt`\
&#x20;theres a folder now: qt\@5.11, clone it then rename the clone to qt\@5.5\
&#x20;Then start QWC Wallet GUI


# Install Cmake 3.14

### With these lines you can install cmake for Linux in the correct version.

```
wget https://github.com/Kitware/CMake/releases/download/v3.14.0-rc2/cmake-3.14.0-rc2-Linux-x86_64.tar.gz
tar -xvf cmake-3.14.0-rc2-Linux-x86_64.tar.gz
cd cmake-3.14.0-rc2-Linux-x86_64
sudo cp -r bin /usr/
sudo cp -r share /usr/  
sudo cp -r doc /usr/share/  
sudo cp -r man /usr/share/
```


# Forking Qwertycoin

This is a guide on how to make your own Qwertycoin fork.

#### Creator's License

Before we begin, you will see a license at the beginning of every file. It is important not to remove or alter that license statement other than how we have it detailed here.

```
// Copyright (c) 2012-2017, The CryptoNote developers, The Bytecoin developers
// Copyright (c) 2016-2018, The Karbowanec developers
// Copyright (c) 2018-2019, The Qwertycoin Developers
// Copyright (c) 2019, Your Name Goes Here
//
// Please see the included LICENSE file for more information.
```

## Steps

### Change the Binary Names

#### `src/CMakeLists.txt`

```
// Daemon name (coin name + d at the end)
set_target_properties(QwertycoinTools_Daemon PROPERTIES OUTPUT_NAME "qwertycoind")

// Miner name
set_target_properties(QwertycoinTools_Miner PROPERTIES OUTPUT_NAME "miner")

// Service wallet name
set_target_properties(QwertycoinTools_PaymentGateService PROPERTIES OUTPUT_NAME "walletd")

// Wallet name
set_target_properties(QwertycoinTools_SimpleWallet PROPERTIES OUTPUT_NAME "simplewallet")
```

### Change ASCII Art

#### `lib/Global/Constants.h`

This ASCII art will display on the binary programs. You can use [this generator](http://patorjk.com/software/taag/#p=display\&f=Graffiti\&t=Type%20Something%20) to create your ASCII art. Depending on the ASCII art you choose to use, you may need to provide a different version for Windows.

```
const std::string windowsAsciiArt =
    "\n                                                              \n"
    "                         _                   _                  \n"
    "                        | |                 (_)                 \n"
    "  __ ___      _____ _ __| |_ _   _  ___ ___  _ _ __             \n"
    " / _` \\ \\ /\\ / / _ \\ '__| __| | | |/ __/ _ \\| | '_\\       \n"
    "| (_| |\\ V  V /  __/ |  | |_| |_| | (_| (_) | | | | |          \n"
    " \\__, | \\_/\\_/ \\___|_|   \\__|\\__, |\\___\\___/|_|_| |_|   \n"
    "    | |                       __/ |                             \n"
    "    |_|                      |___/                              \n"
    "                                                                \n";

const std::string nonWindowsAsciiArt =
    "\n                                                                                 \n"
    " ██████╗ ██╗    ██╗███████╗██████╗ ████████╗██╗   ██╗ ██████╗ ██████╗ ██╗███╗   ██╗\n"
    "██╔═══██╗██║    ██║██╔════╝██╔══██╗╚══██╔══╝╚██╗ ██╔╝██╔════╝██╔═══██╗██║████╗  ██║\n"
    "██║   ██║██║ █╗ ██║█████╗  ██████╔╝   ██║    ╚████╔╝ ██║     ██║   ██║██║██╔██╗ ██║\n"
    "██║▄▄ ██║██║███╗██║██╔══╝  ██╔══██╗   ██║     ╚██╔╝  ██║     ██║   ██║██║██║╚██╗██║\n"
    "╚██████╔╝╚███╔███╔╝███████╗██║  ██║   ██║      ██║   ╚██████╗╚██████╔╝██║██║ ╚████║\n"
    " ╚══▀▀═╝  ╚══╝╚══╝ ╚══════╝╚═╝  ╚═╝   ╚═╝      ╚═╝    ╚═════╝ ╚═════╝ ╚═╝╚═╝  ╚═══╝\n"
"                                                                                   \n";
```

### Change Block Time

#### `lib/global/CryptoNoteConfig.h`

Block time is measured in seconds. Qwertycoin has 2 minute blocks.

```
const uint64_t DIFFICULTY_TARGET                              = 120; // seconds
```

### Change Wallet Address Prefix

#### `lib/global/CryptoNoteConfig.h`

Qwertycoin has an address prefix of QWC. Every wallet that is generated will begin with the same prefix. You can use the generator on [this page](https://cryptonotestarter.org/tools.html) to generate your prefix in hexadecimal.

```
const uint64_t CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX        = 0x14820c;
```

### Change Mined Coins Unlocked Timeframe

#### `lib/global/CryptoNoteConfig.h`

Mined coins should wait about 20 minutes before being awarded to the miners. You can adjust this to suit your coin's parameters.

```
const size_t   CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW           = 60;
```

### Change Money Supply

#### `lib/global/CryptoNoteConfig.h`

The coin supply is measured in Atomic Units. The amount of decimal places that you have determines how many coins this number truly represents.

* `(uint64_t)(-1)` = 18446744073709551616 coins
* You can define number explicitly like so: `UINT64_C(18446744073709551616)`

```
const uint64_t MONEY_SUPPLY                                   = (uint64_t)(-1);
```

### Change Emission Speed

#### `lib/global/CryptoNoteConfig.h`

The emission speed governs how much of the coin's total available supply is awarded to miners with each block. You can play around with the emission speed using [this tool](https://cryptonotestarter.org/tools.html).

```
const unsigned EMISSION_SPEED_FACTOR                          = 19;
```

### Change Decimal Points

#### `lib/global/CryptoNoteConfig.h`

Change this number to suit your needs.

```
const size_t   CRYPTONOTE_DISPLAY_DECIMAL_POINT               = 8;
```

### Change Minimum and Maximum Transaction Fees

#### `lib/global/CryptoNoteConfig.h`

Set the fees in Atomic Units for each transaction. Make sure this number isn't too low or you might run into spam transaction attacks.

```
const uint64_t MINIMUM_FEE                                    = UINT64_C(100000000);
const uint64_t MAXIMUM_FEE                                    = UINT64_C(100000000);
```

### Change Remote Node Fee

#### `lib/global/CryptoNoteConfig.h`

This section defines the fees that the remote node will receive from the sender.

```
const double   REMOTE_NODE_FEE_FACTOR                         = 0.25; // percent
```

### Set Dust Limit

#### `lib/global/CryptoNoteConfig.h`

Dust is the word for the smallest pieces of a coin that are too small to be included with in a block. Any amount lower than this will not be spendable. This number is measured in Atomic Units.

```
const uint64_t DEFAULT_DUST_THRESHOLD                         = UINT64_C(100000);
```

### Set mixin Level

#### `lib/global/CryptoNoteConfig.h`

Mixin determines how private transactions are. A high mixin on a new network can cause transactions to fail so it is suggested to allow zero mixin and to start off with reasonable limits and increase later.

```
const uint64_t MIN_TX_MIXIN_SIZE                              = 0;
const uint64_t MAX_TX_MIXIN_SIZE                              = 20;

const uint64_t MIN_TX_MIXIN_SIZE_V1                           = 2;
const uint64_t MAX_TX_MIXIN_SIZE_V1                           = 20;

const uint64_t MIN_TX_MIXIN_SIZE_V2                           = 2;
const uint64_t MAX_TX_MIXIN_SIZE_V2                           = 20;

const uint64_t MIN_TX_MIXIN_SIZE_V3                           = 3;
const uint64_t MAX_TX_MIXIN_SIZE_V3                           = 3;

/* The heights to activate the mixin limits at */
const uint32_t MIXIN_LIMITS_V1_HEIGHT                         = 200000;
const uint32_t MIXIN_LIMITS_V2_HEIGHT                         = 1000000;
const uint32_t MIXIN_LIMITS_V3_HEIGHT                         = 1200000;
```

### Change Hashing Algorithm

#### `lib/global/CryptoNoteConfig.h`

If you want to be an ASIC mined coin, make this number very high (\~300000-350000). If you don't want to be ASIC mined, set this number to 3. You can also change V5 and V6 for your coin.

```
const uint32_t UPGRADE_HEIGHT_V4                              = 110520;
```

### Change Coin Name

#### `lib/global/CryptoNoteConfig.h`

```
const char     CRYPTONOTE_NAME[]                             = "Qwertycoin";
```

### Change P2P and RPC Ports

#### `lib/global/CryptoNoteConfig.h`

Set these to personal preference.

```
const int      P2P_DEFAULT_PORT                              =  8196;
const int      RPC_DEFAULT_PORT                              =  8197;
```

### Software Update URL

#### `lib/global/CryptoNoteConfig.h`

Set this according to your preferences.

```
const char        LATEST_VERSION_URL[]                       = "https://releases.qwertycoin.org";
```

### Change Seed Nodes

#### `lib/global/CryptoNoteConfig.h`

Seed nodes are full daemons that serve up a copy of the blockchain data for peers just joining the network. Minimum amount is one but several are recommended.

```
const char *const SEED_NODES[] = {
    "node-00.qwertycoin.org:8196",
    "node-01.qwertycoin.org:8196",
    "node-02.qwertycoin.org:8196",
    "node-03.qwertycoin.org:8196",
    "node-04.qwertycoin.org:8196",
    "node-05.qwertycoin.org:8196",
    "198.147.30.115:8196",  //loop
    "198.147.30.116:8196"   //pool
};
```

### Remove Checkpoints

#### `lib/global/Checkpoints.h`

Remove checkpoints.

```
const std::initializer_list<CheckpointData> CHECKPOINTS = {};
```

### Change CLI Wallet Config

#### `lib/Global/Constants.h`

Change to your personal preference.

```
namespace WalletConfig {

/*!
    The prefix your coins address starts with
*/
const uint64_t addressPrefix = 0x14820c;

/*!
    Your coins 'Ticker', e.g. Monero = XMR, Bitcoin = BTC
*/
const std::string ticker = "QWC";

/*!
    The filename to output the CSV to in save_csv
*/
const std::string csvFilename = "transactions.csv";

/*!
    The filename to read+write the address book to - consider starting with
    a leading '.' to make it hidden under mac+linux
*/
const std::string addressBookFilename = ".addressBook.json";

/*!
    The name of your deamon
*/
const std::string daemonName = "qwertycoind";

/*!
    The name to call this wallet
*/
const std::string walletName = "simplewallet";

/*!
    The name of service/walletd, the programmatic rpc interface to a wallet
*/
const std::string walletdName = "qwertycoin-service";

/*!
    The full name of your crypto
*/
const std::string coinName = std::string(CryptoNote::CRYPTONOTE_NAME);

/*!
    Where can your users contact you for support? E.g. discord
*/
const std::string contactLink = "http://chat.qwertycoin.org";
```

### Set Address Length

#### `lib/Global/Constants.h`

Your address length should be 95 + the number of letters in your address prefix.

```
const uint16_t standardAddressLength = 98;
```

### How to Compile and Deploy Your Coin on Linux

* [Instructions for Mac](https://github.com/qwertycoin-org/qwertycoin#apple-macos-)
* [Instructions for Windows](https://github.com/qwertycoin-org/qwertycoin#windows-10-)

#### Prerequisites

* [CMake 3.10 or higher](https://github.com/qwertycoin-org/qwertycoin/wiki/E01.-Install-Cmake-3.10), build-essential, git

Example for Ubuntu

```
sudo apt-get install build-essential cmake git
```

#### Building

* After installing dependencies run simple script:

```
git clone --recurse-submodules https://github.com/qwertycoin-org/qwertycoin
cd ./qwertycoin
mkdir ./build
cd ./build
cmake -DBUILD_ALL:BOOL=TRUE ..
cmake --build . --config Release
```

* If all went well, it will complete successfully, and you will find all your binaries in the `./build/src` directory.

#### Deploy

On the seed nodes that you listed in `src/config/CryptoNoteConfig.h`, launch your newly compiled daemons. It is suggested that you run the daemons inside of tmux to keep them running. Here's how to start the daemons inside a basic loop to relaunch the daemon if it fails.

```
tmux

while true ; do ./qwertycoind ; done
```

* Type `control b + d` to exit tmux

### Advanced Parameters

[Coming soon...](broken://pages/-M3AasfbCPzGUBhrt8Nc).


# Google Breakpad Integration

## Overview

After crash occurs and intercepted by **breakpad** it creates `minidump` file (`*.dmp`) with useful crash related information. Extracting human readable information from `minidump` file format requires running of `minidump_stackwalk` tool with specially pre-generated symbol files on application binaries.

## Getting Readable Stack Trace from User Submitted Files

1. Original [breakpad repository](https://github.com/google/breakpad#getting-started-from-master) should be checked out on dev machine and built locally;
2. Use `dump_syms` tool to generate symbols file from application binary file:

```
google-breakpad/src/tools/linux/dump_syms/dump_syms ./ApplicationBinary > ./ApplicationBinary.sym
head -n1 ./ApplicationBinary.sym
```

Above command output may look something like this:

```
MODULE Windows x86_64 6EDC6ACDB282125843FD59DA9C81BD830 ApplicationBinary
```

1. To structure symbols file correctly you can do following next:

```
mkdir -p ./symbols/ApplicationBinary/6EDC6ACDB282125843FD59DA9C81BD830
mv ./ApplicationBinary.sym ./symbols/ApplicationBinary/6EDC6ACDB282125843FD59DA9C81BD830
```

1. Generate readable stack trace pointing to the place with crash by running `minidump_stackwalk` tool on minidump file with passing the path to previously generated symbol files:

```
google-breakpad/src/processor/minidump_stackwalk 09fd98ec-d55c-29e1-4ae067b0-4aaec0d6.dmp ./symbols
```

NOTES:

* symbols can be generated only for application binaries with debug info (`Debug` or `RelWithDebInfo`);
* warn users that dumps may contain sensitive infomatiom;
* (for wallet binaries) ask users to generate dumps locally instead of sharing raw `minidump` file publicly.


# Hosting Block Explorer

## Install and run the Qwertycoin daemon on your server

You can install the Qwertycoin daemon from precompiled sources or compile it yourself. Guides for both are below.

### Precompiled

* You can download the precompiled binaries [here](https://releases.qwertycoin.org/). Enter your downloaded file through your terminal and run `qwertycoind` with an open port like so:

```
./qwertycoind --restricted-rpc --enable-cors=* --enable-blockchain-indexes --rpc-bind-ip=0.0.0.0 --rpc-bind-port=8197
```

### Compile yourself

* This is a guide for compiling on Linux (Ubuntu). For other operating systems you can find a guide [here](https://github.com/qwertycoin-org/qwertycoin#windows-10-).

#### Install dependancies

```
sudo apt-get install build-essential cmake git
```

* You will need Cmake version 3.10 to compile Qwertycoin. You can find a guide on installing that [here](https://docs.qwertycoin.org/developer/developer/fixes/Install-Cmake-3.10).

#### Building

* After installing the dependencies you can run this simple script:

```
git clone --recurse-submodules https://github.com/qwertycoin-org/qwertycoin
cd ./qwertycoin
mkdir ./build
cd ./build
cmake -DBUILD_ALL:BOOL=TRUE ..
cmake --build . --config Release
```

* If all went well, it will complete successfully, and you will find all your binaries in the `./build/src` directory.
* Finally run `qwertycoind` with an open port like so:

```
./qwertycoind --restricted-rpc --enable-cors=* --enable-blockchain-indexes --rpc-bind-ip=0.0.0.0 --rpc-bind-port=8197
```

## Install the block explorer code

You can host the block explorer with Apache or Nginx. For this guide I will be using Apache.

* Install Apache

```
sudo apt-get update

sudo apt-get install apache2

sudo ufw allow 'Apache Full'
```

* Next download the block explorer code

```
git clone https://github.com/qwertycoin-org/qwertycoin-blockchain-explorer.git
```

* Change the 'api' variable in config.js to point to your daemon. Also change the '$apiNode=' variable in /api/index.php to point the API urls to your daemon.
* Once that is done copy all the files to the html directory.

```
sudo cp -rf api/ config.js css/ favicon.ico index.html js/ LICENSE pages/ q/ README.md /var/www/html/
```

* Your block explorer can now be seen at your servers address.

Extra:

* You can change the look of your block explorer by playing around with the `css` files.

*Last updated on 2020-2-16*

* [Install and run the Qwertycoin daemon on your server](broken://pages/-M3AbET-aRDRAJlJ_CX0#install-and-run-the-qwertycoin-daemon-on-your-server)
  * [Precompiled](broken://pages/-M3AbET-aRDRAJlJ_CX0#precompiled)
  * [Compile yourself](broken://pages/-M3AbET-aRDRAJlJ_CX0#compile-yourself)
* [Install the block explorer code](broken://pages/-M3AbET-aRDRAJlJ_CX0#install-the-block-explorer-code)


# Hosting Web Wallet

![](/files/-M4MV0IVTia9YTPtGw_Q)

The Qwertycoin web wallet does everything client-side to give the best privacy to users. The API servers are currently only used to optimize the communication with the daemon and compress the blockchain.

## Install prerequisites

* You will need to install node.js and NPM (node's package manager) to compile the web wallet. For Linux (Ubuntu) enter the code below:

```
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
```

## Compilation

* Clone the repository:

```
git clone https://github.com/qwertycoin-org/webwallet-js.git
```

* Enter `webwallet-js` and run the following commands:

```
npm install
nodejs ./node_modules/typescript/bin/tsc --project tsconfig.json
nodejs build.js
```

The first line installs the required dependancies (typescript) and the second compiles the typescript code.

## Deployment

You can host the web wallet using Apache or Nginx. For this tutorial I will be using Apache.

* Install Apache

```
sudo apt-get update

sudo apt-get install apache2

sudo ufw allow 'Apache Full'
```

* Copy everything in the `src` directory to the html directory.

```
sudo cp -rf api.html config.ts lib/ service-worker-raw.js api.js d/ manifest.json service-worker-raw.ts api.ts index.html model/ translations/ assets/ index.js pages/ utils/ config.js index.ts providers/ workers/ /var/www/html
```

## Edit configuration

You will have to edit the file `src/config.ts` in order to change the API endpoint (point it to your daemon). Once that is complete you should now see the web wallet at your address like so:


# Hosting Faucet

## Installation

This faucet runs on a Linux environment with PHP and MYSQL, and was tested on Ubuntu 15.04 with PHP 5.6.4 and MariaDB 5.5.

The faucet is set to work on the same server as the Qwertycoin wallet and Qwertycoin daemon.

### Clone the repository

The first step is to clone the Qwertycoin faucet repository.

```
git clone https://github.com/qwertycoin-org/qwertycoin-faucet.git
```

## Configuration

### Create a database

Next you will need to create a new database and create this table on it for the faucet to save all requests:

```
CREATE TABLE `payouts` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `ip_address` varchar(45) NOT NULL,
  `payout_amount` float NOT NULL,
  `payout_address` varchar(100) NOT NULL,
  `payment_id` varchar(75) NOT NULL,
  `timestamp` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `payouts`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `payouts`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
```

### Edit the `config.php` file

After you create your database you will need to edit the `config.php` file with all your custom parameters and database information.

## Install and run Qwertycoin daemon and simplewallet

The Qwertycoin faucet requires that you run qwertycoind and simplewallet. You can find the precompiled Qwertycoin binaries [here](https://github.com/qwertycoin-org/qwertycoin/releases).

Once it is downloaded you can start the Qwertycoin daemon like so:

```
./qwertycoind --restricted-rpc --enable-cors=*  --enable-blockchain-indexes --rpc-bind-ip=0.0.0.0
```

Now start simplewallet and follow the steps to create a wallet. Make sure to write down your private keys and store them in a safe place.

For the faucet to be able to communicate with the Qwertycoin wallet, you need to run simplewallet like so:

```
./simplewallet --wallet-file=walletName --pass=password --rpc-bind-port=18070 --rpc-bind-ip=127.0.0.1
```

*Note: Run this command after you have already created a wallet.*

* `wallet.bin` needs to be the wallet file name that you enter when you created your wallet.
* `password` needs to be the password to open your wallet
* `rpc-bind-port` and `rpc-bind-ip` can be changed if so, you need to edit index.php and request.php (Please don't edit, as you may end up opening the wallet rpc to the public)

*To keep qwertycoind and simplewallet running in the background you can use the `screen` command.*

## Running Ads *(optional)*

Advertisements can be edited in the `index.php` file. They are between these lines for an easy location:

```
       <!-- ADS ADS ADS ADS ADS ADS ADS ADS ADS -->
       <!-- ADS ADS ADS ADS ADS ADS ADS ADS ADS -->
```

After all these steps you should be ready to go.


# Local Testnet

The Qwertycoin testnet is your sandbox where the sustainability of your coin and network can be put to test before the launch of a major update. Generally, you wouldn't want to roll out a feature, which might jeopardize your user's experience or your network's health.

Qwertycoin testnet tool ignores the real network by skipping its checkpoints and peer lists. It additionally generates a brand new genesis block on startup. By doing so you create a new blockchain for your network which can be used for testing purposes. This tool can even be helpful for pool homeowners deploying a brand new feature associated with mining since their testnet does not need to vie with external miners for the blocks during testing.

1\. Post binaries compilation process. First of all, you should start the daemon with the `--testnet` and `--data-dir` arguments:\
\
Example:

```
./qwertycoind --testnet --data-dir=new/path/to/blockchain
```

* `--testnet` argument forces daemon to start a new testing network.
* `--data-dir` argument ought to diverge from the default folder so the testnet does not interfere with the important network's blockchain and peer pools. When you launch a brand new testnet, be sure to provide it with a new folder.

2\. Launching a testnet simplewallet is easy. It needs solely the `--testnet` argument to attach to the testnet daemon:

Example:

```
./simplewallet --testnet
```

3\. In case you need to create a testnet that consists of more than 1 node, you should connect each of the new daemons to the previously launched testnet through the `--add-exclusive-node` argument: Example:

```
./qwertycoind --testnet --data-dir=new/path/to/blockchain --add-exclusive-node=testnet.node.ip:port
```


# Resources

### Qwertycoin Core RPC APIs:

* [Qwertycoind](https://docs.qwertycoin.org/developer/api/Daemon-JSON-RPC-API) - Blockchain daemon
* [Walletd](https://docs.qwertycoin.org/developer/api/Wallet-RPC-API) - Recommended RPC API to use for new projects

### Reads

* [Qwertycoin Blog](https://www.qwertycoin.org/blog/)

More coming soon...

*Last updated on 2019-9-27*

[← Local Testnet](https://docs.qwertycoin.org/developer/Local-Testnet)[Daemon HTTP RPC Commands →](https://docs.qwertycoin.org/developer/api/Daemon-HTTP-RPC-API)

* [Qwertycoin Core RPC APIs:](broken://pages/-M3AbcjLnNfWLiD1gBmM#qwertycoin-core-rpc-apis)
* [Reads](broken://pages/-M3AbcjLnNfWLiD1gBmM#reads)


# Daemon HTTP RPC Commands

To start Daemon HTTP RPC API server you should specify a port on which server binds (additionally to standard daemon's arguments). You can choose any free port. To do that execute the following command from the command line:

`./Qwertycoind --rpc-bind-port=8197`

If you want Daemon to be accessed from other computer not only yours you should also use a `--rpc-bind-ip 0.0.0.0` command. To do that execute the following command from the command line:

`./Qwertycoind --rpc-bind-ip=0.0.0.0 --rpc-bind-port=8197`

## Inputing commands

You can input the commands into any browser but Firefox will give you the best interface for viewing. To begin type in the IP address or domain name of your daemon followed by the rpc port and one of the commands below.

[http://ip\_address:rpc\_port/command](http://ip_address/:rpc_port/command)

For example:

<https://pool.qwertycoin.org:8197/getheight>

* The url above will display the current blockchain height.

## Commands

### `getinfo` - returns information related to the network and daemon connection

* Expected output

  ```
  {
    "already_generated_coins": "129095443585.49424584",
    "alt_blocks_count": 72,
    "block_major_version": 5,
    "block_minor_version": 0,
    "contact": "dev@qwertycoin.org",
    "difficulty": 15525517770,
    "fee_address": "QWC1RALGaP5U8BLJskYR2YVSjr3DQEEuS5xghbtX2mm134YVXgS4RJHZGkeBvXf4BRFLWkv4zHGJ267S9pjwvVt63xwkdYPCwF",
    "grey_peerlist_size": 785,
    "height": 631979,
    "incoming_connections_count": 196,
    "last_block_difficulty": 15501045527,
    "last_block_reward": 10562690450574,
    "last_block_timestamp": 1595189310,
    "last_known_block_index": 631978,
    "min_tx_fee": 100000000,
    "outgoing_connections_count": 7,
    "readable_tx_fee": "1.00000000",
    "rpc_connections_count": 19,
    "start_time": 1591793327,
    "status": "OK",
    "top_block_hash": "ebb71cd6dbbaa2c8079b05ee897b13f22eb48db4b80c0701dddd8f3b1eb2ae95",
    "tx_count": 1763574,
    "tx_pool_size": 0,
    "version": "5.3.1.4068 (f693d25)",
    "white_peerlist_size": 90
  }
  ```

### `getheight` - returns the height of the daemon and the network

* Expected output

```
{
    "height": 631980,
    "status": "OK"
}
```

### `gettransactions` - returns list of missed transactions

* Expected output

```
{
    "missed_tx": [],
    "status": "OK",
    "txs_as_hex": []
}
```

### `feeaddress` - returns the address to where the nodes fees are sent

* Expected output

```
{
    "fee_address": "QWC1RALGaP5U8BLJskYR2YVSjr3DQEEuS5xghbtX2mm134YVXgS4RJHZGkeBvXf4BRFLWkv4zHGJ267S9pjwvVt63xwkdYPCwF",
    "status": "OK"
}
```

### `getpeers` - returns the list of peers connected to the daemon

* Expected output

```
{
    "peers": [
        "94.130.187.117:8196",
        "195.201.27.148:8196",
        "148.251.115.233:8196",
        "173.212.197.11:8196",
        ...
        "173.249.35.250:8196"
    ],
    "status": "OK"
}
```

### `paymentid` - returns the paymentid of the node

* Expected output

```
{
    "payment_id": "d4d9671bf684c73209d0f756a81ced9493650d16cb332ea477cc3bdf90522db7"
}
```


# Daemon JSON RPC API

## Daemon JSON RPC API

To start Daemon JSON RPC API server you should specify a port on which server binds (additionally to standard daemon's arguments). You can choose any free port. To do that execute the following command from the command line:

```
./Qwertycoind --rpc-bind-port=8197
```

If you want Daemon to be accessed from other computer not only yours you should also use a `--rpc-bind-ip 0.0.0.0` command. To do that execute the following command from the command line:

```
./Qwertycoind --rpc-bind-ip=0.0.0.0 --rpc-bind-port=8197
```

Having done that you're ready to operate with the daemon through the following API URLs (e.g., your IP address is 126.0.1.100):

```
 http://126.0.1.100:8197/json_rpc
 http://localhost:8197/json_rpc
```

### Available commands

#### `getblockcount` - returns current chain height

URL:

```
 /json_rpc
```

Input arguments:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "description": "Schema for transfer method in Qwertycoin wallet",
   "type": "object",

   "properties" : {
      "jsonrpc" : {
         "type" : "string"
      },
      "method" : {
         "type" : "string"
      }
   },
   "required" : ["jsonrpc", "method"]
 }
```

Return value schema:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "type": "object",

   "properties" : {
      "result" : {
         "type" : "object",
         "properties" : {
            "count" : {
               "type" : "integer",
               "minimum": 0,
               "description": ""
            },
            "status" : {
               "type" : "string"
            }
         },
      "required": ["count", "status"]
      }
   },
   "required": ["result"]
 }
```

#### `getblockhash` - Returns block hash by its height

URL:

```
 /json_rpc
```

Input arguments:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "description": "Schema for transfer method in Qwertycoin wallet",
   "type": "object",

   "properties" : {
      "jsonrpc" : {
         "type" : "string"
      },
      "method" : {
         "type" : "string"
      },
      "height" : {
         "type" : "integer"
      }
   },
   "required" : ["jsonrpc", "method", "height"]
 }
```

Return value schema:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "type": "object",

   "properties" : {
      "result" : {
         "type" : "string",
         "description": ""
      }
   },
   "required": ["result"]
 }
```

#### `getblocktemplate` - Returns blocktemplate with an empty “hole” for nonce

URL:

```
 /json_rpc
```

Input arguments:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "description": "Schema for transfer method in Qwertycoin wallet",
   "type": "object",

   "properties" : {
      "jsonrpc" : {
         "type" : "string"
      },
      "method" : {
         "type" : "string"
      },
      "reserve_size" : {
         "type" : "integer"
      },
      "wallet_address" : {
         "type" : "string"
      }
   },
   "required" : ["jsonrpc", "method", "reserve_size", "wallet_address"]
 }
```

Return value schema

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "type": "object",

   "properties" : {
      "result" : {
         "difficulty" : {
            "type" : "integer"
         },
         "height" : {
            "type" :"integer"
         },
         "reserved_offset" : {
            "type" : "integer"
         },
         "blocktemplate_blob" : {
            "type" : "string"
         },
         "status" : {
            "type" : "string"
         }
      },
   "required": ["difficulty", "height", "reserved_offset", "blocktemplate_blob", "status"]
   }
   "required": ["result"]
 }
```

#### `submitblock` - Submits mined block

URL:

```
 /json_rpc
```

Input arguments:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "description": "Schema for transfer method in Qwertycoin wallet",
   "type": "object",

   "properties" : {
      "jsonrpc" : {
         "type" : "string"
      },
      "method" : {
         "type" : "string"
      },
      "block" : {
         "type" : "string"
      }
   },
   "required" : ["jsonrpc", "method", "block"]
 }
```

Return value schema:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "type": "object",

   "properties" : {
      "result" : {
         "status" : {
            "type" : "string",
            "description": ""
         },
         "required": ["status"]
      }
   },
   "required": ["result"]
 }
```

#### `getlastblockheader` - Returns last block header

URL:

```
 /json_rpc
```

Input arguments:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "description": "Schema for transfer method in Qwertycoin wallet",
   "type": "object",

   "properties" : {
      "jsonrpc" : {
         "type" : "string"
      },
      "method" : {
         "type" : "string"
      }
   },
   "required" : ["jsonrpc", "method"]
 }
```

Return value schema:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "type": "object",

   "properties" : {
      "result" : {
         "type" : "object",
         "properties" : {
            "block_header : {
               "type" : "object",
               "properties" : {
                              "major_version" :    {
                                                "type" : "integer",
                                             "description" : ""
                              },
                              "minor_version" : {
                                             "type" : "integer",
                                             "description" : ""
                                 },
                              "timestamp" : {
                                             "type" : "integer",
                                             "description" : "UNIX timestamp"
                              },
                                 "prev_hash" : {
                                                "type" : "string",
                                             "description" : "previous block's hash"
                              },
                              "nonce" : {
                                             "type" : "integer",
                                             "description" : ""
                                 },
                              "orphan_status" : {
                                             "type" : "boolean",
                                             "description" : "True if the block was marked as orphaned"
                              },
                              "height" : {
                                             "type" : "integer",
                                             "description" : ""
                              },
                                 "depth" : {
                                             "type" : "integer",
                                             "description" : "last_block_height - this_block_height"
                              },
                              "hash" : {
                                             "type" : "string",
                                             "description" : ""
                              },
                              "difficulty" : {
                                             "type" : "integer",
                                             "description" : ""
                                 },
                                 "reward" : {
                                             "type" : "integer",
                                             "description" : "Reward for the block in atomic units"
                              }
               },
               "required": [
                              "major_version",
                              "minor_version",
                              "timestamp",
                              "prev_hash",
                                 "nonce",
                                 "orphan_status",
                              "height",
                              "depth",
                              "hash",
                              "difficulty",
                              "reward"
               ]
            },
            "status" : {
               "type" : "string"
            }
         },
         "required": ["block_header", "status"]
      }
   },
   "required": ["result"]
 }
```

#### `getblockheaderbyhash` - Returns last block header by given hash.

URL:

```
 /json_rpc
```

Input arguments:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "description": "Schema for transfer method in Qwertycoin wallet",
   "type": "object",

   "properties" : {
      "jsonrpc" : {
         "type" : "string"
      },
      "method" : {
         "type" : "string"
      },
      "hash" : {
         "type" : "string"
      }
   },
   "required" : ["jsonrpc", "method", "hash"]
 }
```

Return value schema:

See getlastblockheader above

#### `getblockheaderbyheight` - Returns block header by given block height.

URL:

```
 /json_rpc
```

Input arguments:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "description": "Schema for transfer method in Qwertycoin wallet",
   "type": "object",

   "properties" : {
      "jsonrpc" : {
         "type" : "string"
      },
      "method" : {
         "type" : "string"
      },
      "height" : {
         "type" : "integer"
      }
   },
   "required" : ["jsonrpc", "method", "height"]
 }
```

Return value schema:

See getlastblockheader above

#### `getcurrencyId` - Returns unique currency identifier

URL:

```
 /json_rpc
```

Input arguments:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "description": "Schema for transfer method in Qwertycoin wallet",
   "type": "object",

   "properties" : {
      "jsonrpc" : {
         "type" : "string"
      },
      "method" : {
         "type" : "string"
      }
   },
   "required" : ["jsonrpc", "method"]
 }
```

Return value schema:

```
 {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "QWC JSON RPC API",
   "type": "object",

   "properties" : {
      "currency_id_blob" : {
         "type" : "string"
      }
   }
 }
```

### Examples

#### `getblockcount`

Input:

```
{
   "jsonrpc": "2.0",
   "id": "test",
   "method": "getblockcount",
   "params": {}
}
```

Output:

```
 {
   "id": "test",
   "jsonrpc": "2.0",
   "result": {
      "count": 123456,
      "status": "OK"
   }
 }
```

#### `getblockhash`

Input:

```
 {
   "jsonrpc": "2.0",
   "id": "test",
   "method": "on_getblockhash",
   "params": {
      "height": 123456
   }
 }
```

Output:

```
 {
   "id": "test",
   "jsonrpc": "2.0",
   "result": "a7428..."
 }
```

#### `getblocktemplate`

Input:

```
 {
   "jsonrpc": "2.0",
   "id" : "test",
   "method": "getblocktemplate",
   "params": {
      "reserve_size": 200,
      "wallet_address": "28j5g2Hbe1..."
   }
 }
```

Output:

```
 {
   "id": "test",
   "jsonrpc": "2.0",
   "result": {
      "blocktemplate_blob": "0100de...",
      "difficulty": 65563,
      "height": 123456,
      "reserved_offset": 395,
      "status": ""
   }
 }
```

#### `submitblock`

Input:

```
 {
   "jsonrpc": "2.0",
   "id" : "test",
   "method": "submitblock",
   "params": ["0100b...."]
 }
```

Output:

```
 {
   "id": "test",
   "jsonrpc": "2.0",
   "result": {
      "status" : "OK"
   }
 }
```

#### `getlastblockheader`

Input:

```
 {
   "jsonrpc": "2.0",
   "id" : "test",
   "method": "getlastblockheader"
 }
```

Output:

```
 {
   "id": "test",
   "jsonrpc": "2.0",
   "result": {
      "block_header": {
         "depth": 1,
         "difficulty": 65198,
         "hash": "9a8be83...",
         "height": 123456,
         "major_version": 1,
         "minor_version": 0,
         "nonce": 2358499061,
         "orphan_status": false,
         "prev_hash": "dde56b7e...",
         "reward": 44090506423186,
         "timestamp": 1356589561
      },
      "status": "OK"
   }
 }
```

#### `getblockheaderbyhash`

Input:

```
 {
   "jsonrpc": "2.0",
   "id" : "test",
   "method": "getblockheaderbyhash",
   "params": {
      "hash" : "9a8be8..."
   }
 }
```

Output:

```
 {
   "id": "test",
   "jsonrpc": "2.0",
   "result": {
      "block_header": {
         "depth": 1,
         "difficulty": 65198,
         "hash": "9a8be83...",
         "height": 123456,
         "major_version": 1,
         "minor_version": 0,
         "nonce": 2358499061,
         "orphan_status": false,
         "prev_hash": "dde56b7e...",
         "reward": 44090506423186,
         "timestamp": 1356589561
      },
      "status": "OK"
   }
 }
```

#### `getblockheaderbyheight`

Input:

```
 {
   "jsonrpc": "2.0",
   "id" : "test",
   "method": "getblockheaderbyheight",
   "params": {
      "height" : 123456
   }
 }
```

Output:

```
 {
   "id": "test",
   "jsonrpc": "2.0",
   "result": {
      "block_header": {
         "depth": 1,
         "difficulty": 65198,
         "hash": "9a8be83...",
         "height": 123456,
         "major_version": 1,
         "minor_version": 0,
         "nonce": 2358499061,
         "orphan_status": false,
         "prev_hash": "dde56b7e...",
         "reward": 44090506423186,
         "timestamp": 1356589561
         },
      "status": "OK"
   }
 }
```

#### `getcurrencyId`

Input:

```
 {
   "jsonrpc": "2.0",
   "id" : "test",
   "method": "getcurrencyid"
 }
```

Output:

```
 {
   "id": "test",
   "jsonrpc": "2.0",
   "result": {
      "currency_id_blob" : "31..."
   }
 }
```


# Wallet RPC API

On this page you will find description of every method in Qwertycoin RPC Wallet API. Qwertycoin RPC Wallet is a HTTP server which provides JSON 2.0 RPC interface for Qwertycoin payment operations and address management. Each method has its own page that can be found by clicking on this method.

More on how to start and operate Qwertycoin RPC Wallet can be found here: \[Using-RPC-Wallet.md Qwertycoin RPC Wallet].

To make a JSON PRC request to your Qwertycoin RPC Wallet you should use POST request that looks like this:

```
 http://<service address>:<service port>/json_rpc
```

Where:

* &#x20;is an IP of Qwertycoin RPC Wallet, if RPC Wallet is located on local machine it is either 127.0.0.1 or localhost,
* &#x20;is Qwertycoin RPC Wallet port, by default it is binded to 8070 port, but it can be manually binded to any port you want, read more about this

## Reset

**reset()** method allows you to re-sync your wallet.

Input.

| Argument      | Mandatory | Description      | Format | Example                                                          |
| ------------- | --------- | ---------------- | ------ | ---------------------------------------------------------------- |
| viewSecretKey | No        | Private view key | string | 4a2583e42d010e8aabfed22743789569714196246bf01b5f2fec35af9232d907 |

No output in case of success.

**Important:** If the view\_secret\_key was not pointed out reset() methods resets the wallet and re-syncs it. If the view\_secret\_key argument was pointed out reset() method substitutes the existing wallet with a new one with a specified view\_secret\_key and creates an address for it.

Input value example:

```
 {  
   'params':{  
      'viewSecretKey':'4a2583e42d010e8aabfed22743789569714196246bf01b5f2fec35af9232d907'
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'reset'
 }
```

Output value example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
   }
 }
```

## Save

**save()** method allows you to save your wallet by request.

No input.

No output in case of success.

Input value example:

```
 {  
   'params':{  
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'save'
 }
```

Output value example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
   }
 }
```

## Get view key

**getViewKey()** method returns your view key.

No input.

Output:

| Argument      | Description      | Format | Example                                                          |
| ------------- | ---------------- | ------ | ---------------------------------------------------------------- |
| viewSecretKey | Private view key | string | 4a2583e42d010e8aabfed22743789569714196246bf01b5f2fec35af9232d907 |

Input Example:

```
 {  
   'params':{  
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'getViewKey'
 }
```

Return value example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
      'viewSecretKey':'4a2583e42d010e8aabfed22743789569714196246bf01b5f2fec35af9232d907'
   }
 }
```

## Get spend keys

**getSpendKeys()** method returns your spend keys.

| Argument | Mandatory | Description                                  | Format | Example                                                                                         |
| -------- | --------- | -------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------- |
| address  | Yes       | Valid and existing in this container address | string | KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt |

Output:

| Argument       | Description       | Format | Example                                                          |
| -------------- | ----------------- | ------ | ---------------------------------------------------------------- |
| spendSecretKey | Private spend key | string | 4a2583e42d010e8aabfed22743789569714196246bf01b5f2fec35af9232d907 |
| spendPublicKey | Public spend key  | string | 4a2583e42d010e8aabfed22743789569714196246bf01b5f2fec35af9232d907 |

Input Example:

```
 {  
   'params':{  
      'address':'KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt'
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'getSpendKeys'
 }
```

Return value example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
      'spendSecretKey':'4a2583e42d010e8aabfed22743789569714196246bf01b5f2fec35af9232d907'
      'spendPublicKey':'4a2583e42d010e8aabfed22743789569714196246bf01b5f2fec35af9232d907'
   }
 }
```

## Get addresses

**getAddresses()** method returns an array of your RPC Wallet's addresses.

No input.

Output:

| Argument  | Description                                        | Format | Example   |
| --------- | -------------------------------------------------- | ------ | --------- |
| addresses | Array of strings, where each strings is an address | array  | See below |

Input example:

```
 {  
   'params':{  
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'getAddresses'
 }
```

Output example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
      'addresses':[  
         'KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt',
         'KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt'
      ]
   }
 }
```

## Create address

**createAddress()** method creates an additional address in your wallet.

Input:

| Argument       | Mandatory | Description                                                                          | Format | Example |
| -------------- | --------- | ------------------------------------------------------------------------------------ | ------ | ------- |
| secretSpendKey | No        | Private spend key. If secretSpendKey was specified, RPC Wallet creates spend address | string |         |
| publicSpendKey | No        | Public spend key. If publicSpendKey was specified, RPC Wallet creates view address   | string |         |

**Note:** If none of the above mentioned parameters were specified, RPC Wallet creates spend address with generated spend key.

**Note:** both above mentioned parameters can't be present in a single request

Output:

| Argument | Description     | Format | Example                                                                                         |
| -------- | --------------- | ------ | ----------------------------------------------------------------------------------------------- |
| address  | Created address | string | KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt |

Input value example:

```
 {  
   'params':{  
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'createAddress'
 }
```

Output value example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
      'address':'KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt'
   }
 }
```

## Delete address

**deleteAddress()** method deletes a specified address.

Input:

| Argument | Mandatory | Description               | Format | Example                                                                                         |
| -------- | --------- | ------------------------- | ------ | ----------------------------------------------------------------------------------------------- |
| address  | Yes       | An address to be deleted. | string | KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt |

Output:

In case of success returns an empty JSON object.

Input example:

```
 {  
   'params':{  
      'address':'KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt'
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'deleteAddress'
 }
```

Output example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
   }
 }
```

## Get balance

**getBalance()** method returns a balance for a specified address.

**Please note:** If address is not specified, returns a cumulative balance of all RPC Wallet's addresses.

Input:

| Argument | Mandatory | Description                                          | Format | Example                                                                                         |
| -------- | --------- | ---------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------- |
| address  | No        | Valid and existing address in this particular wallet | string | KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt |

Output:

| Argument         | Description                                | Format | Example |
| ---------------- | ------------------------------------------ | ------ | ------- |
| availableBalance | Available balance of the specified address | uint64 | 123123  |
| lockedAmount     | Locked amount of the specified address     | uint64 | 123123  |

Input example:

```
 {  
   'params':{  
      'address':'KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt'
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'getBalance'
 }
```

Output example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
      'lockedAmount':210,
      'availableBalance':110
   }
 }
```

## Get block hashes

**getBlockHashes()** method returns an array of block hashes for a specified block range.

Input:

| Argument        | Mandatory | Description                 | Format | Example |
| --------------- | --------- | --------------------------- | ------ | ------- |
| firstBlockIndex | Yes       | Starting height             | uint32 | 123123  |
| blockCount      | Yes       | Number of blocks to process | uint32 | 20      |

Output:

| Argument    | Description                                          | Format | Example |
| ----------- | ---------------------------------------------------- | ------ | ------- |
| blockHashes | Array of strings, where each element is a block hash | array  | example |

Input example:

```
 {  
   'params':{  
      'blockCount':11,
      'firstBlockIndex':0
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'getBlockHashes'
 }
```

Output example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
      'blockHashes':[  
         '8a6f1cb7ed7a9db4751d7b283a0482baff20567173dbfae136c9bceb188e51c4',
         '657cd1c33df7f4250d581c97db665cb4a1856ebfadd6efabaeab745c2c76b1be',
         '21047174f74576b6722e72646d7bd553e17d7c9f07fef05151bb1f9df7ed9dd8',
         '504b9bfb2cd34531551cb2d68ea3e34e030d991164589ba7ed24e16fed3ea374',
         'd9d36b5226d11b2cf60e3cf2038b21032c4ac753eabc32fbdd506158f95a69ca',
         '171be105f8e39729838144c78ced336d0ebc29a4bd2c7a22901c0e8c0eaabb42',
         '5f7933bd0257649a44e571d59a9f4083297acbdd338c1c0094a7226ade8d0f0f',
         '967fd52a57e8193f56329bb37abdddce717098429f62c00776342c605a28e19b',
         '6b1a21634a3d72821c43a244af16098eba7c0a59a2e409efa38bd420702f7594',
         '7bb5ca944c5f916f80d50246f48789cc4605efd166efc2308553fe0d208fbe12',
         '83dfef7c288121d87e60f52c74d3da6b422d4b8581ce732ef8b54273bd6c4f45'
      ]
   }
 }
```

## Get transaction hashes

***getTransactionHashes()*** method returns an array of block and transaction hashes.

Transaction consists of transfers. Transfer is an amount-address pair. There could be several transfers in a single transaction.

Input:

| Argument        | Mandatory                                                                   | Description                                        | Format | Example                                                                                         |
| --------------- | --------------------------------------------------------------------------- | -------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------- |
| addresses       | No                                                                          | Array of strings, where each string is an address  | array  | KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt |
| blockHash       | **Only one of these parameters (blockHash or firstBlockIndex) is allowed.** | Hash of the starting block                         | string | f8f07ace392474bfbdc0fc30749a45f779a8aea10c489a103270f63ed88178ad                                |
| firstBlockIndex | **Only one of these parameters (blockHash or firstBlockIndex) is allowed.** | Starting height                                    | uint32 | 123123                                                                                          |
| blockCount      | Yes                                                                         | Number of blocks to return transaction hashes from | uint32 | 20                                                                                              |
| paymentId       | No                                                                          | Valid payment\_id                                  | string | somePaymentId                                                                                   |

***Note:*** if **paymentId** parameter is set, getTransactionHashes() method returns transaction hashes of transactions that contain specified payment\_id. (in the set block range)

**Note:** if **addresses** parameter is set, getTransactionHashes() method returns transaction hashes of transactions that contain transfer from at least one of specified addresses.

**Note:** if both above mentioned parameters are set, getTransactionHashes() method returns transaction hashes of transactions that contain both specified payment\_id and transfer from at least one of specified addresses.

Output:

| Argument | Description | Format | Example |
| -------- | ----------- | ------ | ------- |

Input example:

```
 {  
   'params':{  
      'blockCount':100,
      'firstBlockIndex':0,
      'addresses':[  
         'KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt'
      ]
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'getTransactionHashes'
 }
```

Output example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
      'items':[  
         {  
            'transactionHashes':[  
                957dcbf54f327846ea0c7a16b2ae8c24ba3fa8305cc3bbc6424e85e7d358b44b
                25bb751814dd39bf46c972bd760e7516e34200f5e5dd02fda696671e11201f78
            ],
            'blockHash':'8a6f1cb7ed7a9db4751d7b283a0482baff20567173dbfae136c9bceb188e51c4'
         }
      ]
   }
}
```

## Get transactions

**getTransactions()** method returns an array of block and transaction hashes.

Transaction consists of transfers. Transfer is an amount-address pair. There could be several transfers in a single transaction.

Input:

| Argument        | Mandatory                                                               | Description                                        | Format | Example                                                          |
| --------------- | ----------------------------------------------------------------------- | -------------------------------------------------- | ------ | ---------------------------------------------------------------- |
| addresses       | No                                                                      | Array of strings, where each string is an address  | array  | See below                                                        |
| blockHash       | Only one of these parameters (blockHash or firstBlockIndex) is allowed. | Hash of the starting block                         | string | 8fa07712cbf22c263834c0ac9a3f05058856a1fa7fa3d3eda332f63519b23bd1 |
| firstBlockIndex | Only one of these parameters (blockHash or firstBlockIndex) is allowed. | Starting height                                    | uint32 | 123123                                                           |
| blockCount      | Yes                                                                     | Number of blocks to return transaction hashes from | uint32 | 20                                                               |
| paymentId       | No                                                                      | Valid payment\_id                                  | string | somePaymentId                                                    |

**Note:** if **paymentId** parameter is set, getTransactions() method returns transactions that contain specified payment\_id. (in the set block range)

**Note:** if **addresses** parameter is set, getTransactions() method returns transactions that contain transfer from at least one of specified addresses.

**Note:** if both above mentioned parameters are set, getTransactions() method returns transactions that contain both specified payment\_id and transfer from at least one of specified addresses.

Output:

| Argument | Description          | Format | Example |
| -------- | -------------------- | ------ | ------- |
| items    | Array that contains: |        |         |

```
        -   block\_hash - string - hash of the block which contains a transaction                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
        -   transactions - array - contains                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

        ** transactionHash - string - hash of the transaction ** blockIndex - uint32 - number of the block that contains a transaction ** timestamp - uint64 - timestamp of the transaction ** isBase - boolean - shows if the transaction is a coinbase transaction or not ** unlockTime - uint64 - height of the block when transaction is going to be available for spending ** amount - int64 - amount of the transaction ** fee - uint64- transaction fee ** extra - string ** paymentId - string - payment\_id of the transaction (optional) ** transfers - array - contains **\* address - string **\* amount - int64  | array  | See below |
```

Input example:

```
 {  
   'params':{  
      'blockCount':1000,
      'firstBlockIndex':1,
      'addresses':[  
         'KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt',
         'KegWNCZv8CQ5YoUZFLAUpxQhHt9FAo5KhXBEaHGTeaDD1t5ZZsKoEMQ8sgUMcyKbwpFJGaaY73Bwf3bUXVLsgAZa7nCv85k',
         'KiQ5AonXm7saDTsNEi9uJsb5HswnafrsVLn2vWT1PGGTi1KFbJypdqs7xWrdU54ieXcdQtiV1bDAcVZjYjwFg41v9v7x869'
      ],
      paymentId:'somePaymentId'
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'getTransactions'
 }
```

Output example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
      'items':[  
         {  
            'blockHash':'01bd06ca731914f27e143bbb902ce0bc05bff13d76faa027ea817e68f217488c',
            'transactions':[  
               {  
                  'fee':-70368475742208,
                  'extra':'0127cea59bfadc49aa02ed4a225936671e55607b5241621abca2a5e14405906dbb',
                  'timestamp':1446029698,
                  'blockIndex':1,
                  'state':0,
                  'transactionHash':'06ec210a8359f253f8b2160a0d6040cf89f2a05a553aaa577b7f508ee5d831f9',
                  'amount':70368475742208,
                  'unlockTime':11,
                  'transfers':[  
                     {  
                        'amount':70368475742208,
                        'type':0,
                        'address':'KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt'
                     }
                  ],
                  'paymentId':'',
                  'isBase':True
               }
            ]
         },
         {  
            'blockHash':'28aa7d32f4274f6387969d7671bd4db98fd871bf0dd510a1df5e2ef4b1d41a35',
            'transactions':[  
               {  
                  'fee':-70368207307776,
                  'extra':'01a8e6e408282b2ddf343e20d5e9aab283723ba10ab7ab7b3131f6981b02a84431',
                  'timestamp':1446029698,
                  'blockIndex':2,
                  'state':0,
                  'transactionHash':'922d00d2e6eaed63f62d8e3b968cb08b6ea5c555fe0e6af948ab06efe6eb213a',
                  'amount':70368207307776,
                  'unlockTime':12,
                  'transfers':[  
                     {  
                        'amount':70368207307776,
                        'type':0,
                        'address':'KfXkT5VmdqmA7bWqSH37p87hSXBdTpTogN4mGHPARUSJaLse6jbXaVbVkLs3DwcmuD88xfu835Zvh6qBPCUXw6CHK8koDCt'
                     }
                  ],
                  'paymentId':'',
                  'isBase':True
               }
            ]
         }
      ]
   }
 }
```

## Get unconfirmed transaction hashes

**getUnconfirmedTransactionHashes()** method returns information about the current unconfirmed transaction pool or for a specified addresses.

Transaction consists of transfers. Transfer is an amount-address pair. There could be several transfers in a single transaction.

Input:

| Argument  | Mandatory | Description                                            | Format | Example   |
| --------- | --------- | ------------------------------------------------------ | ------ | --------- |
| addresses | No        | Array of strings, where each string is a valid address | array  | See below |

**Note:** if **addresses** parameter is set, getUnconfirmedTransactionHashes() method returns transactions that contain transfer from at least one of specified addresses.

Output:

| Argument          | Description                                                                 | Format | Example   |
| ----------------- | --------------------------------------------------------------------------- | ------ | --------- |
| transactionHashes | Array of strings, where each string is a hash of an unconfirmed transaction | array  | See below |

Input example:

```
 {  
   'params':{  
      'addresses':[  
         'KdbDPifEfmQDZAxMxjrkbPPLHtwv1ezGr2GRB3P377ecToxGkrTFTe2EEjAKbhPqA61FPTi14UpkMVMh2pn1et1y8PdDwn4',
         'KfBV6ryfQdrNFhQ3pwnWw21mKomejKpdVj8diVdu5nAdYh7vft5JcMHjMshEcAqAJGaUSmDvTPKTtSWyGxc52R1c4JFVKUP',
         'KdA226MT2R3CtZH6oVHVQJ3J1j6HS7ircHNrJMvSb3tRTqnGEBjqojdUHzPKRigkjecw1iwW15qRp4bWvV2dTuz8QNMdAU8'
      ]
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'getUnconfirmedTransactionHashes'
 }
```

Output example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
      'transactionHashes':[  
         ...,
         ...,
         ...
      ]
   }
 }
```

## Get transaction

**getTransaction()** method returns information about a particular transaction.

Transaction consists of transfers. Transfer is an amount-address pair. There could be several transfers in a single transaction.

Input:

| Argument        | Mandatory | Description                       | Format | Example |
| --------------- | --------- | --------------------------------- | ------ | ------- |
| transactionHash | Yes       | Hash of the requested transaction | string | example |

Output:

| Argument    | Description | Format | Example |
| ----------- | ----------- | ------ | ------- |
| transaction | Contains:   |        |         |

```
           -   transactionHash - string - hash of the transaction                                                
           -   blockIndex - uint32 - number of the block that contains a transaction (optional)                  
           -   timestamp - uint64 - timestamp of the transaction (optional)                                      
           -   isBase - boolean - shows if the transaction is a coinbase transaction or not                      
           -   unlockTime - uint64 - height of the block when transaction is going to be available for spending  
           -   amount - int64 - amount of the transaction                                                        
           -   fee - uint64- transaction fee                                                                     
           -   extra - string - ?                                                                                
           -   paymentId - string - payment\_id of the transaction (optional)                                    
           -   transfers - array - contains                                                                      

           ** address - string ** amount - int64                                                               | array  | See below |
```

Input example:

```
 {  
   'params':{  
      'transactionHash':'92423b0857d36bd172b3f2effbd47ea477bfe0618a50c29d475542c6d5d1b835'
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'getTransaction'
 }
```

Output example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
      'transaction':{  
         'fee':1000000,
         'extra':'0130b4472974f2deb9fae7d8fd6602b26396379f3fa05cca2430e10e9e60179f42',
         'timestamp':0,
         'blockIndex':4294967295,
         'state':0,
         'transactionHash':'92423b0857d36bd172b3f2effbd47ea477bfe0618a50c29d475542c6d5d1b835',
         'amount':-1703701,
         'unlockTime':0,
         'transfers':[  
            {  
               'amount':123456,
               'type':0,
               'address':'KiQxu9U3F7vdGggu4NQ3CKDhk59vMQyMaFbLtu7TU4TdUkNtuJufqpo67r2e5j5p44SBsBBygaRdmeB4gwH9CF1C3zufGWd'
            },
            {  
               'amount':234567,
               'type':0,
               'address':'KccShmn49D4JZED1g4CM98RpszuMbbDEaYNVpCWjUkDuWPVpo8EEUHaReKeHBmpoNdTENs841QUBRNitFHD7W29oDVfV9ze'
            },
            {  
               'amount':345678,
               'type':0,
               'address':'KfCPBzzR28edvZqLv6t8XVY98jeK6YEjS3birBPTHjY1hXSFM5k5pjUNSur6UhbP8EaqhZ69PVJF991KqCtYFox7NUSvcjw'
            }
         ],
         'paymentId':'',
         'isBase':False
      }
   }
 }
```

## Send transaction

**sendTransaction()** method allows you to send transaction to one or several addresses. Also, it allows you to use a payment\_id for a transaction to a single address.

Input:

| Argument      | Mandatory | Description                                                                                                                                                                                          | Format | Example                                                                                                                             |
| ------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| addresses     | No        | Array of strings, where each string is an address to take the funds from                                                                                                                             | array  | See below                                                                                                                           |
| transfers     | Yes       | Array that contains: • address - string • amount - int64                                                                                                                                             | array  | "amount": 10000000000, "address": "Kcpg4B4kjwefDeBHGyRdUbgeq5FSYHCof7db8uj6dkFAjkvLSQBc3J7iDSwFx75TUj6MnDYKM5Eu3UmtaAJhvEjdKw1Jkz5" |
| fee           | Yes       | Transaction fee. Minimal fee in Qwertycoin network is 1 QWC. This parameter should be specified in minimal available QWC units. For example, if your fee is 1.1 QWC, you should pass it as 110000000 | uint64 | 1000000                                                                                                                             |
| unlockTime    | No        | Height of the block until which transaction is going to be locked for spending.                                                                                                                      | uint64 | 0                                                                                                                                   |
| anonymity     | Yes       | Privacy level (a discrete number from 1 to infinity). Level 6 and higher is recommended.                                                                                                             | uint64 | 6                                                                                                                                   |
| extra         | No        | String of variable length. Can contain A-Z, 0-9 characters.                                                                                                                                          | string |                                                                                                                                     |
| paymentId     | No        | payment\_id                                                                                                                                                                                          | string | somePaymentId                                                                                                                       |
| changeAddress | No        | Valid and existing in this container address.                                                                                                                                                        | string | KaUMDHkTqSpaDBtK2pZc4MDaveb2DhQfYiUZ2ACy7evsKYYwWefrvhy34RHNChptMPbefT387qpH7MGkWCsdQJAeGpjmhfz                                     |

Note: if container contains only 1 address, **changeAddress** field can be left empty and the change is going to be sent to this address

Note: if **addresses** field contains only 1 address, **changeAddress** can be left empty and the change is going to be sent to this address

Note: in the rest of the cases, **changeAddress** field is mandatory and must contain an address.

Output:

| Argument        | Description                   | Format | Example                                                          |
| --------------- | ----------------------------- | ------ | ---------------------------------------------------------------- |
| transactionHash | Hash of the sent transaction. | string | 93faedc8b8a80a084a02dfeffd163934746c2163f23a1b6022b32423ec9ae08f |

Input Example:

```
 {  
   'params':{  
      'anonymity':0,
      'fee':1000000,
      'unlockTime':0,
      'paymentId':'somePaymentId',
      'addresses':[  
         'KbzvFzjQeWCZawinhkDZUKF6pjDv1TLU678poSAEFKWRL3kgWk48sxCN8z6tpfkzMZ82AQyfhiU4uZ66mnU942AHKokr6PG',
         'KiHzZqEzezyaZCP5AdZ1v6K1dAi5aBrU3E9czrZbS6whPUVDBLPLdqU4aiLviNUFfXMEh2kQwSEJGBNpegY6To4wQ9aBwDU',
         'KacpStR6z373JoBgBAVoUch9C1Uzbp3p3e95NJkZtcGPe7sJ3AZNzfzL1qzh7zqvekDxvBZepZGqcRsa7MhCmP3NL27GH5V'
      ],
      'transfers':[  
         {  
            'amount':123456,
            'address':'KbjVbfZkw5eYMMBBYCEoc3TtMe6yNQgPvSepH1KRqxhc3Pr2VBtFLrtD1E6oQAEbtJQsbJrtqWjMoKo1q5HtKAFdUcYBH41'
         },
         {  
            'amount':234567,
            'address':'Kis97C9AM1PQataUmbpjmXbZz2KSynxgURYb8moceDPXVWBwt4pjGtvAmfY3qmhcrBZgyKfLGnhGCW8LxBHGiDrrC5GLjhD'
         },
         {  
            'amount':345678,
            'address':'KdAzF8benG4aygdY5v5R5j8bLrzN1hSTfb2c8UneNbNW1VB4QnWD7SSPGpne17HGiLhid1VGq73B3Wc6ZWLaq2GZEaw9hrc'
         }
      ],
      'changeAddress':'KbzvFzjQeWCZawinhkDZUKF6pjDv1TLU678poSAEFKWRL3kgWk48sxCN8z6tpfkzMZ82AQyfhiU4uZ66mnU942AHKokr6PG'
   },
   'jsonrpc':'2.0',
   'id':'test',
   'method':'sendTransaction'
 }
```

Return value example:

```
 {  
   'jsonrpc':'2.0',
   'id':'test',
   'result':{  
      'transactionHash':'93faedc8b8a80a084a02dfeffd163934746c2163f23a1b6022b32423ec9ae08f'
   }
 }
```


