7d8acd1explicitly disable AES on ARM (Riccardo Spagni)4222b37add arm6 target and flags (Riccardo Spagni)5675325new makefile targets for static builds (Riccardo Spagni)9519526Only compile BerkeleyDB as an option in non-static (Thomas Winget)7b14d4aSteps toward multiple dbs available -- working (Thomas Winget)dbdcf11blockchain_converter: Add support for resume from last block (warptangent)4880803blockchain_import: lengthen string for line clear (warptangent)7476d2eblockchain_export: show progress during export (warptangent)4bedd68Update Blockchain::get_db() to return reference instead of pointer (warptangent)0386e99Add README for blockchain converter, importer, and exporter utilities (warptangent)ead7fadBerkeleyDB implementation of BlockchainDB seems to be working! (Thomas Winget)ffadb65blockchain_export: Add compile-time support for BlockchainDB (warptangent)f6cbfb6Add blockchain_export utility (warptangent)275cbd4Add support for database open with flags (warptangent)cb862cbAdd mdb_flags variable to LMDB database open (warptangent)260cc56Add blockchain_import utility (warptangent)ca75b47Blockchain: add get_db() accessor, needed for blockchain_import (warptangent)a3dd9d1blockchain_converter: Add support for batch transactions (warptangent)acb5d29Update and relocate comment that applies class wide (warptangent)bd9da6dMerges #33 (Thomas Winget)6e9e8abMove db_drivers/ to external/ (Thomas Winget)56a1bf5fixed BUILD_64 option (Riccardo Spagni)c97a685fixed arch_width option (Riccardo Spagni)3a3c07cfixed msys2 / mingw folders based on architecture, added license to unbound CMakeList as that is not part of standard Unbound (Riccardo Spagni)3b3da86moved 32-bit/64-bit detection into main CMakeLists (Riccardo Spagni)a0cbf73removed findlmdb.cmake, no longer required (Riccardo Spagni)0e8bbdb32-bit LMDB, removed check for in-system LMDB as it is consensus-critical (Riccardo Spagni)11e8157Revert "Moved db_drivers/ into external/ for consistency" (Thomas Winget)daf2a8fRevert "Build fixed, goofed up some CMake" (Thomas Winget)e146027BlockchainBDB passes unit tests (Thomas Winget)43477b7BerkeleyDB Blockchain building, not working yet (Thomas Winget)cade0daCMake wiring, minor cleanup, minor test addition (Thomas Winget)1bc8939BerkeleyDB BlockchainDB impl copy/paste/modify (Thomas Winget)5112dc3Try to not pollute cryptonote namespace (Thomas Winget)edef0bbInitial commit of BDB BlockchainDB implementation (Thomas Winget)eee3ee7BlockchainDB implementations have names now (Thomas Winget)5d2a2b7Fixed includes in BlockchainDB unit tests (Thomas Winget)8b82f3cBuild fixed, goofed up some CMake (Thomas Winget)b213356Moved db_drivers/ into external/ for consistency (Thomas Winget)5eab480Moved BlockchainDB into its own src/ subfolder (Thomas Winget)0ad0784Changed log level of debug message -- too spammy (Thomas Winget)6485dacBlockchainLMDB: Add profiling to tx_exists() (warptangent)83fb6d8BlockchainLMDB: Add batch transaction support to tx_exists() (warptangent)8529c0eBlockchainDB, BlockchainLMDB: Add profiling for DB commits (warptangent)7a66b8bBlockchainDB: Add virtual function declarations for batch transactions (warptangent)b7a2d84BlockchainLMDB: Add check for open database to two functions (warptangent)58ecc58BlockchainLMDB: Add support for batch transactions (warptangent)8909d7dImprove block and tx processing efficiency by less repeat hashing (warptangent)3676ac5Add profiling to block and tx processing (warptangent)ce71abdMove LMDB storage to subfolder (warptangent)42f8fe5Fix formatting (warptangent)aa82f78Fix log statement (warptangent)26873dbRemove unused variable (warptangent)4b90fd3Add log statement (warptangent)2531aa3Add and extend log statements (warptangent)59305d3Blockchain: match original function declaration from blockchain_storage (warptangent)cd972bdUpdate year and formatting in license (warptangent)b88ab64Fix Blockchain::get_tail_id() to set parameter to last block number instead of height (warptangent)963bc09Revert "Bounds error, should fix #27" (warptangent)6f1c4b4Bounds error, should fix #27 (Thomas Winget)84fe5fbAdd compile-time support for both db implementations: in-memory and LMDB (warptangent)8bd1983Blockchain: reflect log updates from blockchain_storage (warptangent)7f9b070Blockchain: reflect log and assert updates from blockchain_storage (warptangent)70342ecBlockchain: reflect log level of blockchain_storage (warptangent)c8d27fbBlockchain: reflect assert behavior of blockchain_storage for get_tx_outputs_gindexs() (warptangent)d00ee78Update recently added log statement to fix possible null dereference (warptangent)acd4c36Should fix std::min issues related to size_t (Thomas Winget)3488359Add in-source lmdb to build process (Thomas Winget)4e45faeInitial import of lmdb source (Thomas Winget)800d9b9Remove code previously made unused and marked unused (warptangent)0840c2fFix height assertion in Blockchain::handle_alternative_block() (warptangent)63051beFix comparison between main and alternate chain's cumulative difficulty. (warptangent)909ea81Remove a have_block() check so alternate block can be processed (warptangent)4d0a94bComplete implementation of transaction removal (warptangent)1701c26Use block index when obtaining block's difficulty for log statement (warptangent)4eba21fFix transfers to support mixins (warptangent)d045dfaFix transfers (without mixins) (warptangent)429a740throw inline functions need to keep exception type (Thomas Winget)14555eeFixes segfault in Blockchain::handle_alternative_block (Thomas Winget)5086ca1add BlockchainDB tests to new cmake (Thomas Winget)c5c100cObtain tx hash and tx output index from amount and output offset (warptangent)ad8200adb_lmdb: fix global index calculation off by 1 (moneromooo-monero)57b80c5db_lmdb: remove redundant checks (moneromooo-monero)1362846blockchain_converter: add --testnet for converting testnet blockchain (moneromooo-monero)c50cd95Fixes a bug with getting output metadata from BlockchainDB (Thomas Winget)c3fa07bupdate comments to reflect changed code (Thomas Winget)59d2b0edb_lmdb: do not give the group database write permissions (moneromooo-monero)4c2a452db_lmdb: catch attempt to remove block from an empty blockchain (moneromooo-monero)3a3459ddb_lmdb: factor all the log+throw code paths (moneromooo-monero)3fcb8dadb_lmdb: factor the MDB_val setup code (moneromooo-monero)609cf7fblockchain_converter: a bit more user friendly output (moneromooo-monero)2b9f737blockchain_converter: only call data path function once (moneromooo-monero)1860658blockchain: do not append "testnet" to the data directory (moneromooo-monero)1c578addb_lmdb: remove block timestamp too when removing a block (moneromooo-monero)c93a186db_lmdb: do not cast const away (moneromooo-monero)198368bblockchain: fix wallet syncing from scratch (moneromooo-monero)1d23db2db_lmdb: do not keep a dangling pointer to stack objects (moneromooo-monero)29b5876db_lmdb: make cursor internal members private (moneromooo-monero)a3157d7blockchain_storage: refactor genesis block creation (moneromooo-monero)8e41b1eblockchain_storage: add consts where appropriate (moneromooo-monero)98bdadcblockchain_converter: delete blockchain on succesful exit (moneromooo-monero)256162fcheckpoints: add consts where appropriate (moneromooo-monero)b7270abblockchain: add consts where appropriate (moneromooo-monero)23f3cb4blockchain_db: add consts where appropriate (moneromooo-monero)10fd6cablockchain_db: factor some exception code (moneromooo-monero)11129b9blockchain_converter: use the actual blockchain location (moneromooo-monero)0886183build: add liblmdb to the cmake autodetection system (moneromooo-monero)215e63bextraneous semicolon in Blockchain::complete_timestamps_vector (Thomas Winget)8e1b7e2raised maximum mapsize for lmdb to ~16GB (Thomas Winget)6c8b8acmore blockchain height-related fixes, syncing other nodes code this time (Thomas Winget)9455e0c~ didn't work, need hard path. debug print. (Thomas Winget)4af0918very, VERY primitive blockchain converter (Thomas Winget)26a7db3add new checkpointing behavior to Blockchain class (Thomas Winget)767aac2Remove unused dependency (Thomas Winget)006e106Store output pubkeys separately, bug fixes (Thomas Winget)ab7951dMinor bugfixes, redundancy removal (Thomas Winget)71b18d7moar bug fixes, removed debug prints (Thomas Winget)0915913BlockchainLMDB seems to be working*! (Thomas Winget)1a546e3some bug fixes, but still needs work (Thomas Winget)006afe2Minor bug fixes and debug prints (Thomas Winget)90f402eminor fixes to Blockchain.cpp (Thomas Winget)74a1a89Integrate BlockchainDB into cryptonote_core (Thomas Winget)d8c570bAll LMDB BlockchainDB implemented, not tested (Thomas Winget)e47e343LMDB blockchain: remove outputs and spent keys (Thomas Winget)a0af217Adding block data to LMDB BlockchainDB coded (Thomas Winget)db00ce0Parts of LMDB impl of BlockchainDB done and working (Thomas Winget)1240cf8BlockchainDB unit tests, lmdb linker flag (Thomas Winget)b98b964Initial commit of lmdb BlockchainDB impl (Thomas Winget)bc44bc1Initial commit of BlockchainDB tests, other misc (Thomas Winget)90d6f8bAdding libglim as an external library (Thomas Winget)07733f9update new blockchain to build with new changes (Thomas Winget)1ffbeb2stupid past me, fixing typos and shit... (Thomas Winget)67515b8missing typedef (Thomas Winget)aba548cimport of BlockchainDB files (Thomas Winget)
Monero
Copyright (c) 2014-2015, The Monero Project
Development Resources
Web: getmonero.org
Forum: forum.getmonero.org
Mail: dev@getmonero.org
Github (staging): https://github.com/monero-project/bitmonero
Github (development): http://github.com/monero-project/bitmonero/tree/development
IRC: #monero-dev on Freenode
Introduction
Monero is a private, secure, untraceable currency. You are your bank, you control your funds, and nobody can trace your transfers.
Privacy: Monero uses a cryptographically sound system to allow you to send and receive funds without your transactions being easily revealed on the blockchain (the ledger of transactions that everyone has). This ensures that your purchases, receipts, and all transfers remain absolutely private by default.
Security: Using the power of a distributed peer-to-peer consensus network, every transaction on the network is cryptographically secured. Individual wallets have a 24 word mnemonic that is only displayed once, and can be written down to backup the wallet. Wallet files are encrypted with a passphrase to ensure they are useless if stolen.
Untraceability: By taking advantage of ring signatures, a special property of certain types of cryptography, Monero is able to ensure that transactions are not only untraceable, but have an optional measure of ambiguity that ensures that transactions cannot easily be tied back to an individual user or computer.
About this Project
This is the core implementation of Monero. It is open source and completely free to use without restrictions, except for those specified in the license agreement below. There are no restrictions on anyone creating an alternative implementation of Monero that uses the protocol and network in a compatible manner.
As with many development projects, the repository on Github is considered to be the "staging" area for the latest changes. Before changes are merged into that branch on the main repository, they are tested by individual developers, committed to the "development" branch, and then subsequently tested by contributors who focus on thorough testing and code reviews. That having been said, the repository should be carefully considered before using it in a production environment, unless there is a patch in the repository for a particular show-stopping issue you are experiencing. It is generally a better idea to use a tagged release for stability.
Anyone is able to contribute to Monero. If you have a fix or code change, feel free to submit is as a pull request directly to the "development" branch. In cases where the change is relatively small or does not affect other parts of the codebase it may be merged in immediately by any one of the collaborators. On the other hand, if the change is particularly large or complex, it is expected that it will be discussed at length either well in advance of the pull request being submitted, or even directly on the pull request.
Supporting the Project
Monero development can be supported directly through donations.
Both Monero and Bitcoin donations can be made to donate.getmonero.org if using a client that supports the OpenAlias standard
The Monero donation address is: 46BeWrHpwXmHDpDEUmZBWZfoQpdc6HaERCNmx1pEYL2rAcuwufPN9rXHHtyUA4QVy66qeFQkn6sfK8aHYjA3jk3o1Bv16em (viewkey: e422831985c9205238ef84daf6805526c14d96fd7b059fe68c7ab98e495e5703)
The Bitcoin donation address is: 1FhnVJi2V1k4MqXm2nHoEbY5LV7FPai7bb
Core development funding and/or some supporting services are also graciously provided by sponsors:
There are also several mining pools that kindly donate a portion of their fees, a list of them can be found on our Bitcointalk post.
License
Copyright (c) 2014-2015, The Monero Project
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Parts of the project are originally copyright (c) 2012-2013 The Cryptonote developers
Compiling Monero
On Unix and Linux:
Dependencies: GCC 4.7.3 or later, CMake 2.8.6 or later, libunbound 1.4.16 or later (note: Unbound is not a dependency, libunbound is), libevent 2.0 or later, libgtest 1.5 or later, and Boost 1.53 or later (except 1.54, more details here). Static Build Additional Dependencies: ldns 1.6.17 or later, expat 1.1 or later, bison or yacc
Basic Process:
- To build, change to the root of the source code directory, and run
make. - The resulting executables can be found in
build/release/binorbuild/debug/bin, depending on what you're building.
Advanced options:
- Parallel build: run
make -j<number of threads>instead ofmake. - Statically linked release build: run
make release-static. - Debug build: run
make debug. - Test suite: run
make release-testto run tests in addition to building. Runningmake debug-testwill do the same to the debug version. - Building with Clang: it may be possible to use Clang instead of GCC, but this may not work everywhere. To build, run
export CC=clang CXX=clang++before runningmake.
On OS X:
The project can be built from scratch by following instructions for Unix and Linux above.
Alternatively, it can be built in an easier and more automated fashion using Homebrew:
- Ensure Homebrew is installed, it can be found at http://brew.sh
- Add the repository to brew:
brew tap sammy007/cryptonight - Build Monero:
brew install --HEAD bitmonero
On Windows:
Dependencies: mingw-w64, msys2, CMake 2.8.6 or later, libunbound 1.4.16 or later (note: Unbound is not a dependency, libunbound is), and Boost 1.53 or 1.55 (except 1.54, more details here). Static Build Additional Dependencies: ldns 1.6.17 or later, expat 1.1 or later
Preparing the Build Environment
- Download the MSYS2 installer, 64-bit or 32-bit as needed, and run it.
- Use the shortcut associated with your architecture to launch the MSYS2 environment. On 64-bit systems that would be the MinGW-w64 Win64 Shell shortcut. Note that if you are running 64-bit Windows, you will have both 64-bit and 32-bit environments.
- Update the packages in your MSYS2 install:
pacman -Sy
pacman -Su --ignoregroup base
pacman -Su
- For those of you already familiar with pacman, you can run the normal
pacman -Syuto update, but you may get errors and need to restart MSYS2 if pacman's dependencies are updated. - Install dependencies:
pacman -S mingw-w64-x86_64-gcc make mingw-w64-x86_64-cmake mingw-w64-x86_64-unbound mingw-w64-x86_64-boost - If you are planning to build statically you will also need to install:
pacman -S mingw-w64-x86_64-ldns mingw-w64-x86_64-expat(note that these are likely already installed by the unbound dependency installation above)
Building
- From the root of the source code directory run:
mkdir build
cd build
- If you are on a 64-bit system, run:
cmake -G "MSYS Makefiles" -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=../cmake/64-bit-toolchain.cmake -D MSYS2_FOLDER=c:/msys64 ..
- If you are on a 32-bit system, run:
cmake -G "MSYS Makefiles" -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=../cmake/32-bit-toolchain.cmake -D MSYS2_FOLDER=c:/msys32 ..
- You can now run
maketo have it build - The resulting executables can be found in
build/release/binorbuild/debug/bin, depending on what you're building.
If you installed MSYS2 in a folder other than c:/msys64, make the appropriate substitution above.
Advanced options:
- Parallel build: run
make -j<number of threads>instead ofmake. - Statically linked release build: run
make release-static. - Debug build: run
make debug. - Test suite: run
make release-testto run tests in addition to building. Runningmake debug-testwill do the same to the debug version.
On FreeBSD:
The project can be built from scratch by following instructions for Unix and Linux above.
We expect to add Monero into the ports tree in the near future, which will aid in managing installations using ports or packages.
Building Documentation
Monero developer documentation uses Doxygen, and is currently a work-in-progress.
Dependencies: Doxygen 1.8.0 or later, Graphviz 2.28 or later (optional).
- To build, change to the root of the source code directory, and run
doxygen Doxyfile - If you have installed Graphviz, you can also generate in-doc diagrams by instead running
HAVE_DOT=YES doxygen Doxyfile - The output will be built in doc/html/

