Feathercoin daemon and wallet production version 0.18.1
Old daemon and wallet version 0.17.0.1

[Dev] Feathercoin 0.9.6.2 * Maintenance fix, build & upgrade issues notes.


  • Moderators | Tip wrapper

    Remaining Messages no Debug:

    2017-08-13 13:48:40 partner xxx.xxx.xxx.xxx:9336 using obsolete version 60002; disconnecting
    2017-08-13 13:48:40 ProcessMessage(version, 102 bytes) FAILED
    2017-08-13 14:00:00 ERROR: CAlert::CheckSignature() : verify signature failed
    2017-08-13 14:00:51 ERROR: CheckBlockHeader() : block with timestamp before last checkpoint
    2017-08-13 14:00:51 ERROR: ProcessBlock() : CheckBlock FAILED
    2017-08-13 14:00:51 ERROR: CheckBlockHeader() : block with timestamp before last checkpoint
    2017-08-13 14:00:51 ERROR: ProcessBlock() : CheckBlock FAILED

    Large block same message then :

    2017-08-13 14:08:52 socket recv error Connection reset by peer (104)

    ~Block 1145437

    src/main.cpp - Line 2835
    2017-08-13 14:00:51 ERROR: CheckBlockHeader() : block with timestamp before last checkpoint

         if (deltaTime < 0)
           {
               return state.DoS(100, error("CheckBlockHeader() : block with timestamp before last checkpoint"),
             REJECT_CHECKPOINT, "time-too-old");
    

    These are old rejected blocks, I assume, so not required on sync.

    main.cpp - Updated code

         {
             if (fDebug)
                  LogPrintf("CheckBlockHeader() : block with timestamp before last checkpoint");
             return state.DoS(100, NULL,
                              REJECT_CHECKPOINT, "time-too-old");
         }
    

    Code added

    main.cpp Line 3199

    if (!CheckBlock(*pblock, state, INT_MAX)) 
    	  return error("ProcessBlock() : CheckBlock FAILED");
    

    Updated to :

    if (!CheckBlock(*pblock, state, INT_MAX)) 
              if (fDebug)
                  LogPrintf("ProcessBlock() : CheckBlock FAILED");
    	  return true ;
    

    netbase.cpp

    Update with Bitcoin bug fix to correct (104) error

    https://github.com/bitcoin/bitcoin/issues/4552
    https://github.com/bitcoin/bitcoin/commit/109849e204f91d8b04b0e57da87e45b461096b50


  • Moderators | Tip wrapper

    Full sync from scratch Test, 0.9.6.2 in progress

    So far : 2.5 years in 13 hours : 5 hrs P/Day. - estimate 20 hrs full sync time (~4pm).

    Remaining Debug messages :

    2017-08-13 18:12:10 socket recv error Connection reset by peer (104)
    2017-08-13 18:25:03 socket recv error Connection timed out (110)

    Recommendation :

    The Debug.log testing has shown that a number of operation, which were envisioned as errors initially, have occurred in the blockchain. This has meant that certain settings, loop levels or error messages are repeated during re-syncronisation of the blockchain.

    Where’as 0.11.2 version already contain some speed ups that effect Bitcoin, (secp256k1) the FTC block sync is considerably reduced, but at ~22 hrs (estimate), would still seem long.

    ToDo.

    Set up a script and chron job to pole feathercoin during a resync and write Blocknumber every minute. This will 1200 data points to identify any problem block chains. These may indicate further settings that can be tweaked.

     feathercoind getinfo >> StallTest.txt
    

    Preliminary test show synchronization is running pretty consistently at :

    BlocksPerHour
    39750
    BlocksPerMinute
    662

    Full sync took 29 Hours, with no special settings and 4 outputs to debug, about lost connections…

    BlockSycTest

    Get Block count was often delayed

    BlockSycTest

    Blocks per minute

    BlockSycTest

    Testable

    -dbcache to a value around 4000

    8 connections limitation

    Give Higher CPU Priority to Bitcoin-Qt Process
    The above approach of blockchain import should be faster than syncing the whole blockchain block by block. Give the process higher CPU priority might further help speeding up the blockchain import especially you have more CPU cycle at your disposal. If you’re using Mac OS X, and assuming the Process ID (PID) of Bitcoin-Qt is 2202, use the following command to give Bitcoin-Qt process hight CPU priority:

    sudo renice -20 -p 2202
    

    *-20 is the nice value a value between -20 and +19. The lower the nice value, the higher priority the process gets.


  • Moderators | Tip wrapper

    Results of Sync Speed Tests

    Found very interesting Result from Sync speed Tests :::::

    The sync speed dropped from ~710 Blocks per minute to ~670 Blocks per minute

    After the synchronsiation passed the Hard Fork for : One minute Blocks, Neoscrypt and eHRC additional calculations.

    This is actually impressive as we are processing 2.5 times the amount of blocks and re-targeting every block! It indicates that Neoscrypt is efficient. Thanks @Ghostlander.

    Although it might also be effected by other factors, such as the increasing number of transactions, it mean that it would be worthwhile to do the Neoscrypt update :

    https://github.com/ghostlander/Phoenixcoin/commit/ddbdbf6cbff4ca52f87268f28c60d588bf843344

    I suggest we test that in 0.9.6.2 as the best version / (none alpha) we have at the moment.


  • Moderators | Tip wrapper

    Results of dbcache test

    Comparison shows a slight improvement with dbcache set to 3000, particularly as glitch in initial test associated with dropout, or network effect.

    It may be worth while to increase default to 1000 from 300, minor downside of disk space / memory.

    dbcache set to 3000


  • Moderators | Tip wrapper

    Test changing max outbound connections

    Test upping default from lowly 8 to more reasonable 30

    net.cpp

    static const int MAX_OUTBOUND_CONNECTIONS = 30;

    1st test : slower only maintained 3 connections.

    Up from 125 to 200:
    int nMaxConnections = 200;


  • Moderators | Tip Wellenreiter

    @wrapper

    It takes some time to build up more connections, I usually have 8 connections and after one or more hours it goes up to 10-12.
    The explorer hosts maintain given or taken ~ 100 peers after some days being online


  • Moderators | Tip wrapper

    LTC also recommends 1000MB max dbcache. Testing increase min from 4 to 10.

    src/txdb.h

     // -dbcache default (MiB)
    static const int64_t nDefaultDbCache = 100;
    // max. -dbcache in (MiB)
    static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 4096 : 1024;
     // min. -dbcache in (MiB)
    static const int64_t nMinDbCache = 4;

  • Moderators | Tip wrapper

    stealth.cpp - 0.9.6.2

    std::string CStealthAddress::Encoded() const
    {
    // https://wiki.unsystem.net/index.php/DarkWallet/Stealth#Address_format
    // [version] [options] [scan_key] [N] ... [Nsigs] [prefix_length] ...
    
    data_chunk raw;
    raw.push_back(stealth_version_byte);
    
    raw.push_back(options);
    
    raw.insert(raw.end(), scan_pubkey.begin(), scan_pubkey.end());
    raw.push_back(1); // number of spend pubkeys
    raw.insert(raw.end(), spend_pubkey.begin(), spend_pubkey.end());
    raw.push_back(0); // number of signatures
    raw.push_back(0); // ?
    
    AppendChecksum(raw);
    
    return EncodeBase58(raw);
    };
    

    In this shadow coding why is raw.push_back(0); // ? called twice?


  • Moderators | Tip wrapper

    [FAQ] How does the stealth keys work

    stealth.cpp

    int StealthSecret(ec_secret& secret, ec_point& pubkey, const ec_point& pkSpend, ec_secret& sharedSOut, ec_point& pkOut)
    {
        /* 
    send:
        secret = ephem_secret, pubkey = scan_pubkey
    
    receive:
        secret = scan_secret, pubkey = ephem_pubkey
        c = H(dP)
    
    Q = public scan key (EC point, 33 bytes)
    d = private scan key (integer, 32 bytes)
    R = public spend key
    f = private spend key
    
    Q = dG  // Single use private key
    R = fG
    
    Sender (has Q and R, not d or f):
    
    P = eG
    
    c = H(eQ) = H(dP)
    R' = R + cG
        
    Recipient gets R' and P
    test 0 and infinity?
    */

  • Moderators | Tip Wellenreiter

    @wrapper said in [Dev] Feathercoin 0.9.6.2 * Maintenance fix, build & upgrade issues notes.:

    In this shadow coding why is raw.push_back(0); // ? called twice?

    Raw is an array like data structure and you add two items to the array


  • Moderators | Tip wrapper

    [FAQ] How do I create a file of the Feathercoin blockchain that I can import into other wallets?

    You can concatenate the FTC blocks into a bootstrap.dat file. This bootstrap.dat file can be copied into the .feathercoin or blockchain directory of the new wallet.

    When it starts the new wallet will recognize the bootstrap.dat and import the blockchain from disk, but will do all the normal synchronization validation checks in the process. Do not restart as it will rename the bootstrap.dat and proceed online.

    You can lelete the bootsrap.dat after the sync.

    Find your local blockchain:

    cd ~/.feathercoin/blocks
    

    Concatenate all your blkxxxxx.dat files and place the result in bootstrap.dat:

    cat blk* > bootstrap.dat
    

    In Windows :

    COPY /b blk0001.dat+blk0002.dat bootstrap.dat

  • Moderators | Tip wrapper

    Sync speed test 0.9.6.2-dev using Bootstrap.dat

    Interesting points to note :

    Change over to Neoscrypt starts at 2:30 hrs or Hard Fork 4 - Block 432000

    Blocks processed against time

    0.9.6.1 sync speed test

    Block Rate per minute against blocks

    0.9.6.1 sync speed test


  • Moderators | Tip wrapper

    Review if 0.9.x series Bitcoin Commits

    0.9.6.3.x

    1. Don’t poll showmyip.com, it doesn’t exist anymore

    Fixes #4679.

    This leaves us with only one candidate, checkip.dyndns.org.
    GetMyExternalIP should be phased out as soon as possible.

    https://github.com/bitcoin/bitcoin/commit/5332b0a429f42c49c4b70e71870f2202c0cfa844


  • Moderators | Tip wrapper

    Testing @Bushstar fixes / regtest

    Console message :
    SSE2 unsupported, optimisations disabled

    init.cpp ~L480

    opt_flags = cpu_vec_exts();
        if(GetBoolArg("-sse2", true)) {
            /* Verify hardware SSE2 support */
            if(opt_flags & 0x00000020) {
                printf("SSE2 optimisations enabled\n");
                nNeoScryptOptions |= 0x1000;
            } else {
                printf("SSE2 unsupported, optimisations disabled\n");
            }
        } else {
            printf("SSE2 optimisations disabled\n");
        }
    

    Notes

    SSE2 stands for Streaming SIMD Extensions 2 which is a standard on processors for a long time. This will enhance the security of your hardware against malicious software attacks by viruses and other malware.

    These three are actually a hard core requirement for Windows 8 installation. If anyone of them is missing, Windows 8 will not install on your computer. So this has to be taken care even before you buy a new license of Windows 8.

    https://stackoverflow.com/questions/2403660/determine-processor-support-for-sse2

    Call CPUID with eax = 1 to load the feature flags in to edx. Bit 26 is set if SSE2 is available.

    https://gist.github.com/hi2p-perim/7855506

    I’ve output the value of opt_flags
    opt_flags : = 0 SSE2 optimisations disabled

    Putting -sse2=false or true seemed to work , so -sse2 is true


  • Regular Member | Tip ghostlander

    It means the flags haven’t been set up properly. Maybe compiled without the assembly code.


  • Moderators | Tip wrapper

    error message review review.

    main.cpp ~L502, ~L 899, ~L2866, L898, L1502
    miner…cpp L486
    db.cpp L106

    src/addrman.h ~L422 logprint, ~L411, logprint, ~L442 logprint

    net.cpp ~L318 , L362
    https://github.com/wrapperband/Feathercoin/commit/042e6c874b8e7a2a79b7daad2ffe6642efbcb291

    netbase L360 LogPrint(),

    checkpointsync.cpp L275, L291, L336 , L470, L381, L438, L444, L516,
    https://github.com/wrapperband/Feathercoin/commit/161ac3d8ea70e17a324b5f835788f49fa6b597b3

    rpcserver.cpp L666,


  • | Tip Bushstar

    It should be adding the assembly, if you try and compile without setting AM_PROG_AS it complains. I’ll take a look at it and see what’s wrong.


  • Moderators | Tip wrapper

    Error creating wallet.dat from scratch.

    Works with release 0.9.6.1 Doesn’t work with --incompatible database.

    BDB 4.8 and 5.1 have worked previously, seems to be issue with bdb 5.3

    error creating a new wallet.dat. 0.9.6.2

    EXCEPTION: St13runtime_error
    CDB : Error 22, can’t open database wallet.dat
    feathercoin in Runaway exception

    Error initializing wallet database environment /home/wrapper/.feathercoin!


  • Moderators | Tip wrapper


  • Moderators | Tip wrapper

    [FAQ] Is it trivial to change a Feathercoin portable wallet file to libdb 4.8?

    Version 4.8 is not a requirement, just a recommendation. You can compile your own version and use newer versions of BDB by passing --with-incompatible-bdb to configure.

    The main reason it is discouraged is because it breaks compatibility with the pre-built binaries. If you’re building from source you may not care.

    But even if you do, it is trivial to convert your wallet back to a 4.8 wallet if you’re stuck with a 5.1 or 5.3 one. Use the bdb tools (packages db4.8-util db5.1-util on Ubuntu):

    Code:

    db5.1_dump wallet.dat.db5 | db4.8_load wallet.dat.db4
    

    [Ref:]
    https://bitcointalk.org/index.php?topic=502482.0