• Stars
    star
    1,199
  • Rank 39,044 (Top 0.8 %)
  • Language
    C++
  • License
    MIT License
  • Created over 7 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Qtum Core Wallet

What is Qtum?

Qtum is a decentralized blockchain project built on Bitcoin's UTXO model, with support for Ethereum Virtual Machine based smart contracts, and secured by a proof of stake consensus model. It achieves this through the revolutionary Account Abstraction Layer which allows the EVM to communicate with Qtum's Bitcoin-like UTXO blockchain. For more general information about Qtum as well as links to join our community, go to https://qtum.org

Welcome to the Qtum Fastlane Main Network. This is the main network where the tokens hold value and should be guarded very carefully. If you are testing the network, or developing unstable software on Qtum, we highly recommend using either testnet or regtest mode.

The major features of the Qtum network include:

  1. Compatibility with the Ethereum Virtual Machine, which allows for compatibility with most existing Solidity based smart contracts. No special solidity compiler is required to deploy your smart contract to Qtum.
  2. A Proof of Stake consensus system which is optimized for Qtum's contract model. Any user can stake and help to secure the network. There is no voting, master nodes, or minimum amount required. There have been transactions as small as 2 Qtum that have created blocks in the past. Staking from smart contracts is under development.
  3. The Decentralized Governance Protocol is completely implemented and functional, which allows certain network parameters to be modified without a fork or other network disruption. This currently controls parameters like block size, gas prices, etc.
  4. Uses the UTXO transaction model and is compatible with Bitcoin, allowing for existing tooling and workflows to be used with Qtum. This allows for the infamous SPV protocol to be used which is ideal for light wallets on mobile phones and IoT devices.

Note: Qtum Core is considered beta software. We make no warranties or guarantees of its security or stability.

Qtum Documentation and Usage Resources

These are some resources that might be helpful in understanding Qtum.

Basic usage resources:

Development resources:

General Info about Qtum:

Developer's Tools

What is Qtum Core?

Qtum Core is our primary mainnet wallet. It implements a full node and is capable of storing, validating, and distributing all history of the Qtum network. Qtum Core is considered the reference implementation for the Qtum network.

Qtum Core currently implements the following:

  • Sending/Receiving QTUM coins
  • Sending/Receiving QRC20 tokens on the Qtum network
  • Staking and creating blocks for the Qtum network
  • Creating and interacting with smart contracts
  • Running a full node for distributing the blockchain to other users
  • "Prune" mode, which minimizes disk usage
  • Regtest mode, which enables developers to very quickly build their own private Qtum network for Dapp testing
  • Testnet mode, using the public Qtum Testnet, with faucet available
  • Compatibility with the Bitcoin Core set of RPC commands and APIs
  • Full SegWit capability with p2sh-segwit (legacy) and bech32 (native) addresses

Alternative Wallets

Qtum Core uses a full node model, and thus requires downloading the entire blockchain. If you do not need the entire blockchain, and do not intend on developing smart contracts, it may be more ideal to use an alternative wallet such as one of our light wallets that can be synchronized in a matter of seconds.

Qtum Web Wallet

A browser wallet that supports the Ledger hardware wallet, offline cold wallet, restoration from mobile wallets, creation of QRC20 tokens and QRC1155 NFTs.

Web site https://qtumwallet.org

User documentation https://github.com/qtumproject/documents/tree/master/en/QTUM-WebWallet-usage

Qtum Electrum

A light wallet that supports the Ledger and Trezor hardware wallets and is based on the well-known Electrum wallet software.

Download: https://github.com/qtumproject/qtum-electrum/releases

iOS and Android Wallets

These wallets run on mobile devices and synchronize quickly.

Android Download: https://play.google.com/store/apps/details?id=org.qtum.newwallet

iOS Download: https://github.com/qtumproject/qtum-ios (open source, deprecated)

Qnekt Chrome Wallet

This light wallet runs in your Chrome browser as a browser extension, based on the popular MetaMask wallet.

Community Resources

Make sure to check out these resources as well for more information and to keep up to date with all the latest news about Qtum. At least 1 developer is always around, so if you're developing on Qtum and need help, we'd love to welcome you to our community.

Qtum Smart Contract Limitations

  • EVM smart contracts cannot receive coins from or send coins to any address type other than pay-to-pubkeyhash (starts with Q) addresses. This is due to a limitation in the EVM
  • Contracts are not allowed to create contracts with an initial endowment of coins. The contract must first be created, and then be sent coins in a separate transaction. Humans are also not allowed to create contracts with an initial endowment of coins.
  • Although all of the infrastructure is present, Qtum Core does not currently parse Solidity event data. You must parse this yourself using either searchlogs or -record-log-opcodes features.
  • It is not possible to send a contract coins without also executing the contract. This is also the case of Ethereum. This was promised in earlier discussions and technically does work, but due to lack of time for testing this feature was disabled.
  • In Qtum there can be multiple addresses used to create a proof-of-stake block. However, the EVM can only see the first output using the coinbase operation in Solidity (this address is also the one registered for the continuous staker rewards after 2000 blocks).

Building Qtum Core

Validate and Reproduce Binaries

Qtum uses a tool called Gitian to make reproducible builds that can be verified by anyone. Instructions on setting up a Gitian VM and building Qtum are provided in Gitan Building

Build on Ubuntu

This is a quick start script for compiling Qtum on Ubuntu

sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils git cmake libboost-all-dev libgmp3-dev
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install libdb4.8-dev libdb4.8++-dev

# If you want to build the Qt GUI:
sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler qrencode

git clone https://github.com/qtumproject/qtum --recursive
cd qtum

# Note autogen will prompt to install some more dependencies if needed
./autogen.sh
./configure 
make -j2

Build on CentOS

Here is a brief description for compiling Qtum on CentOS, for more details please refer to the specific document

# Compiling boost manually
sudo yum install python-devel bzip2-devel
git clone https://github.com/boostorg/boost.git
cd boost
git checkout boost-1.66.0
git submodule update --init --recursive
./bootstrap.sh --prefix=/usr --libdir=/usr/lib64
./b2 headers
sudo ./b2 -j4 install

# Installing Dependencies for Qtum
sudo yum install epel-release
sudo yum install libtool libdb4-cxx-devel openssl-devel libevent-devel gmp-devel

# If you want to build the Qt GUI:
sudo yum install qt5-qttools-devel protobuf-devel qrencode-devel

# Building Qtum
git clone --recursive https://github.com/qtumproject/qtum.git
cd qtum
./autogen.sh
./configure
make -j4

Build on Mac OS

The commands in this guide should be executed in a Terminal application. The built-in one is located in /Applications/Utilities/Terminal.app.

Preparation

Install the Mac OS command line tools:

xcode-select --install

When the popup appears, click Install.

Then install Homebrew.

Dependencies

brew install cmake automake berkeley-db@4 libtool [email protected] miniupnpc openssl pkg-config protobuf qt@5 libevent imagemagick librsvg qrencode gmp

After installing all dependencies, make sure to run "brew link [email protected]" NOTE: This will work for building on Intel Macs and Apple Silicon Macs

NOTE: Building with Qt4 is still supported, however, could result in a broken UI. Building with Qt5 is recommended.

Build Qtum Core

  1. Clone the qtum source code and cd into qtum

     git clone --recursive https://github.com/qtumproject/qtum.git
     cd qtum
    
  2. Build qtum-core:

    Configure and build the headless qtum binaries as well as the GUI (if Qt is found).

    You can disable the GUI build by passing --without-gui to configure.

    ./autogen.sh
    ./configure
    make
    
  3. It is recommended to build and run the unit tests:

    make check
    

Run

Then you can either run the command-line daemon using src/qtumd and src/qtum-cli, or you can run the Qt GUI using src/qt/qtum-qt

License

Qtum is GPLv3 licensed.

Development Process

The master branch is regularly built and tested, but is not guaranteed to be completely stable. Tags are created regularly to indicate new official, stable release versions of Qtum.

The contribution workflow is described in CONTRIBUTING.md and useful hints for developers can be found in doc/developer-notes.md.

Testing

Testing and code review is the bottleneck for development; we get more pull requests than we can review and test on short notice. Please be patient and help out by testing other people's pull requests, and remember this is a security-critical project where any mistake might cost people lots of money.

Automated Testing

Developers are strongly encouraged to write unit tests for new code, and to submit new unit tests for old code. Unit tests can be compiled and run (assuming they weren't disabled in configure) with: make check. Further details on running and extending unit tests can be found in /src/test/README.md.

There are also regression and integration tests, written in Python. These tests can be run (if the test dependencies are installed) with: test/functional/test_runner.py

The CI (Continuous Integration) systems make sure that every pull request is built for Windows, Linux, and macOS, and that unit/sanity tests are run automatically.

Manual Quality Assurance (QA) Testing

Changes should be tested by somebody other than the developer who wrote the code. This is especially important for large or high-risk changes. It is useful to add a test plan to the pull request description if testing the changes is not straightforward.

Translations

Changes to translations as well as new translations can be submitted to Bitcoin Core's Transifex page.

Translations are periodically pulled from Transifex and merged into the git repository. See the translation process for details on how this works.

Important: We do not accept translation changes as GitHub pull requests because the next pull from Transifex would automatically overwrite them again.

More Repositories

1

qtum-electrum

Lightweight Qtum Wallet
Python
72
star
2

x86lib

Qtum's x86 VM
C++
56
star
3

solar

smart contract deployment tool
Go
55
star
4

qtumjs

Qtum DApp JavaScript Library
TypeScript
51
star
5

qtumbook

Developer's Guide to QTUM
30
star
6

qtum-android

Java
28
star
7

qtum-web-wallet

A web wallet for QTUM
Vue
28
star
8

qtum-ios

Objective-C
25
star
9

qtumjs-wallet

A toolkit for building qtum light wallets
TypeScript
21
star
10

documents

HTML
19
star
11

insight-api

JavaScript
17
star
12

qtum-docker

Docker images for running qtumd
Dockerfile
13
star
13

qtuminfo

JavaScript
12
star
14

qtum-bitcore

Fork of Bitcore to work on Qtum - Not as well tested and primarily used for the extra RPC calls needed for the block explorer
C++
12
star
15

homebrew-qtum

Ruby
10
star
16

qtuminfo-api

JavaScript
10
star
17

cpp-eth-qtum

C++
9
star
18

qtumcore-node

JavaScript
9
star
19

qips

Qtum Improvement Proposals
9
star
20

dApp-boilerplate

Example project to jump start DApp development
TypeScript
7
star
21

qtuminfo-ui

Vue
7
star
22

qtumjs-abiplayer

DApp UI to interact with deployed contracts
TypeScript
6
star
23

qtum-explorer

JavaScript
6
star
24

qtumj

bitcoinj ported to qtum
Java
6
star
25

QRC20Token

QTUM QRC20 Token Template
6
star
26

qtumbook-mytoken-qtumjs-cli

Interacting With ERC20 using qtumjs
JavaScript
6
star
27

qtum-enterprise

C++
5
star
28

qtum-ipfs

A demo for sharing files via Qtum and IPFS
JavaScript
5
star
29

qtum-neutron

Qtum Neutron based rewrite of the Qtum-x86 project
C++
5
star
30

x86-toolchain

Source code for building a toolchain targeting Qtum's x86 VM
C
4
star
31

qtumcore-lib

JavaScript
4
star
32

qtumjs-dapp-erc20

A example DApp for ERC20 MintableToken
TypeScript
4
star
33

qtumd-rpc

JavaScript
4
star
34

qtum-electrumx-server

Python
4
star
35

qtumjs-lib

JavaScript
4
star
36

qtumportal

Qtum DApp Server
Go
3
star
37

mobile-api-server

JavaScript
3
star
38

qrc20-wrapper

PHP
3
star
39

qtum-lightning

Note: This is an early prototype!
C
3
star
40

qtum-x86

The working repo for the qtum-x86 prototype and eventual testnet version. It will be merged back to qtum when the mainnet is complete
C++
2
star
41

simple-payment-channel-demo

payment channel PoC
JavaScript
2
star
42

QRC721Token

QRC721 Token Template
JavaScript
2
star
43

qrypto-backup

A Chrome Extension for DApp
TypeScript
2
star
44

qtum-x86-book

Gitbook documentation for Qtum-x86
2
star
45

plasma-mvp

QTUM Port of Plasma MVP
Python
2
star
46

qtum-exporter

A Prometheus exporter for Qtum nodes.
Python
2
star
47

qtumjs-crowdsale-cli

Example crowdsale
JavaScript
2
star
48

qtum-itds

Manual test descriptions for Qtum
2
star
49

x86-stories

2
star
50

offline-staking-contract

1
star
51

neutron-star-rt

The minimal runtime crate for running Rust programs on the Qtum Neutron platform
Assembly
1
star
52

ethereum-block-processor

Computes the Ethereum block hash for Qtum blocks
Go
1
star
53

qtum-ethjs-abi

Forked ABI encoding and decoding
JavaScript
1
star
54

qtool

Qtool is a cli command, a JSON RPC api and a golang package that provides crypto functionalities specific for qtum blockchain
Go
1
star
55

qtumx-client

qtumx client
JavaScript
1
star
56

abigen

ABI code and data generator for Qtum's x86 VM
1
star
57

qx86-codeify

Converts an ELF file to the Qtum-x86 contract bytecode format
C
1
star
58

qtuminfo-insight

JavaScript
1
star
59

gitian.sigs

Signatures produced from deterministic Gitian builds
1
star
60

qtum-dgp

JavaScript
1
star
61

blue-app-qtum

C
1
star
62

qtum-evmone

C++
1
star
63

neutron-star-constants

Simple crate with various constants to be shared between the Neutron hypervisor layer and Neutronstar
Rust
1
star
64

qtumjs-doc-cn

qtumjs documentation δΈ­ζ–‡
JavaScript
1
star
65

simple-abi

A tool used to create ABI templates for x86 smart contract interactions
Go
1
star
66

qx86-rs

Rust implementation of the Qtum-x86 subset of the x86 architecture
Rust
1
star