[Dev] Feathercoin 0.9.6.2 * Maintenance fix, build & upgrade issues notes.
-
The first time it does preliminary checks it says hash is different to what it then goes straight through CheckProofOfWork()…
hash=d31a46d558974e7b07c6f63a594bfba0fa435659ebca05108f669f58a6d34cfc
then :
hash=000000001bc0c162a3676627559a0ec6f62dd9876ad63d8382859d2ead802875
2017-09-13 12:48:46 CheckProofOfWork() hash=d31a46d558974e7b07c6f63a594bfba0fa435659ebca05108f669f58a6d34cfc 2017-09-13 12:48:46 CheckProofOfWork() nBits=472148865 2017-09-13 12:48:46 CheckProofOfWork() bnTarget.getuint256=00000000246b8100000000000000000000000000000000000000000000000000 2017-09-13 12:48:46 ERROR: matches claimed amount, CheckProofOfWork() : hash doesn't match nBits 2017-09-13 12:48:46 CheckProofOfWork() hash=000000001bc0c162a3676627559a0ec6f62dd9876ad63d8382859d2ead802875
-
Neoscrypt is little endian, may be a byte swap will do the trick.
Was fighting with that for p2pool already.
Here is the python code snippet to get it running in p2pool.
getwork._swap4(pack.IntType(256).pack(x['previous_block'])).encode('hex'), # prevhash x['coinb1'].encode('hex'), # coinb1 x['coinb2'].encode('hex'), # coinb2 [pack.IntType(256).pack(s).encode('hex') for s in x['merkle_link']['branch']], # merkle_branch getwork._swap4(pack.IntType(32).pack(x['version'])).encode('hex'), # version getwork._swap4(pack.IntType(32).pack(x['bits'].bits)).encode('hex'), # nbits getwork._swap4(pack.IntType(32).pack(x['timestamp'])).encode('hex'), # ntime
Definition of swap4:
def _swap4(s): if len(s) % 4: raise ValueError() return ''.join(s[x:x+4][::-1] for x in xrange(0, len(s), 4))
Not sure, how to realize that in C++
-
Testing 0.9.6.2- head
@Wellenreiter @Bushstar
I have tested head and am unable to compile with --qrcodes=yesundefined reference to ` QRCodeDialog::QRCodeDialog(QString const&, QString const&, bool, QWidget*)’
-
try --with-gui=qt5
qt4 support is broken in 0.9x, but tested first and then selected by configure.
-
I am compiling with the standard switches, exactly the same as before, except now qrcodes=no
./configure --with-gui=qt5 --enable-tests=no --enable-upnp-default --with-qrcode=no --enable-wallet=yes --enable-shared --disable-hardening LDFLAGS=“-L${BDB_PREFIX}/lib/” CPPFLAGS=“-I${BDB_PREFIX}/include/” CXXFLAGS=“$CXXFLAGS -fPIC -m64 -std=c++11”
-
Then check, if you have a qrcodedialog in the …/qt/forms directory.
-
Fixed.
I’ve git cloned from head. There is nothing missing and I haven’t done anything to it except add my build.sh and change my compile to qrcodes=no to get it compile… -
Bitcoin 0.9.x Backports 2
#68
https://github.com/bitcoin/bitcoin/commit/0a94661e8db94e84ecbf1ea45a51fb3c7fb77283
Disable SSLv3 (in favor of TLS) for the RPC client and server.
TLS is subject to downgrade attacks when SSLv3 is available, and
SSLv3 has vulnerabilities.The popular solution is to disable SSLv3. On the web this breaks
some tiny number of very old clients. While Bitcoin RPC shouldn’t
be exposed to the open Internet, it also shouldn’t be exposed to
really old SSL implementations, so it shouldn’t be a major issue
for us to disable SSLv3.There is more information on the downgrade attacks and disabling
SSLv3 at https://disablessl3.com/ .src/rpcclient.cpp#L43
- context.set_options(ssl::context::no_sslv2); + context.set_options(ssl::context::no_sslv2 | ssl::context::no_sslv3);
src/rpcserver.cpp
- rpc_ssl_context->set_options(ssl::context::no_sslv2); + rpc_ssl_context->set_options(ssl::context::no_sslv2 | ssl::context::no_sslv3);
-
Consensus: guard against openssl’s new strict DER checks
0.9 (#106)
New versions of OpenSSL will reject non-canonical DER signatures. However,
it’ll happily decode them. Decode then re-encode before verification in order
to ensure that it is properly consumed.Github-Pull: #5634
https://github.com/bitcoin/bitcoin/commit/b8e81b7ccd4490155e3345fc73346ff8c3a77524
- // -1 = error, 0 = bad sig, 1 = good - if (ECDSA_verify(0, (unsigned char*)&hash, sizeof(hash), &vchSig[0], vchSig.size(), pkey) != 1) - return true;
+ // New versions of OpenSSL will reject non-canonical DER signatures. de/re-serialize first. unsigned char *norm_der = NULL; + ECDSA_SIG *norm_sig = ECDSA_SIG_new(); + const unsigned char* sigptr = &vchSig[0]; + d2i_ECDSA_SIG(&norm_sig, &sigptr, vchSig.size()); + int derlen = i2d_ECDSA_SIG(norm_sig, &norm_der); + ECDSA_SIG_free(norm_sig); + if (derlen <= 0) + + // -1 = error, 0 = bad sig, 1 = good + bool ret = ECDSA_verify(0, (unsigned char*)&hash, sizeof(hash), norm_der, derlen, pkey) == 1; + OPENSSL_free(norm_der); + return ret;
-
@Bushstar - ufo fails to build on Ubuntu, here is the fix for the issue …
https://github.com/FeatherCoin/Feathercoin/pull/139/commits/35e34280cf929d086e72e9d3ac6719c8a2fdd559
chainparams boost version fixes :
chainparams.cpp ~L73
//base58Prefixes[PUBKEY_ADDRESS] = list_of(27); base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,27); // base58Prefixes[SCRIPT_ADDRESS] = list_of(5); base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,5); // base58Prefixes[SECRET_KEY] = list_of(128); base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,128); // base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x04)(0x88)(0xB2)(0x1E); base58Prefixes[EXT_PUBLIC_KEY] = boost::assign::list_of(0x04)(0x88)(0xB2)(0x1E).convert_to_container<std::vector<unsigned char> >(); // base58Prefixes[EXT_SECRET_KEY] = list_of(0x04)(0x88)(0xAD)(0xE4); base58Prefixes[EXT_SECRET_KEY] = boost::assign::list_of(0x04)(0x88)(0xAD)(0xE4).convert_to_container<std::vector<unsigned char> >();
chainparams.cpp ~153
// base58Prefixes[PUBKEY_ADDRESS] = list_of(111); base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,111); // base58Prefixes[SCRIPT_ADDRESS] = list_of(196); base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,196); // base58Prefixes[SECRET_KEY] = list_of(239); base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,2399); // base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x04)(0x35)(0x87)(0xCF); base58Prefixes[EXT_PUBLIC_KEY] = boost::assign::list_of(0x04)(0x35)(0x87)(0xCF).convert_to_container<std::vector<unsigned char> >(); // base58Prefixes[EXT_SECRET_KEY] = list_of(0x04)(0x35)(0x83)(0x94); base58Prefixes[EXT_SECRET_KEY] = boost::assign::list_of(0x04)(0x35)(0x83)(0x94).convert_to_container<std::vector<unsigned char> >();
-
main.cpp Logprintf \n
Action
-
main.cpp - return LogPrintf CheckBlockHeader() to being error message.
-
Leave others as is.
LogPrintf("CheckBlockHeader() : block with timestamp before last checkpoint"); LogPrintf("| "); LogPrintf("| "); LogPrintf("| "); LogPrintf("%s : Deserialize or I/O error - %s", __func__, e.what());
wallet.cpp
Actioin Fix all missing \n in LogPrintf() errors
// if (fDebug) LogPrintf("FindStealthTransactions() tx:%s,", tx.GetHash().GetHex().c_str()); // if (fDebug) LogPrintf("StealthSecret....."); LogPrintf("CommitTransaction() : Error: Transaction not valid"); LogPrintf("SendMoney() : %s", strError);
rpcserver.cpp
Action left as original
// LogPrintf("%s: Warning: %s when cancelling acceptor", __func__, ec.message()); // LogPrintf("%s: Warning: %s when cancelling timer", __func__, ec.message());
rpcdump.cpp
Action Correct message reference to Bitcoin. Correct / check - Translation text.
file << strprintf("# Wallet dump created by Bitcoin %s (%s)\n", CLIENT_BUILD, CLIENT_DATE);
multisigdialog.cpp
Action No action, dev can fix when they uncomment.
// if (fDebug)printf("updateAddressBalance GetDepthInMainChain %d\n", wtx.GetDepthInMainChain()); // if (fDebug)printf("updateAddressBalance nValue %s\n", BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), txout.nValue).toStdString().c_str()); // if (fDebug)printf("updateAddressBalance nAmount %s\n", BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), nAmount).toStdString().c_str());
miner.cpp
Action Most left as is, couple reviewed and commented out.
LogPrintf("COrphan(hash=%s, dPriority=%.1f, dFeePerKb=%.1f)\n", ptx->GetHash().ToString(), dPriority, dFeePerKb); LogPrintf(" setDependsOn %s\n", hash.ToString()); bool fPrintPriority = GetBoolArg("-printpriority", false); LogPrintf("ERROR: mempool transaction missing input\n"); if (fPrintPriority) LogPrintf("priority %.1f feeperkb %.1f txid %s\n", dPriority, dFeePerKb, tx.GetHash().ToString()); LogPrintf("CreateNewBlock(): total size %u\n", nBlockSize); //// debug print LogPrintf("FeathercoinMiner:\n"); LogPrintf("proof-of-work found \n hash: %s \ntarget: %s\n", hash.GetHex(), hashTarget.GetHex()); pblock->print(); LogPrintf("generated %s\n", FormatMoney(pblock->vtx[0].vout[0].nValue)); LogPrintf("FeathercoinMiner started\n"); LogPrintf("Running FeathercoinMiner with %u transactions in block (%u bytes)\n", pblock->vtx.size(), LogPrintf("hashmeter %6.0f khash/s\n", dHashesPerSec/1000.0); LogPrintf("FeathercoinMiner terminated\n");
util.cpp
Action No action left as is.
LogPrintf("%+d ", n); LogPrintf("| ");
-
-
main.cpp
Debug messages remaining.
2017-09-22 10:00:20 nActualTimespan = 23 before bounds 2017-09-22 10:00:20 RETARGET: nActualTimespanShort = 61, nActualTimespanMedium = 55, nActualTimespanLong = 65, nActualTimeSpanAvg = 60, nActualTimespan (damped) = 60 2017-09-22 10:00:20 CheckProofOfWork() hash=000000000c459c4744ba2c6d04f1b3b137d8d4bad5ca8eed9abd5cf95f8a18fc 2017-09-22 10:00:20 CheckProofOfWork() nBits=470597168 2017-09-22 10:00:20 CheckProofOfWork() bnTarget.getuint256=000000000cbe3000000000000000000000000000000000000000000000000000 2017-09-22 10:00:20 CheckProofOfWork() hash=000000000c459c4744ba2c6d04f1b3b137d8d4bad5ca8eed9abd5cf95f8a18fc 2017-09-22 10:00:20 CheckProofOfWork() nBits=470597168 2017-09-22 10:00:20 CheckProofOfWork() bnTarget.getuint256=000000000cbe3000000000000000000000000000000000000000000000000000 2017-09-22 10:00:20 UpdateTip: new best=5e454165c26d7d2115e564511ba041e05da416286607eb95cb724845e3fde581 height=1893653 log2_work=58.112033 tx=3857100 date=2017-09-22 07:31:49 progress=0.999833
-
Re : -dumpwallet - https://github.com/FeatherCoin/Feathercoin/issues/236
rpcdump.cpp
file << strprintf("# Wallet dump created by Bitcoin %s (%s)\n", CLIENT_BUILD, CLIENT_DATE);
Todo / Test : Compare with @ghostlanders FTC 0.8.4 version?
https://github.com/FeatherCoin/Feathercoin/commits/master-0.8
Re: @looarn
Here what I found today, don’t know if it’s a known issue ?
https://github.com/FeatherCoin/Feathercoin/issues/236Basicly dumpwallet, only dump header, the content of the wallet doesn’t show.
-
Bitcoin 0.9.3 potential backports to FTC 0.9.6.2
Action: not implemented
consensus: guard against openssl’s new strict DER checks
New versions of OpenSSL will reject non-canonical DER signatures. However,
it’ll happily decode them. Decode then re-encode before verification in order
to ensure that it is properly consumed.Github-Pull: #5634
Rebased-From: 488ed32https://github.com/bitcoin/bitcoin/commit
https://github.com/bitcoin/bitcoin/commit/60c51f1c381bbd93c70cfdf41c6688609a7956fc
Action: not implemented
fail immediately on an empty signature
Github-Pull: #5634
Rebased-From: 8dccba6/b8e81b7ccd4490155e3345fc73346ff8c3a77524 -
Bug in FTC 0.9.6.xxx
https://github.com/FeatherCoin/Feathercoin/issues/239
Confimed same bug in FTC.
https://github.com/litecoin-project/litecoin/issues/388
`static CBlock CreateGenesisBlock(const char* pszTimestamp, const CScript& genesisOutputScript, uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward)
{
CMutableTransaction txNew;
txNew.nVersion = 1;
txNew.vin.resize(1);
txNew.vout.resize(1);/// In this line where 486604799 ==> 1d00ffff Which is Bitcoin’s nBits value Should not be used
/// but instead 504365040 this value should have been used. I don’t know if it can cause any problem
/// that’s what i found and I wanted to share.
txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << std::vector((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));
txNew.vout[0].nValue = genesisReward;
txNew.vout[0].scriptPubKey = genesisOutputScript;CBlock genesis;
genesis.nTime = nTime;
genesis.nBits = nBits;
genesis.nNonce = nNonce;
genesis.nVersion = nVersion;
genesis.vtx.push_back(MakeTransactionRef(std::move(txNew)));
genesis.hashPrevBlock.SetNull();
genesis.hashMerkleRoot = BlockMerkleRoot(genesis);
return genesis;}`
From FTC — 0.9.6.1
https://github.com/FeatherCoin/Feathercoin/blob/master-0.9/src/chainparams.cpp#L66
-
This looks like a worthwhile update to Zxing, gives improved edge detection for QR codes and more java code converted to C++.