Bitcoin Forum
November 01, 2024, 11:53:09 PM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 [2] 3 »  All
  Print  
Author Topic: Coin making guides  (Read 6497 times)
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 21, 2017, 01:42:17 PM
 #21

Another guide
https://bitcointalk.org/index.php?topic=420896.0
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 21, 2017, 01:51:35 PM
 #22

I have not actually watched this show yet, but while searching for guides I saw a coin with a name similar to the coin in the show, so I thought I would add it here. It's a show about an altcoin startup.
http://m.crackle.com/startup/2499348i
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 21, 2017, 02:11:17 PM
 #23

Questions and answers about genesis block
http://stackoverflow.com/questions/20772606/how-to-create-a-genesis-block-of-my-altercoin
https://bitcoin.stackexchange.com/questions/21303/how-can-i-create-a-new-genesis-block
https://bitcointalk.org/index.php?topic=651695.0
https://bitcointalk.org/index.php?topic=1011041.0
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 21, 2017, 07:21:26 PM
 #24

Learncoin (the coin in the video guides) on Berkley's website
https://www.ocf.berkeley.edu/~baisang/LearnCoin.pdf

Practicecoin
http://practicecoin.com/wp-content/uploads/2017/04/Cloning-Bitcoin-0.8.99.pdf

Another guide
https://altcoinsfoundation.com/forum/developers/56-how-to-create-your-own-cryptocurrency-altcoin-1-dev

More genesis block info
https://www.quora.com/I-want-to-create-a-new-altcoin-How-do-I-generate-the-Genesis-Block

Bitcoin protocol
https://pdfs.semanticscholar.org/e85a/a20a544f521b9ac529027fce3cbd28dc637b.pdf
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 21, 2017, 07:47:29 PM
 #25

Another guide
http://www.0speed.net/2016/10/24/how-to-make-an-altcoin/

immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 21, 2017, 08:51:40 PM
 #26


Here is the Practice coin thread on Bitcointalk
https://bitcointalk.org/index.php?topic=1850047.0
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 21, 2017, 09:15:53 PM
 #27

Another guide
https://pastebin.com/iL9DeTTS
https://bitcointalk.org/index.php?topic=1151674.0

Discussion about forking ETH
https://ethereum.stackexchange.com/questions/2014/how-to-fork-my-own-version-of-eth

According to at least this person, cloning Ethereum is extremely easy and he says there are only 2 steps
https://bitcointalk.org/index.php?topic=1361504.msg13857758#msg13857758

I can't find an Ethereum cloning guide, does anyone know where one is?
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 21, 2017, 09:24:43 PM
 #28

Some developer links
https://bitcointalk.org/index.php?topic=763471.msg8604040#msg8604040
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 21, 2017, 09:43:16 PM
 #29

Another guide
https://bitcointalk.org/index.php?topic=193025.0

Another guide
https://bitcointalk.org/index.php?topic=217636.0

Cryptonote, apparently they don't mind people making new coins and believe in plurality, which would probably be a refreshing difference in launching compared to the normal 'shitcoin' reception that most new coins get.
https://bitcointalk.org/index.php?topic=673203.0
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 21, 2017, 09:56:54 PM
 #30

I'm looking for Cryptonote and Crpytonight cloning guides, but I found these CPU and GPU miners for Cryptonote incase anyone needs them.
https://bitcointalk.org/index.php?topic=638915.0
https://bitcointalk.org/index.php?topic=647251.0

You can make Cryptonotes right through their website Crytonotestarter, but I am looking for a more direct guide for anyone who wants to make it outside of their network of coins.

immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 21, 2017, 10:03:37 PM
 #31

By the way, here is a little more backstory on what I am doing:

I have been using Bitcoin and other coins for a while, so now I am making my own coin. I have a friend that is good at programming, but he has never used coins in his life, so I am getting all the information and he is seeing if he can figure everything out. We used an old guide so we got '-lboost_system', errors, but soon we are going to try it in CentOS instead of Ubuntu and see if we can get it up and running, and now that I know a little bit more about programming (I knew a little, but creating this coin with him has helped me learn a lot more), I am probably going to try to follow one of these guides this weekend and just make one on my own and the CentOS one will either work or not, but I will have one up soon no matter what. And I am also going to be going to school for Computer Science (got awarded $13,000 per semester for classes) and learning C and Java in about a month, so I will find more people that will be interested in doing this and can maybe convince a teacher to get it to be a team effort for an entire class. But in summary, I am going to have a coin up soon no matter what, whether it is this weekend, next week, or in a few months, I will have a coin (and then many coins) up and running.
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 22, 2017, 12:22:48 AM
Last edit: April 22, 2017, 12:42:24 AM by immakingacoin
 #32

To Fork a coin, just find it on Github and click the fork icon that says "fork". If you click the part that actually has the word fork on it, it will fork the coin and you can go in and change things.


Important things to change when making a new coin:

Find and replace all of the old coin's names for your coin's name in the main.cpp file
(check for lowercase, uppercase, and also with the word "coin" uppercase and lowercase)

Find and replace all the coin identifiers and replace with yours (Ex: Changing Litecoin's [LTC] to Dogecoin's [DOGE])

Change number of coins rewarded in a block where is says "Subsidy"

Change Block time

Change Difficulty (called "Target")

Change Block height and halving time.

Genesis block to "x0" meaning you just delete all the numbers after x0, everywhere there is a genesis block.

I am not sure about forks, but with clones you want to also remove the Merkle root.

Then change the headline to a headline from that day so people know what day you made it.

Change Epoch time to the current epoch time (google "current epoch time")

Remove the Nnonce

Remove the Checkpoints (you need 1)

Change ports if you want

Making some fancy graphics

After that, it's just compiling the coin, and running it (with a fatal error on purpose) to get the Merkle and Nnonce, and mining the Genesis block. Make sure you have uncompiled code also, so you can put the Merkle and everything in it.

Then use Gitian Builder to build the wallet.

And at that point you have a coin and it just has to go up on Github and be mined.

I am going to try to make a coin this weekend and post what I am doing here as I do it, then if that doesn't work I have a friend that helped me build a coin (we had to figure this out together, which is where I got this information and why I decided to put this thread together) but we couldn't get it to compile because we used an old guide so we got '-lboost_system' errors. So if my coin doesn't work this weekend, the guy I am making a coin with is going to try the coin we have been working on on CentOS next week instead of Ubuntu (which we were using because it was in the guide), and he is better with CentOS than Ubuntu. And if that doesn't work I will just make a coin after I take some classes or when I find someone else who is interested while I am taking classes.

immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 22, 2017, 01:00:59 AM
Last edit: April 22, 2017, 01:12:29 AM by immakingacoin
 #33

Programmer's Guide to Ethereum and Serpent
https://mc2-umd.github.io/ethereumlab/docs/serpent_tutorial.pdf

A Treatise on Altcoins
https://download.wpsoftware.net/bitcoin/alts.pdf
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 22, 2017, 01:44:34 AM
 #34

Gitian Builder
https://github.com/devrandom/gitian-builder
mimini0147
Sr. Member
****
Offline Offline

Activity: 322
Merit: 250


View Profile
April 22, 2017, 01:52:49 AM
 #35

Great guide, keep it up!

Liking the little thread here Smiley Will be useful for every individual coin-maker Cheesy

ChipMixer.com.|.Mixing reinvented for your privacy.|.ChipMixerwzxtzbw.onion
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 22, 2017, 01:58:54 AM
 #36

Making a mining portal (there are probably others, but this is the one I know about. I'll look for more guides today and this weekend)
https://github.com/UNOMP/unified-node-open-mining-portal
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 22, 2017, 02:34:47 AM
 #37

Great guide, keep it up!

Liking the little thread here Smiley Will be useful for every individual coin-maker Cheesy

Thanks, I have been looking for all the guides for 2 days now and have looked for them before (that's how I found the ones that allowed me to get as far as I did making a coin already), and this thread has more in one place than any other ones. So this will probably become an important thread to anyone who wants to create a coin in the future.

And this weekend I will add more, and post updates as I try to make my own coin. I will go through a few guides and will post which guides I use each time, and how well it worked. So everyone will know exactly which guides to use and what problems they might run into.
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 22, 2017, 04:44:14 AM
 #38

Building wallets
https://cryptocointalk.com/topic/13204-how-to-build-a-windows-qt-wallet-for-any-coin-yourself-from-source-code-step-by-step-instructions/
https://bitcointalk.org/index.php?topic=586844.0
https://bitcointalk.org/index.php?topic=498746.0

PoS Coin making Guide
https://steemit.com/altcoins/@complexring/how-to-build-proof-of-stake-altcoins-and-stake-coins-on-a-remote-ubuntu-server

This coin claims to be an in wallet coin generator
https://bitcointalk.org/index.php?topic=1287935.0


immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 22, 2017, 05:32:58 PM
 #39

I am going to post all of the important information from all these guides I have been posting, and try out as many of them as I can, and post if they worked for me or not.

1st Guide

Ok, so this first link is the guide I used before, and the links following it are the video tutorials that make up the guide, this is the only guide I know of that has videos, I will look for more today though.
https://bitcointalk.org/index.php?topic=1278734.0

The problem I had with this guide is that when compiling it comes up with the '-lboost_system' error. Everyone on google says that this isn't actually a compiling error, but a linking error, and means that when compiling that the compiler doesn't know to look in the right library. Everyone seems to also think it is an easy fix, and there are various solutions to it on google (such as adding '-mt' to the end of each library in the make file) but none of them seemed to work for me, maybe that will work for you though. If you do use this guide, make sure you read the things under each video in the "read more" section, as there is a lot of information there.


Quote
Episode 1:
Introduction / Explanations / OS Setup / Cloning
https://www.youtube.com/watch?v=86jqAfySi64&list=PL3VHTMe_nFkyQKRus_py1WIRQr7FG2009

Episode 2
More cloning and generating merkle root
https://www.youtube.com/watch?v=ENaTmbh8Xuw&feature=youtu.be

Episode 3
Hashing the genesis block
https://www.youtube.com/watch?v=3Jp65Uq_U30&feature=youtu.be

Episode 4:
Creating some "artwork"
https://www.youtube.com/watch?v=1z_ONhDseVE&feature=youtu.be

Episode 5:
Compiling for Windows and uploading to github
https://www.youtube.com/watch?v=YF3oE5uIP64&feature=youtu.be

Episode 6:
Seeing it all running and pool starting
https://www.youtube.com/watch?v=kVPcmirqyOY&feature=youtu.be

2nd Guide

I have not used this second guide, but it is basically the same as the first one, and it doesn't even include the dependencies, which means if I were to use it, it would probably end up with the same error, as I still have not gotten the '-lboost_system' error to stop happening. I will try this one later, but I am on a Windows machine right now so I plan on trying a Windows build.

Quote
This guide outlines the steps to manually generate a genesis block and start a new blockchain. Once the genesis block is generated, two nodes must be used to start the blockchain. This guide will show you how to do this on one machine, using two data directories and two instances of the daemon. Please note that it is also possible to do this using two physical or virtual machines.
Install Dependencies and Mini-UPnP

If Peershares has never been run on your machine, be sure to follow the Dependency and Mini-UPnP installation steps, located on the Linux wiki page: https://github.com/Peershares/Peershares/wiki/Linux
Clean-up Prior Work

If you have already been using your machine to test Peershares builds, it's a good idea to delete your prior working folders and start fresh.

$ rm -r ~/.peershares
$ rm -r ~/Peershares

Clone the Peershares Github Repository

$ git clone https://github.com/Peershares/Peershares.git

Get the current unix epoch time from the command line, or, from using a site like Epoch Converter.

$ date +%s

We'll use this in a few minutes, so copy it down.
Edit main.cpp

$ cd ~/Peershares/src/
$ (text editor) main.cpp

Be sure to turn on line numbering in your text editor. Edit the following lines ...

Main.cpp:L2260 - Change the value for the constant, pszTimestamp, to something unique, up to 91 characters:

const char* pszTimestamp = "YOUR CUSTOM, VERIFIABLE TIMESTAMP GOES HERE";

Main.cpp:L2261 - Change nTimeGenesis value to current epoch time (captured in the previous step). For example, when this guide was written, the epoch time was 1395169964, so it would be inserted as so:

unsigned int nTimeGenesis=1395169964;

Main.cpp:L2262 - Make sure that nNonceGenesis=0

Main.cpp:L2266 - For the TestNet genesis block, change the value for the constant, pszTimestamp, to something unique (same length rules apply as the previous timestamp string):

Main.cpp:L2267 - Change nTimeGenesis value to current epoch time stamp. This can match the value you used for the previous nTimeGenesis variable, or you can use the epoch time for when you modified this step, either is appropriate.

Main.cpp:L2268 - Make sure that nNonceGenesis=0

Complete set of changes from the previous steps:

if (fTestNet)
  {
    pszTimestamp="YOUR CUSTOM, VERIFIABLE TESTNET TIMESTAMP GOES HERE";
    nTimeGenesis=1395170250;
    nNonceGenesis=0;
  }

Save the file and exit.
Compile the daemon

$ make -f makefile.unix

Run the daemon

$ ./peersharesd --daemon

It should start and run for a few seconds then stop with an error. This error is our notification that the new genesis block has been generated. That was for real-net. Now lets generate one for testnet.

$ ./peersharesd --daemon -testnet

It will start and run for a few seconds then stop with an error like the first one. We now have two debug.log files located at: ~/.peershares/debug.log and ~/.peershares/testnet/debug.log. You will find an entry in both of these files starting with 'PPCoin Found Genesis Block:'. Under that entry, you will find values for 'genesis hash=', 'merkle root=' and 'nNonce=' ... We need those three values from both real-net and testnet debug.log files.
Edit main.cpp and kernel.cpp

$ cd ~/Peershares/src/
$ (text editor) main.cpp

Edit the following lines ...

Main.cpp:L24 - Change the value for the constant, hashGenesisBlockOfficial, to the new genesis hash value from debug.log. Paste the value in-between the quotation marks, after the leading 0x :

static const uint256 hashGenesisBlockOfficial("0x00000053229d58cdda911f4188240d4843f6bca1d8978d3349d87c38976463dd");

Main.cpp:L25 - Change the value for the constant, hashGenesisBlockTestNet, to the new genesis hash value from TestNet debug.log. Paste the value in-between the quotation marks, after the leading 0x :

static const uint256 hashGenesisBlockTestNet ("0x00000053229d58cdda911f4188240d4843f6bca1d8978d3349d87c38976463dd");

Main.cpp:L2262 - Change the value for nNonceGenesis to the new nNonce value from debug.log:

unsigned int nNonceGenesis=236800;

Main.cpp:L2268 - Change the value for nNonceGenesis to the new nNonce value from the TestNet debug.log:

unsigned int nNonceGenesis=236800;

Main.cpp:L2312 - Change the value for block.hashMerkleRoot == uint256, to the new merkle root hash value from debug.log. Paste the value in-between the quotation marks, after the leading 0x :

assert(block.hashMerkleRoot == uint256("0xf0e9ac2cef9820c036e397c738ae5cea91df3724f5418eb6a7450350f2702278"));

Main.cpp:L2314 - Change the value for block.hashMerkleRoot == uint256, to the new merkle root hash value from TestNet debug.log. Paste the value in-between the quotation marks, after the leading 0x :

assert(block.hashMerkleRoot == uint256("0xf0e9ac2cef9820c036e397c738ae5cea91df3724f5418eb6a7450350f2702278"));

Save and exit main.cpp ... Open kernel.cpp:

$ (text editor) kernel.cpp

nProtocolV03SwitchTime and nProtocolV03TestSwitchTime need to be set to a time in the future, after PoS starts. So just set these to several days in advance. Use the Epoch Converter to get the correct value.

Kernel.cpp:L14 - Change the value for nProtocolV03SwitchTime to the to the correct future time. Edit the number after the '=' sign and update the comment to reflect what it was changed to:

unsigned int nProtocolV03SwitchTime     = 1394841600; // 2014-03-15 00:00:00 UTC

Kernel.cpp:L15 - Change the value for nProtocolV03TestSwitchTime to the to the correct future time. Edit the number after the '=' sign and update the comment to reflect what it was changed to:

unsigned int nProtocolV03TestSwitchTime = 1396224000; // 2014-03-31 00:00:00 UTC

Save and exit kernel.cpp
Recompile the daemon

$ make -f makefile.unix BDB_INCLUDE_PATH="/usr/local/BerkeleyDB.4.8/include" BDB_LIB_PATH="/usr/local/BerkeleyDB.4.8/lib"

Remove and recreate working folder

Add a 2nd working folder for instance2, which is needed to start the blockchain.

$ rm -r ~/.peershares/
$ mkdir ~/.peershares/
$ mkdir ~/.peershares2/

Move the newly recompiled daemon to working folder

$ mv ppcoind ~/.peershares

Create conf file and start instance 1

$ cd ~/.peershares
$ touch peershares.conf
$ (text editor) peershares.conf

Add the following lines to the conf file and save:

server=1
rpcallowip=127.0.0.1
listen=1
rpcuser=<anything>
rpcpassword=<anything>
dnsseed=0
port=9090
rpcport=9091
gen=1

Run the daemon

$ ./ppcoind --daemon

If it stops with an error about blkindex.dat when it is run for the first time, simply run it again and it should work. This is a known issue on the first run attempt.
Copy and rename daemon to 2nd instance

$ cp ppcoind ~/.peershares2/ppcoind2

Create conf file for 2nd instance

$ cd ~/.peershares2
$ touch peershares.conf
$ (text editor) peershares.conf

Add the following lines to the conf file and save:

server=1
rpcuser=<anything>
rpcpassword=<anything>
port=19090
rpcport=19091
gen=1

Run the 2nd instance of the daemon

We must specify the data directory so that the 2nd instance doesn't try to use '~/.peershares' and we must also specify that we want to connect to the IP address of our first instance, which, in this case, is localhost. Be sure to replace with your username. Note that datadir and connect commands can be added to your conf file to simplify things.

$ ./ppcoind2 --daemon -datadir=/home/<user>/.peershares2 -connect=127.0.0.1:9090

If either instance stops with an error about blkindex.dat when it is run for the first time, kill the instance and run again with the same command. It should work on the 2nd try. This is a known issue.

At this point, your new blockchain should be started and both instances should be generating PoW blocks. Check status with:

$ ./ppcoind getinfo
$ ./ppcoind getmininginfo
$ (text editor) debug.log

Or from the 2nd instance dir

$ ./ppcoind2 getinfo
$ ./ppcoind2 getmininginfo

If you wish to start a testnet, add testnet=1 to your conf files, stop and restart the daemons.

Note: If difficulty settings are changed in Main.cpp:L37 and Main.cpp:L38, you'll need to recreate the genesis block because the nonce/hash/merkel root will change.
immakingacoin (OP)
Member
**
Offline Offline

Activity: 98
Merit: 11


View Profile
April 22, 2017, 09:29:33 PM
 #40

3rd Guide

Here is a link to the guide
https://bitcointalk.org/index.php?topic=149479.0

Ok, so I am trying to do this guide now, which is a Windows build, and while everything is downloading fine, I already think I ran into a problem, but I have not done any compiling or anything yet, I am not sure.

The guide says:

Quote
1.3. Ensure that mingw-builds bin folder is set in your PATH environment variable. On Windows 7 your path should look something like:
Code:
C:\mingw32\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

But that path does not exist in mine, there is no System/SystemRoot/System32 or anything like that in my mingw32\bin folder, but I guess I will figure out if it works soon enough.

Here is the whole guide: (there may be more on later pages of the thread, but as I am going through the guide if those come up I will add that to this thread)


Quote
Hi all, I recently went through the process of building bitcoind on windows.
I found the official build-msw.txt to be a bit lacking, so I thought that documenting the steps here on the forums could save some time to people wanting to compile their own windows binary. Wink

Please note this is mostly for testing purposes. Always use official executables on production environments.
The following instructions are intended for use with version 0.9.4. See additional notes if compiling 0.10rc4 or an older 0.8.6 branch.

1. Prepare your build system.
I strongly suggest setting up a clean windows virtual machine via Virtualbox or similar.

1.1 Install msys shell:
http[Suspicious link removed]/download
From MinGW installation manager -> All packages -> MSYS
mark the following for installation:

msys-base-bin
msys-autoconf-bin
msys-automake-bin
msys-libtool-bin

then click on Installation -> Apply changes

Make sure no mingw packages are checked for installation or present from a previous install. Only the above msys packages should be installed. Also make sure that msys-gcc and msys-w32api packages are not installed.

1.2 Install MinGW-builds project toolchain:
Download http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.9.2/threads-posix/dwarf/i686-4.9.2-release-posix-dwarf-rt_v3-rev1.7z/download
and unpack it to C:\

1.3. Ensure that mingw-builds bin folder is set in your PATH environment variable. On Windows 7 your path should look something like:
Code:
C:\mingw32\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

1.4 Additional checks:
C:\MinGW\bin should contain nothing but mingw-get.exe.
Your gcc -v output should be:
Code:
 gcc -v
Using built-in specs.
COLLECT_GCC=c:\mingw32\bin\gcc.exe
COLLECT_LTO_WRAPPER=c:/mingw32/bin/../libexec/gcc/i686-w64-mingw32/4.9.2/lto-wrapper.exe
Target: i686-w64-mingw32
Configured with: ../../../src/gcc-4.9.2/configure --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/mingw32 --with-sysroot=/c/mingw492/i686-492-posix-dwarf-rt_v3-rev1/mingw32 --with-gxx-include-dir=/mingw32/i686-w64-mingw32/include/c++ --enable-shared --enable-static --disable-multilib --enable-languages=ada,c,c++,fortran,objc,obj-c++,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-sjlj-exceptions --with-dwarf2 --disable-isl-version-check --disable-cloog-version-check --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=i686 --with-tune=generic --with-libiconv --with-system-zlib --with-gmp=/c/mingw492/prerequisites/i686-w64-mingw32-static --with-mpfr=/c/mingw492/prerequisites/i686-w64-mingw32-static --with-mpc=/c/mingw492/prerequisites/i686-w64-mingw32-static --with-isl=/c/mingw492/prerequisites/i686-w64-mingw32-static --with-cloog=/c/mingw492/prerequisites/i686-w64-mingw32-static --enable-cloog-backend=isl --with-pkgversion='i686-posix-dwarf-rev1, Built by MinGW-W64 project' --with-bugurl=http://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -I/c/mingw492/i686-492-posix-dwarf-rt_v3-rev1/mingw32/opt/include -I/c/mingw492/prerequisites/i686-zlib-static/include -I/c/mingw492/prerequisites/i686-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -I/c/mingw492/i686-492-posix-dwarf-rt_v3-rev1/mingw32/opt/include -I/c/mingw492/prerequisites/i686-zlib-static/include -I/c/mingw492/prerequisites/i686-w64-mingw32-static/include' CPPFLAGS= LDFLAGS='-pipe -L/c/mingw492/i686-492-posix-dwarf-rt_v3-rev1/mingw32/opt/lib -L/c/mingw492/prerequisites/i686-zlib-static/lib -L/c/mingw492/prerequisites/i686-w64-mingw32-static/lib -Wl,--large-address-aware'
Thread model: posix
gcc version 4.9.2 (i686-posix-dwarf-rev1, Built by MinGW-W64 project)

2. Download, unpack and build required dependencies.
I'll save them in c:\deps folder.

2.1 OpenSSL: http://www.openssl.org/source/openssl-1.0.1l.tar.gz
From a MinGw shell (C:\MinGW\msys\1.0\msys.bat), unpack the source archive with tar (this will avoid symlink issues) then configure and make:
Code:
cd /c/deps/
tar xvfz openssl-1.0.1l.tar.gz
cd openssl-1.0.1l
./Configure no-zlib no-shared no-dso no-krb5 no-camellia no-capieng no-cast no-cms no-dtls1 no-gost no-gmp no-heartbeats no-idea no-jpake no-md2 no-mdc2 no-rc5 no-rdrand no-rfc3779 no-rsax no-sctp no-seed no-sha0 no-static_engine no-whirlpool no-rc2 no-rc4 no-ssl2 no-ssl3 mingw
make

2.2 Berkeley DB: http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz
We'll use version 4.8 to preserve binary wallet compatibility.
From a MinGW shell unpack the source archive, configure and make:
Code:
cd /c/deps/
tar xvfz db-4.8.30.NC.tar.gz
cd db-4.8.30.NC/build_unix
../dist/configure --enable-mingw --enable-cxx --disable-shared --disable-replication
make

2.3 Boost: http://sourceforge.net/projects/boost/files/boost/1.57.0/
Download either the zip or the 7z archive, unpack boost inside your C:\deps folder, then bootstrap and compile from a Windows command prompt:
Code:
cd C:\deps\boost_1_57_0\
bootstrap.bat mingw
b2 --build-type=complete --with-chrono --with-filesystem --with-program_options --with-system --with-thread toolset=gcc variant=release link=static threading=multi runtime-link=static stage

This will compile the required boost libraries and put them into the stage folder (C:\deps\boost_1_57_0\stage).
Note: make sure you don't use tarballs, as unix EOL markers can break batch files.

2.4 Miniupnpc: http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.9.20150206.tar.gz
Unpack Miniupnpc to C:\deps, rename containing folder from "miniupnpc-1.9.20150206" to "miniupnpc" then from a Windows command prompt:
Code:
cd C:\deps\miniupnpc
mingw32-make -f Makefile.mingw init upnpc-static

2.5 protoc and libprotobuf:
Download https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz
Then from msys shell
Code:
tar xvfz protobuf-2.6.1.tar.gz
cd /c/deps/protobuf-2.6.1
configure --disable-shared
make

2.6 qrencode:
Download and unpack http://download.sourceforge.net/libpng/libpng-1.6.16.tar.gz inside your deps folder then configure and make:
Code:
cd /c/deps/libpng-1.6.16
configure --disable-shared
make
cp .libs/libpng16.a .libs/libpng.a

Download and unpack http://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz inside your deps folder then configure and make:
Code:
cd /c/deps/qrencode-3.4.4

LIBS="../libpng-1.6.16/.libs/libpng.a ../../mingw32/i686-w64-mingw32/lib/libz.a" \
png_CFLAGS="-I../libpng-1.6.16" \
png_LIBS="-L../libpng-1.6.16/.libs" \
configure --enable-static --disable-shared --without-tools

make

2.7 Qt 5 libraries:
Qt must be configured with ssl and zlib support.
Download and unpack Qt base and tools sources:
http://download.qt-project.org/official_releases/qt/5.3/5.3.2/submodules/qtbase-opensource-src-5.3.2.7z
http://download.qt-project.org/official_releases/qt/5.3/5.3.2/submodules/qttools-opensource-src-5.3.2.7z
Then from a windows command prompt (note that the following assumes qtbase has been unpacked to C:\Qt\5.3.2 and qttools have been unpacked to C:\Qt\qttools-opensource-src-5.3.2):
Code:
set INCLUDE=C:\deps\libpng-1.6.16;C:\deps\openssl-1.0.1l\include
set LIB=C:\deps\libpng-1.6.16\.libs;C:\deps\openssl-1.0.1l

cd C:\Qt\5.3.2
configure.bat -release -opensource -confirm-license -static -make libs -no-sql-sqlite -no-opengl -system-zlib -qt-pcre -no-icu -no-gif -system-libpng -no-libjpeg -no-freetype -no-angle -no-vcproj -openssl -no-dbus -no-audio-backend -no-wmf-backend -no-qml-debug

mingw32-make

set PATH=%PATH%;C:\Qt\5.3.2\bin

cd C:\Qt\qttools-opensource-src-5.3.2
qmake qttools.pro
mingw32-make

Note: consider using -j switch with mingw32-make to speed up compilation process. On a quad core -j4 or -j5 should give the best results.


3. Download and unpack Bitcoin 0.9.4 from git https://github.com/bitcoin/bitcoin/archive/v0.9.4.zip

From msys shell configure and make bitcoin:
Code:
cd /c/bitcoin-0.9.4

./autogen.sh

CPPFLAGS="-I/c/deps/db-4.8.30.NC/build_unix \
-I/c/deps/openssl-1.0.1l/include \
-I/c/deps \
-I/c/deps/protobuf-2.6.1/src \
-I/c/deps/libpng-1.6.16 \
-I/c/deps/qrencode-3.4.4" \
LDFLAGS="-L/c/deps/db-4.8.30.NC/build_unix \
-L/c/deps/openssl-1.0.1l \
-L/c/deps/miniupnpc \
-L/c/deps/protobuf-2.6.1/src/.libs \
-L/c/deps/libpng-1.6.16/.libs \
-L/c/deps/qrencode-3.4.4/.libs" \
BOOST_ROOT=/c/deps/boost_1_57_0 \
./configure \
--disable-upnp-default \
--disable-tests \
--with-qt-incdir=/c/Qt/5.3.2/include \
--with-qt-libdir=/c/Qt/5.3.2/lib \
--with-qt-plugindir=/c/Qt/5.3.2/plugins \
--with-qt-bindir=/c/Qt/5.3.2/bin \
--with-protoc-bindir=/c/deps/protobuf-2.6.1/src

make

strip src/bitcoin-cli.exe
strip src/bitcoind.exe
strip src/qt/bitcoin-qt.exe

Additional notes:
64 bit binaries
64 bit binaries can be compiled by using the following toolchain:
http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.2/threads-posix/seh/x86_64-4.9.2-release-posix-seh-rt_v3-rev1.7z/download

All dependencies must be rebuilt with the above toolchain.
Openssl should be configured for:
Code:
mingw64
instead of:
Code:
mingw

Bitcoin v0.10rc4
Since v0.10 Bitcoin depends on gmp: https://gmplib.org/download/gmp/gmp-6.0.0a.tar.xz
Compile it in a msys shell
Code:
tar xvf gmp-6.0.0a.tar.xz
cd /c/deps/gmp-6.0.0
./configure --disable-shared
make


Then add relevant CPPFLAGS and LDFLAGS when configuring Bitcoin:
Code:
CPPFLAGS="-I/c/deps/db-4.8.30.NC/build_unix \
-I/c/deps/openssl-1.0.1l/include \
-I/c/deps \
-I/c/deps/protobuf-2.6.1/src \
-I/c/deps/libpng-1.6.16 \
-I/c/deps/qrencode-3.4.4 \
-I/c/deps/gmp-6.0.0" \
LDFLAGS="-L/c/deps/db-4.8.30.NC/build_unix \
-L/c/deps/openssl-1.0.1l \
-L/c/deps/miniupnpc \
-L/c/deps/protobuf-2.6.1/src/.libs \
-L/c/deps/libpng-1.6.16/.libs \
-L/c/deps/qrencode-3.4.4/.libs \
-L/c/deps/gmp-6.0.0/.libs" \
BOOST_ROOT=/c/deps/boost_1_57_0 \
./configure \
--disable-upnp-default \
--disable-tests \
--with-qt-incdir=/c/Qt/5.3.2/include \
--with-qt-libdir=/c/Qt/5.3.2/lib \
--with-qt-plugindir=/c/Qt/5.3.2/plugins \
--with-qt-bindir=/c/Qt/5.3.2/bin \
--with-protoc-bindir=/c/deps/protobuf-2.6.1/src

ompiling with unit tests
In order to build unit tests you will need the following:
-boost
Boost must be configured with --with-test option also.

-hexdump
To generate test data an hexdump like program is needed.
Download and unpack https://github.com/wahern/hexdump then compile hexdump.exe by running:
Code:
gcc -std=gnu99 -g -O2 -Wall -Wextra -Werror -Wno-unused-variable -Wno-unused-parameter hexdump.c -DHEXDUMP_MAIN -o hexdump.exe

Do not forget to add hexdump folder to your PATH environment variable.

-bitcoin
In order to work with the previously compiled hexdump version Makefile must be patched (src/Makefile.test.include if v0.10, src/Makefile.include if v0.9):
Code:
--- src/Makefile.test.include	Tue Dec 23 20:14:37 2014
+++ src/Makefile.test.include Sat Jan 10 16:53:56 2015
@@ -111,7 +111,7 @@
  @$(MKDIR_P) $(@D)
  @echo "namespace json_tests{" > $@
  @echo "static unsigned const char $(*F)[] = {" >> $@
- @$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x  ,//g' >> $@
+ @$(HEXDUMP) -e '8/1 "0x%02x, "' $< | $(SED) -e 's/0x  ,//g' >> $@
  @echo "};};" >> $@
  @echo "Generated $@"
 
@@ -119,6 +119,6 @@
  @$(MKDIR_P) $(@D)
  @echo "namespace alert_tests{" > $@
  @echo "static unsigned const char $(*F)[] = {" >> $@
- @$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x  ,//g' >> $@
+ @$(HEXDUMP) -e '8/1 "0x%02x, "' $< | $(SED) -e 's/0x  ,//g' >> $@
  @echo "};};" >> $@
  @echo "Generated $@"

bitcoin must be configured without --disable-tests option.






Additional notes for older Bitcoin 0.8.6 (may be useful for Bitcoin based altcoins)
msys-autoconf, msys-automake and msys-libtool at step 1.1 are not needed. You can skip steps 2.5 and 2.7.
Note that openssl v1.0.1k and later may lead to consesus forks:
http://sourceforge.net/p/bitcoin/mailman/message/33221963/

Compile bitcoind 0.8.6: https://github.com/bitcoin/bitcoin/archive/v0.8.6.zip

With a texteditor edit BOOST_SUFFIX, INCLUDEPATHS and LIBPATHS in your C:\bitcoin-0.8.6\src\makefile.mingw according to your dependencies location:
Code:
BOOST_SUFFIX?=-mgw49-mt-s-1_57

INCLUDEPATHS= \
 -I"$(CURDIR)" \
 -I"/c/deps/boost_1_57_0" \
 -I"/c/deps/db-4.8.30.NC/build_unix" \
 -I"/c/deps/openssl-1.0.1j/include"
 
LIBPATHS= \
 -L"$(CURDIR)/leveldb" \
 -L"/c/deps/boost_1_57_0/stage/lib" \
 -L"/c/deps/db-4.8.30.NC/build_unix" \
 -L"/c/deps/openssl-1.0.1j"

and add -static option to LDFLAGS in makefile.mingw to compile a statically linked executable.
Code:
LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware -static

makefile.mingw patch:
Code:
--- makefile.mingw	Thu Dec 05 14:11:26 2013
+++ makefile.mingw Thu Jun 19 20:00:00 2014
@@ -21,15 +21,19 @@
 USE_IPV6:=1
 
 DEPSDIR?=/usr/local
-BOOST_SUFFIX?=-mgw46-mt-sd-1_52
+BOOST_SUFFIX?=-mgw49-mt-s-1_57
 
 INCLUDEPATHS= \
  -I"$(CURDIR)" \
- -I"$(DEPSDIR)/include"
-
+ -I"/c/deps/boost_1_57_0" \
+ -I"/c/deps/db-4.8.30.NC/build_unix" \
+ -I"/c/deps/openssl-1.0.1j/include"
+
 LIBPATHS= \
  -L"$(CURDIR)/leveldb" \
- -L"$(DEPSDIR)/lib"
+ -L"/c/deps/boost_1_57_0/stage/lib" \
+ -L"/c/deps/db-4.8.30.NC/build_unix" \
+ -L"/c/deps/openssl-1.0.1j"
 
 LIBS= \
  -l leveldb \
@@ -47,7 +51,7 @@
 DEBUGFLAGS=-g
 CFLAGS=-mthreads -O2 -w -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
 # enable: ASLR, DEP and large address aware
-LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware
+LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware -static
 
 TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data)
 

Upnp support is disabled by default. If you want to compile with upnp support set
Code:
USE_UPNP:=1

and add miniupnpc path to INCLUDEPATHS and LIBPATHS:
Code:
INCLUDEPATHS= \
 -I"$(CURDIR)" \
 -I"/c/deps/boost_1_57_0" \
 -I"/c/deps" \
 -I"/c/deps/db-4.8.30.NC/build_unix" \
 -I"/c/deps/openssl-1.0.1j/include"
 
LIBPATHS= \
 -L"$(CURDIR)/leveldb" \
 -L"/c/deps/boost_1_57_0/stage/lib" \
 -L"/c/deps/miniupnpc" \
 -L"/c/deps/db-4.8.30.NC/build_unix" \
 -L"/c/deps/openssl-1.0.1j"

From Msys shell compile bitcoind:
Code:
cd /c/bitcoin-0.8.6/src
make -f makefile.mingw
strip bitcoind.exe

Compile bitcoin-qt 0.8.6 with Qt 4.8:
Download and unpack http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.zip
Note that due to a bug in qt 4.8.6 you will need to explicitly enable windows styles: https://bugreports.qt-project.org/browse/QTBUG-38706
Assuming qt sources have been unpacked to C:\Qt\4.8.6, from a windows command prompt:
Code:
cd C:\Qt\4.8.6
configure -release -opensource -confirm-license -static -no-sql-sqlite -no-qt3support -no-opengl -qt-zlib -no-gif -qt-libpng -qt-libmng -no-libtiff -qt-libjpeg -no-dsp -no-vcproj -no-openssl -no-dbus -no-phonon -no-phonon-backend -no-multimedia -no-audio-backend -no-webkit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -no-style-plastique -no-style-cleanlooks -no-style-motif -no-style-cde -nomake demos -nomake examples
mingw32-make

Note that if you skipped bitcoind compilation or if you have cleaned up your source folder you will need to compile libleveldb.a and libmemenv.a libraries before proceeding.
From msys shell:
Code:
cd /C/bitcoin-0.8.6/src/leveldb
TARGET_OS=NATIVE_WINDOWS make libleveldb.a libmemenv.a

Comment out genleveldb.commands for win32
Code:
    LIBS += -lshlwapi
    #genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a
}

flags for static build:
Code:
CONFIG += static

Code:
win32:QMAKE_LFLAGS *= -Wl,--large-address-aware -static

bitcoin-qt.pro patch:
Code:
--- bitcoin-qt.pro	Thu Dec 05 14:11:26 2013
+++ bitcoin-qt.pro Thu Jun 19 20:00:00 2014
@@ -7,6 +7,7 @@
 DEFINES += QT_GUI BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE
 CONFIG += no_include_pwd
 CONFIG += thread
+CONFIG += static
 
 # for boost 1.37, add -mt to the boost libraries
 # use: qmake BOOST_LIB_SUFFIX=-mt
@@ -17,6 +18,17 @@
 # Dependency library locations can be customized with:
 #    BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH,
 #    BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively
+BOOST_LIB_SUFFIX=-mgw49-mt-s-1_57
+BOOST_INCLUDE_PATH=C:/deps/boost_1_57_0
+BOOST_LIB_PATH=C:/deps/boost_1_57_0/stage/lib
+BDB_INCLUDE_PATH=C:/deps/db-4.8.30.NC/build_unix
+BDB_LIB_PATH=C:/deps/db-4.8.30.NC/build_unix
+OPENSSL_INCLUDE_PATH=C:/deps/openssl-1.0.1j/include
+OPENSSL_LIB_PATH=C:/deps/openssl-1.0.1j
+MINIUPNPC_INCLUDE_PATH=C:/deps/
+MINIUPNPC_LIB_PATH=C:/deps/miniupnpc
+QRENCODE_INCLUDE_PATH=C:/deps/qrencode-3.4.4
+QRENCODE_LIB_PATH=C:/deps/qrencode-3.4.4/.libs
 
 OBJECTS_DIR = build
 MOC_DIR = build
@@ -47,7 +59,7 @@
 # for extra security on Windows: enable ASLR and DEP via GCC linker flags
 win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat
 # on Windows: enable GCC large address aware linker flag
-win32:QMAKE_LFLAGS *= -Wl,--large-address-aware
+win32:QMAKE_LFLAGS *= -Wl,--large-address-aware -static
 
 # use: qmake "USE_QRCODE=1"
 # libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support
@@ -109,7 +121,7 @@
         QMAKE_RANLIB = $$replace(QMAKE_STRIP, strip, ranlib)
     }
     LIBS += -lshlwapi
-    genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a
+    #genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a
 }
 genleveldb.target = $$PWD/src/leveldb/libleveldb.a
 genleveldb.depends = FORCE


From a windows command prompt configure and make:
Code:
set PATH=%PATH%;C:\Qt\4.8.6\bin
cd C:\bitcoin-0.8.6\
qmake "USE_QRCODE=1" "USE_UPNP=1" "USE_IPV6=1" bitcoin-qt.pro
mingw32-make -f Makefile.Release

Last updated on 08/02/2015
bitcoin 0.9.4
toolchain: i686-4.9.2-release-posix-dwarf-rt_v3-rev1
openssl-1.0.1l
libpng-1.6.16
miniupnpc-1.9.20150206.tar.gz

10/01/2015
compiling unit tests

30/11/2014
toolchain: i686-4.9.2-release-posix-dwarf-rt_v3-rev0
boost_1_57_0
protobuf-2.6.1
libpng-1.6.15
miniupnpc-1.9.20141128
gmp-6.0.0a for current master

28/10/2014
openssl-1.0.1j
libpng-1.6.14
do not build unnecessary openssl ciphers and protocols
use BOOST_ROOT when configuring bitcoin

28/09/2014
toolchain: i686-4.9.1-release-posix-dwarf-rt_v3-rev1
bitcoin 0.9.3
miniupnpc-1.9.20140911 https://github.com/bitcoin/bitcoin/commit/9f7f504efca27c7d390f121410846b45c1732761
qt5.3.2

10/08/2014
update toolchain i686-4.9.1-release-posix-dwarf-rt_v3-rev0
update dependencies openssl-1.0.1i qrencode-3.4.4 qt4.8.6

02/7/2014
qt5.3.1

20/6/2014
bitcoin 0.9.2.1
mingw-builds 4.9.0 rev2
openssl-1.0.1h
qt5.3
libpng-1.6.12
removed older instructions about bitcoin 0.8.6 with qt5

25/5/2014:
update toolchain
added makefile patch commit

23/4/2014:
removed python and activestate perl as they are not needed with current qt config options,
use -openssl-linked instead of -openssl (see src\network\ssl\qsslsocket_openssl_symbols.cpp for more info),
do not compile shared libraries when building dependencies,
libpng 1.6.10.
Pages: « 1 [2] 3 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!