Solcoin Project
|
|
February 09, 2014, 04:14:33 AM |
|
...
Where one SHOULD see
if (true && block.GetHash() != hashGenesisBlock)
in src/main.cpp of my new crypto, one sees
uint256 hash = block.GetHash(); printf("%s\n", hash.ToString().c_str()); printf("%s\n", hashGenesisBlock.ToString().c_str());
...
The genesis miner is not included in the litecoin sources. You need to add it yourself: http://pastebin.com/aKgggRvZ
|
|
|
|
olu
Newbie
Offline
Activity: 10
Merit: 0
|
|
February 09, 2014, 04:31:15 AM |
|
...
Where one SHOULD see
if (true && block.GetHash() != hashGenesisBlock)
in src/main.cpp of my new crypto, one sees
uint256 hash = block.GetHash(); printf("%s\n", hash.ToString().c_str()); printf("%s\n", hashGenesisBlock.ToString().c_str());
...
The genesis miner is not included in the litecoin sources. You need to add it yourself: http://pastebin.com/aKgggRvZGoing to check up on this and implement, give me some time. - Olu
|
|
|
|
olu
Newbie
Offline
Activity: 10
Merit: 0
|
|
February 09, 2014, 05:41:49 AM |
|
...
Where one SHOULD see
if (true && block.GetHash() != hashGenesisBlock)
in src/main.cpp of my new crypto, one sees
uint256 hash = block.GetHash(); printf("%s\n", hash.ToString().c_str()); printf("%s\n", hashGenesisBlock.ToString().c_str());
...
The genesis miner is not included in the litecoin sources. You need to add it yourself: http://pastebin.com/aKgggRvZGoing to check up on this and implement, give me some time. - Olu To ensure I'm not derping around: //// debug print uint256 hash = block.GetHash(); printf("%s\n", hash.ToString().c_str()); printf("%s\n", hashGenesisBlock.ToString().c_str()); printf("%s\n", block.hashMerkleRoot.ToString().c_str()); assert(block.hashMerkleRoot == uint256("0xa73e546160e2999f9f17fcfc76c422a04b00acd5846a90a784593951b0987380")); // If genesis block hash does not match, then generate new genesis hash if (true && block.GetHash() != hashGenesisBlock) { printf("Searching for genesis block...\n"); // This will figure out a valid hash and Nonce if you're creating a different genesis block: uint256 hashTarget = CBigNum().SetCompact(block.nBits).getuint256(); uint256 thash; char scratchpad[SCRYPT_SCRATCHPAD_SIZE]; loop { #if defined(USE_SSE2) // Detection would work, but in cases where we KNOW it always has SSE2, // it is faster to use directly than to use a function pointer or conditional. #if defined(_M_X64) || defined(__x86_64__) || defined(_M_AMD64) || (defined(MAC_OSX) && defined(__i386__)) // Always SSE2: x86_64 or Intel MacOS X scrypt_1024_1_1_256_sp_sse2(BEGIN(block.nVersion), BEGIN(thash), scratchpad); #else // Detect SSE2: 32bit x86 Linux or Windows scrypt_1024_1_1_256_sp(BEGIN(block.nVersion), BEGIN(thash), scratchpad); #endif #else // Generic scrypt scrypt_1024_1_1_256_sp_generic(BEGIN(block.nVersion), BEGIN(thash), scratchpad); #endif if (thash <= hashTarget) break; if ((block.nNonce & 0xFFF) == 0) printf("nonce %08X: hash = %s (target = %s)\n", block.nNonce, thash.ToString().c_str(), hashTarget.ToString().c_str()); ++block.nNonce; if (block.nNonce == 0) { printf("NONCE WRAPPED, incrementing time\n"); ++block.nTime; } } printf("block.nTime = %u \n", block.nTime); printf("block.nNonce = %u \n", block.nNonce); printf("block.GetHash = %s\n", block.GetHash().ToString().c_str()); } block.print(); assert(block.GetHash() == hashGenesisBlock); This is what the main.cpp looks like now, but do I have to change the instances of // Special case for the genesis block, skipping connection of its transactions // (its coinbase is unspendable) if (GetHash() == hashGenesisBlock) { view.SetBestBlock(pindex); pindexGenesisBlock = pindex; return true; AND // Get prev block index CBlockIndex* pindexPrev = NULL; int nHeight = 0; if (hash != hashGenesisBlock) { ?
|
|
|
|
olu
Newbie
Offline
Activity: 10
Merit: 0
|
|
February 09, 2014, 08:03:49 AM Last edit: February 09, 2014, 10:13:19 AM by olu |
|
...
Where one SHOULD see
if (true && block.GetHash() != hashGenesisBlock)
in src/main.cpp of my new crypto, one sees
uint256 hash = block.GetHash(); printf("%s\n", hash.ToString().c_str()); printf("%s\n", hashGenesisBlock.ToString().c_str());
...
The genesis miner is not included in the litecoin sources. You need to add it yourself: http://pastebin.com/aKgggRvZGoing to check up on this and implement, give me some time. - Olu To ensure I'm not derping around: //// debug print uint256 hash = block.GetHash(); printf("%s\n", hash.ToString().c_str()); printf("%s\n", hashGenesisBlock.ToString().c_str()); printf("%s\n", block.hashMerkleRoot.ToString().c_str()); assert(block.hashMerkleRoot == uint256("0xa73e546160e2999f9f17fcfc76c422a04b00acd5846a90a784593951b0987380")); // If genesis block hash does not match, then generate new genesis hash if (true && block.GetHash() != hashGenesisBlock) { printf("Searching for genesis block...\n"); // This will figure out a valid hash and Nonce if you're creating a different genesis block: uint256 hashTarget = CBigNum().SetCompact(block.nBits).getuint256(); uint256 thash; char scratchpad[SCRYPT_SCRATCHPAD_SIZE]; loop { #if defined(USE_SSE2) // Detection would work, but in cases where we KNOW it always has SSE2, // it is faster to use directly than to use a function pointer or conditional. #if defined(_M_X64) || defined(__x86_64__) || defined(_M_AMD64) || (defined(MAC_OSX) && defined(__i386__)) // Always SSE2: x86_64 or Intel MacOS X scrypt_1024_1_1_256_sp_sse2(BEGIN(block.nVersion), BEGIN(thash), scratchpad); #else // Detect SSE2: 32bit x86 Linux or Windows scrypt_1024_1_1_256_sp(BEGIN(block.nVersion), BEGIN(thash), scratchpad); #endif #else // Generic scrypt scrypt_1024_1_1_256_sp_generic(BEGIN(block.nVersion), BEGIN(thash), scratchpad); #endif if (thash <= hashTarget) break; if ((block.nNonce & 0xFFF) == 0) printf("nonce %08X: hash = %s (target = %s)\n", block.nNonce, thash.ToString().c_str(), hashTarget.ToString().c_str()); ++block.nNonce; if (block.nNonce == 0) { printf("NONCE WRAPPED, incrementing time\n"); ++block.nTime; } } printf("block.nTime = %u \n", block.nTime); printf("block.nNonce = %u \n", block.nNonce); printf("block.GetHash = %s\n", block.GetHash().ToString().c_str()); } block.print(); assert(block.GetHash() == hashGenesisBlock); This is what the main.cpp looks like now, but do I have to change the instances of // Special case for the genesis block, skipping connection of its transactions // (its coinbase is unspendable) if (GetHash() == hashGenesisBlock) { view.SetBestBlock(pindex); pindexGenesisBlock = pindex; return true; AND // Get prev block index CBlockIndex* pindexPrev = NULL; int nHeight = 0; if (hash != hashGenesisBlock) { ? Nevermind, ignore this mid-level (low-level) silly crypto-currencyphile. I tried running everything as is and it couldn't build because the word "loop" present within the code you gave me should be replaced with "while (true)". I forgot that (maybe you did too?) for the most part just "loop" doesn't exist in C++. Thanks for the link Solcoin Project.
|
|
|
|
Solcoin Project
|
|
February 09, 2014, 04:30:27 PM |
|
We wrestled quite a while with Windows when building the Qt 4.8 wallet for our currency Solcoin, forked from Litecoin 0.8.6.1. Depending on the versions of GCC, the Boost libraries, OpenSSL and especially BDB, the results varied greatly. The client would run perfectly on one Windows installation but fail on another. The two recurring problems were that the wallet software either refused to start up because of failure to initialize the database, even in the case of creating a brand new such, or it would crash upon exit. We finally got the build right using GCC 4.6.3 (POSIX threading model) instead of 4.4.0 or 4.8.2, Boost 1.55, OpenSSL 1.0.1c, BDB 4.8.30 and our own build of the Qt 4.8.5 libraries, and finally linking all of it statically.
|
|
|
|
olu
Newbie
Offline
Activity: 10
Merit: 0
|
|
February 09, 2014, 04:48:58 PM |
|
We wrestled quite a while with Windows when building the Qt 4.8 wallet for our currency Solcoin, forked from Litecoin 0.8.6.1. Depending on the versions of GCC, the Boost libraries, OpenSSL and especially BDB, the results varied greatly. The client would run perfectly on one Windows installation but fail on another. The two recurring problems were that the wallet software either refused to start up because of failure to initialize the database, even in the case of creating a brand new such, or it would crash upon exit. We finally got the build right using GCC 4.6.3 (POSIX threading model) instead of 4.4.0 or 4.8.2, Boost 1.55, OpenSSL 1.0.1c, BDB 4.8.30 and our own build of the Qt 4.8.5 libraries, and finally linking all of it statically. Oh god.... maybe I should try out my own currency for a bit on different systems before releasing it? I know you are probably busy, but you mind helping out, Solcoin Project? I would not be opposed to compensating you. Also, you did get me to look into solcoin with your name, so maybe that's something I should have done with this account (or with another one?). Anyway, I have a couple of questions to ask you not related to qt or BTC, but trading on Cryptsy. Shoot me a private message, but preferably an email @ o.m.agunloye@gmail.com. This offer is open to anyone who has Dev experience as well, Solcoin Project has just been particularly amiable and helpful. PS: I don't think I'm a newbie, according to the standards set by the forum in terms of knowledge, but I definitely don't have a presence here.
|
|
|
|
Solcoin Project
|
|
February 09, 2014, 06:38:27 PM |
|
... Anyway, I have a couple of questions to ask you not related to qt or BTC, but trading on Cryptsy. Shoot me a private message, but preferably an email @ o.m.agunloye@gmail.com. This offer is open to anyone who has Dev experience as well, Solcoin Project has just been particularly amiable and helpful. You may shoot ME a message or an e-mail Address is in my forum signature.
|
|
|
|
johan11
|
|
February 11, 2014, 05:17:42 PM Last edit: February 11, 2014, 06:19:24 PM by johan11 |
|
I managed to create altcoin.exe i altcoin-qt but when you run show me this error. Any advice? translate window The exception unknown software () in the application at location () Click on OK to terminate the program.
|
|
|
|
johan11
|
|
February 11, 2014, 06:17:38 PM |
|
I managed to create altcoin.exe i altcoin-qt but when you run show me this error. Any advice?
Can't speak that language shown in the picture maybe you can translate it. The exception unknown software () in the application at location () Click on OK to terminate the program.
|
|
|
|
Cassey
Sr. Member
Offline
Activity: 470
Merit: 250
Better to have 100 friends than 100 rubles
|
|
February 12, 2014, 06:44:25 AM Last edit: February 12, 2014, 08:19:04 AM by Cassey |
|
Having problems building boost:
Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\cassey>cd c:\deps
c:\deps>cd boost*
c:\deps\boost_1_55_0>bootstrap.bat mingw Building Boost.Build engine '"VCVARS32.BAT"' is not recognized as an internal or external command, operable program or batch file. The system cannot find the batch label specified - Test_Option '"VCVARS32.BAT"' is not recognized as an internal or external command, operable program or batch file. '"VCVARS32.BAT"' is not recognized as an internal or external command, operable program or batch file. 'cl' is not recognized as an internal or external command, operable program or batch file.
Update (and trimmed post): I tried installing the pre-compile binaries by the final link failed. Went back and tried building 1_53_0 and it worked fine. For hells bell, tried it again in the 1_55_0 and the problem disappeared. Strange, but maybe it will help someone else via Google searching in the future...
Update2: After rebuilding, my coin linked clean - and for the VERY FIRST TIME on windows, actually worked! Thank you SO MUCH for maintaining this thread!
|
Cassey
|
|
|
Cassey
Sr. Member
Offline
Activity: 470
Merit: 250
Better to have 100 friends than 100 rubles
|
|
February 12, 2014, 02:28:06 PM |
|
Same issue as in
#351
Are you sure you now use 1.55 and its not 1.53? Maybe its good to try
#352
I'm not sure if building the rest of the environment, like QT (which came later in the instruction), or if installing the precompiled boost binaries fixed it, but the problem did go away.
|
Cassey
|
|
|
old c coder
|
|
February 13, 2014, 05:00:03 AM |
|
Don't know if Ron and Nitro are still reading this, but thanks for the guide.
You're welcome I have grown from a complete novice to an intermediate crypto-phile/C++ coder thanks to this guide, ... -- Olu
Ron
|
LTC: LUYiMVsrFQewUSPDasSKGzhyTPAkiTeSov BTC: 1DPvP6WoZzaNQ9Nxzd64hjYad1kyQzTTbx YAC: Y3ZggXDvnRJaRwtVGyGJwt6DMLN3EPQpQf The day is coming when a single carrot, freshly observed, will set off a revolution. Paul Cezanne
|
|
|
old c coder
|
|
February 13, 2014, 07:02:10 AM Last edit: February 16, 2014, 03:33:50 AM by old c coder |
|
I have managed to compile Litecoin 0.8.6 wallet without errors on closing but it has an awful windows 95 look. Why is that happening?
How? Depending on what versions of gcc, boost, openssl and bdb I use results can be anything from refusing to link, refusing to start up due to "wallet db error", or crashing on exit. Man, I hate Windows... What makes you think it has anything to do with Windows? I use Qt 4.8.5, gcc 4.4.0, boost 1.50, berkeley db 4.80, and openssl 1.0.1c currently, as I know these are used in several other working wallets, including a few Litecoin 0.8.6 forks that run perfectly.
I use Qt 4.8.4, gcc 4.6.2 (unobtanium now!), Boost 1.53, BerkeleyDB 4.8.30, OpenSSL 1.0.1c or 1.0.1e and levelDB 1.13 and build bitcoin with no problems. I can't speak to litecoin as I don't know when its sources "forked" off of bitcoin. It is important to know what version of bitcoin, and so what date, that an alternate crypto currency was born, as the tool versions that were used at the time would be most appropriate for that alt coin. As the alt coin "matures" one may update the tools, but they need to be updated in a "gradual" "coordinated" fashion. For example, one wouldn't - shouldn't use too much "newer" gccs as their "behavior" is known to "destabilize" "older" Qts for example. Have you tired the tool combinations that fail somehow on Windows, and build the same alt coin (or bitcoin) on Linux (or MacOS) and test to see if they work there? The main problem people have in building bitcoind & bitcoin-qt on Windows is that they aren't meticulous (enough) in following the recipe of nitrogenetics. Of course, it helps if you are knowledgeable on Windows! Especially on command boxes (aka DOS windows). It helps greatly if you know how to use .bat files or .wsh files, that is, how to "do" batch programming. Also it helps if you are knowledgeable on how the Windows path environment is kept, controlled and manipulated. There are many copies of the path at any moment in Windows, you know! There are subtle issues of pathnames with spaces in them, though that is less of an issue now than it was in the past. And also one must be aware of subtleties regarding "\" versus "/" in couching pathnames. None of these are difficult issues, it is just that the knowledge has been lost since there are no longer any definitive books on these subjects, and the general Windows user is no longer expected to know or wants to know, how to do these things. Remember that Windows 7 and 8 now make it even more difficult to "get your fingers in there and meddle around". It helps if one knows the history of Windows and its DOS heritage. Without that knowledge you have to fumble around by analogy with whatever you know about Linux, Unix, MacOs, etc. and try to discern the "truth" of any subtle question by internet "research" and have the good judgement to know what is true, half-true or pure BS. Kind of a vicious circle (catch-22) in which the only way to get knowledge is to know enough already to be able to tell what is knowledge So if you think the bitcoind (and Boost) code is pure and clean, try building it without the gcc -w argument! Let's not even talk about qmake, makefile.release/debug and bitcoin-qt, which doesn't have the -w argument and you know what it "spews forth" What's interesting is that the compiler "warnings" about the bad C++ slang that is being used, as opposed to the preferred slang, i.e. the highly idiomatic, baroque (as Knuth calls it) nature of C++, can be controlled in MSVC++ and one can "see" more clearly what is "going on". The thought is that this should lead to more understanding, but so far, the answers given are swamped by the questions that now appear! Which is why you haven't heard from me (yet) on the Windows MSVC2005 version of bitcoind. I have a "debug" version of bitcoind 0.8.6 that "appears to" run correctly. And yes, Claire123 has a MSVC2012 version of bitcoind (& bitcoin-qt), but do our versions work correctly? Do we have 'release' versions? I am hoping to "GitHub" commit-pull request my MSVC "additions" to the bitcoind sources soon, but only when I feel that the code runs reliably. All of this reminds me of the Zen quote for today: The most dangerous thing in the world is to think you understand something.Ron
|
LTC: LUYiMVsrFQewUSPDasSKGzhyTPAkiTeSov BTC: 1DPvP6WoZzaNQ9Nxzd64hjYad1kyQzTTbx YAC: Y3ZggXDvnRJaRwtVGyGJwt6DMLN3EPQpQf The day is coming when a single carrot, freshly observed, will set off a revolution. Paul Cezanne
|
|
|
Piggy
|
|
February 13, 2014, 11:03:40 AM |
|
tried this yesterday night, but got stuck in this exact same point/error... if anybody got any suggestion
|
|
|
|
Cassey
Sr. Member
Offline
Activity: 470
Merit: 250
Better to have 100 friends than 100 rubles
|
|
February 13, 2014, 03:04:56 PM |
|
Go into your mingw install and replace "winsock.h" with a copy of "winsock2.h".
I tried a variety of ways to force it to be included and none worked for reasons I don't understand, but this brute force approach did!
|
Cassey
|
|
|
Piggy
|
|
February 14, 2014, 01:48:39 PM Last edit: February 14, 2014, 02:02:33 PM by Piggy |
|
i compiled the bitoind.exe and is synchronizing( i can see through the log file in the roaming folder is getting the blocks) i dont really understand how from one guide are coming different problem and different solution but here is mine: about the winsock.h winsock2... in ws2tcpip.h i found this part and seems it's already using winsock2.h and works ( ) so i removed that check... -#if (defined _WINSOCK_H && !defined _WINSOCK2_H) -#error "ws2tcpip.h is not compatable with winsock.h. Include winsock2.h instead." -#endif
#include <winsock2.h> scrolling down about the struct ip_mrq already declared i just commented the declaration: struct ip_mreq { struct in_addr imr_multiaddr; struct in_addr imr_interface; }; to solve the last error i removed this: #if (_WIN32_WINNT >= 0x0501) void WSAAPI freeaddrinfo (struct addrinfo*); int WSAAPI getaddrinfo (const char*,const char*,const struct addrinfo*, struct addrinfo**); int WSAAPI getnameinfo(const struct sockaddr*,socklen_t,char*,DWORD, char*,DWORD,int); #else /* FIXME: Need WS protocol-independent API helpers. */ #endif EDIT: Trying to compile Qt(step 4.2) i get this error:
|
|
|
|
olu
Newbie
Offline
Activity: 10
Merit: 0
|
|
February 14, 2014, 06:53:18 PM |
|
i compiled the bitoind.exe and is synchronizing( i can see through the log file in the roaming folder is getting the blocks) i dont really understand how from one guide are coming different problem and different solution but here is mine: about the winsock.h winsock2... in ws2tcpip.h i found this part and seems it's already using winsock2.h and works ( ) so i removed that check... -#if (defined _WINSOCK_H && !defined _WINSOCK2_H) -#error "ws2tcpip.h is not compatable with winsock.h. Include winsock2.h instead." -#endif
#include <winsock2.h> scrolling down about the struct ip_mrq already declared i just commented the declaration: struct ip_mreq { struct in_addr imr_multiaddr; struct in_addr imr_interface; }; to solve the last error i removed this: #if (_WIN32_WINNT >= 0x0501) void WSAAPI freeaddrinfo (struct addrinfo*); int WSAAPI getaddrinfo (const char*,const char*,const struct addrinfo*, struct addrinfo**); int WSAAPI getnameinfo(const struct sockaddr*,socklen_t,char*,DWORD, char*,DWORD,int); #else /* FIXME: Need WS protocol-independent API helpers. */ #endif EDIT: Trying to compile Qt(step 4.2) i get this error: https://i.imgur.com/tYeqXUI.pngSet permissions/ issue the fix that keeps it from complaining about them. Nitro wrote this somewhere in the guide, but you can get this fix by googling it I think. I'll post the exact solution for this later. everytime I set a genesis block for the daemon and change the nNonce, the epoch time, etc, rebuilding and re-running the coind.exe says the merkle root assertion failed. The thing works perfectly in test net...
|
|
|
|
olu
Newbie
Offline
Activity: 10
Merit: 0
|
|
February 14, 2014, 08:24:42 PM |
|
i compiled the bitoind.exe and is synchronizing( i can see through the log file in the roaming folder is getting the blocks) i dont really understand how from one guide are coming different problem and different solution but here is mine: about the winsock.h winsock2... in ws2tcpip.h i found this part and seems it's already using winsock2.h and works ( ) so i removed that check... -#if (defined _WINSOCK_H && !defined _WINSOCK2_H) -#error "ws2tcpip.h is not compatable with winsock.h. Include winsock2.h instead." -#endif
#include <winsock2.h> scrolling down about the struct ip_mrq already declared i just commented the declaration: struct ip_mreq { struct in_addr imr_multiaddr; struct in_addr imr_interface; }; to solve the last error i removed this: #if (_WIN32_WINNT >= 0x0501) void WSAAPI freeaddrinfo (struct addrinfo*); int WSAAPI getaddrinfo (const char*,const char*,const struct addrinfo*, struct addrinfo**); int WSAAPI getnameinfo(const struct sockaddr*,socklen_t,char*,DWORD, char*,DWORD,int); #else /* FIXME: Need WS protocol-independent API helpers. */ #endif EDIT: Trying to compile Qt(step 4.2) i get this error: https://i.imgur.com/tYeqXUI.pngSet permissions/ issue the fix that keeps it from complaining about them. Nitro wrote this somewhere in the guide, but you can get this fix by googling it I think. I'll post the exact solution for this later. everytime I set a genesis block for the daemon and change the nNonce, the epoch time, etc, rebuilding and re-running the coind.exe says the merkle root assertion failed. The thing works perfectly in test net... Nvm, fixed it. Apparently when they say add the config file AFTER it tells you that you don't have one, they really do mean only AFTER.
|
|
|
|
TechAUmNu
Newbie
Offline
Activity: 4
Merit: 0
|
|
February 14, 2014, 09:15:15 PM |
|
I am currently trying to compile litecoin-qt.exe using makefile.debug but keep getting this error: c:/deps/mingw/bin/../lib/gcc/i686-w64-mingw32/4.6.2/../../../../i686-w64-mingw32 /bin/ld.exe: cannot find -lQtGuid c:/deps/mingw/bin/../lib/gcc/i686-w64-mingw32/4.6.2/../../../../i686-w64-mingw32 /bin/ld.exe: cannot find -lQtNetworkd c:/deps/mingw/bin/../lib/gcc/i686-w64-mingw32/4.6.2/../../../../i686-w64-mingw32 /bin/ld.exe: cannot find -lQtCored collect2: ld returned 1 exit status
I think its something to do with Qt but I cant figure out what... Any ideas? I am using boost 1.55 db 4.6.3 mingw 2.6.2 openssl-1.0.1c qt 4.8.5 I am able to compile using makefile.release but it just runs for a few seconds with no GUI and then stops again.
|
|
|
|
Cassey
Sr. Member
Offline
Activity: 470
Merit: 250
Better to have 100 friends than 100 rubles
|
|
February 14, 2014, 09:50:22 PM Last edit: February 15, 2014, 02:05:42 AM by Cassey |
|
I had exactly the same problem, as did several others. Solved it by going back to post #1 in this thread, which has been routinely updated, and following the instructions EXACTLY - use all the same packages and releases as specified in post #1.
|
Cassey
|
|
|
|